diff --git a/.github/workflows/dotnet-desktop.yml b/.github/workflows/dotnet-desktop.yml
new file mode 100644
index 0000000..41bd407
--- /dev/null
+++ b/.github/workflows/dotnet-desktop.yml
@@ -0,0 +1,62 @@
+name: .NET Core Desktop
+
+on:
+ push:
+ tags:
+ - '*'
+
+jobs:
+ build:
+
+ strategy:
+ matrix:
+ configuration: [Debug]
+
+ runs-on: windows-latest # For a list of available runner types, refer to
+ # https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idruns-on
+
+ steps:
+ - name: Checkout code.
+ uses: actions/checkout@v2
+
+ - name: Setup .NET
+ uses: actions/setup-dotnet@v1
+ with:
+ dotnet-version: 5.0.x
+
+ - name: Add msbuild to PATH
+ uses: microsoft/setup-msbuild@v1.0.2
+
+ - name: Setup Nuget
+ uses: Nuget/setup-nuget@v1.0.5
+
+ - name: Restore nuget packages
+ run: nuget restore src/MonsterMonitor.sln
+
+ - name: Build
+ run: msbuild src/MonsterMonitor.sln /p:Configuration=${{ matrix.configuration }} /p:OutputPath=/app
+
+ - name: Pack
+ run: cd /app && 7z a ./MonsterMonitor.zip /app/*
+
+ - name: Create Release
+ id: create_release
+ uses: actions/create-release@v1
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ with:
+ tag_name: ${{ github.ref }}
+ release_name: ${{ github.ref }}
+ draft: false
+ prerelease: false
+
+ - name: Upload Release Asset
+ id: upload-release-asset
+ uses: actions/upload-release-asset@v1
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ with:
+ upload_url: ${{ steps.create_release.outputs.upload_url }} # This pulls from the CREATE RELEASE step above, referencing it's ID to get its outputs object, which include a `upload_url`. See this blog post for more info: https://jasonet.co/posts/new-features-of-github-actions/#passing-data-to-future-steps
+ asset_path: /app/MonsterMonitor.zip
+ asset_name: MonsterMonitor.zip
+ asset_content_type: application/zip
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..e664014
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,294 @@
+# Huge kudos to all contributors to https://github.com/github/gitignore which is where
+# this file came from.
+
+syntax: glob
+## Ignore Visual Studio temporary files, build results, and
+## files generated by popular Visual Studio add-ons.
+
+# User-specific files
+*.suo
+*.user
+*.userosscache
+*.sln.docstates
+
+# User-specific files (MonoDevelop/Xamarin Studio)
+*.userprefs
+
+#settings
+myentunnel.ini
+
+# Build results
+[Dd]ebug/
+[Dd]ebugPublic/
+[Rr]elease/
+[Rr]eleases/
+x64/
+x86/
+bld/
+[Bb]in/
+[Oo]bj/
+[Ll]og/
+
+# Visual Studio 2015 cache/options directory
+.vs/
+# Uncomment if you have tasks that create the project's static files in wwwroot
+#wwwroot/
+
+# MSTest test Results
+[Tt]est[Rr]esult*/
+[Bb]uild[Ll]og.*
+
+# NUNIT
+*.VisualState.xml
+TestResult.xml
+
+# Build Results of an ATL Project
+[Dd]ebugPS/
+[Rr]eleasePS/
+dlldata.c
+
+# DNX
+project.lock.json
+artifacts/
+
+*_i.c
+*_p.c
+*_i.h
+*.ilk
+*.meta
+*.obj
+*.pch
+*.pdb
+*.pgc
+*.pgd
+*.rsp
+*.sbr
+*.tlb
+*.tli
+*.tlh
+*.tmp
+*.tmp_proj
+*.log
+*.vspscc
+*.vssscc
+.builds
+*.pidb
+*.svclog
+*.scc
+
+# Chutzpah Test files
+_Chutzpah*
+
+# Visual C++ cache files
+ipch/
+*.aps
+*.ncb
+*.opendb
+*.opensdf
+*.sdf
+*.cachefile
+*.VC.db
+*.VC.VC.opendb
+
+# Visual Studio profiler
+*.psess
+*.vsp
+*.vspx
+*.sap
+
+# TFS 2012 Local Workspace
+$tf/
+
+# Guidance Automation Toolkit
+*.gpState
+
+# ReSharper is a .NET coding add-in
+_ReSharper*/
+*.[Rr]e[Ss]harper
+*.DotSettings.user
+
+# JustCode is a .NET coding add-in
+.JustCode
+
+# TeamCity is a build add-in
+_TeamCity*
+
+# DotCover is a Code Coverage Tool
+*.dotCover
+
+# NCrunch
+_NCrunch_*
+.*crunch*.local.xml
+nCrunchTemp_*
+
+# MightyMoose
+*.mm.*
+AutoTest.Net/
+
+# Web workbench (sass)
+.sass-cache/
+
+# Installshield output folder
+[Ee]xpress/
+
+# DocProject is a documentation generator add-in
+DocProject/buildhelp/
+DocProject/Help/*.HxT
+DocProject/Help/*.HxC
+DocProject/Help/*.hhc
+DocProject/Help/*.hhk
+DocProject/Help/*.hhp
+DocProject/Help/Html2
+DocProject/Help/html
+
+# Click-Once directory
+publish/
+
+# Publish Web Output
+*.[Pp]ublish.xml
+*.azurePubxml
+# TODO: Comment the next line if you want to checkin your web deploy settings
+# but database connection strings (with potential passwords) will be unencrypted
+*.pubxml
+*.publishproj
+
+# Microsoft Azure Web App publish settings. Comment the next line if you want to
+# checkin your Azure Web App publish settings, but sensitive information contained
+# in these scripts will be unencrypted
+PublishScripts/
+
+# NuGet Packages
+*.nupkg
+# The packages folder can be ignored because of Package Restore
+**/packages/*
+# except build/, which is used as an MSBuild target.
+!**/packages/build/
+# Uncomment if necessary however generally it will be regenerated when needed
+#!**/packages/repositories.config
+# NuGet v3's project.json files produces more ignoreable files
+*.nuget.props
+*.nuget.targets
+
+# Microsoft Azure Build Output
+csx/
+*.build.csdef
+
+# Microsoft Azure Emulator
+ecf/
+rcf/
+
+# Windows Store app package directories and files
+AppPackages/
+BundleArtifacts/
+Package.StoreAssociation.xml
+_pkginfo.txt
+
+# Visual Studio cache files
+# files ending in .cache can be ignored
+*.[Cc]ache
+# but keep track of directories ending in .cache
+!*.[Cc]ache/
+
+# Others
+ClientBin/
+~$*
+*~
+*.dbmdl
+*.dbproj.schemaview
+#*.pfx
+*.publishsettings
+node_modules/
+orleans.codegen.cs
+
+# Since there are multiple workflows, uncomment next line to ignore bower_components
+# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
+#bower_components/
+
+# RIA/Silverlight projects
+Generated_Code/
+
+# Backup & report files from converting an old project file
+# to a newer Visual Studio version. Backup files are not needed,
+# because we have git ;-)
+_UpgradeReport_Files/
+Backup*/
+UpgradeLog*.XML
+UpgradeLog*.htm
+
+# SQL Server files
+*.mdf
+*.ldf
+
+# Business Intelligence projects
+*.rdl.data
+*.bim.layout
+*.bim_*.settings
+
+# Microsoft Fakes
+FakesAssemblies/
+
+# GhostDoc plugin setting file
+*.GhostDoc.xml
+
+# Node.js Tools for Visual Studio
+.ntvs_analysis.dat
+
+# Visual Studio 6 build log
+*.plg
+
+# Visual Studio 6 workspace options file
+*.opt
+
+# Visual Studio LightSwitch build output
+**/*.HTMLClient/GeneratedArtifacts
+**/*.DesktopClient/GeneratedArtifacts
+**/*.DesktopClient/ModelManifest.xml
+**/*.Server/GeneratedArtifacts
+**/*.Server/ModelManifest.xml
+_Pvt_Extensions
+
+# Paket dependency manager
+.paket/paket.exe
+paket-files/
+
+# FAKE - F# Make
+.fake/
+
+# JetBrains Rider
+.idea/
+*.sln.iml
+
+# Visual Studio design time assembly cache
+*.cache
+
+#Aeroclub lib catalog
+[Ll]ib/
+src/Aeroclub.WCF.CommonGateway/!Web.config
+src/Aeroclub.WCF.CommonGateway/Web.config
+src/Aeroclub.WCF.CommonGateway/!NLog.config
+src/Aeroclub.WCF.CommonGateway/NLog.config
+
+*.ncrunchproject
+
+# WSCommon logs
+src/Aeroclub.WCF.CommonGateway/logs/
+build/nuget/*.exe
+*.orig
+
+tools/Confluence.dll*
+.sonarqube/*
+paket.lock
+test/*
+.paket/Paket/tools/paket.exe
+coverage/*
+src/WscommonDoc/Help/*.json
+src/WscommonDoc/Help/*.json
+src/WscommonDoc/Help/*
+src/WscommonDoc/icons/Help.png
+src/WscommonDoc/Doc/Working/*
+src/WscommonDoc/Doc/*
+.paket/*
+*.env
+.teamcity/target/*
+docfx_project/_site/*
+docfx_project/api/*.yml
diff --git a/.semver.txt b/.semver.txt
new file mode 100644
index 0000000..afaf360
--- /dev/null
+++ b/.semver.txt
@@ -0,0 +1 @@
+1.0.0
\ No newline at end of file
diff --git a/MonsterMonitor.sln b/MonsterMonitor.sln
new file mode 100644
index 0000000..0755dd3
--- /dev/null
+++ b/MonsterMonitor.sln
@@ -0,0 +1,22 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.32929.386
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MonsterMonitor", "src\MonsterMonitor.csproj", "{7D6104C6-6AEF-4D31-8463-FCEABDF1577A}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {7D6104C6-6AEF-4D31-8463-FCEABDF1577A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {7D6104C6-6AEF-4D31-8463-FCEABDF1577A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7D6104C6-6AEF-4D31-8463-FCEABDF1577A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {7D6104C6-6AEF-4D31-8463-FCEABDF1577A}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/release.cmd b/release.cmd
new file mode 100644
index 0000000..cfc1f90
--- /dev/null
+++ b/release.cmd
@@ -0,0 +1,33 @@
+@echo off
+IF %1.==. GOTO NoCommitMessage
+echo %~1
+pause
+
+for /f "tokens=1 delims=." %%G IN (.semver.txt) DO set MAJOR=%%G
+for /f "tokens=2 delims=." %%G IN (.semver.txt) DO set MINOR=%%G
+for /f "tokens=3 delims=." %%G IN (.semver.txt) DO set PATCH=%%G
+set VERSION_CURRENT=%MAJOR:~0,1%.%MINOR:~0,1%.%PATCH%
+echo Current: %VERSION_CURRENT%
+
+SET /a PATCH1 = %PATCH%+1
+set VERSION=%MAJOR:~0,1%.%MINOR:~0,1%.%PATCH1%
+echo %VERSION%>.semver.txt
+echo Updating to %VERSION%
+
+call tools\SetVersion.cmd %VERSION%
+
+git add .
+git commit -m "%~1"
+
+git tag -m "Version v%VERSION%: %~1" -a v%VERSION%
+git push origin v%VERSION%
+
+git push --tags
+GOTO End
+pause
+
+:NoCommitMessage
+echo Please specify commit message: %0 "commit message"
+GOTO End
+
+:End
\ No newline at end of file
diff --git a/src/App.config b/src/App.config
new file mode 100644
index 0000000..81ca9c6
--- /dev/null
+++ b/src/App.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/src/App_Data/ss/ss.cfg b/src/App_Data/ss/ss.cfg
new file mode 100644
index 0000000..1e1e458
--- /dev/null
+++ b/src/App_Data/ss/ss.cfg
@@ -0,0 +1,2 @@
+auth none
+socks -i127.0.0.1 -p7683
\ No newline at end of file
diff --git a/src/App_Data/ss/ss.exe b/src/App_Data/ss/ss.exe
new file mode 100644
index 0000000..5904ad2
Binary files /dev/null and b/src/App_Data/ss/ss.exe differ
diff --git a/src/FodyWeavers.xml b/src/FodyWeavers.xml
new file mode 100644
index 0000000..a5dcf04
--- /dev/null
+++ b/src/FodyWeavers.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/FodyWeavers.xsd b/src/FodyWeavers.xsd
new file mode 100644
index 0000000..f2dbece
--- /dev/null
+++ b/src/FodyWeavers.xsd
@@ -0,0 +1,176 @@
+
+
+
+
+
+
+
+
+
+
+
+ A list of assembly names to exclude from the default action of "embed all Copy Local references", delimited with line breaks
+
+
+
+
+ A list of assembly names to include from the default action of "embed all Copy Local references", delimited with line breaks.
+
+
+
+
+ A list of runtime assembly names to exclude from the default action of "embed all Copy Local references", delimited with line breaks
+
+
+
+
+ A list of runtime assembly names to include from the default action of "embed all Copy Local references", delimited with line breaks.
+
+
+
+
+ Obsolete, use UnmanagedWinX86Assemblies instead
+
+
+
+
+ A list of unmanaged X86 (32 bit) assembly names to include, delimited with line breaks.
+
+
+
+
+ Obsolete, use UnmanagedWinX64Assemblies instead.
+
+
+
+
+ A list of unmanaged X64 (64 bit) assembly names to include, delimited with line breaks.
+
+
+
+
+ A list of unmanaged Arm64 (64 bit) assembly names to include, delimited with line breaks.
+
+
+
+
+ The order of preloaded assemblies, delimited with line breaks.
+
+
+
+
+
+ This will copy embedded files to disk before loading them into memory. This is helpful for some scenarios that expected an assembly to be loaded from a physical file.
+
+
+
+
+ Controls if .pdbs for reference assemblies are also embedded.
+
+
+
+
+ Controls if runtime assemblies are also embedded.
+
+
+
+
+ Controls whether the runtime assemblies are embedded with their full path or only with their assembly name.
+
+
+
+
+ Embedded assemblies are compressed by default, and uncompressed when they are loaded. You can turn compression off with this option.
+
+
+
+
+ As part of Costura, embedded assemblies are no longer included as part of the build. This cleanup can be turned off.
+
+
+
+
+ The attach method no longer subscribes to the `AppDomain.AssemblyResolve` (.NET 4.x) and `AssemblyLoadContext.Resolving` (.NET 6.0+) events.
+
+
+
+
+ Costura by default will load as part of the module initialization. This flag disables that behavior. Make sure you call CosturaUtility.Initialize() somewhere in your code.
+
+
+
+
+ Costura will by default use assemblies with a name like 'resources.dll' as a satellite resource and prepend the output path. This flag disables that behavior.
+
+
+
+
+ A list of assembly names to exclude from the default action of "embed all Copy Local references", delimited with |
+
+
+
+
+ A list of assembly names to include from the default action of "embed all Copy Local references", delimited with |.
+
+
+
+
+ A list of runtime assembly names to exclude from the default action of "embed all Copy Local references", delimited with |
+
+
+
+
+ A list of runtime assembly names to include from the default action of "embed all Copy Local references", delimited with |.
+
+
+
+
+ Obsolete, use UnmanagedWinX86Assemblies instead
+
+
+
+
+ A list of unmanaged X86 (32 bit) assembly names to include, delimited with |.
+
+
+
+
+ Obsolete, use UnmanagedWinX64Assemblies instead
+
+
+
+
+ A list of unmanaged X64 (64 bit) assembly names to include, delimited with |.
+
+
+
+
+ A list of unmanaged Arm64 (64 bit) assembly names to include, delimited with |.
+
+
+
+
+ The order of preloaded assemblies, delimited with |.
+
+
+
+
+
+
+
+ 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed.
+
+
+
+
+ A comma-separated list of error codes that can be safely ignored in assembly verification.
+
+
+
+
+ 'false' to turn off automatic generation of the XML Schema file.
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Models/AppSettings.cs b/src/Models/AppSettings.cs
new file mode 100644
index 0000000..3d9b724
--- /dev/null
+++ b/src/Models/AppSettings.cs
@@ -0,0 +1,225 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Security.Cryptography;
+using System.Text;
+
+namespace SshTunnelMonitor.Models
+{
+ public sealed class AppSettings
+ {
+ private const string ProtectedPrefix = "dpapi:";
+
+ public string SshHost { get; set; } = "127.0.0.1";
+ public int SshPort { get; set; } = 22;
+ public string SshUsername { get; set; } = "user";
+ public string SshPasswordProtected { get; set; } = string.Empty;
+ public string SystemPasswordProtected { get; set; } = string.Empty;
+ public string ThreeProxyPasswordProtected { get; set; } = string.Empty;
+ public bool SavePassword { get; set; } = false;
+ public int RemotePort { get; set; } = 3328;
+ public int LocalPort { get; set; } = 7829;
+ public int MaxPingFailures { get; set; } = 3;
+ public int ReconnectTimeoutSec { get; set; } = 45;
+ public string SsProcessPath { get; set; } = Path.Combine("App_Data", "ss", "ss.exe");
+ public string SsArguments { get; set; } = string.Empty;
+
+ public string GetPassword()
+ {
+ if (string.IsNullOrWhiteSpace(SshPasswordProtected))
+ {
+ return string.Empty;
+ }
+
+ if (!SshPasswordProtected.StartsWith(ProtectedPrefix, StringComparison.Ordinal))
+ {
+ return SshPasswordProtected;
+ }
+
+ var protectedData = Convert.FromBase64String(SshPasswordProtected.Substring(ProtectedPrefix.Length));
+ var unprotected = ProtectedData.Unprotect(protectedData, null, DataProtectionScope.CurrentUser);
+ return Encoding.UTF8.GetString(unprotected);
+ }
+
+ public void SetPassword(string password)
+ {
+ if (!SavePassword || string.IsNullOrEmpty(password))
+ {
+ SshPasswordProtected = string.Empty;
+ return;
+ }
+
+ var bytes = Encoding.UTF8.GetBytes(password);
+ var protectedData = ProtectedData.Protect(bytes, null, DataProtectionScope.CurrentUser);
+ SshPasswordProtected = ProtectedPrefix + Convert.ToBase64String(protectedData);
+ }
+
+ public string GetSystemPassword()
+ {
+ if (string.IsNullOrWhiteSpace(SystemPasswordProtected))
+ {
+ return "STerra";
+ }
+
+ if (!SystemPasswordProtected.StartsWith(ProtectedPrefix, StringComparison.Ordinal))
+ {
+ return SystemPasswordProtected;
+ }
+
+ var protectedData = Convert.FromBase64String(SystemPasswordProtected.Substring(ProtectedPrefix.Length));
+ var unprotected = ProtectedData.Unprotect(protectedData, null, DataProtectionScope.CurrentUser);
+ return Encoding.UTF8.GetString(unprotected);
+ }
+
+ public void SetSystemPassword(string password)
+ {
+ if (string.IsNullOrEmpty(password))
+ {
+ SystemPasswordProtected = string.Empty;
+ return;
+ }
+
+ var bytes = Encoding.UTF8.GetBytes(password);
+ var protectedData = ProtectedData.Protect(bytes, null, DataProtectionScope.CurrentUser);
+ SystemPasswordProtected = ProtectedPrefix + Convert.ToBase64String(protectedData);
+ }
+
+ public string GetThreeProxyPassword()
+ {
+ if (string.IsNullOrWhiteSpace(ThreeProxyPasswordProtected))
+ {
+ return string.Empty;
+ }
+
+ if (!ThreeProxyPasswordProtected.StartsWith(ProtectedPrefix, StringComparison.Ordinal))
+ {
+ return ThreeProxyPasswordProtected;
+ }
+
+ var protectedData = Convert.FromBase64String(ThreeProxyPasswordProtected.Substring(ProtectedPrefix.Length));
+ var unprotected = ProtectedData.Unprotect(protectedData, null, DataProtectionScope.CurrentUser);
+ return Encoding.UTF8.GetString(unprotected);
+ }
+
+ public void SetThreeProxyPassword(string password)
+ {
+ if (string.IsNullOrEmpty(password))
+ {
+ ThreeProxyPasswordProtected = string.Empty;
+ return;
+ }
+
+ var bytes = Encoding.UTF8.GetBytes(password);
+ var protectedData = ProtectedData.Protect(bytes, null, DataProtectionScope.CurrentUser);
+ ThreeProxyPasswordProtected = ProtectedPrefix + Convert.ToBase64String(protectedData);
+ }
+
+ public static string GetSettingsPath()
+ {
+ var directory = Path.Combine(
+ Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),
+ "MonsterMonitor");
+ Directory.CreateDirectory(directory);
+ return Path.Combine(directory, "settings.ini");
+ }
+
+ public static AppSettings Load()
+ {
+ var path = GetSettingsPath();
+ if (!File.Exists(path))
+ {
+ return new AppSettings();
+ }
+
+ var result = new AppSettings();
+ var map = new Dictionary(StringComparer.OrdinalIgnoreCase);
+
+ foreach (var line in File.ReadAllLines(path))
+ {
+ if (string.IsNullOrWhiteSpace(line) || line.TrimStart().StartsWith("#", StringComparison.Ordinal))
+ {
+ continue;
+ }
+
+ var separator = line.IndexOf('=');
+ if (separator <= 0)
+ {
+ continue;
+ }
+
+ var key = line.Substring(0, separator).Trim();
+ var value = line.Substring(separator + 1).Trim();
+ map[key] = value;
+ }
+
+ result.SshHost = Get(map, nameof(SshHost), result.SshHost);
+ result.SshPort = GetInt(map, nameof(SshPort), result.SshPort);
+ result.SshUsername = Get(map, nameof(SshUsername), result.SshUsername);
+ result.SshPasswordProtected = Get(map, nameof(SshPasswordProtected), result.SshPasswordProtected);
+ result.SystemPasswordProtected = Get(map, nameof(SystemPasswordProtected), result.SystemPasswordProtected);
+ result.ThreeProxyPasswordProtected = Get(map, nameof(ThreeProxyPasswordProtected), result.ThreeProxyPasswordProtected);
+ result.SavePassword = GetBool(map, nameof(SavePassword), result.SavePassword);
+ result.RemotePort = GetInt(map, nameof(RemotePort), result.RemotePort);
+ result.LocalPort = GetInt(map, nameof(LocalPort), result.LocalPort);
+ result.MaxPingFailures = GetInt(map, nameof(MaxPingFailures), result.MaxPingFailures);
+ result.ReconnectTimeoutSec = GetInt(map, nameof(ReconnectTimeoutSec), result.ReconnectTimeoutSec);
+ result.SsProcessPath = Get(map, nameof(SsProcessPath), result.SsProcessPath);
+ result.SsArguments = Get(map, nameof(SsArguments), result.SsArguments);
+
+ if (string.IsNullOrWhiteSpace(result.SystemPasswordProtected))
+ {
+ result.SetSystemPassword("STerra");
+ result.Save();
+ }
+
+ return result;
+ }
+
+ public void Save()
+ {
+ var path = GetSettingsPath();
+ var lines = new[]
+ {
+ $"{nameof(SshHost)}={SshHost}",
+ $"{nameof(SshPort)}={SshPort}",
+ $"{nameof(SshUsername)}={SshUsername}",
+ $"{nameof(SshPasswordProtected)}={SshPasswordProtected}",
+ $"{nameof(SystemPasswordProtected)}={SystemPasswordProtected}",
+ $"{nameof(ThreeProxyPasswordProtected)}={ThreeProxyPasswordProtected}",
+ $"{nameof(SavePassword)}={SavePassword}",
+ $"{nameof(RemotePort)}={RemotePort}",
+ $"{nameof(LocalPort)}={LocalPort}",
+ $"{nameof(MaxPingFailures)}={MaxPingFailures}",
+ $"{nameof(ReconnectTimeoutSec)}={ReconnectTimeoutSec}",
+ $"{nameof(SsProcessPath)}={SsProcessPath}",
+ $"{nameof(SsArguments)}={SsArguments}"
+ };
+ File.WriteAllLines(path, lines);
+ }
+
+ private static string Get(IDictionary map, string key, string defaultValue)
+ {
+ return map.TryGetValue(key, out var value) ? value : defaultValue;
+ }
+
+ private static int GetInt(IDictionary map, string key, int defaultValue)
+ {
+ if (map.TryGetValue(key, out var value) && int.TryParse(value, out var parsed))
+ {
+ return parsed;
+ }
+
+ return defaultValue;
+ }
+
+ private static bool GetBool(IDictionary map, string key, bool defaultValue)
+ {
+ if (map.TryGetValue(key, out var value) && bool.TryParse(value, out var parsed))
+ {
+ return parsed;
+ }
+
+ return defaultValue;
+ }
+ }
+}
diff --git a/src/MonsterMonitor.csproj b/src/MonsterMonitor.csproj
new file mode 100644
index 0000000..e8e8bbd
--- /dev/null
+++ b/src/MonsterMonitor.csproj
@@ -0,0 +1,31 @@
+
+
+ WinExe
+ net472
+ true
+ 7.3
+ SshTunnelMonitor
+ MonsterMonitor
+
+
+
+ all
+
+
+ all
+
+
+
+
+
+
+ Always
+
+
+ Always
+
+
+ Never
+
+
+
diff --git a/src/Program.cs b/src/Program.cs
new file mode 100644
index 0000000..714881f
--- /dev/null
+++ b/src/Program.cs
@@ -0,0 +1,35 @@
+using System;
+using System.Windows.Forms;
+using SshTunnelMonitor.UI;
+
+namespace SshTunnelMonitor
+{
+ internal static class Program
+ {
+ [STAThread]
+ private static void Main()
+ {
+ Application.ThreadException += (sender, args) =>
+ {
+ MessageBox.Show(
+ args.Exception.ToString(),
+ "Необработанное исключение UI-потока",
+ MessageBoxButtons.OK,
+ MessageBoxIcon.Error);
+ };
+
+ AppDomain.CurrentDomain.UnhandledException += (sender, args) =>
+ {
+ MessageBox.Show(
+ args.ExceptionObject.ToString(),
+ "Критическое исключение",
+ MessageBoxButtons.OK,
+ MessageBoxIcon.Error);
+ };
+
+ Application.EnableVisualStyles();
+ Application.SetCompatibleTextRenderingDefault(false);
+ Application.Run(new MainForm());
+ }
+ }
+}
diff --git a/src/Services/AppController.cs b/src/Services/AppController.cs
new file mode 100644
index 0000000..10ca9f6
--- /dev/null
+++ b/src/Services/AppController.cs
@@ -0,0 +1,52 @@
+using System;
+using SshTunnelMonitor.Models;
+
+namespace SshTunnelMonitor.Services
+{
+ public sealed class AppController : IDisposable
+ {
+ private readonly LogService _log;
+ private readonly PowerManagementService _power;
+ private readonly SsConfigService _ssConfig;
+ private ProcessMonitorService _processMonitor;
+ private SshTunnelService _sshTunnel;
+
+ public AppController(LogService log, PowerManagementService power)
+ {
+ _log = log;
+ _power = power;
+ _ssConfig = new SsConfigService(_log);
+ }
+
+ public void Start(AppSettings settings)
+ {
+ Stop();
+
+ _power.PreventSleep();
+ _processMonitor = new ProcessMonitorService(_log);
+ _sshTunnel = new SshTunnelService(_log);
+
+ _ssConfig.EnsureConfig(settings);
+ _processMonitor.Start(settings.SsProcessPath, settings.SsArguments);
+ _sshTunnel.Start(settings);
+
+ _log.Info("Сервисы приложения запущены.");
+ }
+
+ public void Stop()
+ {
+ _sshTunnel?.Dispose();
+ _sshTunnel = null;
+
+ _processMonitor?.Dispose();
+ _processMonitor = null;
+
+ _power.RestoreDefault();
+ }
+
+ public void Dispose()
+ {
+ Stop();
+ }
+ }
+}
diff --git a/src/Services/AuthMonitor.cs b/src/Services/AuthMonitor.cs
new file mode 100644
index 0000000..7051dd8
--- /dev/null
+++ b/src/Services/AuthMonitor.cs
@@ -0,0 +1,78 @@
+using System;
+using System.Diagnostics;
+using System.Runtime.InteropServices;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using SshTunnelMonitor.Models;
+
+namespace SshTunnelMonitor.Services
+{
+ public class AuthMonitor: IAuthMonitor
+ {
+ [DllImport("user32.dll")]
+ static extern IntPtr GetForegroundWindow();
+
+ [DllImport("user32.dll")]
+ private static extern bool SetForegroundWindow(IntPtr hWnd);
+
+ [DllImport("user32.dll")]
+ static extern int GetWindowText(IntPtr hWnd, StringBuilder text, int count);
+
+ private readonly AppSettings _settings;
+
+ public AuthMonitor(AppSettings settings)
+ {
+ _settings = settings;
+ }
+
+ private string GetActiveWindowTitle()
+ {
+ const int nChars = 256;
+ var buff = new StringBuilder(nChars);
+ var handle = GetForegroundWindow();
+ return GetWindowText(handle, buff, nChars) > 0 ? buff.ToString() : null;
+ }
+
+ public async Task StartMonitor()
+ {
+ _ = Task.Run(async () => await CheckProcess());
+ }
+
+ private async Task CheckProcess()
+ {
+ while (true)
+ {
+ try
+ {
+ Process[] processlist = Process.GetProcesses();
+ foreach (Process process in processlist)
+ {
+ if (!string.IsNullOrEmpty(process.MainWindowTitle) && process.MainWindowTitle.Contains("XAuth request"))
+ {
+ SetForegroundWindow(process.MainWindowHandle);
+ }
+ }
+
+ var activeWindowTitle = GetActiveWindowTitle();
+ if (activeWindowTitle?.Contains("XAuth request") == true)
+ {
+ SendKeys.SendWait(_settings.GetSystemPassword());
+ SendKeys.SendWait("{ENTER}");
+ }
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.Message + ex.StackTrace);
+ }
+
+ await Task.Delay(TimeSpan.FromSeconds(3));
+ }
+ }
+ }
+
+ public interface IAuthMonitor
+ {
+ Task StartMonitor();
+ }
+}
diff --git a/src/Services/LogService.cs b/src/Services/LogService.cs
new file mode 100644
index 0000000..c8a8232
--- /dev/null
+++ b/src/Services/LogService.cs
@@ -0,0 +1,39 @@
+using System;
+
+namespace SshTunnelMonitor.Services
+{
+ public enum LogLevel
+ {
+ Debug,
+ Info,
+ Warn,
+ Error
+ }
+
+ public sealed class LogEntry
+ {
+ public DateTime Timestamp { get; set; }
+ public LogLevel Level { get; set; }
+ public string Message { get; set; }
+ }
+
+ public sealed class LogService
+ {
+ public event Action LogReceived;
+
+ public void Log(LogLevel level, string message)
+ {
+ LogReceived?.Invoke(new LogEntry
+ {
+ Timestamp = DateTime.Now,
+ Level = level,
+ Message = message ?? string.Empty
+ });
+ }
+
+ public void Info(string message) => Log(LogLevel.Info, message);
+ public void Warn(string message) => Log(LogLevel.Warn, message);
+ public void Error(string message) => Log(LogLevel.Error, message);
+ public void Debug(string message) => Log(LogLevel.Debug, message);
+ }
+}
diff --git a/src/Services/PowerManagementService.cs b/src/Services/PowerManagementService.cs
new file mode 100644
index 0000000..33e520e
--- /dev/null
+++ b/src/Services/PowerManagementService.cs
@@ -0,0 +1,32 @@
+using System;
+using System.Runtime.InteropServices;
+
+namespace SshTunnelMonitor.Services
+{
+ public sealed class PowerManagementService
+ {
+ [Flags]
+ private enum ExecutionState : uint
+ {
+ ES_SYSTEM_REQUIRED = 0x00000001,
+ ES_DISPLAY_REQUIRED = 0x00000002,
+ ES_CONTINUOUS = 0x80000000
+ }
+
+ [DllImport("kernel32.dll", SetLastError = true)]
+ private static extern ExecutionState SetThreadExecutionState(ExecutionState flags);
+
+ public void PreventSleep()
+ {
+ SetThreadExecutionState(
+ ExecutionState.ES_CONTINUOUS |
+ ExecutionState.ES_SYSTEM_REQUIRED |
+ ExecutionState.ES_DISPLAY_REQUIRED);
+ }
+
+ public void RestoreDefault()
+ {
+ SetThreadExecutionState(ExecutionState.ES_CONTINUOUS);
+ }
+ }
+}
diff --git a/src/Services/ProcessMonitorService.cs b/src/Services/ProcessMonitorService.cs
new file mode 100644
index 0000000..c556fb9
--- /dev/null
+++ b/src/Services/ProcessMonitorService.cs
@@ -0,0 +1,152 @@
+using System;
+using System.Diagnostics;
+using System.Threading;
+
+namespace SshTunnelMonitor.Services
+{
+ public sealed class ProcessMonitorService : IDisposable
+ {
+ private readonly LogService _log;
+ private readonly object _sync = new object();
+ private readonly Timer _watchdogTimer;
+ private Process _process;
+ private string _path;
+ private string _arguments;
+ private bool _stopping;
+
+ public ProcessMonitorService(LogService log)
+ {
+ _log = log;
+ _watchdogTimer = new Timer(WatchdogTick, null, Timeout.InfiniteTimeSpan, Timeout.InfiniteTimeSpan);
+ }
+
+ public void Start(string path, string arguments)
+ {
+ lock (_sync)
+ {
+ _path = path;
+ _arguments = arguments ?? string.Empty;
+ _stopping = false;
+ EnsureStarted();
+ _watchdogTimer.Change(TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(10));
+ }
+ }
+
+ private void EnsureStarted()
+ {
+ if (IsProcessRunning(_process))
+ {
+ return;
+ }
+
+ try
+ {
+ if (_process != null)
+ {
+ _process.Exited -= ProcessOnExited;
+ _process.Dispose();
+ }
+ _process = new Process
+ {
+ StartInfo = new ProcessStartInfo
+ {
+ FileName = _path,
+ Arguments = _arguments,
+ UseShellExecute = false,
+ CreateNoWindow = true
+ },
+ EnableRaisingEvents = true
+ };
+ //_process.Exited += ProcessOnExited;
+ _process.Start();
+ _log.Info("Процесс ss запущен.");
+ }
+ catch (Exception ex)
+ {
+ _log.Error("Ошибка запуска ss: " + ex.Message);
+ }
+ }
+
+ private void ProcessOnExited(object sender, EventArgs e)
+ {
+ lock (_sync)
+ {
+ if (_stopping)
+ {
+ return;
+ }
+
+ _log.Warn("Процесс ss завершился, запускаю заново.");
+ EnsureStarted();
+ }
+ }
+
+ private void WatchdogTick(object state)
+ {
+ lock (_sync)
+ {
+ if (_stopping)
+ {
+ return;
+ }
+
+ EnsureStarted();
+ }
+ }
+
+ public void Stop()
+ {
+ lock (_sync)
+ {
+ _stopping = true;
+ _watchdogTimer.Change(Timeout.InfiniteTimeSpan, Timeout.InfiniteTimeSpan);
+
+ try
+ {
+ if (IsProcessRunning(_process))
+ {
+ _process.Kill();
+ _process.WaitForExit(5000);
+ _log.Info("Процесс ss остановлен.");
+ }
+ }
+ catch (Exception ex)
+ {
+ _log.Warn("Не удалось корректно завершить ss: " + ex.Message);
+ }
+ finally
+ {
+ if (_process != null)
+ {
+ _process.Exited -= ProcessOnExited;
+ _process.Dispose();
+ }
+ _process = null;
+ }
+ }
+ }
+
+ private static bool IsProcessRunning(Process process)
+ {
+ if (process == null)
+ {
+ return false;
+ }
+
+ try
+ {
+ return !process.HasExited;
+ }
+ catch (InvalidOperationException)
+ {
+ return false;
+ }
+ }
+
+ public void Dispose()
+ {
+ Stop();
+ _watchdogTimer.Dispose();
+ }
+ }
+}
diff --git a/src/Services/SsConfigService.cs b/src/Services/SsConfigService.cs
new file mode 100644
index 0000000..14ef8b0
--- /dev/null
+++ b/src/Services/SsConfigService.cs
@@ -0,0 +1,68 @@
+using System;
+using System.IO;
+using System.Security.Cryptography;
+using SshTunnelMonitor.Models;
+
+namespace SshTunnelMonitor.Services
+{
+ public sealed class SsConfigService
+ {
+ private readonly LogService _log;
+
+ public SsConfigService(LogService log)
+ {
+ _log = log;
+ }
+
+ public void EnsureConfig(AppSettings settings)
+ {
+ var password = settings.GetThreeProxyPassword();
+ if (string.IsNullOrWhiteSpace(password))
+ {
+ password = GeneratePassword();
+ settings.SetThreeProxyPassword(password);
+ settings.Save();
+ _log.Info("Сгенерирован пароль прокси и сохранен в настройках.");
+ }
+ var port = settings.LocalPort;
+
+ var config = "users admin:CL:" + password + "\r\n" +
+ "auth strong\r\n" +
+ $"socks -i127.0.0.1 -p{port}";
+
+ var configPath = GetConfigPath();
+ var directory = Path.GetDirectoryName(configPath);
+ if (!string.IsNullOrEmpty(directory))
+ {
+ Directory.CreateDirectory(directory);
+ }
+
+ File.WriteAllText(configPath, config);
+ _log.Info("Сконфигурирован ss.cfg: " + configPath);
+ }
+
+ private static string GetConfigPath()
+ {
+ return Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "App_Data", "ss", "ss.cfg");
+ }
+
+ private static string GeneratePassword()
+ {
+ const string alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
+ const int length = 20;
+ var bytes = new byte[length];
+ using (var rng = RandomNumberGenerator.Create())
+ {
+ rng.GetBytes(bytes);
+ }
+
+ var chars = new char[length];
+ for (var i = 0; i < length; i++)
+ {
+ chars[i] = alphabet[bytes[i] % alphabet.Length];
+ }
+
+ return new string(chars);
+ }
+ }
+}
diff --git a/src/Services/SshTunnelService.cs b/src/Services/SshTunnelService.cs
new file mode 100644
index 0000000..3c79e11
--- /dev/null
+++ b/src/Services/SshTunnelService.cs
@@ -0,0 +1,326 @@
+using System;
+using System.IO;
+using System.Threading;
+using System.Threading.Tasks;
+using Renci.SshNet;
+using Renci.SshNet.Common;
+using SshTunnelMonitor.Models;
+
+namespace SshTunnelMonitor.Services
+{
+ public sealed class SshTunnelService : IDisposable
+ {
+ private readonly LogService _log;
+ private readonly object _sync = new object();
+ private SshClient _client;
+ private ForwardedPortRemote _forwardedPort;
+ private SshCommand _heartbeatCommand;
+ private CancellationTokenSource _heartbeatReadTokenSource;
+ private Task _heartbeatReadTask;
+ private CancellationTokenSource _monitorTokenSource;
+ private AppSettings _settings;
+ private bool _disposed;
+ private bool _reconnectInProgress;
+ private DateTime _lastHeartbeatUtc = DateTime.MinValue;
+ private bool _remoteIsWindows;
+
+ public SshTunnelService(LogService log)
+ {
+ _log = log;
+ }
+
+ public void Start(AppSettings settings)
+ {
+ _settings = settings;
+ Connect();
+ StartMonitor();
+ }
+
+ private void Connect()
+ {
+ lock (_sync)
+ {
+ DisconnectCore();
+
+ var password = _settings.GetPassword();
+ var authMethod = new PasswordAuthenticationMethod(_settings.SshUsername, password);
+ var connectionInfo = new ConnectionInfo(_settings.SshHost, _settings.SshPort, _settings.SshUsername, authMethod);
+
+ _client = new SshClient(connectionInfo);
+ _client.ErrorOccurred += ClientOnErrorOccurred;
+ _client.Connect();
+
+ _forwardedPort = new ForwardedPortRemote((uint)_settings.RemotePort, "127.0.0.1", (uint)_settings.LocalPort);
+ _forwardedPort.Exception += ForwardedPortOnException;
+ _client.AddForwardedPort(_forwardedPort);
+ _forwardedPort.Start();
+ StartRemoteHeartbeatNoLock();
+
+ _log.Info(
+ $"SSH подключен. Туннель remote:{_settings.RemotePort} -> local:{_settings.LocalPort}");
+ }
+ }
+
+ private void ClientOnErrorOccurred(object sender, ExceptionEventArgs e)
+ {
+ _log.Warn("Ошибка SSH: " + e.Exception.Message);
+ ReconnectSoon();
+ }
+
+ private void ForwardedPortOnException(object sender, ExceptionEventArgs e)
+ {
+ _log.Warn("Ошибка перенаправления порта: " + e.Exception.Message);
+ ReconnectSoon();
+ }
+
+ private void StartMonitor()
+ {
+ _monitorTokenSource = new CancellationTokenSource();
+ Task.Run(() => MonitorLoop(_monitorTokenSource.Token));
+ }
+
+ private async Task MonitorLoop(CancellationToken token)
+ {
+ while (!token.IsCancellationRequested)
+ {
+ try
+ {
+ var silenceThresholdSec = Math.Max(
+ 5,
+ _settings.MaxPingFailures);
+
+ var lastHeartbeat = _lastHeartbeatUtc;
+ var isHeartbeatAlive = lastHeartbeat != DateTime.MinValue &&
+ (DateTime.UtcNow - lastHeartbeat).TotalSeconds <= silenceThresholdSec;
+
+ if (!IsConnected() || !isHeartbeatAlive)
+ {
+ _log.Warn("Нет живого вывода heartbeat-команды на удаленном сервере. Переподключаю SSH.");
+ await Reconnect().ConfigureAwait(false);
+ }
+ }
+ catch (Exception ex)
+ {
+ _log.Warn("Исключение мониторинга heartbeat: " + ex.Message);
+ }
+
+ try
+ {
+ await Task.Delay(TimeSpan.FromSeconds(2), token).ConfigureAwait(false);
+ }
+ catch (TaskCanceledException)
+ {
+ break;
+ }
+ }
+ }
+
+ private bool IsConnected()
+ {
+ lock (_sync)
+ {
+ return _client != null && _client.IsConnected;
+ }
+ }
+
+ private void ReconnectSoon()
+ {
+ Task.Run(async () =>
+ {
+ await Task.Delay(1000).ConfigureAwait(false);
+ await Reconnect().ConfigureAwait(false);
+ });
+ }
+
+ private async Task Reconnect()
+ {
+ if (_reconnectInProgress || _disposed)
+ {
+ return;
+ }
+
+ _reconnectInProgress = true;
+ try
+ {
+ var timeout = Math.Min(60, Math.Max(5, _settings.ReconnectTimeoutSec));
+ _log.Warn("Перезапуск SSH-соединения...");
+
+ var reconnectTask = Task.Run(() =>
+ {
+ DisconnectCore();
+ Connect();
+ });
+
+ var completed = await Task.WhenAny(reconnectTask, Task.Delay(TimeSpan.FromSeconds(timeout))).ConfigureAwait(false);
+ if (completed != reconnectTask)
+ {
+ _log.Error("Переподключение превысило таймаут " + timeout + "с.");
+ }
+ else
+ {
+ _log.Info("SSH-соединение восстановлено.");
+ }
+ }
+ catch (Exception ex)
+ {
+ _log.Error("Ошибка переподключения SSH: " + ex.Message);
+ }
+ finally
+ {
+ _reconnectInProgress = false;
+ }
+ }
+
+ private void DisconnectCore()
+ {
+ StopRemoteHeartbeatNoLock();
+
+ try
+ {
+ if (_forwardedPort != null)
+ {
+ if (_forwardedPort.IsStarted)
+ {
+ _forwardedPort.Stop();
+ }
+ _forwardedPort.Dispose();
+ _forwardedPort = null;
+ }
+ }
+ catch
+ {
+ // Ignore errors on shutdown.
+ }
+
+ try
+ {
+ if (_client != null)
+ {
+ if (_client.IsConnected)
+ {
+ _client.Disconnect();
+ }
+ _client.Dispose();
+ _client = null;
+ }
+ }
+ catch
+ {
+ // Ignore errors on shutdown.
+ }
+ }
+
+ private void StartRemoteHeartbeatNoLock()
+ {
+ if (_client == null || !_client.IsConnected)
+ {
+ return;
+ }
+
+ StopRemoteHeartbeatNoLock();
+ _remoteIsWindows = DetectRemoteWindowsNoLock();
+
+ var heartbeatCommand = _remoteIsWindows
+ ? "ping ya.ru -t"
+ : "while :; do echo 'some type of ping response '$C; C=$((C+1)); sleep 1; done";
+
+ _heartbeatCommand = _client.CreateCommand(heartbeatCommand);
+ _heartbeatReadTokenSource = new CancellationTokenSource();
+ _lastHeartbeatUtc = DateTime.UtcNow;
+ _heartbeatCommand.BeginExecute();
+
+ _heartbeatReadTask = Task.Run(() =>
+ ReadHeartbeatOutputLoop(_heartbeatCommand, _heartbeatReadTokenSource.Token));
+ _log.Info("Запущен удаленный heartbeat через SSH (" + (_remoteIsWindows ? "Windows" : "Linux/Unix") + ").");
+ }
+
+ private void StopRemoteHeartbeatNoLock()
+ {
+ try
+ {
+ _heartbeatReadTokenSource?.Cancel();
+ _heartbeatReadTask?.Wait(1000);
+ }
+ catch
+ {
+ // Ignore errors on shutdown.
+ }
+ finally
+ {
+ _heartbeatReadTokenSource?.Dispose();
+ _heartbeatReadTokenSource = null;
+ _heartbeatReadTask = null;
+ }
+
+ try
+ {
+ _heartbeatCommand?.Dispose();
+ _heartbeatCommand = null;
+ }
+ catch
+ {
+ // Ignore errors on shutdown.
+ }
+ }
+
+ private void ReadHeartbeatOutputLoop(SshCommand command, CancellationToken token)
+ {
+ try
+ {
+ using (var reader = new StreamReader(command.OutputStream))
+ {
+ while (!token.IsCancellationRequested)
+ {
+ var line = reader.ReadLine();
+ if (line == null)
+ {
+ Thread.Sleep(200);
+ continue;
+ }
+
+ _lastHeartbeatUtc = DateTime.UtcNow;
+ _log.Debug("HB: " + line);
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ if (!token.IsCancellationRequested)
+ {
+ _log.Warn("Ошибка чтения heartbeat-вывода: " + ex.Message);
+ }
+ }
+ }
+
+ private bool DetectRemoteWindowsNoLock()
+ {
+ try
+ {
+ var command = _client.CreateCommand("cmd /c ver");
+ var output = command.Execute() ?? string.Empty;
+ return output.IndexOf("windows", StringComparison.OrdinalIgnoreCase) >= 0;
+ }
+ catch
+ {
+ return false;
+ }
+ }
+
+ public void Stop()
+ {
+ _monitorTokenSource?.Cancel();
+ _monitorTokenSource?.Dispose();
+ _monitorTokenSource = null;
+ lock (_sync)
+ {
+ DisconnectCore();
+ }
+ }
+
+ public void Dispose()
+ {
+ _disposed = true;
+ Stop();
+ }
+ }
+}
diff --git a/src/UI/MainForm.cs b/src/UI/MainForm.cs
new file mode 100644
index 0000000..312a5d1
--- /dev/null
+++ b/src/UI/MainForm.cs
@@ -0,0 +1,202 @@
+using SshTunnelMonitor.Models;
+using SshTunnelMonitor.Services;
+using System;
+using System.Drawing;
+using System.Windows.Forms;
+
+namespace SshTunnelMonitor.UI
+{
+ public sealed class MainForm : Form
+ {
+ private readonly RichTextBox _console = new RichTextBox();
+ private readonly Button _btnSettings = new Button();
+ private readonly Button _btnExit = new Button();
+ private readonly NotifyIcon _notifyIcon = new NotifyIcon();
+ private readonly Icon _trayIcon;
+ private readonly LogService _log = new LogService();
+ private readonly PowerManagementService _power = new PowerManagementService();
+ private AppController _controller;
+ private AppSettings _settings;
+ private bool _allowClose;
+
+ public MainForm()
+ {
+ Text = "Monster Monitor";
+ Width = 980;
+ Height = 620;
+ StartPosition = FormStartPosition.CenterScreen;
+ _trayIcon = LoadTrayIcon();
+
+ BuildUi();
+ BindEvents();
+ }
+
+ protected override void OnLoad(EventArgs e)
+ {
+ base.OnLoad(e);
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
+ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+
+ _settings = AppSettings.Load();
+ _controller = new AppController(_log, _power);
+ RestartServices();
+ }
+
+ private void BuildUi()
+ {
+ var topPanel = new Panel { Dock = DockStyle.Top, Height = 42 };
+ _btnSettings.Text = "Настройки";
+ _btnSettings.Width = 110;
+ _btnSettings.Location = new Point(10, 8);
+
+ _btnExit.Text = "Выход";
+ _btnExit.Width = 110;
+ _btnExit.Location = new Point(130, 8);
+
+ topPanel.Controls.Add(_btnSettings);
+ topPanel.Controls.Add(_btnExit);
+
+ _console.Dock = DockStyle.Fill;
+ _console.ReadOnly = true;
+ _console.BackColor = Color.Black;
+ _console.ForeColor = Color.White;
+ _console.Font = new Font("Consolas", 10f);
+
+ Controls.Add(_console);
+ Controls.Add(topPanel);
+
+ _notifyIcon.Text = "Monster Monitor";
+ _notifyIcon.Icon = _trayIcon;
+ _notifyIcon.Visible = true;
+ var trayMenu = new ContextMenuStrip();
+ trayMenu.Items.Add("Открыть", null, (_, __) => RestoreFromTray());
+ trayMenu.Items.Add("Выход", null, (_, __) => ExitApplication());
+ _notifyIcon.ContextMenuStrip = trayMenu;
+ }
+
+ private void BindEvents()
+ {
+ Resize += MainFormOnResize;
+ FormClosing += MainFormOnFormClosing;
+ _notifyIcon.DoubleClick += (_, __) => RestoreFromTray();
+ _btnSettings.Click += (_, __) => OpenSettings();
+ _btnExit.Click += (_, __) => ExitApplication();
+ _log.LogReceived += AppendLog;
+ }
+
+ private void OpenSettings()
+ {
+ using (var form = new SettingsForm(_settings))
+ {
+ if (form.ShowDialog(this) == DialogResult.OK)
+ {
+ _log.Info("Настройки обновлены. Перезапускаю сервисы.");
+ RestartServices();
+ }
+ }
+ }
+
+ private void RestartServices()
+ {
+ try
+ {
+ _controller.Start(_settings);
+ }
+ catch (Exception ex)
+ {
+ _log.Error("Ошибка запуска сервисов: " + ex.Message);
+ }
+ }
+
+ private void MainFormOnResize(object sender, EventArgs e)
+ {
+ if (WindowState != FormWindowState.Minimized)
+ {
+ return;
+ }
+
+ Hide();
+ _notifyIcon.BalloonTipTitle = "Monster Monitor";
+ _notifyIcon.BalloonTipText = "Приложение свернуто в трей.";
+ _notifyIcon.ShowBalloonTip(1000);
+ }
+
+ private void RestoreFromTray()
+ {
+ Show();
+ WindowState = FormWindowState.Normal;
+ Activate();
+ }
+
+ private void ExitApplication()
+ {
+ _allowClose = true;
+ Close();
+ }
+
+ private void MainFormOnFormClosing(object sender, FormClosingEventArgs e)
+ {
+ if (!_allowClose && e.CloseReason == CloseReason.UserClosing)
+ {
+ e.Cancel = true;
+ WindowState = FormWindowState.Minimized;
+ return;
+ }
+
+ _notifyIcon.Visible = false;
+ _controller?.Dispose();
+ _trayIcon?.Dispose();
+ }
+
+ private void AppendLog(LogEntry entry)
+ {
+ if (InvokeRequired)
+ {
+ BeginInvoke(new Action(AppendLog), entry);
+ return;
+ }
+
+ _console.SelectionStart = _console.TextLength;
+ _console.SelectionLength = 0;
+ _console.SelectionColor = GetColor(entry.Level);
+ _console.AppendText($"[{entry.Timestamp:HH:mm:ss}] [{entry.Level}] {entry.Message}{Environment.NewLine}");
+ _console.SelectionColor = _console.ForeColor;
+ _console.ScrollToCaret();
+ }
+
+ private static Color GetColor(LogLevel level)
+ {
+ switch (level)
+ {
+ case LogLevel.Debug:
+ return Color.Silver;
+ case LogLevel.Warn:
+ return Color.Orange;
+ case LogLevel.Error:
+ return Color.Red;
+ default:
+ return Color.White;
+ }
+ }
+
+ private static Icon LoadTrayIcon()
+ {
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
+ return ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+ }
+
+ private void InitializeComponent()
+ {
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
+ this.SuspendLayout();
+ //
+ // MainForm
+ //
+ this.ClientSize = new System.Drawing.Size(284, 261);
+ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+ this.Name = "MainForm";
+ this.ResumeLayout(false);
+
+ }
+ }
+}
diff --git a/src/UI/MainForm.resx b/src/UI/MainForm.resx
new file mode 100644
index 0000000..9004282
--- /dev/null
+++ b/src/UI/MainForm.resx
@@ -0,0 +1,1253 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+
+
+ AAABAAEAgIAAAAEAIAAoCAEAFgAAACgAAACAAAAAAAEAAAEAIAAAAAAAAAABAJdLAACXSwAAAAAAAAAA
+ AAAAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP0AAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAA
+ APwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAA
+ APwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAA
+ APwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAA
+ APwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAA
+ APwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAA
+ APwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAA
+ APwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAA
+ APwAAAD8AAAA/AAAAPwAAAD8AAAA/QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/QAAAP8AAAB4AAAAOwAAAEgAAABGAAAARgAAAEYAAABGAAAARgAA
+ AEYAAABGAAAARgAAAEYAAABGAAAARgAAAEYAAABGAAAARgAAAEYAAABGAAAARgAAAEYAAABGAAAARgAA
+ AEYAAABGAAAARgAAAEYAAABGAAAARgAAAEYAAABGAAAARgAAAEYAAABGAAAARgAAAEYAAABGAAAARgAA
+ AEYAAABGAAAARgAAAEYAAABGAAAARgAAAEYAAABGAAAARgAAAEYAAABGAAAARgAAAEYAAABGAAAARgAA
+ AEYAAABGAAAARgAAAEYAAABGAAAARgAAAEYAAABGAAAARgAAAEYAAABGAAAARgAAAEYAAABGAAAARgAA
+ AEYAAABGAAAARgAAAEYAAABGAAAARgAAAEYAAABGAAAARgAAAEYAAABGAAAARgAAAEYAAABGAAAARgAA
+ AEYAAABGAAAARgAAAEYAAABGAAAARgAAAEYAAABGAAAARgAAAEYAAABGAAAARgAAAEYAAABGAAAARgAA
+ AEYAAABGAAAARgAAAEYAAABGAAAARgAAAEYAAABGAAAARgAAAEYAAABGAAAARgAAAEYAAABGAAAARgAA
+ AEYAAABGAAAARgAAAEYAAABIAAAAOwAAAHgAAAD/AAAA/QAAAP8AAAD/AAAA/wAAAP8AAAD9AAAA/wAA
+ AEIAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAQgAA
+ AP8AAAD9AAAA/wAAAP8AAAD/AAAA/wAAAPwAAAD/AAAASAAAAAAAAAAGAAAAAwAAAAMAAAADAAAAAwAA
+ AAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAA
+ AAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAA
+ AAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAA
+ AAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAA
+ AAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAA
+ AAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAA
+ AAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAA
+ AAMAAAADAAAAAwAAAAMAAAADAAAABgAAAAAAAABIAAAA/wAAAPwAAAD/AAAA/wAAAP8AAAD/AAAA/AAA
+ AP8AAABGAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAA
+ AEYAAAD/AAAA/AAAAP8AAAD/AAAA/wAAAP8AAAD8AAAA/wAAAEYAAAAAAAAAAwAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAARgAAAP8AAAD8AAAA/wAAAP8AAAD/AAAA/wAA
+ APwAAAD/AAAARgAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAA
+ AAAAAABGAAAA/wAAAPwAAAD/AAAA/wAAAP8AAAD/AAAA/AAAAP8AAABGAAAAAAAAAAMAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAEYAAAD/AAAA/AAAAP8AAAD/AAAA/wAA
+ AP8AAAD8AAAA/wAAAEYAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAMAAAAAAAAARgAAAP8AAAD8AAAA/wAAAP8AAAD/AAAA/wAAAPwAAAD/AAAARgAAAAAAAAADAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAGAAAABAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA
+ AAEAAAADAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAABGAAAA/wAAAPwAAAD/AAAA/wAA
+ AP8AAAD/AAAA/AAAAP8AAABGAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAACAAAAAAAAAD8AAACFAAAAAAAA
+ AAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAIMAAAA/AAAAAAAAAAIAAAAAAAAAAAAA
+ AAAAAAADAAAAAAAAAEYAAAD/AAAA/AAAAP8AAAD/AAAA/wAAAP8AAAD8AAAA/wAAAEYAAAAAAAAAAwAA
+ AAAAAAAAAAAAAAAAAAMAAAAAAAAANgAAAP8AAAB+AAAAAAAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAA
+ AAAAAAB9AAAA/wAAADYAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAARgAAAP8AAAD8AAAA/wAA
+ AP8AAAD/AAAA/wAAAPwAAAD/AAAARgAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAA3AAAA/wAA
+ AP8AAAB/AAAAAAAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAAAAAAAfQAAAP8AAAD/AAAANwAAAAAAAAADAAAAAAAA
+ AAAAAAAAAAAAAwAAAAAAAABGAAAA/wAAAPwAAAD/AAAA/wAAAP8AAAD/AAAA/AAAAP8AAABGAAAAAAAA
+ AAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAADgAAAD/AAAA+gAAAP8AAAB/AAAAAAAAAAQAAAABAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAA
+ AH4AAAD/AAAA+gAAAP8AAAA4AAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAAEYAAAD/AAAA/AAA
+ AP8AAAD/AAAA/wAAAP8AAAD8AAAA/wAAAEYAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAOAAA
+ AP8AAAD9AAAA+wAAAP8AAAB/AAAAAAAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAAAAAB+AAAA/wAAAPsAAAD9AAAA/wAAADgAAAAAAAAAAwAA
+ AAAAAAAAAAAAAAAAAAMAAAAAAAAARgAAAP8AAAD8AAAA/wAAAP8AAAD/AAAA/wAAAPwAAAD/AAAARgAA
+ AAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAA4AAAA/wAAAP4AAAD+AAAA+wAAAP8AAAB/AAAAAAAA
+ AAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAAAAAAAfgAA
+ AP8AAAD7AAAA/gAAAP4AAAD/AAAAOAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAABGAAAA/wAA
+ APwAAAD/AAAA/wAAAP8AAAD/AAAA/AAAAP8AAABGAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAA
+ ADgAAAD/AAAA/gAAAP8AAAD+AAAA+wAAAP8AAAB/AAAAAAAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAH4AAAD/AAAA+wAAAP4AAAD/AAAA/gAAAP8AAAA4AAAAAAAA
+ AAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAAEYAAAD/AAAA/AAAAP8AAAD/AAAA/wAAAP8AAAD8AAAA/wAA
+ AEYAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAOAAAAP8AAAD+AAAA/wAAAP8AAAD+AAAA+wAA
+ AP8AAAB/AAAAAAAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAAAAAB+AAAA/wAA
+ APsAAAD+AAAA/wAAAP8AAAD+AAAA/wAAADgAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAARgAA
+ AP8AAAD8AAAA/wAAAP8AAAD/AAAA/wAAAPwAAAD/AAAARgAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAA
+ AAAAAAA4AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA+wAAAP8AAAB/AAAAAAAAAAQAAAABAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAQAAAAQAAAAAAAAAfgAAAP8AAAD7AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAAOAAA
+ AAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAABGAAAA/wAAAPwAAAD/AAAA/wAAAP8AAAD/AAAA/AAA
+ AP8AAABGAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAADgAAAD/AAAA/gAAAP8AAAD/AAAA/wAA
+ AP8AAAD+AAAA+wAAAP8AAAB/AAAAAAAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAH4AAAD/AAAA+wAA
+ AP4AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAA4AAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAA
+ AEYAAAD/AAAA/AAAAP8AAAD/AAAA/wAAAP8AAAD8AAAA/wAAAEYAAAAAAAAAAwAAAAAAAAAAAAAAAAAA
+ AAMAAAAAAAAAOAAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA+wAAAP8AAAB/AAAAAAAA
+ AAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAABAAAABAAAAAAAAAB+AAAA/wAAAPsAAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA
+ ADgAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAARgAAAP8AAAD8AAAA/wAAAP8AAAD/AAAA/wAA
+ APwAAAD/AAAARgAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAA4AAAA/wAAAP4AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD+AAAA+wAAAP8AAAB/AAAAAAAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAAAAAAAfgAAAP8AAAD7AAAA/gAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAAOAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAA
+ AAAAAABGAAAA/wAAAPwAAAD/AAAA/wAAAP8AAAD/AAAA/AAAAP8AAABGAAAAAAAAAAMAAAAAAAAAAAAA
+ AAAAAAADAAAAAAAAADgAAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA+wAA
+ AP8AAAB/AAAAAAAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAEAAAAEAAAAAAAAAH4AAAD/AAAA+wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA
+ AP8AAAA4AAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAAEYAAAD/AAAA/AAAAP8AAAD/AAAA/wAA
+ AP8AAAD8AAAA/wAAAEYAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAOAAAAP8AAAD+AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA+wAAAP8AAAB/AAAAAAAAAAQAAAABAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAAAAAB+AAAA/wAAAPsAAAD+AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAADgAAAAAAAAAAwAAAAAAAAAAAAAAAAAA
+ AAMAAAAAAAAARgAAAP8AAAD8AAAA/wAAAP8AAAD/AAAA/wAAAPwAAAD/AAAARgAAAAAAAAADAAAAAAAA
+ AAAAAAAAAAAAAwAAAAAAAAA4AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD+AAAA+wAAAP8AAAB/AAAAAAAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA
+ AAQAAAAAAAAAfgAAAP8AAAD7AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP4AAAD/AAAAOAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAABGAAAA/wAAAPwAAAD/AAAA/wAA
+ AP8AAAD/AAAA/AAAAP8AAABGAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAADgAAAD/AAAA/gAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA+wAAAP8AAAB/AAAAAAAA
+ AAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAH4AAAD/AAAA+wAAAP4AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAA4AAAAAAAAAAMAAAAAAAAAAAAA
+ AAAAAAADAAAAAAAAAEYAAAD/AAAA/AAAAP8AAAD/AAAA/wAAAP8AAAD8AAAA/wAAAEYAAAAAAAAAAwAA
+ AAAAAAAAAAAAAAAAAAMAAAAAAAAAOAAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD+AAAA+wAAAP8AAAB/AAAAAAAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAA
+ AAAAAAB+AAAA/wAAAPsAAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD+AAAA/wAAADgAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAARgAAAP8AAAD8AAAA/wAA
+ AP8AAAD/AAAA/wAAAPwAAAD/AAAARgAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAA4AAAA/wAA
+ AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA+wAA
+ AP8AAAB/AAAAAAAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAAAAAAAfgAAAP8AAAD7AAAA/gAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAAOAAAAAAAAAADAAAAAAAA
+ AAAAAAAAAAAAAwAAAAAAAABGAAAA/wAAAPwAAAD/AAAA/wAAAP8AAAD/AAAA/AAAAP8AAABGAAAAAAAA
+ AAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAADgAAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA+wAAAP8AAAB/AAAAAAAAAAQAAAABAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAA
+ AH4AAAD/AAAA+wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/gAAAP8AAAA4AAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAAEYAAAD/AAAA/AAA
+ AP8AAAD/AAAA/wAAAP8AAAD8AAAA/wAAAEYAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAOAAA
+ AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD+AAAA+wAAAP8AAAB/AAAAAAAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAAAAAB+AAAA/wAAAPsAAAD+AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAADgAAAAAAAAAAwAA
+ AAAAAAAAAAAAAAAAAAMAAAAAAAAARgAAAP8AAAD8AAAA/wAAAP8AAAD/AAAA/wAAAPwAAAD/AAAARgAA
+ AAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAA4AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA+wAAAP8AAAB/AAAAAAAA
+ AAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAAAAAAAfgAA
+ AP8AAAD7AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP4AAAD/AAAAOAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAABGAAAA/wAA
+ APwAAAD/AAAA/wAAAP8AAAD/AAAA/AAAAP8AAABGAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAA
+ ADgAAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD+AAAA+wAAAP8AAAB/AAAAAAAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAH4AAAD/AAAA+wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAA4AAAAAAAA
+ AAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAAEYAAAD/AAAA/AAAAP8AAAD/AAAA/wAAAP8AAAD8AAAA/wAA
+ AEYAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAOAAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA+wAA
+ AP8AAAB/AAAAAAAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAAAAAB+AAAA/wAA
+ APsAAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAADgAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAARgAA
+ AP8AAAD8AAAA/wAAAP8AAAD/AAAA/wAAAPwAAAD/AAAARgAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAA
+ AAAAAAA4AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA+wAAAP8AAAB/AAAAAAAAAAQAAAABAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAQAAAAQAAAAAAAAAfgAAAP8AAAD7AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAAOAAA
+ AAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAABGAAAA/wAAAPwAAAD/AAAA/wAAAP8AAAD/AAAA/AAA
+ AP8AAABGAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAADgAAAD/AAAA/gAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD+AAAA+wAAAP8AAAB/AAAAAAAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAH4AAAD/AAAA+wAA
+ AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAA4AAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAA
+ AEYAAAD/AAAA/AAAAP8AAAD/AAAA/wAAAP8AAAD8AAAA/wAAAEYAAAAAAAAAAwAAAAAAAAAAAAAAAAAA
+ AAMAAAAAAAAAOAAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA+wAAAP8AAAB/AAAAAAAA
+ AAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAABAAAABAAAAAAAAAB+AAAA/wAAAPsAAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA
+ ADgAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAARgAAAP8AAAD8AAAA/wAAAP8AAAD/AAAA/wAA
+ APwAAAD/AAAARgAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAA4AAAA/wAAAP4AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD+AAAA+wAAAP8AAAB/AAAAAAAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAAAAAAAfgAAAP8AAAD7AAAA/gAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAAOAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAA
+ AAAAAABGAAAA/wAAAPwAAAD/AAAA/wAAAP8AAAD/AAAA/AAAAP8AAABGAAAAAAAAAAMAAAAAAAAAAAAA
+ AAAAAAADAAAAAAAAADgAAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA+wAA
+ AP8AAAB/AAAAAAAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAEAAAAEAAAAAAAAAH4AAAD/AAAA+wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA
+ AP8AAAA4AAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAAEYAAAD/AAAA/AAAAP8AAAD/AAAA/wAA
+ AP8AAAD8AAAA/wAAAEYAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAOAAAAP8AAAD+AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA+wAAAP8AAAB/AAAAAAAAAAQAAAABAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAAAAAB+AAAA/wAAAPsAAAD+AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAADgAAAAAAAAAAwAAAAAAAAAAAAAAAAAA
+ AAMAAAAAAAAARgAAAP8AAAD8AAAA/wAAAP8AAAD/AAAA/wAAAPwAAAD/AAAARgAAAAAAAAADAAAAAAAA
+ AAAAAAAAAAAAAwAAAAAAAAA4AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD+AAAA+wAAAP8AAAB/AAAAAAAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA
+ AAQAAAAAAAAAfgAAAP8AAAD7AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP4AAAD/AAAAOAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAABGAAAA/wAAAPwAAAD/AAAA/wAA
+ AP8AAAD/AAAA/AAAAP8AAABGAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAADgAAAD/AAAA/gAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA+wAAAP8AAAB/AAAAAAAA
+ AAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAH4AAAD/AAAA+wAAAP4AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAA4AAAAAAAAAAMAAAAAAAAAAAAA
+ AAAAAAADAAAAAAAAAEYAAAD/AAAA/AAAAP8AAAD/AAAA/wAAAP8AAAD8AAAA/wAAAEYAAAAAAAAAAwAA
+ AAAAAAAAAAAAAAAAAAMAAAAAAAAAOAAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD+AAAA+wAAAP8AAAB/AAAAAAAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAA
+ AAAAAAB+AAAA/wAAAPsAAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD+AAAA/wAAADgAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAARgAAAP8AAAD8AAAA/wAA
+ AP8AAAD/AAAA/wAAAPwAAAD/AAAARgAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAA4AAAA/wAA
+ AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA+wAA
+ AP8AAAB/AAAAAAAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAAAAAAAfgAAAP8AAAD7AAAA/gAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAAOAAAAAAAAAADAAAAAAAA
+ AAAAAAAAAAAAAwAAAAAAAABGAAAA/wAAAPwAAAD/AAAA/wAAAP8AAAD/AAAA/AAAAP8AAABGAAAAAAAA
+ AAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAADgAAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA+wAAAP8AAAB/AAAAAAAAAAQAAAABAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAA
+ AH4AAAD/AAAA+wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/gAAAP8AAAA4AAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAAEYAAAD/AAAA/AAA
+ AP8AAAD/AAAA/wAAAP8AAAD8AAAA/wAAAEYAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAOAAA
+ AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD+AAAA+wAAAP8AAAB/AAAAAAAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAAAAAB+AAAA/wAAAPsAAAD+AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAADgAAAAAAAAAAwAA
+ AAAAAAAAAAAAAAAAAAMAAAAAAAAARgAAAP8AAAD8AAAA/wAAAP8AAAD/AAAA/wAAAPwAAAD/AAAARgAA
+ AAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAA4AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA+wAAAP8AAAB/AAAAAAAA
+ AAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAAAAAAAfgAA
+ AP8AAAD7AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP4AAAD/AAAAOAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAABGAAAA/wAA
+ APwAAAD/AAAA/wAAAP8AAAD/AAAA/AAAAP8AAABGAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAA
+ ADgAAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD+AAAA+wAAAP8AAAB/AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAH4AAAD/AAAA+wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAA4AAAAAAAA
+ AAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAAEYAAAD/AAAA/AAAAP8AAAD/AAAA/wAAAP8AAAD8AAAA/wAA
+ AEYAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAOAAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA+wAA
+ AP8AAACAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAB+AAAA/wAA
+ APsAAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAADgAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAARgAA
+ AP8AAAD8AAAA/wAAAP8AAAD/AAAA/wAAAPwAAAD/AAAARgAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAA
+ AAAAAAA4AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/QAAAP8AAAAyAAAAAAAAAAIAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAIAAAAAAAAAMgAAAP8AAAD9AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAAOAAA
+ AAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAABGAAAA/wAAAPwAAAD/AAAA/wAAAP8AAAD/AAAA/AAA
+ AP8AAABGAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAADgAAAD/AAAA/gAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD9AAAA/wAAADkAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAA5AAAA/wAA
+ AP0AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAA4AAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAA
+ AEYAAAD/AAAA/AAAAP8AAAD/AAAA/wAAAP8AAAD8AAAA/wAAAEYAAAAAAAAAAwAAAAAAAAAAAAAAAAAA
+ AAMAAAAAAAAAOAAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAANwAAAAAAAAADAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAADcAAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA
+ ADgAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAARgAAAP8AAAD8AAAA/wAAAP8AAAD/AAAA/wAA
+ APwAAAD/AAAARgAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAA4AAAA/wAAAP4AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/gAAAP8AAAA4AAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAOAAA
+ AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAAOAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAA
+ AAAAAABGAAAA/wAAAPwAAAD/AAAA/wAAAP8AAAD/AAAA/AAAAP8AAABGAAAAAAAAAAMAAAAAAAAAAAAA
+ AAAAAAADAAAAAAAAADgAAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAADgAAAAAAAAAAwAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAA4AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA
+ AP8AAAA4AAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAAEYAAAD/AAAA/AAAAP8AAAD/AAAA/wAA
+ AP8AAAD8AAAA/wAAAEYAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAOAAAAP8AAAD+AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP4AAAD/AAAAOAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAA
+ ADgAAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAADgAAAAAAAAAAwAAAAAAAAAAAAAAAAAA
+ AAMAAAAAAAAARgAAAP8AAAD8AAAA/wAAAP8AAAD/AAAA/wAAAPwAAAD/AAAARgAAAAAAAAADAAAAAAAA
+ AAAAAAAAAAAAAwAAAAAAAAA4AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAA4AAAAAAAA
+ AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAOAAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP4AAAD/AAAAOAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAABGAAAA/wAAAPwAAAD/AAAA/wAA
+ AP8AAAD/AAAA/AAAAP8AAABGAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAADgAAAD/AAAA/gAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAADgAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAA
+ AAAAAAA4AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAA4AAAAAAAAAAMAAAAAAAAAAAAA
+ AAAAAAADAAAAAAAAAEYAAAD/AAAA/AAAAP8AAAD/AAAA/wAAAP8AAAD8AAAA/wAAAEYAAAAAAAAAAwAA
+ AAAAAAAAAAAAAAAAAAMAAAAAAAAAOAAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAAOAAA
+ AAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAADgAAAD/AAAA/gAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD+AAAA/wAAADgAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAARgAAAP8AAAD8AAAA/wAA
+ AP8AAAD/AAAA/wAAAPwAAAD/AAAARgAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAA4AAAA/wAA
+ AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAA4AAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAMAAAAAAAAAOAAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAAOAAAAAAAAAADAAAAAAAA
+ AAAAAAAAAAAAAwAAAAAAAABGAAAA/wAAAPwAAAD/AAAA/wAAAP8AAAD/AAAA/AAAAP8AAABGAAAAAAAA
+ AAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAADgAAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA
+ ADgAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAA4AAAA/wAAAP4AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/gAAAP8AAAA4AAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAAEYAAAD/AAAA/AAA
+ AP8AAAD/AAAA/wAAAP8AAAD8AAAA/wAAAEYAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAOAAA
+ AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAAOAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAADAAAAAAAAADgAAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAADgAAAAAAAAAAwAA
+ AAAAAAAAAAAAAAAAAAMAAAAAAAAARgAAAP8AAAD8AAAA/wAAAP8AAAD/AAAA/wAAAPwAAAD/AAAARQAA
+ AAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAA4AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA
+ AP8AAAA4AAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAOAAAAP8AAAD+AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP4AAAD/AAAAOAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAABFAAAA/wAA
+ APwAAAD/AAAA/wAAAP4AAAD/AAAA/AAAAP8AAABHAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAA
+ ADUAAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD9AAAA/wAAAD0AAAAAAAAAAwAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAwAAAAAAAAA9AAAA/wAAAP0AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAA1AAAAAAAA
+ AAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAAEcAAAD/AAAA/AAAAP8AAAD+AAAA+wAAAP8AAAD8AAAA/wAA
+ AEoAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAMAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ APwAAAD/AAAATQAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAE0AAAD/AAAA/AAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAADAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAMAAAAAAAAASwAA
+ AP8AAAD8AAAA/wAAAPoAAAD0AAAA/wAAAPwAAAD/AAAAUwAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAgAA
+ AAAAAAArAAAA/gAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA+wAAAP8AAAB0AAAAAAAAAAQAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAQAAAAAAAAAdQAAAP8AAAD7AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD9AAAAKwAA
+ AAAAAAACAAAAAAAAAAAAAAAAAAAAAwAAAAAAAABUAAAA/wAAAPwAAAD/AAAA9AAAAOsAAAD/AAAA+wAA
+ AP8AAABfAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAACAAAAAAAAAB4AAAD2AAAA/wAAAP4AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD8AAAA/wAAAK8AAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAACwAAAA/wAA
+ APwAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAAPYAAAAeAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAEAAAAAAAA
+ AGAAAAD/AAAA+wAAAP8AAADrAAAA3gAAAP8AAAD6AAAA/wAAAHAAAAAAAAAABAAAAAAAAAAAAAAAAAAA
+ AAEAAAAAAAAAEAAAAO0AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA7gAAABoAAAAAAAAAAQAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAEAAAAAAAAAGwAAAO4AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA7QAA
+ ABAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAcQAAAP8AAAD6AAAA/wAAAN4AAADOAAAA/wAA
+ APkAAAD/AAAAhAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAGAAAA3AAAAP8AAAD9AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAPwAAAD/AAAAdQAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAB2AAAA/wAA
+ APwAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/QAAAP8AAADbAAAABQAAAAAAAAABAAAAAAAAAAAAAAAAAAAABAAA
+ AAAAAACFAAAA/wAAAPkAAAD/AAAAzQAAALcAAAD/AAAA+QAAAP8AAACdAAAAAAAAAAMAAAAAAAAAAAAA
+ AAAAAAAAAAAAAgAAAAAAAADDAAAA/wAAAPwAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAADmAAAAFgAA
+ AAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAIAAAAAAAAAFgAAAOYAAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD8AAAA/wAA
+ AMIAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAJ4AAAD/AAAA+QAAAP8AAAC2AAAAmAAA
+ AP8AAAD5AAAA/wAAALkAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAKUAAAD/AAAA+wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/AAAAP8AAACgAAAAAAAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAAAAACgAAAA/wAA
+ APwAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPsAAAD/AAAApAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAA
+ AAIAAAAAAAAAugAAAP8AAAD5AAAA/wAAAJcAAAB5AAAA/wAAAPoAAAD/AAAA1QAAAAIAAAAAAAAAAQAA
+ AAAAAAAAAAAAAAAAAAQAAAAAAAAAfQAAAP8AAAD7AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/AAA
+ AP8AAAB2AAAAAAAAAAUAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAgAAAAUAAAAAAAAAdQAAAP8AAAD8AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA+wAA
+ AP8AAAB8AAAAAAAAAAQAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAMAAADWAAAA/wAAAPoAAAD/AAAAeAAA
+ AFMAAAD/AAAA/AAAAP8AAADwAAAAFgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAwAAAAAAAABQAAAA/wAA
+ APwAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/QAAAP8AAAB1AAAAAAAAAAIAAAAEAAAAAgAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAACAAAAAAAAAHUAAAD/AAAA/QAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD8AAAA/wAAAE8AAAAAAAAAAwAAAAAAAAAAAAAAAAAA
+ AAEAAAAAAAAAFgAAAPEAAAD/AAAA/AAAAP8AAABSAAAAMAAAAPoAAAD/AAAA/gAAAP8AAAA2AAAAAAAA
+ AAMAAAAAAAAAAAAAAAAAAAACAAAAAAAAACgAAAD7AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD+AAAA/AAAAP8AAACjAAAAEwAAAAAAAAABAAAAAwAAAAQAAAADAAAAAwAAAAMAAAADAAAABAAA
+ AAMAAAABAAAAAAAAABIAAACjAAAA/wAAAPwAAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA
+ AP8AAAD7AAAAJwAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAA3AAAA/wAAAP4AAAD/AAAA+gAA
+ AC8AAAAPAAAA5AAAAP8AAAD6AAAA/wAAAGIAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAABQAA
+ ANgAAAD/AAAA/QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/AAAAP8AAADoAAAAdgAA
+ ABUAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAABUAAABzAAAA5wAAAP8AAAD8AAAA/gAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD9AAAA/wAAANgAAAAEAAAAAAAAAAEAAAAAAAAAAAAA
+ AAAAAAAEAAAAAAAAAGMAAAD/AAAA+gAAAP8AAADjAAAADgAAAAAAAADAAAAA/wAAAPgAAAD/AAAAlwAA
+ AAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAApgAAAP8AAAD8AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/AAAAP4AAAD/AAAA8AAAALAAAAB0AAAATQAAADsAAAA7AAAATQAA
+ AHMAAACuAAAA8AAAAP8AAAD+AAAA/AAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ APwAAAD/AAAApQAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAlgAAAP8AAAD4AAAA/wAA
+ AL8AAAAAAAAAAAAAAJAAAAD/AAAA+QAAAP8AAADNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAA
+ AAAAAABkAAAA/wAAAPwAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/QAA
+ APwAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/AAAAP0AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/AAAAP8AAABjAAAAAAAAAAQAAAAAAAAAAAAA
+ AAAAAAAAAAAAAQAAAAAAAADKAAAA/wAAAPkAAAD/AAAAjwAAAAAAAAAAAAAAWgAAAP8AAAD7AAAA/wAA
+ APUAAAAdAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAACAAAAAAAAACcAAAD6AAAA/wAAAP4AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD8AAAA+wAAAPwAAAD9AAAA/QAA
+ APwAAAD7AAAA/AAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP4AAAD/AAAA+gAAACYAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAHQAAAPQAAAD/AAAA+wAA
+ AP8AAABZAAAAAAAAAAAAAAAmAAAA/AAAAP8AAAD8AAAA/wAAAFQAAAAAAAAAAwAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAMgAAAD/AAAA/QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/QAAAP8AAADHAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAwAAAAAAAABVAAAA/wAAAPsAAAD/AAAA+wAAACYAAAAAAAAAAAAAAAEAAADTAAAA/wAA
+ APkAAAD/AAAAmgAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAeAAAAP8AAAD7AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD7AAAA/wAAAHcAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAJoAAAD/AAAA+QAA
+ AP8AAADTAAAAAQAAAAAAAAAEAAAAAAAAAJUAAAD/AAAA+QAAAP8AAADXAAAABAAAAAAAAAABAAAAAAAA
+ AAAAAAAAAAAAAgAAAAAAAAAqAAAA+wAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD7AAAAKQAAAAAAAAACAAAAAAAA
+ AAAAAAAAAAAAAQAAAAAAAAAEAAAA2AAAAP8AAAD5AAAA/wAAAJQAAAAAAAAABAAAAAMAAAAAAAAATQAA
+ AP8AAAD8AAAA/gAAAP8AAAA7AAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAC5AAAA/wAA
+ APwAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD8AAAA/wAAALgAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAADwAAAD/AAAA/gAA
+ APwAAAD/AAAATAAAAAAAAAADAAAAAQAAAAAAAAARAAAA5gAAAP8AAAD6AAAA/wAAAIwAAAAAAAAABAAA
+ AAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAFkAAAD/AAAA/AAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPwAAAD/AAAAWgAAAAAAAAADAAAAAAAA
+ AAAAAAAAAAAAAAAAAAQAAAAAAAAAjQAAAP8AAAD6AAAA/wAAAOUAAAAQAAAAAAAAAAEAAAAAAAAAAwAA
+ AAAAAACjAAAA/wAAAPoAAAD/AAAA2QAAAAYAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAACwAA
+ ANwAAAD/AAAA/QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD9AAAA/wAAAN0AAAALAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAcAAADZAAAA/wAA
+ APoAAAD/AAAAogAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAAAAE8AAAD/AAAA/AAAAP0AAAD/AAAATAAA
+ AAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAeAAAAP8AAAD7AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPsAAAD/AAAAeAAAAAAAAAAEAAAAAAAA
+ AAAAAAAAAAAAAAAAAAMAAAAAAAAATAAAAP8AAAD9AAAA/QAAAP8AAABOAAAAAAAAAAMAAAAAAAAAAAAA
+ AAEAAAAAAAAADAAAAN4AAAD/AAAA+gAAAP8AAACqAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAQAA
+ AAAAAAAXAAAA6AAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD+AAAA/wAAAOgAAAAWAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAACrAAAA/wAA
+ APoAAAD/AAAA3gAAAAsAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAiwAAAP8AAAD7AAAA/wAA
+ APUAAAAkAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAB9AAAA/wAAAPsAAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPsAAAD/AAAAfQAAAAAAAAAEAAAAAAAA
+ AAAAAAAAAAAAAAAAAAIAAAAAAAAAJQAAAPUAAAD/AAAA+wAAAP8AAACLAAAAAAAAAAQAAAAAAAAAAAAA
+ AAAAAAAAAAAAAgAAAAAAAAAuAAAA/AAAAP8AAAD7AAAA/wAAAIkAAAAAAAAABAAAAAAAAAAAAAAAAAAA
+ AAAAAAABAAAAAAAAABMAAADiAAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD+AAAA/wAAAOEAAAASAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAACJAAAA/wAA
+ APsAAAD/AAAA/AAAAC4AAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAACzAAAA/wAA
+ APsAAAD/AAAA5wAAABUAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAGYAAAD/AAAA/AAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPwAAAD/AAAAZgAAAAAAAAADAAAAAAAA
+ AAAAAAAAAAAAAAAAAAEAAAAAAAAAFgAAAOgAAAD/AAAA+wAAAP8AAACxAAAAAAAAAAIAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAEoAAAD/AAAA/QAAAPsAAAD/AAAAfAAAAAAAAAAEAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAMYAAAD/AAAA/AAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD8AAAA/wAAAMUAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAB8AAAA/wAA
+ APsAAAD9AAAA/wAAAEYAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAA
+ AMUAAAD/AAAA+wAAAP8AAADoAAAAFgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAOAAA
+ APsAAAD+AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP4AAAD7AAAAOAAAAAAAAAACAAAAAAAA
+ AAAAAAAAAAAAAAAAAAEAAAAAAAAAFgAAAOgAAAD/AAAA+wAAAP8AAADEAAAAAAAAAAEAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAVAAAAP8AAAD8AAAA+wAAAP8AAACEAAAAAAAA
+ AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAhwAAAP8AAAD7AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD7AAAA/wAAAIgAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAACEAAAA/wAA
+ APsAAAD9AAAA/wAAAFMAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAxgAAAP8AAAD8AAAA/wAAAPMAAAAnAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAQAA
+ AAAAAAAGAAAAyQAAAP8AAAD8AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/AAAAP8AAADKAAAABwAAAAAAAAABAAAAAAAA
+ AAAAAAAAAAAAAAAAAAIAAAAAAAAAJwAAAPMAAAD/AAAA/AAAAP8AAADFAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAABLAAAA/wAAAP0AAAD8AAAA/wAA
+ AKYAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAuAAAA9AAAAP8AAAD+AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP4AAAD/AAAA9AAAAC8AAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAACmAAAA/wAA
+ APwAAAD9AAAA/wAAAEsAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAgAAAAAAAAC0AAAA/wAAAPwAAAD9AAAA/wAAAE0AAAAAAAAAAwAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAABAAAAAAAAABdAAAA/wAAAPwAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/AAAAP8AAABeAAAAAAAAAAQAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAMAAAAAAAAATQAAAP8AAAD9AAAA/AAAAP8AAAC0AAAAAAAAAAIAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAADEAAAD5AAAA/wAA
+ AP0AAAD/AAAA2AAAAA4AAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAACLAAAA/wAA
+ APsAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ APsAAAD/AAAAjAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAA4AAADYAAAA/wAA
+ AP0AAAD/AAAA+QAAADEAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAIkAAAD/AAAA+wAAAPsAAAD/AAAAkQAAAAAAAAAEAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAAAAACrAAAA/wAAAPoAAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD6AAAA/wAAAKwAAAAAAAAAAgAAAAEAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAQAAAAAAAAAkQAAAP8AAAD7AAAA+wAAAP8AAACIAAAAAAAAAAMAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAADAAA
+ ANQAAAD/AAAA/QAAAP0AAAD/AAAATwAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAA
+ AAkAAADBAAAA/wAAAPsAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA+wAA
+ AP8AAADCAAAACgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAE4AAAD/AAAA/QAA
+ AP0AAAD/AAAA1AAAAAwAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAARwAAAP8AAAD9AAAA/QAAAP8AAADjAAAAGgAA
+ AAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAABAAAADKAAAA/wAAAPsAAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPsAAAD/AAAAywAAABEAAAAAAAAAAgAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAgAAAAAAAAAbAAAA4wAAAP8AAAD9AAAA/QAAAP8AAABHAAAAAAAAAAMAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAMAAAAAAAAAjgAAAP8AAAD7AAAA/AAAAP8AAAC4AAAAAQAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAACAAAAAAAAABQAAADKAAAA/wAAAPsAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD7AAAA/wAA
+ AMwAAAAVAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAgAAALkAAAD/AAAA/AAA
+ APsAAAD/AAAAjwAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAIAAAAzAAAAP8AAAD8AAAA+wAA
+ AP8AAACKAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAABAAAADCAAAA/wAA
+ APoAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA+gAAAP8AAADDAAAAEQAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAABAAAAAAAAACLAAAA/wAAAPsAAAD8AAAA/wAAAMwAAAAIAAAAAAAAAAEAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAgAAAAAAAAAvAAAA8wAAAP8AAAD+AAAA/AAAAP8AAABlAAAAAAAAAAQAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAkAAACsAAAA/wAAAPsAAAD+AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAPsAAAD/AAAArgAA
+ AAoAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAZQAAAP8AAAD8AAAA/gAA
+ AP8AAAD0AAAALwAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAABbAAAA/wAA
+ APwAAAD+AAAA/gAAAPwAAABJAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAgAA
+ AAAAAACMAAAA/wAAAP0AAAD8AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAPwAAAD9AAAA/wAAAI0AAAAAAAAAAgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAEAAAAAAAAAEkAAAD8AAAA/gAAAP4AAAD8AAAA/wAAAFwAAAAAAAAABAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAACLAAAA/wAAAPsAAAD9AAAA/wAAAPEAAAA4AAAAAAAA
+ AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAAAAABaAAAA9QAAAP8AAAD7AAAA/gAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD7AAAA/wAAAPUAAABdAAAAAAAA
+ AAMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAA4AAAA8QAAAP8AAAD9AAAA+wAA
+ AP8AAACLAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAA
+ AAAAAACsAAAA/wAAAPsAAAD9AAAA/wAAAOsAAAAwAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAABAAAABAAAAAAAAAAqAAAAzAAAAP8AAAD8AAAA/AAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD8AAAA/AAAAP8AAADOAAAAKwAAAAAAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAQAAAAAAAAALwAAAOsAAAD/AAAA/QAAAPsAAAD/AAAArQAAAAAAAAACAAAAAQAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAoAAADFAAAA/wAAAPsAAAD9AAAA/wAA
+ AOcAAAAvAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAGAAAAhgAA
+ APsAAAD/AAAA/AAAAP0AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD9AAAA/AAAAP8AAAD8AAAAiAAAAAcAAAAAAAAAAwAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAC8AAADnAAAA/wAAAP0AAAD7AAAA/wAA
+ AMYAAAAKAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAACAAAAAAAAABcAAADUAAAA/wAAAPwAAAD9AAAA/wAAAOsAAAA3AAAAAAAAAAUAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAMAAAAAAAAAMwAAAMkAAAD/AAAA/gAAAPwAAAD9AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/AAA
+ AP4AAAD/AAAAygAAADUAAAAAAAAAAwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAA
+ AAAAAAA2AAAA6wAAAP8AAAD9AAAA/AAAAP8AAADVAAAAGAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAB0AAADbAAAA/wAA
+ APwAAAD9AAAA/wAAAPEAAABIAAAAAAAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA
+ AAMAAAAAAAAAAwAAAGIAAADlAAAA/wAAAP4AAAD7AAAA/QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD9AAAA+wAAAP4AAAD/AAAA5gAAAGUAAAADAAAAAAAAAAMAAAABAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAAAAAAARgAAAPEAAAD/AAAA/QAAAPwAAAD/AAAA3AAA
+ AB0AAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAACIAAADdAAAA/wAAAPsAAAD9AAAA/gAAAP0AAABkAAAAAAAA
+ AAQAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAADAAAAAAAAABAAAAB6AAAA6gAA
+ AP8AAAD+AAAA/AAAAPwAAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD8AAAA/AAAAP4AAAD/AAAA7AAA
+ AH0AAAAQAAAAAAAAAAIAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAEAAAAAAAA
+ AGMAAAD8AAAA/gAAAP0AAAD7AAAA/wAAAN0AAAAjAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAA
+ AB8AAADXAAAA/wAAAPsAAAD9AAAA/AAAAP8AAACLAAAAAQAAAAEAAAADAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAEAAAADAAAAAgAAAAAAAAAUAAAAdgAAAN8AAAD/AAAA/gAAAP4AAAD7AAAA/AAA
+ AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA
+ APwAAAD7AAAA/gAAAP4AAAD/AAAA4QAAAHkAAAAUAAAAAAAAAAEAAAADAAAAAQAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAADAAAAAQAAAAEAAACLAAAA/wAAAPwAAAD9AAAA+wAAAP8AAADVAAAAHQAA
+ AAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAABYAAADIAAAA/wAAAPsAAAD+AAAA+wAA
+ AP8AAAC8AAAAGAAAAAAAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAA
+ AAEAAAAAAAAACgAAAFcAAAC6AAAA+gAAAP8AAAD/AAAA/wAAAPwAAAD7AAAA/QAAAP4AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP4AAAD9AAAA+wAAAPsAAAD/AAAA/wAAAP8AAAD7AAAAvQAAAFkAAAALAAAAAAAA
+ AAEAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAAAAAAXAAAAuwAA
+ AP8AAAD7AAAA/gAAAPsAAAD/AAAAyAAAABcAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAADAAAAAAAAAAkAAACtAAAA/wAAAPsAAAD9AAAA+wAAAP8AAADnAAAATAAAAAAAAAACAAAAAwAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAABAAAAAAAAAAAAAAAmAAAAdgAA
+ AMkAAAD6AAAA/wAAAP8AAAD/AAAA/wAAAPwAAAD7AAAA+wAAAPwAAAD9AAAA/gAAAP4AAAD+AAAA/wAA
+ AP8AAAD/AAAA/wAAAP4AAAD+AAAA/gAAAP0AAAD8AAAA+wAAAPsAAAD8AAAA/wAAAP8AAAD/AAAA/wAA
+ APoAAADKAAAAegAAACcAAAAAAAAAAAAAAAEAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAwAAAAIAAAAAAAAASgAAAOYAAAD/AAAA+wAAAP0AAAD7AAAA/wAAAK8AAAAKAAAAAAAA
+ AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAgAAAAAAAACLAAAA/wAA
+ AP0AAAD8AAAA/AAAAP4AAAD/AAAAkwAAAAwAAAAAAAAAAwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAEAAAAEAAAAAgAAAAAAAAAAAAAAAQAAACIAAABjAAAApwAAANgAAAD7AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD7AAAA2wAAAKcAAABmAAAAJQAAAAEAAAAAAAAAAAAAAAIAAAAEAAAAAQAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAMAAAAAAAAACwAAAJIAAAD/AAAA/gAA
+ APwAAAD8AAAA/QAAAP8AAACMAAAAAAAAAAIAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAAAAABZAAAA9AAAAP8AAAD7AAAA/QAAAPwAAAD/AAAA3gAA
+ AEkAAAAAAAAAAQAAAAMAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA
+ AAQAAAABAAAAAAAAAAAAAAAAAAAABAAAACYAAABOAAAAewAAAKUAAADDAAAA2wAAAO0AAAD2AAAA/gAA
+ AP8AAAD/AAAA/wAAAP8AAAD+AAAA9gAAAO0AAADbAAAAwwAAAKUAAAB+AAAAUgAAACYAAAAFAAAAAAAA
+ AAAAAAAAAAAAAQAAAAQAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA
+ AAMAAAABAAAAAAAAAEgAAADdAAAA/wAAAPwAAAD9AAAA+wAAAP8AAAD1AAAAWwAAAAAAAAAEAAAAAQAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAA
+ AAAAAAAsAAAAzwAAAP8AAAD8AAAA/AAAAPwAAAD+AAAA/wAAAKoAAAAiAAAAAAAAAAEAAAAEAAAAAQAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABAAAAAMAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAFAAAAEAAAAB4AAAArAAAAMAAAADYAAAA2AAAAMAAAACsAAAAeAAAAEAAA
+ AAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAABAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAACAAAAAAAAACEAAACqAAAA/wAAAP4AAAD8AAAA/AAA
+ APwAAAD/AAAA0QAAACwAAAAAAAAABAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAHAAAAjwAAAP8AAAD+AAAA/AAA
+ APwAAAD8AAAA/wAAAPUAAACGAAAAEwAAAAAAAAABAAAAAwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAwAAAAQAAAADAAAAAgAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAADAAAABAAAAAMAAAACAAAAAQAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAQAAAABAAAAAAAA
+ ABMAAACEAAAA9AAAAP8AAAD8AAAA/AAAAPwAAAD+AAAA/wAAAJAAAAAIAAAAAAAAAAMAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAgAAAAMAAAAAAAAAQgAAANkAAAD/AAAA/AAAAPwAAAD8AAAA/QAAAP8AAADrAAAAfQAA
+ ABIAAAAAAAAAAQAAAAMAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAACAAAAAgAAAAIAAAADAAAAAwAAAAIAAAACAAAAAgAA
+ AAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAABAAAAAwAAAAMAAAABAAAAAAAAABIAAAB7AAAA6wAAAP8AAAD9AAAA/AAAAPwAAAD8AAAA/wAA
+ ANoAAABEAAAAAAAAAAMAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMAAAAAAAAACgAA
+ AIgAAAD5AAAA/wAAAPwAAAD7AAAA/AAAAP4AAAD/AAAA7AAAAIwAAAAiAAAAAAAAAAEAAAABAAAABAAA
+ AAMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAABAAAAAEAAAABAAAAAAAAACEAAACKAAAA6gAA
+ AP8AAAD+AAAA/AAAAPsAAAD8AAAA/wAAAPkAAACJAAAACgAAAAAAAAADAAAAAQAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAACAAAAAAAAACwAAAC3AAAA/wAAAP8AAAD8AAAA+wAA
+ APsAAAD+AAAA/wAAAPYAAACtAAAASgAAAAcAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAIAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAQAAAAEAAAAAAAA
+ AAAAAAAAAAAABgAAAEkAAACsAAAA9gAAAP8AAAD+AAAA+wAAAPsAAAD8AAAA/wAAAP8AAAC1AAAAKgAA
+ AAAAAAACAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAEAAAADAAAAAQAAAAAAAABHAAAAygAAAP8AAAD+AAAA/QAAAPoAAAD7AAAA/gAAAP8AAAD/AAAA3AAA
+ AIwAAAA6AAAABQAAAAAAAAAAAAAAAAAAAAEAAAAEAAAABAAAAAMAAAABAAAAAQAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAA
+ AAMAAAAEAAAABAAAAAEAAAAAAAAAAAAAAAAAAAAFAAAANwAAAIwAAADcAAAA/wAAAP8AAAD+AAAA+wAA
+ APoAAAD9AAAA/gAAAP8AAADMAAAARwAAAAAAAAABAAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAwAAAAAAAAACAAAAUAAA
+ AMoAAAD/AAAA/wAAAP4AAAD6AAAA+gAAAP0AAAD/AAAA/wAAAP8AAADbAAAAmwAAAFIAAAAaAAAAAQAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAMAAAAEAAAABAAAAAQAAAADAAAAAwAAAAMAAAADAAAAAwAA
+ AAMAAAAEAAAABAAAAAQAAAADAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoAAABSAAAAmAAA
+ ANoAAAD+AAAA/wAAAP8AAAD9AAAA+gAAAPoAAAD+AAAA/wAAAP8AAADLAAAAUgAAAAMAAAAAAAAAAwAA
+ AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAIAAAAAAAAAAQAAAEYAAAC2AAAA+wAAAP8AAAD/AAAA/QAA
+ APkAAAD6AAAA/QAAAP8AAAD/AAAA/wAAAPUAAADOAAAAlgAAAGEAAAA2AAAAFgAAAAMAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAA
+ ABYAAAA2AAAAYQAAAJcAAADLAAAA9AAAAP8AAAD/AAAA/wAAAP4AAAD6AAAA+QAAAPwAAAD/AAAA/wAA
+ APsAAAC2AAAARwAAAAIAAAAAAAAAAgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAMAAAACAAAAAAAAAAAAAAAqAAAAiwAAAOIAAAD/AAAA/gAAAP8AAAD8AAAA+QAAAPkAAAD8AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAADxAAAA1gAAALoAAACeAAAAhQAAAHAAAABgAAAAUwAAAEsAAABHAAAARwAA
+ AEsAAABTAAAAYAAAAHAAAACFAAAAngAAALoAAADWAAAA8QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/AAA
+ APkAAAD5AAAA/AAAAP8AAAD+AAAA/wAAAOMAAACMAAAAKgAAAAAAAAAAAAAAAgAAAAMAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAgAAAAAAAAAAAAAACgAA
+ AEwAAACkAAAA6QAAAP8AAAD+AAAA/wAAAP8AAAD7AAAA+QAAAPgAAAD6AAAA/gAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/gAAAPoAAAD4AAAA+AAAAPsAAAD/AAAA/wAAAP4AAAD/AAAA6gAAAKUAAABOAAAACgAA
+ AAAAAAAAAAAAAgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAQAAAAAAAAAAAAAAAAAAAAOAAAASgAAAJMAAADUAAAA+gAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/AAAAPoAAAD5AAAA+QAAAPkAAAD6AAAA+wAAAPwAAAD8AAAA/AAA
+ APwAAAD8AAAA/AAAAPsAAAD6AAAA+QAAAPkAAAD5AAAA+gAAAPwAAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ APsAAADUAAAAlAAAAEwAAAAPAAAAAAAAAAAAAAAAAAAABAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAEAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAIAAAAiAAAAWQAAAI8AAAC/AAAA4wAAAPkAAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAPsAAADmAAAAwQAAAI8AAABZAAAAJQAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAwAA
+ AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAAEAAAAAQAA
+ AAAAAAAAAAAAAAAAAAAAAAANAAAALQAAAFMAAAB4AAAAmQAAALYAAADOAAAA3gAAAOsAAAD0AAAA+wAA
+ AP4AAAD+AAAA+wAAAPQAAADrAAAA3gAAAM4AAAC2AAAAmQAAAHgAAABTAAAAMAAAAA8AAAAAAAAAAAAA
+ AAAAAAAAAAAAAQAAAAQAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF//////////////////+gBAAAAAAA
+ AAAAAAAAAAAAIAX//////////////////6AF//////////////////+gBf//////////////////oAXS
+ ////////////////S6AF6X///////////////pegBdC///////////////0LoAXSX//////////////6
+ S6AF0S//////////////9IugBdCX/////////////+kLoAXQS//////////////SC6AF0CX/////////
+ ////pAugBdAS/////////////0gLoAXQCX////////////6QC6AF0AS////////////9IAugBdACX///
+ ////////+kALoAXQAS////////////SAC6AF0ACX///////////pAAugBdAAS///////////0gALoAXQ
+ ACX//////////6QAC6AF0AAS//////////9IAAugBdAACX/////////+kAALoAXQAAS//////////SAA
+ C6AF0AACX/////////pAAAugBdAAAS/////////0gAALoAXQAACX////////6QAAC6AF0AAAS///////
+ /9IAAAugBdAAACX///////+kAAALoAXQAAAS////////SAAAC6AF0AAACX///////pAAAAugBdAAAAS/
+ //////0gAAALoAXQAAACX//////6QAAAC6AF0AAAAS//////9IAAAAugBdAAAACX/////+kAAAALoAXQ
+ AAAAS//////SAAAAC6AF0AAAACX/////pAAAAAugBdAAAAAS/////0gAAAALoAXQAAAACX////6QAAAA
+ C6AF0AAAAAS////9IAAAAAugBdAAAAACX///+kAAAAALoAXQAAAAAS////SAAAAAC6AF0AAAAACX///p
+ AAAAAAugBdAAAAAAS///0gAAAAALoAXQAAAAACf//+QAAAAAC6AF0AAAAAAT///IAAAAAAugBdAAAAAA
+ C///0AAAAAALoAXQAAAAAAv//9AAAAAAC6AF0AAAAAAL///QAAAAAAugBdAAAAAAC///0AAAAAALoAXQ
+ AAAAAAv//9AAAAAAC6AF0AAAAAAL///QAAAAAAugBdAAAAAAC///0AAAAAALoAXQAAAAAAv//9AAAAAA
+ C6AF0AAAAAAL///QAAAAAAugBdAAAAAAC///0AAAAAALoAXQAAAAAAv//9AAAAAAC6AF0AAAAAAL///Q
+ AAAAAAugBdAAAAAAC///0AAAAAALoAXQAAAAAAv//9AAAAAAC6AF0AAAAAAJ//+QAAAAAAugBdAAAAAA
+ Cf//kAAAAAALoAXQAAAAAAn//5AAAAAAC6AF0AAAAAAE//8gAAAAAAugBNAAAAAABX/+oAAAAAALIATI
+ AAAAAAK//UAAAAAAEyAEyAAAAAACX/pAAAAAABMgAsgAAAAAAS/0gAAAAAATQALoAAAAAACBgQAAAAAA
+ F0AC6AAAAAAAIAQAAAAAABdAAmgAAAAAAAmQAAAAAAAWQIJkAAAAAAAAAAAAAAAAJkGCZAAAAAAAAAAA
+ AAAAACZBgXQAAAAAAAAAAAAAAAAugYEyAAAAAAAAAAAAAAAATIGBMgAAAAAAAAAAAAAAAEyBQLIAAAAA
+ AAAAAAAAAABNAkCZAAAAAAAAAAAAAAAAmQJAmQAAAAAAAAAAAAAAAJkCIEkAAAAAAAAAAAAAAACSBCBM
+ gAAAAAAAAAAAAAABMgQgRIAAAAAAAAAAAAAAASIEkCZAAAAAAAAAAAAAAAJkCZAiQAAAAAAAAAAAAAAC
+ RAmIEqAAAAAAAAAAAAAABUgRyBUAAAAAAAAAAAAAAACoE8QJ0AAAAAAAAAAAAAALkCPkCqgAAAAAAAAA
+ AAAAFVAn4ATIAAAAAAAAAAAAABMgR/IEVAAAAAAAAAAAAAAqIE/xAqoAAAAAAAAAAAAAVUCP+QExAAAA
+ AAAAAAAAAIyAn/qBVIAAAAAAAAAAAAEqgV/8gKqAAAAAAAAAAAABVQE//UBVQAAAAAAAAAAAAqoCv/6g
+ CqAAAAAAAAAAAAVQBX//ICFQAAAAAAAAAAAKhAT//1AVqAAAAAAAAAAAFagK//+oCtIAAAAAAAAAAEtQ
+ Ff//1AVpAAAAAAAAAACWoCP//9IClIAAAAAAAAABKUBL///qAUpAAAAAAAAAAlKAV///9QCUkAAAAAAA
+ AAkpAK////qAS0gAAAAAAAAS0gFf///9QCWSAAAAAAAASaQCv////qABaIAAAAAAARaABX////9QBLog
+ AAAAAARdIAr/////qAIshAAAAAAhNEAV/////9IAk6IAAAAARckAS//////pAEToUAAAChciAJf/////
+ 9IARPQRAAiC8iAEv//////pABA/AJ+QD8CACX//////8kAEL/gAAf9CACT///////0gAQH////wCABL/
+ //////+yAAgH///gEABF////////6IABQB/4AoABF/////////JAABIAAEAAAk/////////9EAAAv/0A
+ AAi//////////0IAAAAAAABC///////////QgAAAAAABC///////////9BAAAAAACC////////////yK
+ AAAAAFE/////////////gJAAAAkB//////8=
+
+
+
\ No newline at end of file
diff --git a/src/UI/SettingsForm.cs b/src/UI/SettingsForm.cs
new file mode 100644
index 0000000..82ac816
--- /dev/null
+++ b/src/UI/SettingsForm.cs
@@ -0,0 +1,259 @@
+using System;
+using System.Drawing;
+using System.Security.Cryptography;
+using System.Windows.Forms;
+using SshTunnelMonitor.Models;
+
+namespace SshTunnelMonitor.UI
+{
+ public sealed class SettingsForm : Form
+ {
+ private readonly AppSettings _settings;
+ private readonly TextBox _txtHost = new TextBox();
+ private readonly NumericUpDown _numSshPort = new NumericUpDown();
+ private readonly TextBox _txtUser = new TextBox();
+ private readonly TextBox _txtPassword = new TextBox();
+ private readonly CheckBox _chkSavePassword = new CheckBox();
+ private readonly NumericUpDown _numRemotePort = new NumericUpDown();
+ private readonly NumericUpDown _numLocalPort = new NumericUpDown();
+ private readonly NumericUpDown _numMaxFailures = new NumericUpDown();
+ private readonly NumericUpDown _numReconnectTimeout = new NumericUpDown();
+ private readonly TextBox _txtSsPath = new TextBox();
+ private readonly TextBox _txtSsArgs = new TextBox();
+ private readonly TextBox _txtSystemPassword = new TextBox();
+ private readonly CheckBox _chkShowSystemPassword = new CheckBox();
+ private readonly TextBox _txtThreeProxyPassword = new TextBox();
+ private readonly CheckBox _chkShowThreeProxyPassword = new CheckBox();
+ private readonly Button _btnGenerateThreeProxyPassword = new Button();
+
+ public SettingsForm(AppSettings settings)
+ {
+ _settings = settings;
+ Text = "Настройки";
+ Width = 560;
+ Height = 520;
+ FormBorderStyle = FormBorderStyle.FixedDialog;
+ MaximizeBox = false;
+ MinimizeBox = false;
+ StartPosition = FormStartPosition.CenterParent;
+
+ BuildLayout();
+ LoadValues();
+ }
+
+ private void BuildLayout()
+ {
+ var panel = new TableLayoutPanel
+ {
+ Dock = DockStyle.Fill,
+ Padding = new Padding(10),
+ ColumnCount = 2,
+ RowCount = 14
+ };
+ panel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 44f));
+ panel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 56f));
+
+ Controls.Add(panel);
+
+ AddRow(panel, "Сервер:", _txtHost, 0);
+ AddRow(panel, "Порт:", _numSshPort, 1);
+ AddRow(panel, "Логин:", _txtUser, 2);
+ _txtPassword.PasswordChar = '*';
+ AddRow(panel, "Пароль:", _txtPassword, 3);
+ _chkSavePassword.Text = "Сохранить пароль";
+ AddRow(panel, string.Empty, _chkSavePassword, 4);
+ AddRow(panel, "Удаленный порт:", _numRemotePort, 5);
+ AddRow(panel, "Локальный порт:", _numLocalPort, 6);
+ AddRow(panel, "Макс. потерь:", _numMaxFailures, 7);
+ AddRow(panel, "Таймаут reconnect (сек):", _numReconnectTimeout, 8);
+ AddRow(panel, "Путь к ss:", _txtSsPath, 9);
+ AddRow(panel, "Аргументы ss:", _txtSsArgs, 10);
+ BuildSystemPasswordRow(panel, 11);
+ BuildThreeProxyPasswordRow(panel, 12);
+
+ foreach (var num in new[] { _numSshPort, _numRemotePort, _numLocalPort })
+ {
+ num.Minimum = 1;
+ num.Maximum = 65535;
+ }
+
+ _numMaxFailures.Minimum = 1;
+ _numMaxFailures.Maximum = 10;
+ _numReconnectTimeout.Minimum = 5;
+ _numReconnectTimeout.Maximum = 60;
+
+ var buttonsPanel = new FlowLayoutPanel
+ {
+ Dock = DockStyle.Fill,
+ FlowDirection = FlowDirection.RightToLeft
+ };
+ var btnSave = new Button { Text = "Сохранить", Width = 120, Height = 30 };
+ var btnCancel = new Button { Text = "Отмена", Width = 120, Height = 30 };
+ btnSave.Click += (_, __) => SaveAndClose();
+ btnCancel.Click += (_, __) => DialogResult = DialogResult.Cancel;
+
+ buttonsPanel.Controls.Add(btnSave);
+ buttonsPanel.Controls.Add(btnCancel);
+ panel.Controls.Add(buttonsPanel, 0, 13);
+ panel.SetColumnSpan(buttonsPanel, 2);
+ }
+
+ private void BuildSystemPasswordRow(TableLayoutPanel panel, int row)
+ {
+ panel.RowStyles.Add(new RowStyle(SizeType.Absolute, 34f));
+ panel.Controls.Add(new Label
+ {
+ Text = "Пароль Sterra:",
+ TextAlign = ContentAlignment.MiddleLeft,
+ Dock = DockStyle.Fill
+ }, 0, row);
+
+ var passPanel = new FlowLayoutPanel
+ {
+ Dock = DockStyle.Fill,
+ FlowDirection = FlowDirection.LeftToRight,
+ WrapContents = false,
+ AutoSize = false
+ };
+
+ _txtSystemPassword.Width = 170;
+ _txtSystemPassword.PasswordChar = '*';
+
+ _chkShowSystemPassword.Text = "Показать";
+ _chkShowSystemPassword.AutoSize = true;
+ _chkShowSystemPassword.CheckedChanged += (_, __) =>
+ {
+ _txtSystemPassword.PasswordChar = _chkShowSystemPassword.Checked ? '\0' : '*';
+ };
+
+ passPanel.Controls.Add(_txtSystemPassword);
+ passPanel.Controls.Add(_chkShowSystemPassword);
+ panel.Controls.Add(passPanel, 1, row);
+ }
+
+ private void BuildThreeProxyPasswordRow(TableLayoutPanel panel, int row)
+ {
+ panel.RowStyles.Add(new RowStyle(SizeType.Absolute, 34f));
+ panel.Controls.Add(new Label
+ {
+ Text = "Пароль прокси:",
+ TextAlign = ContentAlignment.MiddleLeft,
+ Dock = DockStyle.Fill
+ }, 0, row);
+
+ var passPanel = new FlowLayoutPanel
+ {
+ Dock = DockStyle.Fill,
+ FlowDirection = FlowDirection.LeftToRight,
+ WrapContents = false,
+ AutoSize = false
+ };
+
+ _txtThreeProxyPassword.Width = 170;
+ _txtThreeProxyPassword.PasswordChar = '*';
+
+ _chkShowThreeProxyPassword.Text = "Показать";
+ _chkShowThreeProxyPassword.AutoSize = true;
+ _chkShowThreeProxyPassword.CheckedChanged += (_, __) =>
+ {
+ _txtThreeProxyPassword.PasswordChar = _chkShowThreeProxyPassword.Checked ? '\0' : '*';
+ };
+
+ _btnGenerateThreeProxyPassword.Text = "Сгенерировать";
+ _btnGenerateThreeProxyPassword.AutoSize = true;
+ _btnGenerateThreeProxyPassword.Click += (_, __) =>
+ {
+ _txtThreeProxyPassword.Text = GeneratePassword();
+ };
+
+ passPanel.Controls.Add(_txtThreeProxyPassword);
+ passPanel.Controls.Add(_chkShowThreeProxyPassword);
+ passPanel.Controls.Add(_btnGenerateThreeProxyPassword);
+ panel.Controls.Add(passPanel, 1, row);
+ }
+
+ private static void AddRow(TableLayoutPanel panel, string label, Control control, int row)
+ {
+ panel.RowStyles.Add(new RowStyle(SizeType.Absolute, 34f));
+
+ if (!string.IsNullOrEmpty(label))
+ {
+ panel.Controls.Add(new Label
+ {
+ Text = label,
+ TextAlign = ContentAlignment.MiddleLeft,
+ Dock = DockStyle.Fill
+ }, 0, row);
+ }
+
+ control.Dock = DockStyle.Fill;
+ panel.Controls.Add(control, 1, row);
+ }
+
+ private void LoadValues()
+ {
+ _txtHost.Text = _settings.SshHost;
+ _numSshPort.Value = _settings.SshPort;
+ _txtUser.Text = _settings.SshUsername;
+ _txtPassword.Text = _settings.GetPassword();
+ _chkSavePassword.Checked = _settings.SavePassword;
+ _numRemotePort.Value = _settings.RemotePort;
+ _numLocalPort.Value = _settings.LocalPort;
+ _numMaxFailures.Value = _settings.MaxPingFailures;
+ _numReconnectTimeout.Value = _settings.ReconnectTimeoutSec;
+ _txtSsPath.Text = _settings.SsProcessPath;
+ _txtSsArgs.Text = _settings.SsArguments;
+ _txtSystemPassword.Text = _settings.GetSystemPassword();
+ _txtThreeProxyPassword.Text = _settings.GetThreeProxyPassword();
+ }
+
+ private void SaveAndClose()
+ {
+ if (string.IsNullOrWhiteSpace(_txtHost.Text))
+ {
+ MessageBox.Show(this, "Поле сервера обязательно.", "Валидация", MessageBoxButtons.OK, MessageBoxIcon.Warning);
+ return;
+ }
+
+ _settings.SshHost = _txtHost.Text.Trim();
+ _settings.SshPort = (int)_numSshPort.Value;
+ _settings.SshUsername = _txtUser.Text.Trim();
+ _settings.SavePassword = _chkSavePassword.Checked;
+ _settings.SetPassword(_txtPassword.Text);
+ _settings.RemotePort = (int)_numRemotePort.Value;
+ _settings.LocalPort = (int)_numLocalPort.Value;
+ _settings.MaxPingFailures = (int)_numMaxFailures.Value;
+ _settings.ReconnectTimeoutSec = (int)_numReconnectTimeout.Value;
+ _settings.SsProcessPath = string.IsNullOrWhiteSpace(_txtSsPath.Text)
+ ? System.IO.Path.Combine("App_Data", "ss", "ss.exe")
+ : _txtSsPath.Text.Trim();
+ _settings.SsArguments = string.IsNullOrWhiteSpace(_txtSsArgs.Text)
+ ? System.IO.Path.Combine("App_Data", "ss", "ss.cfg")
+ : _txtSsArgs.Text.Trim();
+ _settings.SetSystemPassword(_txtSystemPassword.Text.Trim());
+ _settings.SetThreeProxyPassword(_txtThreeProxyPassword.Text.Trim());
+ _settings.Save();
+
+ DialogResult = DialogResult.OK;
+ }
+
+ private static string GeneratePassword()
+ {
+ const string alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
+ const int length = 20;
+ var bytes = new byte[length];
+ using (var rng = RandomNumberGenerator.Create())
+ {
+ rng.GetBytes(bytes);
+ }
+
+ var chars = new char[length];
+ for (var i = 0; i < length; i++)
+ {
+ chars[i] = alphabet[bytes[i] % alphabet.Length];
+ }
+
+ return new string(chars);
+ }
+ }
+}
diff --git a/src/logistics_tunnel_icon_148216.ico b/src/logistics_tunnel_icon_148216.ico
new file mode 100644
index 0000000..292f916
Binary files /dev/null and b/src/logistics_tunnel_icon_148216.ico differ
diff --git a/tools/SetVersion.cmd b/tools/SetVersion.cmd
new file mode 100644
index 0000000..a9d47ec
--- /dev/null
+++ b/tools/SetVersion.cmd
@@ -0,0 +1,47 @@
+@echo off
+setlocal enabledelayedexpansion
+
+if [%1] == [] GOTO :USAGE
+set version=%1
+set fileversion=%1
+set informationalversion=%1
+
+if [%2] NEQ [] SET fileversion=%2
+if [%3] NEQ [] SET informationalversion=%3
+
+echo Setting assembly version information
+
+for /F "delims=" %%f in ('dir /s /b Assemblyinfo.cs') do (
+ echo ^> %%f
+
+ pushd %%~dpf
+
+ for /F "usebackq delims=" %%g in ("AssemblyInfo.cs") do (
+ set ln=%%g
+ set skip=0
+
+ if "!ln:AssemblyVersion=!" NEQ "!ln!" set skip=1
+ if "!ln:AssemblyFileVersion=!" NEQ "!ln!" set skip=1
+ if "!ln:AssemblyInformationalVersion=!" NEQ "!ln!" set skip=1
+
+ if !skip!==0 echo !ln! >> AssemblyInfo.cs.versioned
+ )
+
+ echo [assembly: AssemblyVersion^("%version%"^)] >> AssemblyInfo.cs.versioned
+ echo [assembly: AssemblyFileVersion^("%fileversion%"^)] >> AssemblyInfo.cs.versioned
+ echo [assembly: AssemblyInformationalVersion^("%informationalversion%"^)] >> AssemblyInfo.cs.versioned
+
+ copy /y AssemblyInfo.cs AssemblyInfo.cs.orig
+ move /y AssemblyInfo.cs.versioned AssemblyInfo.cs
+
+ popd
+)
+echo Done^^!
+
+GOTO:EOF
+
+:USAGE
+echo Usage:
+echo.
+echo SetVersion.bat Version [FileVersion] [InformationalVersion]
+echo.
\ No newline at end of file