From 4f2cdb2051ac06d3a261eb95021aac842d0d4902 Mon Sep 17 00:00:00 2001 From: makc Date: Wed, 12 Jun 2013 17:27:35 +0200 Subject: [PATCH 1/6] 1st working json rpc version --- ColtPlugin/COLTRemoteProject.cs | 27 +++++ ColtPlugin/ColtPlugin.csproj | 7 ++ ColtPlugin/ColtPlugin.sln | 50 ---------- ColtPlugin/PluginMain.cs | 148 +++++++++++++--------------- ColtPlugin/Resources/en_US.resX | 6 ++ ColtPlugin/Rpc/AppStarter.cs | 102 +++++++++++++++++++ ColtPlugin/Rpc/JsonRpcClient.cs | 82 +++++++++++++++ ColtPlugin/jayrock/Jayrock.Json.dll | Bin 0 -> 118784 bytes 8 files changed, 292 insertions(+), 130 deletions(-) create mode 100644 ColtPlugin/COLTRemoteProject.cs delete mode 100644 ColtPlugin/ColtPlugin.sln create mode 100644 ColtPlugin/Rpc/AppStarter.cs create mode 100644 ColtPlugin/Rpc/JsonRpcClient.cs create mode 100644 ColtPlugin/jayrock/Jayrock.Json.dll diff --git a/ColtPlugin/COLTRemoteProject.cs b/ColtPlugin/COLTRemoteProject.cs new file mode 100644 index 0000000..68665bd --- /dev/null +++ b/ColtPlugin/COLTRemoteProject.cs @@ -0,0 +1,27 @@ +namespace ColtPlugin +{ + public class COLTRemoteProject + { + public string parentIDEProjectPath = ""; + + public string path = ""; + public string name = ""; + + public string[] sources = new string[] {}; + public string[] libraries = new string[] {}; + public string[] assets = new string[] {}; + + public string htmlTemplateDir = ""; + + public string flashPlayerPath = ""; + public string flexSDKPath = ""; + public string customConfigPath = ""; + + public string mainClass = ""; + + public string outputFileName = ""; + public string outputPath = ""; + public string targetPlayerVersion = ""; + public string compilerOptions = ""; + } +} diff --git a/ColtPlugin/ColtPlugin.csproj b/ColtPlugin/ColtPlugin.csproj index 4f2ed06..82d997f 100644 --- a/ColtPlugin/ColtPlugin.csproj +++ b/ColtPlugin/ColtPlugin.csproj @@ -73,18 +73,25 @@ --> + + jayrock\Jayrock.Json.dll + + + + + diff --git a/ColtPlugin/ColtPlugin.sln b/ColtPlugin/ColtPlugin.sln deleted file mode 100644 index a97b180..0000000 --- a/ColtPlugin/ColtPlugin.sln +++ /dev/null @@ -1,50 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual C# Express 2010 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FlashDevelop", "..\..\..\FlashDevelop\FlashDevelop.csproj", "{EFD07485-9A64-4EEC-94E7-ACBD4DA5CA93}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PluginCore", "..\..\..\PluginCore\PluginCore.csproj", "{61885F70-B4DC-4B44-852D-5D6D03F2A734}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ColtPlugin", "ColtPlugin.csproj", "{78101C02-E186-4954-B1DD-DEBB7905FAD8}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProjectManager", "..\ProjectManager\ProjectManager.csproj", "{78101C01-E186-4954-B1DD-DEBB7905FAD8}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ASCompletion", "..\ASCompletion\ASCompletion.csproj", "{4EBF2653-9654-4E40-880E-0046B3D6210E}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Debug|x86 = Debug|x86 - Release|Any CPU = Release|Any CPU - Release|x86 = Release|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {EFD07485-9A64-4EEC-94E7-ACBD4DA5CA93}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EFD07485-9A64-4EEC-94E7-ACBD4DA5CA93}.Debug|x86.ActiveCfg = Debug|x86 - {EFD07485-9A64-4EEC-94E7-ACBD4DA5CA93}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EFD07485-9A64-4EEC-94E7-ACBD4DA5CA93}.Release|x86.ActiveCfg = Release|x86 - {61885F70-B4DC-4B44-852D-5D6D03F2A734}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {61885F70-B4DC-4B44-852D-5D6D03F2A734}.Debug|x86.ActiveCfg = Debug|x86 - {61885F70-B4DC-4B44-852D-5D6D03F2A734}.Release|Any CPU.ActiveCfg = Release|Any CPU - {61885F70-B4DC-4B44-852D-5D6D03F2A734}.Release|x86.ActiveCfg = Release|x86 - {78101C02-E186-4954-B1DD-DEBB7905FAD8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {78101C02-E186-4954-B1DD-DEBB7905FAD8}.Debug|x86.ActiveCfg = Debug|x86 - {78101C02-E186-4954-B1DD-DEBB7905FAD8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {78101C02-E186-4954-B1DD-DEBB7905FAD8}.Release|x86.ActiveCfg = Release|x86 - {78101C01-E186-4954-B1DD-DEBB7905FAD8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {78101C01-E186-4954-B1DD-DEBB7905FAD8}.Debug|x86.ActiveCfg = Debug|x86 - {78101C01-E186-4954-B1DD-DEBB7905FAD8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {78101C01-E186-4954-B1DD-DEBB7905FAD8}.Release|x86.ActiveCfg = Release|x86 - {4EBF2653-9654-4E40-880E-0046B3D6210E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4EBF2653-9654-4E40-880E-0046B3D6210E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4EBF2653-9654-4E40-880E-0046B3D6210E}.Debug|x86.ActiveCfg = Debug|x86 - {4EBF2653-9654-4E40-880E-0046B3D6210E}.Debug|x86.Build.0 = Debug|x86 - {4EBF2653-9654-4E40-880E-0046B3D6210E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4EBF2653-9654-4E40-880E-0046B3D6210E}.Release|Any CPU.Build.0 = Release|Any CPU - {4EBF2653-9654-4E40-880E-0046B3D6210E}.Release|x86.ActiveCfg = Release|x86 - {4EBF2653-9654-4E40-880E-0046B3D6210E}.Release|x86.Build.0 = Release|x86 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/ColtPlugin/PluginMain.cs b/ColtPlugin/PluginMain.cs index c3d7ebf..992788b 100644 --- a/ColtPlugin/PluginMain.cs +++ b/ColtPlugin/PluginMain.cs @@ -7,6 +7,7 @@ using System.Reflection; using WeifenLuo.WinFormsUI.Docking; using ColtPlugin.Resources; +using ColtPlugin.Rpc; using PluginCore.Localization; using PluginCore.Utilities; using PluginCore.Managers; @@ -23,7 +24,7 @@ public class PluginMain : IPlugin { private String pluginName = "ColtPlugin"; private String pluginGuid = "12600B5B-D185-4171-A362-25C5F73548C6"; - private String pluginHelp = "makc3d.wordpress.com/about/"; + private String pluginHelp = "codeorchestra.zendesk.com/home/"; private String pluginDesc = "COLT FD Plugin"; private String pluginAuth = "Makc"; // as if private String settingFilename; @@ -257,12 +258,12 @@ private static Image GetImage(String imageName) private void OnClick(Object sender, System.EventArgs e) { - OpenInCOLT(); + new AppStarter(ExportAndOpen); } private void OnClick2(Object sender, System.EventArgs e) { - OpenInCOLT(false); + new AppStarter(FindAndOpen); } #endregion @@ -468,38 +469,69 @@ private void ConnectToCOLT(Boolean create = false) /// /// Opens the project in COLT /// - private void OpenInCOLT(Boolean create = true) + private void FindAndOpen() { // Create COLT subfolder if does not exist yet // While at that, start listening for colt/compile_errors.log changes ConnectToCOLT(true); - - // Find or create COLT project to open - String coltFileName = create ? ExportCOLTFile() : GetCOLTFile(); - + // Find COLT project to open + String coltFileName = GetCOLTFile(); // Open it with default app (COLT) - try + if (coltFileName != null) { - if (coltFileName != null) + try { - Process.Start(coltFileName); + JsonRpcClient client = new JsonRpcClient(); + client.Invoke("loadProject", new Object[] { "TEST", coltFileName }); } - - else + catch (Exception details) { - toolbarButton2.Enabled = false; + TraceManager.Add("FindAndOpen failed\n" + details, -1); } } - catch (Exception e) + else { - TraceManager.Add("Could not start COLT: " + e.ToString()); + toolbarButton2.Enabled = false; } } + private void ExportAndOpen() + { + // Create COLT subfolder if does not exist yet + // While at that, start listening for colt/compile_errors.log changes + ConnectToCOLT(true); + + // Create COLT project in it + COLTRemoteProject project = ExportCOLTProject(); + try + { + JsonRpcClient client = new JsonRpcClient(); + client.Invoke("createProject", new Object[] { "TEST", project }); +//Object state = client.Invoke("getState", new Object[] { "TEST" }); +//TraceManager.Add("State: " + state); + } + catch (Exception details) + { + TraceManager.Add("ExportAndOpen failed\n" + details, -1); + } + + // Remove older *.colt files + foreach (String oldFile in Directory.GetFiles(Path.GetDirectoryName(project.path), "*.colt")) + { + if (!project.path.Contains(Path.GetFileName(oldFile))) + { + File.Delete(oldFile); + } + } + + // Enable "open" button + toolbarButton2.Enabled = true; + } + /// /// Returns path to existing COLT project or null. /// @@ -520,10 +552,7 @@ private String GetCOLTFile() return null; } - /// - /// Exports the project to COLT and returns path to it or null. - /// - private String ExportCOLTFile() + private COLTRemoteProject ExportCOLTProject() { // our options: parse project.ProjectPath (xml file) or use api AS3Project project = (AS3Project)PluginBase.CurrentProject; @@ -553,61 +582,44 @@ private String ExportCOLTFile() } - // Create COLT project with random name - String coltFileName = project.GetAbsolutePath(Path.Combine(settingObject.WorkingFolder, System.Guid.NewGuid() + ".colt")); - StreamWriter stream = File.CreateText(coltFileName); - - - // Write current project settings there - stream.WriteLine("#Generated by FD plugin"); - - stream.WriteLine("name=" + project.Name); - - MxmlcOptions options = project.CompilerOptions; - String libraryPaths = ""; - foreach (String libraryPath in options.LibraryPaths) - libraryPaths += EscapeForCOLT(project.GetAbsolutePath(libraryPath)) + ";"; - stream.WriteLine("libraryPaths=" + libraryPaths); + // Export COLT project + COLTRemoteProject result = new COLTRemoteProject(); - stream.WriteLine("clearMessages=true"); + result.path = project.GetAbsolutePath(Path.Combine(settingObject.WorkingFolder, System.Guid.NewGuid() + ".colt")); - stream.WriteLine("targetPlayerVersion=" + project.MovieOptions.Version + ".0"); + result.name = project.Name; - stream.WriteLine("mainClass=" + EscapeForCOLT(project.GetAbsolutePath(project.CompileTargets[0]))); + String[] libraryPaths = project.CompilerOptions.LibraryPaths.Clone() as String[]; + for (int i=0; i -1) { - stream.WriteLine("outputPath=" + EscapeForCOLT(project.GetAbsolutePath(outputPath.Substring(0, lastSlash)))); - stream.WriteLine("outputFileName=" + outputPath.Substring(lastSlash + 1)); + result.outputPath = project.GetAbsolutePath(outputPath.Substring(0, lastSlash)); + result.outputFileName = outputPath.Substring(lastSlash + 1); } else { - stream.WriteLine("outputFileName=" + outputPath); + result.outputFileName = outputPath; } - stream.WriteLine("useDefaultSDKConfiguration=true"); - - String sourcePaths = ""; - foreach (String sourcePath in project.SourcePaths) - sourcePaths += EscapeForCOLT(project.GetAbsolutePath(sourcePath)) + ";"; - stream.WriteLine("sourcePaths=" + sourcePaths); + String[] sourcePaths = project.SourcePaths.Clone() as String[]; + for (int i=0; i System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Can't start COLT :( Make sure it was installed correctly. + + + Starting COLT takes too long. Make sure to close evaluation notice. + COLT Plugin for FlashDevelop. diff --git a/ColtPlugin/Rpc/AppStarter.cs b/ColtPlugin/Rpc/AppStarter.cs new file mode 100644 index 0000000..232df80 --- /dev/null +++ b/ColtPlugin/Rpc/AppStarter.cs @@ -0,0 +1,102 @@ +namespace ColtPlugin.Rpc +{ + using System; + using System.Diagnostics; + using System.IO; + using System.Net; + using System.Timers; + + public delegate void AppStarterDelegate (); + + class AppStarter + { + private AppStarterDelegate callback; + private String tempColtFile; + private Timer timer; + private int count; + + public AppStarter(AppStarterDelegate onConnected) + { + if (COLTIsRunning()) + { + onConnected(); + } + + else + { + callback = onConnected; + tempColtFile = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + ".colt"); + + File.CreateText(tempColtFile).Close(); + + try + { + Process.Start(tempColtFile); + + // now we wait for user to close evaluation notice + timer = new Timer(); + timer.SynchronizingObject = (System.Windows.Forms.Form)PluginCore.PluginBase.MainForm; + timer.Interval = 1000; + timer.Elapsed += OnTimer; + count = 0; + OnTimer(); + } + + catch (Exception) + { + PluginCore.Managers.TraceManager.Add(Resources.LocaleHelper.GetString("Error.StartingCOLTFailure"), -1); + CleanUp(); + } + } + } + + private void OnTimer(Object sender = null, EventArgs e = null) + { + timer.Stop(); + + if (COLTIsRunning()) + { + // we are good to go + callback(); + + CleanUp(); + return; + } + + if (count++ > 7) + { + PluginCore.Managers.TraceManager.Add(Resources.LocaleHelper.GetString("Error.StartingCOLTTimedOut"), -1); + + CleanUp(); + return; + } + + timer.Start(); + } + + private void CleanUp() + { + File.Delete(tempColtFile); + + callback = null; + tempColtFile = null; + timer = null; + } + + private Boolean COLTIsRunning () + { + WebClient client = new WebClient(); + try + { + client.DownloadString("http://127.0.0.1:8091/crossdomain.xml"); + return true; + } + + catch (Exception) + { + } + + return false; + } + } +} diff --git a/ColtPlugin/Rpc/JsonRpcClient.cs b/ColtPlugin/Rpc/JsonRpcClient.cs new file mode 100644 index 0000000..647c40e --- /dev/null +++ b/ColtPlugin/Rpc/JsonRpcClient.cs @@ -0,0 +1,82 @@ +namespace ColtPlugin.Rpc +{ + using System; + using System.IO; + using System.Net; + using System.Reflection; + using System.Text; + using System.Web.Services.Protocols; + using Jayrock.Json; + + /// + /// Based on sample client from Jayrock author + /// http://markmail.org/message/xwlaeb3nfanv2kgm + /// + [System.ComponentModel.DesignerCategory("")] + public class JsonRpcClient : HttpWebClientProtocol + { + private int _id; + + public JsonRpcClient() + : base() + { + Url = "http://127.0.0.1:8091/rpc/coltService"; + } + + public virtual object Invoke(string method, params object[] args) + { + WebRequest request = GetWebRequest(new Uri(Url)); + request.Method = "POST"; + + using (Stream stream = request.GetRequestStream()) + using (StreamWriter writer = new StreamWriter(stream, Encoding.UTF8)) + { + JsonObject call = new JsonObject(); + call["id"] = ++_id; + call["method"] = method; + call["params"] = args; + call.Export(new JsonTextWriter(writer)); + } + + using (WebResponse response = GetWebResponse(request)) + using (Stream stream = response.GetResponseStream()) + using (StreamReader reader = new StreamReader(stream, Encoding.UTF8)) + { +// String s = reader.ReadToEnd(); +// return s; + JsonObject answer = new JsonObject(); + answer.Import(new JsonTextReader(reader)); + + object errorObject = answer["error"]; + + if (errorObject != null) + OnError(errorObject); + + return answer["result"]; + } + } + + protected virtual void OnError(object errorObject) + { + JsonObject error = errorObject as JsonObject; + + if (error != null) + { + string message = error["message"] as string; + if (message == null) message = ""; + + string exceptionType = ""; + JsonObject data = error["data"] as JsonObject; + if (data != null) + { + exceptionType = data["exceptionTypeName"] as string; + if (exceptionType == null) exceptionType = ""; else exceptionType = "[" + exceptionType + "] "; + } + + throw new Exception(exceptionType + message); + } + + throw new Exception(errorObject as string); + } + } +} diff --git a/ColtPlugin/jayrock/Jayrock.Json.dll b/ColtPlugin/jayrock/Jayrock.Json.dll new file mode 100644 index 0000000000000000000000000000000000000000..6df39f34c698273e0f3d9f918c82acccff4c5b75 GIT binary patch literal 118784 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

I=Y^Jyofev7KW`AN^yk=rU?g_( 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%0A9qU5&Loq)cpPhI^z4Ua7z1kXUnq@}P888B z6LL9Bw1UqCYp_;G%<#hffmtYF{h$n%9qo@vLZ6vPc?cs(4Wm&Nu8l&J#uS=O(PEk= zKW*6-`iIzL>s4`~#v-go94G1{JewI~V6Il^yO~)G1YB^ViKg(g?gUj;#KLBfu&6tl zjl(xu2?lB=>Gb0U4uR~;BgMN9igzh4p}=kk#$q}SrnW*H)qN;XKaQD-TWXPreqlti z8+;AngJPEe67y?8x8WETA`_0TOCzJq!h#%xKWVy}n38WX&YlzQ)T3(1cvC15dT?70 z(*mfGv=K9an57Tgfcb$9z zg9!zl{6kHQ5Gv$b3(9el&@p(x^t%leo-ztG-)IbWb1IUG{74?gaD~_%!}t!dkEJ;v zK&ZTFCh(SuWYgnOP1Y*SZ^h{j#Y`<^ZFmSCG@A$!iIxPk29vldCJ~tifKGl}QUQ0E zt9b=eyFMC&S3rfnkx#~#0ONxuVNMAbw&jJA)*ge!$YEdf16h6C`cs<-TrxA*HrTRt z+m_h@Zx4T+34GvMdk^e;p+CRK=^4De>Qi3+@kx#&80e24pr8VW{^H7~6}X5~1dnpE zigTE>u{9Ms_iW(4_TVJM{*#BN`&(ybW}oWsd~Naj{hg;4PYwEMK2ZGZad9~5mLd*zj5yyVZJM}x!snI3Do_=^mv(!fx0U0{|b#%&*{Tb|Kqn&)=uYWhM>?*vE-`iIL_x9Pqy?9{Pf!%*P|C6!b{%U^Z zZ#Vz(*Ykh*jmjL}zHmr?B5`@4XnKKTN)~>2^tH`f2Qv#NJrJX32G`)#BZr)uw9-_- zXP|iBqK{qr5AyMMu}%%51#D{-0$JK+q_)ou2uj3FSg$}mTA~+xx7`OBm9Pita=i9hq_20 z*u^iPR_)!~%?1zc>(nkyZP3+cqm?>nJ3Ft6C{*Q`EsZrz$XUZM`|hJ9FehSAx^Zwu!TZR0viT(~^rSgYZ)%XKKPQSduy z^%~EKH9h>iwg>dZUUHz0pHW-DCT5)>qtZh7Rd7;Iju}GkGt&C(*gec%-9D6wqFH+z zKyMak$8ewHMNSbr1-*)^t^S%Cwc}SC*!2?ANvD$oj*!zqh5ECv$hk Date: Thu, 13 Jun 2013 18:55:22 +0200 Subject: [PATCH 2/6] wired build commands in --- ColtPlugin/PluginMain.cs | 101 ++++++++++++++++++++++++++--------- ColtPlugin/Rpc/AppStarter.cs | 27 +++++++--- ColtPlugin/Settings.cs | 23 ++++++++ 3 files changed, 118 insertions(+), 33 deletions(-) diff --git a/ColtPlugin/PluginMain.cs b/ColtPlugin/PluginMain.cs index 992788b..6bb296b 100644 --- a/ColtPlugin/PluginMain.cs +++ b/ColtPlugin/PluginMain.cs @@ -35,6 +35,7 @@ public class PluginMain : IPlugin private String pathToLog; private System.Timers.Timer timer; private Keys MakeItLiveKeys = Keys.Control | Keys.Shift | Keys.L; + private Boolean allowBuildInterception = true; #region Required Properties @@ -148,6 +149,16 @@ public void HandleEvent(Object sender, NotifyEvent e, HandlingPriority prority) toolbarButton = CreateToolbarButton(toolStrip as ToolStrip, "colt_save.png", "Menu.ExportToCOLT", new EventHandler(OnClick)); toolbarButton2 = CreateToolbarButton(toolStrip as ToolStrip, "colt_run.png", "Menu.OpenInCOLT", new EventHandler(OnClick2)); } + else if ((cmd == "ProjectManager.BuildingProject") || (cmd == "ProjectManager.TestingProject")) + { + // todo: FD might send this for projects other than PluginBase.CurrentProject - figure out how to catch that + if (settingObject.InterceptBuilds && allowBuildInterception) + { + new AppStarter(ProductionBuild, cmd == "ProjectManager.TestingProject"); + + e.Handled = true; + } + } break; case EventType.FileSave: @@ -258,12 +269,12 @@ private static Image GetImage(String imageName) private void OnClick(Object sender, System.EventArgs e) { - new AppStarter(ExportAndOpen); + new AppStarter(ExportAndOpen, settingObject.AutoRun); } private void OnClick2(Object sender, System.EventArgs e) { - new AppStarter(FindAndOpen); + new AppStarter(FindAndOpen, settingObject.AutoRun); } #endregion @@ -440,7 +451,7 @@ private string LineIndentPosition(ScintillaNet.ScintillaControl sci, int line) #endregion ///

- /// Connects to COLT + /// Connects to COLT (todo: rename) /// private void ConnectToCOLT(Boolean create = false) { @@ -466,10 +477,38 @@ private void ConnectToCOLT(Boolean create = false) } } + /// + /// Makes production build and optionally runs it + /// + private void ProductionBuild(Boolean run) + { + // make sure the COLT project is open + // todo: currently no way to know if this fails, check the state before running the build in the future + if (toolbarButton2.Enabled) FindAndOpen(false); else ExportAndOpen(false); + + try + { + JsonRpcClient client = new JsonRpcClient(); + client.Invoke("runProductionCompilation", new Object[] { "TEST", /*run*/false }); + + // leverage FD launch mechanism + // todo: does runProductionCompilation block? no idea atm + if (run) + { + EventManager.DispatchEvent(this, new DataEvent(EventType.Command, "ProjectManager.PlayOutput", null)); + } + } + catch (Exception details) + { + TraceManager.Add(details.ToString(), -1); + } + } + + /// /// Opens the project in COLT /// - private void FindAndOpen() + private void FindAndOpen(Boolean run) { // Create COLT subfolder if does not exist yet // While at that, start listening for colt/compile_errors.log changes @@ -485,10 +524,11 @@ private void FindAndOpen() { JsonRpcClient client = new JsonRpcClient(); client.Invoke("loadProject", new Object[] { "TEST", coltFileName }); + if (run) client.Invoke("runBaseCompilation", new Object[] { "TEST" }); } catch (Exception details) { - TraceManager.Add("FindAndOpen failed\n" + details, -1); + TraceManager.Add(details.ToString(), -1); } } @@ -499,7 +539,7 @@ private void FindAndOpen() } - private void ExportAndOpen() + private void ExportAndOpen(Boolean run) { // Create COLT subfolder if does not exist yet // While at that, start listening for colt/compile_errors.log changes @@ -507,29 +547,31 @@ private void ExportAndOpen() // Create COLT project in it COLTRemoteProject project = ExportCOLTProject(); - try + if (project != null) { - JsonRpcClient client = new JsonRpcClient(); - client.Invoke("createProject", new Object[] { "TEST", project }); -//Object state = client.Invoke("getState", new Object[] { "TEST" }); -//TraceManager.Add("State: " + state); - } - catch (Exception details) - { - TraceManager.Add("ExportAndOpen failed\n" + details, -1); - } + try + { + JsonRpcClient client = new JsonRpcClient(); + client.Invoke("createProject", new Object[] { "TEST", project }); + if (run) client.Invoke("runBaseCompilation", new Object[] { "TEST" }); + } + catch (Exception details) + { + TraceManager.Add(details.ToString(), -1); + } - // Remove older *.colt files - foreach (String oldFile in Directory.GetFiles(Path.GetDirectoryName(project.path), "*.colt")) - { - if (!project.path.Contains(Path.GetFileName(oldFile))) + // Remove older *.colt files + foreach (String oldFile in Directory.GetFiles(Path.GetDirectoryName(project.path), "*.colt")) { - File.Delete(oldFile); + if (!project.path.Contains(Path.GetFileName(oldFile))) + { + File.Delete(oldFile); + } } - } - // Enable "open" button - toolbarButton2.Enabled = true; + // Enable "open" button + toolbarButton2.Enabled = true; + } } /// @@ -568,7 +610,16 @@ private COLTRemoteProject ExportCOLTProject() { TraceManager.Add("Required file (" + projectName + "Config.xml) does not exist, project must be built first...", -1); - EventManager.DispatchEvent(this, new DataEvent(EventType.Command, "ProjectManager.BuildProject", null)); + try + { + allowBuildInterception = false; + EventManager.DispatchEvent(this, new DataEvent(EventType.Command, "ProjectManager.BuildProject", null)); + } + + finally + { + allowBuildInterception = true; + } return null; } diff --git a/ColtPlugin/Rpc/AppStarter.cs b/ColtPlugin/Rpc/AppStarter.cs index 232df80..b28b4d4 100644 --- a/ColtPlugin/Rpc/AppStarter.cs +++ b/ColtPlugin/Rpc/AppStarter.cs @@ -6,25 +6,27 @@ using System.Net; using System.Timers; - public delegate void AppStarterDelegate (); + public delegate void AppStarterDelegate(Boolean param); - class AppStarter + public class AppStarter { private AppStarterDelegate callback; + private Boolean callbackParam; private String tempColtFile; private Timer timer; private int count; - public AppStarter(AppStarterDelegate onConnected) + public AppStarter(AppStarterDelegate onConnected, Boolean onConnectedParam) { if (COLTIsRunning()) { - onConnected(); + onConnected(onConnectedParam); } else { callback = onConnected; + callbackParam = onConnectedParam; tempColtFile = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + ".colt"); File.CreateText(tempColtFile).Close(); @@ -57,7 +59,7 @@ private void OnTimer(Object sender = null, EventArgs e = null) if (COLTIsRunning()) { // we are good to go - callback(); + callback(callbackParam); CleanUp(); return; @@ -88,12 +90,21 @@ private Boolean COLTIsRunning () WebClient client = new WebClient(); try { - client.DownloadString("http://127.0.0.1:8091/crossdomain.xml"); - return true; + // this must always throw + client.DownloadString("http://127.0.0.1:8091/rpc/coltService"); } - catch (Exception) + catch (WebException e) { + if (e.Status == WebExceptionStatus.ProtocolError) + { + if (((HttpWebResponse)e.Response).StatusCode == HttpStatusCode.InternalServerError) + { + // until rpc is ready, this should be 404, not 500 + // todo: still does not work - colt crashes :S + return true; + } + } } return false; diff --git a/ColtPlugin/Settings.cs b/ColtPlugin/Settings.cs index 47090cd..9500690 100644 --- a/ColtPlugin/Settings.cs +++ b/ColtPlugin/Settings.cs @@ -10,7 +10,9 @@ namespace ColtPlugin public class Settings { private String workingFolder = "colt"; + private Boolean autorun = true; private Boolean fullConfig = false; + private Boolean interceptBuilds = false; /// /// Get and sets colt folder @@ -23,6 +25,17 @@ public String WorkingFolder set { this.workingFolder = value; } } + /// + /// Get and sets full autorun flag + /// + [DisplayName("Automatically run COLT project")] + [Description("Automatically compile and run COLT project after opening it in COLT."), DefaultValue(true)] + public Boolean AutoRun + { + get { return this.autorun; } + set { this.autorun = value; } + } + /// /// Get and sets full config flag /// @@ -34,6 +47,16 @@ public Boolean FullConfig set { this.fullConfig = value; } } + /// + /// Get and sets production builds flag + /// + [DisplayName("Use COLT for FD builds")] + [Description("Use COLT fast compiler to build your FD projects."), DefaultValue(false)] + public Boolean InterceptBuilds + { + get { return this.interceptBuilds; } + set { this.interceptBuilds = value; } + } } } From be16f6c0e5fd1cf53da2c5efc6962bd840eec1b5 Mon Sep 17 00:00:00 2001 From: makc Date: Thu, 13 Jun 2013 20:57:22 +0200 Subject: [PATCH 3/6] added rpc authentication --- ColtPlugin/ColtPlugin.csproj | 21 ++++ ColtPlugin/Forms/FirstTimeDialog.Designer.cs | 118 ++++++++++++++++++ ColtPlugin/Forms/FirstTimeDialog.cs | 35 ++++++ ColtPlugin/Forms/FirstTimeDialog.resx | 120 ++++++++++++++++++ ColtPlugin/PluginMain.cs | 69 +++++++++-- ColtPlugin/Properties/Resources.Designer.cs | 70 +++++++++++ ColtPlugin/Properties/Resources.resx | 124 +++++++++++++++++++ ColtPlugin/Resources/colt_banner.png | Bin 0 -> 24124 bytes ColtPlugin/Settings.cs | 2 + 9 files changed, 552 insertions(+), 7 deletions(-) create mode 100644 ColtPlugin/Forms/FirstTimeDialog.Designer.cs create mode 100644 ColtPlugin/Forms/FirstTimeDialog.cs create mode 100644 ColtPlugin/Forms/FirstTimeDialog.resx create mode 100644 ColtPlugin/Properties/Resources.Designer.cs create mode 100644 ColtPlugin/Properties/Resources.resx create mode 100644 ColtPlugin/Resources/colt_banner.png diff --git a/ColtPlugin/ColtPlugin.csproj b/ColtPlugin/ColtPlugin.csproj index 82d997f..9e413c1 100644 --- a/ColtPlugin/ColtPlugin.csproj +++ b/ColtPlugin/ColtPlugin.csproj @@ -86,6 +86,17 @@ + + Form + + + FirstTimeDialog.cs + + + True + True + Resources.resx + @@ -106,6 +117,13 @@ + + FirstTimeDialog.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer @@ -153,4 +171,7 @@ + + + \ No newline at end of file diff --git a/ColtPlugin/Forms/FirstTimeDialog.Designer.cs b/ColtPlugin/Forms/FirstTimeDialog.Designer.cs new file mode 100644 index 0000000..e8ea10e --- /dev/null +++ b/ColtPlugin/Forms/FirstTimeDialog.Designer.cs @@ -0,0 +1,118 @@ +namespace ColtPlugin.Forms +{ + partial class FirstTimeDialog + { + /// + /// 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() + { + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.checkBox1 = new System.Windows.Forms.CheckBox(); + this.label1 = new System.Windows.Forms.Label(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.button1 = new System.Windows.Forms.Button(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.SuspendLayout(); + // + // pictureBox1 + // + this.pictureBox1.Image = global::ColtPlugin.Properties.Resources.colt_banner; + this.pictureBox1.Location = new System.Drawing.Point(0, 0); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(468, 60); + this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize; + this.pictureBox1.TabIndex = 0; + this.pictureBox1.TabStop = false; + // + // checkBox1 + // + this.checkBox1.AutoSize = true; + this.checkBox1.CheckAlign = System.Drawing.ContentAlignment.TopLeft; + this.checkBox1.Location = new System.Drawing.Point(22, 148); + this.checkBox1.Name = "checkBox1"; + this.checkBox1.Size = new System.Drawing.Size(417, 30); + this.checkBox1.TabIndex = 1; + this.checkBox1.Text = "Please check this box to take advantage of COLT fast compiler when building your\r" + + "\nprojects (you can change this option in COLT plugin settings later)."; + this.checkBox1.UseVisualStyleBackColor = true; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(19, 78); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(430, 13); + this.label1.TabIndex = 2; + this.label1.Text = "Please copy the code from COLT and paste in the box below to connect it with the " + + "plugin:"; + // + // textBox1 + // + this.textBox1.Location = new System.Drawing.Point(180, 110); + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(100, 20); + this.textBox1.TabIndex = 3; + // + // button1 + // + this.button1.Location = new System.Drawing.Point(180, 197); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(100, 23); + this.button1.TabIndex = 4; + this.button1.Text = "OK"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // FirstTimeDialog + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(468, 251); + this.ControlBox = false; + this.Controls.Add(this.button1); + this.Controls.Add(this.textBox1); + this.Controls.Add(this.label1); + this.Controls.Add(this.checkBox1); + this.Controls.Add(this.pictureBox1); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "FirstTimeDialog"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Thank you for using COLT!"; + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.PictureBox pictureBox1; + private System.Windows.Forms.CheckBox checkBox1; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.Button button1; + } +} \ No newline at end of file diff --git a/ColtPlugin/Forms/FirstTimeDialog.cs b/ColtPlugin/Forms/FirstTimeDialog.cs new file mode 100644 index 0000000..8ea960d --- /dev/null +++ b/ColtPlugin/Forms/FirstTimeDialog.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace ColtPlugin.Forms +{ + public partial class FirstTimeDialog : Form + { + public Boolean InterceptBuilds = false; + public String ShortCode = null; + + public FirstTimeDialog() + { + InitializeComponent(); + } + + public FirstTimeDialog(Boolean interceptBuilds) + { + InitializeComponent(); + InterceptBuilds = checkBox1.Checked = interceptBuilds; + } + + private void button1_Click(object sender, EventArgs e) + { + InterceptBuilds = checkBox1.Checked; + ShortCode = textBox1.Text; + + Close(); + } + } +} diff --git a/ColtPlugin/Forms/FirstTimeDialog.resx b/ColtPlugin/Forms/FirstTimeDialog.resx new file mode 100644 index 0000000..7080a7d --- /dev/null +++ b/ColtPlugin/Forms/FirstTimeDialog.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/ColtPlugin/PluginMain.cs b/ColtPlugin/PluginMain.cs index 6bb296b..5afb768 100644 --- a/ColtPlugin/PluginMain.cs +++ b/ColtPlugin/PluginMain.cs @@ -269,12 +269,28 @@ private static Image GetImage(String imageName) private void OnClick(Object sender, System.EventArgs e) { - new AppStarter(ExportAndOpen, settingObject.AutoRun); + if (settingObject.SecurityToken != null) + { + new AppStarter(ExportAndOpen, settingObject.AutoRun); + } + + else + { + new AppStarter(GetSecurityToken, true); + } } private void OnClick2(Object sender, System.EventArgs e) { - new AppStarter(FindAndOpen, settingObject.AutoRun); + if (settingObject.SecurityToken != null) + { + new AppStarter(FindAndOpen, settingObject.AutoRun); + } + + else + { + new AppStarter(GetSecurityToken, true); + } } #endregion @@ -292,6 +308,8 @@ public void LoadSettings() { Object obj = ObjectSerializer.Deserialize(settingFilename, settingObject); settingObject = (Settings)obj; +// debug +//settingObject.SecurityToken = null; } } @@ -450,6 +468,43 @@ private string LineIndentPosition(ScintillaNet.ScintillaControl sci, int line) #endregion + private void GetSecurityToken(Boolean param) + { + JsonRpcClient client = new JsonRpcClient(); + + try + { + // knock + client.Invoke("requestShortCode", new Object[] { LocaleHelper.GetString("Info.Description") }); + } + + catch (Exception details) + { + TraceManager.Add(details.ToString(), -1); + return; + } + + Forms.FirstTimeDialog dialog = new Forms.FirstTimeDialog(settingObject.InterceptBuilds); + dialog.ShowDialog(); + + // regardless of the code, set InterceptBuilds option + settingObject.InterceptBuilds = dialog.InterceptBuilds; + + if ((dialog.ShortCode != null)&&(dialog.ShortCode.Length == 4)) + { + // got short code - request security token + try + { + settingObject.SecurityToken = client.Invoke("obtainAuthToken", new Object[] { dialog.ShortCode }).ToString(); + } + + catch (Exception details) + { + TraceManager.Add(details.ToString(), -1); + } + } + } + /// /// Connects to COLT (todo: rename) /// @@ -489,7 +544,7 @@ private void ProductionBuild(Boolean run) try { JsonRpcClient client = new JsonRpcClient(); - client.Invoke("runProductionCompilation", new Object[] { "TEST", /*run*/false }); + client.Invoke("runProductionCompilation", new Object[] { settingObject.SecurityToken, /*run*/false }); // leverage FD launch mechanism // todo: does runProductionCompilation block? no idea atm @@ -523,8 +578,8 @@ private void FindAndOpen(Boolean run) try { JsonRpcClient client = new JsonRpcClient(); - client.Invoke("loadProject", new Object[] { "TEST", coltFileName }); - if (run) client.Invoke("runBaseCompilation", new Object[] { "TEST" }); + client.Invoke("loadProject", new Object[] { settingObject.SecurityToken, coltFileName }); + if (run) client.Invoke("runBaseCompilation", new Object[] { settingObject.SecurityToken }); } catch (Exception details) { @@ -552,8 +607,8 @@ private void ExportAndOpen(Boolean run) try { JsonRpcClient client = new JsonRpcClient(); - client.Invoke("createProject", new Object[] { "TEST", project }); - if (run) client.Invoke("runBaseCompilation", new Object[] { "TEST" }); + client.Invoke("createProject", new Object[] { settingObject.SecurityToken, project }); + if (run) client.Invoke("runBaseCompilation", new Object[] { settingObject.SecurityToken }); } catch (Exception details) { diff --git a/ColtPlugin/Properties/Resources.Designer.cs b/ColtPlugin/Properties/Resources.Designer.cs new file mode 100644 index 0000000..57867a9 --- /dev/null +++ b/ColtPlugin/Properties/Resources.Designer.cs @@ -0,0 +1,70 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.296 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace ColtPlugin.Properties { + using System; + + + /// + /// 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("ColtPlugin.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; + } + } + + internal static System.Drawing.Bitmap colt_banner { + get { + object obj = ResourceManager.GetObject("colt_banner", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/ColtPlugin/Properties/Resources.resx b/ColtPlugin/Properties/Resources.resx new file mode 100644 index 0000000..b64e1dd --- /dev/null +++ b/ColtPlugin/Properties/Resources.resx @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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\colt_banner.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/ColtPlugin/Resources/colt_banner.png b/ColtPlugin/Resources/colt_banner.png new file mode 100644 index 0000000000000000000000000000000000000000..a791622362833f1bfeb1d80ef24190bce2eac672 GIT binary patch literal 24124 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®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 Date: Fri, 14 Jun 2013 19:18:50 +0200 Subject: [PATCH 4/6] better authorization errors handling, COLT-276, random minor improvements --- ColtPlugin/COLTRemoteProject.cs | 30 ++-- ColtPlugin/Forms/FirstTimeDialog.Designer.cs | 13 +- ColtPlugin/PluginMain.cs | 143 +++++++++++-------- ColtPlugin/Rpc/JsonRpcClient.cs | 17 ++- 4 files changed, 114 insertions(+), 89 deletions(-) diff --git a/ColtPlugin/COLTRemoteProject.cs b/ColtPlugin/COLTRemoteProject.cs index 68665bd..2917f47 100644 --- a/ColtPlugin/COLTRemoteProject.cs +++ b/ColtPlugin/COLTRemoteProject.cs @@ -2,26 +2,26 @@ { public class COLTRemoteProject { - public string parentIDEProjectPath = ""; + public string parentIDEProjectPath; - public string path = ""; - public string name = ""; + public string path; + public string name; - public string[] sources = new string[] {}; - public string[] libraries = new string[] {}; - public string[] assets = new string[] {}; + public string[] sources; + public string[] libraries; + public string[] assets; - public string htmlTemplateDir = ""; + public string htmlTemplateDir; - public string flashPlayerPath = ""; - public string flexSDKPath = ""; - public string customConfigPath = ""; + public string flashPlayerPath; + public string flexSDKPath; + public string customConfigPath; - public string mainClass = ""; + public string mainClass; - public string outputFileName = ""; - public string outputPath = ""; - public string targetPlayerVersion = ""; - public string compilerOptions = ""; + public string outputFileName; + public string outputPath; + public string targetPlayerVersion; + public string compilerOptions; } } diff --git a/ColtPlugin/Forms/FirstTimeDialog.Designer.cs b/ColtPlugin/Forms/FirstTimeDialog.Designer.cs index e8ea10e..b319f18 100644 --- a/ColtPlugin/Forms/FirstTimeDialog.Designer.cs +++ b/ColtPlugin/Forms/FirstTimeDialog.Designer.cs @@ -53,7 +53,7 @@ private void InitializeComponent() this.checkBox1.Location = new System.Drawing.Point(22, 148); this.checkBox1.Name = "checkBox1"; this.checkBox1.Size = new System.Drawing.Size(417, 30); - this.checkBox1.TabIndex = 1; + this.checkBox1.TabIndex = 2; this.checkBox1.Text = "Please check this box to take advantage of COLT fast compiler when building your\r" + "\nprojects (you can change this option in COLT plugin settings later)."; this.checkBox1.UseVisualStyleBackColor = true; @@ -63,30 +63,31 @@ private void InitializeComponent() this.label1.AutoSize = true; this.label1.Location = new System.Drawing.Point(19, 78); this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(430, 13); + this.label1.Size = new System.Drawing.Size(426, 13); this.label1.TabIndex = 2; - this.label1.Text = "Please copy the code from COLT and paste in the box below to connect it with the " + - "plugin:"; + this.label1.Text = "Please enter authorization code from COLT in the box below to connect it with the" + + " plugin:"; // // textBox1 // this.textBox1.Location = new System.Drawing.Point(180, 110); this.textBox1.Name = "textBox1"; this.textBox1.Size = new System.Drawing.Size(100, 20); - this.textBox1.TabIndex = 3; + this.textBox1.TabIndex = 1; // // button1 // this.button1.Location = new System.Drawing.Point(180, 197); this.button1.Name = "button1"; this.button1.Size = new System.Drawing.Size(100, 23); - this.button1.TabIndex = 4; + this.button1.TabIndex = 3; this.button1.Text = "OK"; this.button1.UseVisualStyleBackColor = true; this.button1.Click += new System.EventHandler(this.button1_Click); // // FirstTimeDialog // + this.AcceptButton = this.button1; this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(468, 251); diff --git a/ColtPlugin/PluginMain.cs b/ColtPlugin/PluginMain.cs index 5afb768..c779ee0 100644 --- a/ColtPlugin/PluginMain.cs +++ b/ColtPlugin/PluginMain.cs @@ -136,7 +136,7 @@ public void HandleEvent(Object sender, NotifyEvent e, HandlingPriority prority) if (toolbarButton != null) toolbarButton.Enabled = as3projectIsOpen; if (toolbarButton2 != null) toolbarButton2.Enabled = as3projectIsOpen && (GetCOLTFile() != null); // modified or new project - reconnect in any case - ConnectToCOLT(); + WatchErrorsLog(); } else if (cmd == "ProjectManager.Menu") { @@ -325,6 +325,29 @@ public void SaveSettings() #region Logging errors + /// + /// Watches for COLT compilation errors log (optionally creates COLT folder if it does not exist) + /// + private void WatchErrorsLog(Boolean createFolder = false) + { + // shut down errors log watcher and its timer + watcher.EnableRaisingEvents = false; + if (timer != null) { timer.Stop(); timer = null; } + + // create the folder and subscribe to errors log updates + IProject project = PluginBase.CurrentProject; + + String coltFolderPath = project.GetAbsolutePath(settingObject.WorkingFolder); + if (createFolder && !Directory.Exists(coltFolderPath)) Directory.CreateDirectory(coltFolderPath); + + if (Directory.Exists(coltFolderPath)) + { + pathToLog = Path.Combine(coltFolderPath, "compile_errors.log"); + watcher.Path = coltFolderPath; + watcher.EnableRaisingEvents = true; + } + } + private void OnFileChange(Object sender, FileSystemEventArgs e) { if (e.FullPath.EndsWith("compile_errors.log")) @@ -475,65 +498,30 @@ private void GetSecurityToken(Boolean param) try { // knock - client.Invoke("requestShortCode", new Object[] { LocaleHelper.GetString("Info.Description") }); - } + client.Invoke("requestShortCode", new Object[] { LocaleHelper.GetString("Info.Description").TrimEnd(new Char[] { '.' }) }); - catch (Exception details) - { - TraceManager.Add(details.ToString(), -1); - return; - } + // if still here, user needs to enter the code + Forms.FirstTimeDialog dialog = new Forms.FirstTimeDialog(settingObject.InterceptBuilds); + dialog.ShowDialog(); - Forms.FirstTimeDialog dialog = new Forms.FirstTimeDialog(settingObject.InterceptBuilds); - dialog.ShowDialog(); + // regardless of the code, set InterceptBuilds option + settingObject.InterceptBuilds = dialog.InterceptBuilds; - // regardless of the code, set InterceptBuilds option - settingObject.InterceptBuilds = dialog.InterceptBuilds; - - if ((dialog.ShortCode != null)&&(dialog.ShortCode.Length == 4)) - { - // got short code - request security token - try + if ((dialog.ShortCode != null) && (dialog.ShortCode.Length == 4)) { + // short code looks right - request security token settingObject.SecurityToken = client.Invoke("obtainAuthToken", new Object[] { dialog.ShortCode }).ToString(); } - - catch (Exception details) - { - TraceManager.Add(details.ToString(), -1); - } } - } - - /// - /// Connects to COLT (todo: rename) - /// - private void ConnectToCOLT(Boolean create = false) - { - // todo: clean up after previous connection - // for now, shut down errors log watcher and its timer - watcher.EnableRaisingEvents = false; - if (timer != null) { timer.Stop(); timer = null; } - - // todo: if current project is opened in COLT - connect to it - - // for now, create the folder and subscribe to errors log updates - IProject project = PluginBase.CurrentProject; - - String coltFolderPath = project.GetAbsolutePath(settingObject.WorkingFolder); - if (create && !Directory.Exists(coltFolderPath)) Directory.CreateDirectory(coltFolderPath); - - if (Directory.Exists(coltFolderPath)) + catch (Exception details) { - pathToLog = Path.Combine(coltFolderPath, "compile_errors.log"); - watcher.Path = coltFolderPath; - watcher.EnableRaisingEvents = true; + HandleAuthenticationExceptions(details); } } /// - /// Makes production build and optionally runs it + /// Makes production build and optionally runs its output /// private void ProductionBuild(Boolean run) { @@ -547,7 +535,6 @@ private void ProductionBuild(Boolean run) client.Invoke("runProductionCompilation", new Object[] { settingObject.SecurityToken, /*run*/false }); // leverage FD launch mechanism - // todo: does runProductionCompilation block? no idea atm if (run) { EventManager.DispatchEvent(this, new DataEvent(EventType.Command, "ProjectManager.PlayOutput", null)); @@ -555,19 +542,19 @@ private void ProductionBuild(Boolean run) } catch (Exception details) { - TraceManager.Add(details.ToString(), -1); + HandleAuthenticationExceptions(details); } } /// - /// Opens the project in COLT + /// Opens the project in COLT and optionally runs live session /// private void FindAndOpen(Boolean run) { // Create COLT subfolder if does not exist yet // While at that, start listening for colt/compile_errors.log changes - ConnectToCOLT(true); + WatchErrorsLog(true); // Find COLT project to open String coltFileName = GetCOLTFile(); @@ -583,7 +570,7 @@ private void FindAndOpen(Boolean run) } catch (Exception details) { - TraceManager.Add(details.ToString(), -1); + HandleAuthenticationExceptions(details); } } @@ -594,11 +581,14 @@ private void FindAndOpen(Boolean run) } + /// + /// Exports the project to COLT and optionally runs live session + /// private void ExportAndOpen(Boolean run) { // Create COLT subfolder if does not exist yet // While at that, start listening for colt/compile_errors.log changes - ConnectToCOLT(true); + WatchErrorsLog(true); // Create COLT project in it COLTRemoteProject project = ExportCOLTProject(); @@ -608,25 +598,48 @@ private void ExportAndOpen(Boolean run) { JsonRpcClient client = new JsonRpcClient(); client.Invoke("createProject", new Object[] { settingObject.SecurityToken, project }); + + // Enable "open" button + toolbarButton2.Enabled = true; + + // Remove older *.colt files + foreach (String oldFile in Directory.GetFiles(Path.GetDirectoryName(project.path), "*.colt")) + { + if (!project.path.Contains(Path.GetFileName(oldFile))) + { + File.Delete(oldFile); + } + } + if (run) client.Invoke("runBaseCompilation", new Object[] { settingObject.SecurityToken }); } catch (Exception details) { - TraceManager.Add(details.ToString(), -1); + HandleAuthenticationExceptions(details); } + } + } - // Remove older *.colt files - foreach (String oldFile in Directory.GetFiles(Path.GetDirectoryName(project.path), "*.colt")) + /// + /// Handles possible authentication exceptions + /// + private void HandleAuthenticationExceptions(Exception exception) + { + JsonRpcException rpcException = exception as JsonRpcException; + if (rpcException != null) + { + // if the exception comes from rpc, we have two special situations to handle: + // 1 short code was wrong (might happen a lot) + // 2 security token was wrong (should never happen) + // in both cases, we need to request new security token + if ((rpcException.TypeName == "codeOrchestra.lcs.rpc.security.InvalidShortCodeException") || + (rpcException.TypeName == "codeOrchestra.lcs.rpc.security.InvalidAuthTokenException")) { - if (!project.path.Contains(Path.GetFileName(oldFile))) - { - File.Delete(oldFile); - } + settingObject.SecurityToken = null; } - - // Enable "open" button - toolbarButton2.Enabled = true; } + + TraceManager.Add(exception.ToString(), -1); } /// @@ -649,6 +662,10 @@ private String GetCOLTFile() return null; } + /// + /// Exports FD project setting to COLTRemoteProject instance. + /// + /// private COLTRemoteProject ExportCOLTProject() { // our options: parse project.ProjectPath (xml file) or use api diff --git a/ColtPlugin/Rpc/JsonRpcClient.cs b/ColtPlugin/Rpc/JsonRpcClient.cs index 647c40e..9a258bf 100644 --- a/ColtPlugin/Rpc/JsonRpcClient.cs +++ b/ColtPlugin/Rpc/JsonRpcClient.cs @@ -8,6 +8,15 @@ using System.Web.Services.Protocols; using Jayrock.Json; + public class JsonRpcException : Exception + { + public String TypeName; + public JsonRpcException(String typeName, String message) : base((typeName == null) ? "" : ("[" + typeName + "] ") + message) + { + TypeName = typeName; + } + } + /// /// Based on sample client from Jayrock author /// http://markmail.org/message/xwlaeb3nfanv2kgm @@ -49,8 +58,7 @@ public virtual object Invoke(string method, params object[] args) object errorObject = answer["error"]; - if (errorObject != null) - OnError(errorObject); + if (errorObject != null) OnError(errorObject); return answer["result"]; } @@ -65,15 +73,14 @@ protected virtual void OnError(object errorObject) string message = error["message"] as string; if (message == null) message = ""; - string exceptionType = ""; + string exceptionType = null; JsonObject data = error["data"] as JsonObject; if (data != null) { exceptionType = data["exceptionTypeName"] as string; - if (exceptionType == null) exceptionType = ""; else exceptionType = "[" + exceptionType + "] "; } - throw new Exception(exceptionType + message); + throw new JsonRpcException(exceptionType, message); } throw new Exception(errorObject as string); From db23b98bd801948d87e7ec35aa5545057e1ec77d Mon Sep 17 00:00:00 2001 From: makc Date: Mon, 17 Jun 2013 14:14:07 +0200 Subject: [PATCH 5/6] COLT-265 --- ColtPlugin/Rpc/AppStarter.cs | 17 ++++------------- ColtPlugin/Rpc/JsonRpcClient.cs | 2 +- 2 files changed, 5 insertions(+), 14 deletions(-) diff --git a/ColtPlugin/Rpc/AppStarter.cs b/ColtPlugin/Rpc/AppStarter.cs index b28b4d4..b0bdbc7 100644 --- a/ColtPlugin/Rpc/AppStarter.cs +++ b/ColtPlugin/Rpc/AppStarter.cs @@ -87,24 +87,15 @@ private void CleanUp() private Boolean COLTIsRunning () { - WebClient client = new WebClient(); try { - // this must always throw - client.DownloadString("http://127.0.0.1:8091/rpc/coltService"); + JsonRpcClient client = new JsonRpcClient(); + client.Invoke("ping", new Object[] { }); + return true; } - catch (WebException e) + catch (Exception) { - if (e.Status == WebExceptionStatus.ProtocolError) - { - if (((HttpWebResponse)e.Response).StatusCode == HttpStatusCode.InternalServerError) - { - // until rpc is ready, this should be 404, not 500 - // todo: still does not work - colt crashes :S - return true; - } - } } return false; diff --git a/ColtPlugin/Rpc/JsonRpcClient.cs b/ColtPlugin/Rpc/JsonRpcClient.cs index 9a258bf..a642ba3 100644 --- a/ColtPlugin/Rpc/JsonRpcClient.cs +++ b/ColtPlugin/Rpc/JsonRpcClient.cs @@ -29,7 +29,7 @@ public class JsonRpcClient : HttpWebClientProtocol public JsonRpcClient() : base() { - Url = "http://127.0.0.1:8091/rpc/coltService"; + Url = "http://127.0.0.1:8092/rpc/coltService"; } public virtual object Invoke(string method, params object[] args) From 31bb2b46a592f3e7612715b292849853412edf2e Mon Sep 17 00:00:00 2001 From: makc Date: Mon, 17 Jun 2013 16:15:11 +0200 Subject: [PATCH 6/6] added FD debugger support (bad solution), autorun option in dialog --- ColtPlugin.fdz | Bin 0 -> 85551 bytes ColtPlugin/Forms/FirstTimeDialog.Designer.cs | 25 ++++++++++++++++--- ColtPlugin/Forms/FirstTimeDialog.cs | 5 +++- ColtPlugin/PluginMain.cs | 7 +++--- ColtPlugin/Rpc/AppStarter.cs | 1 - ColtPlugin/obj/Debug/ColtPlugin.dll | Bin 19968 -> 0 bytes 6 files changed, 29 insertions(+), 9 deletions(-) create mode 100644 ColtPlugin.fdz delete mode 100644 ColtPlugin/obj/Debug/ColtPlugin.dll diff --git a/ColtPlugin.fdz b/ColtPlugin.fdz new file mode 100644 index 0000000000000000000000000000000000000000..d911c68915bfee99251ea9bd127fd72649410ac7 GIT binary patch literal 85551 zcmV)LK)JtAO9KQH000000F;2yLI3~&0000000000022TJ03;|vVRL0fX>utqP;7N) zX>M~bP)h>@6aWAK2mn`r(L%HdF5N|*0002i001EX001N?LSb`dL}_v%Q)5-`9QL*L~17y$ivIKp+Ib z=hrU?vU!21qxw9ZHa#9L{wlLr)z7xrm1kA)v3YN5Y|=CjeY9IEzqEY7oT7f;1pV zfCXtmkPr*ffgtP;EfEL?g3M@oPy-JG*kTbpfLs`w@pqq&&XWn~pqYPTFo0zqXqMl7 zWH*3dm-l1^$=H6Q8PM#1grJds!5ml^w3i;u`4@chH_T3lOaz?#TQi8pF#gdD_K}&O zX12dI<6|{*{b3ORSx)_>g&PYK{G}a)*{Rue{#FO#Fjw(@s{{MU7oa-wzts`^r4GyD zjQ3j|73Iaf7dA1G z2%y0#;SmCnbUeb~i$~QgOkG}gGB;lFd){{z+P|`g5A{+|AhjIGYkI| z96L#{U=ol3=P$u2QY?}P%f&l?ghtB(IGms(pRkA{Mr;`5Km;7CN*=Tg&`%23F?h6p zL3tFg29N^=@Dt+`pou_Rq4>e1APYe-8J6=bI2DROa~s$y@i6mXOq4*JGANxKqzMFD z9$>$PqgAo7!S>YvkQ?f$4w6w|$-tIJ1L%7JVZcM5!_tDtlURF{;+4>vzi~izlY-f; z1&Te7jdL(1h^L|90S87IxiMRyF~If&qvg4Pb%hKZfB=r-QGpV#KpYz&j6eq9Q48Zk zY#`X90)dl{zWB#^252DG=RnY9Y#4B&c%i2PL7k`I^jEOTVXPwb7+!+^qLueZsx}zt zn@1tg0f%XD@ub1UiUu1CUS_}^&}(4g5MZ{$;4q98AeSx<9}Eq!zF^$+q@#q~qYye? zBHkl^fODAzf)Dz`hMPQI&@Uio!J`rp0?-i9@LU4${78&5Agz-SoMi(rf`&ljX#_NI zSQto$CFW%cL4YqdXc+bl<|#h*><1VTJb=eA%nLvcmI{3t%k2dmS$F_PAT`Lr38V`( zPDCKhF@oj@L3@m#JwnhOBd~xy6!R7kj^zi|1ju#dRSpz5S~0D_AU>uOXbE`C0W=>W zrWXvo1sGNQV0uu-c_@z+*v0gNBi7g~XBH-eFymp%DFhVCV*`3_3&y|>>i~v}5Lm=0 z0EVIMftHkr#{nd91R63=C!i%K!3Y90z~lqxECKzMQ`GQa5JJFjTY|IW4A78Z!~qig zBUlB132-p6rwgdd6=+7`#QZQ~Y*8>g3Mb-+5#eAc4DANIsRZD61~dpFj2>t>1{@D|vOmGB~06C=ut_NX=ZYTtf-47sK5Qo@fxE!Lmfh)0~kX(of1n&rb3~?vJ!C$w9?V3hql{!edb1t9S&!Zyng}DnN5JVif2ty!pcflb7 zZ%5EYKdg6{Zop|Ce*osk@B~1>wB0=W#D_;m1`Pzn5bz(piP1q2a7X1l z!g2nEI|<@gac^RN3MjZ^!)Oli=nnA!K{z5h@Kl5G!Z7e-9sG<(b_D|+awv&6u$J+_ zlN6*9{Y_={7Zo*dA|VL8S-|td3ZTFQ0S&Ofiyv1nJizG-3kGfbLzoE?R^tdI{z(WL z3@95sRwh6N!!QsXb!2kEAYvyDEQ?_>DcC+x9}&ph2Ejv^5-1MX9bkX4dBVXh7bsam zz$AeNa)JDzpeLqK9y!oE0xuWvAOY4YIt&{>z#sxKc?2Pj2b*3X73elK3|N5R#9<7N z74V;c0yr=n*??Ji!5}v;Hm^mF@|q_cWC#NplyMn-9dwQe#&ZJ#9;Gl$^6^+OJC++< zgHY_cfP?(t(Ta`$n@EtKjt2>5DyD?!=)4NXW;ga;VhF)KP!7PC1~BJ%Zh}sDMuE~n z=W!umr$XPtI*Uae!eqeEMT070!0FI9b`cj1bSxM=d|?>m!m)hpTw}FkryeY@V1G|N zjpuDpBL`L^*y0ioA03BP3u4fBK=*mEz5;a&gcLk8m$R21A|(U`X-#DT$5}mI#-yxGw)0C=uq%@5DXzJGF?=>Ay3J9;*~E2+Ymkque1t zKLXPWs}UQfz$CPk@FD#t`QVZU!U>5;}JBM+g#n zb~w0C+%b?%!Ah5fPS*2rKdm{S|Z`c7%?am`@gKB~V4AB8af_ zf}KNbKJhaEI>8b2bD)QSVQXA^Y63oT1Tp;;u<{_j<0M)?O3RHPJQ^J(`3)jS0UA;S zDFS}SN%8crU%!B&1BShRz<6;rY$W6kH69sQ!`eW>RT$=u;RkG|@q7VVkPpEg*4X=! z5D58IwEYI@DkBqAti!g zMTm}J%QUclCWd?k)9tUjNjqQ!J@#%wPD1zRM4`teI8eyau?s!|Os@q5Ws%_SFMl1v ze{Xic)Wd+8tAl`N8Wv9!2wr2+biWCS0>Nu6nh8J<1;W9NNCEf88pAtR(_iW zt{plYQ5Fz8&;V?47!2;bqi`}PF^?()cR9r6Aq?`i2?7W65WFt{J3r(EcAbO81^NxZ z$xi}QKj3!FM+5-aeg7yJR3s1&2CP;xV!FRJ_$*?2y4zs@I*S+=0epV?;~ZBZ`A3eA z!bzb-zb!hxud+h4o&VSbR22|v?DqxOA`Dlb0VTE-)(%o4jL&a7fJyn=4ib9U@g(5$ zpCZECA^9C9aH{?$1?CJ(H%j+AL}a)i;0|KmW7`mr%MO2R1NSVNzim^;+9rejCh5q$ zvft+Y7p;JW$EtDa=&|ZxfxO^;S`V(4PJo}M0Ze;BI%*i-DR7fXCBsn=^E3hj*sW0j zMvT2^BVfSR1JqpzLSTRT`ftC%ZSo%$5FPmq*06sj0_Q6Yr1%}qSMdA=P80|&_KpMG zbfCZl2*U!w%O_@(A6I*1IAt{0{KLnlBJS$~aD71`z=;i^1NSy?AO6qN z^pEePM0cF%L|{a8sbr%>qxjsT5E@?MKRL`RjQc)-8K}8t07vPMWqJX{Bpw`h@j8+Y zjKO3+f^6uwppLhIu~-7^PEUsU2=s|D?VtmUU-CQ!$*s!VJE020i1(j((A#AHC1 zlkBL=^8si)fq8*}ne}({{)gXGVMPansRJ-z{SW2?w-EG4aPSk@Gy#n_aON=M@{JD6 zHyAeQu*_NiNU%u+0fI1C;7HzQkiQu;RE6xwwO~oy7!2J4^ytv7zl{((Vrm0BB9P;n z3_Cyk6u<~B9KoWXeSyGA!ye}tO|qjC9z26-Mfd9J`C01UXO1$KfH27avq z;24hwnT`g#{u<=@f;H^~Jy2t$VhN9kz8(|tbmJ%(5Tp!$Q=ohPO+ihDO?+zdqxtUz z!%9O(P0Oc=ph3{4Qd7`TQ}VGPD1b_aG8Mbc@WT;g2udtl7J?Fp4<&*UK?=lY5J8Th zz-q%T32Jf#Eig)ppheICqa_G3YC1YVKuwRJN6-P(LqM#_ z(R~o`w$cv)YiX=PK0?g<-+3j4o#dmv3JSRfLEgjt`3)b~SM(sb2a3H%1~Y-#h3N)( zgPE})8#w^7U_lEIWW|C(AjpPY!WSX<5bWLbXwe>hYjXVU2`GC3nA2!Iopa=HCg8Y* zkZWnGU4r2L)JR1PTsR=?>%Xjl7o(T@6)yv{y_c^w1_e>JL))N`T5i@3s7okoJO68+ zQ9xCQAE%|JZ0I+b_|^QP8H#~u<(GellT*vw+>@Zh4g|3)^77@(95Si*w_l@}M4Y`& zh)Gzuys{hR7wk$?&$>n*qNde(iu@+teT!7rt$b5NH)>N%cqb$jwODp^HQIy-&+ z%^iz?S(+{GVyno73K zJ*QdpHp=veGd+&#YP&nqr}=f>+64Zd`CFrtk3intg_qsC(1zy&2l74aErmsn5wnDQ zMW)|*??y*aF?|2n|E=HVYOOPEAJV+>A5MI6f4El;as4hoH6L&bC8~9KX441drrWHI8rtB{) zDclNcdH($xp|$>LkB*d2&0|aj>bJ`kl=WH?hU5mI5Zzh?ikatWk0$&~VzFjJJjXC= zZP@A)Er!{jdY)H006@_u^wR)wXB` z=@7CD#-WXso)))M(NR!yg_0Gi`*$5VsU_F>gpG?u z8A$SdW%{R03Ev$e<$_*hxJgJf6i0|GWxzOCWEWCb?krFd6Z+j@q0(#3c=F;Wldjj$ zKzuO&HJR%U7IT^H@oKN~&wY$!#}H?~?W}ZqQj+;9BGQrI)k_9{4k8ZP%kM5d5=qzm z_(tMa{S=jGm@EYm6Q7QjYyHknhp7-3jdH=jx;`dZVy1CiI zy;saP1k{_ZrMh`t78-x5d%y1~>*I2_uO#78Tc%{(j)r>zkJ{4dTDh0&p=6MVv77p$ zu$T;RnQN)*s1>PLU59l2-(2sWN9#So($UPD=2QK)FZzB?j#MANTMD<6)0LX`hvm=X zHahGJd3aS8PvE(26%R$;yRVMYaj& z@Qpl|izlZp1mAd>H-pk?vA4c9sMJCuP7^lTa+lpl-^Bm&i36>aT1=WbSwX^uu0^LO zu<^wGvyYuAX{kk$R%)%Be3cBsu8I=>T33C&w&K}e$#=W%G5j$7%6s305bu`-C(e76 zQ-nEcyfp3Uwt33E=VN*$4h9~Tb-#^O7 z7iFS+UWm_~uQs)*jj6vz-u4N`;iDM0I#Wi}n)! zg9<5c9%%gD_GCJX0Ddy}1L~9GF>noeK1aiul_3?zmt#iaj0{6{Q4Ng=3+2PIkQ-X` z1&mjmn7^pdwTU2h&fYSMY9AkbFTZiYw#3p$wb`j8(67M4swDABFdkQ^&1{Q?+mI%o z#>>lhsQHY;tLo`1mw$RJ8#4w!>{BY5_qb+F_vLQb?$@4zG%}$@I+I|$#%;ON9lu)R zYP!ycUU{ukYcAJ0;uLksjv-|A)Wrb>s`vAn_6p~DRk@#X+%v$tp-hsC(Q;)OU7e47 z8ebAWRJieU%gwdH-O8aZ_%^FdbF#+vtAvyk6P|kxp`?Y*1tr<&i|N_d-8H3F{LI8^ z6rGVVxxg=E^H1YeZ>&`aUFW+hGzii#< z`-(!B?~cs=)tU3@aiJ?TIede?<;{d#cI6Z#IWf1M@io!&QmsIK$rvTxknd_83whOW zslH$$8vmgC;7N2@yyoi-@+d}2xLDszC#Qr`Kxa$|zm-_7(zF-VD~?lKvYSr~W#=S^ zWAgA7xR+kOgtI@WHi5V2ab+uJE=WcD&2Bo3m$`dWZH_bsI&d}_Dyw{ItRYPHrR=C< z+}@Hc%rAtpUSQjvt2y1LTX!AyXyMsOCY>`^GYqyfmJQDvP96SeWtkVrY%j-?Sv_m*{mb^I}7udY(DYS^OsRna~}!M#;m!-(62H$AfiZ!*x| z7U^nz->RteRAcPH&RgFTx48wG&WSp3iQI7&;kZBNWpG81_u-d=UM+OJPLoV& zPjVm4!!9vK=>-Mh7}#wOsu_3q^y|L6J$U+85^LAKum%V)oKkeR`}q1qn0^vE}(4xjC(}w&~D28UX>~AnKzw{Hojkq z=G1q|=%JH&hh;=>CvvZCeVnDzgs|;L&N&f&*3;i+g~sl+RxWeLow^hduBbPViQ%8* zBheV;fwrHQmfUNYGTQJKY%FRYFRH)QfBoip((H3=+<9U+v(UIcAj)XQ;IO2lWjr+8^OWu>1xj&AO-D- z?i5iB`+HFGRocnl523aD65(>_bgPbK=A#eF;ml(>&dyi(XRgXi$fk;qq;E0L=GZ^T zsBBy5h`iUf#t^hF@Jt0S$UB&&{WN32KCD3dyW?s}NlZ>CB#F@H)#^0wJ}2SB7e9j; zE^}VFkbP}`0|_<$=&@RppC_$$*G!6vp>N!KQPx-PrBZs%ef;)r7ulbF+7i`iX?gv& z4go@h%8G*@*=H5s`5|vrNaCH(2^)9Ci&BT8Jq4bXL1o?)Bw2R)HBZNg^gBzQX^oKd zs-9Cbhn@^SCA%_uCLkb>^?a?;&J*oN4<>1FGi_|ZJLe3YzG8>3uTA)g>doPjvvO5qlFg&WQhnGTqD)r70)zVAhMm!80kHF5ZEPhGEIRD5)q6c?J5DG|ifGX_GV$w6d>SF>%M;^@NoT*> zXeo|0FA02~wv7l0ZmpGC-t0T1{ly%-6D})be4FK8>lpm5xV?G#4RE1@+yg$Y2L7I2 zC^x}NC{MIE#unxI8v+kv6owz^=4p$@xH{SJBQK*co=#|Y1yMm^@P{9%>h0>~jX^26 zqrAN^)~@_WJ#QOVC)*1se?znj%3Z-mO3GToRzgxlMob(fEG={LKb3jAdpWtGju8eZ zFYwPx$B&+}8u$y^><9gSz;42S+8sLjt?0@(%l>aFKZZYT#ZHx)c9GQr!{GNh9!I1} zz^4XqN>m+!0e;ZHM-XBF@q$()H!vy(Fe0@85_^DA5TXVQc|vRfMkl~5kQoh(g#kpI+Q5)Iz#|Azhxh@5 zXsmQY;C(C`tp3>kkm&+MAPh=BCMgC;@MKi2-A{WVJ-w_kUPx8li-t&99;CLl3kvB8 z%mmWO3+Zd^iF9%Y2wYuJc1U3EFeqCuSARh~RRfU8$=w0R=LIl%BE8UPq$}FpLGUjj zUTCDPE7}ub!do%{A;cD&asD|=ExuQJ; z@hH^&JkWq;fC!Kfk4)DCh5g@Lum=XZ!217z{KGr?I3CffVXS?DxCyE_dAV78@FV|; z{y#BHSj=9+UdmoX#7;ukTFe@k=s!#O!J{9d21(L%RND@nk4UmlPzz+&Y8t_rV z+V%^0@Q#w73^ZE*|GHI#pnTf@8Ut{IK+W3Ang|N&CIPA%2qoAwTS6ev|15Cux&c_8 z7^KxZHEadO*Ynaj6-ZG#%N!`mL0MZF0(luvx^E3G{{O98jlGlM6|XDW7iDeHZi3bz zji8^K2R0z`ihdr}wk{~}zr%qF4I^?kVf1z=@SB3&0>+h!cq=@p4h%#2Ix(TMwy<2G)#( zpqPNIu!sm!Qc_SvTtZS(gdZs?EFvl-4E#z8h=|KdNXm*zA&(wTKpV!+UiOlj#*r?d zr@-mx<>etOB;@PsE9fgGh{iYwiO9&vfHFiy1po>GPk(nWYd-;Z&y&Xz)KH$b7$*|~WiBvh0oWJHzK zRn^r+MMR{mvh*=bI0qMiwETntQZWiG?E-{--kfVMzG%_ zSp0ZIc!g$Y?~{X%$$2&P=FA#1Dpx#GT0<3Kk-IQN&BEXa@NkmfhuZK-p8s^eX7*P* z8%tky??T=7@`1TudufMo;7n`lz{8H(b%o_Uwyc%aFUe~e^WhPykC{i3zGE=2f2M_V zXPCFv-+8qk%AfJ5O_4%4^8T!wQB6JN_Uk$&EmPMwpH-de<1O4T`E@<*Tt4O58#+Jh zA~W#oAsh10q5avkTEtwqLnTxy@I~iT-F()jb>{9%5Ke&9XxoUHhsRQ=b7#Gb)(V&!}gw^d35UUc%>7=i5)Qv7&F%8X`^BL-Y4u zOk0@-WDa0O5x+@E-pctLNYo_Puo3%dS#10rhdhW$FjE$@6f$`NJe9`XY)*C zdWlB8eZ;S`+eR(-$~Kfr6*{3~zX*crbA*P)Oeo)N4{FBLTA3eK zOno5ISg*7(!vFbhNW0=W^Uv{xv>CMZOuBvXPBL6TVI^%ti8SaJ^-5g-()G`QgJui( zy7~ugpIbUC86xwqj+MSS*t7FaDX!#RbLZ-0FF7Qgd^b5Z)$1&CJDJU~n#go~uby&D zmvYvXwUA0= zt~n8Z7=v0a{9K8YKwabT_QlMw#MCp2nYk|}v+W!NW)i;nB^^}yTwx|#@8qT>`=!z6 zRjZ!s_h&+*(;j71L(YX&Q6S3R^7JQs>buD)am3gAB+eX>t-bH-AUbXwPyI4x+kjG#kI`tTJYxwK;UW7dlo>aOg&iG+ksr#cO6Wz2z| z7p|CJ+OWH}`t=m5I3>CMaYu+)ji`hDhnCJPB5KdA_}A{ap688iLu-6KiOaF-->tIg zo=CM{7|Ov&m1nbW=)JM+K0BzjoE+y|kZbgXAnlw%prV<=;s;pe@ZMLjlI$754R$Zyq8>xYcJk5W%u<@0J? z{WP^}ynScyo1j-u5kY$vCy8|%mgaf{tUDFO`ny(p} z>Z^oX6aym!Hbb+CZe=Z^)OC{^XN$|eyb>rTN~Sq$VYn|{yYVt~;9K;fE9F)~7p<1`g}rAu@U&B0D)du6_+ue+2VZtZamu{n<&s-507yBXt4 zX1Dacvc6C#utRU@@x5XElT{0*YrfvowilabAq*;eXFmH!q=~^XMJRX z#Jl$z9ZLgc$NiLTm9Sd+8=FWoXa!4s07+VdGQ*CI6V#CSO4y~OB-2_K^&401&yCp8 zPboJ_I89_Z9=P_yiz8(HL-11@Wa&cJPkTKVI@|r2absksEuHWN`t8+(hNnf3o{5uW zHH!9UiLG3C;PYKJ%>4AaPMn0}P}S!1wv&-)s+G1e!@FtfbEULz(G(7S{rAKx-Yo8( zpBO?v-;GsJn#va1XHeu*wACMIF^Uu*KAaO*jg2jRdqMP|g*}cxus>>V_|3e&Zu^B# zG0z0cKXap2d#6|FP$a#mRr9&`7Y*2Vsy z>F}NRDpbuSRwzG5$7&!TryyzERHENrG5-Md^uGI`jEb4S$i*}5m(H}Ap6b1H=CkRk zm$7TAeA$M~(=_?*j3eC^JKL=$OKWrAxqha;E)PLAY%jDgP0P1Utap%=li*wC89byh z-`W41ltkLmN>W!J9PCEO%wWo%*_Wf!bUP*t+LNiacPC7CTB<`ixPM-=!SBj0hrmOF zM!~D|V?3dC{MXiqw$@;rW6e(w>K{q_oek?SF~Iv|wF1v96k#(TTNap7fXx&Nm*C%g zI~wU^Fixy0U%+coh_F|^I;-1IIo~FG97>kWuX57*3*%~SX`vhb!HOHfi?=(pJmIg# zgZ+1fBoFGV{q?u*XDxon)^$ik#aZXdT~=5!+y8QM`(5|5jTPGz$tBrRpMjZjISN7P z*S;F9yH6~?1<-sjN&56X=`>@~DJCO%k^CTQi{0j|iiYZnJif|T%#%KB~&l+MLjSi z7dgY^Xei&gl5k@*&BC-ez&U%+=~;i?DY@?oj}&(z(t0HAc>=hATxVeHn zGf>6zStq9LRy^{$3h@Hcf<89fwCaFE#BCpF{ftb|%VbKNb4s7Zbx!R{ntGF{i@PCYUP_N{@uF2R%k}38$UYanq9RVT>sp2X1cg< z|6PTLe)Dn~8&#Ounrp~zi__vP^#G%4OTwPv8_5AqnV22zyht@4smC7ilXL2po?--yljcq*VZ^I& zwc-1sJI@YZU!6Z$4+-|WVPW@VXjTtHGgu2@9c$g(Qkh8T)HIuNzcF0!d~%R5uHNI$|%=0&)^`Owo_%gULgAqwd^YA$*#YkrdW-`ZJ}Xg@OTl zCNx#3TPyZ<*w1|lN?G3<2a-Q%!WG!h+Yj{8v!7@Cg7|pXCs%(OkHBQ&GpWQf%cj%M zVD|SB8O~I^%U8t9ObUyEv&FeWGH`_^h;omSg;ZFcQH_>t(l-3&xu8wK){6FMvX+jk z!;3~=7TqHX^a27^Hen|@_-MRSTkW!@_Q@mZ0n*xR%+*W&Q!9f) zkd#JZa%D$p6*l6yse4kiPmGDxSChB1B=DNPl5Q@wd9yWpSExJ<%)BSr)It%rbVuH; ztDh|oO*z$z@9(Yp*r(|!--j`T{2@h@P4v~U`W(kR5+9;$PPtOM)+-H+zcNPDp zo%pSw$AVnqg#BwWWPc{Kr9&_8q>`?q%Hxdy6Nv+yHUbHb0sWvVR^$%MQrk&&|CU;@o7^Y7DaP{JJ#BMp@-xLWqn(m1IiuTbR{6HiT_L zcbPo@5R$y?7*UHzz18W*c3lC%^kFYTl+H*%gZk!EJp8Uq<*TPpi=%{7r!{cM3o8B*mKG`<|gA4>zh|kD~RhA59&va807csoa{4I z=sT}4q&9u;-j|6xZjs?=eG7}md$4`~*s=OxFIRT=C(4l%1_7^xSG47Q*W9i?Yq%HI zM(TDJjzRwU?nRtcpOJj?VmcLSG;$xgYe^ty|on1u9 zkgVS{<;4@h`;=7N_x2~ZVD3+QphL({pcd$q3~esWBbt}W8I-J-Jr10RM-FOL+?@`_uP;5 zF1h*QP^ULPQo46TD@m><%F+{xgwNe~U3Ptit?%fR3WqPwniQZjk z@L=p*AADxr)=UBH@^G@^BvekV{~80$L{2=_mm=FrnI(}%5~1_dIct3No5gUva(Y)Y z$f><)=kU~G8+&{oyv#O>^-ZFshM=N)4u+=j9}V&KPcAn%yx}eyvWzNL`nEYSG&#Cr zeC?ZVnW{LIC;`2A;?v+REh4Xvh>PFMO4}&*=GiyIG!Pv{r&E^k-8_t6DB}O?Ei8i|H&Y4B-1@JEv}G z$FCLm^{_utiU>0Z3Hm_KaTU^hmIqDC^!CPbrgBp-&ziSV!d@nc!d+h}@d}qVO;R6p zsl3@ihl0fD!1J?}iyQB2ZBwtZ?9ex|s^!+HG@DX33n`la|f;`AsfN zv>R`k(8E}|&dKe@#>LS(gybhYj2`2>l6D@Y*~C`k5dW`{p|%^!sbn0`bNs^dO7D`q>eOWq4?`=y`o>@|ZJfMNY#e z{@$(TdT&<)E#??4U5B^&ryNY8w1|K9wZM1>fxA)F)3 zEhHJzNJpU-y{?Bo*Ilgm$~TV?n9I~^kaV5=Ugt33}pk|$^msYY2Gnz_UA9Wrg|SxzE$=3t$h!k z)Xf&N-n#f${@~STJA|jYiaeMJ+DXJ&8ofq(v=4svdRwxeQf0l1*lH!7DQ<|@zd|_< zt1r`Cy{CJ*HLTc*ygRDUV^2S7t6&MOno#FNU|SiruXX)w{r*|X$V~a}1XiY?&BLVp z{E!=)KOBe8s%a4$!kDWF-_(EE{Wb5F7A54y^fdNB@y8EBF$T8Puc6Emg-$h@Ji8t5 z`;3=f;xEp`AxAe)>jBr#=0}o|4?{z4LRo@WHb-yQHknkVs470%_~q9*`-7crxiY@P zWO6HH;k9nmY2%=Di&Zc2Y+){MzF4WJ=^jtLAvLGAd!88DEnGVwyo6JG@epA_}Zjs2#_{mRR7nCoSx6-?lt)6^OKPJ3! zoo%q=hxjYk?k@$2-&$oyq%O(lKKFQCy6<1Ob-HJWRo^X8sj6*B=ZlQYkou*DRnq$XT5$Lm`svfHdqJ|}Z7O{!96Iqtrn$_{xevcT%g^I- z$wR$(k(2+zp7(i6Y{HM@I?q}&fe(xM+Kri)3`@+-<=QBvYaz@-Tm9%?(B!tE0R_3SU1e2hn%*M zV+rUDG}ef3J454>qTy}gH)hi-u)ebJQ@L+XsLJs0<6O_Fgj8NDK^lJ1ut%gP(MW>$ z>C5p`i86gtlzE5!mAs!S<{vslr1mPf{cvGosw9`NX_Zrd;8km#>7i~+u{ivdNz`Si zTrQKVt}>y!o#K+&)G4XYm8N`rFJIKXXaB*KT$yy`i$+jUS-+n?_uam5B%QDG`f8fZ ziUF~E0mgR8F;weYn|&C)+X7ktHY3&cR39THNME_y(yKN zno(A^=H+#MV?+AmN28k>O%2bg(@cI;TcAE4^gmQ+J|S?ymfVVqd@Axj@#cM=%{9Ze z)T_bn|7P?xej`cUS3!#9!K$2IJs_LT>SE3XwQ zb2j@Ehuz#bX0SD;s__*_D{I?x z28(rXrJe=0B%x{}`3h^r3VR1{YX_6d^>dF!M%MhI+Rw@P4CiP1wUvBRXB`kr75&sR z$aXn-v`@=9?sj)`MPWtLg#xtD8x4*9_zIhr!CL~!bmrZrUTHO+0t`zFA{~~@a$GpaLoR3TPFuUhg?m~4I=|O06{Wt=&tbbY1 zQ78F!!KN1e4gajGN9dws(u@3uFS6Fuv<1$oK2r!!eA2+c&ixL*fPRW# z(`&w0FAFWc=I*QidX+oUGWqg(z6sNFi#4S}E|s{q?vL?Q!bSw;Z_u}nB8UrBz6-1P zh9wEPn;5_OzBjS!c;n4Cx5HbN7W)m(T8VA19F+<;vxv;;G_JJOkT#S*&>E=nZY8gE zWbtTh`gQ%~uU&OB`yPA7kq3h@=F+fhbqEKV55vPDNkTQo^5wP;10`Yw&0qPOFSVU# zXG-B>p#8)|qcNYHyFGaFbiL|jpV*6gKj1&&^DAVYbqAnxFU!%K3a?rijE#zoEq3Lr zzG&)o&81i6Oz-|>&UG$zdo9t^w?tuL#OLmR*E(_Va7sn}`Nw{ulUBm>r}QFPnMvBM zOC~HY7;%{0cz|f0@O@p?&|~Hw=t|vZciQhD2jma~4M8m=)B^DQ!C;cr$cs{)3=*chBLy|-U z52g7{^;Qe(RC3i_P=3~)KMh~~$cZ>_cN@OioSesSq5CH_Pa==ci9q)!4+dY_roL!) zA>R}-HATtFUJVYmbG&u?_T6X_!mG^8-G$8aBo;5XnnLv2SfXA9jultC|s7A<$z?NMBul$VUR z%x9=Eqcp1N3;JQaTW$8Cw1{?~ckx{E^mBWZ7PoM!@d*b#mO^8i=Vl(3e9ILYOWx&K zSL$5cdGpP*ik(LS9wv4d-6^d2e8KfTt)dcq#GPvB~f~3e8UzahvE^{s& z!QIYqMumdw%-R+QiQN5_B$}!*^QR(tbv3@MDr`HX>0)HD5?3shoc(GV=p|`Rq=foQ zq|ZMI_(bX7{z9lm@)~uo?=F;UfLH4VAM`G%gY>tkZiaK_VNBx0WAKKBi6kpM*C)!F zjVD)VSA1LKUnuj8n_N|dx~k6ox^IfFlvPnOZ63jM0P%d*1|7ezg@paN?1agQ}mD#H8nW!FLxP=g+}OlYzXb==sF*7Kv{IRowE3@e?YpY@QboG2g1< z!lfbaERpR$>uxV*yfiM~e=;!?Xg{$)Kcu7J^gUE7u$i{R4X<2}EVzSt_wmxs?vGZ|dDk)GlGdBi_4STg`Uk>MeWvpr)X_$>z+x z$ifH8S*;K{&m3vnn+!(Wx9;kYL7&|W;j-=!3p7`2GIxH(t|6ZKd0S6cTmIS2mW1y_ z8Dld_&x(atB8jE?r-X7}+$EoscYunu8q5W!krB%tBy=@2E+s<-ekMlT6=q4Iy7qR~ z;ax0;9b?UFiLQdX&qJ;Hq$f;*ci>G-0xJh~<9k!1F|6)CIPOo*X~=mj9ylFZFcS+l z=oafZ?G(I9xi<6p`nHPNxk+UQ&Y@Hu)(=mG9f`xe5A6~K@mij!P1|vHX-<7M+?_PM z@%GBdybAF)T%EWU3T@6HJ9ypm{duhYiwfuJ>&<4~apx7xDf+7zYWlm&OENExSk&p& zhcpc^R#kDJ(Nha4c5bElaT@_DYkIRjr^|;%Sa`M%pNTg2y$H%NPbiM3vZCiKZy1lX zBc1ir5S%j7Jm<))o8UdM%hpiBAk7tK#vmOPsaQ84WOL6|`{tQ|taXkTE#Wt)Rg48N z8I@Z8!#x%g=Qe`d$<1m*Cx4nRv=;|%*xQp!F|>0Exqa`kdVV{>bTLITNvNQIU}if0 zV)Lcj7rt%AJoS!YbEF;p+FD}w#g9kVvu@@On$VQ1-LRNv_-OO|_q0ZKC?ecm^ou@^zID_ zkJ8uT_h$KhrBChAMfpzGyUUzTi@$qSrbk)x>hl`1L}^#$pQF*vP`+XgiC?!L7RJuM9unA>ZgH`E_J6zfxSi<^OK_+^@0f(D+RO z`EDXfp&9K?C0dIxZnF2ZislrLEs|!V@SF|eq8(9d)|9K7{+t>~O|LlLP@G&F;Ss5P zAKT=4@^Sx(d(K${*09}eGWfTR*!!){EsdjO(}o1J7GA-U-SXu(&fmO0e@;6N&dM57 zVKr+LiFeVQkFUA=$JeNsa~{`}Ei4@O{ifKj$OlXjmQw@{X)WGM9_H+FHeTqJ?W^5xuuU$<_L$zx6^6ONnJRHo(pio5>Eq)=%>!mijEu_i3?^omgv04YM*M7-j!htAb&0vlj zI-&Y$TO1=Mgy5^On%#+nFLd@X_r%mbd+1}BV##dp*=n628^z5~ zg%Zv27Fs-^D@|fK(Y)f;xPF?dAbgi}Dsr53eBB5!s9b5(WQL~ zhW&3mG)rF-$n2PU`uc6^6koj6aNb!KnR7p1^=jPqI!_4@UgenO+qE`x=-XS7(CJC|Z= z_o>xC7_-XN>l+?^xsbAsXBY{MSVPFRhMAwc4v$rQ!S~t7InRVsS;^kDjDqwvmt<^oqIL)|9Ta)9qY^yYV)=fqmmk|0re<26 z$ZxSN(r9EY53*V^%I-*!4VE8URfw-Dj&G@x<|oZ@?|tm^ux9X?ds4`2ecllB{QjQ% z@j6X9cA~Y6w_lQJAY-E+$|b2cN=2yqOq?OJ`frB8KxNjIis|Spw-O`YDLO|!H-mAjp#58 zQm9_Ylr-qq=|1Ik6Etxp{%j`%K(=5OpU$ z?CTfV{2)Dp{7Z(@L!BTwArjKi-h9PF1IALv@R+ zcJe(JO!Tup{}P6R&r4) zzDcGXmos%Saumua5~g&wWuV9bbZ3xIm*nG40bopr8cqjI9LXmJo$sGaj1t-@oyb*_h6Y z_u|X%s64+_Ro%TBR&PDAWug8=(o#VH?~URE#i!5tFH3W{HqtCKx7Bqfg(xz-J`9oB~!%7@is@5_8_Luuf-F zA60udd1Y^#bdi0|C6_P1_OhN8AK%kVq}QILY1u6d6aI6&ank+|Z=EFnTPLMx!;)|srSmw4w_ZWmnXQGMXVkL)Mo*Jk+t_<9Sls=E$7X*yQu4vnhAyhwm>aL)YpkI~1WxVE*(UUFTFj_3v-D3g&{axHN>25k)P zLPx8Hx`u*rezSzQiu=hrujzRWz}OK&mJ-8v8eM{7D?`S71h@O&_OB{ChRVc1cLjG}_HEaKLn$ zqAZJ|=O;NkZ*NA8Ol&g}lM z&&wP0d7eyQy^Vx3nwlm}ls^`JHxSo_czG-Qck`<*-**p^k7ma8KNr@}X^XRs8PXk( z%DrvY8Nn1$VMyE@@}!DD;+F_T<55MKKn+7187-Ez+W1JT#6sSwSyDtpwN}OxmecVn zJ~zC+nk+s@bn4cvJa{ttO`$VQ|I@Mx-G~R5)6z2sdV$|}={y$l3$rfHvt|caw)5%I zKhMvQuS6bgfBS6sh{GAK`%uV_ta}z*CU$tqKQ)FRCO?TiT1Z?Mm5}u^%W}Z%`WeNqf@{hl zcX~zFa98ccjoW(@CvD=VVfzCbQ@3Ar-jI3Pq4QvfAU?UY%8U~cG@cSkZ2VYC-MN*H z%z;RSG?A5Al5i?WXlvrr{vugJPjY8oR|S;EomumMajtx%OqpCEuAb_#KHGWY8pU%vDqG zptN)hgM>r``_ zks09)Au~sB;x1*^%G-`=(PIJIhQ~ED5{Y%fy!~l%CIXxg`KwT`rQ3LMjpCe=;=kR? zv?y)`l&m1m#Cumw=(-1;G9iNqU2jK60Z)?ghPYK>PZ$28TK~YjzVA1gGi?R=hpbF; z+M6YEeLXVDh2>6|RrU7N*f2x*ajWpyV+&c$HB>*9RAS!DVdmf9xf}H^Qw2--OpMbZ z`HwkG&TSHKlAaQ)(4C#P*@P4e)Yw4ZgzxP|p3S$z-yFMqM8sm5(55p&?+ zQ=lS+^Yq3Lk^xrBTz4(2@1&}|bJD&+?NE`MkzZcE^106y2GgU3N_;fPMe%&kOXme;z(KisjTg}GYvs@x1 zC%bW;*vyC9ks&vkl0LS`ea9y*CA6sIHKwoadwIMCUfVrx*dAGWnosKiM*h{}5>Uai z5gRS{IC3_bu}{ng@BW(#)|5T6yz*_W&fhCOwuD|>!(#KNG%AB*@E-n(jTH0H=b2B% zpRxzw;1i_ye&Ra4;*=cAbL<)Zz55~c(e&eu(EM!(b;|@1$Hsh=`FgneBuiv%KyZn$ z&*d2HPqnj`SRab%Hp9uewfFE?-E(6lt7DR*@5j?q2mg4aA9Q|d)VgDzo35LY&O|03 znL|6>ND_D%6VgiAw0H|y$`{$K>N$yr3*Q>Yr+Fai%GhMus`WsL>f=4{`vw%D&FSqt zZfd%}KDkM1`=mPc-U|0FfKWTc8C6%%t_YC8DVrghoRd_MiL#?}BZH}SJDe-KiAu?< zc(aLeWNoGbKK4%DLJeN(PG1*aC4Z`%KQ8xi?)*~Et0op1BEn6*9g6R>0rhH~Z=1)_ z|CWKV)*{V*ao~DUb}?h_%jDGbA&UbqRlV4z7j6zk&QMZK~Y*fz>z3I*sdEofJE9Mh|hmeD-T;dy&XF1X-lHTS84F z_#BtgoJU<`aXd`9y*|1O8NFFgVDqMilRId9ye6~&i&EBqFXX@k2o{pcLt?|sCMGgF z1Y>Y5d&eatA4=kJZ%*(x_-pm$dFa0SPQAt+4&Sv)bhMe-puBzK_bXKN4OG!((MPT&DoOv~yqNG{eU8AlH9HIIlf`Nh zMQG|V_&scSQ|V))o9C?a-0B{&qc$93|NGs+u3Z2^_xDGkRY9-99~Z)LE?S?%d-Zcm znvyMcigVLT2A)!|`W`?9GO1Nzz7W_K z4To^kX8K+0SLPUYC3WHUBj2l*zg*9VaB3{HnSLXeYNCT8$fa2aOEb?VCR{>m&fY%p zp`*(4?Iw^8_UgQT9C*c0w85~-zrieh`b>${ncDTMVHu_oT|_3`&*#NA%t@2{pADbh z{)Q9zhVuYPVr?07f!#H#JyoOt>wmd4^ufP{yh*Ztj*F{N+ej*cE3Lfbe&!X@U&t&K zQj7D$K4h+dam33pir_V^K*5{f>*Tp64(gv$_Z>YRYF-wUbcqSZ(xp}7*E{7_OeI;~ z=nbtCb+!Ll9DBa0bEwj>(jqXy`oQN8Mls>zy^qD&3$<$P6O~CFCM>C&m?C3TbY-Om zm0XlYXCM8$g=Y@bH{XcFe^VgI*(zPkdoX|F9sh(LBXy$1&J@0jFTG_}qt?m0f!R5B zOAa4??ZL!r_KmO#|6r=DkLk_8WOo`L8`q%O$lz`9M9Avplb&p|p2DvyNpf9DS6$8= z7Q2MY%?yGcVCE`>>{0~LI=B{6PxpwJdIdkX;|h^7&+4x{MpR5{cs80j@O>QVaT&^! z9%~~VbhzXQnp*H7@mbN8BM%zCv87JB>s^{E;O<{ zkY&UA>iC$Z#PMpZ<>c(e;>nU#u!DR#u73nn`TJ3n4~24>0nUBcV`Ecsp9>$SQ*vp3 zKJStjVc`{~LHWI~Yl5#w$p>$Zr_BPTPv5ZUdJ(jUC{j6BF8%$ zn4FEu+O3n4sFY-9q%-)p`h~01bb0R*tH)X3Vl(_)oBMj{F28+9wyH%@!MJ#9jXvXL z)K^aaIWei^y7A91UJ{E3WIhq}*jJ$*_LqYb6q~PEEPh*6=ls#<(}T}p@q$Hh{&slm zAHJ?7qAoVm4z=i7MogM8YO5E6tO42Sol`#SH&a!kVpD`mx{Ds-@kSW<`#P5hWbn(R z?Ul6R^|xG`FbC5sMN(uAUYb*%ecL7J!zpzQa}IrRJyvVHIyT({}6Z0+oSmzL9Wrio1+DT{4 zUhm-WTt3g6;z^UtttpbBr|m1%xp$zvD5hOcslsylH4bal2B_3q z?BcUs^r}mquHuevwh&1-tzL%ruji&mM-JPG6{=(AL8kqS+ggnxW|7`K;^7oeDaMc~ zbZyvqYjJm?3PalUNNDFJkK+WzTg|O}8j>LmwT^Dhs^;lISAleGd@Ga}PYljFBQ;&L zcv__St`9JW)iNolMJ)NIV^A4 zSN$iZ8o#S1l+^3@O%jY~qTbnv$LA?;xm9j@sl7XJV`%uHo{Z6bKmYfZU$_)in)kN+trX}y z>T=ZxioYg()c^KpP4I#3dR{Ja@K4g5$5O&uU8-m<$IMv^t;f5{Tl5NB-t72z97!LE z%A{i7TE-my=-Vt@QE+<0vAQlBHYAy$`h}d0A~x+Q<64+%p1U~zU4oa37v+3Uy>)t^ zJNvub+TGOLW6-r+(zHT}_B)qf@VJzJ-+6$+)Uf;-Ip)mF@g?7`_KJN>{SHjs@%QgD zzFH&N@gvV+0#j;{Q#ymTWte@~!oBcYr}(`*g3*SjCKxV2Hi$v&S#+@=c*urZ=4zuGD=06^xN z^dAAjHl9zJJ$*RaIJA^I_Za=dH#aD#L-8Y$inK6VIwX1=f8|TC+y7xe{00KBMUpO3 zt_>nzW0=>*Z|=1>EGl(lWCel%chcUSFJAyeYzVRG<2p`Dkc|A++et<61y=&nwYacow}9M(+kVZ| zW~pCi7R|-y>}ZDkjq6W%xV9m)-uF2D3y*hl?tR%vdY!~0CBvKfDfw>mo*l-AcvTJ; z=RdBx##Zogk9K3+`ba~ZibYJwnuTwu?RuJR>Ai72(h;xr#oJOzv%gdx{~98plAWhh zmwgjcT+2_8Zsl9~RUHJHP1Osk(yT_#1`%t9K|`NYz- z_*|t-7B0_6$Usb~OHbcNklV?&wO)>p0#ui3Ga&$`AC-XITViod@i5bRn&x3Q4eHfe ztm|#OfqK<=x2TyCg9I(wq#V;dgsi0_sT!e3LIL93r~si(-bP}KK^?k^L>L56Qrbeb zc%KhY4%K=?0!BIT$wJ1CgL$ule(V}vDI==NhKUA#Uq%mUsg^5U$A4D&4M@wKn}$9l zykdxvX0?km{j#VJ#%cM~8I^IgnQ3M2rmnhC5Z00Bwf$aA)rpYIc*tzf zLf}sJpkh&xz&(nE(z(qqZ^+2w%AYFCTeM6yq#+(NoDbu(; zpMjno^Oe$;uC*4=@tqc?E;)+j7#_FTTnS<9D&ysE@a0zoZY&|qWGYIp&2cSL<+0oe zRclCDCSp=68S}#A=-q{`Xl2R-9GARLgI>I&P&o=eAXMifD0nJ{qfo1_CfyuJcL9{e zbTLux#a>st42NY8nv!tq8h#q^^*#@2JMW=xH|f+aaAVrGrd+Jf*LuTRQBk4yvx&47 zbM&Y^qyUdizXu+1L1Kv?gT(x?0OxLdetuLKs`BH75^i9nIMURQGDVu0mv@oo#ezt9 zkNsf#i+63+Us|!Qu(>-m>#ku=v*2e^Gh*%WC~cu?m)7meoHoV9M98CXlCnh8pws2( z#J2X)_rg1_RWp0y@ySoGBg3x@_IDAHVuNltm$ng^8-EU7{7N)vc|!N7vpsRI6$_HN zc}=Lnk|mpQvwV@9`@uvA%b_OBA({^Yv`wLRh5*gCuiIRJT7}^yh z=Hmkjbjx|r)LAtt$2WuPy1#bcbFI&faSe&_`PpHK^x=tFs40lH-ku33MrPK!T1Bm#1d!Mbu0i|kVQs}~DhoIe#UH@Y4lBycs>ii#5 z{Eg?cy{s)|=IPa60(lZQOZzi%C3C;0$`pRR3b}isc<&pIq3VrPr{lHI$G@J5rN{GS zY$*v*8$IE={riHF+79R8ngIW>jY*E8NtRq*zGfZ)$8gls_0m+^QX<=Z4$9^bGl8Ho zp(IU8b6ZI z%|iQW>;Scb%Sx$JlM6_T#0-A=uPn7u4FZjO7*{*E-}w*f9Y#(O0}TNdWe%oXeTBNB zsf(v1jp4DjUJ7rJCHpVaRFyngO$Il$bFA*CIb7OBNAbvgXroMpZt%z_rIgIxuT~|V zeaK{;@Sal@HKs+c#9|Zf?g_uf20dj21`6#F*ssWPEr_mfX1f z`@x&GFQ4jins1wK^)oN8sqZ_!)t@L;o5gbu=1^dt*Ait`5%jy;YZ&UZ>)X(}#1rVE z-emaHP|>%cWtqpX-E`&Ds(-qBaPDSG2cLdZ$Q%nx%n$mmM!~M`{jLnvu6JBrc)`nF zgl@sqR5xEF7^|>Xn*jmFm=@Td^?CbGdqQ!?B;#5ZzuyCWpkfbdz%%U=}w)WCK{A?3=TtW26K86ysHc0QnjZMJiGZ?6cZ zI#P7rJ*9XgAto8&44K3hWm1BzWn+k&sIX(Hdb#4O&SEY~>}&~i%mjIT}d{C&xdyVQo@npD5hl}rW^e&!6<{UDcr^Gf5?6DU^?&w3_g z&jmYdFgQKfgrWb*!x4vA!0AN@ z|D4OEm)qMtvc0E28Uko&#U6h-czJVXuS4U00MAKVS8>os3>e;g(%Vz00Ub5j25(3Q z+q{FGw3C||qMVRWFUMZ>Npar7c$c}(nU987`Nl^jd$`;n=`jsZaxF0+$&gb5p#bGJ3 zNv*@_>$0}`#*nZgI{0J0iVJRuEfHNysix2u&Qg6SOmTSqQITr2m8w>;7>b- zm%TSr^c~tgb05Cxvl<4o7bhbvrp|NTP1{1e=T(sCZHGrwd-+QIe(ABbz7|ah<)#lM9(F)?a1!(xe_+I< z93?l*wXOl_RCxHCqi28kQH#$h>2%qUheSfpBF>*q7s<{j*T>M#LK*AB<$f9552BAR z!>|+b+KtGR!|_bj-*D2{>kWFy!IbNvdDuEziq)YV;+(dr;?wnGh8aJ4ao%9ENaL|H zOA=K$J5BwrzbV}Hs}#S8eVny&?VVDPLILepL>ER_mL}n?v@}VBs&}|O)M1k^tC}ae ztUjity@*f<=5}MAiY_U#_kW{bSzn)&olPes^zpGnf2j?@ujJXNHh}v1uc*>Qh0#yt zLQbUAqSU^Ag%vv)^MCRQYBhg45>1UB)l|2Os%_)2|Kd2h#V~e%vie()VXqhs*`wDP z8Ajt#&#`nC4{rAd;JeyJ!o(wp#cb~^9xSWbL*>>uyU;CI4HD^frCJ>&L#6FY0Y z*B9D)ceY3GsH=_R$7|#Vu4UsX!t-f+2P$Xhui{@?zkly#RrclL(YvWHIGK~;M@GBAt zkx?S@j8S6b+YJ#uU}4sFijnznI2BiQv@n(5vErzu7U+2=-~bzIC(#dC!{NH#&?OOi zrLS^2&fwY$uK*9C*q1hpK^W@{!%NriV%c|QZc>TfX%8n!{pEHk;p1s=VSKG3tWdRrbfX$(!`_RjNZFcKqO)mdo zh5Vc0$!Q^~g3BnP2(G7%Iqmuygfy&d$y792I@**xJe$1CP_frA)tAR%kXt-y5xC1O zbhl_lMQ=M;xW6@QcrK^e=S%tgXH$@bZ7J9kaP8J%RY zqw&%33x_-b?VANt=9#Z%*EF}sxm5V=d8AuK9V?Aqu+Xj4RC37(3HVq#R%%QX2Ehs3WsIa-m`%-?h6ZryvcdjI1{6$$XcTc>82S@M5U75!Ahzw95xo?)y-~1am@fFVM%T?&s&(J+R&sy!eAO_OOaP=J z`*^KW_qC*uURJ7;nVW%)88>!e zI}M+F?8hh1zWgEo>M`5$%QgR7mwkuPpF15CFKRAHfhrNZvpX6B&+SqmSwD%yXg4Ew zJ<3O_w%TOUG+QYqqFw$JN`;b8Ou~PSDmAnfFtiGjSDzg;h3y-Ti&$+s(p_pJ-S@@g zmD%@+I-oMLG>4@jLE*-G48phjdic}Y){fpT*)HKIt6W>vCNKaRnETM^hy@$!01<2t zB5d2UqJ)P!mA?~prA5Ev`b*QU-OO+Az?xrIonLQf3=eEaE|S)<-IwX;T{*PFp?nUL zr-a85yLh@vTPAblO%uQK`KE4KbV4wt_0TE5SE4z|&4*-$pTk^ssd7nvI|Mqipdz4b)G%EG<>8#noz zJ=rHYO&HimC0R7fv0=*0!3_^S#oiyX( z5u56qqr#*E?=d~y|4^34R(iPBm6(JJ~iK7-|x;H8Pg!I8IZ{B6p}LHU`ctP~`B|{X5V4YqzA= zEa%O!UVX8f*SEad5^s#l8`ga!Aq@z9^%iTHAZ+sWOHnn&m!_2uET`YoskG5r-&ar~ z0GE%rHCB6B!bL_VEy8$FQ8^0fg{EO$TZ)*N%HsotP?no5JNciG-N(CLt*?(2B`g1w z+F&H$YCgB48_}Jsp7JeDyS&@&)pVNdI1l3X9 zp&z8V!Lq`W9s5t!rz}0WrYI;FiY#7QD8AQSRTe)noX|=Q^jM~STXQ_M{#x?hBhsQo zWua^wMMXKS58vKz-|#)_eDtW;%If^CNsF?!E|o?0oX3<*{wh{IpMT%aw!1Q0}9C$NQx3Ik}7; zJ`8j)JDu&r%)0nC%iPHUe=kl)+lO)H>cI;!4mQ^J0*Yb+ zihP=kd|K=^XWEmWXzog3aunGo`a#{wjpaH= z1qNQ*ZWqfNVzzwm9}G+U30KzaY`D87CB3?I;pp?V7?EO;V|s>=f$+W%i;@aD4XXtp z6zTF%mlg)XfY&a@(Mvc*5KSB`6ANuwuMnyb*B1gDG%;kg#3B}EBKjZ9C^`k`$~*6~ z6cACY&|y(t>+XREzq6;US`ROs-#T@ZHC$s#EQ+}C%7*`Ve4VR#njzfnx3jzVO?Hfw zZ6ca~ee=88;m3Sj(NA^F!I#o5&hr_s2-ZIc96T6i2|GL{HaXi`d((GgM^gFK7FD&^ zSTZqZ8@4p5)m~SA=5S`_df|v#3GX}aRgQ^%0_Ti;sk?cNR$K3~o!Mc!PeVz_+Pujn z_Tu8B<700>&{fmb!7>-Zh>68Zeda|*5?$fTvC%-VF*Wt9VA1hznjbu4_PwxNA8~|r z_>TerpsbK~(DO4+}ZSCy>Ahet>Yh~@+XY(iBA^4TB#Pk{8s7h-N} zU#jz@8r{<$X2+|UUti^KZJE5tw%+)~UQwawx#javZs~c#AlZgk85>(ed|ZuHT$Q4|S4DR?g0NrQegxLaz`zL?Q(qp@qcY{6jU3aO;Z z+r=O?X%k%WhdY0>XKJs+#lFHmB$Z-VG}Xs~3O?gC!z=HR4CuYXvWGSB#7}kh(I`S$ zuZ@FF%c#C#{i1pY%1@3%<-cQi#X#MxGnud9jfBiSw; z_dH(Z<>I5Wuf-qD9#22&)mSE$W+k~}6K+sNmzEZ)zGm<1%jlxeoAg#ep{lJjlu7VS z#>yj?@D45Mr$ejNSpEFa#mWo37PGUv#9czhbKm3Qn8w9un)G*T-`})y@}2EpDX3_7 zhHcM1`nCQ}#Nvr(J~frjq^PjJlg0CyCUKgsh_~z7a*$=$k~zZ`*QaKJYu^Rh+dQjwNhzu!`d%@rakFt?dpg&C z?%ay!^B)Tf9z_LmLCSbc_hf0`nalt}C8Z%&OGpz=Uqm;!2dsxy87uv|r8JFv)h2{n z_3|;1{|5spn?$=V_wn3rW^sxbBg_nqdC5{nkJ!BlIPSZBs@8x;qqon-j85CvDQxv! zyjBvC%o5Q{XF=2oR+gsiepg&^f??)tiE}pD@jPY((aA6kp7G-nM0CA1`Bu#54sT7h zp=b1`fqo&JK`q(3%yyS8iI2$Y+8kB-VOzKB(ekqm0!rUGI5 z9PIlFx-5E{Oy36WZpoJ@)6^k$&R^3f)!1NgEKp0U#8Ibr?!CNWni4qEakNoXbf~Cs zDf#3`RM^nP=Kb`fPebYz{_Sm#>E~R2e*6guCRxv=!4IXSxsHGxAqH|tNJ!gLl$%#U z+*x}vvTBWvHvUikx|5=!{#9l9 zRWJ8C0iz;neJD-JejnlID;!MEAw@!gIS)XWbQ&IlW(l={^#}-v8&&WxsQ@cUSdS- zLW(&35t6@60)I5HH)v{=Cog{Ez=?lr6CnP&Wz}QJRF_yL8)m>39{Y<+A&KQoLZy!L z^Q)ser>VDjWH;rx=ab7XMc$O!SvV;I%Y1k20_9GsqLsru?h#CMF;w^k=IREuUUtSF z7M4!c(TnP}>#YhDYfZNMilvO=Mx=K`US-v z3d)i?TEAlpnG(uwiwj?vJvPGMX>0N-Y_JJmwsxSX{A@PvkDyygAsZ~u{3Sdh^;$e znB@9R6KevmzYqlmv~$UL6z<8e25VfIi<_jq-SvS=?)QfL$n&{;WzewD8vCk4L@m{u z(KAJnN$jXy#$ax>Td9e>eQDU3>4xDS{M)jm(k2hi&jIcvr@JPLPyH(Aw@Y)gsn=Zm zR5s`czC5;%spfpblBPkaweHE6AbR8T&pYkERe#6PX1+2Se!i^wZuRQj)+14Q0rcO*Z|(iwdr*7Q`-t24FsHM2I5)$`T%R2=z;73I|o5f9;~cZIoN?1|~J zVp4^ruwx1%E%Bdj%r<(&JR84lJeP@#;!n^3GV^iqrgnB_iz^0dpOBGg9Z!y@2c3o zKb-y5^anZ@G2}I#BgBKN75O^cqfMR*w|0%ba$srCJl=RvYV^&A1vaeTyRIA!w4JRr z7(k0!d|r*C>twYYZKjMV*5HjVSr7L8bOTSHb*Yz6TR)=d;yhudHzdM(P{fezKwg$b zTJ}7%#PFHTj9xRtUGs(~cbys;2wEWT$U<}C7&Y0_%{27{1TuAL`YW>g6@|HF{2m5m z-#>GH?1_&_%2cVeaeRd|brlWA@-*XCB@6qxhu6Xzrq9UkRVW`V0tP zX9?Nu3HiMVrfmtPtZ5$-ik!Z2r$$$nM}Cm;nKb61Z-l-%tabjb;nLpRSTgtHQ2sj2 zv7GZq^h1(9UnOxI-ykLko=h+f%xC%a)2ZDa)2(l6sp5T6?7L-7b9~6nj5&LD&lS^e zi8m7KkJ=U{V59*!Z?8G8eW=LhNjgqHnVd&p7eiM=50CHY^o(_kncdY_e}2!)iPAq= zqwe)l)0ILRa$hzBTz^^^@3l&Ff8fMgbVTk|`$&E$h2xsEPQN+d!&`%TRCd1VFMH5R z-8LH=$e)?8F! zIU_a3A8U4aSXf4=OkTX8cw{)CnR|CA5;u797Ba{(9D^l`7p8#R#gfW3r+@S&;jNXy zP`&;4prDK&y>D-Sx|^HJl!jMj+{Tyi1>*JezMkbR?@|RMRrXWxl}}Hfy}|xIw|lzZ z%GpwgLYOkdSi3T`xj+o?O@5v#D4gwfsJKiK*TqjBYuXcskzBW0HTkkC>t)rXp4qm= zRvgr;efkqN)mIzA;)b8WcSCY;@dg79Z6Da&SoZek>_3$Y2zhLKnP;0*eBwL*VDgZ{ zXe2^h?Rxxqfr8}$xz@F`8sUc{`rluPD zB!sqz15L6s{W;s5*N^7E>+nB3N)&fI)=s`VM>rE2^VNd&BrSlL_2R6`#ym`psU%fh zg!irxpC;t=QM%34vsPEDRM=c;yxt;}4K*3sk8mZQDKjp|9Wc^vu(n>{;KHE8P85oWxUN zwLneXvVvE&Iz4&6T_LA8NoO+f54GHRWNO~nn5zKd_Bd5X#|MwK`&u}!v2kDJNL0Ab z`n-=;u83EIh;q6A_I~gnWR91PuFcu1H>qJ|?_6r`k*_&n};-ziE#w z>g&(R?KTi@^vz`4zBTzElB@m9E$FN+C|}cmrB{70x&B7ND8HsCZ$dQu7qZP1yM-Vz z?x}{_x4})Tg|fMR(-ZSnD($ncpFWxim9c-2@V~rZQ&RllYv2RTn!O0TX@@NHbI^+o zRxIRintTmC#d$fFUv`ajcf9jzQZDD$;`9E3R|g?D?Z(bt+P<&K2=c664-UoqpR9B! zhZ{d}gKv9n@-46l zQ*g82 zP90NZ@R{x}8IOhrDVm^4`coMr2m3c<{2=Mo!0bKBp7wR?v zQ2}uw)a4rh0(cCvoEQLDf&hS&1OV<+fwt}wcY9}B4^)I5F95{gfj&K5VDIMNi;h^7 z^;8v5iMIfN5(CtC9=lioe}7N_fIMURr4p;!{)>hOH`(ICx06ydlR4fo$2sR*!rW8ngzz6aO zLJVX>l0X)MBnP@7uOUd_Hy97*f}+TTCLfwIP*gb~P*e%|XjXwF2cWPcC^jGu6M|s_ zPhh4nYG44?3?l|G5W8?B5R5?OeGZZw_=@O7Ac14hCI%dlsCvCYB7qSks^n=TErc4l zKsLk30R@a+1Tj#I@eBhSh{ZzH#fwdi4c3CD8JfXpW}#V!<{+BuXaYDWQlTk=rWuX~ zP6O}+2Q@auIN>{!>XABrF9I7-!9=y+8XrY}v?m13ERf_tF}?;4F;It( z8jWUr)KeJ6e+?3c;0Q_#$Pn-lkOQs+`UKcOG=T=#+7bd(n}-QdrH!F^Nl++RD1Y|ScvEWO(HoWY`}ns z7D5l$fi^wh4U!y)B|=5M2P5f$PISySv^@vf!~h*Js{I0J>JX!zsUI=wDYv6N>%?Qk z*uWJrsultg)RVnIg7T}9pn7LRf*OZN64bl#i3By0qiFsiL6u-ms!oaxY?9J~@zP{T z5N6;hSr8dBkc(z7Sv|;KXfl%5lY#vuzekP)vdK~7|B0Ly!VZvAoRhNyHz}AX*a1z@ z2FITQ(F%f^$Qs}*!vWieN;3i# z9;i_Fe-Hw;fE%a?!C47mBm|;?6i^X^^Ai>M0*oXA=PfN-Re_2Opakg9`91=@U?ded zvr%cY=zP=wD_X6i6&JV?K!6blsw^lJ6-NO@rE@?zL5e|nK`KE7Kmbxet-or5ek7m| z6#;36rYlq&l^1FRatic7fOWJ76J`byA7%x%OBd!2G6d!Y#-G4Ysc<-o#BfwRHJWU2 zRB0n<{}ddRYZdMe+S~|~M-)w2G}X|2fTlT`ZiqpUsfZDfuMlG(KcM*oF$r=L@!#z^ zN6do6LZa%j#uNwXhh{LE5t!WIyOn_EGc?PaZGD%^w00H2@{#Vh$Xu^8*zL$6r+f3kDVSKUE8h02S*$^$ivWzK!Z=6@@7Z&jZ!{ ze@Yo%1S;cy$^h;RzO~l>lr@|JRL=jD8<<84c>Pl$U>Ye9{7)r=X=Fh3KUEB-kpU@x z6}r{rz^ngKuR%5TKhh|HpJ;^|!FQn2=0d41$Q-;GoD0op^$Z|Gv;#E2?mxwd=mqD~ z71w{4LI+%;RVpPpaS@yjK%#FHUc+KUE`n)T{}d-O4^%||lptDB{ZqHlis_$HL@Ta; zN)N3B|0xsX3aD=WRS+@+s&?IfY6gN*M*ma{@+YX$dC~0z(vh^_OdtEF^3e+O#$Q#7 zR(5C=3bZ5lLDlw8ts{Q}OaLYyx_>n{;7Dh z`YH5R)ngDq_yJDgzp59kK@gx6`Ku;DB?MIcQ$Il^45*0yRY#x_0Yt?9DkvreL==em zrJoc^7Yk(zqy3_2 zTMBK<{}-X)I*FRAqG*pQn%Zc;5f&jKssuv9|CHeL|4R>at^l+xg|;Kmb}pI~Xx3u= zKU)O@n$Vt3G>6gtDYSn9Bpg^l`?vmAuK%`CEj;=EOhwt?77et)P1S$(8W;P2lMuCU z0>5bBe1V|X8jwW*6`D+Fa-k`R=1nx^&{RcJ2TcQz6o5I}wg-6&;tNs^5{fP}7Cl3- z&?~Sifb!^|X@I6Vn)Ya>g3Y1@cd5i6RRKm^B}gGyf;uD{B7l1ja(nu;ehv5<~|t2BbG$GU$)RGXR-|hbp-d?-^tt(u0=+dip^R7BG$GC0;Qk z6@rhCYB@PRDv|{s)!)B86~uQ2J-6}mK#vmWr$YN7P#tjRhXpmpe+wakKE`i^K%gG@ ztq>|`B7Qf73yO*qgjV7YLSoVJH=#ZFqoBQpKLzp%e-WYsMfD{XU?5n97(jdQwm`o+ z0XW(~C8`#v4#5e;9Ew_d?V+d=+|Z-~S_$qzeW7avDj*?*I?z1V2lg2 z5FJ?oMLo?rG#mem6acEVByc7G`?(B`pHZfJRbO?|Mk@BVqwmkEo!-q`hFw45ORy6%D{xnQO|}Sph2fLGM=Zg($eR%m2tRo{Xv>2;E(k=HTpa>| zD3ccf`!H|vDmVlZOpdB6ntTRiD)}k`3n(Su1V^Bb+!>q&-Q>N1J#3tu3<-fQfHn~v z^}Qy7qxy?_zLH2Ps2s%|Bo^F|LIp_$ccCyqFu|iJR=}8S3LPXD{1pW%zMJA9k`&k_ zvO*HU&(R(%N^y{=G2w!fQd$9AaB7gKG9AENO#f_G&}O4t1gPLrl&H~DqeSJ^rgR46 z;HbBq7`P4afu|8UkWiokkbrOjO;9f=AK(anqxk@T;0z=QkO$Hd_z2?zcPura&4RWK z(ewcJK#wpwMjq|q0Z+kvfFx+EqDzYfMxj|C2cW?qXP_UU#ehE)0x}#b3@HZUK~?}i zphB<;Fs2Jy0mlD?egG9 z1v!9RKun>IPzQJnJRANAz7FR^NFp>4{)isLB4Qr_AhD3N$Qwu@q&E_E7D9qwBW(0O zS00uOav7Em@)s-{WCOemq&~C~WH%f|Gqf#($qb&KV+{m=oLNMj^C1oiDh{rc_Ee}U(&zyDt4KR*aK z&w&5SM*{iZKJfhgKTeVV`6c~daS(v^|0QoT?5~9dcnJN+D@XJ<{(t`5$o_BNCi#CX zl>Z6k|7q{)V&u58^68$xwqtjg4oPg%vu^Jal0e+?*v>EUCi5HjX2vs_9^0&Ttf9K< zc2C9CRqd+k@pJ&KJ1dYDffR{dBpz4^q&)C|6vP9{!@>(l@Bk7I5#nK`mL&P#Umlffm2Abw_oBSYgn&l^v6L6{vZ~p_vn3DS1h&L7~mQ z7rV9<#pyh^T0$b@EFq>^^`;6BT^@Y`jAtANcHl*HEslF=(sN0`hGTvSCpC-|8f%BZ zxMul|hj|*JD?zsx_<%!s%A>|g;K!II5bUHSqE$EQ1raFuZVVl|@2IpJZM!zVK6N=b zqF!2Dq?H3@-(jF_3X8O1wJ?Im*G1Y@M=>|Y`o2iZ{W!+_TXI`WyIrECejM!d!M+dm zvzV6quIE512SFIGfNQGTaS)QsZYhN34UK(>#J+=mhru22z7!378!CkkNXjdg=d~a2&@O5gEkAA3!%Ao-}7KsZMQ@2 zm=bx2TO*yKV-Utkj3COD8NQy8jz+88I&L!21lZ_UIRgAf*XveS(Z1_Ik!xWXWEzQb z4px`=k*Gum6Z4kgoX5}`D%QUNpq_LU+Pe5gA4BLOM*OHndrhLHMb7W(~^SQ67 zn-IcpUuF8eP389+9BsNuA#E}~7Ng#>!b!DDi77O;hzHWOTUHEz4C$V^_pJC}H`qWd ze^U)2;&)^>;tlsuNfquA+!N`hvSv|;8hftXW$s*%nHvSepQV_49jnwuBwR>C`}H7p z+XHcUl6VH_cIXCdh#H`DBa468id;LA;)tS_948+Tv0(6PY}Mv5snJN>)L6SCB9xaf zvx0SD%h!>|+%LfP54;BbNpbo%w~0={qwg&F z4!^>j^n1;dnidgj5(Kf%ai4T$i z+lD2IIg)k>44|5go)`Zx@lJ$2MveN)PI zKZ=8{jsgPcVnJL%hlqlH-0Mr|7glvuaFCtAL^Z|4`FRBeYPe+t;K(w{5g<}NM;lPk z&f8U(uEVp#3KQxzDnM{Sh_z$rIak)J5Wj+6QJjRRu8JbIJc|uRFqXp58Z5=IU#y0T z6dQ(#6rMyVa#`(e+huP}v0}ENJt0#i$QpI&@&1KtM9GE$)!SZrg?EeMKDg z)p$;`qabBl`yRB?ZFz%TH-^EaTqfY0+K)GC#q>k#LCxKsN76bQBTBZp-yx6j^ISr-94?HJbe%dvI=j zGg*`yQxaX8{Rm;f*{}w16utP0DQyRAOI+uGECvxJi$ar0aZL(Ya>-SmWZITicC8kN zu%o2XjDud9CkPehhoh+n+4Eb%b?UaL&Gd2b`zv2@W8rHnu%kA^L9 z!rfKI1h!S!Mqg9wBrRIuXlMngg>)(Z~VQogS4$+}=ND6k8|VS8?IxY4H-Miot0sdJZ8vypCtJ3T%-vKPO>7em!obJG&8|RZnnJVmD@`pC znaM2ABY6WGO|op~az~SyWAhMNS)ML7%$vk46!1=GHRz^J4e`KMFiD47#zTS%uLnNt zHymwDI;VYezOUK}Ypbo+?!w|DNq>`oz-2uTQ3`77VbC>@B!=lUE~x-7+1olUwgJl_ z_Qs>ZYpg;03SyPSld(95$b;a?5h6d+39H1aYFmiRH+g*=L4~738W^Gzgt?%0eCI5l zA9^w!zTXJlLl*O!?loOWZwxcY^&|=c2 znk&kIi7qy}GD;`mXE!iT3F2!-R!J}L2os<=Z`|UHnw8q5u;H|3>wc7;UK)1s=R! zmK4U50yD(>eyL#Hif*|mu(dCFp7<(bG=)FLK^}ErAx8JWmsX$hJLq8+aNcSn9ocFl z|7k_qH8!j$PM|vqvaoeblii=*sUmY}DQ7jX``yF_jm?k1u!T$VgQX^ibF2}PQRgak zNqE3F19hp96@_vRA?>A40A-`2i#ZLDTXK8+<`Vq+3|7y1R-n&hpx(F9s?x7hWj4N z1!bgN+0jN>{*fR>bx9vw8_JL3pI^-D8hdEk%67%KTnE={ig#DE-qS;KBHamtzVApn z-AGmd#}R`-{=}No3k4@dsg91P5R(q;>vBAa9caDhcRm3lvJTZJql~x8$$ow8*BSNf zNN^${0fQ)j~UCTjbCouD-xJ0t={(>k4hr2JNEM7TU4U4ya4a9FG_R za!*F{WrV)K9b92ifDC}m6F5yL(I-UhZQ(2yj-EE{Ow|$!%(*3f)d=qaddDaSg5}CJ z`{<+LEQ46EnGW~%Kr8+f=S zyv9Ng^_eYtbAq*8g0;N--?x@XY$FurJYXD3k07UMriHX56^|Aji$x2KHSFPMAZ_hb z#MuP%)}b}ds))pP#x?%GWI5;7(H4p{c2Vl0WfgZzl-eP>ylc2%StcB|#e8ZgN2#7Gc! z!o0!dLn@ULoeqWbzUJ=XuCZJl`{;xtI=6_vz%IrkWfrsxt+Gt63teFU%w*{umlLe# z!uE)bZ;G_^s9`Gcq?P8_KQ9wK^~t?9#Y_61N_`h?%;~a7g`UW?#xrMsu486m5no7X z)@cnA=!w)~p^(@Uoz41(!1S};=d#{g#)ljDraiBIGM~$1Ysi>Xe)iL5sl+=c_I-e^ zmN-RyU&K|7y8Td%e_ykQoji{lmP1`fFN|6aKH2m0*j`Sgo;?UAp(z&jX zUdV2MH^;=g4T+wyjLUpJO?ltCN}q?Hd>%3JHvdt>{2pc0_5h=Yv$|lM=ULpv=vq5X zv!ur9*mN#{6k~~O*wUC~mo4s&@IZ^&%Ctrul=Dl3p8E+G;d?N27& zk%W_i0U&H^hhhyJ_l`?*?O5FU(T;drKNCirLcE`2t-fu%iT%Tc{OiE&vhAMRF;?M< z+#FdewRi9ePyI=~opPi6PbY<=3Qj2strejQOM${{MU4H1r z&l;b`G`x`KmdibnoSEz6ucmXmfYEx=E26@=SCIo;z)x**``PCv!oP@~lUr&+4ec|$ zqSDkJ?DB$Wo^yEZ|BTP+tfInG$J^SZS52lH8fz|GK90w$J!g#_kpugO1E{ufw#UN5 z%nSEwNdzr4c(s24TwR0|pU3wCV&x*%`{z-*g3^olUVwF72G%8%E}>-w-*vQH#{CL# zSI|~?EwSccf;GP*7U>A=j`6xKvWNq@E0kDQNd~wM9%`de{)Ao;Y~F^w^9QH??T>%; z9~$5K&h6)>3QvE7N`Lgu-p#XDzWepk2e0jab^fE1uT0HW&QI40g(57zfXb8jK7;QC zd>8S3zBpSf&X#9t#RBfQRx2-arFy1Ro2pzbR+g$W=w7)B+*A0j6=zF~RyoBKi-0un z-JB+>H2AVPL%^2$Thk>5;+0%4JZimKUnrQsvI`H>L?-P(6e1 zm+`%guQfG0uRx)MZxyV8Pj|j6tbO@pZMt&1a<^Qr^g*C9DC>Fr(p;@ruG}A%1Z#e} zMwMqVYzg1$)a*i8{{CsYAkP}k0%iXGhs=aVA24&Jl7|1azI~)`f2(ib5xl;x{5{_) z_rJ%zPMy-QkM->bGZ^^(ziWiQ)UY2;&lQWsDWdWWR;c033>C}ODqkTFOkp^$Z)dr^ zGCVJxhfgwlr*-)mAQ#G|skuT4;wqG9=8BbC@$~{-9)EnR&WE5;y%~pr-|+@~*5xFP z^5}#L=dRQ*@(=%waIsjemU!%|^TQ=(eYiHqdcu8ru25-+x+0njrA zdW4^ysF{bCYUcOvbiP1UK6t6cK}`_M16j4UARw-tD9|*YZ6LoZ(C7FUhh2-G)$qJQ zE$sWcmw66=s8OKRQ5^G3L(TG?WB4_z9jmYw^b|kdR&(Q;s}V5njQqLuxdQzJKMYgj z^VZt>YHj3~`9xNM_LgEuwHNagJVtFBR6CEFQs$Oq_-;RnYb{l4LD*m>u6fD=B=Buj zYxAj%<^!K63iQ~GNNMidLC92E`gt&Vp+JjS8xu&L<6xEqt2TgAb0bF}JV(=I{*-D^ zX}2nOu~PR>oE0Dl|~WS})z3%fqN8qNj|=7+z{mR8p0{XSfCURCBw==cZ@q+B8gdQ0eP_?7*eU@b@(C zM{LNqXL)*e%evp)8GwdsV5(ZKifdJ8;Zei)ne8Gjw7{4P<%KB#N*piCr4mo6#6?VX z?o_#q<}%>r(!$gNnh~YIA1D!rBQ5#AlV~uMd4EqJAItUo)3fu#A299GkI$V12AWGH zmdN)3FEblcB}5G#uK+GYh(9dP%~ooaQe}RjiXp3|xhYgpd1!8?tV;_#`T`jIvAI&^ z*-EV}KyX-PAxMwm`wJX(rr1nm>LRmuPotX@9+m6a*+(nyE+Ej<3Xf0;akk8)rx3QP zKQ(uz^6m@^;n@Y5J^$k|OCk|HUb*yefllV0ewL^p)~o@D7BF6Z0BThoDlg~}JyxK3 z{!Q^#XdkF34y`(Do(KU)KVpu8{zKKzu^aCeAG;M=z3aKByLJ!wa8`V4`td(`i|-t& zunC}l{YQNNifE^~+Wdu<^((*o)!$h8+OvQ9FX!L8cZP9RUfJtfckI3O)hl~zM+hLk z74C zab3f9uZg66i>{;Iz;zvE{(O7-pZ-JBDVV=u(D&C29bU2Xe`~;>Rl&L`+sJj3awgkd z{`{o$+LiQ+59~%ZMe_Mz`UC!tEaZ49B)xe)PU+VK=VJPE1&QNDp}YXN-gG5fVLl|! zlDK^O#wndXa9bBnA|!siCFjkkCuzB!QzfO@6TS!8p^ngg@ODWjltiz~-<2fuc)+&b z&^mUMfX_>GD%bxeDcOi*{T3-Z7~^BIi|BDl#^t|WX;5-b?aRh2<9_lnheLe)${*x~ z=)VEnj`U16E1_&%_<&Bk&@~xn%fMYTPQtJMna6uc?IV{0x-b8l`gWNd8gT7P^T z#dV*X-P^s}yOXuL)5%D-PBvIx@7>9^492mIaVQvYY)F8Be_)p%HeiE2=1w-$iWG-Z zaE$yT0c^*?`9b2QX=w=rf+68&)3lI~2=cq6f~ILnnjfX@8olPZ&Z7lm3q%7viYU&tmcR&kp);Dm>979!b79ILJy18q^=B{%uzO-wTTDQI@lW|T9#(3{}LM)3J z!g%npW#PE5iKZ#3SVD+T#f0e6xJ3^K^=GIAcc?dOzVU>m5R&nD46!)Q0K?4@zFE|s zHy(`G5IzJ*;y?YadG0PC7E!-8k(xaK3RI%MwC8~tXTfva42xqI+^e&H#xc1fw zB=vNnWF-^{&-sxrV$I;&7Tsmx!e%<9cO@3pL2FtNUsi-v0OIp#tDwIv6s`8 zk7FV|X0q~ZG+0_%ZakqTVmv=tc|K}Lp+TJjd`so~gihA8MazU-=Vy)|KR(jxS}fbF z?b;>!*W$H8`TF9`(_*cVZ+2E(Orw&tm7pdA{tPqZ4m{!@y70D?r)_bP1YU>S(l(a~j8nE{y>R$I&VKxrE(*n|Qa!vZ(^wls9>lO=afYMm>@z zT2#-b(42a%eW$i$dy3wriIu%EkZaVI8kHpzeN)iA3({kEm(dk_6N`5g`t)Sj5jhr_XTX_-rv`OrJ28=*ZT(X@Qd>5Js^xQ2Y zNmu4lT~(>>Xg^+Vt1Kpz79OwG(CeUG(hYe^+fZb5mhB6J?B`0MAB;OU8rN)?MS7>g z%f@_NF;pKW@+zMt3PWub@P26Es>veswxOzL)+V&oh?w@?FlfQuve4^!SUT)@5SoP# zD_i=IGOD*=RryqLswHjjRw&6Hq^)8WZE34NAXsgOHte<)Dcg{|`oKYIz?eP5G6u>Uxdw+{P95q5SR zc4ve=y$-u8!kz(aw%s1z^(}BmU<|| zUt2Lu7;6vAigz7P=FcT3a5ou=I+GfioI0hm^5lt*R7(}{7dS9k8zwuZse=Npysga3J<)S!D`^wO?t?E6n zZCm?mJd-DjiDZW{nll}$S@Wc0RXFnrn5PfTPTcZnFF5M)fX`Z=a@fZd6zam}BE8-L zK@V5MC8dhlNUcYJRkVqmdey#WT54ycSswG0fRDD_=;2s-Es?U3FUHzlzRwEJ4T_8q z%+=FDK&h6Pca+Ne!Wfc#hiG9Qv4^}5gRhaPPUZD@xIfu)E9)(ah;}uIE|OhSlb8zG z@u9W~tdfD4<&07N4K~wpdKJm4?!rn|Yw<9Tn^3|IIjYAANGF|{ClL%0>28XRWh$R8 z&NCBgHzBst{)=UjrPGqbXkr;E^1MzTKpptm3D>+I@pGbWMLMAe>V4YE&!)3uAQ_yi z9Ta~dNX=pHe$2^qZ4^B(5GM!jTlAXgrF8EX4Se5SPpryPp!R z?9ap`@$@TjhguhO_M*WZZV5$8f#X?lkLqqLHVb9g=<*taJKyf`WMMb9Doe~7sRh@s@FueXbRe!BCl-`JJ=-Av-LJh*dt6gWoxsf z707fxQ#{*F*36QvZ-#3QU)E@u067K8B$8we88^<>nWSn`kJo#YEHedeVWf$Hv^G-Y z2oDlZZ8iU)x1)Cey0Nxi0)-U&O?3nOp6tgEi8ggmAWbSIlImlSao#4=G|1*wlfKH! zO|_Azi|5IHOjDYnyCu~jwn&Y2%|py_+Kp4Xpw_@@b4klcD$1Rl;1s$~M4pOdV=mrG z=4e{lPmw#E7P;;9z)THxxIfqILsQ(l9uV|LA-0%^Gx;zt3+WJIRrLwjf>pO213kTq z%2SXxeUj-*Gc5Hf(0m%N`&mtGyJMUq1;7-r~)aUIWp5ptR?E=Xuj{eaU4BTg;tBo2I7)Ae{#f4Fz2)-tmN48ZV~6NjCl7W-nX5=yU)DeDx&ipV@yJB zroJHHFB{o%BDQ>R^?_h(6r&lopD;s_XJAU`^XoMJkK7C3&#=>gUZMt|$ zqE5F`>sD(rkjJZI%Ht@HzHRjA4+%JhVu9x8QDJY`nh#^bFGfRCGmrfPI*v?z9Kn6q zbW+uiAKD9_L!OwnT+3XF0a5zAK9fi~rARs~lpmj%MkU4AQKmGHpmQ8yx8-j(8$(dT z+d*jc1oM!cl@Pz6`8r9ql^s|%lEdAbAT_Jqnp`MPOCL@gwhB(+GJ0pMLbFxqEX<#l zIh>r9H4nQcVY7vv!`1}hJwjdc9>w1lphpSn@IDkkUm~b8f*vENkcz;g0GlH4ae!_F zK0#pDj{OJ4#x)xXImG6c_ho_GoUhP3WfeLol6w+!Z=7is%0*cy9<~Ve6o#3khavE3 zfCUXwC~wjk)GQ0LjDoXz#Y=~!$<;MfZD?G_ja05NxvRgc*4Xt^LkQi@RU)|!B!dCG z+GJrwt?esxdxLUykPI8A;6fDG#u1!XzDnBYnnDM<_l)4Xjc2JSEw|KjFmO8G{u0Lb zRhIc*VWh7KoOd^!3i}a@_by)T{hDKb9bi#FO}Vu_#53b?%334SOg&fL`)lgk(B!~! zbtgBlRanWK_X&qixfq~3?hp>S+*ohLOi+Z(!LW`grC2KXH)6qB=rCgr{|5RRX-OwI zy0*4wl0n6^nb$fF;v*@r9kjb~_C}c17EP@pxrKS4dZ$Qgex{4og(5|9Ol)ao9r0su zb`x;5r1FgjrPFKD!BC`wp%dKC5WAl}k#4S}nWxnGW<)_81=o(fWZ;|kiO4q_9N+$~ z$6n}zd(YMWAYw@9xb$-1a95~(AYY4;WRH^I5QNQ6B=?foV>jcKij&1Z4^FNM*)a(7 z0s%UB=CCV4G5Yg5M&{+SEpmo@;GNV0{;0P&HMpNU*?o^hR91iCu%s@O>$?bd7^Im( zq?wOk{C2*jKtpD%+>+8laoXF?`*mz0?;B8=$rmx|T11k?g+bV8my(Giq?nFOu_NK# zMMCxF6FzGiEv9!K)f5?7F=Hi(b=s6g^`dBq`{q0r27QR-uwAAhHp7ItXLh`AVuj7f zn62u!sP11fJRw@nFue*b$6|h+(qVVVo4YyJwxI1epGOvMhv|%)pwGCJVaMxFwx5l0 zvc>u231gI;=$NT(4EH)03;hHJV5pZcO1|>RWVmJO?sAOby`gg2)XM^Kb>)|15&9g{ ztPi6h1v@dj7sgWjH+V{nn_X3@rqKW3moyv`2T2z0hfMfv7LpSnOV36L?jN2M#40FX9dcJLXzGHb*w7d99Ad9Zi`!Jz} zm-l{vp|6p{*@g`%je#Eu{xs6hrS=OXA;gDoxj%!vu0i+5wrnKsvpavMZF>#FN$83-j85S35&-lHtVu4N3ZJN!QAMu;eARH8UdFuhF1eo z^+YQ^dcv8|!)L-1tTe1^1+A+Xoe6oTxX7fu;WZKZTTA^tTX&gqPF(jD+wDCY+Gab_ z)+a)dYWYLD&fhr=^<(PL`*?63G_X_W?~n_Z-d3K`wRR8To!aHP&Y#s&aKpvRwew5W z-;I|8nqsSEOH)0G{qqkjWJcG^dZgI&Ry6Du4~K4%e2wHB5|7cqtx>z&?`bz`xA#36 zqwa#=HhAy(M%@Pjne!{(#cm&cSKnU!2~=7M6li!48~Q7GDY|m@yN%!`$-h7JeGwUd z+h8(k`bR1Uns6I2-;n*N=-gkQfzOF|P#fjn5hs<$)aA*8d-VczH`0`{+1uFK+r%xs zZ9|{q3+HsvbdUBq(M2mlu+Zn=9=8W`^NlN94hL!f6l{fiPu6E9_qn&e&+9>-{U_@q zxzGOkK0gim>^xbYS=?u5eV?BNeGZ(g&us2h8@%h@iuLD7Z^-J)#t#WBfY%xb4i$)M8*IUXD!Tb_KFYZ_L8bVv6Wi-(I z3ux{QX!egy^9E@42Q)j!rukRU>RS84vtNOY-8wPK(nxsW|h%J>;{_q zHxMoi2-ie}ziQa8a~p2N8whI(pVL^I8-xqdW#Gpe`z#IGtN#uZ6NR5&|ASuJ&l!$| z9d=BB`{BFV{{|ht9p$_?Q9VZ*h8IIh5chto&6LlH*QxUv0^hbUV&m8C`25@8g$p_L zp8`LIpvr#^*gFNrBlQ@^1yVRNBV48FDQBNxE;yu)k5&>{#1Q@Gn*nc>@J zonr7kbnn*^!!yIB@E5wiJUPH-BUh!>P_CKJTJdZ;pUuphLR`CPH**NT9oaey6D69= zQo^;Gf=>$ZCeyVJWs|wA<0eWMxC!+p*4LA#+Hbi={`)hj(0>#5f2f@QIa)B){}=U- zbKOl=XOY;l&b+$-+goR2wv?MHHx7`BCPgAl9f`K&1W(GCV zE_L>7D0jLkvuwJ_Vw0OBEGf@Hd}CG5V18VuRoP57gXoK?h)6OYEE3)J z^a*WX578Y@*shI~bBK2f{YYgHUFl4zzuU}|$^<-J4#s2n5J0bTyHqxiEpqr1p-tpj zM1J0HA52i2@8s~;UQN~jz=ICppdiF9X&PF3-NaeWOHozIfgHYW#0RqB_XCOhEy@tc z|86}W;jUF`u~Z9kbbhOJj3@66zzjgkck;f|79n8+SUZn8SN7-l^Gg~MsYv~a!P38) z2--}HL#{^lQ>tZ_ZRzd95E`sUH^ms;0yKWt))|Hts({+xV(Y#X>7w@2qL(5Qq`(`4 zQD3k=z$2|{-0?&*N*?bD&ZAdqYG%eAB1LKWweMl`VN)!J;Z-%Wo)!YVnZ7?vl2-gfX5%|kB zR7!`~Q-EC+U^4;MRP7pV5Jd;Lbz__l<%Rxj0GGYGWPbz`%JYDef_3HfK$Bs^#$YG* zOQAMsSKXj(!Ju3&(k1(y{IM9VlVKyLrl9xc05o%I>gbX6IdLxOcLDO4hB(s*eyU)G zKUMfY)~+21Y_4A%QluA^~D%*d-8_05y6~ z0?gwHAwUq&659dCI!Wws0yxeh3=TWk@yU+_pBxK(>?Cl4%`rr5W-(rpKT_^@Z&i1{ znUQSgWH`L8x^-*2b?erxTenKFMW3cm+5>wohZv!@#p@z_y1pATRIm^<4i_U0e78i` zHHtSi+67X$@^ZnV1fW4-dMkkh%g@OPJQ|0iLl>OtFK>K(CH9M*D2$x(QmYz^& zy@vWiy;E-zSbZ_Rxbs2txL?>e)e^lpwU*>fy5lZ)JSXQla-5h+`R=1BIZkYVse#6! zLyyBULaui3IN&!2TksHNA`PTbG(4!?7&GNs-!5_xK*W%!h;^2?t z;J?MeU&O)Haj+T(|1J)GGY+nggEz;)XXD`ZIJh$oZi#~r#lh=Lu=HD+1Hl=Pk3CGX z!s=9*voUsyQ*6F#%um&BoYM)R!K)V&C6QI$uWF&C{4@}hWNVAXuR+Bc1mo>(OyN@<5O$T^T z9Mv4zAM^S_qXGZyQFDHjebx!r3gh{ua~h0KWnw=sj)F7bnO;CWSE(Z%#`YwYJ%+dl zpobb_$+DigdV_8BV#V@qY##7B}JZ==K}clP$SN3r4JqZ!Lx9+ z@ztZGmrkIcuxN`bj|d59?|%Khkb;l4YGF|iK2%4tHBBh=9GMo=232uMG8-g^mYzza z=PD)AbFtD=Gof2T;bf`VqgZO<5GyG+TS!|jZ)6IVuf>N)aIzl3VH(uxWFEoEmhq2L z)*R~3BFL|)kYA@meho7xlz)nnFXNg2b{zb99DFwp9*u+V$H5Qd;HPnLZ5+HW4n7_S ze-#HWiGydy!LP-^!*TFM6D<9C!~ab@VL*5?{VwqYS~0=QnZw7{8QBxar}{`fB_^&D z61&Cn>9R;ZC2=D8#O*?cqBP?H4aJ$XY))BnhbW9LA?eW?@V6DY9s7gOrN{_^%R0X%% zMwHfoZyO(cdj#$ac2PLI0R{F2yAi$-;jUdEFR9TrHciDur^IRFCQg&YQ{>alpYr)! zT=^1B5;l|Yev35wejBQ7b-E>6sNexj4;Dai>`!ZAU#*EfP!oHkCiZYmtXvbjIf|{J ziU*)Gg=b<+7)DyUX_T~1{Mkqcwl2_XP-2@Me8uKl2F{MOg~Q$0yVH@h@*^OuvUp>{ zB%pFn1w**i)3nUOn)?O%+T+?AV}6BQ`Do0c6%4Z!qqT_ zHYM8-*IBS+pHwg-zyYkwe?xUF8B>SDJtMY$)P}~L9bV#Ee0IeS4>T6m^@uxOa-VvZ zt@o*3VxJm3h8EQ#www%+QNqD7kU0^AY16D}qjdir={iYBKX?M6Ln>Q6+cM6b)a5=z zde8wkm`jCKXKJFHrN4vvI|pA!`x)R*P;loZTOB|ty$r|>SI?5z9Ess0*^AQ%Iw(+l zl&Z|7k6=i1m}R_}3FP+dzwH?EJ=Enm7+Ig@_VdD5@`7BdgmEV(r52P*2#WQVxM z)K^GASAk4&`tOBTL95G6KQwKIgfncm`Z#u=4(gp|ZdIx1BlRs78=M=#N zn-QO=HmHPOtoE?^@i-nfO1nQqex);)ivI)V6s^JVvlv@9Jnp+w^@m2+nxa}!Av@Nm z4s7XvGb$fEQM838MxSx=O(#2-IP4r~RdS}u#m)T`nGy${Q7Y&(_w_jSKBP|8sij{x z=o^}RRb=kBV!V5SmyuS_{c;R{0Pwt_u$=a$sJK@-9-r@iB>l>dIEh{T*Mv_~taIQjJpe@k zbPUw%!lwuz3jnt`Q#y{7ZIR?gS^lh7a~o+2&cmb%NS8?Om=Cdncp~9~+JsY7_&tp5 z0;iBsY&i>#AdWSb)J)t>Z zSk@G+=h{!^s%DW~1{CCqm+*VOXCsluzU!n$=$F3UpZ*yp(|Jo!}cc@pJ)gYq6X z;Fm!8zAmm^ilfArM&~Ek2Pez$@;Dhjj5EBTGqmXp%&)ch;YTrgLY$+Sxy`CVnxR{0 zmM?RJe@x|kY*PWjHuZl9SVcrYxu2-uSGE}@9)p5s>Oy0(Ln?fdzOyr>i<``($lW1K zrz*%5{+4@^;LcZ-X3GCIphWq!=jKS4@I=)27^8DQvug*VNVu1Im)1CD;jKx&8_1L% zYcfnzlhj2?=Ql@5L@_DRmr`iDEV7K=>+(IS3wcg1L_3?*l>MZ#sVZXmGX+=D4s01X z&4fBe7%MGtQreb6fAlz)z-WC&R@Mg)NF785=WhI(x(N~M=7s^)VQWuhZFl1$|>z7>I4d##^p^ z`O@Dc-XEiIctEfj6IOX!SSb?6J0s< zl@;y7J7c`I7*Euc)l#QJTet5W4?8#)@^p>K~ zNBg*W#6B>nfjhQ<0i)P$h?)9UTIMbh>8!9!ggq)UFc2MK%5cKzs1N)hAxr#{E~W3P z-?4v`%MmJ=P5CnU=2Uo*4OarM#^3q#kiu({8HuS^hV9; zReGJ>O6jY|ZA+|Om3O0`E^9X0v9}3FeJdftn5&Y0Ywt$a$iPeCI?Q&>>hN@+B{w#J zhNpwD8JIXC-n++Q6OH6vZx|7*tT~&t??wI}aU(f~?wU3LgI)mFG-{IwUq=P`AeJnxEr z_ne>)zHYp)TdilkPeQ^rH0zFNHkoPGtZCM#66*GcInT(i=jeM8%iJevU^A&DB+T%b zhy`sI8}_;T=|@efBAJxDZ_`JHZ3ER=ecIx!7!va{DH(AVebuJ~AD`-BggY23n|^DB z&Y-cGT>li;03gf9>US6kzoa|zmx<}8-=ckn0G~i$zmS#BZeU|Ld>GGwz&2VzZMiP7 zY;hl#p$AbP(_VIXi4qd?|GBpce?aY#tnRQ>7u-nWI_E_;0~99XL8#U`s@pFg<6{O@ z{WdRAu|yw=#x85x>4dE;ul$+NZ9N|DY&2hnWxmMcNp3h|TcaMGz&v<_%34ol-9@w8 zJvND0TTL!ksnp;;7&z~uQ0IP{*D90p58@l#OYpl9N@WGGKLT_J;6MZjccY}e5Q!)$ z+=J#$w6Yz+5QTP=0^v@yIyxn`f@7Us5?g7pO72vbg1&Bb89sH@!MufMQ{(Wyj@)PF0?0? zWn#e50v({Wd5@`6Sr1d4mssKhlsIAAxs5GGg_IZG31lT3Qg0VXOfeRZ`%rI6nH^rV zTkLCA@fPryowu`@@&Sb-XT>|d`tVB>YfKfVPITCFokXb|*hx`RXXAw2Q;y$1!BN3{ ziuPwpD_SDUK!qt<0YROi@NUI=L1lRa942Kafg>0>DG7@|_k9}m{Zf`a0A~k$Vk{Y4 zrax1kaDB7(caOqvuf^x_A?%V0&I7R~(g@>A@_3Q1*3TK4C*_<^@WSY7A2ike9=H!A zac2?k2F6AG1*21L$Al<<5!s}aVuP1h``A9t_Xpqv8bz*4Mm7t9+x?#7$B*9?tWpvG z_*Ca*T<3)Z+v?^ z#l;l&Gw-17YooRw`u}SCgUPm^ThsQ_OxyQz+hMbj9+VG3BJCZ&8<>fG&!!S%GR$ML z8e_6okI5Pt6OlDV!Wn_A#*0By@M6%pir)b_=0obSYuL4Eek(}Nzc;1%k-CZCuO0XNA`HN9))# z7S=Id#gs6cmET5-7~o3X`7C{y^3~^gy5l!_Woxz)7?V;5BYIZ-33I6GE6}Dpf#!D~3$7+AbsrmWRXX41mpzwPy$YIC#Sev_i^AB+9EXIUB^1?~ zWgD}E0sAmeiG>xFr{&=gP#~mq(#Q0u{W{2IAJ7$PPSZ z!m@*nidu%@0hqh6dYtC4@c{y>&@5?fSIs9voB_GW#my9w)SU!#t&Q2dFCjIFS>(w>U{gh2eZS+vAQ8JSo_!!3%L zC{_}hOtryQPSQp1QNc!(<_j*5K|w1Nxhx45m|9m^wKiD96A2g8CY(Y;j@$_w>@CU~ zZG#2sxHj0Ws{6Vs?TcI$Y*%2hKZ2B4EhSgXca8o6k!`OWV0-@k5uLbaJB83Hyh@F- zshyDUINm`8+2JZaN`<#8-G&p=Jjyd9dAM?IO~eSsOv1z<>h|))l4fSVeYa1F-R4ySAZe8!!m}9$}~v}Cl%{Q ztEk+Fj4)x;?v!pQG%!}Sq1kqKGZaEL&P_aYAOLzL*Or&HYPpfG0{* zY~_<0Q&N=|d_!4Uhn;N6TYf6|8YY3_+w#3>F2-YY49p>+oMYN3`O?XJ^^$LRY`#}i z@KwyoE@_oe!U^9+KHX~}p*HBk1&15Bg2otY8$VAdph4r6^9?hW9Jp1LH^C&sq?aHQ zT{sG6|0^sOXjfXi)vh2ajwCdw4184uPblLfQm=wkk7_IemMs6&la0i8PfBF zmArWedZ3NL=U55SS@iK4CDPg$>02}bp3{lX3pa6@j`ZdfL5-nXHT1PCe+erY+O zJnCf?9-yczt>Rcm=@R~SI!S0(X`PR6a5EL&T_|s}SqRb+GycD}iHL#3m^xNEg(CT_K@$}#!7CDV-LaUp?WkeT`#D(uEJpPm&f){Lk z|Bp!Qso*HV*veea$QChtTP41O(hL1UJfC=c062-8l8u`@e6Iqn#+mPK(**(X8bk6H zetxaB*Ta&<(jH+#RIsL%{@CQI*~oAtUS@7gLa{6xVSpKax|3$V6m znq2C~bwq;^9d7c{i+A;;?)iW>l8G>dz=6o&qOpQHX`y7Z?IF65TldLZMqRj%mCKn$yuSml9STMI4{v8x6*17HL{2Z=W zzC+PgwR4qiu9rsAxIzr zq(f-ZM4CvIu2dC8R0IVDEFg9z>Wy*>0*WY#1q=SK>zdiKCxGRB{?Gg7^T}`LJJK5YEgVZrSaFgW>Xae{sgOB1%f~iw-t8uMelj&!)I%pUxPJra=geT1mM1-q4JOuD& zaAke}c9fp8elg}&x^r%cy5-I}j$v3>Expp+KC-K$6|RM-f88m`4(iSzX@ddndJtzSXkzS@gDs?wHOUVhS9tmKzac@mfA|Y7t|`J|t)wyreG{304C2v~Y-sYRF%oD?L50n~w{jVZBo4z@X*I#Bv>8H>BS zC=^^&`cyT2R83V2b=?SksqcB*%PQRSK*W0Yj&k1@3tu2kv>?YlIew6qW9I zpu>F6!+&!k$%p08HzySMZ%!DdIcAt!A>6_W^k4;AWR5o50Gjil3E616hl=|}>-f}X zrPQF3N;pL4(%7ZaNB8ts6Dcy?r|K37r_S6S^-`V-4A0VP zSb&?pE(Gg#tkn10>3FURWgCNKtGKfzLDIpk?#mmuSQ@K)e=vxPnZBN{X3RgusuQ4t z@&24^DmrYY`$dxi-@3PzOp3zi2)?95EX+Vg2Z%4y^nHDql!V1^MsFOcWrP|kD(vR; z;Z{Z!QXc~kz-I~07j^2;Br)UWNy3W0i*NSzSn9g0m3q=|UxZpbmbhx_M=m0REY_ZG zS;y^wX(ioOIu8R|f>Yw`aN^(;PWq-rij>afK^_a7!Pl1lHxOj}$4JFrwvU+lJ^)P9 zan;gl*ux2=SbAF{`8G^yBJo~ZaXmG!sc-$|(v+8! zqfD9FL|-(_*YjVXD*M%pQSn;|LY6)XtuS>Q&KM%85NFHYD(YnPE8f9PuoK~mm^>cW z3!A!iuc-I|j&HqzRR#$@FuV?s)CarmF6lq_cm-ybv9vb!q^S*#EvqfAR%W<>F7AaT zpxM0#MzF8d! zGNas-gq;o*da+}$Q@>(Gl(?edFzYMvm0N*FcXflEB}vi#pT&w2CX-rxsOV0*rRe`n zEwvDl!4a31VRghcN)L0yrKScu;_9Y49C0amo8f=~TjqF`eN_6r&S_(@cn@M>>kUxe z(diAHQ8d@ZO-K#$J9}ovJCg=Td|#>8;-nuHsM}q5Eoy00^fK_FAnPg#;Tt6q-llM1c5(P&Mz zxQnFrnADw^)Vn%hzf8AY>{WKAP8LZWr5>Lmsg2Hmf{}kaBmW7MKdPGV1?|HcXC8BP zQr)(=CaHGFFf}oy-alrZ5?#Si@@b$dw=LF0qgWk`VojuCO*A*lWNa2!OrTlrr&PKa z&BD~&jSJFvbNQ!YN#_{_vf*HD6G+E=Xkd~2n*oA^ozAgDQdc7jDD5Ppw4II8PNLFI zQjHj{@2ym5!<@`2rsFHFS!%4g!MwJ(##p*PE$>-Qo&tv;GdfZ@8sO3d8Qae>}C{k3KbDmy_Jo^ zW?1Ujg@r08>74FmDE9<9Co|7O^)e@$JfJqosquF3y|ZF4SL$oFxZu=RY;`ZByja16 zy?xQBjx8=Z^K)}g)JuKP+!IGl5LXW-&+2$KUm>R^eQ>dj3vSYt7TvSi?eMdX1Ln+T zdFV`5_pRcgJ`;`l$fRWKjWZ#57YIu26d-IhUT zV95%?w1dttdVg>g)s8i5s`SX6!mQY)scZ;bXQr^atbb)XM@oGAC1}Ba%z`Xa3(P#p{!H)c0t?N0r<~ z`)dYb<&A5Hr2FsyikqA?fexgJnEx74{1nGN^NFNM=$$wjx)}FE;D?BtN`aHr_a_Tf zm6<J^2rJ=v*71!9DFJ2Df_NSzANO%i`9KEq2XbDfTs!(USREJKQj7kk8i&v<-4f?BzE?pn`I+s5kPoQp;e#eR_ zJjCg)B=r$KAdZVy*_8ymR5z`}Q6DvRI@8yJxZbI2K_eX6>U0y-Xp!kHl%rB_xWFxA z>TVQ%E*@^H7XkU$D)laX7>}D(c(j($(K?kB-I2E9)tF18woZaj`)lzR?n>^cgpX!vuUakq8q)$CNTvYEi!}t(u}ujCt55Pu;gN&z zL8?QJ!^>NBA95RAgX4b04d9Kuu*dKkQE>FHm9vvG#*N+W~sC- zr*w*P&o{XjnA{6Z?gvcn#fG~T?F>_w*DB=^v^`8z9FfWt8$~CS$+3~@^NorR2=z65 zXh{!fLFL~T{b^&FP)TIah8Yd`rKF@~QVnl?6Ksj}z z+Z=C1P~WI^0j^*e3=i+L2XQpU;XImBUH=5jEWC}PdQ!znT7wr07Fam)9L9IHZ+T^X z$vPSq7~yS9LVX)&98Q%m`?*Tj(gkX=|GsGut7kl)kt_n57e>Cf4JHW<69#8=rL9eckd9xz&&aRiiP7-k#y zpIcYqC!$pH&vuy@;Px6_HPvAoI22;0BZ6Ko|1XCrB(5dUy=y*hr zj`jMJn5li5F-*O?URmpgC@ZdOm~3FLeI0+eq_ygZ!w+?R6e*I{Nm|6g8(scw$o=Iw zsH@r=fsUj{B>7`{DMoth!Lx3HN>@)3I=LH>Ma;kT8KS+b!`4(`OG+y1O&NN72*#q< z=bQJ4WK3Vj@HQ{zk9CpyT$t9V3RlxNy$`6uw(%z-9AN_abHEqBbroHslW$`*_jp!z! z9N!>-?n+H8;4WEF*#^|zmCSpC)^U2ym(oqp^FXsbHQ4kWlgyx!!+`{C zBCy3i)gfrFcZyYgNAeNM#rz!=9Os!E{5joeZs(wq4pnYyf6C1Xt+fR_Q)-)X0$-g* zxKw%Kn`v&!j9O)#EZ!Kf;JCnfunu&{jDKwB1x7pjT)rTm+ZUW&jblS$``{IPVz{Hx zVMx;JC}~^Of7c-#sJB6_vo}BhTb&qHOf{+22`U*~HBebJ_aK`O**0Fo_y5x{akAb(dPM(vV%7?pB zBE2rP)WHRWz&GEiAmB@@+u1V_UYB}HT97vgQVLQjsS%W{eg|wLulE*r)11P-;nhP$ z1iG7xI?yTjoIoaRm$cl{{4>Ts|Cqn=+R@ywPCY54WLG@Irrfr<-TyG!xB168oAevv_{7ng|Q&0N3wMHFwr z(Vr>R&ogO@+8t56H4thWo_KsNX%B=bew5=K!s5p`?Ud;%inpUjN}j;Gp01cwr*c%v zjHsB33KpZRQPk2qB)x4ynUoKnN+1y^&D`~n>DN&Py-QxI*<_L1&%PUo<1;!zq6ga26XW9D;KnU-kv2zSR8Kc;le6QE z99Nlg(wy^OSV#QZe@rLUUgLd?HCU~7>U_CE0W%^gpBa=fTt1g9h89RVgiX0ws2dfJ zbGmMLjM16lPW*_Rx?O$jP&J;6M%=*dGT=#0yP^nW@m@}s5R)+)UNlB#NC}s5lnnYm zrayO@(|gLC-f}e>lD?35xvWxMaT~v%?#&^exsBic+xR_u z8^7mn8ZU;VrCzxFo~UpLv*^-d=9--AI< zya%I>k4RTago>udHw|0$g-JRdGXAUfgTVzZey5GriB)ldl>txZrtQLn){wg%EE21X zc`Cvs;^Ohl%oSvhOtY1q;1~&JWV-q2b{J=a7=s@2I@C)FgB{8i)r&CPqA)r$%o*1` zGuUg1>y~McbY8|o4{;QRaXB*S zBOH5SLbX~ok@OR!HX>Qw*H3`-<}i9k!f7zaKV@euDyp;`+({pEb%*>D&Te`#-_{&% z#^dU+W6is^ZO+wga@vG2J|i_PwLw}|Mi%;5aW5jf2xGPSG{(9?2i5Nk?yh4?hL0MC zkC@mzxL_R#1*+b?E4%hJqdj)jTX!$SXAhRkjJ1yeZa%X3F4baqeDgau>`!sV0{qG| zab#oe&oQ;d@g*#Wg|QbU{caY6deD0^usB@Ro6eW18k!$@OElSnh%m|A1fHty}<(~JCvx-tE6XC*9u&sg+XOnQ!VYdp5Veo|K=*5&s^^iQve+CQl<$;B2V6(!l& zjM``|PR6=NH4OH6Snq~d-*XMo-<^de?3aakZ}HsT47_<0i@$dH;_I<%9~(0Q=4Ep z3qf7%t|n)|XCnD*Xo4kwwh5N}GO490Y9#5hrZkpF7f@bZa!?16PRPNQoI~yf;C8X& zIoQ{~lTUcF-R>~fxYhldf$xvsolN*$n&o8&XFuYP($Q_n&hyt}hQqPRG0= zX!CBQgGftB7w2IwtjsF}eKrqkcPJ0*@>(9&@n*dsLyQ0J2#D0sh-i;0$agjQ=w zz19+2W?4%Nzq2K#@Ip&$nHsIory1!W(s85@k{)V>qvAc%&^C`i|E?^YQ)pw&+oI1q z?Xec$w#See9Z)~$fMehsx$Ab^4((9b5nJF&NAzjY348G2PK8NK&pN1_Zm?Ho@h}G= zmBoj$B$myb;6|TN)}9Rk7rw8o3}~{ZDr8#>8`}#u3#-L8LE6XITQqm2 zP`nH58rYy*6f%lmgDVs}tTjm0HRV#gbdK@ttTn}J!ZDtm6;gg}fa)^`>p;|#;yG9+ zO64AHyMt(wwsj*~q;0*J1bT$yjO$|k$@UC|3}Sjml7=kngX<%XoI$`rFi>v zybY=j+O~=4eQn!HbWz(LrBr^@w(Ud?iESOsc2da7QrY&XI!KlK6AV|)CQ_xcm#8z4 z3r_Z)QFWkr9`-E7E2EGe_5#s*ZF`C6acw(7J^d2dLfC6$dl%?1&8z@erZ0#}HJv9a({zDo ziKa_L8#H}Q^n^v#?;D~Qb?)C0y{YLMQMu(U=!X#Y6VX|sQ1%NQ9Y0y{= zYMT0S4##CSP&!b5qPCjuBI>JYDA5E>BZyYmuq?4`6s5V5(yYer=Nw9Q1gHVfJZgzg zYpQ6f%cwb&w#}D4)Mbr$KL$=?Dwz20V9V@PQ&_~$|WJ>_L z7w8~SeHVt@#m-UP^MTUYZgzp_PO|N0UsK4TM31xYB_093*4Xk-uMK zu3tMVJHYI?-rFxu6SP z^1(dJ-t+~7`j`qdOZrijEI4jHgOHqEAfN9^Z;-mHqQ+Lm zFl%G8Y@9{Lbq1{#*B!KWoJ-o6CvLpW#vE}Na&-J;@ShOxl3ix3h(E!4%y_pN>L=B( z{m)lhZBJldS9=8XS~VB65|$yI{RaN&j8{jsgZlG2QlqPbv)5{1%9vLIlpn3C{FiFn z>ri>AG*ylXEHv?RM*^z?3b7K;gQh2bUz>yq(#A~ zBgsA8g*uMhk4BLXxp!4T-PvHTTeaIJ_IQK+ZvQwu4elN@&XIm?^8cy9cw3JdMZu`k zU8s*nq22(090{+u{k?#Fs`}0!cTvN;f_uzZ3EGe?YcSHbt?GS z*umBuu2f!az0QYWUU3J)thU4TRv~IiVYLXf;;(o5t>+UJEhgMOY zaXN(g_lSESl(4TsL*SZZu%?qh7B-%!Ec&#&2(CM3DRNwMmjZ1dn$2YJ1fa(?*@LIT zmBt&ILW5_*6~jeMF+fgMH38`;i-&kF)|Y!n21}VpTMCCaR%`_xJ1tD$z99bAVN4^EKV;Il|)D2BNu?Up#xP zhClaHK&KTsRzR8w?DHCdvLvv#6ICiZJ@3&k786+ydp?G9sSAnzG*7{~)K!DNgsVng zQ>A&qbA{DrZla?MgULV3!T@@KiRw7LpnT zX>1nJ(&(RKPFm7*$&Lr-gj`_;S=)#Bcp6(tA+ffxJcB(=^raI+X0n4s$2o?~WJ{A& zSw;XgU~4sv1Il9CHQf)?h&`ie6;KoQvZftCIqWS>&jaPMPl=YZH$oD5KKoMJPKVUx z1?&b<8T&eISb-j4Ougt>QMV@+vx zVp9!@<(=3fqNVJQkS1^*`JE}1E-XJekb76wE;*2Uch)^Qko%o%V6v)1aHx;>V(RaB za6;%6;}>_1TkD0k;C`KYN_$ODBdL!1faz=NNK;j(61B4(Kj+nQW>KL)Z}Q6|>j04O^m^RjCt5a|~-y zCy-_-8>tCfVjMeI$Dc|pzmFX^s5hU$E)wC`y_-*BgX;!zpTfrCV+ZJmg`xNI>FglU zT(&)Q0<>zKdWxO|n#sD>3zTyf8)i@}Tr-X}s5hU@9BC>C90haPD`|mv^VkOl#qxRV zOj@8U^V#JzRhG{~7w|=_O1h#yLRav`Y*2b2l?Pd=L9zTnHYGif$`ZDSXgQ1XuH(y@ zJ0lQpC5z1n#9PT~Wd!0q%(637ehs`k_!@TD6mLCy*A#C(`@|IQ5q4R}Yv3S>J|=9`%09pJNj>Jr48&Td8S3(2MMO zO)ml+VdV`2`5k4K8>;+p3?60MvsB3A-k#SY2vf)g0 zg7wP|q>*8f{GDMNG~r18ob4up8Pn_I|7GWujbHcr#5wk}kzWxz$DEB- zJY@@QY_`>C97yvVdrlFox0S?~>~o@}j_|OWKtCGsV)>W!gV_H1U0{Qo1Z-ci!%YHp z_?l%mRprbKOBLU+K1~B5zh#4)22%Nsl^V7p_5+*OG?2;j$K~n43 zFD!yctz*BiW;ua)zp_>psAowZlA7ip{KFgq3&iSHdfszTnj%X>{8rE9Csc3E>o`d^xRY>eV z2Y*`;eiTd6jGO%t|Y3U6AV2wS(V(Gu?Pp`sq|Mz%7TrHVuv zFDVG*m%(T2co;H+uQb^*`F4{nlOHhI>hqH(TYY}UWNW~`Guaw&(IQ}L$bBsWwuZc> z$(F^lO|~rF)?~}(eNDD(UTU&6;&Tj&<&F4a9TLYxW4_K5GKW8|ZP-dV{5eh7g1P)< zP1w5m{B2Xb0{&l0KhxM$y&qQxMXr$>Vz;$gL^X_c2h2rgYzDKw+A?`@R(2 zd5l4qf#Nj{@ck%y=n;9`I@&jt-D%K7-*2L)K{I`)SZ{+C_+ohTY?8~cDns_`! z$$tJ(9(=`DO%CL3$ab7v_swJjd5I<#kt7H4>6+XT6WAbLrYS07CcBHz)|3czH@{zz zqjAI)Hkhx_)ShUa4vBRb%y(+SIt<~j>X7{+_ON064AD`?P{@6laWvi+F_i^qcEoSu z9{wYRJj<7YZ3Mre=`h%exT8?fw-Kk9f}FLe=H#`6?8_CPAjct=HSKjglgmuQl~Yvl?)zmqC8-t%~fuQa8yl0Q;` z82#bZ;29a9_8}MLD*gH?kaO7W@VcitTV6SBhuT7-tzLhuZ7D#0qZ&raA{b6leTeg{6;ttDpldYd+7m=iR_gEg+ z1fwA4hJ4bXE-|AlPZ`uNW}0Pxg?P`J;w_iYo8rx}ykLsA-11U|c!y2#)>vLP#oK72 zela^OM=QiTW{UT;<<$!DUNyyg-ts!{PVJ&rpf~s&qLr*(=-WV>3_5K&$qyOyndKD! zR8w@N3zoO}@0!|&T(-Q!o!$L()$%TnH0T%0d%U_qe_Gz>=?2-YAM#v-yw=lvxIvYz zAM+UoRkMD=A2uk(`YC^0Q%0rw*8lJWnp#zA40K$Pqj#k|pf@#5s?-YT3r%Y(b+De{ zUuil}sVk7$_`cHdF~s|f+co_PAwT0DqNS`-<@!Joni^DY3{-_kt?!>1W9e|^p~o%N&?%Vl@(pS%{>wWVRBZi%_cLg$^&BrUXrlEzpJ>oD>zDj~gJxMT@P`bV zXT8X`81#Vk65ngkGV53Tm?FoUmDgA=^EWkpRCxls%uf@Y+M8(cf_eHG|n1v+ZbDWLZh(fW6df3B&1l~X{M?hNGqBfmy;l;>0#YW<0) z^$eu>GtV~Yg!O0MT9IRBm3OVb@J^bRRyhIGvu7a9>pYZhlPzU4eW$Iz@|0fwRIXZo z=M4<{#rg;DtH_a3HA()-2Wx6XG*VL=qOpotuc}4tPkvfc|Ejs-Pu`}tqPwdy+n;qMt$2tU+RoK@+WRF~^{)wqUW^ps`kuIBZa{HAGz0G%&V? zEmREd>!)O!SM2Mn$}%Q4%@!uU>!)mGP_l4wM}NlR*>UIA*rv8{QKV@vkWb9+k0Hq|EFwC}KZUwSh;>9|>`H8bEmFKdq@FQEiB~GnXGC8*u-~J^PejKZTZnFG!hVku z_5ms+_ItF5)r9>XEm9OQ?DuGqr|BHgFiqI+(c&RZ*zYl7rzY(881arK?AsXewLzy? z74gdeRin(f-nOdZj)BUC{hlCZX~KT5CiZE<8oI{4&QbeL6$MpClSx2NP zV)Nt6Y<0wLO;3i-v(**Xjd(?@uHbi59T>J?T_H8~A+l=17OX4mny>{^g;Ucqq99G! zf~g`{6Si4B5uyp(EKPVdVVk9k@Vf(LNf(tXPz{4l0c9C<)|MgK5#cDmXsa)}o8mPT z0}ZNSYbXv99e3`D{@#`)-q7@F{QWFjl&g@Ax1r4%i?fR03~&N#EWT19IX-V}BCczS z0ctAjgB9WP#vBo$>67@MZOue=O<%{)i}Frk8LC3!nSU=aX{ZXhB%#3GM=Uj{4bTQns}hP>U$I-$d}zr^6 z{F#Ko_PfM7O|K-31lm1Z)##0cnQX9lOOexFEmsT?pK4qCYWK4t;%g#xel|?}LZr@q zhlw>KkY<5xi+z~bOSF=Cs_(Xs5QhzV+Fm5;7y0R+eWdt+2(M6%+3yu%q#_)xqlA~J z%n@Gwq5Tw=ZaAxO;ak-KuwK^7HVomv|ZDkMDJ@FOhiB34adXi>hD4hO*LJK zM_ZvLH;k82qKBrb)lWmnyEWZk9m_dZQ)I#!u&p%cJkVByzOfgJ+);{FLc9{uM$@+H zKif;hK!g6YmkLL*q9?069pgnEB6U|~ycnVh@3@Q?Gjz!7zEH<~;`C^LDp8IJ;`h-i zB#!wBV&)j6m5#&J6Tr4e(@CI7Vl~k$_Hp$T#}wntBcVpFm}Z)En}fAzsro1VYXbpJ^IXX}jFMfgF&C)OeJXcciysiJH1#3sstMQP2gD#vxE3!Kqcklenyd-e;>BXVCR~dj z6c1~{wRnlxrU}>LrQ#_f)$&Wl0aZ>-M-7^0T`I2Vcv$LX;tyRTmN?9@T*OQW#9J<^ z8FUJ$p+RSDD@5A~{`@Z5R*G)QMpuffL|;ufFRc4TaBoI6FPrr&A~b?y>P zG)2|A*ST91YRaiK*11P?(bTKfWar~zfTroSW;&k`!!)g{HQ)K9DE8-9Yl(BOxKGnZ zwN^Wy64N#PRBN;IY4L!j@T48iePR>QN=JjFr=9!7PJ<3OpA}CVbj10bIB3vo&gaE3 zgWhr;5T^|K(D{P+$e{l?4~owX`qFtwTvEjHlfHGnD84u7n)4-52fr@Kma+v&!gWN< zRzzd)6>*%XjGambl3 zrbz~W>o_4E(X>DMTgRK?1x=yB1+KTmN19@SPqDYf4~m?NYPWH{BYZQIZDs9_Kxvw` z*6s$hN)a7L?}|f2a~Ym(zbj4gXWOU6>@pP+ z&$d4n7Zt%7?r-8#ku+1$JhtB&y6&G$m!5 z>noA1>F1QEfI4crr_Rf+uSL%}Du>YEmtB{|B5gZU=cMZ!kv3P+9d%!JeJk22avran zE4~vOsANl7r?x*wd?z~3QuI#ShLKlAPYQ`6%N6v!7)A6YUs^9$Tod#*=9+MI zx-L2s&1KEf;)1S=w>7m(YihqPE)%U}-O>_+eiae($wo)&Z=$L}sX@PqI`dVUc)s+z z=sjP>>ytK+{VpaN)G+7|@t{F@L4S%32DJ$i@*vStc6VC$Ae-#DKvAExyMuyclZ8mj z*@U!_K_1!Ops_)rGJlZ@IU}tsC|ur0q*lrZiEjUM3qRp=iv>YZ26c&95fo!kznINI zRV&1cHO1Q%6mN>RFQ}R+-jSf1a<(c9&2_cpK3%f2Y3~Qsk_R>Ynsz3rwmeF-(h;71 zAt*(j&{QY=8=!YJwIo})rvB+a0DY_JJ_uPy{-kM1`maFl2Z-QWjl1j0N(Q;ysj`-) z9qC?oJ=wsZ7sppb18v2V$CK-+GR?Ne=w%0!!EsiNvc_b75S$i$F~ zw5-5#)0xeHo;IkpJ5wIk^n50>HIPe|D|#iftGj_b zscC+EPj^FkMbnd^+3qaKRwz1^S(j%?w?U~QTlOVd%0A8<$QsL|nl1u0k;xAc(O7C) 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 UKsx$Al4vMng`!t)QB(YX08P$@NdN!< literal 0 HcmV?d00001 diff --git a/ColtPlugin/Forms/FirstTimeDialog.Designer.cs b/ColtPlugin/Forms/FirstTimeDialog.Designer.cs index b319f18..43ef10f 100644 --- a/ColtPlugin/Forms/FirstTimeDialog.Designer.cs +++ b/ColtPlugin/Forms/FirstTimeDialog.Designer.cs @@ -33,6 +33,7 @@ private void InitializeComponent() this.label1 = new System.Windows.Forms.Label(); this.textBox1 = new System.Windows.Forms.TextBox(); this.button1 = new System.Windows.Forms.Button(); + this.checkBox2 = new System.Windows.Forms.CheckBox(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); this.SuspendLayout(); // @@ -52,7 +53,7 @@ private void InitializeComponent() this.checkBox1.CheckAlign = System.Drawing.ContentAlignment.TopLeft; this.checkBox1.Location = new System.Drawing.Point(22, 148); this.checkBox1.Name = "checkBox1"; - this.checkBox1.Size = new System.Drawing.Size(417, 30); + this.checkBox1.Size = new System.Drawing.Size(416, 30); this.checkBox1.TabIndex = 2; this.checkBox1.Text = "Please check this box to take advantage of COLT fast compiler when building your\r" + "\nprojects (you can change this option in COLT plugin settings later)."; @@ -77,21 +78,36 @@ private void InitializeComponent() // // button1 // - this.button1.Location = new System.Drawing.Point(180, 197); + this.button1.Location = new System.Drawing.Point(180, 230); this.button1.Name = "button1"; this.button1.Size = new System.Drawing.Size(100, 23); - this.button1.TabIndex = 3; + this.button1.TabIndex = 4; this.button1.Text = "OK"; this.button1.UseVisualStyleBackColor = true; this.button1.Click += new System.EventHandler(this.button1_Click); // + // checkBox2 + // + this.checkBox2.AutoSize = true; + this.checkBox2.CheckAlign = System.Drawing.ContentAlignment.TopLeft; + this.checkBox2.Checked = true; + this.checkBox2.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBox2.Location = new System.Drawing.Point(22, 185); + this.checkBox2.Name = "checkBox2"; + this.checkBox2.Size = new System.Drawing.Size(427, 30); + this.checkBox2.TabIndex = 3; + this.checkBox2.Text = "Please check this box to start livecoding session automatically after the project" + + " opens\r\nin COLT (you can change this option in COLT plugin settings later)."; + this.checkBox2.UseVisualStyleBackColor = true; + // // FirstTimeDialog // this.AcceptButton = this.button1; this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(468, 251); + this.ClientSize = new System.Drawing.Size(468, 273); this.ControlBox = false; + this.Controls.Add(this.checkBox2); this.Controls.Add(this.button1); this.Controls.Add(this.textBox1); this.Controls.Add(this.label1); @@ -115,5 +131,6 @@ private void InitializeComponent() private System.Windows.Forms.Label label1; private System.Windows.Forms.TextBox textBox1; private System.Windows.Forms.Button button1; + private System.Windows.Forms.CheckBox checkBox2; } } \ No newline at end of file diff --git a/ColtPlugin/Forms/FirstTimeDialog.cs b/ColtPlugin/Forms/FirstTimeDialog.cs index 8ea960d..384dcdb 100644 --- a/ColtPlugin/Forms/FirstTimeDialog.cs +++ b/ColtPlugin/Forms/FirstTimeDialog.cs @@ -10,6 +10,7 @@ namespace ColtPlugin.Forms { public partial class FirstTimeDialog : Form { + public Boolean AutoRun = true; public Boolean InterceptBuilds = false; public String ShortCode = null; @@ -18,14 +19,16 @@ public FirstTimeDialog() InitializeComponent(); } - public FirstTimeDialog(Boolean interceptBuilds) + public FirstTimeDialog(Boolean interceptBuilds, Boolean autorun) { InitializeComponent(); InterceptBuilds = checkBox1.Checked = interceptBuilds; + AutoRun = checkBox2.Checked = autorun; } private void button1_Click(object sender, EventArgs e) { + AutoRun = checkBox2.Checked; InterceptBuilds = checkBox1.Checked; ShortCode = textBox1.Text; diff --git a/ColtPlugin/PluginMain.cs b/ColtPlugin/PluginMain.cs index c779ee0..8514561 100644 --- a/ColtPlugin/PluginMain.cs +++ b/ColtPlugin/PluginMain.cs @@ -501,10 +501,11 @@ private void GetSecurityToken(Boolean param) client.Invoke("requestShortCode", new Object[] { LocaleHelper.GetString("Info.Description").TrimEnd(new Char[] { '.' }) }); // if still here, user needs to enter the code - Forms.FirstTimeDialog dialog = new Forms.FirstTimeDialog(settingObject.InterceptBuilds); + Forms.FirstTimeDialog dialog = new Forms.FirstTimeDialog(settingObject.InterceptBuilds, settingObject.AutoRun); dialog.ShowDialog(); - // regardless of the code, set InterceptBuilds option + // regardless of the code, set boolean options + settingObject.AutoRun = dialog.AutoRun; settingObject.InterceptBuilds = dialog.InterceptBuilds; if ((dialog.ShortCode != null) && (dialog.ShortCode.Length == 4)) @@ -775,7 +776,7 @@ private COLTRemoteProject ExportCOLTProject() additionalOptions += option + " "; } - result.compilerOptions = additionalOptions.Trim(); + result.compilerOptions = additionalOptions.Trim() + (project.TraceEnabled ? " -debug" : ""); return result; } diff --git a/ColtPlugin/Rpc/AppStarter.cs b/ColtPlugin/Rpc/AppStarter.cs index b0bdbc7..fb5aa1a 100644 --- a/ColtPlugin/Rpc/AppStarter.cs +++ b/ColtPlugin/Rpc/AppStarter.cs @@ -3,7 +3,6 @@ using System; using System.Diagnostics; using System.IO; - using System.Net; using System.Timers; public delegate void AppStarterDelegate(Boolean param); diff --git a/ColtPlugin/obj/Debug/ColtPlugin.dll b/ColtPlugin/obj/Debug/ColtPlugin.dll deleted file mode 100644 index 3c90027d60b28371cce1832ea1dec4bdf0f581b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19968 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