new hotkey system, including new hotkey dialog, things are now done dynamically. Still some todos, also this is a config breaking check in, please delete your existing config before using

This commit is contained in:
adelikat 2013-08-04 16:47:54 +00:00
parent eb04d7e35d
commit 23de20a5b8
9 changed files with 1594 additions and 567 deletions

View File

@ -208,6 +208,12 @@
<Compile Include="config\NewControllerConfig.Designer.cs">
<DependentUpon>NewControllerConfig.cs</DependentUpon>
</Compile>
<Compile Include="config\NewHotkeyWindow.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="config\NewHotkeyWindow.Designer.cs">
<DependentUpon>NewHotkeyWindow.cs</DependentUpon>
</Compile>
<Compile Include="config\PathConfig.cs">
<SubType>Form</SubType>
</Compile>
@ -612,6 +618,9 @@
<EmbeddedResource Include="config\NewControllerConfig.resx">
<DependentUpon>NewControllerConfig.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="config\NewHotkeyWindow.resx">
<DependentUpon>NewHotkeyWindow.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="config\PathInfo.resx">
<DependentUpon>PathInfo.cs</DependentUpon>
</EmbeddedResource>

View File

@ -1,6 +1,8 @@
using System.IO;
using System.Linq;
using System.Drawing;
using System.Collections.Generic;
using System.Collections;
namespace BizHawk.MultiClient
{
@ -587,104 +589,117 @@ namespace BizHawk.MultiClient
public int TI83KeyPadWndy = -1;
public bool TI83ToolTips = true;
// Client Hotkey Bindings
public string ToggleBackgroundInput = "";
public string IncreaseSpeedBinding = "Equals";
public string DecreaseSpeedBinding = "Minus";
public string HardResetBinding = "";
public string RebootCoreResetBinding = "Ctrl+R";
public string FastForwardBinding = "Tab, X1 RightShoulder";
public string RewindBinding = "Shift+R, X1 LeftShoulder";
public string EmulatorPauseBinding = "Pause";
public string FrameAdvanceBinding = "F";
public string TurboBinding = "";
public string MaxTurboBinding = "Shift+Tab";
public string ScreenshotBinding = "F12";
public string ToggleFullscreenBinding = "Alt+Return";
public string QuickSave = "I";
public string QuickLoad = "P";
public string SelectSlot0 = "D0";
public string SelectSlot1 = "D1";
public string SelectSlot2 = "D2";
public string SelectSlot3 = "D3";
public string SelectSlot4 = "D4";
public string SelectSlot5 = "D5";
public string SelectSlot6 = "D6";
public string SelectSlot7 = "D7";
public string SelectSlot8 = "D8";
public string SelectSlot9 = "D9";
public string SaveSlot0 = "Shift+F10";
public string SaveSlot1 = "Shift+F1";
public string SaveSlot2 = "Shift+F2";
public string SaveSlot3 = "Shift+F3";
public string SaveSlot4 = "Shift+F4";
public string SaveSlot5 = "Shift+F5";
public string SaveSlot6 = "Shift+F6";
public string SaveSlot7 = "Shift+F7";
public string SaveSlot8 = "Shift+F8";
public string SaveSlot9 = "Shift+F9";
public string LoadSlot0 = "F10";
public string LoadSlot1 = "F1";
public string LoadSlot2 = "F2";
public string LoadSlot3 = "F3";
public string LoadSlot4 = "F4";
public string LoadSlot5 = "F5";
public string LoadSlot6 = "F6";
public string LoadSlot7 = "F7";
public string LoadSlot8 = "F8";
public string LoadSlot9 = "F9";
public string ToolBox = "T";
public string SaveNamedState = "";
public string LoadNamedState = "";
public string PreviousSlot = "";
public string NextSlot = "";
public string RamWatch = "";
public string RamSearch = "";
public string RamPoke = "";
public string HexEditor = "";
public string LuaConsole = "";
public string Cheats = "";
public string TASTudio = "";
public string OpenROM = "Ctrl+O";
public string CloseROM = "Ctrl+W";
public string FrameCounterBinding = "";
public string FPSBinding = "";
public string LagCounterBinding = "";
public string InputDisplayBinding = "";
public string ReadOnlyToggleBinding = "Q";
public string PlayMovieBinding = "";
public string RecordMovieBinding = "";
public string StopMovieBinding = "";
public string PlayBeginningBinding = "";
public string VolUpBinding = "";
public string VolDownBinding = "";
public string SoftResetBinding = "";
public string ToggleMultiTrack = "";
public string MTRecordAll = "";
public string MTRecordNone = "";
public string MTIncrementPlayer = "";
public string MTDecrementPlayer = "";
public string AVIRecordBinding = "";
public string AVIStopBinding = "";
public string ToggleMenuBinding = "";
public string IncreaseWindowSize = "Alt+UpArrow";
public string DecreaseWindowSize = "Alt+DownArrow";
public string AutoholdBinding = "";
public string AutoholdAutofireBinding = "";
public string AutoholdClear = "";
public string ToggleSNESBG1Binding = "";
public string ToggleSNESBG2Binding = "";
public string ToggleSNESBG3Binding = "";
public string ToggleSNESBG4Binding = "";
public string ToggleSNESOBJ1Binding = "";
public string ToggleSNESOBJ2Binding = "";
public string ToggleSNESOBJ3Binding = "";
public string ToggleSNESOBJ4Binding = "";
public string SaveMovieBinding = "";
public string OpenVirtualPadBinding = "";
public string MoviePlaybackPokeModeBinding = "";
public string ClearFrameBinding = "";
public string YUpLargeBinding = "";
public BindingCollection HotkeyBindings = new BindingCollection()
{
//General
new Binding() { DisplayName = "Frame Advance", Bindings = "F", TabGroup = "General" },
new Binding() { DisplayName = "Rewind", Bindings = "Shift+R, X1 LeftShoulder", TabGroup = "General" },
new Binding() { DisplayName = "Pause", Bindings = "Pause", TabGroup = "General" },
new Binding() { DisplayName = "Fast Forward", Bindings = "Tab, X1 RightShoulder", TabGroup = "General" },
new Binding() { DisplayName = "Turbo", Bindings = "Shift+Tab", TabGroup = "General" },
new Binding() { DisplayName = "Toggle Throttle", Bindings = "", TabGroup = "General" },
new Binding() { DisplayName = "Soft Reset", Bindings = "", TabGroup = "General" },
new Binding() { DisplayName = "Hard Reset", Bindings = "", TabGroup = "General" },
new Binding() { DisplayName = "Quick Load", Bindings = "P", TabGroup = "General" },
new Binding() { DisplayName = "Quick Save", Bindings = "I", TabGroup = "General" },
new Binding() { DisplayName = "Autohold", Bindings = "", TabGroup = "General" },
new Binding() { DisplayName = "Clear Autohold", Bindings = "", TabGroup = "General" },
new Binding() { DisplayName = "Screenshot", Bindings = "F12", TabGroup = "General" },
new Binding() { DisplayName = "Full Screen", Bindings = "Alt+Return", TabGroup = "General" },
new Binding() { DisplayName = "Open ROM", Bindings = "Ctrl+O", TabGroup = "General" },
new Binding() { DisplayName = "Close ROM", Bindings = "Ctrl+W", TabGroup = "General" },
new Binding() { DisplayName = "Display FPS", Bindings = "", TabGroup = "General" },
new Binding() { DisplayName = "Frame Counter", Bindings = "", TabGroup = "General" },
new Binding() { DisplayName = "Lag Counter", Bindings = "", TabGroup = "General" },
new Binding() { DisplayName = "Input Display", Bindings = "", TabGroup = "General" },
new Binding() { DisplayName = "Toggle BG Input", Bindings = "", TabGroup = "General" },
new Binding() { DisplayName = "Toggle Menu", Bindings = "", TabGroup = "General" },
new Binding() { DisplayName = "Volume Up", Bindings = "", TabGroup = "General" },
new Binding() { DisplayName = "Volume Down", Bindings = "", TabGroup = "General" },
new Binding() { DisplayName = "Record A/V", Bindings = "", TabGroup = "General" },
new Binding() { DisplayName = "Stop A/V", Bindings = "", TabGroup = "General" },
new Binding() { DisplayName = "Larger Window", Bindings = "Alt+UpArrow", TabGroup = "General" },
new Binding() { DisplayName = "Smaller Window", Bindings = "Alt+DownArrow", TabGroup = "General" },
new Binding() { DisplayName = "Increase Speed", Bindings = "Equals", TabGroup = "General" },
new Binding() { DisplayName = "Decrease Speed", Bindings = "Minus", TabGroup = "General" },
new Binding() { DisplayName = "Reboot Core", Bindings = "Ctrl+R", TabGroup = "General" },
new Binding() { DisplayName = "Autofire", Bindings = "", TabGroup = "General" },
//Save States
new Binding() { DisplayName = "Save State 0", Bindings = "Shift+F10", TabGroup = "Save States" },
new Binding() { DisplayName = "Save State 1", Bindings = "Shift+F1", TabGroup = "Save States" },
new Binding() { DisplayName = "Save State 2", Bindings = "Shift+F2", TabGroup = "Save States" },
new Binding() { DisplayName = "Save State 3", Bindings = "Shift+F3", TabGroup = "Save States" },
new Binding() { DisplayName = "Save State 4", Bindings = "Shift+F4", TabGroup = "Save States" },
new Binding() { DisplayName = "Save State 5", Bindings = "Shift+F5", TabGroup = "Save States" },
new Binding() { DisplayName = "Save State 6", Bindings = "Shift+F6", TabGroup = "Save States" },
new Binding() { DisplayName = "Save State 7", Bindings = "Shift+F7", TabGroup = "Save States" },
new Binding() { DisplayName = "Save State 8", Bindings = "Shift+F8", TabGroup = "Save States" },
new Binding() { DisplayName = "Save State 9", Bindings = "Shift+F9", TabGroup = "Save States" },
new Binding() { DisplayName = "Load State 0", Bindings = "F10", TabGroup = "Save States" },
new Binding() { DisplayName = "Load State 1", Bindings = "F1", TabGroup = "Save States" },
new Binding() { DisplayName = "Load State 2", Bindings = "F2", TabGroup = "Save States" },
new Binding() { DisplayName = "Load State 3", Bindings = "F3", TabGroup = "Save States" },
new Binding() { DisplayName = "Load State 4", Bindings = "F4", TabGroup = "Save States" },
new Binding() { DisplayName = "Load State 5", Bindings = "F5", TabGroup = "Save States" },
new Binding() { DisplayName = "Load State 6", Bindings = "F6", TabGroup = "Save States" },
new Binding() { DisplayName = "Load State 7", Bindings = "F7", TabGroup = "Save States" },
new Binding() { DisplayName = "Load State 8", Bindings = "F8", TabGroup = "Save States" },
new Binding() { DisplayName = "Load State 9", Bindings = "F9", TabGroup = "Save States" },
new Binding() { DisplayName = "Select State 0", Bindings = "D0", TabGroup = "Save States" },
new Binding() { DisplayName = "Select State 1", Bindings = "D1", TabGroup = "Save States" },
new Binding() { DisplayName = "Select State 2", Bindings = "D2", TabGroup = "Save States" },
new Binding() { DisplayName = "Select State 3", Bindings = "D3", TabGroup = "Save States" },
new Binding() { DisplayName = "Select State 4", Bindings = "D4", TabGroup = "Save States" },
new Binding() { DisplayName = "Select State 5", Bindings = "D5", TabGroup = "Save States" },
new Binding() { DisplayName = "Select State 6", Bindings = "D6", TabGroup = "Save States" },
new Binding() { DisplayName = "Select State 7", Bindings = "D7", TabGroup = "Save States" },
new Binding() { DisplayName = "Select State 8", Bindings = "D8", TabGroup = "Save States" },
new Binding() { DisplayName = "Select State 9", Bindings = "D9", TabGroup = "Save States" },
new Binding() { DisplayName = "Save Named State", Bindings = "", TabGroup = "Save States" },
new Binding() { DisplayName = "Load Named State", Bindings = "", TabGroup = "Save States" },
new Binding() { DisplayName = "Previous Slot", Bindings = "", TabGroup = "Save States" },
new Binding() { DisplayName = "Next Slot", Bindings = "", TabGroup = "Save States" },
//Movie
new Binding() { DisplayName = "Toggle read-only", Bindings = "Q", TabGroup = "Movie" },
new Binding() { DisplayName = "Play Movie", Bindings = "", TabGroup = "Movie" },
new Binding() { DisplayName = "Record Movie", Bindings = "", TabGroup = "Movie" },
new Binding() { DisplayName = "Stop Movie", Bindings = "", TabGroup = "Movie" },
new Binding() { DisplayName = "Play from beginning", Bindings = "", TabGroup = "Movie" },
new Binding() { DisplayName = "Save Movie", Bindings = "", TabGroup = "Movie" },
new Binding() { DisplayName = "Toggle MultiTrack", Bindings = "", TabGroup = "Movie" },
new Binding() { DisplayName = "MT Select All", Bindings = "", TabGroup = "Movie" },
new Binding() { DisplayName = "MT Select None", Bindings = "", TabGroup = "Movie" },
new Binding() { DisplayName = "MT Increment Player", Bindings = "", TabGroup = "Movie" },
new Binding() { DisplayName = "MT Decrement Player", Bindings = "", TabGroup = "Movie" },
new Binding() { DisplayName = "Movie Poke", Bindings = "", TabGroup = "Movie" },
new Binding() { DisplayName = "Scrub Input", Bindings = "", TabGroup = "Movie" },
//Tools
new Binding() { DisplayName = "Ram Watch", Bindings = "", TabGroup = "Tools" },
new Binding() { DisplayName = "Ram Search", Bindings = "", TabGroup = "Tools" },
new Binding() { DisplayName = "Ram Poke", Bindings = "", TabGroup = "Tools" },
new Binding() { DisplayName = "Hex Editor", Bindings = "", TabGroup = "Tools" },
new Binding() { DisplayName = "Lua Console", Bindings = "", TabGroup = "Tools" },
new Binding() { DisplayName = "Cheats", Bindings = "", TabGroup = "Tools" },
new Binding() { DisplayName = "TAStudio", Bindings = "", TabGroup = "Tools" },
new Binding() { DisplayName = "ToolBox", Bindings = "T", TabGroup = "Tools" },
new Binding() { DisplayName = "Virtual Pad", Bindings = "", TabGroup = "Tools" },
//SNES
new Binding() { DisplayName = "SNES Toggle BG 1", Bindings = "", TabGroup = "SNES" },
new Binding() { DisplayName = "SNES Toggle BG 2", Bindings = "", TabGroup = "SNES" },
new Binding() { DisplayName = "SNES Toggle BG 3", Bindings = "", TabGroup = "SNES" },
new Binding() { DisplayName = "SNES Toggle BG 4", Bindings = "", TabGroup = "SNES" },
new Binding() { DisplayName = "SNES Toggle OBJ 1", Bindings = "", TabGroup = "SNES" },
new Binding() { DisplayName = "SNES Toggle OBJ 2", Bindings = "", TabGroup = "SNES" },
new Binding() { DisplayName = "SNES Toggle OBJ 3", Bindings = "", TabGroup = "SNES" },
new Binding() { DisplayName = "SNES Toggle OBJ 4", Bindings = "", TabGroup = "SNES" },
//Analog
new Binding() { DisplayName = "Y Up Large", Bindings = "", TabGroup = "Analog" },
};
//Analog Hotkey values
public int Analog_LargeChange = 10;
@ -815,6 +830,49 @@ namespace BizHawk.MultiClient
public bool Atari2600_ShowPlayfield = true;
}
public class BindingCollection : IEnumerable<Binding>
{
public List<Binding> Bindings { get; private set; }
public BindingCollection()
{
Bindings = new List<Binding>();
}
public void Add(Binding b)
{
Bindings.Add(b);
}
public IEnumerator<Binding> GetEnumerator()
{
return Bindings.GetEnumerator();
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
public Binding this[string index]
{
get
{
return Bindings.FirstOrDefault(x => x.DisplayName == index) ?? null;
}
}
}
public class Binding
{
//TODO: how about a delegate, that would be called by the mainform? Thereby putting all the action logic in one place
public string DisplayName;
public string Bindings;
public string DefaultBinding;
public string TabGroup;
public Binding() { }
}
public enum PLUGINTYPE { RICE, GLIDE };
public interface iPluginSettings

View File

@ -1,6 +1,7 @@
using System;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Windows.Forms;
using BizHawk.Emulation.Consoles.Calculator;
using BizHawk.Emulation.Consoles.GB;
@ -471,7 +472,10 @@ namespace BizHawk.MultiClient
private void OpenHotkeyDialog()
{
HotkeyWindow h = new HotkeyWindow();
//TODO: delete me
//HotkeyWindow h = new HotkeyWindow();
NewHotkeyWindow h = new NewHotkeyWindow();
h.ShowDialog();
if (h.DialogResult == DialogResult.OK)
{
@ -586,32 +590,32 @@ namespace BizHawk.MultiClient
private void saveStateToolStripMenuItem_DropDownOpened(object sender, EventArgs e)
{
savestate1toolStripMenuItem.ShortcutKeyDisplayString = Global.Config.SaveSlot1;
savestate2toolStripMenuItem.ShortcutKeyDisplayString = Global.Config.SaveSlot2;
savestate3toolStripMenuItem.ShortcutKeyDisplayString = Global.Config.SaveSlot3;
savestate4toolStripMenuItem.ShortcutKeyDisplayString = Global.Config.SaveSlot4;
savestate5toolStripMenuItem.ShortcutKeyDisplayString = Global.Config.SaveSlot5;
savestate6toolStripMenuItem.ShortcutKeyDisplayString = Global.Config.SaveSlot6;
savestate7toolStripMenuItem.ShortcutKeyDisplayString = Global.Config.SaveSlot7;
savestate8toolStripMenuItem.ShortcutKeyDisplayString = Global.Config.SaveSlot8;
savestate9toolStripMenuItem.ShortcutKeyDisplayString = Global.Config.SaveSlot9;
savestate0toolStripMenuItem.ShortcutKeyDisplayString = Global.Config.SaveSlot0;
saveNamedStateToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.SaveNamedState;
savestate1toolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Save State 1"].Bindings;
savestate2toolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Save State 2"].Bindings;
savestate3toolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Save State 3"].Bindings;
savestate4toolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Save State 4"].Bindings;
savestate5toolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Save State 5"].Bindings;
savestate6toolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Save State 6"].Bindings;
savestate7toolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Save State 7"].Bindings;
savestate8toolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Save State 8"].Bindings;
savestate9toolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Save State 9"].Bindings;
savestate0toolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Save State 0"].Bindings;
saveNamedStateToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Save Named State"].Bindings;
}
private void loadStateToolStripMenuItem_DropDownOpened(object sender, EventArgs e)
{
loadstate1toolStripMenuItem.ShortcutKeyDisplayString = Global.Config.LoadSlot1;
loadstate2toolStripMenuItem.ShortcutKeyDisplayString = Global.Config.LoadSlot2;
loadstate3toolStripMenuItem.ShortcutKeyDisplayString = Global.Config.LoadSlot3;
loadstate4toolStripMenuItem.ShortcutKeyDisplayString = Global.Config.LoadSlot4;
loadstate5toolStripMenuItem.ShortcutKeyDisplayString = Global.Config.LoadSlot5;
loadstate6toolStripMenuItem.ShortcutKeyDisplayString = Global.Config.LoadSlot6;
loadstate7toolStripMenuItem.ShortcutKeyDisplayString = Global.Config.LoadSlot7;
loadstate8toolStripMenuItem.ShortcutKeyDisplayString = Global.Config.LoadSlot8;
loadstate9toolStripMenuItem.ShortcutKeyDisplayString = Global.Config.LoadSlot9;
loadstate0toolStripMenuItem.ShortcutKeyDisplayString = Global.Config.LoadSlot0;
loadNamedStateToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.LoadNamedState;
loadstate1toolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Load State 1"].Bindings;
loadstate2toolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Load State 2"].Bindings;
loadstate3toolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Load State 3"].Bindings;
loadstate4toolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Load State 4"].Bindings;
loadstate5toolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Load State 5"].Bindings;
loadstate6toolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Load State 6"].Bindings;
loadstate7toolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Load State 7"].Bindings;
loadstate8toolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Load State 8"].Bindings;
loadstate9toolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Load State 9"].Bindings;
loadstate0toolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Load State 0"].Bindings;
loadNamedStateToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Load Named State"].Bindings;
autoLoadLastSlotToolStripMenuItem.Checked = Global.Config.AutoLoadLastSaveSlot;
}
@ -638,47 +642,36 @@ namespace BizHawk.MultiClient
private void toolsToolStripMenuItem_DropDownOpened(object sender, EventArgs e)
{
toolBoxToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.ToolBox;
if (!ToolBox1.IsHandleCreated || ToolBox1.IsDisposed)
toolBoxToolStripMenuItem.Enabled = true;
else
toolBoxToolStripMenuItem.Enabled = false;
toolBoxToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["ToolBox"].Bindings;
rAMWatchToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Ram Watch"].Bindings;
rAMSearchToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Ram Search"].Bindings;
rAMPokeToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Ram Poke"].Bindings;
hexEditorToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Hex Editor"].Bindings;
luaConsoleToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Lua Console"].Bindings;
cheatsToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Cheats"].Bindings;
tAStudioToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["TAStudio"].Bindings;
virtualPadToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Virtual Pad"].Bindings;
rAMWatchToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.RamWatch;
rAMSearchToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.RamSearch;
rAMPokeToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.RamPoke;
hexEditorToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HexEditor;
luaConsoleToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.LuaConsole;
cheatsToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.Cheats;
tAStudioToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.TASTudio;
virtualPadToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.OpenVirtualPadBinding;
if (Global.Emulator.CoreComm.CpuTraceAvailable)
{
traceLoggerToolStripMenuItem.Enabled = true;
}
else
{
traceLoggerToolStripMenuItem.Enabled = false;
}
toolBoxToolStripMenuItem.Enabled = !ToolBox1.IsHandleCreated || ToolBox1.IsDisposed;
traceLoggerToolStripMenuItem.Enabled = Global.Emulator.CoreComm.CpuTraceAvailable;
}
private void saveSlotToolStripMenuItem_DropDownOpened(object sender, EventArgs e)
{
selectSlot10ToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.SelectSlot0;
selectSlot1ToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.SelectSlot1;
selectSlot2ToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.SelectSlot2;
selectSlot3ToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.SelectSlot3;
selectSlot4ToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.SelectSlot4;
selectSlot5ToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.SelectSlot5;
selectSlot6ToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.SelectSlot6;
selectSlot7ToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.SelectSlot7;
selectSlot8ToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.SelectSlot8;
selectSlot9ToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.SelectSlot9;
previousSlotToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.PreviousSlot;
nextSlotToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.NextSlot;
saveToCurrentSlotToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.QuickSave;
loadCurrentSlotToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.QuickLoad;
selectSlot10ToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Select State 0"].Bindings;
selectSlot1ToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Select State 1"].Bindings;
selectSlot2ToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Select State 2"].Bindings;
selectSlot3ToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Select State 3"].Bindings;
selectSlot4ToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Select State 4"].Bindings;
selectSlot5ToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Select State 5"].Bindings;
selectSlot6ToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Select State 6"].Bindings;
selectSlot7ToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Select State 7"].Bindings;
selectSlot8ToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Select State 8"].Bindings;
selectSlot9ToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Select State 9"].Bindings;
previousSlotToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Previous Slot"].Bindings;
nextSlotToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Next Slot"].Bindings;
saveToCurrentSlotToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Quick Save"].Bindings;
loadCurrentSlotToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Quick Load"].Bindings;
}
private void switchToFullscreenToolStripMenuItem_Click(object sender, EventArgs e)
@ -1143,8 +1136,8 @@ namespace BizHawk.MultiClient
private void aVIWAVToolStripMenuItem_DropDownOpened(object sender, EventArgs e)
{
recordAVIToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.AVIRecordBinding;
stopAVIToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.AVIStopBinding;
recordAVIToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Record A/V"].Bindings;
stopAVIToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Stop A/V"].Bindings;
captureOSDToolStripMenuItem.Checked = Global.Config.AVI_CaptureOSD;
if (CurrAviWriter == null)
@ -1221,48 +1214,24 @@ namespace BizHawk.MultiClient
private void movieToolStripMenuItem_DropDownOpened(object sender, EventArgs e)
{
if (Global.MovieSession.MultiTrack.IsActive)
{
fullMovieLoadstatesToolStripMenuItem.Enabled = false;
}
else
{
fullMovieLoadstatesToolStripMenuItem.Enabled = true;
}
if (Global.MovieSession.Movie.IsActive)
{
stopMovieToolStripMenuItem.Enabled = true;
playFromBeginningToolStripMenuItem.Enabled = true;
saveMovieToolStripMenuItem.Enabled = true;
}
else
{
stopMovieToolStripMenuItem.Enabled = false;
playFromBeginningToolStripMenuItem.Enabled = false;
saveMovieToolStripMenuItem.Enabled = false;
}
fullMovieLoadstatesToolStripMenuItem.Enabled = !Global.MovieSession.MultiTrack.IsActive;
stopMovieWithoutSavingToolStripMenuItem.Enabled = Global.MovieSession.Movie.IsActive && Global.MovieSession.Movie.HasChanges;
stopMovieToolStripMenuItem.Enabled
= playFromBeginningToolStripMenuItem.Enabled
= saveMovieToolStripMenuItem.Enabled
= Global.MovieSession.Movie.IsActive;
readonlyToolStripMenuItem.Checked = ReadOnly;
bindSavestatesToMoviesToolStripMenuItem.Checked = Global.Config.BindSavestatesToMovies;
automaticallyBackupMoviesToolStripMenuItem.Checked = Global.Config.EnableBackupMovies;
readonlyToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.ReadOnlyToggleBinding;
recordMovieToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.RecordMovieBinding;
playMovieToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.PlayMovieBinding;
stopMovieToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.StopMovieBinding;
playFromBeginningToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.PlayBeginningBinding;
saveMovieToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.SaveMovieBinding;
fullMovieLoadstatesToolStripMenuItem.Checked = Global.Config.VBAStyleMovieLoadState;
if (Global.MovieSession.Movie.IsActive && Global.MovieSession.Movie.HasChanges)
{
stopMovieWithoutSavingToolStripMenuItem.Enabled = true;
}
else
{
stopMovieWithoutSavingToolStripMenuItem.Enabled = false;
}
readonlyToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Toggle read-only"].Bindings;
recordMovieToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Record Movie"].Bindings;
playMovieToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Play Movie"].Bindings;
stopMovieToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Stop Movie"].Bindings;
playFromBeginningToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Play from beginning"].Bindings;
saveMovieToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Save Movie"].Bindings;
}
private void saveConfigToolStripMenuItem_Click(object sender, EventArgs e)
@ -1325,7 +1294,7 @@ namespace BizHawk.MultiClient
logWindowAsConsoleToolStripMenuItem.Checked = Global.Config.WIN32_CONSOLE;
neverBeAskedToSaveChangesToolStripMenuItem.Checked = Global.Config.SupressAskSave;
acceptBackgroundInputToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.ToggleBackgroundInput;
acceptBackgroundInputToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Toggle BG Input"].Bindings;
}
private void enableToolStripMenuItem_DropDownOpened(object sender, EventArgs e)
@ -1374,10 +1343,11 @@ namespace BizHawk.MultiClient
displayRerecordCountToolStripMenuItem.Checked = Global.Config.DisplayRerecordCount;
displaySubtitlesToolStripMenuItem.Checked = Global.Config.DisplaySubtitles;
displayFPSToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.FPSBinding;
displayFrameCounterToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.FrameCounterBinding;
displayLagCounterToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.LagCounterBinding;
displayInputToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.InputDisplayBinding;
displayFPSToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Display FPS"].Bindings;
displayFrameCounterToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Frame Counter"].Bindings;
displayLagCounterToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Lag Counter"].Bindings;
displayInputToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Input Display"].Bindings;
switchToFullscreenToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Full Screen"].Bindings;
x1MenuItem.Checked = false;
x2MenuItem.Checked = false;
@ -1393,8 +1363,6 @@ namespace BizHawk.MultiClient
case 5: x5MenuItem.Checked = true; break;
case 10: mzMenuItem.Checked = true; break;
}
switchToFullscreenToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.ToggleFullscreenBinding;
}
private void fileToolStripMenuItem_DropDownOpened(object sender, EventArgs e)
@ -1509,34 +1477,21 @@ namespace BizHawk.MultiClient
}
autoloadMostRecentToolStripMenuItem.Checked = Global.Config.AutoLoadMostRecentRom;
screenshotF12ToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.ScreenshotBinding;
openROMToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.OpenROM;
closeROMToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.CloseROM;
screenshotF12ToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Screenshot"].Bindings;
openROMToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Open ROM"].Bindings;
closeROMToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Close ROM"].Bindings;
}
private void emulationToolStripMenuItem_DropDownOpened(object sender, EventArgs e)
{
rebootCoreToolStripMenuItem.Enabled = !IsNullEmulator();
if (Global.Emulator.ControllerDefinition.BoolButtons.Contains("Reset") &&
(!Global.MovieSession.Movie.IsPlaying || Global.MovieSession.Movie.IsFinished))
{
resetToolStripMenuItem.Enabled = true;
}
else
{
resetToolStripMenuItem.Enabled = false;
}
resetToolStripMenuItem.Enabled = Global.Emulator.ControllerDefinition.BoolButtons.Contains("Reset") &&
(!Global.MovieSession.Movie.IsPlaying || Global.MovieSession.Movie.IsFinished);
if (Global.Emulator.ControllerDefinition.BoolButtons.Contains("Power") &&
(!Global.MovieSession.Movie.IsPlaying || Global.MovieSession.Movie.IsFinished))
{
hardResetToolStripMenuItem.Enabled = true;
}
else
{
hardResetToolStripMenuItem.Enabled = false;
}
hardResetToolStripMenuItem.Enabled = Global.Emulator.ControllerDefinition.BoolButtons.Contains("Power") &&
(!Global.MovieSession.Movie.IsPlaying || Global.MovieSession.Movie.IsFinished);
pauseToolStripMenuItem.Checked = EmulatorPaused;
if (didMenuPause)
@ -1544,10 +1499,10 @@ namespace BizHawk.MultiClient
pauseToolStripMenuItem.Checked = wasPaused;
}
pauseToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.EmulatorPauseBinding;
rebootCoreToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.RebootCoreResetBinding;
resetToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.SoftResetBinding;
hardResetToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HardResetBinding;
pauseToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Pause"].Bindings;
rebootCoreToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Reboot Core"].Bindings;
resetToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Soft Reset"].Bindings;
hardResetToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Hard Reset"].Bindings;
}
private void pCEToolStripMenuItem_DropDownOpened(object sender, EventArgs e)

View File

@ -684,127 +684,21 @@ namespace BizHawk.MultiClient
}
}
public static ControllerDefinition ClientControlsDef = new ControllerDefinition
{
Name = "Emulator Frontend Controls",
BoolButtons = { "Fast Forward", "Rewind", "Hard Reset", "Mode Flip", "Quick Save State", "Quick Load State", "Save Named State", "Load Named State",
"Emulator Pause", "Frame Advance", "Unthrottle", "MaxTurbo", "Screenshot", "Toggle Fullscreen", "SelectSlot0", "SelectSlot1", "SelectSlot2", "SelectSlot3", "SelectSlot4",
"SelectSlot5", "SelectSlot6", "SelectSlot7", "SelectSlot8", "SelectSlot9", "SaveSlot0", "SaveSlot1", "SaveSlot2", "SaveSlot3", "SaveSlot4",
"SaveSlot5","SaveSlot6","SaveSlot7","SaveSlot8","SaveSlot9","LoadSlot0","LoadSlot1","LoadSlot2","LoadSlot3","LoadSlot4","LoadSlot5","LoadSlot6",
"LoadSlot7","LoadSlot8","LoadSlot9", "ToolBox", "Previous Slot", "Next Slot", "Ram Watch", "Ram Search", "Ram Poke", "Hex Editor",
"Lua Console", "Cheats", "Open ROM", "Close ROM", "Display FPS", "Display FrameCounter", "Display LagCounter", "Display Input", "Toggle Read Only",
"Play Movie", "Record Movie", "Stop Movie", "Play Beginning", "Volume Up", "Volume Down", "Toggle MultiTrack", "Record All", "Record None", "Increment Player",
"Soft Reset", "Decrement Player", "Record AVI/WAV", "Stop AVI/WAV", "Toggle Menu", "Increase Speed", "Decrease Speed", "Toggle Background Input",
"Autohold", "Clear Autohold", "SNES Toggle BG 1", "SNES Toggle BG 2", "SNES Toggle BG 3", "SNES Toggle BG 4", "SNES Toggle OBJ 1", "SNES Toggle OBJ 2", "SNES Toggle OBJ 3",
"SNES Toggle OBJ 4", "Reboot Core", "Save Movie", "Virtual Pad", "AutoholdAutofire", "MoviePokeToggle", "ClearFrame",
"YUpLargeBinding"}
};
private void InitControls()
{
var controls = new Controller(ClientControlsDef);
var controls = new Controller(
new ControllerDefinition()
{
Name = "Emulator Frontend Controls",
BoolButtons = Global.Config.HotkeyBindings.Select(x => x.DisplayName).ToList()
});
controls.BindMulti("SNES Toggle BG 1", Global.Config.ToggleSNESBG1Binding);
controls.BindMulti("SNES Toggle BG 2", Global.Config.ToggleSNESBG2Binding);
controls.BindMulti("SNES Toggle BG 3", Global.Config.ToggleSNESBG3Binding);
controls.BindMulti("SNES Toggle BG 4", Global.Config.ToggleSNESBG4Binding);
controls.BindMulti("SNES Toggle OBJ 1", Global.Config.ToggleSNESOBJ1Binding);
controls.BindMulti("SNES Toggle OBJ 2", Global.Config.ToggleSNESOBJ2Binding);
controls.BindMulti("SNES Toggle OBJ 3", Global.Config.ToggleSNESOBJ3Binding);
controls.BindMulti("SNES Toggle OBJ 4", Global.Config.ToggleSNESOBJ4Binding);
controls.BindMulti("Save Movie", Global.Config.SaveMovieBinding);
controls.BindMulti("IncreaseWindowSize", Global.Config.IncreaseWindowSize);
controls.BindMulti("DecreaseWindowSize", Global.Config.DecreaseWindowSize);
controls.BindMulti("Fast Forward", Global.Config.FastForwardBinding);
controls.BindMulti("Rewind", Global.Config.RewindBinding);
controls.BindMulti("Hard Reset", Global.Config.HardResetBinding);
controls.BindMulti("Reboot Core", Global.Config.RebootCoreResetBinding);
controls.BindMulti("Emulator Pause", Global.Config.EmulatorPauseBinding);
controls.BindMulti("Frame Advance", Global.Config.FrameAdvanceBinding);
controls.BindMulti("Increase Speed", Global.Config.IncreaseSpeedBinding);
controls.BindMulti("Decrease Speed", Global.Config.DecreaseSpeedBinding);
controls.BindMulti("Toggle Background Input", Global.Config.ToggleBackgroundInput);
controls.BindMulti("Unthrottle", Global.Config.TurboBinding);
controls.BindMulti("MaxTurbo", Global.Config.MaxTurboBinding);
controls.BindMulti("Screenshot", Global.Config.ScreenshotBinding);
controls.BindMulti("Toggle Fullscreen", Global.Config.ToggleFullscreenBinding);
controls.BindMulti("Quick Save State", Global.Config.QuickSave);
controls.BindMulti("Quick Load State", Global.Config.QuickLoad);
controls.BindMulti("SelectSlot0", Global.Config.SelectSlot0);
controls.BindMulti("SelectSlot1", Global.Config.SelectSlot1);
controls.BindMulti("SelectSlot2", Global.Config.SelectSlot2);
controls.BindMulti("SelectSlot3", Global.Config.SelectSlot3);
controls.BindMulti("SelectSlot4", Global.Config.SelectSlot4);
controls.BindMulti("SelectSlot5", Global.Config.SelectSlot5);
controls.BindMulti("SelectSlot6", Global.Config.SelectSlot6);
controls.BindMulti("SelectSlot7", Global.Config.SelectSlot7);
controls.BindMulti("SelectSlot8", Global.Config.SelectSlot8);
controls.BindMulti("SelectSlot9", Global.Config.SelectSlot9);
controls.BindMulti("SaveSlot0", Global.Config.SaveSlot0);
controls.BindMulti("SaveSlot1", Global.Config.SaveSlot1);
controls.BindMulti("SaveSlot2", Global.Config.SaveSlot2);
controls.BindMulti("SaveSlot3", Global.Config.SaveSlot3);
controls.BindMulti("SaveSlot4", Global.Config.SaveSlot4);
controls.BindMulti("SaveSlot5", Global.Config.SaveSlot5);
controls.BindMulti("SaveSlot6", Global.Config.SaveSlot6);
controls.BindMulti("SaveSlot7", Global.Config.SaveSlot7);
controls.BindMulti("SaveSlot8", Global.Config.SaveSlot8);
controls.BindMulti("SaveSlot9", Global.Config.SaveSlot9);
controls.BindMulti("LoadSlot0", Global.Config.LoadSlot0);
controls.BindMulti("LoadSlot1", Global.Config.LoadSlot1);
controls.BindMulti("LoadSlot2", Global.Config.LoadSlot2);
controls.BindMulti("LoadSlot3", Global.Config.LoadSlot3);
controls.BindMulti("LoadSlot4", Global.Config.LoadSlot4);
controls.BindMulti("LoadSlot5", Global.Config.LoadSlot5);
controls.BindMulti("LoadSlot6", Global.Config.LoadSlot6);
controls.BindMulti("LoadSlot7", Global.Config.LoadSlot7);
controls.BindMulti("LoadSlot8", Global.Config.LoadSlot8);
controls.BindMulti("LoadSlot9", Global.Config.LoadSlot9);
controls.BindMulti("ToolBox", Global.Config.ToolBox);
controls.BindMulti("Save Named State", Global.Config.SaveNamedState);
controls.BindMulti("Load Named State", Global.Config.LoadNamedState);
controls.BindMulti("Previous Slot", Global.Config.PreviousSlot);
controls.BindMulti("Next Slot", Global.Config.NextSlot);
controls.BindMulti("Ram Watch", Global.Config.RamWatch);
controls.BindMulti("TASTudio", Global.Config.TASTudio);
controls.BindMulti("Virtual Pad", Global.Config.OpenVirtualPadBinding);
controls.BindMulti("Ram Search", Global.Config.RamSearch);
controls.BindMulti("Ram Poke", Global.Config.RamPoke);
controls.BindMulti("Hex Editor", Global.Config.HexEditor);
controls.BindMulti("Lua Console", Global.Config.LuaConsole);
controls.BindMulti("Cheats", Global.Config.Cheats);
controls.BindMulti("Open ROM", Global.Config.OpenROM);
controls.BindMulti("Close ROM", Global.Config.CloseROM);
controls.BindMulti("Display FPS", Global.Config.FPSBinding);
controls.BindMulti("Display FrameCounter", Global.Config.FrameCounterBinding);
controls.BindMulti("Display LagCounter", Global.Config.LagCounterBinding);
controls.BindMulti("Display Input", Global.Config.InputDisplayBinding);
controls.BindMulti("Toggle Read Only", Global.Config.ReadOnlyToggleBinding);
controls.BindMulti("Play Movie", Global.Config.PlayMovieBinding);
controls.BindMulti("Record Movie", Global.Config.RecordMovieBinding);
controls.BindMulti("Stop Movie", Global.Config.StopMovieBinding);
controls.BindMulti("Play Beginning", Global.Config.PlayBeginningBinding);
controls.BindMulti("Volume Up", Global.Config.VolUpBinding);
controls.BindMulti("Volume Down", Global.Config.VolDownBinding);
controls.BindMulti("Toggle MultiTrack", Global.Config.ToggleMultiTrack);
controls.BindMulti("Record All", Global.Config.MTRecordAll);
controls.BindMulti("Record None", Global.Config.MTRecordNone);
controls.BindMulti("Increment Player", Global.Config.MTIncrementPlayer);
controls.BindMulti("Decrement Player", Global.Config.MTDecrementPlayer);
controls.BindMulti("Soft Reset", Global.Config.SoftResetBinding);
controls.BindMulti("Record AVI/WAV", Global.Config.AVIRecordBinding);
controls.BindMulti("Stop AVI/WAV", Global.Config.AVIStopBinding);
controls.BindMulti("Toggle Menu", Global.Config.ToggleMenuBinding);
controls.BindMulti("Autohold", Global.Config.AutoholdBinding);
controls.BindMulti("AutoholdAutofire", Global.Config.AutoholdAutofireBinding);
controls.BindMulti("Clear Autohold", Global.Config.AutoholdClear);
controls.BindMulti("MoviePokeToggle", Global.Config.MoviePlaybackPokeModeBinding);
controls.BindMulti("ClearFrame", Global.Config.ClearFrameBinding);
controls.BindMulti("YUpLargeBinding", Global.Config.YUpLargeBinding);
foreach (Binding b in Global.Config.HotkeyBindings)
{
controls.BindMulti(b.DisplayName, b.Bindings);
}
Global.ClientControls = controls;
Global.NullControls = new Controller(NullEmulator.NullController);
Global.AutofireNullControls = new AutofireController(NullEmulator.NullController);
@ -824,10 +718,7 @@ namespace BizHawk.MultiClient
public bool IsNullEmulator()
{
if (Global.Emulator is NullEmulator)
return true;
else
return false;
return Global.Emulator is NullEmulator;
}
private string DisplayNameForSystem(string system)
@ -943,7 +834,7 @@ namespace BizHawk.MultiClient
{
nESSpeicalToolStripMenuItem.Visible = true;
nESSpeicalToolStripMenuItem.DropDownItems.Add(name, null, delegate
{
{
if (Global.Emulator.ControllerDefinition.BoolButtons.Contains(button))
{
if (!Global.MovieSession.Movie.IsPlaying || Global.MovieSession.Movie.IsFinished)
@ -952,9 +843,7 @@ namespace BizHawk.MultiClient
Global.OSD.AddMessage(msg);
}
}
}
);
});
}
void NESSpeicalMenuControls()
@ -1802,7 +1691,7 @@ namespace BizHawk.MultiClient
writer.Close();
}
void OnSelectSlot(int num)
void SelectSlot(int num)
{
Global.Config.SaveSlot = num;
SaveSlotSelectedMessage();
@ -1820,7 +1709,8 @@ namespace BizHawk.MultiClient
if (ActiveForm == this) return true;
//modals that need to capture input for binding purposes get input, of course
if (ActiveForm is HotkeyWindow) return true;
//if (ActiveForm is HotkeyWindow) return true;
if (ActiveForm is NewHotkeyWindow) return true;
//if (ActiveForm is ControllerConfig) return true;
if (ActiveForm is config.NewControllerConfig) return true;
if (ActiveForm is TAStudio) return true;
@ -1959,239 +1849,172 @@ namespace BizHawk.MultiClient
//todo - could have these in a table somehow ?
switch (trigger)
{
default:
return false;
case "SNES Toggle BG 1":
SNES_ToggleBG1();
break;
case "SNES Toggle BG 2":
SNES_ToggleBG2();
break;
case "SNES Toggle BG 3":
SNES_ToggleBG3();
break;
case "SNES Toggle BG 4":
SNES_ToggleBG4();
break;
case "SNES Toggle OBJ 1":
SNES_ToggleOBJ1();
break;
case "SNES Toggle OBJ 2":
SNES_ToggleOBJ2();
break;
case "SNES Toggle OBJ 3":
SNES_ToggleOBJ3();
break;
case "SNES Toggle OBJ 4":
SNES_ToggleOBJ4();
break;
case "Save Movie":
SaveMovie();
break;
case "Clear Autohold":
ClearAutohold();
break;
case "IncreaseWindowSize":
IncreaseWindowSize();
break;
case "DecreaseWindowSize":
DecreaseWIndowSize();
break;
case "Record AVI/WAV":
RecordAVI();
break;
case "Stop AVI/WAV":
StopAVI();
break;
case "ToolBox":
LoadToolBox();
break;
case "Increase Speed":
IncreaseSpeed();
break;
case "Decrease Speed":
DecreaseSpeed();
break;
case "Toggle Background Input":
ToggleBackgroundInput();
break;
case "Quick Save State":
if (!IsNullEmulator())
SaveState("QuickSave" + Global.Config.SaveSlot.ToString());
break;
case "Quick Load State":
if (!IsNullEmulator())
LoadState("QuickSave" + Global.Config.SaveSlot.ToString());
break;
case "Unthrottle":
case "Pause": TogglePause(); break;
case "Toggle Throttle":
unthrottled ^= true;
Global.OSD.AddMessage("Unthrottled: " + unthrottled);
break;
case "Reboot Core":
{
bool autoSaveState = Global.Config.AutoSavestates;
Global.Config.AutoSavestates = false;
LoadRom(CurrentlyOpenRom);
Global.Config.AutoSavestates = autoSaveState;
break;
}
case "Hard Reset":
HardReset();
case "Soft Reset": SoftReset(); break;
case "Hard Reset": HardReset(); break;
case "Quick Load":
if (!IsNullEmulator())
LoadState("QuickSave" + Global.Config.SaveSlot.ToString());
break;
case "Screenshot":
TakeScreenshot();
case "Quick Save":
if (!IsNullEmulator())
SaveState("QuickSave" + Global.Config.SaveSlot.ToString());
break;
case "SaveSlot0": if (!IsNullEmulator()) SaveState("QuickSave0"); break;
case "SaveSlot1": if (!IsNullEmulator()) SaveState("QuickSave1"); break;
case "SaveSlot2": if (!IsNullEmulator()) SaveState("QuickSave2"); break;
case "SaveSlot3": if (!IsNullEmulator()) SaveState("QuickSave3"); break;
case "SaveSlot4": if (!IsNullEmulator()) SaveState("QuickSave4"); break;
case "SaveSlot5": if (!IsNullEmulator()) SaveState("QuickSave5"); break;
case "SaveSlot6": if (!IsNullEmulator()) SaveState("QuickSave6"); break;
case "SaveSlot7": if (!IsNullEmulator()) SaveState("QuickSave7"); break;
case "SaveSlot8": if (!IsNullEmulator()) SaveState("QuickSave8"); break;
case "SaveSlot9": if (!IsNullEmulator()) SaveState("QuickSave9"); break;
case "LoadSlot0": if (!IsNullEmulator()) LoadState("QuickSave0"); break;
case "LoadSlot1": if (!IsNullEmulator()) LoadState("QuickSave1"); break;
case "LoadSlot2": if (!IsNullEmulator()) LoadState("QuickSave2"); break;
case "LoadSlot3": if (!IsNullEmulator()) LoadState("QuickSave3"); break;
case "LoadSlot4": if (!IsNullEmulator()) LoadState("QuickSave4"); break;
case "LoadSlot5": if (!IsNullEmulator()) LoadState("QuickSave5"); break;
case "LoadSlot6": if (!IsNullEmulator()) LoadState("QuickSave6"); break;
case "LoadSlot7": if (!IsNullEmulator()) LoadState("QuickSave7"); break;
case "LoadSlot8": if (!IsNullEmulator()) LoadState("QuickSave8"); break;
case "LoadSlot9": if (!IsNullEmulator()) LoadState("QuickSave9"); break;
case "SelectSlot0": OnSelectSlot(0); break;
case "SelectSlot1": OnSelectSlot(1); break;
case "SelectSlot2": OnSelectSlot(2); break;
case "SelectSlot3": OnSelectSlot(3); break;
case "SelectSlot4": OnSelectSlot(4); break;
case "SelectSlot5": OnSelectSlot(5); break;
case "SelectSlot6": OnSelectSlot(6); break;
case "SelectSlot7": OnSelectSlot(7); break;
case "SelectSlot8": OnSelectSlot(8); break;
case "SelectSlot9": OnSelectSlot(9); break;
case "Clear Autohold": ClearAutohold(); break;
case "Screenshot": TakeScreenshot(); break;
case "Toggle Fullscreen": ToggleFullscreen(); break;
case "Open ROM": OpenROM(); break;
case "Close ROM": CloseROM(); break;
case "Display FPS": ToggleFPS(); break;
case "Frame Counter": ToggleFrameCounter(); break;
case "Lag Counter": ToggleLagCounter(); break;
case "Input Display": ToggleInputDisplay(); break;
case "Toggle BG Input": ToggleBackgroundInput(); break;
case "Toggle Menu": ShowHideMenu(); break;
case "Volume Up": VolumeUp(); break;
case "Volume Down": VolumeDown(); break;
case "Record A/V": RecordAVI(); break;
case "Stop A/V": StopAVI(); break;
case "Larger Window": IncreaseWindowSize(); break;
case "Smaller Window": DecreaseWIndowSize(); break;
case "Increase Speed": IncreaseSpeed(); break;
case "Decrease Speed": DecreaseSpeed(); break;
case "Reboot Core":
bool autoSaveState = Global.Config.AutoSavestates;
Global.Config.AutoSavestates = false;
LoadRom(CurrentlyOpenRom);
Global.Config.AutoSavestates = autoSaveState;
break;
case "Save State 0": SaveState("QuickSave0"); break;
case "Save State 1": SaveState("QuickSave1"); break;
case "Save State 2": SaveState("QuickSave2"); break;
case "Save State 3": SaveState("QuickSave3"); break;
case "Save State 4": SaveState("QuickSave4"); break;
case "Save State 5": SaveState("QuickSave5"); break;
case "Save State 6": SaveState("QuickSave6"); break;
case "Save State 7": SaveState("QuickSave7"); break;
case "Save State 8": SaveState("QuickSave8"); break;
case "Save State 9": SaveState("QuickSave9"); break;
case "Load State 0": LoadState("QuickSave0"); break;
case "Load State 1": LoadState("QuickSave1"); break;
case "Load State 2": LoadState("QuickSave2"); break;
case "Load State 3": LoadState("QuickSave3"); break;
case "Load State 4": LoadState("QuickSave4"); break;
case "Load State 5": LoadState("QuickSave5"); break;
case "Load State 6": LoadState("QuickSave6"); break;
case "Load State 7": LoadState("QuickSave7"); break;
case "Load State 8": LoadState("QuickSave8"); break;
case "Load State 9": LoadState("QuickSave9"); break;
case "Select State 0": SelectSlot(0); break;
case "Select State 1": SelectSlot(1); break;
case "Select State 2": SelectSlot(2); break;
case "Select State 3": SelectSlot(3); break;
case "Select State 4": SelectSlot(4); break;
case "Select State 5": SelectSlot(5); break;
case "Select State 6": SelectSlot(6); break;
case "Select State 7": SelectSlot(7); break;
case "Select State 8": SelectSlot(8); break;
case "Select State 9": SelectSlot(9); break;
case "Save Named State": SaveStateAs(); break;
case "Load Named State": LoadStateAs(); break;
case "Previous Slot": PreviousSlot(); break;
case "Next Slot": NextSlot(); break;
case "Toggle read-only": ToggleReadOnly(); break;
case "Play Movie": PlayMovie(); break;
case "Record Movie": RecordMovie(); break;
case "Stop Movie": StopMovie(); break;
case "Play from beginning": PlayMovieFromBeginning(); break;
case "Save Movie": SaveMovie(); break;
case "Toggle MultiTrack":
if (Global.MovieSession.Movie.IsActive)
{
if (Global.Config.VBAStyleMovieLoadState)
{
Global.OSD.AddMessage("Multi-track can not be used in Full Movie Loadstates mode");
}
else
{
Global.MovieSession.MultiTrack.IsActive = !Global.MovieSession.MultiTrack.IsActive;
if (Global.MovieSession.MultiTrack.IsActive)
{
Global.OSD.AddMessage("MultiTrack Enabled");
Global.OSD.MT = "Recording None";
}
else
{
Global.OSD.AddMessage("MultiTrack Disabled");
}
Global.MovieSession.MultiTrack.RecordAll = false;
Global.MovieSession.MultiTrack.CurrentPlayer = 0;
}
}
else
{
Global.OSD.AddMessage("MultiTrack cannot be enabled while not recording.");
}
break;
case "MT Select All":
Global.MovieSession.MultiTrack.CurrentPlayer = 0;
Global.MovieSession.MultiTrack.RecordAll = true;
Global.OSD.MT = "Recording All";
break;
case "MT Select None":
Global.MovieSession.MultiTrack.CurrentPlayer = 0;
Global.MovieSession.MultiTrack.RecordAll = false;
Global.OSD.MT = "Recording None";
break;
case "MT Increment Player":
Global.MovieSession.MultiTrack.CurrentPlayer++;
Global.MovieSession.MultiTrack.RecordAll = false;
if (Global.MovieSession.MultiTrack.CurrentPlayer > 5) //TODO: Replace with console's maximum or current maximum players??!
{
Global.MovieSession.MultiTrack.CurrentPlayer = 1;
}
Global.OSD.MT = "Recording Player " + Global.MovieSession.MultiTrack.CurrentPlayer.ToString();
break;
case "MT Decrement Player":
Global.MovieSession.MultiTrack.CurrentPlayer--;
Global.MovieSession.MultiTrack.RecordAll = false;
if (Global.MovieSession.MultiTrack.CurrentPlayer < 1)
{
Global.MovieSession.MultiTrack.CurrentPlayer = 5;//TODO: Replace with console's maximum or current maximum players??!
}
Global.OSD.MT = "Recording Player " + Global.MovieSession.MultiTrack.CurrentPlayer.ToString();
break;
case "Movie Poke": ToggleModePokeMode(); break;
case "Ram Watch": LoadRamWatch(true); break;
case "Ram Search": LoadRamSearch(); break;
case "Ram Poke":
{
RamPoke r = new RamPoke();
r.Show();
break;
}
case "Ram Poke": new RamPoke().Show(); break;
case "Hex Editor": LoadHexEditor(); break;
case "Lua Console": OpenLuaConsole(); break;
case "Cheats": LoadCheatsWindow(); break;
case "TASTudio": LoadTAStudio(); break;
case "ToolBox": LoadToolBox(); break;
case "Virtual Pad": LoadVirtualPads(); break;
case "Open ROM": OpenROM(); break;
case "Close ROM": CloseROM(); break;
case "Display FPS": ToggleFPS(); break;
case "Display FrameCounter": ToggleFrameCounter(); break;
case "Display LagCounter": ToggleLagCounter(); break;
case "Display Input": ToggleInputDisplay(); break;
case "Toggle Read Only": ToggleReadOnly(); break;
case "Play Movie": PlayMovie(); break;
case "Record Movie": RecordMovie(); break;
case "Stop Movie": StopMovie(); break;
case "Play Beginning": PlayMovieFromBeginning(); break;
case "Volume Up": VolumeUp(); break;
case "Volume Down": VolumeDown(); break;
case "Soft Reset": SoftReset(); break;
case "Toggle MultiTrack":
{
if (Global.MovieSession.Movie.IsActive)
{
if (Global.Config.VBAStyleMovieLoadState)
{
Global.OSD.AddMessage("Multi-track can not be used in Full Movie Loadstates mode");
}
else
{
Global.MovieSession.MultiTrack.IsActive = !Global.MovieSession.MultiTrack.IsActive;
if (Global.MovieSession.MultiTrack.IsActive)
{
Global.OSD.AddMessage("MultiTrack Enabled");
Global.OSD.MT = "Recording None";
}
else
{
Global.OSD.AddMessage("MultiTrack Disabled");
}
Global.MovieSession.MultiTrack.RecordAll = false;
Global.MovieSession.MultiTrack.CurrentPlayer = 0;
}
}
else
{
Global.OSD.AddMessage("MultiTrack cannot be enabled while not recording.");
}
break;
}
case "Increment Player":
{
Global.MovieSession.MultiTrack.CurrentPlayer++;
Global.MovieSession.MultiTrack.RecordAll = false;
if (Global.MovieSession.MultiTrack.CurrentPlayer > 5) //TODO: Replace with console's maximum or current maximum players??!
{
Global.MovieSession.MultiTrack.CurrentPlayer = 1;
}
Global.OSD.MT = "Recording Player " + Global.MovieSession.MultiTrack.CurrentPlayer.ToString();
break;
}
case "Decrement Player":
{
Global.MovieSession.MultiTrack.CurrentPlayer--;
Global.MovieSession.MultiTrack.RecordAll = false;
if (Global.MovieSession.MultiTrack.CurrentPlayer < 1)
{
Global.MovieSession.MultiTrack.CurrentPlayer = 5;//TODO: Replace with console's maximum or current maximum players??!
}
Global.OSD.MT = "Recording Player " + Global.MovieSession.MultiTrack.CurrentPlayer.ToString();
break;
}
case "Record All":
{
Global.MovieSession.MultiTrack.CurrentPlayer = 0;
Global.MovieSession.MultiTrack.RecordAll = true;
Global.OSD.MT = "Recording All";
break;
}
case "Record None":
{
Global.MovieSession.MultiTrack.CurrentPlayer = 0;
Global.MovieSession.MultiTrack.RecordAll = false;
Global.OSD.MT = "Recording None";
break;
}
case "Emulator Pause":
//used to be here: (the pause hotkey is ignored when we are frame advancing)
TogglePause();
break;
case "Toggle Menu":
ShowHideMenu();
break;
case "MoviePokeToggle":
ToggleModePokeMode();
break;
case "YUpLargeBinding":
case "SNES Toggle BG 1": SNES_ToggleBG1(); break;
case "SNES Toggle BG 2": SNES_ToggleBG2(); break;
case "SNES Toggle BG 3": SNES_ToggleBG3(); break;
case "SNES Toggle BG 4": SNES_ToggleBG4(); break;
case "SNES Toggle OBJ 1": SNES_ToggleOBJ1(); break;
case "SNES Toggle OBJ 2": SNES_ToggleOBJ2(); break;
case "SNES Toggle OBJ 3": SNES_ToggleOBJ3(); break;
case "SNES Toggle OBJ 4": SNES_ToggleOBJ4(); break;
case "Y Up Large Binding":
VirtualPadForm1.BumpAnalogValue(null, Global.Config.Analog_LargeChange);
break;
} //switch(trigger)
}
return true;
}
@ -2503,6 +2326,11 @@ namespace BizHawk.MultiClient
public void SaveState(string name)
{
if (IsNullEmulator())
{
return;
}
string path = PathManager.SaveStatePrefix(Global.Game) + "." + name + ".State";
var file = new FileInfo(path);
@ -2662,6 +2490,11 @@ namespace BizHawk.MultiClient
public void LoadState(string name, bool fromLua = false)
{
if (IsNullEmulator())
{
return;
}
string path = PathManager.SaveStatePrefix(Global.Game) + "." + name + ".State";
if (File.Exists(path) == false)
{

View File

@ -17,6 +17,7 @@ namespace BizHawk.MultiClient
{
InitializeComponent();
/*
IDW_FRAMEADVANCE.SetBindings(Global.Config.FrameAdvanceBinding);
IDW_PAUSE.SetBindings(Global.Config.EmulatorPauseBinding);
IDW_REBOOTCORE.SetBindings(Global.Config.RebootCoreResetBinding);
@ -119,6 +120,7 @@ namespace BizHawk.MultiClient
IDW_ClearFrame.SetBindings(Global.Config.ClearFrameBinding);
IDW_YUPLARGE.Text = Global.Config.YUpLargeBinding;
*/
}
private void button2_Click(object sender, EventArgs e)
{
@ -128,6 +130,7 @@ namespace BizHawk.MultiClient
private void IDB_SAVE_Click(object sender, EventArgs e)
{
/*
Global.Config.FastForwardBinding = IDW_FASTFORWARD.Text;
Global.Config.FrameAdvanceBinding = IDW_FRAMEADVANCE.Text;
Global.Config.RebootCoreResetBinding = IDW_REBOOTCORE.Text;
@ -235,6 +238,7 @@ namespace BizHawk.MultiClient
Global.Config.ClearFrameBinding = IDW_ClearFrame.Text;
Global.Config.YUpLargeBinding = IDW_YUPLARGE.Text;
*/
Global.OSD.AddMessage("Hotkey settings saved");
DialogResult = DialogResult.OK;

View File

@ -18,7 +18,7 @@ namespace BizHawk.MultiClient
string[] Bindings = new string[4];
string wasPressed = "";
ToolTip tooltip1 = new ToolTip();
public string ButtonName;
public string WidgetName;
Color _highlight_color = Color.LightCyan;
Color _no_highlight_color = SystemColors.Window;

View File

@ -0,0 +1,156 @@
namespace BizHawk.MultiClient
{
partial class NewHotkeyWindow
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(NewHotkeyWindow));
this.label38 = new System.Windows.Forms.Label();
this.AutoTabCheckBox = new System.Windows.Forms.CheckBox();
this.HotkeyTabControl = new System.Windows.Forms.TabControl();
this.tabPage1 = new System.Windows.Forms.TabPage();
this.IDB_CANCEL = new System.Windows.Forms.Button();
this.IDB_SAVE = new System.Windows.Forms.Button();
this.RestoreDefaults = new System.Windows.Forms.Button();
this.HotkeyTabControl.SuspendLayout();
this.SuspendLayout();
//
// label38
//
this.label38.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.label38.AutoSize = true;
this.label38.Location = new System.Drawing.Point(12, 423);
this.label38.Name = "label38";
this.label38.Size = new System.Drawing.Size(153, 13);
this.label38.TabIndex = 4;
this.label38.Text = "* Escape clears a key mapping";
//
// AutoTabCheckBox
//
this.AutoTabCheckBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.AutoTabCheckBox.AutoSize = true;
this.AutoTabCheckBox.Location = new System.Drawing.Point(429, 422);
this.AutoTabCheckBox.Name = "AutoTabCheckBox";
this.AutoTabCheckBox.Size = new System.Drawing.Size(70, 17);
this.AutoTabCheckBox.TabIndex = 101;
this.AutoTabCheckBox.Text = "Auto Tab";
this.AutoTabCheckBox.UseVisualStyleBackColor = true;
this.AutoTabCheckBox.CheckedChanged += new System.EventHandler(this.AutoTabCheckBox_CheckedChanged);
//
// HotkeyTabControl
//
this.HotkeyTabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.HotkeyTabControl.Controls.Add(this.tabPage1);
this.HotkeyTabControl.Location = new System.Drawing.Point(12, 12);
this.HotkeyTabControl.Name = "HotkeyTabControl";
this.HotkeyTabControl.SelectedIndex = 0;
this.HotkeyTabControl.Size = new System.Drawing.Size(685, 394);
this.HotkeyTabControl.TabIndex = 102;
//
// tabPage1
//
this.tabPage1.Location = new System.Drawing.Point(4, 22);
this.tabPage1.Name = "tabPage1";
this.tabPage1.Padding = new System.Windows.Forms.Padding(3);
this.tabPage1.Size = new System.Drawing.Size(677, 368);
this.tabPage1.TabIndex = 0;
this.tabPage1.Text = "For designer";
this.tabPage1.UseVisualStyleBackColor = true;
//
// IDB_CANCEL
//
this.IDB_CANCEL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.IDB_CANCEL.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.IDB_CANCEL.Location = new System.Drawing.Point(637, 418);
this.IDB_CANCEL.Name = "IDB_CANCEL";
this.IDB_CANCEL.Size = new System.Drawing.Size(60, 22);
this.IDB_CANCEL.TabIndex = 103;
this.IDB_CANCEL.TabStop = false;
this.IDB_CANCEL.Text = "Cancel";
this.IDB_CANCEL.UseVisualStyleBackColor = true;
this.IDB_CANCEL.Click += new System.EventHandler(this.IDB_CANCEL_Click);
//
// IDB_SAVE
//
this.IDB_SAVE.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.IDB_SAVE.Location = new System.Drawing.Point(571, 418);
this.IDB_SAVE.Name = "IDB_SAVE";
this.IDB_SAVE.Size = new System.Drawing.Size(60, 22);
this.IDB_SAVE.TabIndex = 104;
this.IDB_SAVE.TabStop = false;
this.IDB_SAVE.Text = "Save";
this.IDB_SAVE.UseVisualStyleBackColor = true;
this.IDB_SAVE.Click += new System.EventHandler(this.IDB_SAVE_Click);
//
// RestoreDefaults
//
this.RestoreDefaults.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.RestoreDefaults.Location = new System.Drawing.Point(505, 418);
this.RestoreDefaults.Name = "RestoreDefaults";
this.RestoreDefaults.Size = new System.Drawing.Size(60, 22);
this.RestoreDefaults.TabIndex = 105;
this.RestoreDefaults.TabStop = false;
this.RestoreDefaults.Text = "&Defaults";
this.RestoreDefaults.UseVisualStyleBackColor = true;
this.RestoreDefaults.Click += new System.EventHandler(this.RestoreDefaults_Click);
//
// NewHotkeyWindow
//
this.AcceptButton = this.IDB_SAVE;
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.IDB_CANCEL;
this.ClientSize = new System.Drawing.Size(709, 445);
this.Controls.Add(this.RestoreDefaults);
this.Controls.Add(this.IDB_SAVE);
this.Controls.Add(this.IDB_CANCEL);
this.Controls.Add(this.HotkeyTabControl);
this.Controls.Add(this.AutoTabCheckBox);
this.Controls.Add(this.label38);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "NewHotkeyWindow";
this.Text = "Configure Hotkeys";
this.Load += new System.EventHandler(this.NewHotkeyWindow_Load);
this.HotkeyTabControl.ResumeLayout(false);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Label label38;
private System.Windows.Forms.CheckBox AutoTabCheckBox;
private System.Windows.Forms.TabControl HotkeyTabControl;
private System.Windows.Forms.TabPage tabPage1;
private System.Windows.Forms.Button IDB_CANCEL;
private System.Windows.Forms.Button IDB_SAVE;
private System.Windows.Forms.Button RestoreDefaults;
}
}

View File

@ -0,0 +1,143 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace BizHawk.MultiClient
{
public partial class NewHotkeyWindow : Form
{
public NewHotkeyWindow()
{
InitializeComponent();
}
private void NewHotkeyWindow_Load(object sender, EventArgs e)
{
AutoTabCheckBox.Checked = Global.Config.HotkeyConfigAutoTab;
DoTabs();
}
private void IDB_CANCEL_Click(object sender, EventArgs e)
{
Global.OSD.AddMessage("Hotkey config aborted");
Close();
}
private void IDB_SAVE_Click(object sender, EventArgs e)
{
Save();
Global.OSD.AddMessage("Hotkey settings saved");
DialogResult = DialogResult.OK;
Close();
}
private void RestoreDefaults_Click(object sender, EventArgs e)
{
Defaults();
}
private void AutoTabCheckBox_CheckedChanged(object sender, EventArgs e)
{
SetAutoTab();
}
private void Save()
{
Global.Config.HotkeyConfigAutoTab = AutoTabCheckBox.Checked;
foreach(InputWidget w in _inputWidgets)
{
Binding b = Global.Config.HotkeyBindings.FirstOrDefault(x => x.DisplayName == w.WidgetName);
b.Bindings = w.Text;
}
}
private List<InputWidget> _inputWidgets
{
get
{
List<InputWidget> widgets = new List<InputWidget>();
for (int x = 0; x < HotkeyTabControl.TabPages.Count; x++)
{
for (int y = 0; y < HotkeyTabControl.TabPages[x].Controls.Count; y++)
{
if (HotkeyTabControl.TabPages[x].Controls[y] is InputWidget)
{
widgets.Add(HotkeyTabControl.TabPages[x].Controls[y] as InputWidget);
}
}
}
return widgets;
}
}
private void DoTabs()
{
HotkeyTabControl.TabPages.Clear();
//Buckets
List<string> Tabs = Global.Config.HotkeyBindings.Select(x => x.TabGroup).Distinct().ToList();
foreach (string tab in Tabs)
{
TabPage tb = new TabPage();
tb.Name = tab;
tb.Text = tab;
List<Binding> bindings = Global.Config.HotkeyBindings.Where(x => x.TabGroup == tab).OrderBy(x => x.DisplayName).ToList();
int _x = 6;
int _y = 14;
int iw_offset_x = 87;
int iw_offset_y = -4;
int iw_width = 120;
foreach (Binding b in bindings)
{
Label l = new Label()
{
Text = b.DisplayName,
Location = new Point(_x, _y),
Width = iw_offset_x - 2,
};
InputWidget w = new InputWidget()
{
Text = b.Bindings,
Location = new Point(_x + iw_offset_x , _y + iw_offset_y),
AutoTab = AutoTabCheckBox.Checked,
Width = iw_width,
WidgetName = b.DisplayName,
};
tb.Controls.Add(l);
tb.Controls.Add(w);
_y += 24;
if (_y > HotkeyTabControl.Height - 35)
{
_x += iw_offset_x + iw_width + 10;
_y = 14;
}
}
HotkeyTabControl.TabPages.Add(tb);
}
}
private void Defaults()
{
}
private void SetAutoTab()
{
foreach (InputWidget w in _inputWidgets)
{
w.AutoTab = AutoTabCheckBox.Checked;
}
}
}
}

View File

@ -0,0 +1,869 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAsAMDAQAAAABABoBgAAtgAAACAgEAAAAAQA6AIAAB4HAAAQEBAAAAAEACgBAAAGCgAAMDAAAAAA
CACoDgAALgsAACAgAAAAAAgAqAgAANYZAAAQEAAAAAAIAGgFAAB+IgAAQEAAAAAAIAAoQgAA5icAADAw
AAAAACAAqCUAAA5qAAAgIAAAAAAgAKgQAAC2jwAAGBgAAAAAIACICQAAXqAAABAQAAAAACAAaAQAAOap
AAAoAAAAMAAAAGAAAAABAAQAAAAAAIAEAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAA
AACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACHd3d3d3gIk5uTm5
OAh3d3d3d4AAAAAAd3eHeHd3c5t5d5iXmTd3h3h3h3cAAAAAeIeIh4iIeXiIiIiIh5iIeIeIeHcAAAAA
d4+IiIiIiYiIiIiIiJuIiI+IiIcAAAAAePiPj/j4ibj4/4/4+JiPj4+Pj4cAAAAAeI+PiPj4iYj4j4j4
iJiPj4+PiIcAAAAAePiI+IiPiYiIiPiPiLeIiIiI+IcAAAAAf4eId/iIiYiHeIiIiJiId3j4iIcAAAAA
eIhneIiIibiId4iIiJuHeHeIiPcAAAAAf4h3d4iIiYiHeIiIiJiHeHeIiIcAAAAAf3h3eHh4i4h3d4eI
iLiHd3eHiIgAAAAAf4d3d4eIiYh3d3h3iJh3d3h4eIcAAAAAf4h4eIeIibiHh4h4iJiIh4eHiPcAAAAA
h4+PiIiIg5l5uXmJuZuZuPj4+HgAAAAAAHd3d4eHeHuXm5uTl7l7mXd4dwAAAAAAAAAAeHh4h4eIeXiI
iHiHibAAAAAAAAAAAAAIeIiIiIiIm4iIiIiIh5AAAAAAAAAAAAAIePj4+P+IeYj4/4/495AAAAAAAAAA
AAAIiIj4+I+Pm4+PiPiPiJAAAAAAAAAAAAAIf4iIiIj4iYiHiI+I85AAAAAAAAAAAAAIiIh3d4iIefh3
iIiIiJAAAAAAAAAAAAAIiIh3d3iIuYh3eIiIiJAAAAAAAAAAAAAIiId3Z3iIifh3iIiIiJAAAAAAAAAA
AAAIiId3d3iIk/d3d4iIi5AAAAAAAAAAAAAIiId4eHd4ifd3eHd3iJAAAAAAAAAAAAAIj3h3h4ePiYiH
h4eIibAAAAAAAAAAAAAAeI+Pj4+IebmHd3d5iYAAAAAAAAAAAAAAB3d3d3d3AIm5m5m5uAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//
/////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////
AAD///////8AAP///////wAA+ABAAgAfAADwAAAAAA8AAPAAAAAADwAA8AAAAAAPAADwAAAAAA8AAPAA
AAAADwAA8AAAAAAPAADwAAAAAA8AAPAAAAAADwAA8AAAAAAPAADwAAAAAA8AAPAAAAAADwAA8AAAAAAP
AADwAAAAAA8AAPwAAAAAPwAA/8AAAAf/AAD/gAAAB/8AAP+AAAAH/wAA/4AAAAf/AAD/gAAAB/8AAP+A
AAAH/wAA/4AAAAf/AAD/gAAAB/8AAP+AAAAH/wAA/4AAAAf/AAD/gAAAB/8AAP/AAAAH/wAA/+ADAA//
AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP//
/////wAA////////AAD///////8AACgAAAAgAAAAQAAAAAEABAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//
AAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH
d3d3d5OXk5N3d3d3cAAAB4iIiImIiIiImIiIiHAAAIiPiPiDj4/4+Jj4+I94AACIiPj4+Yj4j4i4j4+I
iAAAiIiHiIuIeIiIn3eIj4gAAIiHeIiJiHeIiJh4eIiIAACIh3eIh4d4iIi4d3h4iAAAiId4d4mId3eI
mHd4eIgAAAf4iIj3uYt3uTh4iIiAAAAAAHeHd3eZmJibmYAAAAAAAACIiIiIi4iIiPewAAAAAAAAeI+P
+ImPj/j3cAAAAAAAAIiIiI+J+IiI+JAAAAAAAACIh4eIiYd4iIiwAAAAAAAAf4d3eIuHeIiIkAAAAAAA
AIiHd3iJh3h4iIAAAAAAAACIh3h3+Yh4d4eQAAAAAAAAB4iIiIebeYm5AAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////////////////////////////
////////4AAAB+AAAAfAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPgAAAH/AAAf/wAAH/8AAB//AAAf/wA
AH/8AAB//AAAf/wAAH/+AAD//////////////////////////////////////ygAAAAQAAAAIAAAAAEA
BAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDA
wAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIiIh7iI
iAAIiIeIiJiIgAiIiIiIiIiACHeHh4iYeIAIiIe3eLeIgAAHiHmJh4AAAAiI94+IAAAACHeHh4gAAAAI
h3eIeAAAAACI8ImLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAA//8AAP//AADAAwAAgAEAAIAB
AACAAQAAgAEAAOAHAADgDwAA4A8AAOAPAADxDwAA//8AAP//AAD//wAAKAAAADAAAABgAAAAAQAIAAAA
AAAACQAAAAAAAAAAAAAAAQAAAAEAAAAAAABsaGUAb2toAHBsaQBybmwAdXFuAHZzcAB5dXIAenZ0AH14
dgB+enkAf3x5AIB7egCBfXoAgn58AISAfgAqW7oAPGa5AHp8gwB3f48AK2HMADtt1gA8btcAMGnbADxv
2AA8cNgAEljhABFY5wAcXuUAElrrABNb7AABUPYABFP0AABR+AALWfgAFV73ABxg6AAYYPcAHWP3ABxk
9wAYYfgAJmPgACdk4QAhYuQAKWXhACFn9gAkaPMAI2n3AClr8gAobfkALnH4ADl18gA6d/QAOnjzADR1
+ABVecAAU3jEAFV+zwBHdNMAQnXZAEd32gBMfN8ATn/hAG+KvwBdgsUAX4bUAGOGygBmicwAb47NAGaN
2wBvk9UAaZDeAHqX1gB0mNsAeJveAFGC5ABUhecAV4fqAFqL7QBGgfYATon5AFaI8ABTiPYAWIryAFKJ
+ABtlOIAcZfmAHqe4AB1m+kAeZ/tAGCQ8QBxm/EAfKDjAH+j5gBzofYAeqLyAH2l+ACDgYIAhoKAAIiE
ggCKhoQAi4iFAIyJhgCOiogAj4yJAIyLjACOjIwAkIuJAJCMigCRjowAk5COAJSQjgCWkpAAmJORAJiU
kgCalpQAm5iWAJyYlgCQlJ4AlZacAJmYmQCempgAn5yaAJybngCgm5oAoJyaAKKdnACkn50ApKCeAImS
qQCTm6kAhJS3AIibuwCjn6AAoqKiAKaioACnpKIAoqCkAKWlpQCoo6EAqKSiAKqlpACqqKYArKimAKOm
qwClpqkAoqWsAKmpqgCtqqgArqyqAKiprQCwrKoAsa6tALKwrgC1sa8ArrC0ALSxsAC1tLUAuLSyALm1
tAC8ubcAvbq5AL+8uwC/vbwAwL27AMG+vQDDwb8AgJ3bAJChxACaq8oAmKjMAIOh3wCcrdAAn7HUAKGy
0QCltdQAp7jXAKO12ACqu9oAqLndAK6/3QCHpeMAjKnnAIGl6QCGqu4AkK3rAJSx7wCDqfIAlbP0AJK0
9ACsveEAscHgALLD5wC2x+YAqMT3AKzG9QDDwcAAxMLAAMbEwwDGxcQAycbFAMvIxwDFxcgAzMrJAM7M
ygDPzcwA0M7NANLQzwDNztIAzM/XANLR0ADU0tEA1tTTANPT1QDW1dQA2NbUANnY1gDa2dgA3NrZAN7c
2wDe3dwA4t/eAOLg3gDP2e4A4+LhAOTi4gDm5OMA6OblAOzq6gDw7u4A8/PyAPTz8gAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI5iYmJiYmJiYmJhlgBbLSUoKCUoKCUoJVIAlmFh
YmJiYmJiYmKOAAAAAAAAAAAAbw5zc3Nzc3JzcnJvChQhLBkYFhYWFhYWFyEaEnNzc3Nzc3Fxb28ObwAA
AAAAAAAAB42NjY2NjY2Nh4d/gSE7lpaWlpaWjpGHh0AhP42NjY2NjY2Nh39/BwAAAAAAAAAADpjG1tjY
2NjW2NakgyFExtbX19fY2NjWyoQhQ8bW2NjY2NTW1qaNCgAAAAAAAAAAYqTa2tra19rX2traqCFI19ra
2tfa2tra2qkhRtra2trX19vX2tqfDgAAAAAAAAAAY8na2tra2tva2traqR+n2tra29va2tra2q4hSdra
2tra29va2trGYgAAAAAAAAAAY87YzM7Yzs7Y2NjYrB+r2M6kydjY2NjY2K4hStjMpMnW2NjY2NjJYgAA
AAAAAAAAZ9bJb23MDn/JyczMrCG1zHNiBYfJycnMzLAhV8xzBwcOpMnJycnMYwAAAAAAAAAAZ9qkjgEF
ApikpKTJsSG2xqScDmempqakxrIhXMZvbaQObaSmpqbWZgAAAAAAAAAAb96fmAVtB5yfn5+fsiG5oX8E
Do6fn5+fn7IhXaBnY59mYZ+fn5/XbQAAAAAAAAAAb+OOjg4EY5aXjo6aviG6mmEJc4eOjo6OmL8ht5hm
DnMEbY6OjpfbbQAAAAAAAAAAcuWNf20Kc39/f3+NwCG8lnkOB3F/f39/jcEhuI5tCQlmf39/f3/kbQAA
AAAAAAAAYubOjY2Hh4eHh43W3yFS0Y6NjYeHjX+Nxl4hwtCJh4eHh4eHjc7kDgAAAAAAAAAAf23Y2tra
2trSzM7MZxAhMTMzMzMzMzMzMiEhLjIxM7za2tra2tZtfwAAAAAAAAAAAAB6enlmBGJycm9ycm04KRwc
GiEhJCQkKywsKykpHiERdnp6enoAAAAAAAAAAAAAAAAAAAAAYo2HjYeHh4eHiXp7OCFCkZGRkZGHjoeH
gisoAAAAAAAAAAAAAAAAAAAAAAAAAACWc5jJ0tbWztbO0syYOiGcytbW1tbW1tHMnDkhAAAAAAAAAAAA
AAAAAAAAAAAAAACOh8nX2tfa2tra2trOPCHG2trZ2dnZ2tra1kEhAAAAAAAAAAAAAAAAAAAAAAAAAACY
h8za2tra2tra2trYPSHW2tra2tra2tra2kUhAAAAAAAAAAAAAAAAAAAAAAAAAACYjtbY1oehpH/Y2NjW
Ph/W1od6eszY2NjY2EchAAAAAAAAAAAAAAAAAAAAAAAAAACamNLMoQJtcgGhzMzOSx/WyQZ5jcbMzMzM
zlUhAAAAAAAAAAAAAAAAAAAAAAAAAACanNamhwoKCgd6xqbJSyHYoQZjcqHGpsamyVYhAAAAAAAAAAAA
AAAAAAAAAAAAAACcodafY20HBG0On5/GTR/YmgVyepyfn5+fpFghAAAAAAAAAAAAAAAAAAAAAAAAAACc
xtaOB29iBXoEjZakTSHajQUHDo2Wl5aXn1khAAAAAAAAAAAAAAAAAAAAAAAAAACaxth/c39zc39zf3+g
WiHah3Nycn9/f39/ml8hAAAAAAAAAAAAAAAAAAAAAAAAAAChmOaYc3l5eXlzf3/buyHCn3pzf3N5eXl/
1k8jAAAAAAAAAAAAAAAAAAAAAAAAAAAADsbj4eHh4eHh2+PYEx4iUlFRUVFSTVFRNiFgAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAHNmZ2dnZ2dnZ2dnAABPKCUoKCUlKCgoLmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP//
/////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////
AAD///////8AAPgAQAIAHwAA8AAAAAAPAADwAAAAAA8AAPAAAAAADwAA8AAAAAAPAADwAAAAAA8AAPAA
AAAADwAA8AAAAAAPAADwAAAAAA8AAPAAAAAADwAA8AAAAAAPAADwAAAAAA8AAPAAAAAADwAA8AAAAAAP
AAD8AAAAAD8AAP/AAAAH/wAA/4AAAAf/AAD/gAAAB/8AAP+AAAAH/wAA/4AAAAf/AAD/gAAAB/8AAP+A
AAAH/wAA/4AAAAf/AAD/gAAAB/8AAP+AAAAH/wAA/4AAAAf/AAD/wAAAB/8AAP/gAwAP/wAA////////
AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP//
/////wAA////////AAAoAAAAIAAAAEAAAAABAAgAAAAAAAAEAAAAAAAAAAAAAAABAAAAAQAAAAAAAG5q
ZwB2cnAAeHRyAHt3dAB9eXcAf3t4AIF9ewCCfnwAhIB+AEJqugAOWe8AEVrtAAVT8AAAUfcABFT2AAlW
8gAIVvQAClj1AA9d9wAAUfgAC1n4ABNd9AAVYPgAI2LjACdk4QAnZeQAKGTiACBi6QAiZOwAJGbuACdp
8AApa/MAJGv5AC5w9QAxc/cAOXbzADl29QBFcc0ATHbMAFR4wQBQeMwARnXTAEd11ABUfdMAZoG4AGSA
vAB9krgAVYDcAGqJxQBihMoAbozIAGGI2wBOhPMAT4b2AFGG9QBWifIAWY33AGaN4QBpkeUAa5n2AIaC
gACIhIIAioaEAIyHhQCMiIUAjoqIAJCMigCSjowAl5ORAJiUkgCalpQAm5iWAJyZlwCempkAn5yaAKCc
mgChnpwApaGgAKakogClpKcAqKOiAKikogCppqQArKemAKqopQCsqKcArqqoALCsqgCxrq0AsrCuAKmu
twCysbEAtbKxALa1tQC4tLIAuLW0ALq4twC8ubcAubi4AL26uQC+vLsAvLy8AMC9uwDAvbwAwsC+AIeh
1ACKptsAjqfbAI+o3ACVqdIAkardAJ+y2wCrtssAu77HALK8zwCgs9wAs77RALC+2ACEp+8An7XlAL7B
ygC1wNMAtsDUAL7I3QDCwcAAxcLBAMbEwgDFxMQAycbFAMrIxgDBxc4AzMnIAM7MywDPzcwA0M7MANLQ
zwDEx9EA09HQANTS0ADW1NMA2NbVANvY1wDa2dkA3NrZAN7c2wDf3t0A7OvqAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEFBQUFBPz4uEBsbGxsY
GBAoP0FBQUE/PwgAAAAAAABNWWBgYGBgTxgzYGZgZmBgLwtVYGBgYGBTRwAAAAAAWVmOjo6Ojo6FHW6O
jo6Ojo5xEIeOjo6Ojo5VWQAAAABaZo6OjpGOjo0dcI6OkZGRjnoTjY6OkY6OjmJaAAAAAGCAhUmAS4yM
hx10YERPhYuLehONR0RPjYuMZmAAAAAAYIVmBQRLaGaBIXRmRz5pZmZ1E4E+YgZgZmaBYAAAAABgjVlE
A1NZWWghdEcIT1lZWXMTaQhLBFNZWYdgAAAAAGCOT0k/TU1NgCF4TT9ETU1NdROARD9ETU1TjV4AAAAA
AEuOhYWFgICMCiE7NDQ0NDojFjwwa4eFhY1JAAAAAAAAAAAARD9HR0dHLiYmDxgmKikpKScMMgAAAAAA
AAAAAAAAAABNWWiAgYCAaE8PW4CAgICAZjE4AAAAAAAAAAAAAAAAAE2Ajo6Ojo6OgA+LjpGOjo6OajUA
AAAAAAAAAAAAAAAAT4WOaYdgjo6JD42AYICOjo5vNQAAAAAAAAAAAAAAAABPjYUIRwFmhYMPjURNZoWF
hW81AAAAAAAAAAAAAAAAAFWNYAgECElmeQ+FPj9ZZmZgbzUAAAAAAAAAAAAAAAAAVY5LQQhHP1NmD4U/
CUlTU1NvNQAAAAAAAAAAAAAAAABPk1NLTUlLTZEPfE1LS0tJU3c5AAAAAAAAAAAAAAAAAABJaWiAaICA
TykXJCQkJCQkEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAD/////////////////////////////////////4AAAB+AAAAfAAAADwAAAA8AAAAPAAAADwAAAA8AA
AAPgAAAH/AAAf/wAAH/8AAB//AAAf/wAAH/8AAB//AAAf/wAAH/+AAD/////////////////////////
/////////////ygAAAAQAAAAIAAAAAEACAAAAAAAAAEAAAAAAAAAAAAAAAEAAAABAAAAAAAAgX17ADtu
1wB4ibEAfo6xAGGFzwBujM4Ad5PMAGWK1gBpj9wAc5PXAHqX0wB2ltkAe5veAF+K4gBVhekAYIriAGaP
5ABvleMAapbvAHOc7wBvmvAAdJ71AHeg9QB5ovcAjouIAJKOjACXkpAAmJWSAJ2YlwCempgAop+dAKah
nwCBkrsApqOhAKilowCqp6UAr6uqAK+sqwCwrKsAsa6tALKwrgC0sK4Arq2xALOxsQC0sbAAt7W0ALi0
swC5trUAuri2ALy5twC+u7oAv728AMC+vACMnMIAgZrPAImeyQCbqMYApa3BAK61wwClscoAqrXOAK+4
ygC1uMIAtLzQALO/2ACjtuAAxcLBAMbEwwDJxsUAycjIAMzKyQDPzcwA0c/OAMXK0wDV09IA1tTSANzZ
2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtLS0+FBMTFT0tLS0AAAAk
RUVFBjxGRjsIRUVDJAAALUNDTA1AMkxKEi5GTCYAADIeGS4MOhouPwkcHC4tAAA0Mi0tNwoDIQsPAy4y
NAAAAAAcJic2Agc4OAVCAAAAAAAAJ0xGTRBJRk1BAAAAAAAAADIfAS4QJyRDPQAAAAAAAAA1HRwdECsb
HzkAAAAAAAAAAEZGSQAXFhYXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAP//AAD//wAA//8AAMADAACAAQAAgAEAAIABAACAAQAA4AcAAOAPAADgDwAA4A8AAPEP
AAD//wAA//8AAP//AAAoAAAAQAAAAIAAAAABACAAAAAAAABCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUfgDAFH4AwBR
+AMAUfgDAFH4AwBR+AMAUfgDAFH4AwBR+AMAUfgDAFH4AwBR+AMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG1pZgxsaGVKbGhle2xo
ZYBsaGWAbGhlgGxoZYBsaGWAbGhlgGxoZYBsaGWAbGhlgGxoZYBsaGWAbGhlfmxoZVtuaWUWAEv/AQBR
+C0AUfh1AFH4lgBR+JkAUfiZAFH4mQBR+JkAUfiZAFH4mQBR+JkAUfiZAFH4mQBR+JkAUfiYAFH4ggBR
+EEAUPwHcGphFmxoZVtsaGV+bGhlgGxoZYBsaGWAbGhlgGxoZYBsaGWAbGhlgGxoZYBsaGWAbGhlgGxo
ZYBsaGV7bGhlSm1pZgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG1p
ZhRsaGWWb2to8Xh0cv98eHX/fHh1/3x4df98eHX/fHh1/3x4df98eHX/fHh1/3x4df98eHX/fHh1/3p1
c/9xbWv4bGlmtxxY0HkAUfnaAFD5/gBP+f8AT/r/AE/6/wBP+v8AT/r/AE/6/wBP+v8AT/r/AFD6/wBQ
+v8AUPr/AFD6/wBQ+f8AUfnrDFTllmZnbblybmr4enZz/3x4df98eHX/fHh1/3x4df98eHX/fHh1/3x4
df98eHX/fHh1/3x4df98eHX/eHRx/29raPFsaGWWbWlmFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAG1pZgFsaGV6cm5r+4+Lif+fm5n/oJya/6Cbmf+fmpn/n5qZ/56amP+emZf/npmX/52Z
l/+dmJf/nZiX/52Ylv+cl5b/k46L/2Jviv4LVOX7AFH5/yRl5f9OedD/UnvO/1F6zv9Res3/UXnN/1B5
zf9Qec3/UHnM/1B4zP9QeMz/T3jL/053y/8wadz/BFP2/wNR8f5Qa6L/l5KO/6Cbmv+gnJr/oJuZ/5+a
mf+fmpn/npqY/56Zl/+emZf/nZmX/52Yl/+dmJb/nZiW/5uWlf+Mh4X/cW1r/GxoZXltaWcBAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsaGUVbWlmzYmFg/+qpaT/qaSj/6ijov+ppKP/qKSj/6ij
ov+noqH/p6Kh/6ahoP+moZ//paCf/6Sgnv+jnp3/op2c/6Sem/9Rd8T/AE/5/yFk6P+PnbX/q6qn/6uq
p/+rqqf/q6mn/6qppv+pqKX/qail/6inpP+npqP/p6aj/6alov+ko6D/l56n/ztx1/8AUPn/NGvc/6Ki
p/+ppKP/qaSj/6mko/+opKP/qKOi/6eiof+noqH/pqGg/6ahn/+loJ//pJ+e/6OenP+inpz/op2c/4WB
f/9taWbLbGllFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbGhlK3BsaeialpT/sKyr/7Wx
sP/DwL//ycbF/8nGxf/JxsX/ycbE/8jFxP/IxcT/yMXE/8jEw//IxMP/xMHA/7Swr/+mo6P/Q3PV/wBO
+/9Tftb/tLOx/729vP/Ixsb/ycjI/8nIyP/JyMf/yMfH/8jHx//Ix8f/yMbG/8fGxv/GxcX/vby8/6+t
q/9ujML/A1P2/yBk6P+hpLD/ura0/8bDwv/JxsX/ycbF/8nGxf/JxsT/yMXE/8jFxP/IxcT/yMTD/8fE
w//Avbz/r6uq/6mko/+UkI7/b2to6GxoZSsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGxo
ZTVxbWrsn5ya/7u3tv/S0M7/3dva/97c2//e3Nv/3tzb/97c2//e3Nv/3tzb/97c2//e3Nv/3tzb/97c
2//X1NP/trS1/0R01/8ATvv/XITX/8nGw//b2dj/3tzb/97c2//e3Nv/3tzb/97c2//e3Nv/3tzb/97c
2//e3Nv/3tzb/93b2v/Lycb/eJPG/wVU9f8gZOn/r7S//9jV0//e3Nv/3tzb/97c2//e3Nv/3tzb/97c
2//e3Nv/3tzb/97c2//e3Nv/3dva/9DOzP+zr67/mZWT/3BsaexsaGU1AAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAABsaGU1cW1q66Ognv/IxcT/3NrZ/93b2v/d29r/3dva/93b2v/d29r/3dva/93b
2v/d29r/3dva/93b2v/d29r/3tzb/8fGx/9Hd9r/AE36/2GJ3P/Z1dH/3tzb/93b2v/d29r/3dva/93b
2v/d29r/3dva/93b2v/d29r/3dva/93b2v/d29r/3NnV/4Kcz/8FVPX/Imbr/77Dz//f3Nr/3dva/93b
2v/d29r/3dva/93b2v/d29r/3dva/93b2v/d29r/3dva/93b2v/c2tn/w8C+/52Zl/9wbGrrbGhlNQAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa2dkNXFtauunpKL/zsvK/93b2v/d29r/3dva/93b
2v/d29r/3dva/93b2v/d29r/3dva/93b2v/d29r/3dva/97c2//My8z/Snrd/wBN+v9kjN//3NnU/93b
2v/d29r/3dva/93b2v/d29r/3dva/93b2v/d29r/3dva/93b2v/d29r/3dva/93a1/+HotT/BVT1/yNo
7P/Cx9P/39za/93b2v/d29r/3dva/93b2v/d29r/3dva/93b2v/d29r/3dva/93b2v/d29r/3dva/8nG
xf+hnZz/cW1q62xoZTUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGtnZDVxbWvrrKmn/9HP
zv/c2dj/3NrZ/93b2v/c2tn/3NnY/9za2f/e29r/3drZ/9zZ2P/c2dj/3NnY/9zZ2P/d2tn/zs3O/0x8
4P8ATfr/Z4/i/93Z1f/c2tj/3drZ/9vY1//b2Nf/3drZ/9za2P/c2dj/3NnY/9zZ2P/c2dj/3NnY/9zZ
2P/d2db/iqTX/wZU9v8lae7/w8nU/93a2P/c2tn/29jX/9rY1//c2tn/3dvZ/9za2P/c2dj/3NnY/9zZ
2P/c2dj/3NnY/9vZ2P/Mysn/paKg/3FtautsaGQ1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AABrZ2Q1cm5r67Ctq//V0tH/1tTS/8XDwf+loqD/wb68/9fV0//Gw8H/pKGf/727uf/V09L/1dLR/9XS
0f/V0tH/1tPR/87Nzv9Of+P/AE36/2qS5f/b19P/0tDO/7Ctq/+XlJH/mZaT/7GvrP/Rzsz/1dPR/9XS
0f/V0tH/1dLR/9XS0f/V0tH/2dXR/42n2v8GVfb/Jmrv/8PJ1P/X1dL/v727/5qWlP+XlJH/oJ2b/7m2
tP/Rz83/1dPR/9XS0f/V0tH/1dLR/9XS0f/V09H/z83M/6qnpf9xbWrra2dkNQAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAa2dkNXJua+u1srD/2NXU/87My/+7ubf/dXFu/5WRj//DwcD/m5mX/3Bs
af+urKr/zcvK/8zJyP/Mycj/zMnI/83Lyf/Ozc7/UYLl/wBM+f9tlej/2NXQ/8jGxP+UkY//iYaE/4WC
f/9zb23/qqem/83Lyv/Mycj/zMnI/8zJyP/Mycj/y8nI/9PPzP+Pqt3/BlX2/ydr8P/DyNT/z83L/6Si
oP9va2j/iISC/4F9e/90cW7/n5ya/8rIx//Mysn/zMnI/8zJyP/Lycj/zcvK/9LQz/+uq6n/cm5r62tn
ZDUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGtnZDVybmzruba1/9rY1//HxMP/wL28/4eE
gf9wbGn/enZ0/3Jua/98eHX/u7m3/8TCwf/EwcD/xMHA/8TBwP/Gw8H/zs3O/1OE6P8ATPn/cJjr/9XS
zf/DwL//v727/766uf+joJ7/b2to/5iVk//Gw8L/xMHA/8TBwP/EwcD/xMHA/8TBwP/Oysf/kq3g/wdW
9/8obfL/wsfT/8jEwv+gnZv/dXFu/7GurP+7ubf/h4OB/3ZycP+2s7L/xcLB/8TBwP/EwcD/xMHA/8fE
w//V09H/s7Cu/3Jua+trZ2Q1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABrZ2Q1c29s6767
uf/d29r/wL27/726uP+YlJL/cm5r/5KOjP9zb2z/jYmH/7u4t/+8urj/vLm4/7y5uP+8ubf/vru5/87N
zv9Wh+r/AEz5/3Sc7v/Tz8v/vLm3/62qqP+IhIL/c29s/3l1c/+opaP/vbq4/7y5uP+8ubj/vLm4/7y5
uP+8ubf/ycbC/5aw4/8HVvf/Km7z/8LH0//Avbr/m5iW/3Rwbf+sqaf/v7y6/5mWlP9wbWr/pKGf/726
uf+8ubj/vLm4/7y5t//Avbv/2NbU/7e1s/9ybmvra2dkNQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAa2dkNXNvbOvDwL7/4d7d/7m1s/+0sa//paGf/3Zyb/+IhIL/dHBt/5uYlf+1srD/tLGv/7Sx
r/+0sa//tLCu/7azsf/Ozc7/WYnt/wBM+f93n/L/0c3I/7GurP+Ig4H/cW1q/4+Mif+opKL/tLGv/7Sx
r/+0sa//tLGv/7Sxr/+0sa//s7Cu/8TAvP+ZtOb/B1b4/ytw9f/Cx9P/uLSx/5eTkf9zb23/pqKg/7Wx
r/+Niof/cW1q/6Kenf+1sa//tLGv/7Sxr/+0sK7/ubWz/9vZ1/+8ubf/cm9s62tnZDUAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGtnZDVzb2zrx8XD/+Ti4P+xraz/rKem/6ijov98eHb/bmto/3Zy
b/+jn57/rKin/6ynpv+sp6b/rKem/6ynpv+uqqj/zs3O/1uM8P8ATPn/eqL1/87Jxf+opKP/gn58/3Nv
bf+QjIr/kY6M/6Whn/+sqKf/rKem/6ynpv+sp6b/rKem/6unpv+/urf/nLfp/whX+P8scfb/wcbS/7Cr
qf+Sjoz/cGxp/4yIhv+NiIf/c29s/356eP+no6L/rKin/6ynpv+sp6b/q6em/7GtrP/e29v/wL68/3Nv
bOtrZ2Q1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABqZmMzdHBt68zKyf/o5ub/rain/6Oe
nf+kn57/i4eF/3Zyb/+FgX7/op2c/6Sfnv+kn57/pJ+e/6Sfnv+kn57/p6Kh/9DP0P9dj/L/AEv4/3yk
9//OycX/o56d/5eSkf99eXb/dnJv/3t2dP+ZlZP/pZ+e/6Sfnv+kn57/pJ+e/6Sfnv+jnp3/vbi0/6G7
7f8IV/j/LXL4/8PI1f+po6H/k46M/3h0cv94dHH/eXVy/4N/ff+blpX/pJ+e/6Sfnv+kn57/pJ+e/6Oe
nf+tqKf/4+Df/8XCwf9zb2zra2dkMwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa2dkH3Bs
ad/CwL//+Pf2/8G9vP+gm5n/npmX/5yXlf+ZlJL/m5aU/56Zl/+emZf/npmX/56Zl/+emZf/n5qY/7Ov
rf/n5eT/bJr3/wBM+P9bkPr/29ze/6yno/+gmpf/nZiU/5uVkv+clpP/n5mW/6Cal/+gmpf/oJqX/6Ca
l/+gmpf/paCd/9PQzP+Hrvb/AFH4/z19+v/e4ur/t7Kt/6Calv+clpP/m5WS/5qVk/+dmJb/npmX/56Z
l/+emZf/npmX/56Zl/+gm5n/wLy7//Dv7v+8urj/b2to32tnZB8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAG1pZgprZ2SokY6M/+zs6//19PT/1NHQ/8fEw//HxMP/x8XD/8fEw//HxMP/x8TD/8fE
wv/HxML/x8TC/87Lyf/q6ej/8/Hu/3mWzP8BUPH/D176/4av+v++yN//rbPE/6qwwf+qsMH/qrDB/6qv
wP+qr8D/qq/A/6mvwP+pr8D/qrDB/7nB1f+du/P/Jmz5/wBO+P9JgvH/w9f6/7XG5/+Vpcb/maXA/7G1
wf/Gw8H/yMXD/8fEw//HxMP/x8TC/8fEwv/HxML/0tDP//Hw8P/m5eT/j4uJ/2tnZKhtaWYKAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbGhlO21qZ9qQjYv/w8LB/9LR0f/S0dD/0tHQ/9LR
0P/S0dH/0tHQ/9HQz//JyMb/xcTC/8XEwv/GxMP/xsTC/6KfnP9tb3T/KVy//wFR9/8GVfr/GGL6/xpj
+P8aYvj/GmL4/xpi+P8bY/f/GmP3/xpi+P8aYvj/GmL4/xpi+P8ZYvn/Clj5/wBQ+f8AUPn/B1X2/xJe
+f8TX/r/EV34/xNe+P8wdPn/iq/2/8zQ1//S0M//0dDP/9HQz//R0M//0c/P/9HPzv/Bv73/j4yJ/21p
ZtptaGU7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG9raAFsaGU+a2dkqG9s
adt1cW7kdXFv43Vxb+N1cW7mdHBt+3h0cf+KhoT/k46N/5OPjf+Tjoz/k46M/5KNi/+Oiof/kIuI/4aJ
lP9KdMj/Gl3n/wtW8P8KVfH/Clbx/wlV8P8CUfT/AFD4/wBQ+P8HVPT/Clby/wpW8v8KVvL/C1bx/w9Z
7/8RWu7/EVru/xFZ7v8QWO7/EFju/xBY7v8MV/D/AVD3/wVT9v86ZLj7cnFx5nVxbuN1cW7jdXFu43Vx
buN0cG7kb2to22tnZKdtaGU7bmpnAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAG1pZgpqZmMZaGRhHGhkYRxnY2AZa2dkVG5qZ+6MiIb/paCf/6ahoP+loJ//paCe/6Sf
nv+jn53/o56d/6Oenf+jnpv/n5uc/5KVo/+Djqv/fYyt/36Nrf9zhq7/G1zd/wBQ+v8kZeb/dY6+/4OV
t/+Bk7f/gZO2/4GTtf+NmK7/kJqs/5CZq/+PmKv/j5iq/46Xqv+Ol6n/g5Ku/0Z10P8EU/X/A1Hz7SJX
xU9yZlEZaGRhHGhkYRxoZGEcaGRhHGtmYxltaWYKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGxoZXB4dHH/pqGg/62o
p/+tqaj/sa2s/7Swr/+0sK//tLCu/7Ovrf+zr63/s66t/7KurP+yrqz/sKuo/6umo/+oop3/k5in/xNb
7P8HVfX/eJLE/7Cuq/+ysK//tbSy/7a1s/+2tbP/tbSz/7Szsv+0s7L/s7Kx/7Kysf+ysbD/rays/6mo
pv+Yn6v/Jmbj/wBQ+f4AUfltAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AABrZ2R/gX16/6+rqv+4tLP/zcrJ/9jW1f/Z19b/2dfW/9nX1v/Z19b/2dfW/9nX1v/Z19b/2dfW/9nW
1f/S0M//vLe1/4iVtf8MV/L/Elvx/5+ovP/DwsD/1dPS/9nX1v/Z2Nf/2dfX/9nX1//Z19f/2dfW/9nX
1v/Z19b/2dfW/9fV1P/Jx8f/ra6x/0J12f8AUPn/AFH4fwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAa2dkf4SAfv+2srH/zcrI/97b2v/d29r/3dva/93b2v/d29r/3dva/93b
2v/d29r/3dva/93b2v/d29r/3tzb/9jU0f+QoMH/C1fy/xNc8f+ttMb/2tjV/97c2//d29r/3dva/93b
2v/d29r/3dva/93b2v/d29r/3dva/93b2v/d29r/3tva/8PExf9GeNv/AE/5/wBR+IAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGtnZH+Fgn//vLm4/9TS0f/d29r/3dva/93b
2v/d29r/3dva/93b2v/d29r/3dva/93b2v/d29r/3dva/93b2v/d2tf/mqrL/wxX8v8UXPL/tr7P/97b
2f/d29r/3dva/93b2v/d29r/3dva/93b2v/d29r/3dva/93b2v/d29r/3dva/97c2v/Pz9D/Snzf/wBP
+f8AUfiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABrZ2R/h4OB/8K/
vv/W09L/3dva/93b2v/b2dj/2NbV/9vZ1//d29r/2dfW/9nX1v/d29r/3dva/93b2v/d29r/3drY/56u
z/8MWPP/FF3z/7vC1P/e29n/29nY/9jW1f/Y1tX/2NbV/9nX1v/c2tn/3dva/93b2v/d29r/3dva/93b
2v/e29r/0dHS/01+4v8AT/n/AFH4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAa2Zjf4mGg//HxcT/1tTT/9nX1f/a2Nb/wL68/5CNiv+uq6n/0tDO/5uYlv+YlZL/0c7N/9nX
1v/Z19X/2dfV/9vX1P+hsdL/DVj0/xVe9P+9xdf/3NnW/8LAvv+Sj4z/jYqH/4yJhv+cmZf/09HP/9nX
1v/Z19X/2dfV/9nX1f/Z19X/2tfV/9HR0v9PgOT/AE/5/wBR+IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGpmY3+Lh4X/zsvK/9XS0f/Rz87/0dDO/6GenP9qZmP/iISC/7u4
t/92cm//cW1q/7e1s//S0M//0M7N/9DOzf/U0c7/o7PV/w1Z9P8WX/T/wMfZ/9XS0P+xr63/cm5r/42K
h/+dmpj/p6Sj/8zKyf/Rz87/0M7N/9DOzf/Qzs3/0M7N/9HPzv/Q0NH/UYPn/wBP+f8AUfiAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABqZmN/jYmH/9TR0P/T0c//yMbF/8XC
wf+LiIb/c29s/3x4df+fnJr/dHBt/3NvbP+fnJr/ycbF/8jFxP/HxcT/zsrH/6W21/8OWfX/F2D1/8LK
2//Nysj/q6mn/3Rxbv+gnZv/t7W0/767uv/HxcT/yMXE/8jFxP/IxcT/yMXE/8jFxP/IxsT/zs7P/1SG
6f8AT/n/AFH4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAamZjf4+L
if/Z19X/0s/O/8G+vf+4tbP/enZz/4eEgf99enf/gn98/3p2dP+BfXv/iYaD/767uf/Avrz/wL28/8jE
wf+ouNr/Dlr1/xhh9v/Fzd7/xsPA/6ajof9xbWr/dnJv/3l1cv+WkpD/v7y7/8C+vP/Avbz/wL28/8C9
vP/Avbz/wb68/83Nzv9WiOz/AE/4/wBR+IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAGpmY3+RjYv/393c/9HOzf+6trX/paKg/3NvbP+Vko//g399/25qZ/+Hg4H/joqI/3h0
cf+wrKr/uba0/7i1s//Cvrv/qrrc/w9a9v8ZYff/yM/g/7+8uP+hnZv/c29s/5SRj/+no6H/rqqo/7i1
s/+5tbP/ubWz/7m1s/+5tbP/uLWz/7m2tP/My8z/WYvv/wBP+P8AUfiAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABqZmN/k4+N/+Xj4v/Qzcv/sq6t/5KOjP9wbGr/npuZ/4uH
hf9qZmP/joqI/5iUk/9xbWv/nZmX/7GtrP+wrKv/vLe0/6293/8PW/b/GmL4/8rS4/+4tLH/m5eV/3Bs
av+AfHr/iYWD/5WRj/+vq6n/sa2r/7Gsq/+xrKv/sayr/7Csq/+xraz/y8rL/1yO8f8AT/j/AFH4gAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaWVif5WSj//r6un/zsvK/6ij
ov+Tjo3/hoKA/6Oenf+YlJL/hH99/5mVk/+gm5r/hoJ//5iUkv+ppKP/p6Kh/7axrv+vwOH/EFz3/xtj
+f/O1Ob/sq2q/5yYlv+FgX7/gn58/4J9e/+OiYf/pqGg/6ijov+oo6L/qKOi/6ijov+oo6L/qaSi/8rJ
yv9gkfT/AE/4/wBR+IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGpm
Y36Oioj/8O/u/9bT0v+jnp3/n5qZ/6Cbmf+gm5r/oJua/6Cbmf+gm5r/oJua/6Cbmf+gm5n/oJua/5+a
mf+8t7X/xNDp/xVf+P8VYPn/xtTv/7izsP+fmpn/oJuZ/6Cbmf+gm5n/oJuZ/6Cbmv+gm5r/oJua/6Cb
mv+gm5r/oJuZ/6ahn//T1Nf/VYz3/wBP+P8AUfh7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAABrZ2Reend0+d/f3f/19fT/xMHA/6mko/+noqD/p6Kg/6eioP+noqD/p6Kg/6ei
oP+noqD/p6Kg/6eioP+0sK//4uDe/9/l8f8na/D/AVL5/3yn+v/Y2Nv/trGs/6uloP+rpaD/q6Wg/6ul
oP+rpaD/q6Wg/6uloP+rpaD/q6Wg/66oo//Lx8X/uczx/x9o+P8AUPj2AFH4VQAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbGhlHG1pZsWXlJL/4+Pi//Hx8P/n5eX/5eTj/+Xk
4//l5OP/5ePj/+Xj4//k4+L/5OPi/+Tj4v/k4+L/7Ovq/+7t7P+1s7L/PGSy/ABQ9v0PW/n/WpD6/3Ka
7f9sk+b/bJPm/2yT5v9sk+b/bJPm/2uT5v9rk+b/a5Pm/2uT5v9vluj/bJn1/yhu+f8AUfj/AFH4wgBR
+BgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsaGU7bWlmyn56
ePyVk5H/m5mX/5uYlv+bmJb/m5iX/5uYlv+bmJb/mpiW/5qYlv+al5X/mpeV/5qWlf+JhoP/cW1p6lxk
eYoDUvSeAFD49ABP+P8ATvn/AE/5/wBP+f8AT/n/AE/5/wBP+f8AT/n/AE/5/wBP+f8AT/n/AE/5/wBO
+P8AUPj8AFH4ygBR+DsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAGxoZSNrZ2NnaWVigGllYoBpZWJ/aWVif2llYn9pZWJ/aWVif2llYn9pZWJ/aWVif2ll
Yn9pZWKAamZjd2xoZT56bFYGAFD8DQBR+FIAUfiKAFH4mQBR+JkAUfiZAFH4mQBR+JkAUfiZAFH4mQBR
+JkAUfiZAFH4mQBR+JkAUfiUAFH4bgBR+CQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFH4AgBR+AMAUfgDAFH4AwBR
+AMAUfgDAFH4AwBR+AMAUfgDAFH4AwBR+AMAUfgDAFH4AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//
////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////8AD/////AAAAAAAAD/4AAAAAAAAH/AA
AAAAAAAP8AAAAAAAAA/wAAAAAAAAD/AAAAAAAAAP8AAAAAAAAA/wAAAAAAAAD/AAAAAAAAAP8AAAAAAA
AA/wAAAAAAAAD/AAAAAAAAAP8AAAAAAAAA/wAAAAAAAAD/AAAAAAAAAP8AAAAAAAAA/wAAAAAAAAD/AA
AAAAAAAP+AAAAAAAAB/4AAAAAAAAH/4AAAAAAAB///AAAAAAP///8AAAAAA////wAAAAAD////AAAAAA
P///8AAAAAA////wAAAAAD////AAAAAAP///8AAAAAA////wAAAAAD////AAAAAAP///8AAAAAA////w
AAAAAD////AAAAAAP///8AAAAAA////wAAAAAD////gAAAAAf////AAAAAD///////+AA///////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////KAAAADAAAABgAAAAAQAgAAAAAACAJQAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAbGhlBGllYg1nY2AOZ2NgDmdjYA5nY2AOZ2NgDmdjYA5nY2AOZ2NgDmll
Yg1saGUEAAAAAABR+AQAUfgVAFH4HQBR+B0AUfgdAFH4HQBR+B0AUfgdAFH4HQBR+B0AUfgYAFH4BwAA
AABsaGUEaWViDWdjYA5nY2AOZ2NgDmdjYA5nY2AOZ2NgDmdjYA5nY2AOaWViDWxoZQQAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsaGUibWlmlHJta8xzb2zPc29sz3NvbM9zb2zPc29sz3Nv
bM9zb2zPc29sz3FtaspuaWSMNl2uOgBQ+o8AT/rSAE/62gBP+toAT/raAE/62gBP+toAT/raAE/62gBP
+toAT/rWAFD6oyNZxkpuaWSMcW1qynNvbM9zb2zPc29sz3NvbM9zb2zPc29sz3NvbM9zb2zPcm1rzG1p
ZpRsaGUiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGxoZRBuamewg399/5eTkf+ZlJL/mJOR/5eT
kf+XkpD/l5KQ/5aSkP+WkZD/lpGP/5SPjf98e3/8H1nM6wRU9/0vauD/P3HY/z5w1/8+cNf/PnDX/z1v
1v89b9b/PW/W/z1v1f8zatr/Clbz/hJW3fJ2e4r9l5KQ/5mUkv+Yk5H/l5OR/5eSkP+XkpD/lpKQ/5aR
kP+WkY//lI+N/4F9e/9uamewbGhlDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGpmYz97d3TzpqGg/6un
pv+uqaj/r6qp/66qqP+tqaf/rain/6ynpv+rp6b/qaWj/6ahnf+Ajq3/CVXw/0F02/+jp67/rq6s/6+u
rv+urq3/ra2s/62sq/+srKv/q6uq/6qpqP+io6X/Vn7K/wRU9f9siMH/rqik/66qqP+vqqn/rqqo/62p
p/+tqKf/rKem/6unpv+ppKP/paCf/5+amP95dXLya2dkPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGpm
Y1qFgX/9s6+u/8fDwv/V0tH/1tTT/9bT0v/W09L/1tPS/9bT0v/V09L/1NHQ/8S/vP99kb3/BVP1/26O
z//IxcH/1NPS/9bU1P/W1NP/1tTT/9bU0//W1NP/1dTT/9TT0v/IxcL/gZfB/wdW9P9kiM7/yMTA/9XS
0f/W1NP/1tPS/9bT0v/W09L/1tPS/9XT0v/U0dD/w8C//6unpv+Cfnv9a2djWgAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAGpmY12IhIH9wr69/9vZ2P/e3Nv/3dva/93b2v/d3Nv/3dzb/93c2//d3Nv/3tzb/9zZ
1v+Knsr/BFP1/3mX2P/d2tb/3tzb/93b2v/d29r/3dva/93b2v/d29r/3dva/97c2//e29j/kKbQ/wdW
8/9uk9n/3drW/97c2//d29r/3dva/93b2//d3Nv/3dzb/93c2//e3Nv/29nY/7y4t/+EgH79amZjXQAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGpmY12Kh4T9ysfG/93b2v/e3Nv/3tzb/93b2v/e3Nv/3tzb/93b
2v/d29r/3dva/97b2P+RpdH/BVP1/36d3v/g3Nj/3tzb/97c2//e3Nv/3dva/93b2v/d29r/3dva/93b
2v/g3Nn/l63W/whW9P9zmN7/39zY/97c2//e3Nv/3tzb/93b2v/d29r/3dva/93b2v/d29r/3drZ/8TB
wP+Hg4H9amZjXQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGllYl2Nioj9zszL/9jW1f/Lycf/z8zL/9nX
1f/Mycj/zcrJ/9nW1f/Y1tX/2dbV/9vX1P+UqdX/BVT2/4Gg4f/d2dT/zMrI/7y5uP/EwcD/1tPS/9nW
1f/Y1tX/2NbV/9jW1f/c2NT/mq/Y/wlX9f91muD/3NjU/8zJyP+8ubj/wb+9/9HPzf/Z19X/2NbV/9jW
1f/Z1tX/2dbV/8nGxf+Kh4T9amZjXQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGllYl2RjYv909DP/8/N
y/+al5T/ko+N/7+9u/+IhIL/op+d/87My//Ny8r/zcvK/9LPy/+WrNj/BlT2/4Sj4//U0cz/pKGf/4qG
hP+AfHr/pqSi/87My//Ny8r/zcvK/83Lyv/Szsv/m7Ha/wpY9v93m+L/1NDM/5yZl/98eXb/h4OB/4mG
g/+9u7n/zszL/83Lyv/Ny8r/z83L/83Kyf+Niof9aWViXQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGll
Yl2UkI7919XT/8fEw/+npKL/dHBt/357eP90cG7/r6yq/8TBwP/DwL//wsC+/8nGwv+Zrtr/BlX3/4em
5v/MyMT/vbq5/66qqf9/fHn/kI2K/8PBv//DwL//w8C//8LAvv/IxMH/nbLb/wtZ9v94neP/y8fD/5OQ
jv+PjIn/ure2/4OAff+TkI3/w8C//8PAv//CwL7/xsPC/9HPzf+QjYv9aWViXQAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAGhkYV2XlJH93NnY/726uP+vq6r/fnp3/4eDgf9/fHn/s7Cu/7i1s/+4tbP/uLWz/8G9
uf+csd3/B1b3/4qp6f/Fwbz/n5uZ/3l1c/+GgoD/qqel/7m1tP+4tbP/uLWz/7i1s/+/u7f/n7Td/wta
9/96nuX/w7+6/4+Lif+MiYb/uba0/4yIhv+Gg4D/t7Sy/7i1s/+4tbP/vbq4/9bT0v+UkI79aWViXQAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhkYV2al5X94N7d/7Ovrv+sqKb/hYF//3Ftav+Lh4X/ramo/62p
qP+tqaj/rain/7izsP+ftOD/CFb4/42s7P+8t7P/i4aE/3l1c/+VkZD/pKCf/66pqP+tqaj/ramo/62p
p/+1sK3/obbf/w1b+P97oOb/urWx/4mFg/9/e3n/lJCP/3h0cf+RjYv/rqmo/62pqP+tqaf/s6+u/9rX
1v+Xk5H9aGRhXQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGdjYFicmZf95+bl/66qqP+inZz/k46M/396
eP+WkY//o56c/6KdnP+inZz/oZyb/7Suq/+mu+b/CFf5/46u8P+6tK//mZSS/4N+fP9/enj/lZCO/6Oe
nP+inZz/op2c/6Kdm/+wqqb/pbrk/wxb+f+Bpez/trCs/5CLiP9/enj/gHx5/4yHhf+fmpn/op2c/6Kd
nP+hnJv/rqmo/+Hf3v+ZlZP9aGRhWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGdjYDmIhYPv6ejo/9bT
0/+xraz/r6qp/6+qqf+vq6n/r6qp/6+rqf+vqqn/sq6s/9jV0v+/zev/DVnz/1CK+v/Cydf/rqys/6mm
p/+ppqb/qaan/6mmp/+ppqf/qaam/6uoqf/Aw8r/b5z1/wVV9/+auvb/yszS/6Giqv+mpKb/r6qn/7Cr
qf+vq6n/r6qo/6+qqP+xrav/1NHQ/+Ph4P+Gg4HvZ2NgOQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGtm
YwpuamebmpeV/c7NzP/Qz87/zs3M/8/Ozf/Qzs3/z87M/8rIx//IxsT/ysjH/8zKyf+VlJb/MV+5/wVV
9/8ucfr/Pnjy/zt28P88du//PXfu/z127v87de//O3Xv/zx38P8zdPj/CFb6/wFQ+P8obPf/Nnb6/y1t
8f89eO//iqzt/8vN0//Pzcv/zs3L/87My//Pzs3/zMrJ/5iVk/1uameba2dkCgAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAABrZ2QWa2djd3RwbbJ5dnO3eXZztnh0cc95dXP+j4uJ/5mVk/+YlJL/mJOS/5aR
j/+TjYr/i4yU/1V4w/8pY97/H1/j/yBf4/8SWOf/AE74/wdU9P8eYef/IWHm/yBh5f8kY+P/LWff/y1n
3/8qZd//KWXf/yll3/8WXOr/BlX2/z5nuut5dXO5eXZzt3l1c7d5dXO3c29ssmtnZHZrZ2QWAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFFMSANGQT0EAAAAAWtnZH2FgX7/qKOi/6ml
o/+qpqX/q6al/6qlpP+ppaP/qaSi/6ijof+hoKP/mpuj/5qaoP9Rd8P/A1P2/12Dzf+epK7/oKWv/6Cl
sP+ipq3/pqeq/6Wnqf+kpqn/pKWo/6Gipf+LmK3/J2bj/wBP+NcIT+IggjQAAkdCPgRHQj4EU09LAwAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG5q
aJyXk5H/trKx/8jFw//Rz83/0s/O/9LPzv/Rz87/0c/O/9HOzf/Rzs3/y8jG/7Wwrv9JddP/EFry/52n
vf/IxsP/0dDO/9LRz//S0M//0tDP/9LQz//R0M//0c/O/8zLyv+5uLX/VH7Q/wBQ+fAAUfgvAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAG9saZyem5n/ysfG/93b2v/e3Nv/3tzb/97c2//e3Nv/3tzb/97c2//e3Nv/3tzb/8/N
zP9Kedr/Elvy/7K6zP/e29n/3tzb/97c2//e3Nv/3tzb/97c2//e3Nv/3tzb/97c2//W09H/YYjW/wBQ
+PEAUfgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAHBsaZyjoJ7/0tDP/93b2v/d29r/3dva/93b2v/d29r/3dva/93b
2v/d29r/3tza/9fV1P9PfuD/E1zz/7vD1f/f3Nr/3dva/93b2v/d29r/3dva/93b2v/d29r/3dva/93b
2v/c2db/aI7d/wBQ+PEAUfgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHBsaZyppqT/1dLR/9rY1//T0M//p6Si/7+8
u//Avbv/pqOh/9PQz//a2Nf/2tjW/9bU0/9SgeL/FF30/73F2P/V0tD/qaak/56bmP+in53/zMrI/9vY
1//a19b/2tfW/9rX1v/a19T/apHg/wBQ+PEAUfgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHBsaZyuq6r/1dPS/9DO
zf+7uLf/cm9s/5OQjv+XlJL/cW1q/7i1tP/Qzs3/z83M/9DOzf9UhOX/FV71/77G2P/Gw8H/f3x5/5aT
kP+opqT/xcPC/8/NzP/Pzcz/z83M/8/NzP/T0M3/bZTj/wBQ+PEAUfgwAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHFt
apy0sa//1tPS/8bDwv+in53/eXZz/4SAfv+Cf3z/eHRy/5+bmf/FwsH/xMHA/8rIx/9Xhuj/F2D2/77G
2P+9ubf/fnp3/4qHhP+dmpj/v7y7/8TBwP/EwcD/xMHA/8TBwP/Mycb/cJfl/wBQ+PEAUfgwAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAHFtapy6t7X/1tTS/7q3tf+MiIb/iIWC/4B8ev94dHH/i4eF/4iEgv+4tbP/ura0/8bD
wv9Zier/GGH3/7/G2P+0sK3/fHh2/42Jh/+empj/trOx/7q3tf+6t7X/ure1/7m2tP/Gwr//c5ro/wBQ
+PEAUfgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAHFtapzAvbv/19TT/6yop/9+enf/lJCO/4aCgP98eHX/mZST/315
dv+opKP/r6qp/8C9vP9ci+3/GWL5/7/G2P+rpqP/e3d1/4B8ev+Lh4X/qKSj/6+rqv+vq6r/r6uq/66q
qf+/urf/dp3r/wBQ+PEAUfgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHBsaZzDwb//2dfW/6Oenf+WkY//n5qY/5uW
lf+Yk5H/oJua/5aRkP+hnJv/o56c/8C8uv9jkfH/GWL6/8HJ3f+nop//lpGP/5KOjP+Uj47/oZya/6Sf
nv+kn53/pJ+d/6KdnP+8t7T/eKDw/wBQ+PAAUfgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGtnZIWurKr/8O/u/7y4
t/+ppaP/qaSi/6mko/+ppKP/qaSi/6mko/+opKL/sa2r/+Lf3P+Ape//B1b4/5e18v/Bvbz/qqWi/6qk
ov+qpKL/qaSh/6mkof+ppKH/qKOg/6+qp//GytX/SYP3/wBP+NwAUfggAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGll
YjR8eXbcwb++/9va2v/U09L/1NPS/9TT0v/U0tH/1NLR/9TS0f/U0dD/2dfW/9DOy/93g572CFLo7hlj
+v9Sh/T/UoPp/1CB6P9Qgej/UIHo/1CB6P9Qgej/UIHo/1SF7P89e/f/BlX4/ABQ+IkAUfgDAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAABqZmNCcW1qsX57eM+BfnzPgX58z4F+fM+BfnvPgX57z4F+e8+BfnvPgH16z3Vx
b8FsZ2NqDlTkSABP+LAATvjYAE752gBO+doATvnaAE752gBO+doATvnaAE752gBO+doATvjQAFD4ggBR
+BIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ2NgCF5aVw5cV1QOXFdUDlxXVA5cWFQOXFhUDlxY
VA5cWFUOXVlVD2VgXQtwamQBAAAAAABR+AkAUfgaAFH4HQBR+B0AUfgdAFH4HQBR+B0AUfgdAFH4HQBR
+B0AUfgTAFH4AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////wAA////////
AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAPgA
QAIAHwAA8AAAAAAPAADgAAAAAAcAAOAAAAAABwAA4AAAAAAHAADgAAAAAAcAAOAAAAAABwAA4AAAAAAH
AADgAAAAAAcAAOAAAAAABwAA4AAAAAAHAADgAAAAAAcAAOAAAAAABwAA4AAAAAAHAADgAAAAAAcAAPAA
AAAADwAA/AAAAAA/AAD/gAAAA/8AAP+AAAAD/wAA/4AAAAP/AAD/gAAAA/8AAP+AAAAD/wAA/4AAAAP/
AAD/gAAAA/8AAP+AAAAD/wAA/4AAAAP/AAD/gAAAA/8AAP+AAAAD/wAA/8AAAAf/AAD/4AEAD/8AAP//
/////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////
AAD///////8AACgAAAAgAAAAQAAAAAEAIAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABpZWIhbGhlR21p
ZkltaWZJbWlmSW1pZkltaWZJbGhkPlZifxIATvwyAE38VQBN/FcATfxWAE38VgBN/FcATfxWAE79Okpf
jxZsZ2M+bWlmSW1pZkltaWZJbWlmSW1pZkltaWZHamZjIQAAAAAAAAAAAAAAAAAAAAAAAAAAbGhlL3x4
ds6MiIb6jYmH+o2IhvqMiIX6jIeF+oyHhfqHgn/zPWOwxQ9Z8ectaOH9Lmjf/C5o3/wuZ978LWfe/Cxn
3v0SW+7tM2C+zYiEgvOOiYf6jYiG+oyIhfqMh4X6jIeF+oqFg/p7dnTObGhlLgAAAAAAAAAAAAAAAAAA
AABybmx7m5eV/7WxsP+7t7b/ura1/7m1tP+5tbT/t7Ox/6Wjp/8uZtv/Y4fP/7S1t/+3uLv/tre6/7W2
uf+0tbn/srK0/3CMw/8lZOP/oqWx/7u3tf+6t7b/ura0/7m1tP+4tLP/sKyr/5WRj/9ybmt7AAAAAAAA
AAAAAAAAAAAAAHZyb42uqqn/2NbV/93b2v/d29r/3dva/93b2v/d29n/w8TL/y5q5f+Opdb/3tvX/93b
2v/d29r/3dva/93b2v/e29j/na7Q/ydo6P+7wtH/3tvZ/93b2v/d29r/3dva/93b2v/X1NP/qaWj/3Vx
bo0AAAAAAAAAAAAAAAAAAAAAd3Nxjbi1s//c2tj/29nY/9za2f/b2Nf/3NrZ/93b2f/MztT/Mm7p/5at
3v/e29f/19XU/9vZ2P/c2tn/3NrZ/9/c2f+mt9n/K2vs/8PJ2f/b2Nb/2NXU/9za2f/c2tn/3NrZ/9za
2f+zsK//dnJvjQAAAAAAAAAAAAAAAAAAAAB5dnONvru6/8fFw/+loqD/tbKw/6mmpP/Qzsz/0c7N/8fJ
z/81cez/lq3f/7+7tv+ZlpP/q6im/9DOzP/Qzs3/09DM/6S12P8tbu//vMPS/6Shnf+Wk5H/qqim/87M
y//Qzs3/0tDO/7i2tP94dHGNAAAAAAAAAAAAAAAAAAAAAHt4dY3DwL7/wL28/4eDgf99eXf/nZqY/8G+
vf/Avbv/v8HH/zl07/+VrN3/uray/5GOi/+RjYv/v7y7/8C9vP/Dv7v/obLU/zBx8f+zusn/kY2J/6ek
ov+JhoP/sq+t/8G+vP/EwsD/vbu5/3p2dI0AAAAAAAAAAAAAAAAAAAAAfnp3jcjFw/+3tLL/kIyK/3p2
dP+koJ7/sK2r/7Crqf+4ub//PHjz/5Wr3P+emZT/f3t5/6Ccm/+wrKv/sKyq/7Ktqv+fr9D/M3T0/6ux
wP+JhIH/lJGO/4SAfv+moqH/sKyr/7azsf/DwL7/fHl2jQAAAAAAAAAAAAAAAAAAAAB8eXaEzszL/7i0
s/+cl5X/kIyK/6Oenf+loJ//pqGf/8DAxv9BfPf/jKjj/6ulnv+Ri4b/mpSQ/6ehnf+noZ3/raah/5qu
2P82d/j/tbrH/5eRjP+PiYX/mJSR/6Wgnv+kn57/t7Ox/8nGxf97d3SEAAAAAAAAAAAAAAAAAAAAAG1p
ZkSloqDpysjH/8G+vf/Bv77/wb69/7+8uv/Bvr3/xsPC/0xzwv8ucPT/YYvk/12F2v9fhtn/XYTZ/1yE
2f9gieD/NHT2/xhh+P9fj/H/VIDc/4Kf2P+9vsL/wL27/8C9vP/IxsT/op+d6W1pZkQAAAAAAAAAAAAA
AAAAAAAAYl5bA21pZkR/fHl9hYJ/gH57eMqUkI7/oZ2b/6Ccmv+cl5X/kJCW/2J+vf9Gcs7/PW3S/wtV
8P8pZ+T/R3bV/0d11P9OeM//UHnN/013zf9Idc//IGPp/0Frw8iGgn1/hYF/gH57eH1taWZDY15bAwAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBPTkEfHh1sKqmpf/Bvrz/xsPC/8bDwf/GwsH/x8K//8O+
uv+WnrP/IWLn/5Wkw//GxMH/x8XE/8fFw//HxcL/xsTB/8C9uf9kh8z/AFD5rgBM/gQAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADw4MwWDf3y2wL28/93b2v/f3dz/393c/9/d
3P/e3Nv/4N3a/6q20f8nZur/uMHU/+He3P/g3t3/393c/97c2//e3Nv/39zY/4Ke1/8CUva2AE37BQAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANTAsBYaDgLbIxcT/29nX/8G+
vf/HxcP/vLq4/9XT0f/d2tf/sLzX/ypq7f+9xdn/w8C9/7Kvrv/Jx8X/29nY/9rY1//e2tb/h6Pd/wJS
97YATPoFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtKCQFioeEtsvJ
x//Jx8b/iYaD/5GNi/9/e3n/t7Wz/9DNyv+suNP/LW3w/7jA1P+XlJD/lJGP/7u4t//Ny8r/zMrJ/9DN
yf+Ho93/A1P3tgBM+gUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUg
HAWPi4m2z8zL/7Kvrf+FgX//fnt4/4F9ev+cmZf/v7u4/6izzv8wcPT/s7vP/4+Lh/+Lh4X/r6yq/726
uP+8ubf/wb25/4ej3f8EVPi2AEv5BQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAHRgTBZOQjbbSz87/oJua/4+KiP+JhYP/kY2L/5GNi/+tqKX/pK/K/zNz9/+wt8r/j4qH/4eD
gP+fm5n/rKim/6ynpv+yrKj/iaTd/wVV+bYASvkFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAOCAMDiYaEqtfV1P+2s7H/qqWk/6qmpP+qpqT/qaWj/7Ktqv++xtj/MHH1/5yx
3P+opaX/oZ6f/6Ogov+koaP/pKGi/7GusP9ymur/AFL5pwBK+AMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxbWpOoZ+d4ry6ufu4trX6uLa1+ri2tPq4tbT6u7m3+qin
qOwpX83EImn58T127P06c+n8OnPp/Dpz6fw6c+n8O3Xv/RVf+OMAT/hMAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF5ZVgJlYV4tb2xpSXJua0lybmtJcm5rSXJu
a0lxbWpJamRfNi5YshIAS/k/AEv6VwBM+1YAS/tWAEv7VgBL+1cAS/pVAE34LwBU+AIAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAA////////////////////////////////4AAAB8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AA
AAPAAAADwAAAA8AAAAP4AAA/+AAAP/gAAD/4AAA/+AAAP/gAAD/4AAA//AAAf/wAAH//////////////
//////////////////8oAAAAGAAAADAAAAABACAAAAAAAGAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI13TAgtW
8AgNV/AIDVfwCAtW8QgaWt4CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH15
dwF5dHKbhoKA7oeDgO+GgoDvhoJ/74SAf+1UapuqEFnu3h5g6PMeYOfzHV/n8x1f5/MPWO7kTWmlsIWB
ge2Hg4DvhoKA74aCf++FgX7ueHRxm4B7eQEAAAAAAAAAAH15diOVkY/9vbm4/8G+vf/Bvbz/wLy7/7i0
s/9DctP/h5zF/8HAwP/BwMD/wL+//7++vv+Tobr/NW3e/7y5t//Cvr3/wb28/8C8u/+5tbT/kIyK/YB8
eSMAAAAAAAAAAIB8eSumoqD+3dva/9za2f7c2tn+3dva/9za2f5KeuD+rLrY/9za2f7d29r/3NrZ/tza
2f69xNP+OXPo/9za2f7c2tn+3dva/9za2f7c2tn+oZ6c/4SAfSsAAAAAAAAAAISAfiuvrKr+wsC+/8K/
vv6wrav+0tDP/9PRz/5OgOX+rLrZ/6ypp/6vrKr/0tDP/tLQz/69xNP+PHbr/8TBwP6fnJr+vLm3/9LQ
z/7S0M/+qqem/4mFgysAAAAAAAAAAIiEgiu4tbP/trOx/3p2dP+UkY//vbq4/7+8uv9ShOn/p7XT/6Kf
nf+QjIr/vbq4/726uP+1vMv/P3nu/6mmpP+loZ//iYaD/726uP+9urj/s7Cu/42JhysAAAAAAAAAAIeE
gSrBvr3+qKSj/4F9e/6cmJb+qKOi/6ynpv5XiO7+o7DP/4mEgv6UkI7/p6Oi/qejov6vtsT+Qnzx/56a
mP6FgX/+jYiG/6ejov6opKP+vLm3/42KhyoAAAAAAAAAAJGNiw2enJrnzcvK/8PAv//DwL//vLm3/8fF
w/9jhcr/UYbw/3KOy/9wjMr/cIzK/3GNyv9aiuv/M3P2/3KT2P+GnMr/w8C//8PAvv/Lycj/nJmX55aS
kAwAAAAAAAAAAAAAAACVkpAfjYqHXoSBfoKIhIL+n5uZ/5+amf6emZj+cIe5/1x9wv4ZXOX/SXjV/mCD
yv5lhcb+ZoXE/2WEwv4yatz+QGm+qHyFnF+QjYtelZKQHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIaD
gE+uqqn+1dPS/9jW1f7Y1dT+19XU/8vIx/4jY+f/xsXG/tjW1f7Y1tX+2NbV/9bU1P6Qo8v+I2PojwAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI2Jh0++u7n+2tjX/8fFw/7GxML+29nY/9nX
1v4mZ+z/1tTT/r+8u/7Jx8b+29nY/9vZ2P6hs9n+ImXvjwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAJOPjU/FwsH/vbu5/397eP9/e3n/u7m3/8vJyP8pau//zcvK/4aCgP+xr63/ycbF/8nG
xf+esNb/JWfwjwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJaTkE/Lycf+mpeV/4iE
gv6GgoD+l5OR/7u3tv4sbfL/xcLB/n97eP6hnZv+tLCv/7Swr/6arNL+JGfxjwAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAJGOjErRz87+o56c/56ZmP6emZj+nZmX/7m2tP45dvT/ur7K/puW
lP6emZf+oZyb/6KenP6Sqtv+HGLzhwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJqX
lAqQjou3sq+u77Gvre+xrqzvsa6s76upqetMb7ekGmL36Cts9PMrbPTzK2z08ytt9PMSXfbZK2vwJAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAALGfgAxth8QceYu8HHmLvBxth8QcbYfEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAA////AP///wD///8A////AP+B/wCAAAEAgAABAIAAAQCAAAEAgAABAIAA
AQCAAAEAwAADAPAAHwDwAB8A8AAfAPAAHwDwAB8A8AAfAP/wPwD///8A////AP///wD///8AKAAAABAA
AAAgAAAAAQAgAAAAAABABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAA/wEAAP8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+endLioaDm4uH
hJyLhoKcYnObhCZk5JMza9+jM2veoyZk4pZec6KHjYeDnIuGhJyIhIGbfHh1SwAAAAA6NjIHmJWTtMPA
v//IxcT/yMPA/3aQyv+NpNP/v8PO/77Czf+Rpc//cpHP/8nFw//IxcP/wL28/5WRj7Q9OTUHOjUxCamm
pLrIxcT/xMHA/9fU0f+Ho97/pbPT/8TAvP/Y1ND/sb3Y/3+e3f/Avbr/y8jH/9XS0f+mo6G6OzYyCTw3
MwmwrKu6paKg/5GOjP+6tbL/g5/a/5Ogv/+Zk4z/ubSu/6Ktxv95l9T/mJON/56amP+8ubj/q6imuj04
NQkAAAAEqqelnbKvrfynpKL9s66r/4Sby/9pitD/doi0/32Qu/9rjdP/WYbj/32Os/+ko6j7tbGw/Kek
op0AAAAEAAAAAIJ+fBuRjoxRnJiW17i0sv+vrrT/jZ7F/0t52P9ukNb/iqHQ/4ugzf9ni9T+T3jLi56X
jESBfXsbAAAAAAAAAAAAAAAAW1dUEK6rqc3Rz83/zMnH/9nV0f97m93/s7vP/9HNyP/f29X/prbZ/xle
8WMAAAAAAAAAAAAAAAAAAAAAAAAAAGJeWxC1srHNp6Si/4mFg/+1srD/fJzg/5aesv+koJz/x8O//56u
0f8dY/RjAAAAAAAAAAAAAAAAAAAAAAAAAABgXFgOtLKwyKqmpP+cmJb/rKel/3qa3P+ImLz/k5Se/6Gi
rP+Em83+GmP4XQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZqYllmqqKacqaaknKuno5tuh72CMW7tlzpx
5KM6cOOjLm3ujgZW+h4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
/wEAAP8BAAD/AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAA//8AAP5/AACAAQAAAAAAAAAA
AAAAAAAAAAAAAIABAADABwAAwAcAAMAHAADABwAA/x8AAP//AAD//wAA
</value>
</data>
</root>