diff --git a/CefSharp.MinimalExample.WinForms/BrowserForm.Designer.cs b/CefSharp.MinimalExample.WinForms/BrowserForm.Designer.cs new file mode 100644 index 0000000..041130a --- /dev/null +++ b/CefSharp.MinimalExample.WinForms/BrowserForm.Designer.cs @@ -0,0 +1,208 @@ +namespace CefSharp.MinimalExample.WinForms +{ + partial class BrowserForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(BrowserForm)); + this.toolStripContainer = new System.Windows.Forms.ToolStripContainer(); + this.statusLabel = new System.Windows.Forms.Label(); + this.outputLabel = new System.Windows.Forms.Label(); + this.toolStrip1 = new System.Windows.Forms.ToolStrip(); + this.backButton = new System.Windows.Forms.ToolStripButton(); + this.forwardButton = new System.Windows.Forms.ToolStripButton(); + this.urlTextBox = new System.Windows.Forms.ToolStripTextBox(); + this.goButton = new System.Windows.Forms.ToolStripButton(); + this.menuStrip1 = new System.Windows.Forms.MenuStrip(); + this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripContainer.ContentPanel.SuspendLayout(); + this.toolStripContainer.TopToolStripPanel.SuspendLayout(); + this.toolStripContainer.SuspendLayout(); + this.toolStrip1.SuspendLayout(); + this.menuStrip1.SuspendLayout(); + this.SuspendLayout(); + // + // toolStripContainer + // + // + // toolStripContainer.ContentPanel + // + this.toolStripContainer.ContentPanel.Controls.Add(this.statusLabel); + this.toolStripContainer.ContentPanel.Controls.Add(this.outputLabel); + this.toolStripContainer.ContentPanel.Size = new System.Drawing.Size(730, 441); + this.toolStripContainer.Dock = System.Windows.Forms.DockStyle.Fill; + this.toolStripContainer.LeftToolStripPanelVisible = false; + this.toolStripContainer.Location = new System.Drawing.Point(0, 24); + this.toolStripContainer.Name = "toolStripContainer"; + this.toolStripContainer.RightToolStripPanelVisible = false; + this.toolStripContainer.Size = new System.Drawing.Size(730, 466); + this.toolStripContainer.TabIndex = 0; + this.toolStripContainer.Text = "toolStripContainer1"; + // + // toolStripContainer.TopToolStripPanel + // + this.toolStripContainer.TopToolStripPanel.Controls.Add(this.toolStrip1); + // + // statusLabel + // + this.statusLabel.AutoSize = true; + this.statusLabel.Dock = System.Windows.Forms.DockStyle.Bottom; + this.statusLabel.Location = new System.Drawing.Point(0, 415); + this.statusLabel.Name = "statusLabel"; + this.statusLabel.Size = new System.Drawing.Size(0, 13); + this.statusLabel.TabIndex = 1; + // + // outputLabel + // + this.outputLabel.AutoSize = true; + this.outputLabel.Dock = System.Windows.Forms.DockStyle.Bottom; + this.outputLabel.Location = new System.Drawing.Point(0, 428); + this.outputLabel.Name = "outputLabel"; + this.outputLabel.Size = new System.Drawing.Size(0, 13); + this.outputLabel.TabIndex = 0; + // + // toolStrip1 + // + this.toolStrip1.Dock = System.Windows.Forms.DockStyle.None; + this.toolStrip1.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden; + this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.backButton, + this.forwardButton, + this.urlTextBox, + this.goButton}); + this.toolStrip1.Location = new System.Drawing.Point(0, 0); + this.toolStrip1.Name = "toolStrip1"; + this.toolStrip1.Padding = new System.Windows.Forms.Padding(0); + this.toolStrip1.Size = new System.Drawing.Size(730, 25); + this.toolStrip1.Stretch = true; + this.toolStrip1.TabIndex = 0; + this.toolStrip1.Layout += new System.Windows.Forms.LayoutEventHandler(this.HandleToolStripLayout); + // + // backButton + // + this.backButton.Enabled = false; + this.backButton.Image = global::CefSharp.MinimalExample.WinForms.Properties.Resources.nav_left_green; + this.backButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.backButton.Name = "backButton"; + this.backButton.Size = new System.Drawing.Size(52, 22); + this.backButton.Text = "Back"; + this.backButton.Click += new System.EventHandler(this.BackButtonClick); + // + // forwardButton + // + this.forwardButton.Enabled = false; + this.forwardButton.Image = global::CefSharp.MinimalExample.WinForms.Properties.Resources.nav_right_green; + this.forwardButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.forwardButton.Name = "forwardButton"; + this.forwardButton.Size = new System.Drawing.Size(70, 22); + this.forwardButton.Text = "Forward"; + this.forwardButton.Click += new System.EventHandler(this.ForwardButtonClick); + // + // urlTextBox + // + this.urlTextBox.AutoSize = false; + this.urlTextBox.Name = "urlTextBox"; + this.urlTextBox.Size = new System.Drawing.Size(500, 25); + this.urlTextBox.KeyUp += new System.Windows.Forms.KeyEventHandler(this.UrlTextBoxKeyUp); + // + // goButton + // + this.goButton.Image = global::CefSharp.MinimalExample.WinForms.Properties.Resources.nav_plain_green; + this.goButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.goButton.Name = "goButton"; + this.goButton.Size = new System.Drawing.Size(42, 22); + this.goButton.Text = "Go"; + this.goButton.Click += new System.EventHandler(this.GoButtonClick); + // + // menuStrip1 + // + this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.fileToolStripMenuItem}); + this.menuStrip1.Location = new System.Drawing.Point(0, 0); + this.menuStrip1.Name = "menuStrip1"; + this.menuStrip1.Size = new System.Drawing.Size(730, 24); + this.menuStrip1.TabIndex = 1; + this.menuStrip1.Text = "menuStrip1"; + // + // fileToolStripMenuItem + // + this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.exitToolStripMenuItem}); + this.fileToolStripMenuItem.Name = "fileToolStripMenuItem"; + this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20); + this.fileToolStripMenuItem.Text = "File"; + // + // exitToolStripMenuItem + // + this.exitToolStripMenuItem.Name = "exitToolStripMenuItem"; + this.exitToolStripMenuItem.Size = new System.Drawing.Size(152, 22); + this.exitToolStripMenuItem.Text = "Exit"; + this.exitToolStripMenuItem.Click += new System.EventHandler(this.ExitMenuItemClick); + // + // BrowserForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(730, 490); + this.Controls.Add(this.toolStripContainer); + this.Controls.Add(this.menuStrip1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MainMenuStrip = this.menuStrip1; + this.Name = "BrowserForm"; + this.Text = "BrowserForm"; + this.toolStripContainer.ContentPanel.ResumeLayout(false); + this.toolStripContainer.ContentPanel.PerformLayout(); + this.toolStripContainer.TopToolStripPanel.ResumeLayout(false); + this.toolStripContainer.TopToolStripPanel.PerformLayout(); + this.toolStripContainer.ResumeLayout(false); + this.toolStripContainer.PerformLayout(); + this.toolStrip1.ResumeLayout(false); + this.toolStrip1.PerformLayout(); + this.menuStrip1.ResumeLayout(false); + this.menuStrip1.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.ToolStripContainer toolStripContainer; + private System.Windows.Forms.ToolStrip toolStrip1; + private System.Windows.Forms.ToolStripButton backButton; + private System.Windows.Forms.ToolStripButton forwardButton; + private System.Windows.Forms.ToolStripTextBox urlTextBox; + private System.Windows.Forms.ToolStripButton goButton; + private System.Windows.Forms.MenuStrip menuStrip1; + private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem; + private System.Windows.Forms.Label outputLabel; + private System.Windows.Forms.Label statusLabel; + + } +} \ No newline at end of file diff --git a/CefSharp.MinimalExample.WinForms/BrowserForm.cs b/CefSharp.MinimalExample.WinForms/BrowserForm.cs new file mode 100644 index 0000000..141ea95 --- /dev/null +++ b/CefSharp.MinimalExample.WinForms/BrowserForm.cs @@ -0,0 +1,153 @@ +// Copyright © 2010-2014 The CefSharp Authors. All rights reserved. +// +// Use of this source code is governed by a BSD-style license that can be found in the LICENSE file. + +using System; +using System.Windows.Forms; +using CefSharp.MinimalExample.WinForms.Controls; +using CefSharp.WinForms; + +namespace CefSharp.MinimalExample.WinForms +{ + public partial class BrowserForm : Form + { + private readonly ChromiumWebBrowser browser; + + public BrowserForm() + { + InitializeComponent(); + + Text = "CefSharp"; + WindowState = FormWindowState.Maximized; + + browser = new ChromiumWebBrowser("www.google.com") + { + Dock = DockStyle.Fill, + }; + toolStripContainer.ContentPanel.Controls.Add(browser); + + browser.NavStateChanged += OnBrowserNavStateChanged; + browser.ConsoleMessage += OnBrowserConsoleMessage; + browser.StatusMessage += OnBrowserStatusMessage; + browser.TitleChanged += OnBrowserTitleChanged; + browser.AddressChanged += OnBrowserAddressChanged; + + var bitness = Environment.Is64BitProcess ? "x64" : "x86"; + var version = String.Format("Chromium: {0}, CEF: {1}, CefSharp: {2}, Environment: {3}", Cef.ChromiumVersion, Cef.CefVersion, Cef.CefSharpVersion, bitness); + DisplayOutput(version); + } + + private void OnBrowserConsoleMessage(object sender, ConsoleMessageEventArgs args) + { + DisplayOutput(string.Format("Line: {0}, Source: {1}, Message: {2}", args.Line, args.Source, args.Message)); + } + + private void OnBrowserStatusMessage(object sender, StatusMessageEventArgs args) + { + this.InvokeOnUiThreadIfRequired(() => statusLabel.Text = args.Value); + } + + private void OnBrowserNavStateChanged(object sender, NavStateChangedEventArgs args) + { + SetCanGoBack(args.CanGoBack); + SetCanGoForward(args.CanGoForward); + + this.InvokeOnUiThreadIfRequired(() => SetIsLoading(!args.CanReload)); + } + + private void OnBrowserTitleChanged(object sender, TitleChangedEventArgs args) + { + this.InvokeOnUiThreadIfRequired(() => Text = args.Title); + } + + private void OnBrowserAddressChanged(object sender, AddressChangedEventArgs args) + { + this.InvokeOnUiThreadIfRequired(() => urlTextBox.Text = args.Address); + } + + private void SetCanGoBack(bool canGoBack) + { + this.InvokeOnUiThreadIfRequired(() => backButton.Enabled = canGoBack); + } + + private void SetCanGoForward(bool canGoForward) + { + this.InvokeOnUiThreadIfRequired(() => forwardButton.Enabled = canGoForward); + } + + private void SetIsLoading(bool isLoading) + { + goButton.Text = isLoading ? + "Stop" : + "Go"; + goButton.Image = isLoading ? + Properties.Resources.nav_plain_red : + Properties.Resources.nav_plain_green; + + HandleToolStripLayout(); + } + + public void DisplayOutput(string output) + { + this.InvokeOnUiThreadIfRequired(() => outputLabel.Text = output); + } + + private void HandleToolStripLayout(object sender, LayoutEventArgs e) + { + HandleToolStripLayout(); + } + + private void HandleToolStripLayout() + { + var width = toolStrip1.Width; + foreach (ToolStripItem item in toolStrip1.Items) + { + if (item != urlTextBox) + { + width -= item.Width - item.Margin.Horizontal; + } + } + urlTextBox.Width = Math.Max(0, width - urlTextBox.Margin.Horizontal - 18); + } + + private void ExitMenuItemClick(object sender, EventArgs e) + { + browser.Dispose(); + Cef.Shutdown(); + Close(); + } + + private void GoButtonClick(object sender, EventArgs e) + { + LoadUrl(urlTextBox.Text); + } + + private void BackButtonClick(object sender, EventArgs e) + { + browser.Back(); + } + + private void ForwardButtonClick(object sender, EventArgs e) + { + browser.Forward(); + } + + private void UrlTextBoxKeyUp(object sender, KeyEventArgs e) + { + if (e.KeyCode != Keys.Enter) + { + return; + } + + LoadUrl(urlTextBox.Text); + } + + private void LoadUrl(string url) + { + if (Uri.IsWellFormedUriString(url, UriKind.RelativeOrAbsolute)) + { + browser.Load(url); + } + } + } +} diff --git a/CefSharp.MinimalExample.WinForms/BrowserForm.resx b/CefSharp.MinimalExample.WinForms/BrowserForm.resx new file mode 100644 index 0000000..e5907e8 --- /dev/null +++ b/CefSharp.MinimalExample.WinForms/BrowserForm.resx @@ -0,0 +1,547 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 122, 17 + + + + + AAABAAcAMDAAAAEACACoDgAAdgAAACAgAAABAAgAqAgAAB4PAAAQEAAAAQAIAGgFAADGFwAAMDAAAAEA + IACoJQAALh0AACAgAAABACAAqBAAANZCAAAYGAAAAQAgAIgJAAB+UwAAEBAAAAEAIABoBAAABl0AACgA + AAAwAAAAYAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AAAAAADqlE0Ad3Z+ADg3 + OwA2NTkAPj1BAF5dYQC6ub0ANDM2AFdWWQChn6MAa2psAJwc/wCdI/kAnSLxAKQ07ACpTeYAqWrQALaH + 0QDBndQAmivPAK2QuwBlY2YApDzQALti4wCyWNAAwW3PAKRLsQC2rLcAlzmbAEtJSwBzcXMAnUaZALtx + tgCkV5oAynq9AJQ8fACLUHMAzIyyAKhnjADVucEAOjY3AJGNjgDRlaIAqqOkAM6hpACaWVkAxcLCAOip + oQCEf34AUUZDANGqngC2s7IAWzIfAFY5LABCOzgAZDYeAGQ8KACndFoAqnpjALWajABhVU8AxL67ANbU + 0wCLTSoAj1AsAI1OKwCVVC8AkFMxAJJXNgCVWjgAlVs6AJdePgCeaUsAoG1QAKJvUwCVZk0Ai2JLAK6A + ZgDLtKcA0LuwAIxOKgCcWzMAnGVCAH5bRQCyiXAAwJZ8AJ6AbgC+nosAxaaUANjGuwDOycYAWUg9AKOJ + dwCNeGoA0busANXDtwDX0c0AbU43ALOIZwCZd14Ah2lTAE1ANgDHrpwAv7GnANDIwgDp4t0Avbm2AO7q + 5wDplE0A6JNNAOKPSwDqlE4A55NNAOaTTgDkkk4A65dRAOGRTgDekE8A2o5PAOydWgDVjVEAuH5QANWU + XgDtpWkAsXxPAKl2TADenGUA5KJrAO2sdgDvsX4A26Z6AOuzhADhrYIA7L2VAM+nhQD0yqcArJB5APTQ + sgD10rUA38GpAPLWvwDdx7UA89vIAO3WwwDl2c8A2s/GANnOxQDYzcQA18zDAMzDvADKwboAyL+4ANbN + xgCxq6YAycO+AMfBvAC9t7IA1M7JANLMxwDLxcAA493YAO3n4gDAu7cA6JRGAOmWSgDpl0wA6phPAM+H + SADrmlQA4phVAOyiYQDOjVUA7atuAMqWaQDwuYYAyp95APHAlABwWUUA0q6OANSylAB+cGMA48y4AN/U + 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 + AAAAB9z9wAAAAAAH3P3AAAAAAAfc/YAAAAAAA9z9gAAAAAAD3P2AAAAAAAPc/YAAAAAAA9z9gAAAAAAD + 3P2AAAAAAAHc/YAAAAAAAdz9gAAAAAAD3P2AAAAAAAPc/YAAAAAAA9z9gAAAAAAD3P2AAAAAAAPc/cAA + AAAAA9z9wAAAAAAH3P3AAAAAAAfc/eAAAAAAD9z94AAAAAAP3P3wAAAAAB/c/fAAAAAAH9z9+AAAAAA/ + 3P38AAAAAH/c/f4AAAAA/9z9/wAAAAH/3P3/gAAAA//c/f/wAAAH/9z9//AAAB//3P3//AAAf//c/f// + gAP//9z9////////3P3////////c/f///////9z9KAAAACAAAABAAAAAAQAIAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8AAAAAAOqUTQB3dn4AODc7ADY1OQA+PUEAXl1hALq5vQA0MzYAV1ZZAKGf + owBramwAnBz/AJ0j+QCdIvEApDTsAKlN5gCpatAAtofRAMGd1ACaK88ArZC7AGVjZgCkPNAAu2LjALJY + 0ADBbc8ApEuxALastwCXOZsAS0lLAHNxcwCdRpkAu3G2AKRXmgDKer0AlDx8AItQcwDMjLIAqGeMANW5 + wQA6NjcAkY2OANGVogCqo6QAzqGkAJpZWQDFwsIA6KmhAIR/fgBRRkMA0aqeALazsgBbMh8AVjksAEI7 + OABkNh4AZDwoAKd0WgCqemMAtZqMAGFVTwDEvrsA1tTTAItNKgCPUCwAjU4rAJVULwCQUzEAklc2AJVa + OACVWzoAl14+AJ5pSwCgbVAAom9TAJVmTQCLYksAroBmAMu0pwDQu7AAjE4qAJxbMwCcZUIAfltFALKJ + cADAlnwAnoBuAL6eiwDFppQA2Ma7AM7JxgBZSD0Ao4l3AI14agDRu6wA1cO3ANfRzQBtTjcAs4hnAJl3 + XgCHaVMATUA2AMeunAC/sacA0MjCAOni3QC9ubYA7urnAOmUTQDok00A4o9LAOqUTgDnk00A5pNOAOSS + TgDrl1EA4ZFOAN6QTwDajk8A7J1aANWNUQC4flAA1ZReAO2laQCxfE8AqXZMAN6cZQDkomsA7ax2AO+x + fgDbpnoA67OEAOGtggDsvZUAz6eFAPTKpwCskHkA9NCyAPXStQDfwakA8ta/AN3HtQDz28gA7dbDAOXZ + zwDaz8YA2c7FANjNxADXzMMAzMO8AMrBugDIv7gA1s3GALGrpgDJw74Ax8G8AL23sgDUzskA0szHAMvF + wADj3dgA7efiAMC7twDolEYA6ZZKAOmXTADqmE8Az4dIAOuaVADimFUA7KJhAM6NVQDtq24AypZpAPC5 + hgDKn3kA8cCUAHBZRQDSro4A1LKUAH5wYwDjzLgA39TKAN7TyQDd0sgA3NHHANvQxgDaz8UA4tfNANPJ + wADSyL8AzcS8AMzDuwDJwLgA5dzUANrRyQDFvbYAwrqzAN7WzwDc1M0A18/IANHKxADllEEA66hkAMyU + XwDTnGgA4dbLANXLwQDPxr0A3dTLAOng1wDKxL4AubWxALWxrQDz7ukA7enlAM/MyQD29PIA4pA3AN+e + WADvtnsAjnJUAPLHmAB5aVcAqnQxAHtaMQC4lWwA3I0oANqeTQCbaSAAuoIxAMWLNQC4ikoAl3ZIAFpI + LQDQhRIAsnYVAMGIKgDVljIAhV8lANebPwDhrFYAiWo6AKiDSgCKbD0A47NpAPLTowB9fYYAUVFVAM7O + 1ABFRUcA29vgAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtbVm + ZmzJocxdAAAAAAAAAAAAAAAAAAAAAAAAAAAAtomJ4MRsysrLoWuinQAAAAAAAAAAAAAAAAAAAAAAibKJ + ZTbFvL2VlqLLa2vbnTEeAAAAAAAAAAAAAAAAALWwsGVexbu8vL2UlphdotaiMaUAAAAAAAAAAAAAAACw + z66JLGy/0bm5u7y9lJfS05nInqXXAAAAAAAAAAAAss+ue+QM1b+/0dG6u7y9lZfBwp/XQG0AAAAAAAAA + ALDQe3l3qgQN2pOTk7/Ruru8vZfSwsTY19fYAAAAAAAA0NB5eHV1tyE22ZOTv7+5ury8lZfBw8jYbdcA + AAAAAK6BeXd1c3BvcfoIo2yTk9HRuru9vtLBmcfY2B4AAACF0Hl4dXNwbwMDfDMLXaSkbMW5ury9l9LD + mjbY2AAAAH2Gd3VzbwMDA2+Kj5z6Mwzbbm6ku7yUlsHCyNec2AAAgYd1dHBvAwNvg4+4tBgHB/0I2m7F + u72VwNPHn5zYAACIrHNwAwMDco2PXgY5aGhoOQoG+9qkvL2XwJnH2C4AAIh1cG8DA3Krj1sraOTy6Ojo + 7QoFQNq8vJbSw8fXLgAAhnNvAwMDerOLOVby7u7m5u7u9e39nMW8vpfTmW3YAACGc28DA3KtjFYG9+/u + 5qam3ebP9wUzbLyUlsHD2NgAAIRwAwNyeq+RXgrp5s1639/Oq+7QaBjau72VwJshMwAAsW8DA6t6g5E0 + CurmqX6z4d+t5uftGNq6vbxALP0sAACDfgMDen6Ejz8L8PR2zuH5387m+LcsNvoI+zReCx4AAISEAwOt + r7GMBATv+KatsbGveufzCwggNDg4VmY+AAAAAIMDdn6DhllAT+Lk+M6rq3Pm8ew+UUxVQkJCQgAAAAAA + sQN6sYQ+DFJiNOLr596s6PLiN2FbQkJCQkJCAAAAAAAAhIONjAwxQktcX2ggCAhoN1JhS0JCQkJCUz4A + AAAAAACxsYyO/GpCQlphPmc3N1lpUVpCQkJCU0RMAAAAAAAAAAAAsSwsaUREU1NHTVdXTUdTU0RERENF + RAAAAAAAAAAAAACKXzNbR0RERERERERERERERERDVEMAAAAAAAAAAAAAAAAAAE1bW0ZDQ0NDQ0NDQ0ZH + VVUwAAAAAAAAAAAAAAAAAAAATD1XSkpJSUhISElKVU2AAAAAAAAAAAAAAAAAAAAAAAAAAAA9PVdXV1dX + UD0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA///////gD///gAP//gAAf/wAAH/4AAAf8AAAH+AAAAfgAAAHwAAAA4AA + AAOAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAADwAAAB8AAAAfgAAAH4AAAD/gA + AB/4AAA//wAAf/8AAf//4A////////////8oAAAAEAAAACAAAAABAAgAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP///wAAAAAA6pRNAHd2fgA4NzsANjU5AD49QQBeXWEAurm9ADQzNgBXVlkAoZ+jAGtq + bACcHP8AnSP5AJ0i8QCkNOwAqU3mAKlq0AC2h9EAwZ3UAJorzwCtkLsAZWNmAKQ80AC7YuMAsljQAMFt + zwCkS7EAtqy3AJc5mwBLSUsAc3FzAJ1GmQC7cbYApFeaAMp6vQCUPHwAi1BzAMyMsgCoZ4wA1bnBADo2 + NwCRjY4A0ZWiAKqjpADOoaQAmllZAMXCwgDoqaEAhH9+AFFGQwDRqp4AtrOyAFsyHwBWOSwAQjs4AGQ2 + HgBkPCgAp3RaAKp6YwC1mowAYVVPAMS+uwDW1NMAi00qAI9QLACNTisAlVQvAJBTMQCSVzYAlVo4AJVb + OgCXXj4AnmlLAKBtUACib1MAlWZNAItiSwCugGYAy7SnANC7sACMTioAnFszAJxlQgB+W0UAsolwAMCW + fACegG4Avp6LAMWmlADYxrsAzsnGAFlIPQCjiXcAjXhqANG7rADVw7cA19HNAG1ONwCziGcAmXdeAIdp + UwBNQDYAx66cAL+xpwDQyMIA6eLdAL25tgDu6ucA6ZRNAOiTTQDij0sA6pROAOeTTQDmk04A5JJOAOuX + UQDhkU4A3pBPANqOTwDsnVoA1Y1RALh+UADVlF4A7aVpALF8TwCpdkwA3pxlAOSiawDtrHYA77F+ANum + egDrs4QA4a2CAOy9lQDPp4UA9MqnAKyQeQD00LIA9dK1AN/BqQDy1r8A3ce1APPbyADt1sMA5dnPANrP + xgDZzsUA2M3EANfMwwDMw7wAysG6AMi/uADWzcYAsaumAMnDvgDHwbwAvbeyANTOyQDSzMcAy8XAAOPd + 2ADt5+IAwLu3AOiURgDplkoA6ZdMAOqYTwDPh0gA65pUAOKYVQDsomEAzo1VAO2rbgDKlmkA8LmGAMqf + eQDxwJQAcFlFANKujgDUspQAfnBjAOPMuADf1MoA3tPJAN3SyADc0ccA29DGANrPxQDi180A08nAANLI + vwDNxLwAzMO7AMnAuADl3NQA2tHJAMW9tgDCurMA3tbPANzUzQDXz8gA0crEAOWUQQDrqGQAzJRfANOc + aADh1ssA1cvBAM/GvQDd1MsA6eDXAMrEvgC5tbEAtbGtAPPu6QDt6eUAz8zJAPb08gDikDcA355YAO+2 + ewCOclQA8seYAHlpVwCqdDEAe1oxALiVbADcjSgA2p5NAJtpIAC6gjEAxYs1ALiKSgCXdkgAWkgtANCF + EgCydhUAwYgqANWWMgCFXyUA15s/AOGsVgCJajoAqINKAIpsPQDjs2kA8tOjAH19hgBRUVUAzs7UAEVF + RwDb2+AA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAtonEystrnQAAAAAAAAAAsGXFvL2WXdYxAAAAAAAA + z3sMv9G6vJXBn0AAAAAA0Hl1tzaTv7m8lcHIbQAAhXl1cAN8C6RsubyXwzbYAIF1cANvj7QH/drFvcDH + nACIcANyjyvk6OgKQLyWw9cAhm8DrVb37qbdzwVslMHYALEDq4M06qmz3+bt2r1A/QCEA62xBO+msa/n + CyA4Vj4AAAOxPlI0697o4mFCQkIAAACxjPxCWj43WVFCQlNMAAAAAIozR0RERERERENDAAAAAAAAAD1K + SUhISk0AAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAA8B8AAOAPAADABwAAgAMAAAABAAAAAQAAAAEAAAAB + AAAAAQAAAAEAAIADAACAAwAAwAcAAPAfAAD//wAAKAAAADAAAABgAAAAAQAgAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAHAAAADQAAABIAAAAUAAAAEgAAAAwAAAAFAAAABAAA + AAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAANAAAAGgAAACoAAAA8CwoJTx0ZFWElHxpmEw4KYAAA + AEwAAAA0AAAAMgAAADQAAAArAAAAIAAAABQAAAAKAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAFQAAACwKCQlPOzQtfXRjVKujinPQupp/6aqF + ZveOaEf6hmZL+IlzYeaBeXLBh4N/wYeDf8VwbGmwSEdFjiAfHmkAAABFAAAAKQAAABUAAAAFAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAABUAAAAzJyMeanppWrC8n4Xn3LWT/9yy + jf+thWL/bkst/29UPf+pmo3/1c3F/+Lc1v/j3NX/4dnT/97X0f/b1dD/19LN/8fBvPqhnJjcZGFfqCAf + H2kAAAA2AAAAGAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAKCYiHmiQe2rA07GU+tuy + jv/VqIH/vJBr/3dZQf9dUEj/o5qT/+DY0f/n4Nn/39bP/9zUzP/a0sv/2dHK/9XOyP/Tzsn/0szG/9DK + xf/SzMf/087J/8C8ufqDgH3FKikodAAAADIAAAARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMHBgZFcWFTqNGw + k/jasY7/y512/8+edP+uglz/WUMz/2hnaf/LxsP/593U/93SyP/az8b/2c7F/9jNxP/WzMP/1MrC/87H + wf/Uy8T/08rE/9HKxP/QycP/zcfD/8rFwf/OyMT/wb26/nl3db0UFBNaAAAAHQAAAAQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAGSUg + G2SrkXnZ3raT/8ygev/HlGn/0pxt/6t+V/9PPTH/eHl9/97Vzv/j18z/29DG/9zRx//b0Mb/2tDG/9nP + xf/YzsT/1cvC/83Gv//Oxr//zcW+/83Fvf/NxL3/zMfB/8zGwf/Jw77/xcC8/87Kx/+rqKXuPj08hwAA + ACkAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAEAAAAbPjQsfMinifLWq4b/ypZr/8iNW//SlF7/rHxS/049Mf99f4P/5t3V/+LWy//d0sj/3dLI/9zR + x//c0cf/3NHH/9vQxv/az8b/2c/F/9fNw//UysH/0Me+/8zEvf/Jwrz/x8C5/8e/uP/Jwbv/yMS//8bC + v//Ev7v/wLy5/2BfXasAAAAzAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAABhHPDGF0KuJ+8+heP/JkF//zIlR/9SRWP+6h1z/VkI0/3J0ef/o4Nj/5NjN/+DV + y//g1Mr/39TJ/97Tyf/d0sj/3NHH/9zRx//c0cf/29DG/9rPxf/YzsT/18zD/9TKwP/Qxr7/zcS8/8nA + uP/BurP/w765/8fAu//Ev7v/wLu4/8TAvf9ycG+9AwMDNQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAED4zKnvOp4P8zJtw/8yPXf/Oi1L/0otP/8yPW/9rUT3/RUZM/8/J + xf/q3tL/4tfN/+LXzP/h1sz/4dXL/+DUyv/f1Mn/3tPJ/93SyP/c0cf/3NHH/9vQxv/az8b/2M7E/9bM + w//UysH/0ce//87EvP/Hv7j/wLq1/763sP/Cu7b/w766/766tv/EwL3/cG9tuwAAACoAAAACAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGJR4YXsSbePXMmGr/zZJg/9COV//Si1D/3ZFS/59n + OP9IQT7/V1li/9nU0v/y59z/49fM/+TYzv/j2M3/4tfN/+HWzP/g1cv/39TK/97Tyf/d0sj/3NHH/9zR + x//b0Mf/2s/G/9nOxf/WzMP/1MrB/9HHv//OxLz/yMC4/8C6tP+7ta//vrex/8G8uP+9ubX/wb27/1ta + WaUAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJBwY0poJj38+XaP/PlWT/0pJb/9KL + T//YjU//4ZJR/7t4P/9cTUP/bnF9/4iHjv/a1tL/9evh/+XZzv/k2c7/5NjO/+PYzf/i18z/4dbL/+DV + y//f1Mr/3tPJ/93SyP/c0cf/3NHH/9rQxv/ZzsX/18zD/9TKwf/Rx77/zcS8/8nAuP/BurT/urSv/7q0 + rv+/urb/vLm2/7q2tP81NTR3AAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9tVUCp0plo/86V + ZP/VmGT/1IxP/9mOT//dj0//4JFO/+eUTv+uc0L/c25x/29yfv9YWF3/ube1//jv5v/o3NH/5dnO/+TZ + zv/k2M7/4tfN/+LWzP/g1cv/39TK/97Tyf/d0sj/3NHH/9zRx//a0Mb/2c7E/9fMw//UysH/0Me+/8zD + u//Iv7f/wbmz/7q0r/+4sq3/vbi0/767uP+fnZvrDQ0NOwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYe + FlfFj2H8zZFd/9mgcP/VjVH/2Y5O/96QT//hkU7/45JO/+aTT//slUz/s3dF/3hydf9scH3/TExR/5eV + lf/z6+T/7eHW/+XZzv/l2s//5NnO/+PYzf/i18z/4dXL/+DUyv/e08n/3dLI/9zRx//c0cf/2tDG/9nO + xP/WzML/08nA/8/Gvf/Lwrr/xr62/8C4sv+3sq7/trGr/7u3s//Bvrv/ZGNhrAAAAAwAAAAAAAAAAAAA + AAAAAAAAAAAAEIlkRcLTkFj/2aJ0/9iUW//ZjU3/3pBP/+GRTv/kkk7/5pNO/+eTTf/plE3/8JZM/8R/ + Rv+CdXH/dHqI/1FSWP91dHb/493Y//Ln3P/m2c//5drP/+TZzv/j2M3/4tbM/+HWy//g1Mr/3tPJ/93S + yP/c0cf/29HH/9rPxv/YzsT/1cvC/9LIwP/Oxbz/ysG5/8W8tf+9trD/trCs/7Wvq/+8uLX/sK2r+hoa + GUoAAAAAAAAAAAAAAAAAAAAAKSAYUcuOWf7VmGX/3aJx/9mNTP/ekE7/4pFO/+SSTv/mk07/55NN/+mT + Tf/plE3/6pRN//GXTP/YiUf/lHlo/3p/jf9cXmf/XFxf/8nEwf/27OL/6NzS/+bb0f/l2tD/5NjO/+LW + y//g1cr/39TK/97Tyf/c0cf/3NHH/9vQxv/az8X/183E/9XLwf/Rx7//zcS7/8i/uP/CurP/urSv/7Su + qf+1r6v/w7+8/2ZkY6oAAAAFAAAAAAAAAAAAAAACeFk+ptuXXf/eqHr/3JVa/96PTf/hkU7/5JJO/+aT + Tv/ok03/6ZNN/+mUTf/qlE3/6pRN/+qUTf/vl03/6ZFH/7F/Wv+CfoX/Z2p0/05PU/+op6b/+vby//Tv + 6v/v6+b/7ujj/+rj3v/m3dX/4dfM/97TyP/e0sj/3NHH/9zRx//b0Mb/2c7F/9fMw//UycD/0Ma9/8vC + uv/Fvbb/v7ex/7eyrv+xq6b/ubWx/6ajofEMDAwsAAAAAAAAAAAFAwEevIle6NybZf/hqXj/3Y5M/+GR + Tv/kkk7/5pNO/+iTTf/pk03/6ZRN/+qUTf/qlE3/6pRN/+qUTf/qk0v/7JNJ//OpbP/YuaH/npqe/3h6 + hP9OTlT/hoaH/+rn5f/x7en/9PHt//r28v/28e7/7enk/+be1//f1Mr/3dHH/9zRx//c0cf/2s/G/9jO + xP/Wy8L/0si//87EvP/IwLj/w7u0/7u1r/+0r6r/r6ql/7+7uP8+PDxuAAAAAAAAAAAuIhdQ3Z5p/+Cm + df/hnmX/4I9L/+SSTv/mk07/55NN/+mTTf/plE3/6pRN/+qUTf/qlE3/6pRN/+qSSf/rl1L/772T//fc + x//94cr/z7Sc/4yIjP+FhpH/XV1k/1lZXf9paGv/dXR2/5mXmP/QzMr/9fHt//Xx7v/q5eD/4NbM/9zR + xv/c0cf/29DH/9rPxf/XzcP/1MrB/9DHvv/Lwrr/xr62/7+3sf+4s67/sKql/7q2sv9zcW+vAAAAAQAA + AABkSzaF6KRr/+Wuf//gk1P/45FN/+WSTv/nk03/6ZNN/+mUTf/qlE3/6pRN/+qUTf/qlE3/6pJJ/+ua + WP/xyKf/++PP/+LEq/+Yfmj/aVtU/1xbYP9TUln/R0dN/zc2O/81NDn/ODc8/zk5Pf9HR0z/f31//9jV + 0v/49PH/7Ofj/+DWzf/c0Mb/3NHH/9vQxv/ZzsX/1szC/9LIwP/OxLz/ycC4/8K6s/+7tbD/tK6q/7Gs + qP+Wk5HdBAQEFAAAAACQbEyw6qZt/+etff/ij0v/5ZJO/+eTTf/ok03/6ZRN/+qUTf/qlE3/6pRN/+qU + Tf/qk0v/65hU//HIpv/748//yauR/3JeUf9NS1H/OTtC/y4uM/8rKzL/LS0z/zAwNf8xMDT/Li81/y8w + Nv80NDj/Nzc8/1JSVf+8ubj/+PTw/+zm4v/e1Mr/3NHG/9vQxv/az8X/183D/9TKwf/Qxr7/y8K6/8W9 + tf++t7H/t7Kt/7Cqpf+mop/2GRkZMS0tLAmugFnM6qly/+ipdP/jj0r/5pNO/+iTTf/plE3/6ZRN/+qU + Tf/qlE3/6pRN/+qUTf/rlU3/77uR//vj0P/FqI//ZVZN/0NFTf89Njb/S0A7/1FFO/9ZSTT/X0ww/19M + MP9iTC3/YUop/0U8Mf80MjX/MDA1/zY2O/9HR0z/vru6//fz8P/o4dz/3NHG/9zRx//b0Mb/2M7E/9XL + wv/SyL//zcS8/8i/t//BubP/ubSv/7Osp/+uqaX/Ly4uSzo2NBbAi1/d66p1/+ika//lkEr/6JNN/+mT + Tf/plE3/6pRN/+qUTf/qlE3/6pRN/+qVT//tp23/+N3H/9zBqv9tWUz/Q0VN/0s+N/9oUUH/blMx/4lg + IP+kbhj/s3YT/7d4E/+wdRb/r3QV/5JlHP9cSSv/QTkx/zAwNf82Njv/Wlpc/+Hd2f/y7er/4djP/9vQ + xv/b0Mb/2s/F/9fNw//TycD/z8a9/8rBuf/Du7T/u7Ww/7Wvqf+1r6v/Ojk4Xzw6OBzEjV7l7Kt0/+ig + ZP/mkUr/6JNN/+mUTf/qlE3/6pRN/+qUTf/qlE3/65ZQ/+yaVv/xw53/9+HO/5J2X/9MSk//RTs4/3JX + Qf93Vyn/n2sW/8B9D//Ngwv/0oYM/9SHDv/Vhw3/0YYM/8uCC/+kcBv/cVcu/0k+L/8xMDX/ODg9/5SR + kf/28+//6OLc/9zRxv/c0cf/2s/G/9jOxP/Vy8H/0ce+/8zDu//Gvbb/vbex/7myrf+4s7D/Ozo4Zzw7 + OhvGjV3m7apz/+meYf/nkUr/6ZRN/+qUTf/qlE3/6pRN/+qUTf/qlU7/7JpX/+2kaP/32sH/1ruk/2ZU + SP89PkX/Z04+/39dLf+lbhX/yYEN/9SHDv/Zihv/3o0o/+COLv/gjS3/3Ywk/9iJFv/Thgr/snwk/3th + OP9EOi7/MjI4/1taXP/h3Nn/8Ovn/97Uyv/c0cb/29DG/9nOxf/WzML/0si//83EvP/Iv7f/v7mz/7u2 + sv+4sq7/PTs5ZD07OhLHkGHe7qpx/+qfYf/okkr/6ZRN/+qUTf/qlE3/6pRN/+qUTf/rmFT/7J1d/++x + fv/75NH/rY92/1NMTP8+Oj3/dFs+/51qGv/IgQ3/1ogQ/92NJ//lkT3/6pZL/+uZUf/rmFD/6ZRH/+OP + N//bix3/1IcM/7CEPf9vWDf/ODQy/0JCR/++urb/9fHu/+HY0P/b0Mb/29DG/9rPxf/XzMP/08nA/8/F + vf/JwLj/w7y1/8G5s/+7ta//PDs5VTQ0NQW9i2HN8alu/+ufYf/okkr/6pRN/+qUTf/qlE3/6pRN/+uW + UP/snVv/7aFj//C7j//449H/knVd/0tKT/9EPj3/gmAr/8eBIv/ViBD/3Iwk/+eTQ//snFf/7aVk/+2q + av/tqWn/7aNg/+uYUf/kkDn/2okW/8yMJP+bekn/UUMy/zk6P/+loZ7/9/Pv/+Tb0//c0Mb/3NHH/9rP + xv/XzcT/1MrB/9HHvv/SycD/x8C5/4mFgf+fmpX/MS8uOwAAAACogmOx9apt/+yiZf/pkkr/6pRN/+qU + Tf/qlE3/6pRN/+uaVv/toWL/7qVp//LBmP/1387/hGlU/0hJUf9KQDb/mmsh/9iRL//Zihr/45A4/+yb + Vf/tqWn/77Z6/++8g//vu4H/7rJ0/+2kYv/qlkz/340q/9WLGP+3j1D/cFk2/zw6O/+bmJf/9vLv/+Tc + 1f/c0Mb/3NHH/9vQxv/c0cf/3dPI/9TLw/+rpqT/X15e/0FBQP+SjYnvGxoaHAAAAACDaVOD+a5w/+yl + af/pkkn/6pRN/+qUTf/qlE3/65ZQ/+ydXP/upGj/76lv//LCm//14M//gmlV/01OWP9RRDL/pnEd/9ua + Ov/cjiX/55JD/+2iX//us3b/8cON//LPnP/yzJn/8L6F/+6tbv/snFb/4482/9iNG//JnVf/hmUy/0Q/ + Ov+in53/9/Pw/+fe1v/i18v/5NnO/97Uy//Kwrz/o5+f/3d2e/9UVVv/Pz9B/1NSUf+Mh4PMBgUFAgAA + AABKOixJ+bF2/+2mbP/qk0v/6pRN/+qUTf/qlE3/65hU/+2gYf/up23/76x1//LAl//45dT/iXFe/1tc + Zv9XRzL/qHAW/9yhQ//fkzH/6JNF/+2lY//vt3v/8cmV//PZrP/z1aX/8MKM/+6wcv/snlr/5I84/9uS + J//SpVv/jWUl/09MSv/Avbn/+vbz/93W0f/Dvbr/paGj/4OCh/9jZGv/S05V/01QV/9UVVv/PkBB/2Zk + Yv9zb2yRAAAAAAAAAAATDQgS46Ry7PGpbf/rmFL/6pRM/+qUTf/qlU7/7JxZ/+2jZv/vqnL/8LB8//K8 + j//85tT/gXl1/4OGlf9oWUf/nmcO/9iePf/in0T/5pA+/+2iX//us3b/8MOM//LOnP/yy5j/8L2F/+6t + bv/snFb/4o0y/96bPP/LkTP/kG89/3d5g/+joqT/iImQ/2xvdv9aXWb/TlJa/0lKUP9HREf/ST48/1Y/ + Nv9uSzv/dltN/4eDgP9FQkBEAAAAAAAAAAAAAAAAqHxXpfqwc//snl3/6pJK/+qUTf/rllH/7J5d/+6m + av/vrXb/8LOB//e9jv/gxa7/enuE/6Oltv9lX1v/kGEV/82KHP/lrVn/5JI9/+uZU//tqWj/77V5/++8 + gv/vuoD/7rF0/+2kYv/qlkv/4I8v/9mSJ/++gR7/ZF5V/0xLUv9GQUL/RD09/0k7OP9NOTH/Uzgs/1w5 + KP9oPSf/dkQq/4dQM/+TVjT/mGlO/5SQjNwQEA8IAAAAAAAAAAAAAAAATDgmQvqydv/to2b/6pNL/+qU + Tf/rmFP/7Z9g/+6obv/wr3n/8raF//nAkP+Yhnn/nKCv/4lxa/9GPT7/b19G/6dwF//Xli3/6bBf/+ul + X//snFf/7aRi/+2qaf/tqWj/7qNf/+6aUP/kkDf/2okV/9WKEf+Fbkr/STUx/2hALP93UDz/dko0/3xL + Mf+CTzT/iFI1/4xSM/+OUjH/jlAu/4xNKv+KSCP/m3pn/2VlY3gAAAAAAAAAAAAAAAAAAAAABwQCAcqS + Y8X3rW//65lV/+qTS//snFr/7qVp/+6nbP/wsHz/+8CP/7aSdv+Qkp7/trfD/7+mmf9jPSv/R0NH/3Nm + UP+dbCf/yoUk/+OfRP/so1T/7ZtQ/+6aUP/umk7/5pJE/9CEMf/Uhhj/1ZAe/4t0Tf9HMSv/kGdS/9O+ + sv/CpZP/kVc2/49SMP+OTy3/jE0q/4pLKf+KSyn/i0wq/4tMKf+PUC7/nIyC6RscHBQAAAAAAAAAAAAA + AAAAAAAAAAAAAFc+KUT9s3b/7aBh/+qRSf/xuIj/9cuo//G5i//8zKX/y6eK/4mHjP+3u8n/rJaP/82y + ov+5nY7/XDcl/0VAQv9rY1j/mnJF/7p6Mv/KgzP/0og4/9KEN//HejL/oWYr/3daM/93Y0H/ZF1T/0Uw + K/+DWkT/1L6x/864qv+VX0D/h0Yk/4pMKf+KTCr/ikwq/4tNKv+LTSr/i00q/4lJJP+hcFT/X11abgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACsfFSg/K9v/+uZVf/zwJb/9tO1//nYvf/xx6X/fG9n/7S4 + xf+9ucD/kVg4/5diQ//SvK//vqOU/2tDMP9DMy//S0xQ/2dfWP9/Z1H/jGpL/45qSf+DZkv/bWBT/1hX + Vf9HP0D/Ty0h/5BpVP/TvbD/0Lqt/51tUP+HRiP/i00q/4tNKv+LTSr/i00q/4tNKv+LTSr/i0wp/5NS + Lf+SemvGDA0OBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfFxAT4aFs3fSlY//xuoz/9tO2///W + tf+zj3P/dHV7/9TX4/+vkof/iUch/4dHI/+XY0T/yrGi/9C7r/+Xc2D/YT8v/0c0Lv9BOTr/Qz5A/0Q+ + P/9FOjn/RzIs/1QxIf93TTj/s5SE/9nGvP/KsKH/m2lL/4dHIv+LTSr/i00q/4tNKv+LTSr/jE0q/4xN + Kv+MTir/jUsm/51rTuY1MzEoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASDYnOPav + dPfzrnT/9s6u//vPqv93Y1T/jZCX/9za4P+dak//iUgj/4xNKv+ISCT/jlQx/7ONd//UvrH/zreq/6+R + gf+UcV//hmFP/4VfTP+LZFD/nnpo/72hkv/Wwrf/076x/7SQev+RVzX/iEcj/4tNKv+MTSr/jE0q/4xN + Kv+MTir/jE4q/4xOK/+MTSr/m1s3/0c1K0wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAG9WQlj9uYH+9reE/+i7lf9US0f/i46W/9nOzP+rfWL/iksm/4xOKv+MTir/iksn/4hH + I/+UXDv/rYVr/8Wnlf/Quav/1L6y/9XAtP/VwLP/0bqs/8Snlv+uhW3/ll8//4hIJP+KSib/jE4q/4xO + Kv+MTir/jE4q/4xOK/+MTiv/j08s/41OK/+YUy3/ZkAqjQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0YE9h/8OP/tuleP9LRkX/V1ph/7ypof+0h27/h0Ug/4xN + Kf+NTiv/jE4r/4xOKv+KSyf/iEgj/4pMKP+RVzT/lmA//5lkRP+WYED/kVg1/4tNKf+ISCP/ikom/4xO + Kv+MTiv/jE4r/41OK/+NTiv/jU4r/41OK/+WVS7/mlcv/5lVLv9uPSGiCAQBAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAd2dZWPTGoPNfT0H/ODo+/6OE + dP+odFb/qXpf/5FTMf+LSib/jU4r/41OK/+NTiv/jU4r/4xNKv+MTCj/i0on/4pKJv+LSif/i0wo/4xN + Kv+NTiv/jU4r/41OK/+NTiv/jU4r/41OK/+MTir/jk8r/5hXMP+eWjH/nVoz/2A2H5EAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE9J + RDF+alqfWEIx0pxqTf2fZ0j/yaua/76ZhP+ZYD//jEwo/41OKv+NTir/jU4q/41OK/+NTiv/jU4r/41O + K/+NTiv/jU4r/41OK/+NTir/jU4q/41OKv+NTir/jU4q/45PK/+SVDD/nV43/6RjO/+aXTr0TC4dagAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAExIQBZtvVduobk3/rH1i/8CciP+ziXH/kFIv/5FUMf+RUzD/kFIu/5BR + Lv+PUS3/j1Et/49QLf+PUC3/j1Et/49RLf+QUS7/kFIv/5FTMP+SVTL/llo3/55jQP+nbEf/qm1J/4NT + OMAsHBMxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIjGzSDWUCwqXJT/614Wf+odVj/oWxO/51l + Rv+aYUD/mF49/5ddPP+XXDv/l1w7/5ZcOv+WXDr/llw7/5ddPP+YXz7/m2JC/59oSP+lb0//rnZV/7F4 + Vv+YZknWTjQlYQYFAwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANCQbOXNQ + PJukdFjntYNm/7WEZ/+wgGT/rHtf/6h3Wv+mdFf/pXJV/6VxVP+mclX/p3RY/6p4XP+vfWD/tIFj/7aC + ZP+uel33iV9Hu0s0J1oRDAkJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAJAwATOCMYT2NDMZGEXEXElmtS5qN1XPmmeV//qnxi/6t9Yv+leF7/pXdc/Ztu + VO+NYkrTcU05pUUtH2cXDAYmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAq6akD760ryPCt7E21sa9P9vK + wEPBtrA5wrexK7GrpxakoaACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//wAf//9z9//4AAH// + 3P3/+AAAH//c/f/gAAAH/9z9/8AAAAP/3P3/gAAAAP/c/f4AAAAAf9z9/AAAAAA/3P38AAAAAB/c/fgA + AAAAD9z98AAAAAAP3P3wAAAAAAfc/eAAAAAAB9z94AAAAAAD3P3AAAAAAAPc/cAAAAAAAdz9gAAAAAAB + 3P2AAAAAAAHc/YAAAAAAANz9gAAAAAAA3P2AAAAAAADc/QAAAAAAANz9AAAAAAAA3P0AAAAAAADc/QAA + AAAAANz9AAAAAAAA3P0AAAAAAADc/YAAAAAAANz9gAAAAAAA3P2AAAAAAAHc/YAAAAAAAdz9wAAAAAAB + 3P3AAAAAAAPc/cAAAAAAA9z94AAAAAAH3P3wAAAAAAfc/fAAAAAAD9z9+AAAAAAf3P38AAAAAD/c/f4A + AAAAP9z9/wAAAAD/3P3/gAAAAf/c/f/gAAAD/9z9//AAAAf/3P3//AAAH//c/f//AAD//9z9///wB/// + 3P3////////c/SgAAAAgAAAAQAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAFgAAACMAAAAiAAAAEwAA + AAkAAAAJAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAmIx8bWlpMQI57ZVG2dFhBzGdO + OsxcUEWvWFVTllZUUZY4NjV4FBMTTAAAACIAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIEBAUwTkM7h6KIcdTTq4j9tI1t/4dp + UP+mkoD/1svB/+Xd1f/k3Nb/39nT/9bRzP/AurX2j4uIzkRDQocFBQU2AAAABQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAROjIscayRed3bsYz/1qR6/4Vj + SP93b2r/ysS+/+Xd1f/e1Mz/2c/H/9bNxf/RysT/1MzF/9TNxv/W0cz/0MvH/6Gem+NAPz6DAAAAHAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBIG9eT6fUrYr/1KB0/8yU + ZP95WkH/gX19/9/Xz//h1sv/29DG/9vQxv/az8X/1szD/9DIwP/Oxr//zMS9/8vEvv/LxL//zsnF/8rG + w/94dnTBCwsLOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBCKHcFvA2qqB/82Q + XP/SkVr/gl9C/358ff/o3tb/49fM/97Tyf/d0sj/3NHH/9zRx//b0Mb/2c7F/9XLwv/Qx7//zMO7/8e+ + t//Evrn/x8K9/8vHw/+VkpDeFBQURAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEUgGhSvNik + eP/Njln/1o1Q/6FwR/9MS03/2tTP/+re0v/i18z/4dbM/+DVy//e08n/3dLI/9zRx//b0Mf/2s/F/9fN + w//TycD/zcS8/8S8tv++uLL/wbu2/8jEwP+XlJLiDg4ONAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVtI + N5XWoHH/0ZNe/9OMUP/gklD/k2I5/1hdZ/+ysLL/8Obd/+nc0f/j2M3/4tfN/+HWy//f1Mr/3tPI/9zR + x//c0cf/2s/F/9fMw//TycD/zcS8/8S8tf+7ta//vbez/8fDwP9+fHvJAQEBFAAAAAAAAAAAAAAAAAAA + AAAjGxVLxZBj/NaZZ//Wj1P/245O/+KST//fjUn/lHNb/2FndP+GhYj/5d3W/+7i1v/k2M7/49jN/+LW + zP/g1cv/3tPJ/93Sx//c0cf/2s/F/9fMw//SyL//zMO7/8S8tf+6tK7/urWx/8PAvf9IR0aGAAAAAAAA + AAAAAAAAAAAACIpjQcTdn2v/2ZVd/9yOTf/hkU7/5ZJO/+uVTv/mkEj/onte/2Jmcv9sbnT/0MrE//Pn + 3P/l2c7/49fN/+LWy//g1cr/3tPJ/93Sx//c0cf/2c/F/9bMwv/Rx77/ysG6/8G6s/+3saz/vbi0/6aj + ofANDQ0oAAAAAAAAAAAlGxJH0ZNf/92gbP/cjk3/4pFO/+WTTv/ok03/6ZRN/+yWTf/ulEn/vYZa/3Zw + c/9cX2f/s66r//Tr4v/t5Nv/6N/W/+TZz//g1Mr/3tLI/9zRx//b0Mb/2c7F/9TKwf/Pxb3/x7+3/722 + sP+0rqr/wb26/1BPTocAAAAAAAAAAHBQNJvnqHL/35he/+GPTP/lk07/6JNN/+mUTf/qlE3/6pRN/+uT + S//xk0X/3aV4/5+anP9hYmv/mJia/+vo5v/x7en/9/Pu//Lr5f/j2tH/3dHH/9zRx//b0Mb/183E/9LJ + wP/Mw7v/xLu0/7iyrf+4s67/kY+N1wICAgwdHR0NrX1U1uipdf/hklD/5ZJO/+iTTf/plE3/6pRN/+qU + Tf/qk0r/6pVP//TCmf/52sD/v6aR/358gv9bXGT/VVVZ/2RjZv+Ih4j/y8jG//fy7v/o4Nn/3NHG/9zR + x//az8X/1svC/9DGvv/Iv7j/vrex/7Suqv+tqab8IB8fOz01LjLRmGj156Rt/+OQS//nk03/6ZRN/+qU + Tf/qlE3/6pNL/+qVTv/2yaT/48q1/4NxZf9FQkX/Njc//zAyOv8sLTT/Kywz/yorM/88PEH/kI+P//Ds + 6f/o4Nn/29DG/9vQxv/YzcT/08nA/8zDu//Du7T/uLKt/7Wvq/9DQkFrXk0/UuGkcf/nn2T/5pFK/+mU + Tf/qlE3/6pRN/+qUTf/qkkr/87uN/+XNuP9vYFj/Pzs//01BOf9gSy//dFUo/3dYJ/92ViT/UEEt/zAv + Mv8tLjT/ioiJ//Xw7P/i2M//29DG/9nPxf/Vy8L/z8a9/8e+t/+8trD/ubOu/1xaWY1tWEdk56dx/+ic + Xv/okkr/6ZRN/+qUTf/qlE3/6pRM/+2hY//32L//j3tt/0E8P/9mTzr/i2Ii/7h4D//Ngwz/0YUO/86E + DP+0dhL/b1Qq/zg0MP83Nz3/wL27//Hq5P/c0cb/29DG/9fNw//RyL//ysG5/7+4sv+9uLP/ZWJgnW9a + SWPppm//6Ztb/+mSS//qlE3/6pRN/+qUTf/rl1L/9LyN/9nAq/9TSkf/Vkc+/5JmIv/HgAv/24sX/+KO + Lf/kkDf/4o8v/92LF//Fgxj/eV42/zAuLv95eHn/8+7p/9/Vy//b0Mb/2c7E/9TKwf/Mw7v/xLy1/8W+ + uf9nY2GaaFZIT+mmbv/qm1r/6ZNL/+qUTf/qlEz/65dR/+2eXv/5zaj/tp+M/0E+Q/9sVDP/w34X/9uL + GP/nk0L/7Z9c/+2mZf/toV7/6JRF/96MGv+7hzL/V0k2/1VVWP/m4t7/5NrS/9vQxv/Zz8X/1szD/9XL + wv/Gvrf/pJ6a/11aV4NLRD4t46Rv9uydW//qk0v/6pRN/+qUTf/snFr/7qVo//vTsv+mkID/Pz5D/4Zh + KP/akSb/4o4w/+2hXv/vt3z/8MKL/++5f//to2L/5I8z/9SSK/+GakD/U1BO/+Hd2v/p39b/4dbL/+LX + zP/WzMT/sKup/2NiY/9jYmD/RUJAWiYmJQjKk2XX8qNi/+qTSv/qlEz/65dR/+2hY//vqnD//NOz/6uY + iv9MSU3/kGUf/96cN//mkj3/7qlp//HFj//z2Kr/8ciT/+6rbf/mkT3/3Zo5/5x2Of9saGP/7Ojm/9zV + 0P+8t7T/lpWY/2hqcf9QUlr/P0BD/3Fua/cmJCMkAAAAAJJqSJf7rm3/6pRM/+qUTP/smlf/7qZq/++u + eP/9zqf/qaCc/3d5hf+LYBv/3Z86/+eXQv/tomD/8L2E//HLl//wv4f/7qdn/+aSPf/dmDD/l3Q8/25y + e/97fIH/Xl5j/05KTv9JPz7/UDw1/2pHNv+DX0z/dnJuwgYGBQEAAAAAPiwdPfmwdP/rl1L/6pRM/+yb + Wf/uqG//9baB/+Kyiv+Ylp3/enB1/2RSNf+/hCP/56ZL/+6iWv/upmX/769w//Gqaf/wm07/5pAh/8WI + Iv9fTDz/X0Y9/2RFNv9qQi3/dUYt/39JK/+ITCz/jkwn/59vVP9NTEtiAAAAAAAAAAADAQABwotdwvel + Yv/qllH/7612//Gwev/xuo3/o5KJ/7Cwu/+wlIX/UT44/2pbQ/+2fzL/4JhA/+qZSP/qlUf/2Ig9/7l5 + LP+0gS3/ZUw0/4trXv/Os6P/mWJC/45OK/+OTyz/jU4q/4xNKf+PTSf/jnNk3A4QEQoAAAAAAAAAAAAA + AABDMCA49qpr/O+kZf/20LH//tSx/7GXhP+or73/pYN0/7aOdf+yloj/WUI7/1VKRP9/ZEb/mm9E/5xu + Qv98X0L/U0tB/0w6Nf+MbF//1L2v/6R0Wf+HRiL/ikwp/4tNKv+LTSr/i0sm/51kRP9EPjpRAAAAAAAA + AAAAAAAAAAAAAAAAAACGYECA/7N0//jOrP/mv5//hX99/8fBxv+PUzL/iEgj/7KKcf/DqJn/jHFl/19M + R/9TQ0D/U0I9/1xFPP97XE7/tZiK/861pv+gb1P/h0cj/4tNKv+LTSr/jE0q/4xNKv+WUy7/a008kAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUEBAGwgVqp/8mT/7yYfP92eoD/zbmy/49RLf+KSib/iEcj/5pk + Rf+6lX//w6WT/76hkf++oZH/xKeX/8epl/+xiHD/kFU0/4hHI/+MTSr/jE4q/4xNKv+NTyv/lVIs/35K + LcgLCQgGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0MDAe/lXKtwJZ1/0dKUf+zmIv/mmA+/4pJ + Jf+MTSr/ikom/4lII/+PUi//l18+/5ljQ/+UWzr/jE4q/4hHI/+LTCj/jU4r/41OK/+MTSr/k1It/6Fb + Mv+ASCfPGA0HHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8ODgN9a1yCV0g81ppp + Tv+5j3f/q31i/45OKv+NTSn/jU4q/4xNKf+LSyf/i0om/4tLJ/+MTSn/jU4q/41OKv+NTSr/jk8r/5pa + NP+nZDv/ckQosREKBhQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAARDgwIhVtCwbR/YP++lHz/nWVF/5JVM/+SVDH/kVMw/5FTL/+QUy//kVMv/5FTMP+SVTL/lVk2/59j + QP+sb0v/nGVF500xIW0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAGAgAJRSweY4NYQMendVj9rHha/6hzVP+jbk//oWpM/6BqS/+ibE3/pnBR/6t1 + Vv+qdVb/kmRJ2Fg6KX0RCgUZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtAOS51X1JplXhnmamHc7i0j3rItZB7yauI + dL2bfGmhf2ZXdVRGPjstKikHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA//AP//+AAf/+AAB//AAAP/gAAB/wAAAP4AAAB8AAAAPAAAADgAAAAYAAAAGAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAgAAAAYAAAAHAAAAD4AAAB+AAAAfwAAAP+AAAH/4A + AH//AAD//+AD//////8oAAAAGAAAADAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAgMDIRcTED8QCgRGAAAALAAAACAAAAAVAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAES0n + Ilp5ZVOolHZc2opsU/Kgi3j2qqCX5aijn9uSj4vMYl9dnSUkI1gAAAAUAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjHxtMknpmxterhP+rg2P/j4B0/8rAt//j29P/4tnR/9zU + zf/c1c//3NXP/8rFwP+Kh4TMJyYmWwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAktA + Nn3Hn3343qRy/5lwTv+Kgn7/39bP/+LXzP/b0Mb/2s/F/9XLwv/Qx8D/zcW+/8zFv//Szcj/wb26/1VU + U5gAAAANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU0Q3h9OieP/Xk1n/o3FH/3x1cv/p4Nj/49fN/9/U + yv/e08n/3dHH/9vQx//ZzsT/08nB/83Du//Evbf/xcC6/8rFwv9mZGOsAAAACgAAAAAAAAAAAAAAAAAA + AAA2KyFhz5xw/9SSWf/dj03/f1s+/4GGkf/q4dj/69/T/+LXzP/h1sz/39TK/93SyP/c0cf/2c/F/9XK + wf/NxLz/wbqz/7+5tP/Hw7//UE9OjgAAAAAAAAAAAAAAAAkHBR2vgFnp3Jtk/9mOTv/kkk7/14pL/4Nv + Zf90eYP/08zF//Dk2P/k2M7/4tbM/+DUyv/d0sj/3NHH/9nOxf/UysH/zMO7/7+4sv+9t7P/trKv/R4e + HUEAAAAAAAAAAFg+KIXhomz/3JJU/+KRTf/mk07/7pZN/+OQS/+UdmL/ZWhx/7eyr//y5tv/6d7U/+TY + zv/f08n/3dLH/9zRx//YzsT/0si//8nAuf+7ta//wby4/3d1c7cAAAACFhUVD618U9vloGf/4ZBM/+eT + Tv/plE3/6pRN/+6US//uk0f/wp2C/3Z3f/+ioKL/6+bi//Hs5//z7OT/49nP/9zQxv/b0Mb/18zD/8/G + vf/EvLX/uLKt/6yopfgYGBgwRDcsRNmebf3jmFj/5pJM/+mUTf/qlE3/6pNL/+uVTv/4xJj/3b+m/4R7 + ef9PUl7/TE5V/2Jjaf+joaL/6+fj/+jf1v/b0Mb/2s/F/9TKwf/Lwbr/vbaw/7izr/9IR0ZzdFtFdemo + cv/lk1D/6ZNN/+qUTf/qlE3/6pNK//fDmP+7qJj/T0hJ/zw3OP9GPDD/SDwr/zwzK/8nKDD/aWls/+Xh + 3v/k2tH/28/F/9fNw//Pxr3/w7y1/7u1sP9raGaijm5Tj+2nbf/nk0z/6pRN/+qUTf/qkkr/8650/9S8 + p/9QSEf/XUk1/5ZnHf+9exD/xX8R/7V3Ef9sUSf/Kikr/4SEhv/x6uX/3NHH/9nOxf/TycD/yMC4/8C6 + tP96d3W4knBVju+maf/pk0z/6pRN/+qUTP/sl1L/+Mif/41+df9NQTr/pW8a/9iJEv/mkTH/6ZQ9/+WR + K//QiBj/clgw/0JCRv/a1tP/49nQ/9rPxf/Vy8L/z8a9/8rDvP99eXW1gmdSc/Gmaf/qlEz/6pRN/+uW + UP/vomP/8sqq/2pgXv9pUTH/1Ykb/+eTOv/vqWv/8LR5/+6lZf/nkS7/vIYw/05GPP/Bv77/6+HY/+HW + yv/f1Mr/xLy3/4eEgf9dWleYVUY7QOula/7rlU7/6pRM/+ybWP/wqm//8s2u/25nZ/9+Xir/4Zcw/+ua + Uf/xwIn/89Sl//C5gP/qlkT/1ZU2/3RhRP/Jycv/3NbS/7Wxr/+Ghon/WVpg/1RTU/9BPz1gHhwZCs2S + YNrynFX/6pRM/+2gYf/zsHj/68Oh/4WGkv+BZDb/3Zky/+2eUv/wtnv/8ceS//Gydv/rlj//z48r/21g + UP9ua3D/X1dX/1NEQf9XPTL/dUkz/4ZxZfAaGxsbAAAAAH5aPH/9qWT/65ZR/+6mav/2t4L/uqGR/6CZ + n/9eSz7/nnQx/+WeRv/xolX/8qJZ/+STRv/WjCX/h2Ar/4NqYf+KYEr/fkYo/4hLKv+MTCn/mFcy/2la + UJoAAAAAAAAAABcQCxTemF7l9q91//vQrP/Mq4//o6Gq/7KNev+kiHr/W0tE/3pdPP+kcz//pW88/3RW + Nv9eSTb/kHZt/8amk/+TVzX/i0sn/4xNKv+NTCf/lGNH8B0dHSAAAAAAAAAAAAAAAABSOiVM/biA//fN + q/+akYz/t6Wg/4ZDHf+lc1b/tJSD/4dya/9uXln/bVtU/4FpYP+ukoX/vJeC/5BUMv+JSib/i00q/4xN + Kv+XVjH/RDInWQAAAAAAAAAAAAAAAAAAAAAAAAAAd1pCbu22iP9xbnD/tJeI/4tJI/+IRiH/klY0/6l4 + W/+ziHD/tIx0/7GFbP+eaEn/iUol/4tLJ/+MTSr/kVEs/5xXL/9YMx2MAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAGZVRmBjVEjWoXVc/7CBZv+RVDH/i0om/4lII/+JRyL/iUgj/4lHIv+KSSX/jE0p/41O + Kv+aWTP/oV83/lEvG38AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCQcIck03qLaH + bP+td1j/ml06/5ZZNv+TVjP/k1Yz/5RYNf+ZXDr/omZD/6hsSf+HVzvHLx0URAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwdFjlpTDuOkWpTyqJ1XOmoeV/1qHle9qN1 + W+yWbFPRc1I/mzkpH0gGBQQCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANfSzxnk3Ncr5d3YLNrU0B3IxsUEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/wD/QfwAP0H4AA9B4AAHQeAAA0HAAANBgAABQYAAAEEAAABBAAAAQQAA + AEEAAABBAAAAQQAAAEEAAABBAAAAQYAAAUGAAAFBwAADQeAAB0HwAA9B+AAfQf4AP0H/wf9BKAAAABAA + AAAgAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBEPKjYr + IGY8LyOBNjIuZywrKlIJCQklAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPDw4ld2FOoKKA + Y+2lj37/z8G0/9rRyf/QysT/s66p6WxqaKMSEhIuAAAAAAAAAAAAAAAAAAAAAAAAAAAnIRxFto1p58KP + Y/+ik4f/3dXO/+HXzf/b0Mb/1czD/9PLw//Vzsj/r6uo7zAvLloAAAAAAAAAAAAAAAAXEw8uu4xk7+GV + VP9/ZFD/xsbH/+/j1//h1cv/3tPJ/9zRx//XzMP/zMO7/8nCvP+3s7D7JSUlRwAAAAAEBggDiWREvOSc + X//kkUv/y4ZP/4N5df+5trX/7uLX/+XZzv/f08j/3NHH/9fNw//Kwbn/xb+5/5KPjdgFBQUPOy8kRNaX + Yv/kk0//6JRN//CWSv/ejk3/moh//6uqrP/n4dv/7+ff/+Xa0P/az8X/1MrB/8W9tf+8t7L/Pj08ZIVm + S5LqoGL/55JL/+qUTP/tlk7/8ruM/56Mgf9GSVT/SElQ/29xd//Tz8z/5tvS/9jOxP/Oxb3/wru1/3Vy + cLGvg1+67ZxZ/+qTS//rkkj/87SA/42Be/9WQy3/kGEX/51nE/9eQxn/T1BU/93X0//f1Mn/1MrB/8jB + uv+RjInStIZgue+bVv/qk0r/8Z1Y/9Wxlf9ZTEL/unkX/+yYNf/xnkj/3o8m/2ZOKP+hoKL/7OLY/9/U + yf/Nxb3/iYWBz5ZyVJDzn1j/6pRM//Wqbf/Hq5j/b1k3/+OTLv/xs3j/88mY//GhUf+tei3/np2c/9nU + 0f+opKP/cnBx/05MSqZNPC5A7p9d/+yWT//3sHX/xq6g/3doU//UkDP/97Fs//e9gP/xnkP/o3Ux/3Jm + ZP9sVEv/ZUEw/4JZQ/82MzFRCQkLAa52R7b/uX7/4riW/6ycmP+UeW3/e2JE/7J6QP+ucjz/h2E1/5l/ + bf+ebVL/iEci/5VQKf96UzzEBggJBQAAAAAkGA4j6bOE6buqnv+efG3/llg0/557av+IcWb/h3Bk/51/ + cv+kc1j/ikom/5JQKv+OUC7yIBcSKQAAAAAAAAAAAAAAAD0vJDR6aFrPp3xk/5haN/+NSyb/mFs5/5le + Pf+RUS7/jEok/5tZMv+QUzDpLBkORQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABlU5KYaTZkzjll49/5Zb + Ov+WWjj/l108/41ZOulfOiWaDQUAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjYiFFbeo + n0zOuq5wz7qucrqqoVGTjYocAAAAAAAAAAAAAAAAAAAAAAAAAAD4H6xB4AesQcADrEGAAaxBAACsQQAA + rEEAAKxBAACsQQAArEEAAKxBAACsQQAArEGAAaxBwAOsQeAHrEH4H6xB + + + \ No newline at end of file diff --git a/CefSharp.MinimalExample.WinForms/CefSharp.MinimalExample.WinForms.csproj b/CefSharp.MinimalExample.WinForms/CefSharp.MinimalExample.WinForms.csproj new file mode 100644 index 0000000..4300547 --- /dev/null +++ b/CefSharp.MinimalExample.WinForms/CefSharp.MinimalExample.WinForms.csproj @@ -0,0 +1,114 @@ + + + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {C043FFF7-5F71-4FFC-989A-E09E18548589} + WinExe + Properties + CefSharp.MinimalExample.WinForms + CefSharp.MinimalExample.WinForms + v4.0 + 512 + + + + + + + 3.5 + + ..\ + true + + + x64 + bin\x64\Debug\ + + + x64 + bin\x64\Release\ + + + true + bin\x86\Debug\ + x86 + MinimumRecommendedRules.ruleset + + + bin\x86\Release\ + x86 + MinimumRecommendedRules.ruleset + + + + + 3.5 + + + + + + + Form + + + BrowserForm.cs + + + + + + + True + True + Resources.resx + + + + + BrowserForm.cs + Designer + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + + + + + + + + + + + + + + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + + + + + + \ No newline at end of file diff --git a/CefSharp.MinimalExample.WinForms/Controls/ControlExtensions.cs b/CefSharp.MinimalExample.WinForms/Controls/ControlExtensions.cs new file mode 100644 index 0000000..bbed249 --- /dev/null +++ b/CefSharp.MinimalExample.WinForms/Controls/ControlExtensions.cs @@ -0,0 +1,29 @@ +// Copyright © 2010-2014 The CefSharp Authors. All rights reserved. +// +// Use of this source code is governed by a BSD-style license that can be found in the LICENSE file. + +using System; +using System.Windows.Forms; + +namespace CefSharp.MinimalExample.WinForms.Controls +{ + public static class ControlExtensions + { + /// + /// Executes the Action asynchronously on the UI thread, does not block execution on the calling thread. + /// + /// the control for which the update is required + /// action to be performed on the control + public static void InvokeOnUiThreadIfRequired(this Control control, Action action) + { + if (control.InvokeRequired) + { + control.BeginInvoke(action); + } + else + { + action.Invoke(); + } + } + } +} diff --git a/CefSharp.MinimalExample.WinForms/Program.cs b/CefSharp.MinimalExample.WinForms/Program.cs new file mode 100644 index 0000000..dcbf12a --- /dev/null +++ b/CefSharp.MinimalExample.WinForms/Program.cs @@ -0,0 +1,26 @@ +// Copyright © 2010-2014 The CefSharp Authors. All rights reserved. +// +// Use of this source code is governed by a BSD-style license that can be found in the LICENSE file. + +using System; +using System.Windows.Forms; + +namespace CefSharp.MinimalExample.WinForms +{ + public class Program + { + [STAThread] + public static void Main() + { + var settings = new CefSettings + { + BrowserSubprocessPath = "CefSharp.BrowserSubprocess.exe" + }; + + Cef.Initialize(settings); + + var browser = new BrowserForm(); + Application.Run(browser); + } + } +} diff --git a/CefSharp.MinimalExample.WinForms/Properties/AssemblyInfo.cs b/CefSharp.MinimalExample.WinForms/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..0f58787 --- /dev/null +++ b/CefSharp.MinimalExample.WinForms/Properties/AssemblyInfo.cs @@ -0,0 +1,13 @@ +using CefSharp; +using System; +using System.Reflection; +using System.Runtime.InteropServices; + +[assembly: AssemblyTitle("CefSharp.WinForms.Example")] +[assembly: AssemblyCompany(AssemblyInfo.AssemblyCompany)] +[assembly: AssemblyProduct(AssemblyInfo.AssemblyProduct)] +[assembly: AssemblyCopyright(AssemblyInfo.AssemblyCopyright)] +[assembly: ComVisible(AssemblyInfo.ComVisible)] +[assembly: AssemblyVersion(AssemblyInfo.AssemblyVersion)] +[assembly: AssemblyFileVersion(AssemblyInfo.AssemblyFileVersion)] +[assembly: CLSCompliant(AssemblyInfo.ClsCompliant)] diff --git a/CefSharp.MinimalExample.WinForms/Properties/Resources.Designer.cs b/CefSharp.MinimalExample.WinForms/Properties/Resources.Designer.cs new file mode 100644 index 0000000..9fb5f35 --- /dev/null +++ b/CefSharp.MinimalExample.WinForms/Properties/Resources.Designer.cs @@ -0,0 +1,110 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.18034 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace CefSharp.MinimalExample.WinForms.Properties { + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("CefSharp.MinimalExample.WinForms.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap chromium256 { + get { + object obj = ResourceManager.GetObject("chromium256", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap nav_left_green { + get { + object obj = ResourceManager.GetObject("nav_left_green", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap nav_plain_green { + get { + object obj = ResourceManager.GetObject("nav_plain_green", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap nav_plain_red { + get { + object obj = ResourceManager.GetObject("nav_plain_red", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap nav_right_green { + get { + object obj = ResourceManager.GetObject("nav_right_green", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/CefSharp.MinimalExample.WinForms/Properties/Resources.resx b/CefSharp.MinimalExample.WinForms/Properties/Resources.resx new file mode 100644 index 0000000..641637f --- /dev/null +++ b/CefSharp.MinimalExample.WinForms/Properties/Resources.resx @@ -0,0 +1,136 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\nav_right_green.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\nav_left_green.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\nav_plain_red.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\nav_plain_green.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\chromium-256.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/CefSharp.MinimalExample.WinForms/Resources/chromium-256.png b/CefSharp.MinimalExample.WinForms/Resources/chromium-256.png new file mode 100644 index 0000000..a392e00 Binary files /dev/null and b/CefSharp.MinimalExample.WinForms/Resources/chromium-256.png differ diff --git a/CefSharp.MinimalExample.WinForms/Resources/nav_left_green.png b/CefSharp.MinimalExample.WinForms/Resources/nav_left_green.png new file mode 100644 index 0000000..0433aad Binary files /dev/null and b/CefSharp.MinimalExample.WinForms/Resources/nav_left_green.png differ diff --git a/CefSharp.MinimalExample.WinForms/Resources/nav_plain_green.png b/CefSharp.MinimalExample.WinForms/Resources/nav_plain_green.png new file mode 100644 index 0000000..95b73f0 Binary files /dev/null and b/CefSharp.MinimalExample.WinForms/Resources/nav_plain_green.png differ diff --git a/CefSharp.MinimalExample.WinForms/Resources/nav_plain_red.png b/CefSharp.MinimalExample.WinForms/Resources/nav_plain_red.png new file mode 100644 index 0000000..e160e0e Binary files /dev/null and b/CefSharp.MinimalExample.WinForms/Resources/nav_plain_red.png differ diff --git a/CefSharp.MinimalExample.WinForms/Resources/nav_right_green.png b/CefSharp.MinimalExample.WinForms/Resources/nav_right_green.png new file mode 100644 index 0000000..410585c Binary files /dev/null and b/CefSharp.MinimalExample.WinForms/Resources/nav_right_green.png differ diff --git a/CefSharp.MinimalExample.WinForms/app.config b/CefSharp.MinimalExample.WinForms/app.config new file mode 100644 index 0000000..e365603 --- /dev/null +++ b/CefSharp.MinimalExample.WinForms/app.config @@ -0,0 +1,3 @@ + + + diff --git a/CefSharp.MinimalExample.WinForms/packages.config b/CefSharp.MinimalExample.WinForms/packages.config new file mode 100644 index 0000000..6cf73ec --- /dev/null +++ b/CefSharp.MinimalExample.WinForms/packages.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/CefSharp.MinimalExample.sln b/CefSharp.MinimalExample.sln index 4d4f933..8384a55 100644 --- a/CefSharp.MinimalExample.sln +++ b/CefSharp.MinimalExample.sln @@ -1,26 +1,34 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2013 -VisualStudioVersion = 12.0.30219.0 -MinimumVisualStudioVersion = 10.0.40219.1 +# Visual Studio 2012 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CefSharp.MinimalExample.Wpf", "CefSharp.MinimalExample.Wpf\CefSharp.MinimalExample.Wpf.csproj", "{BE4C3AD0-8DA2-4246-8C63-EEEB7DC197BE}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CefSharp.MinimalExample.WinForms", "CefSharp.MinimalExample.WinForms\CefSharp.MinimalExample.WinForms.csproj", "{C043FFF7-5F71-4FFC-989A-E09E18548589}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x86 = Debug|x86 Debug|x64 = Debug|x64 - Release|x86 = Release|x86 + Debug|x86 = Debug|x86 Release|x64 = Release|x64 + Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {BE4C3AD0-8DA2-4246-8C63-EEEB7DC197BE}.Debug|x86.ActiveCfg = Debug|x86 - {BE4C3AD0-8DA2-4246-8C63-EEEB7DC197BE}.Debug|x86.Build.0 = Debug|x86 {BE4C3AD0-8DA2-4246-8C63-EEEB7DC197BE}.Debug|x64.ActiveCfg = Debug|x64 {BE4C3AD0-8DA2-4246-8C63-EEEB7DC197BE}.Debug|x64.Build.0 = Debug|x64 - {BE4C3AD0-8DA2-4246-8C63-EEEB7DC197BE}.Release|x86.ActiveCfg = Release|x86 - {BE4C3AD0-8DA2-4246-8C63-EEEB7DC197BE}.Release|x86.Build.0 = Release|x86 + {BE4C3AD0-8DA2-4246-8C63-EEEB7DC197BE}.Debug|x86.ActiveCfg = Debug|x86 + {BE4C3AD0-8DA2-4246-8C63-EEEB7DC197BE}.Debug|x86.Build.0 = Debug|x86 {BE4C3AD0-8DA2-4246-8C63-EEEB7DC197BE}.Release|x64.ActiveCfg = Release|x64 {BE4C3AD0-8DA2-4246-8C63-EEEB7DC197BE}.Release|x64.Build.0 = Release|x64 + {BE4C3AD0-8DA2-4246-8C63-EEEB7DC197BE}.Release|x86.ActiveCfg = Release|x86 + {BE4C3AD0-8DA2-4246-8C63-EEEB7DC197BE}.Release|x86.Build.0 = Release|x86 + {C043FFF7-5F71-4FFC-989A-E09E18548589}.Debug|x64.ActiveCfg = Debug|x64 + {C043FFF7-5F71-4FFC-989A-E09E18548589}.Debug|x64.Build.0 = Debug|x64 + {C043FFF7-5F71-4FFC-989A-E09E18548589}.Debug|x86.ActiveCfg = Debug|x86 + {C043FFF7-5F71-4FFC-989A-E09E18548589}.Debug|x86.Build.0 = Debug|x86 + {C043FFF7-5F71-4FFC-989A-E09E18548589}.Release|x64.ActiveCfg = Release|x64 + {C043FFF7-5F71-4FFC-989A-E09E18548589}.Release|x64.Build.0 = Release|x64 + {C043FFF7-5F71-4FFC-989A-E09E18548589}.Release|x86.ActiveCfg = Release|x86 + {C043FFF7-5F71-4FFC-989A-E09E18548589}.Release|x86.Build.0 = Release|x86 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE