├── 新建文件夹 └── 新建位图图像.bmp ├── Src ├── MDK2VC │ ├── Flash.ico │ ├── Help.jpg │ ├── M2V │ │ ├── UI │ │ │ ├── FormHelper.cs │ │ │ ├── FormHelper.Designer.cs │ │ │ ├── FormHelper.resx │ │ │ ├── FormMain.cs │ │ │ ├── FormMain.Designer.cs │ │ │ └── FormMain.resx │ │ ├── CoreManager.cs │ │ ├── Xml │ │ │ ├── To │ │ │ │ ├── ToVC2013.cs │ │ │ │ ├── ToVC2017.cs │ │ │ │ ├── ToVC2019.cs │ │ │ │ ├── ToVC2022.cs │ │ │ │ └── ToVCBase.cs │ │ │ ├── Interface │ │ │ │ ├── IFrom.cs │ │ │ │ └── IToVC.cs │ │ │ ├── BTree.cs │ │ │ └── From │ │ │ │ ├── Fromuvprojx.cs │ │ │ │ ├── Fromuvproj.cs │ │ │ │ ├── Fromcyprj.cs │ │ │ │ └── FromQT5.cs │ │ ├── Config │ │ │ └── MDK2VCConfig.cs │ │ └── SysConfig.cs │ ├── Properties │ │ ├── Settings.settings │ │ ├── AssemblyInfo.cs │ │ ├── Settings.Designer.cs │ │ ├── Resources.Designer.cs │ │ └── Resources.resx │ ├── Program.cs │ ├── app.config │ └── MDK2VC.csproj ├── DLL │ └── NewLife.Core.dll └── MDK2VC.sln ├── .gitignore └── Readme.MD /新建文件夹/新建位图图像.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armku/MDK2VC/HEAD/新建文件夹/新建位图图像.bmp -------------------------------------------------------------------------------- /Src/MDK2VC/Flash.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armku/MDK2VC/HEAD/Src/MDK2VC/Flash.ico -------------------------------------------------------------------------------- /Src/MDK2VC/Help.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armku/MDK2VC/HEAD/Src/MDK2VC/Help.jpg -------------------------------------------------------------------------------- /Src/DLL/NewLife.Core.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armku/MDK2VC/HEAD/Src/DLL/NewLife.Core.dll -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 此 .gitignore 文件已由 Microsoft(R) Visual Studio 自动创建。 3 | ################################################################################ 4 | 5 | .vs 6 | *.exe 7 | *.rar 8 | *.config 9 | *.pdb 10 | /Src/.vs/MDK2VC/v15 11 | /Src/MDK2VC/obj/Debug 12 | /Src/.vs 13 | /Bin/NewLife.Core.dll 14 | /Bin/NewLife.Core.xml 15 | /Bin/Log 16 | -------------------------------------------------------------------------------- /Src/MDK2VC/M2V/UI/FormHelper.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Windows.Forms; 3 | 4 | namespace MDK2VC.M2V.UI 5 | { 6 | public partial class FormHelper : Form 7 | { 8 | public FormHelper() 9 | { 10 | InitializeComponent(); 11 | } 12 | 13 | private void FormHelper_Load(object sender, EventArgs e) 14 | { 15 | pictureBox1.Focus(); 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Src/MDK2VC/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Src/MDK2VC/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Windows.Forms; 3 | 4 | namespace MDK2VC 5 | { 6 | static class Program 7 | { 8 | /// 9 | /// 应用程序的主入口点。 10 | /// 11 | [STAThread] 12 | static void Main() 13 | { 14 | Application.EnableVisualStyles(); 15 | Application.SetCompatibleTextRenderingDefault(false); 16 | Application.Run(new FormMain()); 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Src/MDK2VC/M2V/CoreManager.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Win32; 2 | 3 | namespace MDK2VC.M2V.Xml 4 | { 5 | public class CoreManager 6 | { 7 | /// 8 | /// 来源 9 | /// 10 | public IFrom From { get; set; } 11 | /// 12 | /// 目标 13 | /// 14 | public IToVC To 15 | { get; set; } 16 | /// 17 | /// 获取Keil路径 18 | /// 19 | /// 20 | static string GetKeil() 21 | { 22 | var reg = Registry.LocalMachine.OpenSubKey("Software\\Keil\\Products\\MDK"); 23 | if (reg == null) return null; 24 | 25 | return reg.GetValue("Path") + ""; 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /Readme.MD: -------------------------------------------------------------------------------- 1 | #MDK 工程 转换为VC2022、VC2019、VC2017工程 2 | 3 | ##.net4.0 C#开发 4 | 5 | ##支持MDK4 MDK5 6 | 7 | | 项目 | 年份 | 状态 | 语言环境 | 说明 | 8 | | :-----------------------------------------------------: | :--: | :----: | :------: | :------------------------------------------------------: | 9 | | [MDK2VC](https://github.com/armku/MDK2VC) | 2018 | 维护中 | C# | MDK工程转VC2017、VC2019工程 | 10 | | [MDKTimeHelper](https://github.com/armku/MDKTimeHelper) | 2018 | 维护中 | c# | mdk工程助手,时间字符串(yyyy-MM-dd HH:mm:ss)转为当前时间 | 11 | | [HelperComm](https://github.com/armku/HelperComm) | 2017 | 维护中 | c# | 串口调试助手 | 12 | 13 | -------------------------------------------------------------------------------- /Src/MDK2VC/M2V/Xml/To/ToVC2013.cs: -------------------------------------------------------------------------------- 1 | using System.Text; 2 | 3 | namespace MDK2VC.M2V.Xml 4 | { 5 | public class ToVC2013 : ToVCBase, IToVC 6 | { 7 | public void Createsln(SysConfig cfg) 8 | { 9 | var builder = new StringBuilder(); 10 | 11 | builder.AppendLine("Microsoft Visual Studio Solution File, Format Version 12.00"); 12 | builder.AppendLine("# Visual Studio 2013"); 13 | builder.AppendLine("VisualStudioVersion = 12.0.21005.1"); 14 | builder.AppendLine("MinimumVisualStudioVersion = 10.0.40219.1"); 15 | 16 | CreateslnBase(cfg, builder.ToString()); 17 | } 18 | public void Createvcxproj(SysConfig cfg) 19 | { 20 | CreatevcxprojBase(cfg, 141); 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Src/MDK2VC/M2V/Xml/To/ToVC2017.cs: -------------------------------------------------------------------------------- 1 | using System.Text; 2 | 3 | namespace MDK2VC.M2V.Xml 4 | { 5 | public class ToVC2017 : ToVCBase, IToVC 6 | { 7 | public void Createsln(SysConfig cfg) 8 | { 9 | var builder = new StringBuilder(); 10 | 11 | builder.AppendLine("Microsoft Visual Studio Solution File, Format Version 12.00"); 12 | builder.AppendLine("# Visual Studio 15"); 13 | builder.AppendLine("VisualStudioVersion = 15.0.35213.121"); 14 | builder.AppendLine("MinimumVisualStudioVersion = 10.0.40219.1"); 15 | 16 | CreateslnBase(cfg, builder.ToString()); 17 | } 18 | public void Createvcxproj(SysConfig cfg) 19 | { 20 | CreatevcxprojBase(cfg, 141); 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Src/MDK2VC/M2V/Xml/To/ToVC2019.cs: -------------------------------------------------------------------------------- 1 | using System.Text; 2 | 3 | namespace MDK2VC.M2V.Xml 4 | { 5 | public class ToVC2019 : ToVCBase, IToVC 6 | { 7 | public void Createsln(SysConfig cfg) 8 | { 9 | var builder = new StringBuilder(); 10 | builder.AppendLine("Microsoft Visual Studio Solution File, Format Version 12.00"); 11 | builder.AppendLine("# Visual Studio Version 16"); 12 | builder.AppendLine("VisualStudioVersion = 16.0.29201.188"); 13 | builder.AppendLine("MinimumVisualStudioVersion = 10.0.40219.1"); 14 | 15 | CreateslnBase(cfg, builder.ToString()); 16 | } 17 | public void Createvcxproj(SysConfig cfg) 18 | { 19 | CreatevcxprojBase(cfg, 142); 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Src/MDK2VC/M2V/Xml/To/ToVC2022.cs: -------------------------------------------------------------------------------- 1 | using System.Text; 2 | 3 | namespace MDK2VC.M2V.Xml 4 | { 5 | public class ToVC2022 : ToVCBase, IToVC 6 | { 7 | public void Createsln(SysConfig cfg) 8 | { 9 | var builder = new StringBuilder(); 10 | builder.AppendLine("Microsoft Visual Studio Solution File, Format Version 12.00"); 11 | builder.AppendLine("# Visual Studio Version 16"); 12 | builder.AppendLine("VisualStudioVersion = 16.0.29201.188"); 13 | builder.AppendLine("MinimumVisualStudioVersion = 10.0.40219.1"); 14 | 15 | CreateslnBase(cfg, builder.ToString()); 16 | } 17 | public void Createvcxproj(SysConfig cfg) 18 | { 19 | CreatevcxprojBase(cfg, 143); 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Src/MDK2VC/app.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |
6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /Src/MDK2VC/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // 有关程序集的一般信息由以下 6 | // 控制。更改这些特性值可修改 7 | // 与程序集关联的信息。 8 | [assembly: AssemblyTitle("MDK2VC")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("MDK2VC")] 13 | [assembly: AssemblyCopyright("Copyright © 2018-2021")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // 将 ComVisible 设置为 false 会使此程序集中的类型 18 | //对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 19 | //请将此类型的 ComVisible 特性设置为 true。 20 | [assembly: ComVisible(false)] 21 | 22 | // 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID 23 | [assembly: Guid("6716ad1d-3f95-4863-a8c1-f393521f58b7")] 24 | 25 | // 程序集的版本信息由下列四个值组成: 26 | // 27 | // 主版本 28 | // 次版本 29 | // 生成号 30 | // 修订号 31 | // 32 | // 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号 33 | // 方法是按如下所示使用“*”: : 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.2021.0125")] 36 | [assembly: AssemblyFileVersion("1.0.2021.0125")] 37 | -------------------------------------------------------------------------------- /Src/MDK2VC/M2V/Xml/Interface/IFrom.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.ComponentModel; 3 | 4 | namespace MDK2VC.M2V.Xml 5 | { 6 | /// 7 | /// 8 | /// 9 | public interface IFrom 10 | { 11 | /// 12 | /// 获取生成目标 13 | /// 14 | /// 15 | /// 16 | List GetMacroTarget(string path); 17 | /// 18 | /// 获取宏定义 19 | /// 20 | /// 21 | /// 22 | List GetMacroDefine(string path); 23 | /// 24 | /// 25 | /// 26 | /// 27 | /// 28 | string GetTargetName(string path); 29 | /// 30 | /// 获取包含路径 31 | /// 32 | /// 33 | /// 34 | List GetIncludePath(string path); 35 | /// 36 | /// 获取工程中文件 37 | /// 38 | /// 工程文件名 39 | /// 40 | [Description("获取工程中文件")] 41 | BTree GetFiles(string filename); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /Src/MDK2VC/M2V/Config/MDK2VCConfig.cs: -------------------------------------------------------------------------------- 1 | using NewLife.Xml; 2 | using System.Collections.Generic; 3 | using System.ComponentModel; 4 | 5 | namespace MDK2VC.M2V.Config 6 | { 7 | /// 8 | /// 9 | /// 10 | [XmlConfigFile(@"Config/MDK2VCConfig.config")] 11 | [Description("系统参数")] 12 | public class MDK2VCConfig : XmlConfig 13 | { 14 | /// 15 | /// 手动设置输出路径 16 | /// 17 | [Description("手动设置输出路径")] 18 | public bool OutputPathManulSet { get; set; } = false; 19 | /// 20 | /// 输出工程目标 21 | /// 22 | [Description("输出工程目标")] 23 | public string StrOutputPathTarget { get; set; } = "VC2019"; 24 | /// 25 | /// mdk工程路径 26 | /// 27 | [Description("mdk工程路径")] 28 | public string StrMDKFilePath { get; set; } = ""; 29 | /// 30 | /// QT工程路径 31 | /// 32 | [Description("QT工程路径")] 33 | public string StrQTFilePath { get; set; } = ""; 34 | /// 35 | /// QTVs工程路径 36 | /// 37 | [Description("QTVs工程路径")] 38 | public string StrQTVsFilePath { get; set; } = ""; 39 | /// 40 | /// 历史 41 | /// 42 | [Description("历史")] 43 | public List StrMDKFilePathHis { get; set; } = new List(); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /Src/MDK2VC.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 15 4 | VisualStudioVersion = 15.0.27130.2036 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MDK2VC", "MDK2VC\MDK2VC.csproj", "{6716AD1D-3F95-4863-A8C1-F393521F58B7}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|Any CPU = Debug|Any CPU 11 | Debug|x86 = Debug|x86 12 | Release|Any CPU = Release|Any CPU 13 | Release|x86 = Release|x86 14 | EndGlobalSection 15 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 16 | {6716AD1D-3F95-4863-A8C1-F393521F58B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 17 | {6716AD1D-3F95-4863-A8C1-F393521F58B7}.Debug|Any CPU.Build.0 = Debug|Any CPU 18 | {6716AD1D-3F95-4863-A8C1-F393521F58B7}.Debug|x86.ActiveCfg = Debug|Any CPU 19 | {6716AD1D-3F95-4863-A8C1-F393521F58B7}.Debug|x86.Build.0 = Debug|Any CPU 20 | {6716AD1D-3F95-4863-A8C1-F393521F58B7}.Release|Any CPU.ActiveCfg = Release|Any CPU 21 | {6716AD1D-3F95-4863-A8C1-F393521F58B7}.Release|Any CPU.Build.0 = Release|Any CPU 22 | {6716AD1D-3F95-4863-A8C1-F393521F58B7}.Release|x86.ActiveCfg = Release|Any CPU 23 | {6716AD1D-3F95-4863-A8C1-F393521F58B7}.Release|x86.Build.0 = Release|Any CPU 24 | EndGlobalSection 25 | GlobalSection(SolutionProperties) = preSolution 26 | HideSolutionNode = FALSE 27 | EndGlobalSection 28 | GlobalSection(ExtensibilityGlobals) = postSolution 29 | SolutionGuid = {79C933D6-9C66-4091-B0D2-DA079D132F57} 30 | EndGlobalSection 31 | EndGlobal 32 | -------------------------------------------------------------------------------- /Src/MDK2VC/Properties/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // 此代码由工具生成。 4 | // 运行时版本:4.0.30319.42000 5 | // 6 | // 对此文件的更改可能会导致不正确的行为,并且如果 7 | // 重新生成代码,这些更改将会丢失。 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace MDK2VC.Properties { 12 | 13 | 14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.5.0.0")] 16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { 17 | 18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 19 | 20 | public static Settings Default { 21 | get { 22 | return defaultInstance; 23 | } 24 | } 25 | 26 | [global::System.Configuration.UserScopedSettingAttribute()] 27 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 28 | [global::System.Configuration.DefaultSettingValueAttribute("")] 29 | public string LastFileName { 30 | get { 31 | return ((string)(this["LastFileName"])); 32 | } 33 | set { 34 | this["LastFileName"] = value; 35 | } 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /Src/MDK2VC/M2V/Xml/Interface/IToVC.cs: -------------------------------------------------------------------------------- 1 | namespace MDK2VC.M2V.Xml 2 | { 3 | /// 4 | /// 创建目标工程 5 | /// 6 | public interface IToVC 7 | { 8 | /// 9 | /// 创建工程 10 | /// 11 | /// 12 | void Createvcxproj(SysConfig cfg); 13 | /// 14 | /// 创建VCFilters 15 | /// 16 | /// 17 | void Createfilters(SysConfig cfg); 18 | /// 19 | /// 创建users文件 20 | /// 21 | /// 22 | void Createvcxusers(SysConfig cfg); 23 | /// 24 | /// 创建解决方案 25 | /// 26 | /// 27 | void Createsln(SysConfig cfg); 28 | /// 29 | /// 生成日志文件 30 | /// 31 | /// 配置文件 32 | void Createlog(SysConfig cfg); 33 | /// 34 | /// 获取过滤器文件、文件夹列表 35 | /// 36 | /// 37 | /// 38 | string Get_ToFilter_FolderFiles(SysConfig cfg); 39 | /// 40 | /// 获取所有文件列表 41 | /// 42 | /// 43 | /// 44 | string Get_ToProj_Files(SysConfig cfg); 45 | /// 46 | /// 获取过滤器目录列表 47 | /// 48 | /// 49 | /// 50 | string Get_ToFilter_Folders(SysConfig cfg); 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /Src/MDK2VC/Properties/Resources.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // 此代码由工具生成。 4 | // 运行时版本:4.0.30319.42000 5 | // 6 | // 对此文件的更改可能会导致不正确的行为,并且如果 7 | // 重新生成代码,这些更改将会丢失。 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace MDK2VC.Properties { 12 | using System; 13 | 14 | 15 | /// 16 | /// 一个强类型的资源类,用于查找本地化的字符串等。 17 | /// 18 | // 此类是由 StronglyTypedResourceBuilder 19 | // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 20 | // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen 21 | // (以 /str 作为命令选项),或重新生成 VS 项目。 22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] 23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 25 | internal class Resources { 26 | 27 | private static global::System.Resources.ResourceManager resourceMan; 28 | 29 | private static global::System.Globalization.CultureInfo resourceCulture; 30 | 31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 32 | internal Resources() { 33 | } 34 | 35 | /// 36 | /// 返回此类使用的缓存的 ResourceManager 实例。 37 | /// 38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 39 | internal static global::System.Resources.ResourceManager ResourceManager { 40 | get { 41 | if (object.ReferenceEquals(resourceMan, null)) { 42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("MDK2VC.Properties.Resources", typeof(Resources).Assembly); 43 | resourceMan = temp; 44 | } 45 | return resourceMan; 46 | } 47 | } 48 | 49 | /// 50 | /// 重写当前线程的 CurrentUICulture 属性 51 | /// 重写当前线程的 CurrentUICulture 属性。 52 | /// 53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 54 | internal static global::System.Globalization.CultureInfo Culture { 55 | get { 56 | return resourceCulture; 57 | } 58 | set { 59 | resourceCulture = value; 60 | } 61 | } 62 | 63 | /// 64 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。 65 | /// 66 | internal static System.Drawing.Bitmap Help { 67 | get { 68 | object obj = ResourceManager.GetObject("Help", resourceCulture); 69 | return ((System.Drawing.Bitmap)(obj)); 70 | } 71 | } 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /Src/MDK2VC/M2V/Xml/BTree.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace MDK2VC.M2V.Xml 4 | { 5 | public class BTree 6 | { 7 | public BTree() 8 | { 9 | nodes = new List>(); 10 | } 11 | 12 | public BTree(T data) 13 | { 14 | this.Data = data; 15 | nodes = new List>(); 16 | } 17 | 18 | private BTree parent; 19 | /// 20 | /// 父结点 21 | /// 22 | public BTree Parent 23 | { 24 | get { return parent; } 25 | } 26 | /// 27 | /// 结点数据 28 | /// 29 | public T Data { get; set; } 30 | 31 | private List> nodes; 32 | /// 33 | /// 子结点 34 | /// 35 | public List> Nodes 36 | { 37 | get { return nodes; } 38 | } 39 | /// 40 | /// 添加结点 41 | /// 42 | /// 结点 43 | public void AddNode(BTree node) 44 | { 45 | if (!nodes.Contains(node)) 46 | { 47 | node.parent = this; 48 | nodes.Add(node); 49 | } 50 | } 51 | /// 52 | /// 添加结点 53 | /// 54 | /// 结点集合 55 | public void AddNode(List> nodes) 56 | { 57 | foreach (var node in nodes) 58 | { 59 | if (!nodes.Contains(node)) 60 | { 61 | node.parent = this; 62 | nodes.Add(node); 63 | } 64 | } 65 | } 66 | /// 67 | /// 移除结点 68 | /// 69 | /// 70 | public void Remove(BTree node) 71 | { 72 | if (nodes.Contains(node)) 73 | nodes.Remove(node); 74 | } 75 | /// 76 | /// 清空结点集合 77 | /// 78 | public void RemoveAll() 79 | { 80 | nodes.Clear(); 81 | } 82 | } 83 | public class Node 84 | { 85 | /// 86 | /// 构造 87 | /// 88 | /// 名称 89 | /// 上级名称,默认空 90 | /// 是否文件夹,默认false 91 | public Node(string name,string parentname="", bool isdir=false) 92 | { 93 | this.Name = name; 94 | this.ParentName = parentname; 95 | this.IsFile = isdir; 96 | } 97 | /// 98 | /// 当前名称 99 | /// 100 | public string Name { get; set; } 101 | /// 102 | /// 上级名称 103 | /// 104 | public string ParentName { get; set; } 105 | /// 106 | /// 是否是文件 107 | /// 108 | public bool IsFile { get; set; } 109 | } 110 | } 111 | -------------------------------------------------------------------------------- /Src/MDK2VC/M2V/UI/FormHelper.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace MDK2VC.M2V.UI 2 | { 3 | partial class FormHelper 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Windows Form Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | this.pictureBox1 = new System.Windows.Forms.PictureBox(); 32 | this.label1 = new System.Windows.Forms.Label(); 33 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); 34 | this.SuspendLayout(); 35 | // 36 | // pictureBox1 37 | // 38 | this.pictureBox1.Image = global::MDK2VC.Properties.Resources.Help; 39 | this.pictureBox1.Location = new System.Drawing.Point(12, 2); 40 | this.pictureBox1.Name = "pictureBox1"; 41 | this.pictureBox1.Size = new System.Drawing.Size(772, 653); 42 | this.pictureBox1.TabIndex = 0; 43 | this.pictureBox1.TabStop = false; 44 | // 45 | // label1 46 | // 47 | this.label1.AutoSize = true; 48 | this.label1.Font = new System.Drawing.Font("宋体", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); 49 | this.label1.ForeColor = System.Drawing.Color.Blue; 50 | this.label1.Location = new System.Drawing.Point(176, 392); 51 | this.label1.Name = "label1"; 52 | this.label1.Size = new System.Drawing.Size(255, 76); 53 | this.label1.TabIndex = 2; 54 | this.label1.Text = "1、单击此处导入MDK工程\r\n2、把MDK工程转换为VC工程\r\n3、双击此处打开MDK工程\r\n4、双击此处打开VC工程\r\n"; 55 | // 56 | // FormHelper 57 | // 58 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); 59 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 60 | this.ClientSize = new System.Drawing.Size(784, 667); 61 | this.Controls.Add(this.label1); 62 | this.Controls.Add(this.pictureBox1); 63 | this.Name = "FormHelper"; 64 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; 65 | this.Text = "说明"; 66 | this.Load += new System.EventHandler(this.FormHelper_Load); 67 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); 68 | this.ResumeLayout(false); 69 | this.PerformLayout(); 70 | 71 | } 72 | 73 | #endregion 74 | 75 | private System.Windows.Forms.PictureBox pictureBox1; 76 | private System.Windows.Forms.Label label1; 77 | } 78 | } -------------------------------------------------------------------------------- /Src/MDK2VC/M2V/Xml/From/Fromuvprojx.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.ComponentModel; 3 | using System.Text; 4 | using System.Xml; 5 | using System.Xml.Linq; 6 | 7 | namespace MDK2VC.M2V.Xml 8 | { 9 | public class Fromuvprojx:IFrom 10 | { 11 | /// 12 | /// 获取生成目标 13 | /// 14 | /// 15 | /// 16 | public List GetMacroTarget(string path) 17 | { 18 | var ret = new List(); 19 | 20 | var xmlDoc = new XmlDocument(); 21 | 22 | if (path == "") return ret; 23 | xmlDoc.Load(path); 24 | var list = xmlDoc.SelectNodes(".//Targets/*"); 25 | foreach (XmlNode node in list) 26 | { 27 | ret.Add(node.SelectSingleNode("./TargetName").InnerText); 28 | } 29 | return ret; 30 | } 31 | /// 32 | /// 获取宏定义 33 | /// 34 | /// 35 | /// 36 | public List GetMacroDefine(string path) 37 | { 38 | var ret = new List(); 39 | var builder = new StringBuilder(); 40 | var doc = XElement.Load(path); 41 | var Targets = doc.Element("Targets"); 42 | var Target = Targets.Element("Target"); 43 | var TargetOption = Target.Element("TargetOption"); 44 | var TargetArmAds = TargetOption.Element("TargetArmAds"); 45 | var Cads = TargetArmAds.Element("Cads"); 46 | var VariousControls = Cads.Element("VariousControls"); 47 | var Define = VariousControls.Element("Define"); 48 | var strs = Define.Value.ToString().Split(new char[] { ',' }); 49 | foreach (var str in strs) 50 | { 51 | builder.Append(str).Append(";"); 52 | ret.Add(str); 53 | } 54 | builder.Append("__CC_ARM;"); 55 | ret.Add("__CC_ARM"); 56 | //return builder.ToString(); 57 | return ret; 58 | } 59 | /// 60 | /// 61 | /// 62 | /// 63 | /// 64 | public string GetTargetName(string path) 65 | { 66 | return "DEBUG"; 67 | } 68 | public List GetIncludePath(string path) 69 | { 70 | var ret = new List(); 71 | var doc = XElement.Load(path); 72 | var Targets = doc.Element("Targets"); 73 | var Target = Targets.Element("Target"); 74 | var TargetOption = Target.Element("TargetOption"); 75 | var TargetArmAds = TargetOption.Element("TargetArmAds"); 76 | var Cads = TargetArmAds.Element("Cads"); 77 | var VariousControls = Cads.Element("VariousControls"); 78 | var IncludePath = VariousControls.Element("IncludePath"); 79 | 80 | var IncludePaths = IncludePath.Value.ToString().Split(new char[] { ';'}); 81 | foreach(var vn in IncludePaths) 82 | { 83 | ret.Add("..\\"+vn); 84 | } 85 | return ret; 86 | } 87 | /// 88 | /// 获取工程中文件 89 | /// 90 | /// 工程文件名 91 | /// 92 | [Description("获取工程中文件")] 93 | public BTree GetFiles(string filename) 94 | { 95 | var tree1 = new BTree 96 | { 97 | Data = new Node("文件", "", true) 98 | }; 99 | 100 | var doc = XElement.Load(filename); 101 | var Targets = doc.Element("Targets"); 102 | var Target = Targets.Element("Target"); 103 | tree1.Data.Name = Target.Element("TargetName").Value; 104 | var Groups = Target.Element("Groups"); 105 | 106 | var Group = Groups.Elements("Group"); 107 | foreach (var grou in Group) 108 | { 109 | var aa = grou.Element("GroupName"); 110 | var tree2 = new BTree 111 | { 112 | Data = new Node(aa.Value, "", false) 113 | }; 114 | tree1.AddNode(tree2); 115 | 116 | var Files = grou.Elements("Files"); 117 | foreach (var File in Files) 118 | { 119 | var file = File.Elements("File"); 120 | foreach (var ff in file) 121 | { 122 | var FilePath = ff.Element("FilePath"); 123 | if (FilePath != null) 124 | { 125 | var tree3 = new BTree 126 | { 127 | Data = new Node(FilePath.Value, "", false) 128 | }; 129 | tree2.AddNode(tree3); 130 | } 131 | } 132 | } 133 | } 134 | return tree1; 135 | } 136 | } 137 | } 138 | -------------------------------------------------------------------------------- /Src/MDK2VC/MDK2VC.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {6716AD1D-3F95-4863-A8C1-F393521F58B7} 8 | WinExe 9 | MDK2VC 10 | MDK2VC 11 | v4.0 12 | 512 13 | 14 | 15 | AnyCPU 16 | true 17 | full 18 | false 19 | ..\..\bin\ 20 | TRACE;DEBUG;FLAGNMAKE1 21 | prompt 22 | 4 23 | 24 | 25 | AnyCPU 26 | pdbonly 27 | true 28 | bin\Release\ 29 | TRACE 30 | prompt 31 | 4 32 | 33 | 34 | Flash.ico 35 | 36 | 37 | 38 | ..\DLL\NewLife.Core.dll 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | Form 60 | 61 | 62 | FormHelper.cs 63 | 64 | 65 | Form 66 | 67 | 68 | FormMain.cs 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | FormHelper.cs 87 | 88 | 89 | FormMain.cs 90 | 91 | 92 | ResXFileCodeGenerator 93 | Resources.Designer.cs 94 | Designer 95 | 96 | 97 | True 98 | Resources.resx 99 | True 100 | 101 | 102 | 103 | SettingsSingleFileGenerator 104 | Settings.Designer.cs 105 | 106 | 107 | True 108 | Settings.settings 109 | True 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | -------------------------------------------------------------------------------- /Src/MDK2VC/M2V/UI/FormHelper.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | -------------------------------------------------------------------------------- /Src/MDK2VC/M2V/Xml/From/Fromuvproj.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.ComponentModel; 3 | using System.Xml; 4 | using System.Xml.Linq; 5 | 6 | namespace MDK2VC.M2V.Xml 7 | { 8 | public class Fromuvproj : IFrom 9 | { 10 | /// 11 | /// 获取生成目标 12 | /// 13 | /// 14 | /// 15 | public List GetMacroTarget(string path) 16 | { 17 | var ret = new List(); 18 | 19 | var xmlDoc = new XmlDocument(); 20 | 21 | if (path == "") return ret; 22 | xmlDoc.Load(path); 23 | var list = xmlDoc.SelectNodes(".//Targets/*"); 24 | foreach (XmlNode node in list) 25 | { 26 | ret.Add(node.SelectSingleNode("./TargetName").InnerText); 27 | } 28 | return ret; 29 | } 30 | /// 31 | /// 获取宏定义 32 | /// 33 | /// 34 | /// 35 | public List GetMacroDefine(string path) 36 | { 37 | var TargetName = GetTargetName(path); 38 | var xmlDoc = new XmlDocument(); 39 | var aa = "none"; 40 | xmlDoc.Load(path); 41 | foreach (XmlNode node in xmlDoc.SelectNodes(".//Targets/Target")) 42 | { 43 | if (node.SelectSingleNode("./TargetName").InnerText == TargetName) 44 | { 45 | aa = node.SelectSingleNode(".//VariousControls/Define").InnerText; 46 | break; 47 | } 48 | } 49 | var ret = new List(); 50 | var strs = aa.Split(new char[] { ',' }); 51 | foreach (var str in strs) 52 | { 53 | ret.Add(str); 54 | } 55 | ret.Add("__CC_ARM"); 56 | 57 | return ret; 58 | } 59 | /// 60 | /// 61 | /// 62 | /// 63 | /// 64 | public string GetTargetName(string path) 65 | { 66 | string[] items = this.MDK_TargetRead(path); 67 | if (items.Length > 0) 68 | return items[0]; 69 | else 70 | return "DEBUG"; 71 | } 72 | private readonly XmlDocument xmlDoc = new XmlDocument(); 73 | private string[] MDK_TargetRead(string Doc) 74 | { 75 | if (Doc == "") return null; 76 | this.xmlDoc.Load(Doc); 77 | XmlNodeList list = this.xmlDoc.SelectNodes(".//Targets/*"); 78 | string[] strArray = new string[list.Count]; 79 | int index = 0; 80 | foreach (XmlNode node in list) 81 | { 82 | strArray[index] = node.SelectSingleNode("./TargetName").InnerText; 83 | index++; 84 | } 85 | return strArray; 86 | } 87 | public List GetIncludePath(string path) 88 | { 89 | XElement IncludePath = null; 90 | 91 | var ret = new List(); 92 | var doc = XElement.Load(path); 93 | var Targets = doc.Element("Targets"); 94 | var Target = Targets.Element("Target"); 95 | var TargetOption = Target.Element("TargetOption"); 96 | 97 | var TargetArmAds51 = TargetOption.Element("Target51"); 98 | var TargetArmAdsM3 = TargetOption.Element("TargetArmAds"); 99 | if (TargetArmAds51!=null && TargetArmAds51.HasElements) 100 | { 101 | var Cads = TargetArmAds51.Element("C51"); 102 | var VariousControls = Cads.Element("VariousControls"); 103 | IncludePath = VariousControls.Element("IncludePath"); 104 | } 105 | else if (TargetArmAdsM3!=null && TargetArmAdsM3.HasElements) 106 | { 107 | var Cads = TargetArmAdsM3.Element("Cads"); 108 | var VariousControls = Cads.Element("VariousControls"); 109 | IncludePath = VariousControls.Element("IncludePath"); 110 | } 111 | else { } 112 | 113 | var IncludePaths = IncludePath.Value.ToString().Split(new char[] { ';' }); 114 | foreach (var vn in IncludePaths) 115 | { 116 | ret.Add("..\\" + vn); 117 | } 118 | ret.Add(@"C:\Keil_v5\ARM\ARMCC\include"); 119 | return ret; 120 | } 121 | /// 122 | /// 获取工程中文件 123 | /// 124 | /// 工程文件名 125 | /// 126 | [Description("获取工程中文件")] 127 | public BTree GetFiles(string filename) 128 | { 129 | var tree1 = new BTree 130 | { 131 | Data = new Node("文件", "", true) 132 | }; 133 | 134 | var doc = XElement.Load(filename); 135 | var Targets = doc.Element("Targets"); 136 | var Target = Targets.Element("Target"); 137 | var Groups = Target.Element("Groups"); 138 | 139 | var Group = Groups.Elements("Group"); 140 | foreach (var grou in Group) 141 | { 142 | var aa = grou.Element("GroupName"); 143 | var tree2 = new BTree 144 | { 145 | Data = new Node(aa.Value, "", false) 146 | }; 147 | tree1.AddNode(tree2); 148 | 149 | var Files = grou.Elements("Files"); 150 | foreach (var File in Files) 151 | { 152 | var file = File.Elements("File"); 153 | foreach (var ff in file) 154 | { 155 | var FilePath = ff.Element("FilePath"); 156 | if (FilePath != null) 157 | { 158 | var tree3 = new BTree 159 | { 160 | Data = new Node(FilePath.Value, "", false) 161 | }; 162 | tree2.AddNode(tree3); 163 | } 164 | } 165 | } 166 | } 167 | return tree1; 168 | } 169 | } 170 | } 171 | -------------------------------------------------------------------------------- /Src/MDK2VC/Properties/Resources.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 122 | ..\Help.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 123 | 124 | -------------------------------------------------------------------------------- /Src/MDK2VC/M2V/Xml/From/Fromcyprj.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.ComponentModel; 3 | using System.IO; 4 | 5 | namespace MDK2VC.M2V.Xml 6 | { 7 | class Fromcyprj : IFrom 8 | { 9 | /// 10 | /// 获取生成目标 11 | /// 12 | /// 13 | /// 14 | public List GetMacroTarget(string path) 15 | { 16 | var ret = new List(); 17 | 18 | return ret; 19 | } 20 | /// 21 | /// 获取宏定义 22 | /// 23 | /// 24 | /// 25 | public List GetMacroDefine(string path) 26 | { 27 | var ret = new List 28 | { 29 | "DEBUG" 30 | }; 31 | return ret; 32 | } 33 | /// 34 | /// 35 | /// 36 | /// 37 | /// 38 | public string GetTargetName(string path) 39 | { 40 | return "DEBUG"; 41 | } 42 | public List GetIncludePath(string path) 43 | { 44 | var ret = new List 45 | { 46 | @"..", 47 | @"..\Generated_Source\PSoC5" 48 | }; 49 | return ret; 50 | } 51 | /// 52 | /// 获取工程中文件 53 | /// 54 | /// 工程文件名 55 | /// 56 | [Description("获取工程中文件")] 57 | public BTree GetFiles(string filename) 58 | { 59 | var treelevel_0 = new BTree 60 | { 61 | Data = new Node("文件", "", true) 62 | }; 63 | 64 | var namegroup = ""; 65 | var currentnode = treelevel_0; 66 | var parentnode = treelevel_0;//上一级 67 | var grandparentnode = treelevel_0;//上上级 68 | bool hasfiles = false; 69 | if (File.Exists(filename)) 70 | { 71 | using (var sr = File.OpenText(filename)) 72 | { 73 | var s = ""; 74 | while ((s = sr.ReadLine()) != null) 75 | { 76 | if (s.IndexOf("type_name") <= 0) 77 | continue; 78 | if (s.IndexOf("xml_contents_version") >= 0) 79 | continue; 80 | var ssspaces = s.Split(' '); 81 | foreach (var sss in ssspaces) 82 | { 83 | var ssequals = sss.Split('='); 84 | if ((ssequals != null) && ssequals.Length == 2 && ssequals[0].Equals("name")) 85 | { 86 | namegroup = ssequals[1].Split('"')[1]; 87 | } 88 | if ((ssequals != null) && ssequals.Length == 2 && ssequals[0].Equals("persistent")) 89 | { 90 | if (ssequals[1].Split('"')[1].Length == 0) 91 | { 92 | //文件夹 93 | var tnode = new BTree 94 | { 95 | Data = new Node(namegroup, "", true) 96 | }; 97 | 98 | if (hasfiles) 99 | { 100 | //已经有文件 101 | parentnode.AddNode(tnode); 102 | currentnode = tnode; 103 | } 104 | else 105 | { 106 | //一直是文件夹 107 | currentnode.AddNode(tnode); 108 | grandparentnode = parentnode; 109 | parentnode = currentnode; 110 | currentnode = tnode; 111 | } 112 | hasfiles = false; 113 | } 114 | else 115 | { 116 | //文件 117 | if (ssequals[1].Split('"')[1].IndexOf(".cyprj") >= 0) 118 | { 119 | //工程名称 120 | treelevel_0.Data.Name = ssequals[1].Split('"')[1]; 121 | hasfiles = false; 122 | } 123 | else if (ssequals[1].Split('"')[1].IndexOf(".cydwr") >= 0) 124 | { 125 | //特殊目录 126 | hasfiles = false; 127 | } 128 | else if (ssequals[1].Split('"')[1].IndexOf("TopDesign") >= 0) 129 | { 130 | //特殊目录 131 | hasfiles = false; 132 | } 133 | else if ((ssequals[1].Split('"')[1].IndexOf("Generated_Source") >= 0)&&((ssequals[1].Split('"')[1].Length== "Generated_Source".Length))) 134 | { 135 | //特殊目录 136 | var tree3 = new BTree 137 | { 138 | Data = new Node(ssequals[1].Split('"')[1]) 139 | }; 140 | treelevel_0.AddNode(tree3); 141 | 142 | grandparentnode = treelevel_0; 143 | parentnode = treelevel_0; 144 | currentnode = tree3; 145 | hasfiles = false; 146 | } 147 | else if ((ssequals[1].Split('"')[1].IndexOf(@"Generated_Source\PSoC5") >= 0) && ((ssequals[1].Split('"')[1].Length == @"Generated_Source\PSoC5".Length))) 148 | { 149 | //特殊目录 150 | var tree3 = new BTree 151 | { 152 | Data = new Node(ssequals[1].Split('"')[1]) 153 | }; 154 | tree3.Data.Name = "PSoC5"; 155 | currentnode.AddNode(tree3); 156 | 157 | grandparentnode = parentnode; 158 | parentnode = currentnode; 159 | currentnode = tree3; 160 | 161 | grandparentnode = parentnode; 162 | parentnode = currentnode; 163 | 164 | hasfiles = false; 165 | } 166 | else 167 | { 168 | //常规文件 169 | var tree3 = new BTree 170 | { 171 | Data = new Node(ssequals[1].Split('"')[1]) 172 | }; 173 | currentnode.AddNode(tree3); 174 | hasfiles = true; 175 | } 176 | } 177 | } 178 | } 179 | 180 | } 181 | } 182 | } 183 | return treelevel_0; 184 | } 185 | } 186 | } 187 | -------------------------------------------------------------------------------- /Src/MDK2VC/M2V/SysConfig.cs: -------------------------------------------------------------------------------- 1 | using MDK2VC.M2V.Xml; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.ComponentModel; 5 | using System.IO; 6 | using System.Runtime.InteropServices; 7 | using System.Text; 8 | 9 | namespace MDK2VC.M2V 10 | { 11 | /// 12 | /// 系统参数配置 13 | /// 14 | [StructLayout(LayoutKind.Sequential)] 15 | public class SysConfig 16 | { 17 | /// 18 | /// 转换目标 VC2013 VC2017 2019 VC2022 19 | /// 20 | [Description("转换目标 VC2013 VC2017 VC2019 VC2022")] 21 | public int TargetType { get; set; } = 2022; 22 | /// 23 | /// 24 | /// 25 | [Description("")] 26 | public string UV4_Path { get; set; } 27 | /// 28 | /// 29 | /// 30 | [Description("")] 31 | public string MDK_Project_Path { get; set; } 32 | /// 33 | /// 34 | /// 35 | [Description("")] 36 | public string MDK_Project_File { get; set; } 37 | /// 38 | /// 39 | /// 40 | [Description("")] 41 | public string MDK_Target { get; set; } 42 | /// 43 | /// 44 | /// 45 | [Description("")] 46 | public string ProjectName { get; set; } 47 | /// 48 | /// 49 | /// 50 | [Description("")] 51 | public string IncludePath { get; set; } 52 | /// 53 | /// vcxproj文件路径 54 | /// 55 | [Description("vcxproj文件路径")] 56 | public string VCProject_Path { get; set; } 57 | /// 58 | /// VC 工程名 59 | /// 60 | [Description("VC 工程名")] 61 | public string VcxprojName 62 | { 63 | get 64 | { 65 | return this.ProjectName + ".vcxproj"; 66 | } 67 | } 68 | /// 69 | /// VC filters文件名 70 | /// 71 | [Description("VC filters 文件名")] 72 | public string VC_Filters_Name 73 | { 74 | get 75 | { 76 | return this.VcxprojName + ".filters"; 77 | } 78 | } 79 | /// 80 | /// VC用户文件 81 | /// 82 | [Description("VC用户文件")] 83 | public string VC_UserFileName 84 | { 85 | get 86 | { 87 | return this.VcxprojName + ".user"; 88 | } 89 | } 90 | /// 91 | /// 92 | /// 93 | [Description("")] 94 | public string NMakePreprocessorDefinitions { get; set; } 95 | /// 96 | /// 97 | /// 98 | [Description("")] 99 | public string NMakeBuildCommandLine { get; set; } 100 | /// 101 | /// 102 | /// 103 | [Description("")] 104 | public string NMakeCleanCommandLine { get; set; } 105 | /// 106 | /// 107 | /// 108 | [Description("")] 109 | public string LocalDebuggerCommandArguments { get; set; } 110 | /// 111 | /// 112 | /// 113 | [Description("")] 114 | public string LocalDebuggerWorkingDirectory { get; set; } 115 | /// 116 | /// 工程文件路径 117 | /// 118 | [Description("工程文件路径")] 119 | public string FromFilePath { get; set; } 120 | /// 121 | /// 122 | /// 123 | public string TargetName { get; set; } 124 | /// 125 | public string VCPath 126 | { 127 | get 128 | { 129 | var outdir = "\\VC2022"; 130 | switch(TargetType) 131 | { 132 | case 2022: 133 | outdir = "\\VC2022"; 134 | break; 135 | case 2019: 136 | outdir = "\\VC2019"; 137 | break; 138 | case 2017: 139 | outdir = "\\VC2017"; 140 | break; 141 | case 2013: 142 | outdir = "\\VC2013"; 143 | break; 144 | default: 145 | break; 146 | } 147 | return this.DirectoryName + outdir; 148 | } 149 | } 150 | /// 151 | /// vcxproj文件路径 152 | /// 153 | [Description("vcxproj文件路径")] 154 | public string Vcxproj 155 | { 156 | get 157 | { 158 | return this.VCPath + "\\"+ FileNameWithoutExtension + ".vcxproj"; 159 | } 160 | } 161 | /// 162 | /// filters文件路径 163 | /// 164 | [Description("filters文件路径")] 165 | public string Filters 166 | { 167 | get 168 | { 169 | return this.VCPath + "\\" + FileNameWithoutExtension + ".vcxproj.filters"; 170 | } 171 | } 172 | /// 173 | /// sln文件路径 174 | /// 175 | [Description("sln文件路径")] 176 | public string Sln 177 | { 178 | get 179 | { 180 | return this.VCPath + "\\" + FileNameWithoutExtension + ".sln"; 181 | } 182 | } 183 | public string Vcusers 184 | { 185 | get 186 | { 187 | return this.VCPath + "\\" + FileNameWithoutExtension + ".vcxproj.user"; 188 | } 189 | } 190 | /// 191 | /// 宏定义 192 | /// 193 | public List MacroDefine { private get; set; } 194 | /// 195 | /// 预定义 196 | /// 197 | public string MacroDefineStr 198 | { 199 | get 200 | { 201 | var builder = new StringBuilder(); 202 | foreach(var str in MacroDefine) 203 | { 204 | builder.Append(str.Trim()).Append(";"); 205 | } 206 | return builder.ToString(); 207 | } 208 | } 209 | /// 210 | /// 预定义 211 | /// 212 | public string MacroDefineStrCNMake 213 | { 214 | get 215 | { 216 | var builder = new StringBuilder(); 217 | foreach (var str in MacroDefine) 218 | { 219 | builder.Append(str.Trim()).Append(","); 220 | } 221 | builder = builder.Remove(builder.Length-1,1); 222 | return builder.ToString(); 223 | } 224 | } 225 | /// 226 | /// 227 | /// 228 | public string Projguid { get; set; } 229 | public string Projguidvc 230 | { 231 | get 232 | { 233 | var builder = new StringBuilder(); 234 | builder.Append(Projguid); 235 | return builder.ToString(); 236 | } 237 | } 238 | /// 239 | /// 文件路径 240 | /// 241 | public List IncludePathOld { private get; set; } 242 | /// 243 | /// 项目包含文件 244 | /// 245 | public BTree ProjFiles { get; set; } 246 | /// 247 | /// 文件路径 248 | /// 249 | public string IncludePathStr 250 | { 251 | get 252 | { 253 | var builder = new StringBuilder(); 254 | for(int i=0;i 264 | /// 仅文件名,不包含路径 hello 265 | /// 266 | public string FileNameWithoutExtension 267 | { 268 | get 269 | { 270 | return Path.GetFileNameWithoutExtension(FromFilePath); 271 | } 272 | } 273 | public string DirectoryName 274 | { 275 | get 276 | { 277 | return Path.GetDirectoryName(FromFilePath); 278 | } 279 | } 280 | /// 281 | /// 返回扩展名 :.txt 282 | /// 283 | public string Extension 284 | { 285 | get 286 | { 287 | return Path.GetExtension(FromFilePath); 288 | } 289 | } 290 | /// 291 | /// 过滤器文件、目录列表 292 | /// 293 | public string ToFilter_FileFolders { get; set; } 294 | /// 295 | /// 所有文件列表 296 | /// 297 | public string ToProj_Files { get; set; } 298 | /// 299 | /// 过滤器目录列表 300 | /// 301 | public string ToFilter_files { get; set; } 302 | } 303 | 304 | [StructLayout(LayoutKind.Sequential)] 305 | public struct _Config 306 | { 307 | /// 308 | /// 309 | /// 310 | [Description("")] 311 | public string ToolName { get; set; } 312 | /// 313 | /// 314 | /// 315 | [Description("")] 316 | public string ToolsVersion { get; set; } 317 | /// 318 | /// 319 | /// 320 | [Description("")] 321 | public string UV4Path { get; set; } 322 | /// 323 | /// 324 | /// 325 | [Description("")] 326 | public string DocName { get; set; } 327 | } 328 | } 329 | static class Fff 330 | { 331 | public static void Write(this FileStream fs, byte[] array) 332 | { 333 | fs.Write(array, 0, array.Length); 334 | } 335 | } 336 | -------------------------------------------------------------------------------- /Src/MDK2VC/M2V/Xml/From/FromQT5.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel; 4 | using System.IO; 5 | using System.Text; 6 | 7 | namespace MDK2VC.M2V.Xml 8 | { 9 | public class FromQT5 : IFrom 10 | { 11 | /// 12 | /// 获取生成目标 13 | /// 14 | /// 15 | /// 16 | public List GetMacroTarget(string path) 17 | { 18 | var ret = new List(); 19 | 20 | if (path == "") return ret; 21 | 22 | 23 | ret.Add("QT"); 24 | return ret; 25 | } 26 | /// 27 | /// 获取宏定义 28 | /// 29 | /// 30 | /// 31 | public List GetMacroDefine(string path) 32 | { 33 | var ret = new List(); 34 | var builder = new StringBuilder(); 35 | 36 | builder.Append("__CC_ARM;"); 37 | ret.Add("__CC_ARM"); 38 | //return builder.ToString(); 39 | return ret; 40 | } 41 | /// 42 | /// 43 | /// 44 | /// 45 | /// 46 | public string GetTargetName(string path) 47 | { 48 | return "DEBUG"; 49 | } 50 | public List GetIncludePath(string path) 51 | { 52 | var ret = new List(); 53 | var aa = Path.GetDirectoryName(path); 54 | ret.Add(aa); 55 | 56 | var qtPath = @"C:\Qt\Qt5.10.0\5.10.0\mingw53_32\include\"; 57 | 58 | ret.Add(qtPath+@"ActiveQt"); 59 | ret.Add(qtPath + @"Qt3DAnimation"); 60 | ret.Add(qtPath + @"Qt3DCore"); 61 | ret.Add(qtPath + @"Qt3DExtras"); 62 | ret.Add(qtPath + @"Qt3DInput"); 63 | ret.Add(qtPath + @"Qt3DLogic"); 64 | ret.Add(qtPath + @"Qt3DQuick"); 65 | ret.Add(qtPath + @"Qt3DQuickAnimation"); 66 | ret.Add(qtPath + @"Qt3DQuickExtras"); 67 | ret.Add(qtPath + @"Qt3DQuickInput"); 68 | ret.Add(qtPath + @"Qt3DQuickRender"); 69 | ret.Add(qtPath + @"Qt3DQuickScene2D"); 70 | ret.Add(qtPath + @"Qt3DRender"); 71 | ret.Add(qtPath + @"QtAccessibilitySupport"); 72 | ret.Add(qtPath + @"QtANGLE\EGL"); 73 | ret.Add(qtPath + @"QtANGLE\GLES2"); 74 | ret.Add(qtPath + @"QtANGLE\GLES3"); 75 | ret.Add(qtPath + @"QtANGLE\KHR"); 76 | ret.Add(qtPath + @"QtBluetooth"); 77 | ret.Add(qtPath + @"QtCharts"); 78 | ret.Add(qtPath + @"QtConcurrent"); 79 | ret.Add(qtPath + @"QtCore"); 80 | ret.Add(qtPath + @"QtDataVisualization"); 81 | ret.Add(qtPath + @"QtDBus"); 82 | ret.Add(qtPath + @"QtDesigner"); 83 | ret.Add(qtPath + @"QtDesignerComponents"); 84 | ret.Add(qtPath + @"QtDeviceDiscoverySupport"); 85 | ret.Add(qtPath + @"QtEdidSupport"); 86 | ret.Add(qtPath + @"QtEglSupport"); 87 | ret.Add(qtPath + @"QtEventDispatcherSupport"); 88 | ret.Add(qtPath + @"QtFbSupport"); 89 | ret.Add(qtPath + @"QtFontDatabaseSupport"); 90 | ret.Add(qtPath + @"QtGamepad"); 91 | ret.Add(qtPath + @"QtGui"); 92 | ret.Add(qtPath + @"QtHelp"); 93 | ret.Add(qtPath + @"QtLocation"); 94 | ret.Add(qtPath + @"QtMultimedia"); 95 | ret.Add(qtPath + @"QtMultimediaQuick"); 96 | ret.Add(qtPath + @"QtMultimediaWidgets"); 97 | ret.Add(qtPath + @"QtNetwork"); 98 | ret.Add(qtPath + @"QtNetworkAuth"); 99 | ret.Add(qtPath + @"QtNfc"); 100 | ret.Add(qtPath + @"QtOpenGL"); 101 | ret.Add(qtPath + @"QtOpenGLExtensions"); 102 | ret.Add(qtPath + @"QtPacketProtocol"); 103 | ret.Add(qtPath + @"QtPlatformCompositorSupport"); 104 | ret.Add(qtPath + @"QtPlatformHeaders"); 105 | ret.Add(qtPath + @"QtPositioning"); 106 | ret.Add(qtPath + @"QtPrintSupport"); 107 | ret.Add(qtPath + @"QtQml"); 108 | ret.Add(qtPath + @"QtQmlDebug"); 109 | ret.Add(qtPath + @"QtQuick"); 110 | ret.Add(qtPath + @"QtQuickControls2"); 111 | ret.Add(qtPath + @"QtQuickParticles"); 112 | ret.Add(qtPath + @"QtQuickTemplates2"); 113 | ret.Add(qtPath + @"QtQuickTest"); 114 | ret.Add(qtPath + @"QtQuickWidgets"); 115 | ret.Add(qtPath + @"QtRemoteObjects"); 116 | ret.Add(qtPath + @"QtRepParser"); 117 | ret.Add(qtPath + @"QtScript"); 118 | ret.Add(qtPath + @"QtScriptTools"); 119 | ret.Add(qtPath + @"QtScxml"); 120 | ret.Add(qtPath + @"QtSensors"); 121 | ret.Add(qtPath + @"QtSerialBus"); 122 | ret.Add(qtPath + @"QtSerialPort"); 123 | ret.Add(qtPath + @"QtSql"); 124 | ret.Add(qtPath + @"QtSvg"); 125 | ret.Add(qtPath + @"QtTest"); 126 | ret.Add(qtPath + @"QtTextToSpeech"); 127 | ret.Add(qtPath + @"QtThemeSupport"); 128 | ret.Add(qtPath + @"QtUiPlugin"); 129 | ret.Add(qtPath + @"QtUiTools"); 130 | ret.Add(qtPath + @"QtWebChannel"); 131 | ret.Add(qtPath + @"QtWebSockets"); 132 | ret.Add(qtPath + @"QtWidgets"); 133 | ret.Add(qtPath + @"QtWinExtras"); 134 | ret.Add(qtPath + @"QtXml"); 135 | ret.Add(qtPath + @"QtXmlPatterns"); 136 | return ret; 137 | } 138 | /// 139 | /// 获取的文件内容 140 | /// 141 | public string files { get; set; } = ""; 142 | /// 143 | /// 获取的文件内容 144 | /// 145 | public string SOURCES { get; set; } = ""; 146 | /// 147 | /// 获取的文件内容 148 | /// 149 | public string HEADERS { get; set; } = ""; 150 | 151 | 152 | 153 | 154 | /// 155 | /// 获取工程中文件 156 | /// 157 | /// 工程文件名 158 | /// 159 | [Description("获取工程中文件")] 160 | public BTree GetFiles(string filename) 161 | { 162 | var tree1 = new BTree 163 | { 164 | Data = new Node("文件", "", true) 165 | }; 166 | var tree2 = new BTree 167 | { 168 | Data = new Node("QT", "", false) 169 | }; 170 | using (StreamReader sr = new StreamReader(filename)) 171 | { 172 | string line; 173 | 174 | files = ""; 175 | // 从文件读取并显示行,直到文件的末尾 ,文件以;分割 176 | while ((line = sr.ReadLine()) != null) 177 | { 178 | line = line.Trim(); 179 | SOURCES = ""; 180 | HEADERS = ""; 181 | 182 | //注释语句忽略 183 | if (line.StartsWith("#")) 184 | continue; 185 | if (line.Trim().Length == 0) 186 | continue; 187 | 188 | if (line.EndsWith(@"\")) 189 | { 190 | files += line.Remove(line.Length - 1, 1) + ";"; 191 | } 192 | else 193 | { 194 | files += line + Environment.NewLine; 195 | } 196 | } 197 | 198 | //System.Windows.Forms.MessageBox.Show(files); 199 | 200 | //分析文件 201 | var fileline = files.Split(Environment.NewLine); 202 | foreach (var vn in fileline) 203 | { 204 | if (vn.StartsWith("SOURCES")) 205 | { 206 | SOURCES = vn; 207 | } 208 | if (vn.StartsWith("HEADERS")) 209 | { 210 | HEADERS = vn; 211 | } 212 | } 213 | var sourceline = SOURCES.Split(";"); 214 | foreach(var vn in sourceline) 215 | { 216 | if (vn.StartsWith("SOURCES")) 217 | continue; 218 | 219 | var vns = vn.Split('/'); 220 | 221 | if (vns.Length == 1) 222 | { 223 | var tree00 = new BTree 224 | { 225 | Data = new Node(vn, "", false) 226 | }; 227 | tree2.AddNode(tree00); 228 | } 229 | else if(vns.Length==2) 230 | { 231 | var tree00 = new BTree 232 | { 233 | Data = new Node(vns[0], "", false) 234 | }; 235 | var tree01 = new BTree 236 | { 237 | Data = new Node(vn, "", false) 238 | }; 239 | tree00.AddNode(tree01); 240 | 241 | tree2.AddNode(tree00); 242 | } 243 | else if (vns.Length == 3) 244 | { 245 | var tree00 = new BTree 246 | { 247 | Data = new Node(vns[0], "", false) 248 | }; 249 | var tree01 = new BTree 250 | { 251 | Data = new Node(vns[1], "", false) 252 | }; 253 | var tree02 = new BTree 254 | { 255 | Data = new Node(vn, "", false) 256 | }; 257 | 258 | tree01.AddNode(tree02); 259 | 260 | tree00.AddNode(tree01); 261 | 262 | tree2.AddNode(tree00); 263 | } 264 | else if (vns.Length == 4) 265 | { 266 | var tree00 = new BTree 267 | { 268 | Data = new Node(vns[0], "", false) 269 | }; 270 | var tree01 = new BTree 271 | { 272 | Data = new Node(vns[1], "", false) 273 | }; 274 | var tree02 = new BTree 275 | { 276 | Data = new Node(vns[2], "", false) 277 | }; 278 | var tree03 = new BTree 279 | { 280 | Data = new Node(vn, "", false) 281 | }; 282 | 283 | tree02.AddNode(tree03); 284 | 285 | tree01.AddNode(tree02); 286 | 287 | tree00.AddNode(tree01); 288 | 289 | tree2.AddNode(tree00); 290 | } 291 | } 292 | 293 | //System.Windows.Forms.MessageBox.Show(SOURCES); 294 | //System.Windows.Forms.MessageBox.Show(HEADERS); 295 | 296 | } 297 | 298 | tree1.AddNode(tree2); 299 | 300 | return tree1; 301 | } 302 | } 303 | } 304 | -------------------------------------------------------------------------------- /Src/MDK2VC/M2V/UI/FormMain.cs: -------------------------------------------------------------------------------- 1 | using MDK2VC.M2V; 2 | using MDK2VC.M2V.Config; 3 | using MDK2VC.M2V.UI; 4 | using MDK2VC.M2V.Xml; 5 | using System; 6 | using System.IO; 7 | using System.Reflection; 8 | using System.Text; 9 | using System.Windows.Forms; 10 | 11 | namespace MDK2VC 12 | { 13 | public partial class FormMain : Form 14 | { 15 | CoreManager manager = new CoreManager(); 16 | /// 17 | /// 项目配置 18 | /// 19 | SysConfig cfg = new SysConfig(); 20 | public FormMain() 21 | { 22 | InitializeComponent(); 23 | } 24 | 25 | private void FormMain_Load(object sender, EventArgs e) 26 | { 27 | cfg.FromFilePath = Properties.Settings.Default.LastFileName; 28 | if (cfg.FromFilePath.Length < 5) 29 | cfg.FromFilePath = ".uvprojx"; 30 | comboBoxMDKPath.Text = cfg.FromFilePath; 31 | tBoxSlnPath.Text = cfg.Sln; 32 | this.Text += " Ver:"+ Assembly.GetExecutingAssembly().GetName().Version.ToString() + " Net:"+System.Environment.Version.ToString(); 33 | switch(cfg.TargetType) 34 | { 35 | case 2013: 36 | comboBoxOutTarget.Text = "VC2013"; 37 | break; 38 | case 2017: 39 | comboBoxOutTarget.Text = "VC2017"; 40 | break; 41 | case 2019: 42 | comboBoxOutTarget.Text = "VC2019"; 43 | break; 44 | case 2022: 45 | comboBoxOutTarget.Text = "VC2022"; 46 | break; 47 | default: 48 | comboBoxOutTarget.Text = "VC2019"; 49 | break; 50 | } 51 | checkBoxManulSetTarget.Checked = MDK2VCConfig.Current.OutputPathManulSet; 52 | comboBoxOutTarget.Text = MDK2VCConfig.Current.StrOutputPathTarget; 53 | comboBoxMDKPath.Text = MDK2VCConfig.Current.StrMDKFilePath; 54 | comboBoxMDKPath.Items.Clear(); 55 | foreach(var v in MDK2VCConfig.Current.StrMDKFilePathHis) 56 | { 57 | comboBoxMDKPath.Items.Add(v); 58 | } 59 | } 60 | private void BtnTrans_Click(object sender, EventArgs e) 61 | { 62 | if (comboBoxOutTarget.Text.Contains("2013")) 63 | { 64 | cfg.TargetType = 2013; 65 | } 66 | else if (comboBoxOutTarget.Text.Contains("2017")) 67 | { 68 | cfg.TargetType = 2017; 69 | } 70 | else if (comboBoxOutTarget.Text.Contains("2019")) 71 | { 72 | cfg.TargetType = 2019; 73 | } 74 | else if (comboBoxOutTarget.Text.Contains("2022")) 75 | { 76 | cfg.TargetType = 2022; 77 | } 78 | else 79 | { 80 | cfg.TargetType = 2017; 81 | } 82 | if ((cfg.FromFilePath == null) || (!File.Exists(cfg.FromFilePath))) 83 | { 84 | MessageBox.Show("请选择正确的文件"); 85 | return; 86 | } 87 | switch (Path.GetExtension(cfg.FromFilePath)) 88 | { 89 | case ".uvproj": 90 | manager.From = new Fromuvproj(); 91 | break; 92 | case ".uvprojx": 93 | manager.From = new Fromuvprojx(); 94 | break; 95 | case ".cyprj": 96 | manager.From = new Fromcyprj(); 97 | break; 98 | case ".pro": 99 | manager.From = new FromQT5(); 100 | break; 101 | default: 102 | break; 103 | } 104 | if (cfg.TargetType == 2013) 105 | { 106 | manager.To = new ToVC2013(); 107 | } 108 | else if (cfg.TargetType == 2017) 109 | { 110 | manager.To = new ToVC2017(); 111 | } 112 | else if (cfg.TargetType == 2019) 113 | { 114 | manager.To = new ToVC2019(); 115 | } 116 | else if (cfg.TargetType == 2022) 117 | { 118 | manager.To = new ToVC2022(); 119 | } 120 | else 121 | { 122 | manager.To = new ToVC2017(); 123 | } 124 | 125 | cfg.UV4_Path = "C:\\Keil_v5\\UV4\\Uv4.exe"; 126 | cfg.MacroDefine = manager.From.GetMacroDefine(cfg.FromFilePath); 127 | cfg.IncludePathOld = manager.From.GetIncludePath(cfg.FromFilePath); 128 | cfg.ProjFiles = manager.From.GetFiles(cfg.FromFilePath); 129 | cfg.TargetName = manager.From.GetTargetName(cfg.FromFilePath); 130 | this.ShowFiles(cfg.ProjFiles); 131 | 132 | cfg.ToFilter_FileFolders = manager.To.Get_ToFilter_FolderFiles(cfg); 133 | cfg.ToProj_Files = manager.To.Get_ToProj_Files(cfg); 134 | cfg.ToFilter_files = manager.To.Get_ToFilter_Folders(cfg); 135 | cfg.Projguid = Guid.NewGuid().ToString("B"); 136 | 137 | var builder = new StringBuilder(); 138 | builder.AppendLine(cfg.MacroDefineStr); 139 | builder.AppendLine(cfg.IncludePathStr); 140 | 141 | TargetStatus.Text= builder.ToString(); 142 | 143 | comboBoxTarget.Items.Clear(); 144 | foreach (var vn in manager.From.GetMacroTarget(cfg.FromFilePath)) 145 | { 146 | comboBoxTarget.Items.Add(vn); 147 | } 148 | if (comboBoxTarget.Items.Count > 0) 149 | { 150 | comboBoxTarget.SelectedIndex = 0; 151 | } 152 | else 153 | comboBoxTarget.Text = ""; 154 | } 155 | 156 | private void BtnTest_Click(object sender, EventArgs e) 157 | { 158 | BtnTrans_Click(sender, e); 159 | if (manager.From.GetMacroTarget(cfg.FromFilePath).Count > 0) 160 | cfg.TargetName = manager.From.GetMacroTarget(cfg.FromFilePath)[0]; 161 | else 162 | cfg.TargetName = cfg.FileNameWithoutExtension; 163 | 164 | manager.To.Createvcxproj(cfg); 165 | manager.To.Createfilters(cfg); 166 | manager.To.Createsln(cfg); 167 | manager.To.Createlog(cfg); 168 | //manager.to.createvcxusers(cfg); 169 | label5.Text = "转换完:" + DateTime.Now.ToString("HH:mm:ss"); 170 | bool has = false; 171 | 172 | foreach(var v in MDK2VCConfig.Current.StrMDKFilePathHis) 173 | { 174 | if (v.Equals(MDK2VCConfig.Current.StrMDKFilePath)) 175 | has = true; 176 | } 177 | if(!has) 178 | { 179 | MDK2VCConfig.Current.StrMDKFilePathHis.Add(MDK2VCConfig.Current.StrMDKFilePath); 180 | MDK2VCConfig.Current.Save(); 181 | } 182 | } 183 | /// 184 | /// 打开文件 185 | /// 186 | /// 187 | private void OpenFile(string file) 188 | { 189 | if (File.Exists(file)) 190 | System.Diagnostics.Process.Start(file); 191 | else 192 | MessageBox.Show("文件不存在 " + file); 193 | } 194 | 195 | private void NotifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e) 196 | { 197 | if (WindowState == FormWindowState.Minimized) 198 | { 199 | //还原窗体显示 200 | WindowState = FormWindowState.Normal; 201 | //激活窗体并给予它焦点 202 | this.Activate(); 203 | //任务栏区显示图标 204 | this.ShowInTaskbar = true; 205 | //托盘区图标隐藏 206 | notifyIcon1.Visible = false; 207 | } 208 | } 209 | 210 | private void 显示ToolStripMenuItem_Click(object sender, EventArgs e) 211 | { 212 | WindowState = FormWindowState.Normal; 213 | } 214 | 215 | private void 退出ToolStripMenuItem_Click(object sender, EventArgs e) 216 | { 217 | if (MessageBox.Show("是否确认退出程序?", "退出", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK) 218 | { 219 | // 关闭所有的线程 220 | this.Dispose(); 221 | this.Close(); 222 | } 223 | } 224 | 225 | private void FormMain_SizeChanged(object sender, EventArgs e) 226 | { 227 | //判断是否选择的是最小化按钮 228 | if (WindowState == FormWindowState.Minimized) 229 | { 230 | //隐藏任务栏区图标 231 | this.ShowInTaskbar = false; 232 | //图标显示在托盘区 233 | notifyIcon1.Visible = true; 234 | } 235 | } 236 | /// 237 | /// 238 | /// 239 | /// 240 | /// 241 | private void NotifyIcon1_DoubleClick(object sender, EventArgs e) 242 | { 243 | WindowState = FormWindowState.Normal; 244 | } 245 | 246 | /// 247 | /// 显示历史记录 248 | /// 249 | /// 250 | void ShowFiles(BTree tree1) 251 | { 252 | var tn = new TreeNode 253 | { 254 | Tag = tree1, 255 | Text = tree1.Data.Name 256 | }; 257 | for (int i = 0; i < tree1.Nodes.Count; i++) 258 | { 259 | var tn1 = new TreeNode 260 | { 261 | Tag = tree1.Nodes[i], 262 | Text = tree1.Nodes[i].Data.Name 263 | }; 264 | 265 | for (int j = 0; j < tree1.Nodes[i].Nodes.Count; j++) 266 | { 267 | var tn2 = new TreeNode 268 | { 269 | Tag = tree1.Nodes[i].Nodes[j], 270 | Text = tree1.Nodes[i].Nodes[j].Data.Name 271 | }; 272 | for (int k = 0; k < tree1.Nodes[i].Nodes[j].Nodes.Count; k++) 273 | { 274 | var tn3 = new TreeNode 275 | { 276 | Tag = tree1.Nodes[i].Nodes[j].Nodes[k], 277 | Text = tree1.Nodes[i].Nodes[j].Nodes[k].Data.Name 278 | }; 279 | 280 | for (int l = 0; l < tree1.Nodes[i].Nodes[j].Nodes[k].Nodes.Count; l++) 281 | { 282 | var tn4 = new TreeNode 283 | { 284 | Tag = tree1.Nodes[i].Nodes[j].Nodes[k].Nodes[l], 285 | Text = tree1.Nodes[i].Nodes[j].Nodes[k].Nodes[l].Data.Name 286 | }; 287 | 288 | tn3.Nodes.Add(tn4); 289 | } 290 | 291 | tn2.Nodes.Add(tn3); 292 | } 293 | tn1.Nodes.Add(tn2); 294 | } 295 | tn.Nodes.Add(tn1); 296 | } 297 | treeView1.Nodes.Clear(); 298 | treeView1.Nodes.Add(tn); 299 | } 300 | 301 | private void LabelOpenProj_Click(object sender, EventArgs e) 302 | { 303 | this.OpenFile(cfg.FromFilePath); 304 | } 305 | 306 | private void LabelOpenVC_Click(object sender, EventArgs e) 307 | { 308 | this.OpenFile(cfg.Sln); 309 | } 310 | 311 | private void BtnSelFileName_Click(object sender, EventArgs e) 312 | { 313 | var fileDlg = new OpenFileDialog 314 | { 315 | Multiselect = true, 316 | Title = "请选择文件", 317 | Filter = "MDK|*.uvprojx;*.uvproj;*cyprj;*.pro" 318 | }; 319 | if (fileDlg.ShowDialog() == DialogResult.OK) 320 | { 321 | cfg.FromFilePath = fileDlg.FileName; 322 | comboBoxMDKPath.Items.Add(comboBoxMDKPath.Text); 323 | comboBoxMDKPath.Text = cfg.FromFilePath; 324 | tBoxSlnPath.Text = cfg.Sln; 325 | 326 | Properties.Settings.Default.LastFileName = cfg.FromFilePath; 327 | Properties.Settings.Default.Save(); 328 | } 329 | MDK2VCConfig.Current.StrMDKFilePath = comboBoxMDKPath.Text; 330 | MDK2VCConfig.Current.Save(); 331 | } 332 | 333 | private void checkBoxManulSetTarget_CheckedChanged(object sender, EventArgs e) 334 | { 335 | var chk = sender as CheckBox; 336 | buttonLoadManulTarget.Visible = chk.Checked; 337 | MDK2VCConfig.Current.OutputPathManulSet = checkBoxManulSetTarget.Checked; 338 | MDK2VCConfig.Current.Save(); 339 | } 340 | 341 | private void comboBoxOutTarget_SelectedIndexChanged(object sender, EventArgs e) 342 | { 343 | var cmb = sender as ComboBox; 344 | MDK2VCConfig.Current.StrOutputPathTarget = cmb.Text; 345 | MDK2VCConfig.Current.Save(); 346 | } 347 | 348 | private void comboBoxMDKPath_SelectedIndexChanged(object sender, EventArgs e) 349 | { 350 | var cmb = sender as ComboBox; 351 | MDK2VCConfig.Current.StrMDKFilePath = cmb.Text; 352 | MDK2VCConfig.Current.Save(); 353 | cfg.FromFilePath = MDK2VCConfig.Current.StrMDKFilePath; 354 | tBoxSlnPath.Text = cfg.Sln; 355 | } 356 | 357 | private void 清理路径ToolStripMenuItem_Click(object sender, EventArgs e) 358 | { 359 | MDK2VCConfig.Current.StrMDKFilePathHis.Clear(); 360 | MDK2VCConfig.Current.StrMDKFilePathHis.Add(MDK2VCConfig.Current.StrMDKFilePath); 361 | comboBoxMDKPath.Items.Clear(); 362 | foreach (var v in MDK2VCConfig.Current.StrMDKFilePathHis) 363 | { 364 | comboBoxMDKPath.Items.Add(v); 365 | } 366 | MDK2VCConfig.Current.Save(); 367 | } 368 | 369 | private void 使用说明ToolStripMenuItem_Click(object sender, EventArgs e) 370 | { 371 | new FormHelper().ShowDialog(); 372 | } 373 | } 374 | } 375 | -------------------------------------------------------------------------------- /Src/MDK2VC/M2V/UI/FormMain.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace MDK2VC 2 | { 3 | partial class FormMain 4 | { 5 | /// 6 | /// 必需的设计器变量。 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// 清理所有正在使用的资源。 12 | /// 13 | /// 如果应释放托管资源,为 true;否则为 false。 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Windows 窗体设计器生成的代码 24 | 25 | /// 26 | /// 设计器支持所需的方法 - 不要修改 27 | /// 使用代码编辑器修改此方法的内容。 28 | /// 29 | private void InitializeComponent() 30 | { 31 | this.components = new System.ComponentModel.Container(); 32 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormMain)); 33 | this.btnTrans = new System.Windows.Forms.Button(); 34 | this.btnTest = new System.Windows.Forms.Button(); 35 | this.label5 = new System.Windows.Forms.Label(); 36 | this.notifyIcon1 = new System.Windows.Forms.NotifyIcon(this.components); 37 | this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); 38 | this.显示ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 39 | this.退出ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 40 | this.statusStrip1 = new System.Windows.Forms.StatusStrip(); 41 | this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel(); 42 | this.toolStripStatusLabel2 = new System.Windows.Forms.ToolStripStatusLabel(); 43 | this.toolStripStatusLabel3 = new System.Windows.Forms.ToolStripStatusLabel(); 44 | this.toolStripStatusLabel4 = new System.Windows.Forms.ToolStripStatusLabel(); 45 | this.toolStripStatusLabel5 = new System.Windows.Forms.ToolStripStatusLabel(); 46 | this.treeView1 = new System.Windows.Forms.TreeView(); 47 | this.groupBox1 = new System.Windows.Forms.GroupBox(); 48 | this.btnSelFileName = new System.Windows.Forms.Button(); 49 | this.comboBoxMDKPath = new System.Windows.Forms.ComboBox(); 50 | this.labelOpenProj = new System.Windows.Forms.Label(); 51 | this.groupBox4 = new System.Windows.Forms.GroupBox(); 52 | this.TargetStatus = new System.Windows.Forms.TextBox(); 53 | this.groupBox5 = new System.Windows.Forms.GroupBox(); 54 | this.groupBox3 = new System.Windows.Forms.GroupBox(); 55 | this.comboBoxTarget = new System.Windows.Forms.ComboBox(); 56 | this.elementHost = new System.Windows.Forms.Integration.ElementHost(); 57 | this.groupBox2 = new System.Windows.Forms.GroupBox(); 58 | this.buttonLoadManulTarget = new System.Windows.Forms.Button(); 59 | this.checkBoxManulSetTarget = new System.Windows.Forms.CheckBox(); 60 | this.labelOpenVC = new System.Windows.Forms.Label(); 61 | this.tBoxSlnPath = new System.Windows.Forms.TextBox(); 62 | this.elementHost1 = new System.Windows.Forms.Integration.ElementHost(); 63 | this.comboBoxOutTarget = new System.Windows.Forms.ComboBox(); 64 | this.label1 = new System.Windows.Forms.Label(); 65 | this.menuStrip1 = new System.Windows.Forms.MenuStrip(); 66 | this.文件ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 67 | this.退出ToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); 68 | this.工具ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 69 | this.清理路径ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 70 | this.帮助ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 71 | this.使用说明ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 72 | this.contextMenuStrip1.SuspendLayout(); 73 | this.statusStrip1.SuspendLayout(); 74 | this.groupBox1.SuspendLayout(); 75 | this.groupBox4.SuspendLayout(); 76 | this.groupBox5.SuspendLayout(); 77 | this.groupBox3.SuspendLayout(); 78 | this.groupBox2.SuspendLayout(); 79 | this.menuStrip1.SuspendLayout(); 80 | this.SuspendLayout(); 81 | // 82 | // btnTrans 83 | // 84 | this.btnTrans.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); 85 | this.btnTrans.Location = new System.Drawing.Point(11, 582); 86 | this.btnTrans.Name = "btnTrans"; 87 | this.btnTrans.Size = new System.Drawing.Size(75, 23); 88 | this.btnTrans.TabIndex = 4; 89 | this.btnTrans.Text = "测试读取"; 90 | this.btnTrans.UseVisualStyleBackColor = true; 91 | this.btnTrans.Click += new System.EventHandler(this.BtnTrans_Click); 92 | // 93 | // btnTest 94 | // 95 | this.btnTest.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); 96 | this.btnTest.Location = new System.Drawing.Point(136, 582); 97 | this.btnTest.Name = "btnTest"; 98 | this.btnTest.Size = new System.Drawing.Size(75, 23); 99 | this.btnTest.TabIndex = 9; 100 | this.btnTest.Text = "转换"; 101 | this.btnTest.UseVisualStyleBackColor = true; 102 | this.btnTest.Click += new System.EventHandler(this.BtnTest_Click); 103 | // 104 | // label5 105 | // 106 | this.label5.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); 107 | this.label5.AutoSize = true; 108 | this.label5.Location = new System.Drawing.Point(261, 587); 109 | this.label5.Name = "label5"; 110 | this.label5.Size = new System.Drawing.Size(41, 12); 111 | this.label5.TabIndex = 15; 112 | this.label5.Text = "未转换"; 113 | // 114 | // notifyIcon1 115 | // 116 | this.notifyIcon1.ContextMenuStrip = this.contextMenuStrip1; 117 | this.notifyIcon1.Icon = ((System.Drawing.Icon)(resources.GetObject("notifyIcon1.Icon"))); 118 | this.notifyIcon1.Text = "MDK2VC"; 119 | this.notifyIcon1.Visible = true; 120 | this.notifyIcon1.DoubleClick += new System.EventHandler(this.NotifyIcon1_DoubleClick); 121 | this.notifyIcon1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.NotifyIcon1_MouseDoubleClick); 122 | // 123 | // contextMenuStrip1 124 | // 125 | this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { 126 | this.显示ToolStripMenuItem, 127 | this.退出ToolStripMenuItem}); 128 | this.contextMenuStrip1.Name = "contextMenuStrip1"; 129 | this.contextMenuStrip1.Size = new System.Drawing.Size(101, 48); 130 | // 131 | // 显示ToolStripMenuItem 132 | // 133 | this.显示ToolStripMenuItem.Name = "显示ToolStripMenuItem"; 134 | this.显示ToolStripMenuItem.Size = new System.Drawing.Size(100, 22); 135 | this.显示ToolStripMenuItem.Text = "显示"; 136 | this.显示ToolStripMenuItem.Click += new System.EventHandler(this.显示ToolStripMenuItem_Click); 137 | // 138 | // 退出ToolStripMenuItem 139 | // 140 | this.退出ToolStripMenuItem.Name = "退出ToolStripMenuItem"; 141 | this.退出ToolStripMenuItem.Size = new System.Drawing.Size(100, 22); 142 | this.退出ToolStripMenuItem.Text = "退出"; 143 | this.退出ToolStripMenuItem.Click += new System.EventHandler(this.退出ToolStripMenuItem_Click); 144 | // 145 | // statusStrip1 146 | // 147 | this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { 148 | this.toolStripStatusLabel1, 149 | this.toolStripStatusLabel2, 150 | this.toolStripStatusLabel3, 151 | this.toolStripStatusLabel4, 152 | this.toolStripStatusLabel5}); 153 | this.statusStrip1.Location = new System.Drawing.Point(0, 611); 154 | this.statusStrip1.Name = "statusStrip1"; 155 | this.statusStrip1.Size = new System.Drawing.Size(784, 22); 156 | this.statusStrip1.TabIndex = 17; 157 | this.statusStrip1.Text = "statusStrip1"; 158 | // 159 | // toolStripStatusLabel1 160 | // 161 | this.toolStripStatusLabel1.Name = "toolStripStatusLabel1"; 162 | this.toolStripStatusLabel1.Size = new System.Drawing.Size(176, 17); 163 | this.toolStripStatusLabel1.Text = "双击\"MDK项目\"打开MDK工程 "; 164 | // 165 | // toolStripStatusLabel2 166 | // 167 | this.toolStripStatusLabel2.Name = "toolStripStatusLabel2"; 168 | this.toolStripStatusLabel2.Size = new System.Drawing.Size(11, 17); 169 | this.toolStripStatusLabel2.Text = "|"; 170 | // 171 | // toolStripStatusLabel3 172 | // 173 | this.toolStripStatusLabel3.Name = "toolStripStatusLabel3"; 174 | this.toolStripStatusLabel3.Size = new System.Drawing.Size(146, 17); 175 | this.toolStripStatusLabel3.Text = "双击\"VC工程\"打开VC工程"; 176 | // 177 | // toolStripStatusLabel4 178 | // 179 | this.toolStripStatusLabel4.Name = "toolStripStatusLabel4"; 180 | this.toolStripStatusLabel4.Size = new System.Drawing.Size(11, 17); 181 | this.toolStripStatusLabel4.Text = "|"; 182 | // 183 | // toolStripStatusLabel5 184 | // 185 | this.toolStripStatusLabel5.Name = "toolStripStatusLabel5"; 186 | this.toolStripStatusLabel5.Size = new System.Drawing.Size(116, 17); 187 | this.toolStripStatusLabel5.Text = "最小化后到系统托盘"; 188 | // 189 | // treeView1 190 | // 191 | this.treeView1.Dock = System.Windows.Forms.DockStyle.Fill; 192 | this.treeView1.Location = new System.Drawing.Point(3, 19); 193 | this.treeView1.Name = "treeView1"; 194 | this.treeView1.Size = new System.Drawing.Size(761, 227); 195 | this.treeView1.TabIndex = 18; 196 | // 197 | // groupBox1 198 | // 199 | this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 200 | | System.Windows.Forms.AnchorStyles.Right))); 201 | this.groupBox1.Controls.Add(this.btnSelFileName); 202 | this.groupBox1.Controls.Add(this.comboBoxMDKPath); 203 | this.groupBox1.Controls.Add(this.labelOpenProj); 204 | this.groupBox1.Location = new System.Drawing.Point(12, 12); 205 | this.groupBox1.Name = "groupBox1"; 206 | this.groupBox1.Size = new System.Drawing.Size(760, 54); 207 | this.groupBox1.TabIndex = 19; 208 | this.groupBox1.TabStop = false; 209 | this.groupBox1.Text = "Project File Path"; 210 | // 211 | // btnSelFileName 212 | // 213 | this.btnSelFileName.Anchor = System.Windows.Forms.AnchorStyles.Right; 214 | this.btnSelFileName.Location = new System.Drawing.Point(699, 18); 215 | this.btnSelFileName.Name = "btnSelFileName"; 216 | this.btnSelFileName.Size = new System.Drawing.Size(51, 23); 217 | this.btnSelFileName.TabIndex = 5; 218 | this.btnSelFileName.Text = "..."; 219 | this.btnSelFileName.UseVisualStyleBackColor = true; 220 | this.btnSelFileName.Click += new System.EventHandler(this.BtnSelFileName_Click); 221 | // 222 | // comboBoxMDKPath 223 | // 224 | this.comboBoxMDKPath.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 225 | | System.Windows.Forms.AnchorStyles.Left) 226 | | System.Windows.Forms.AnchorStyles.Right))); 227 | this.comboBoxMDKPath.FormattingEnabled = true; 228 | this.comboBoxMDKPath.Location = new System.Drawing.Point(44, 19); 229 | this.comboBoxMDKPath.Name = "comboBoxMDKPath"; 230 | this.comboBoxMDKPath.Size = new System.Drawing.Size(648, 20); 231 | this.comboBoxMDKPath.TabIndex = 4; 232 | this.comboBoxMDKPath.SelectedIndexChanged += new System.EventHandler(this.comboBoxMDKPath_SelectedIndexChanged); 233 | // 234 | // labelOpenProj 235 | // 236 | this.labelOpenProj.AutoSize = true; 237 | this.labelOpenProj.Location = new System.Drawing.Point(9, 23); 238 | this.labelOpenProj.Name = "labelOpenProj"; 239 | this.labelOpenProj.Size = new System.Drawing.Size(29, 12); 240 | this.labelOpenProj.TabIndex = 3; 241 | this.labelOpenProj.Text = "Open"; 242 | this.labelOpenProj.Click += new System.EventHandler(this.LabelOpenProj_Click); 243 | // 244 | // groupBox4 245 | // 246 | this.groupBox4.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 247 | | System.Windows.Forms.AnchorStyles.Right))); 248 | this.groupBox4.Controls.Add(this.TargetStatus); 249 | this.groupBox4.Font = new System.Drawing.Font("Consolas", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 250 | this.groupBox4.Location = new System.Drawing.Point(4, 230); 251 | this.groupBox4.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); 252 | this.groupBox4.Name = "groupBox4"; 253 | this.groupBox4.Padding = new System.Windows.Forms.Padding(3, 4, 3, 4); 254 | this.groupBox4.Size = new System.Drawing.Size(766, 90); 255 | this.groupBox4.TabIndex = 21; 256 | this.groupBox4.TabStop = false; 257 | this.groupBox4.Text = "Target Info"; 258 | // 259 | // TargetStatus 260 | // 261 | this.TargetStatus.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 262 | | System.Windows.Forms.AnchorStyles.Left) 263 | | System.Windows.Forms.AnchorStyles.Right))); 264 | this.TargetStatus.BackColor = System.Drawing.SystemColors.Window; 265 | this.TargetStatus.Font = new System.Drawing.Font("Consolas", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 266 | this.TargetStatus.Location = new System.Drawing.Point(6, 16); 267 | this.TargetStatus.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); 268 | this.TargetStatus.Multiline = true; 269 | this.TargetStatus.Name = "TargetStatus"; 270 | this.TargetStatus.ReadOnly = true; 271 | this.TargetStatus.ScrollBars = System.Windows.Forms.ScrollBars.Both; 272 | this.TargetStatus.Size = new System.Drawing.Size(754, 66); 273 | this.TargetStatus.TabIndex = 0; 274 | // 275 | // groupBox5 276 | // 277 | this.groupBox5.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 278 | | System.Windows.Forms.AnchorStyles.Left) 279 | | System.Windows.Forms.AnchorStyles.Right))); 280 | this.groupBox5.Controls.Add(this.treeView1); 281 | this.groupBox5.Font = new System.Drawing.Font("Consolas", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 282 | this.groupBox5.Location = new System.Drawing.Point(5, 328); 283 | this.groupBox5.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); 284 | this.groupBox5.Name = "groupBox5"; 285 | this.groupBox5.Padding = new System.Windows.Forms.Padding(3, 4, 3, 4); 286 | this.groupBox5.Size = new System.Drawing.Size(767, 250); 287 | this.groupBox5.TabIndex = 22; 288 | this.groupBox5.TabStop = false; 289 | this.groupBox5.Text = "Source Groups"; 290 | // 291 | // groupBox3 292 | // 293 | this.groupBox3.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 294 | | System.Windows.Forms.AnchorStyles.Right))); 295 | this.groupBox3.Controls.Add(this.comboBoxTarget); 296 | this.groupBox3.Controls.Add(this.elementHost); 297 | this.groupBox3.Font = new System.Drawing.Font("Consolas", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 298 | this.groupBox3.Location = new System.Drawing.Point(8, 166); 299 | this.groupBox3.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); 300 | this.groupBox3.Name = "groupBox3"; 301 | this.groupBox3.Padding = new System.Windows.Forms.Padding(3, 4, 3, 4); 302 | this.groupBox3.Size = new System.Drawing.Size(760, 56); 303 | this.groupBox3.TabIndex = 23; 304 | this.groupBox3.TabStop = false; 305 | this.groupBox3.Text = "Target Groups"; 306 | // 307 | // comboBoxTarget 308 | // 309 | this.comboBoxTarget.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 310 | | System.Windows.Forms.AnchorStyles.Left) 311 | | System.Windows.Forms.AnchorStyles.Right))); 312 | this.comboBoxTarget.FormattingEnabled = true; 313 | this.comboBoxTarget.Location = new System.Drawing.Point(12, 22); 314 | this.comboBoxTarget.Name = "comboBoxTarget"; 315 | this.comboBoxTarget.Size = new System.Drawing.Size(735, 22); 316 | this.comboBoxTarget.TabIndex = 14; 317 | // 318 | // elementHost 319 | // 320 | this.elementHost.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 321 | | System.Windows.Forms.AnchorStyles.Left) 322 | | System.Windows.Forms.AnchorStyles.Right))); 323 | this.elementHost.Location = new System.Drawing.Point(6, 16); 324 | this.elementHost.Name = "elementHost"; 325 | this.elementHost.Size = new System.Drawing.Size(748, 33); 326 | this.elementHost.TabIndex = 11; 327 | this.elementHost.Text = "elementHost1"; 328 | this.elementHost.Child = null; 329 | // 330 | // groupBox2 331 | // 332 | this.groupBox2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 333 | | System.Windows.Forms.AnchorStyles.Right))); 334 | this.groupBox2.Controls.Add(this.buttonLoadManulTarget); 335 | this.groupBox2.Controls.Add(this.checkBoxManulSetTarget); 336 | this.groupBox2.Controls.Add(this.labelOpenVC); 337 | this.groupBox2.Controls.Add(this.tBoxSlnPath); 338 | this.groupBox2.Controls.Add(this.elementHost1); 339 | this.groupBox2.Font = new System.Drawing.Font("Consolas", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 340 | this.groupBox2.Location = new System.Drawing.Point(10, 73); 341 | this.groupBox2.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); 342 | this.groupBox2.Name = "groupBox2"; 343 | this.groupBox2.Padding = new System.Windows.Forms.Padding(3, 4, 3, 4); 344 | this.groupBox2.Size = new System.Drawing.Size(760, 85); 345 | this.groupBox2.TabIndex = 24; 346 | this.groupBox2.TabStop = false; 347 | this.groupBox2.Text = "Target"; 348 | // 349 | // buttonLoadManulTarget 350 | // 351 | this.buttonLoadManulTarget.Anchor = System.Windows.Forms.AnchorStyles.Right; 352 | this.buttonLoadManulTarget.Location = new System.Drawing.Point(700, 22); 353 | this.buttonLoadManulTarget.Name = "buttonLoadManulTarget"; 354 | this.buttonLoadManulTarget.Size = new System.Drawing.Size(51, 23); 355 | this.buttonLoadManulTarget.TabIndex = 15; 356 | this.buttonLoadManulTarget.Text = "..."; 357 | this.buttonLoadManulTarget.UseVisualStyleBackColor = true; 358 | this.buttonLoadManulTarget.Visible = false; 359 | // 360 | // checkBoxManulSetTarget 361 | // 362 | this.checkBoxManulSetTarget.AutoSize = true; 363 | this.checkBoxManulSetTarget.Location = new System.Drawing.Point(13, 50); 364 | this.checkBoxManulSetTarget.Name = "checkBoxManulSetTarget"; 365 | this.checkBoxManulSetTarget.Size = new System.Drawing.Size(166, 18); 366 | this.checkBoxManulSetTarget.TabIndex = 14; 367 | this.checkBoxManulSetTarget.Text = "手动设置输出工程路径"; 368 | this.checkBoxManulSetTarget.UseVisualStyleBackColor = true; 369 | this.checkBoxManulSetTarget.CheckedChanged += new System.EventHandler(this.checkBoxManulSetTarget_CheckedChanged); 370 | // 371 | // labelOpenVC 372 | // 373 | this.labelOpenVC.AutoSize = true; 374 | this.labelOpenVC.Location = new System.Drawing.Point(10, 25); 375 | this.labelOpenVC.Name = "labelOpenVC"; 376 | this.labelOpenVC.Size = new System.Drawing.Size(35, 14); 377 | this.labelOpenVC.TabIndex = 13; 378 | this.labelOpenVC.Text = "Open"; 379 | this.labelOpenVC.Click += new System.EventHandler(this.LabelOpenVC_Click); 380 | // 381 | // tBoxSlnPath 382 | // 383 | this.tBoxSlnPath.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 384 | | System.Windows.Forms.AnchorStyles.Left) 385 | | System.Windows.Forms.AnchorStyles.Right))); 386 | this.tBoxSlnPath.Location = new System.Drawing.Point(45, 22); 387 | this.tBoxSlnPath.Name = "tBoxSlnPath"; 388 | this.tBoxSlnPath.ReadOnly = true; 389 | this.tBoxSlnPath.Size = new System.Drawing.Size(649, 22); 390 | this.tBoxSlnPath.TabIndex = 12; 391 | // 392 | // elementHost1 393 | // 394 | this.elementHost1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 395 | | System.Windows.Forms.AnchorStyles.Left) 396 | | System.Windows.Forms.AnchorStyles.Right))); 397 | this.elementHost1.Location = new System.Drawing.Point(6, 16); 398 | this.elementHost1.Name = "elementHost1"; 399 | this.elementHost1.Size = new System.Drawing.Size(748, 62); 400 | this.elementHost1.TabIndex = 11; 401 | this.elementHost1.Text = "elementHost1"; 402 | this.elementHost1.Child = null; 403 | // 404 | // comboBoxOutTarget 405 | // 406 | this.comboBoxOutTarget.FormattingEnabled = true; 407 | this.comboBoxOutTarget.Items.AddRange(new object[] { 408 | "VC2022", 409 | "VC2019", 410 | "VC2017", 411 | "VC2013"}); 412 | this.comboBoxOutTarget.Location = new System.Drawing.Point(552, 512); 413 | this.comboBoxOutTarget.Name = "comboBoxOutTarget"; 414 | this.comboBoxOutTarget.Size = new System.Drawing.Size(121, 20); 415 | this.comboBoxOutTarget.TabIndex = 25; 416 | this.comboBoxOutTarget.Text = "VC2019"; 417 | this.comboBoxOutTarget.SelectedIndexChanged += new System.EventHandler(this.comboBoxOutTarget_SelectedIndexChanged); 418 | // 419 | // label1 420 | // 421 | this.label1.AutoSize = true; 422 | this.label1.Location = new System.Drawing.Point(484, 515); 423 | this.label1.Name = "label1"; 424 | this.label1.Size = new System.Drawing.Size(53, 12); 425 | this.label1.TabIndex = 26; 426 | this.label1.Text = "输出目标"; 427 | // 428 | // menuStrip1 429 | // 430 | this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { 431 | this.文件ToolStripMenuItem, 432 | this.工具ToolStripMenuItem, 433 | this.帮助ToolStripMenuItem}); 434 | this.menuStrip1.Location = new System.Drawing.Point(0, 0); 435 | this.menuStrip1.Name = "menuStrip1"; 436 | this.menuStrip1.Size = new System.Drawing.Size(784, 25); 437 | this.menuStrip1.TabIndex = 27; 438 | this.menuStrip1.Text = "menuStrip1"; 439 | // 440 | // 文件ToolStripMenuItem 441 | // 442 | this.文件ToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { 443 | this.退出ToolStripMenuItem1}); 444 | this.文件ToolStripMenuItem.Name = "文件ToolStripMenuItem"; 445 | this.文件ToolStripMenuItem.Size = new System.Drawing.Size(44, 21); 446 | this.文件ToolStripMenuItem.Text = "文件"; 447 | // 448 | // 退出ToolStripMenuItem1 449 | // 450 | this.退出ToolStripMenuItem1.Name = "退出ToolStripMenuItem1"; 451 | this.退出ToolStripMenuItem1.Size = new System.Drawing.Size(100, 22); 452 | this.退出ToolStripMenuItem1.Text = "退出"; 453 | // 454 | // 工具ToolStripMenuItem 455 | // 456 | this.工具ToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { 457 | this.清理路径ToolStripMenuItem}); 458 | this.工具ToolStripMenuItem.Name = "工具ToolStripMenuItem"; 459 | this.工具ToolStripMenuItem.Size = new System.Drawing.Size(44, 21); 460 | this.工具ToolStripMenuItem.Text = "工具"; 461 | // 462 | // 清理路径ToolStripMenuItem 463 | // 464 | this.清理路径ToolStripMenuItem.Name = "清理路径ToolStripMenuItem"; 465 | this.清理路径ToolStripMenuItem.Size = new System.Drawing.Size(124, 22); 466 | this.清理路径ToolStripMenuItem.Text = "清理路径"; 467 | this.清理路径ToolStripMenuItem.Click += new System.EventHandler(this.清理路径ToolStripMenuItem_Click); 468 | // 469 | // 帮助ToolStripMenuItem 470 | // 471 | this.帮助ToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { 472 | this.使用说明ToolStripMenuItem}); 473 | this.帮助ToolStripMenuItem.Name = "帮助ToolStripMenuItem"; 474 | this.帮助ToolStripMenuItem.Size = new System.Drawing.Size(44, 21); 475 | this.帮助ToolStripMenuItem.Text = "帮助"; 476 | // 477 | // 使用说明ToolStripMenuItem 478 | // 479 | this.使用说明ToolStripMenuItem.Name = "使用说明ToolStripMenuItem"; 480 | this.使用说明ToolStripMenuItem.Size = new System.Drawing.Size(124, 22); 481 | this.使用说明ToolStripMenuItem.Text = "使用说明"; 482 | this.使用说明ToolStripMenuItem.Click += new System.EventHandler(this.使用说明ToolStripMenuItem_Click); 483 | // 484 | // FormMain 485 | // 486 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); 487 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 488 | this.ClientSize = new System.Drawing.Size(784, 633); 489 | this.Controls.Add(this.menuStrip1); 490 | this.Controls.Add(this.label1); 491 | this.Controls.Add(this.comboBoxOutTarget); 492 | this.Controls.Add(this.groupBox2); 493 | this.Controls.Add(this.groupBox3); 494 | this.Controls.Add(this.groupBox5); 495 | this.Controls.Add(this.groupBox4); 496 | this.Controls.Add(this.groupBox1); 497 | this.Controls.Add(this.statusStrip1); 498 | this.Controls.Add(this.label5); 499 | this.Controls.Add(this.btnTest); 500 | this.Controls.Add(this.btnTrans); 501 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); 502 | this.Name = "FormMain"; 503 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; 504 | this.Text = "MDK4 MDK5 QT5 2 VC2019 VC2017"; 505 | this.Load += new System.EventHandler(this.FormMain_Load); 506 | this.SizeChanged += new System.EventHandler(this.FormMain_SizeChanged); 507 | this.contextMenuStrip1.ResumeLayout(false); 508 | this.statusStrip1.ResumeLayout(false); 509 | this.statusStrip1.PerformLayout(); 510 | this.groupBox1.ResumeLayout(false); 511 | this.groupBox1.PerformLayout(); 512 | this.groupBox4.ResumeLayout(false); 513 | this.groupBox4.PerformLayout(); 514 | this.groupBox5.ResumeLayout(false); 515 | this.groupBox3.ResumeLayout(false); 516 | this.groupBox2.ResumeLayout(false); 517 | this.groupBox2.PerformLayout(); 518 | this.menuStrip1.ResumeLayout(false); 519 | this.menuStrip1.PerformLayout(); 520 | this.ResumeLayout(false); 521 | this.PerformLayout(); 522 | 523 | } 524 | 525 | #endregion 526 | private System.Windows.Forms.Button btnTrans; 527 | private System.Windows.Forms.Button btnTest; 528 | private System.Windows.Forms.Label label5; 529 | private System.Windows.Forms.NotifyIcon notifyIcon1; 530 | private System.Windows.Forms.ContextMenuStrip contextMenuStrip1; 531 | private System.Windows.Forms.ToolStripMenuItem 显示ToolStripMenuItem; 532 | private System.Windows.Forms.ToolStripMenuItem 退出ToolStripMenuItem; 533 | private System.Windows.Forms.StatusStrip statusStrip1; 534 | private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel1; 535 | private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel2; 536 | private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel3; 537 | private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel4; 538 | private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel5; 539 | private System.Windows.Forms.TreeView treeView1; 540 | private System.Windows.Forms.GroupBox groupBox1; 541 | private System.Windows.Forms.GroupBox groupBox4; 542 | private System.Windows.Forms.TextBox TargetStatus; 543 | private System.Windows.Forms.GroupBox groupBox5; 544 | private System.Windows.Forms.GroupBox groupBox3; 545 | public System.Windows.Forms.Integration.ElementHost elementHost; 546 | private System.Windows.Forms.Label labelOpenProj; 547 | private System.Windows.Forms.GroupBox groupBox2; 548 | private System.Windows.Forms.Label labelOpenVC; 549 | public System.Windows.Forms.Integration.ElementHost elementHost1; 550 | private System.Windows.Forms.ComboBox comboBoxTarget; 551 | private System.Windows.Forms.TextBox tBoxSlnPath; 552 | private System.Windows.Forms.ComboBox comboBoxMDKPath; 553 | private System.Windows.Forms.Button btnSelFileName; 554 | private System.Windows.Forms.ComboBox comboBoxOutTarget; 555 | private System.Windows.Forms.Label label1; 556 | private System.Windows.Forms.CheckBox checkBoxManulSetTarget; 557 | private System.Windows.Forms.Button buttonLoadManulTarget; 558 | private System.Windows.Forms.MenuStrip menuStrip1; 559 | private System.Windows.Forms.ToolStripMenuItem 文件ToolStripMenuItem; 560 | private System.Windows.Forms.ToolStripMenuItem 工具ToolStripMenuItem; 561 | private System.Windows.Forms.ToolStripMenuItem 清理路径ToolStripMenuItem; 562 | private System.Windows.Forms.ToolStripMenuItem 退出ToolStripMenuItem1; 563 | private System.Windows.Forms.ToolStripMenuItem 帮助ToolStripMenuItem; 564 | private System.Windows.Forms.ToolStripMenuItem 使用说明ToolStripMenuItem; 565 | } 566 | } 567 | 568 | -------------------------------------------------------------------------------- /Src/MDK2VC/M2V/Xml/To/ToVCBase.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.IO; 3 | using System.Text; 4 | 5 | namespace MDK2VC.M2V.Xml 6 | { 7 | public class ToVCBase 8 | { 9 | public void Createfilters(SysConfig cfg) 10 | { 11 | var builder = new StringBuilder(); 12 | 13 | builder.AppendLine(""); 14 | builder.AppendLine(""); 15 | builder.AppendLine(" "); 16 | builder.Append(cfg.ToFilter_files.ToString()); 17 | builder.AppendLine(" "); 18 | builder.AppendLine(" "); 19 | builder.Append(cfg.ToFilter_FileFolders.ToString()); 20 | builder.AppendLine(" "); 21 | builder.AppendLine(""); 22 | var fs = new FileStream(cfg.Filters, FileMode.Create); 23 | byte[] data = new UTF8Encoding().GetBytes(builder.ToString()); 24 | fs.Write(data); 25 | fs.Flush(); 26 | fs.Close(); 27 | } 28 | /// 29 | /// 生成日志文件 30 | /// 31 | /// 配置文件 32 | public void Createlog(SysConfig cfg) 33 | { 34 | var Buildlog = cfg.DirectoryName + "\\Build.log"; 35 | var flash_downloadlog = cfg.DirectoryName + "\\flash_download.log"; 36 | if (!File.Exists(Buildlog)) 37 | File.Create(Buildlog); 38 | if (!File.Exists(flash_downloadlog)) 39 | File.Create(flash_downloadlog); 40 | } 41 | public void CreateslnBase(SysConfig cfg,string str) 42 | { 43 | var builder = new StringBuilder(); 44 | 45 | builder.Append(str); 46 | builder.Append("Project(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \""); 47 | builder.Append(cfg.FileNameWithoutExtension); 48 | builder.Append("\",\""); 49 | builder.Append(cfg.FileNameWithoutExtension); 50 | builder.Append(".vcxproj\", \""); 51 | builder.Append(cfg.Projguidvc); 52 | builder.AppendLine("\""); 53 | builder.AppendLine("EndProject"); 54 | builder.AppendLine("Global"); 55 | builder.AppendLine(" GlobalSection(SolutionConfigurationPlatforms) = preSolution"); 56 | builder.Append(" "); 57 | builder.Append(cfg.FileNameWithoutExtension); 58 | builder.Append("|x86 = "); 59 | builder.Append(cfg.FileNameWithoutExtension); 60 | builder.AppendLine("|x86"); 61 | builder.AppendLine(" EndGlobalSection"); 62 | builder.AppendLine(" GlobalSection(ProjectConfigurationPlatforms) = postSolution"); 63 | builder.Append(" "); 64 | builder.Append(cfg.Projguidvc); 65 | builder.Append("."); 66 | builder.Append(cfg.FileNameWithoutExtension); 67 | builder.Append("|x86.ActiveCfg = "); 68 | builder.Append(cfg.FileNameWithoutExtension); 69 | builder.AppendLine("|Win32"); 70 | builder.Append(" "); 71 | builder.Append(cfg.Projguidvc); 72 | builder.Append("."); 73 | builder.Append(cfg.FileNameWithoutExtension); 74 | builder.Append("|x86.Build.0 = "); 75 | builder.Append(cfg.FileNameWithoutExtension); 76 | builder.AppendLine("|Win32"); 77 | builder.AppendLine(" EndGlobalSection"); 78 | builder.AppendLine(" GlobalSection(SolutionProperties) = preSolution"); 79 | builder.AppendLine(" HideSolutionNode = FALSE"); 80 | builder.AppendLine(" EndGlobalSection"); 81 | builder.AppendLine(" GlobalSection(ExtensibilityGlobals) = postSolution"); 82 | builder.AppendLine(" SolutionGuid = {133C6D99-11F2-4EE7-A3DA-7F3CF3AB45A5}"); 83 | builder.AppendLine(" EndGlobalSection"); 84 | builder.AppendLine("EndGlobal"); 85 | 86 | var fs = new FileStream(cfg.Sln, FileMode.Create); 87 | byte[] data = new UTF8Encoding().GetBytes(builder.ToString()); 88 | fs.Write(data); 89 | fs.Flush(); 90 | fs.Close(); 91 | } 92 | 93 | public void CreatevcxprojBase(SysConfig cfg, int type = 0) 94 | { 95 | var builder = new StringBuilder(); 96 | builder.AppendLine(""); 97 | builder.AppendLine(""); 98 | builder.AppendLine(" "); 99 | builder.AppendLine(" "); 100 | builder.AppendLine(" Debug"); 101 | builder.AppendLine(" Win32"); 102 | builder.AppendLine(" "); 103 | builder.AppendLine(" "); 104 | builder.AppendLine(" Release"); 105 | builder.AppendLine(" Win32"); 106 | builder.AppendLine(" "); 107 | builder.AppendLine(" "); 108 | builder.AppendLine(" Debug"); 109 | builder.AppendLine(" x64"); 110 | builder.AppendLine(" "); 111 | builder.AppendLine(" "); 112 | builder.AppendLine(" Release"); 113 | builder.AppendLine(" x64"); 114 | builder.AppendLine(" "); 115 | builder.AppendLine(" "); 116 | builder.AppendLine(" "); 117 | builder.AppendLine(" 15.0"); 118 | builder.Append(" ").Append(cfg.Projguidvc).AppendLine(""); 119 | builder.AppendLine(" STM32F1"); 120 | builder.AppendLine(" 10.0"); 121 | builder.AppendLine(" "); 122 | builder.AppendLine(" "); 123 | builder.AppendLine(" "); 124 | builder.AppendLine(" Application"); 125 | builder.AppendLine(" true"); 126 | builder.AppendLine($" v{type}"); 127 | builder.AppendLine(" MultiByte"); 128 | builder.AppendLine(" "); 129 | builder.AppendLine(" "); 130 | builder.AppendLine(" Application"); 131 | builder.AppendLine(" false"); 132 | builder.AppendLine($" v{type}"); 133 | builder.AppendLine(" true"); 134 | builder.AppendLine(" MultiByte"); 135 | builder.AppendLine(" "); 136 | builder.AppendLine(" "); 137 | builder.AppendLine(" Application"); 138 | builder.AppendLine(" true"); 139 | builder.AppendLine($" v{type}"); 140 | builder.AppendLine(" MultiByte"); 141 | builder.AppendLine(" "); 142 | builder.AppendLine(" "); 143 | builder.AppendLine(" Application"); 144 | builder.AppendLine(" false"); 145 | builder.AppendLine($" v{type}"); 146 | builder.AppendLine(" true"); 147 | builder.AppendLine(" MultiByte"); 148 | builder.AppendLine(" "); 149 | builder.AppendLine(" "); 150 | builder.AppendLine(" "); 151 | builder.AppendLine(" "); 152 | builder.AppendLine(" "); 153 | builder.AppendLine(" "); 154 | builder.AppendLine(" "); 155 | builder.AppendLine(" "); 156 | builder.AppendLine(" "); 157 | builder.AppendLine(" "); 158 | builder.AppendLine(" "); 159 | builder.AppendLine(" "); 160 | builder.AppendLine(" "); 161 | builder.AppendLine(" "); 162 | builder.AppendLine(" "); 163 | builder.AppendLine(" "); 164 | builder.AppendLine(" "); 165 | builder.AppendLine(" "); 166 | builder.AppendLine(" "); 167 | builder.AppendLine(" "); 168 | builder.AppendLine(" "); 169 | builder.AppendLine(" "); 170 | builder.AppendLine(" Level3"); 171 | builder.AppendLine(" Disabled"); 172 | builder.AppendLine(" true"); 173 | builder.AppendLine(" true"); 174 | builder.AppendLine(this.GetIncludePathVC(cfg)); 175 | builder.AppendLine(this.GetMacroDefineVC(cfg.MacroDefineStr)); 176 | builder.AppendLine(" "); 177 | builder.AppendLine(" "); 178 | builder.AppendLine(" "); 179 | builder.AppendLine(" "); 180 | builder.AppendLine(" Level3"); 181 | builder.AppendLine(" Disabled"); 182 | builder.AppendLine(" true"); 183 | builder.AppendLine(" true"); 184 | builder.AppendLine(this.GetIncludePathVC(cfg)); 185 | builder.AppendLine(this.GetMacroDefineVC(cfg.MacroDefineStr)); 186 | builder.AppendLine(" "); 187 | builder.AppendLine(" "); 188 | builder.AppendLine(" "); 189 | builder.AppendLine(" "); 190 | builder.AppendLine(" Level3"); 191 | builder.AppendLine(" MaxSpeed"); 192 | builder.AppendLine(" true"); 193 | builder.AppendLine(" true"); 194 | builder.AppendLine(" true"); 195 | builder.AppendLine(" true"); 196 | builder.AppendLine(this.GetIncludePathVC(cfg)); 197 | builder.AppendLine(this.GetMacroDefineVC(cfg.MacroDefineStr)); 198 | builder.AppendLine(" "); 199 | builder.AppendLine(" "); 200 | builder.AppendLine(" true"); 201 | builder.AppendLine(" true"); 202 | builder.AppendLine(" "); 203 | builder.AppendLine(" "); 204 | builder.AppendLine(" "); 205 | builder.AppendLine(" "); 206 | builder.AppendLine(" Level3"); 207 | builder.AppendLine(" MaxSpeed"); 208 | builder.AppendLine(" true"); 209 | builder.AppendLine(" true"); 210 | builder.AppendLine(" true"); 211 | builder.AppendLine(" true"); 212 | builder.AppendLine(this.GetIncludePathVC(cfg)); 213 | builder.AppendLine(this.GetMacroDefineVC(cfg.MacroDefineStr)); 214 | builder.AppendLine(" "); 215 | builder.AppendLine(@" "); 216 | builder.AppendLine(@" true"); 217 | builder.AppendLine(@" true"); 218 | builder.AppendLine(@" "); 219 | builder.AppendLine(@" "); 220 | builder.AppendLine(@" "); 221 | builder.Append(cfg.ToProj_Files.ToString()); 222 | builder.AppendLine(@" "); 223 | builder.AppendLine(" "); 224 | builder.AppendLine(" "); 225 | builder.AppendLine(@" "); 226 | builder.AppendLine(@""); 227 | 228 | if (!Directory.Exists(cfg.VCPath)) 229 | { 230 | Directory.CreateDirectory(cfg.VCPath); 231 | } 232 | var fs = new FileStream(cfg.Vcxproj, FileMode.Create); 233 | byte[] data = new UTF8Encoding().GetBytes(builder.ToString()); 234 | fs.Write(data); 235 | fs.Flush(); 236 | fs.Close(); 237 | } 238 | /// 239 | /// 创建users文件 240 | /// 241 | /// 242 | public void Createvcxusers(SysConfig cfg) 243 | { 244 | var builder = new StringBuilder(); 245 | builder.AppendLine(""); 246 | builder.AppendLine(""); 247 | builder.AppendLine(" "); 248 | builder.Append(@" "); 249 | builder.Append(cfg.UV4_Path); 250 | builder.AppendLine(@" "); 251 | builder.Append(" -d "); 252 | builder.Append(cfg.FileNameWithoutExtension); 253 | builder.Append(".uvproj -t \""); 254 | builder.Append(cfg.FileNameWithoutExtension); 255 | builder.Append("\""); 256 | builder.AppendLine("\""); 257 | builder.Append(@" "); 258 | builder.Append(@"..\"); 259 | builder.AppendLine(@""); 260 | builder.AppendLine(" WindowsLocalDebugger"); 261 | builder.AppendLine(" "); 262 | builder.AppendLine(" "); 263 | builder.AppendLine(" false"); 264 | builder.AppendLine(" "); 265 | builder.AppendLine(""); 266 | var fs = new FileStream(cfg.Vcusers, FileMode.Create); 267 | byte[] data = new UTF8Encoding().GetBytes(builder.ToString()); 268 | fs.Write(data); 269 | fs.Flush(); 270 | fs.Close(); 271 | } 272 | /// 273 | /// 获取过滤器文件、文件夹列表 274 | /// 275 | /// 276 | /// 277 | public string Get_ToFilter_FolderFiles(SysConfig cfg) 278 | { 279 | var builder = new StringBuilder(); 280 | 281 | for (int i = 0; i < cfg.ProjFiles.Nodes.Count; i++) 282 | { 283 | for (int j = 0; j < cfg.ProjFiles.Nodes[i].Nodes.Count; j++) 284 | { 285 | for (int k = 0; k < cfg.ProjFiles.Nodes[i].Nodes[j].Nodes.Count; k++) 286 | { 287 | for (int l = 0; l < cfg.ProjFiles.Nodes[i].Nodes[j].Nodes[k].Nodes.Count; l++) 288 | { 289 | for (int m = 0; m < cfg.ProjFiles.Nodes[i].Nodes[j].Nodes[k].Nodes[l].Nodes.Count; m++) 290 | { 291 | 292 | 293 | if (cfg.ProjFiles.Nodes[i].Nodes[j].Nodes[k].Nodes[l].Nodes.Count == 0) 294 | { 295 | builder.Append(" "); 304 | var path2 = cfg.ProjFiles.Data.Name + @"\" + 305 | cfg.ProjFiles.Nodes[i].Data.Name + @"\" + 306 | cfg.ProjFiles.Nodes[i].Nodes[j].Data.Name + @"\" + 307 | cfg.ProjFiles.Nodes[i].Nodes[j].Nodes[k].Data.Name + @"\" + 308 | cfg.ProjFiles.Nodes[i].Nodes[j].Nodes[l].Nodes[m].Data.Name; 309 | builder.Append(" ").Append(path2).AppendLine(""); 310 | builder.AppendLine(" "); 311 | } 312 | else { } 313 | } 314 | 315 | if (cfg.ProjFiles.Nodes[i].Nodes[j].Nodes[k].Nodes[l].Nodes.Count == 0) 316 | { 317 | builder.Append(" "); 326 | var path2 = cfg.ProjFiles.Data.Name + @"\" + 327 | cfg.ProjFiles.Nodes[i].Data.Name + @"\" + 328 | cfg.ProjFiles.Nodes[i].Nodes[j].Data.Name + @"\" + 329 | cfg.ProjFiles.Nodes[i].Nodes[j].Nodes[k].Data.Name; 330 | builder.Append(" ").Append(path2).AppendLine(""); 331 | builder.AppendLine(" "); 332 | } 333 | else { } 334 | } 335 | 336 | if (cfg.ProjFiles.Nodes[i].Nodes[j].Nodes[k].Nodes.Count == 0) 337 | { 338 | builder.Append(" "); 347 | var path2 = cfg.ProjFiles.Data.Name + @"\" + 348 | cfg.ProjFiles.Nodes[i].Data.Name + @"\" + 349 | cfg.ProjFiles.Nodes[i].Nodes[j].Data.Name; 350 | builder.Append(" ").Append(path2).AppendLine(""); 351 | builder.AppendLine(" "); 352 | } 353 | else { } 354 | } 355 | 356 | if (cfg.ProjFiles.Nodes[i].Nodes[j].Nodes.Count == 0) 357 | { 358 | builder.Append(" "); 367 | var path2 = cfg.ProjFiles.Data.Name + @"\" + 368 | cfg.ProjFiles.Nodes[i].Data.Name; 369 | builder.Append(" ").Append(path2).AppendLine(""); 370 | builder.AppendLine(" "); 371 | } 372 | else { } 373 | } 374 | 375 | if (cfg.ProjFiles.Nodes[i].Nodes.Count == 0) 376 | { 377 | builder.Append(" "); 386 | var path2 = cfg.ProjFiles.Data.Name; 387 | builder.Append(" ").Append(path2).AppendLine(""); 388 | builder.AppendLine(" "); 389 | } 390 | else { } 391 | } 392 | return builder.ToString(); 393 | } 394 | /// 395 | /// 获取过滤器目录列表 396 | /// 397 | /// 398 | /// 399 | public String Get_ToFilter_Folders(SysConfig cfg) 400 | { 401 | var builder = new StringBuilder(); 402 | 403 | for (int i = 0; i < cfg.ProjFiles.Nodes.Count; i++) 404 | { 405 | for (int j = 0; j < cfg.ProjFiles.Nodes[i].Nodes.Count; j++) 406 | { 407 | for (int k = 0; k < cfg.ProjFiles.Nodes[i].Nodes[j].Nodes.Count; k++) 408 | { 409 | var path2 = cfg.ProjFiles.Data.Name + @"\" + cfg.ProjFiles.Nodes[i].Data.Name + @"\" + cfg.ProjFiles.Nodes[i].Nodes[j].Data.Name + @"\"; 410 | 411 | if (cfg.ProjFiles.Nodes[i].Nodes[j].Nodes[k].Nodes.Count > 0) 412 | { 413 | if (cfg.ProjFiles.Nodes[i].Nodes[j].Nodes[k].Data.Name.StartsWith(".\\")) 414 | builder.Append(" "); 415 | else 416 | builder.Append(" "); 417 | builder.Append(" ").Append(Guid.NewGuid().ToString("B")).AppendLine(""); 418 | builder.AppendLine(" "); 419 | } 420 | } 421 | 422 | if (cfg.ProjFiles.Nodes[i].Nodes[j].Nodes.Count != 0) 423 | { 424 | var path1 = cfg.ProjFiles.Data.Name + @"\" + cfg.ProjFiles.Nodes[i].Data.Name + @"\"; 425 | 426 | if (cfg.ProjFiles.Nodes[i].Nodes[j].Data.Name.StartsWith(".\\")) 427 | builder.Append(" "); 428 | else 429 | builder.Append(" "); 430 | builder.Append(" ").Append(Guid.NewGuid().ToString("B")).AppendLine(""); 431 | builder.AppendLine(" "); 432 | } 433 | } 434 | 435 | if (cfg.ProjFiles.Nodes[i].Nodes.Count != 0) 436 | { 437 | var path0 = cfg.ProjFiles.Data.Name + @"\"; 438 | 439 | if (cfg.ProjFiles.Nodes[i].Data.Name.StartsWith(".\\")) 440 | builder.Append(" "); 441 | else 442 | builder.Append(" "); 443 | builder.Append(" ").Append(Guid.NewGuid().ToString("B")).AppendLine(""); 444 | builder.AppendLine(" "); 445 | } 446 | else { } 447 | } 448 | 449 | if (cfg.ProjFiles.Nodes.Count != 0) 450 | { 451 | if (cfg.ProjFiles.Data.Name.StartsWith(".\\")) 452 | builder.Append(" "); 453 | else 454 | builder.Append(" "); 455 | builder.Append(" ").Append(Guid.NewGuid().ToString("B")).AppendLine(""); 456 | builder.AppendLine(" "); 457 | } 458 | else { } 459 | 460 | return builder.ToString(); 461 | } 462 | /// 463 | /// 获取所有文件列表 464 | /// 465 | /// 466 | /// 467 | public string Get_ToProj_Files(SysConfig cfg) 468 | { 469 | var builder = new StringBuilder(); 470 | 471 | if (cfg.ProjFiles.Nodes.Count != 0) 472 | { 473 | for (int i = 0; i < cfg.ProjFiles.Nodes.Count; i++) 474 | { 475 | for (int j = 0; j < cfg.ProjFiles.Nodes[i].Nodes.Count; j++) 476 | { 477 | if (cfg.ProjFiles.Nodes[i].Nodes[j].Nodes.Count == 0) 478 | { 479 | if (cfg.ProjFiles.Nodes[i].Nodes[j].Data.Name != null) 480 | { 481 | builder.Append(" "); 487 | } 488 | } 489 | for (int k = 0; k < cfg.ProjFiles.Nodes[i].Nodes[j].Nodes.Count; k++) 490 | { 491 | if (cfg.ProjFiles.Nodes[i].Nodes[j].Nodes[k].Nodes.Count == 0) 492 | { 493 | if (cfg.ProjFiles.Nodes[i].Nodes[j].Nodes[k].Data.Name != null) 494 | { 495 | builder.Append(" "); 501 | } 502 | } 503 | for (int l = 0; l < cfg.ProjFiles.Nodes[i].Nodes[j].Nodes[k].Nodes.Count; l++) 504 | { 505 | if (cfg.ProjFiles.Nodes[i].Nodes[j].Nodes[k].Nodes[l].Nodes.Count == 0) 506 | { 507 | if (cfg.ProjFiles.Nodes[i].Nodes[j].Nodes[k].Nodes[l].Data.Name != null) 508 | { 509 | builder.Append(" "); 515 | } 516 | } 517 | 518 | } 519 | } 520 | } 521 | } 522 | } 523 | return builder.ToString(); 524 | } 525 | private String GetIncludePathVC(SysConfig cfg) 526 | { 527 | var builder = new StringBuilder(); 528 | builder.Append(" "); 529 | builder.Append(cfg.IncludePathStr); 530 | builder.Append(";%(AdditionalIncludeDirectories)"); 531 | return builder.ToString(); 532 | } 533 | private String GetMacroDefineVC(string definestr) 534 | { 535 | var builder = new StringBuilder(); 536 | builder.Append(" "); 537 | builder.Append(definestr).Append("%(PreprocessorDefinitions)"); 538 | return builder.ToString(); 539 | } 540 | } 541 | } -------------------------------------------------------------------------------- /Src/MDK2VC/M2V/UI/FormMain.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 17, 17 122 | 123 | 124 | 135, 17 125 | 126 | 127 | 128 | 129 | AAABAAEAQEAAAAEAIAAoQgAAFgAAACgAAABAAAAAgAAAAAEAIAAAAAAAAEAAABMLAAATCwAAAAAAAAAA 130 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 131 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 132 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 133 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 134 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 135 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 136 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 137 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 138 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 139 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 140 | AAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAQAAAAGAAAACAAAAAkAAAAJAAAACQAAAAkAAAAIAAAABgAA 141 | AAQAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 142 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 143 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 144 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAUAAAAJAAAADwAAABgcFxEjSTQjMGhHLjx6UjRGglc3S4JX 145 | N0t6UjRGaEcuPEk0IzAcFxEjAAAAGAAAAA8AAAAJAAAABQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 146 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 147 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 148 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgGBAAAAAAEAAAACQAAABMyJRoog1c3SrFzR3TKgU6d2IlSvt+N 149 | U9Tjj1Ti5ZBV6uaQVe7mkFXu5ZBV6uOPVOLfjVPU2IlSvsqBTp2xc0d0g1c3SjIlGigAAAATAAAACQAA 150 | AAQIBgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 151 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 152 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQsHAAAAAAQAAAAMDw4MHoJXOEjAe0uI24pSxeaQ 153 | Vezqklb97JNW/+yTVv/sklX/65JV/+uRVP/rkVP/65FT/+uRVP/rklX/7JJV/+yTVv/sk1b/6pJW/eaQ 154 | VezbilLFwHtLiIJXN0gPDgweAAAADAAAAAQRCwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 155 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 156 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAoZFRAfmWU/WNGF 157 | UKvlkFXp65JW/+yTVv/rklT/649Q/+qLSv/phkP/6YM9/+iAOf/ofjf/6H41/+h+Nf/ofjf/6IA5/+mD 158 | Pf/phkP/6otK/+uPUP/rklT/7JNW/+uSVv/lkFXp0YVQq5llP1gZFRAfAAAACgAAAAIAAAAAAAAAAAAA 159 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 160 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYDwkAAAAABQAA 161 | ABWKXDtK0oZQq+eRVfDsk1b/65JV/+qOT//ph0T/6IA5/+h7Mf/neCz/53cr/+d3Kv/ndyr/53cq/+d3 162 | Kv/ndyr/53cq/+d3Kv/ndyr/53cr/+d4LP/oezH/6IA5/+mHRP/qjk//65JV/+yTVv/nkVXw0oZQq4pc 163 | O0oAAAAVAAAABRgPCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 164 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 165 | AAADAAABAAAACUYyIijAfEyF5Y9V5euTVv/rklX/6o1M/+mDPf/oejD/53cr/+d3Kv/ndyv/53cr/+d3 166 | K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3Kv/ndyv/6How/+mD 167 | Pf/qjUz/65JV/+uTVv/lj1XlwHxMhUYyIigAAAAJAwAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 168 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 169 | AAAAAAAAAAAAAAAAAAAAAAACAAAADYNYOELXiVK46pJV/OuSVf/qjk//6YM9/+d5L//ndyr/53cr/+d3 170 | K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3 171 | K//ndyv/53cr/+d3K//ndyr/53kv/+mDPf/qjk//65JV/+qSVfzXiVK4g1g4QgAAAA0AAAACAAAAAAAA 172 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 173 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAD6JrQ1nhjlTX65NW/+uRVP/piEX/6Hsx/+d3 174 | K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3 175 | K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/6Hsx/+mIRf/rkVT/65NW/+GO 176 | VNeia0NZAAAADwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 177 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAEK9zR2XlkFXl7JNW/+uP 178 | Uf/pgjz/53gs/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3 179 | K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3 180 | K//neCz/6YI8/+uPUf/sk1b/5ZBV5a9zR2UAAAAQAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 181 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAADbF0 182 | SGTmkFXq65NW/+qOTv/ofjb/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3 183 | K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3 184 | K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ofjb/6o5O/+uTVv/mkFXqsXRIZAAAAA0AAAABAAAAAAAA 185 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 186 | AAAKAAAAAAAACahvRVblkFXl65NW/+qNTf/ofDP/53cq/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3 187 | K//ndyv/53cr/+d3K//ndyv/53cr/+d2Kv/ndin/53Uo/+d1KP/ndSj/53Uo/+d2Kf/ndir/53cr/+d3 188 | K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cq/+h8M//qjU3/65NW/+WQ 189 | VeWob0VWAAAACQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 190 | AAAAAAAAAAAAAAAAAAAAAAAAAAAABI5gPTzijlTW7JNW/+qOTv/ofDP/53cq/+d3K//ndyv/53cr/+d3 191 | K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndin/53Uo/+d4LP/pgDr/64xM/+2XXf/unWb/7p1m/+2X 192 | Xf/rjU3/6YE7/+d4Lf/ndSj/53Yp/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3 193 | K//ndyr/6Hwz/+qOTv/sk1b/4o5U1o5gPTwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 194 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVg/KyDailO265JW/+uPUf/ofjb/53cq/+d3 195 | K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d2Kf/ndir/6oZD//CoeP/2zK//+uXX//3z 196 | 7P/++fb//vz6//78+v/++fb//fPt//vm2P/2zrL/8Kt8/+qIRv/ndyv/53Yp/+d3K//ndyv/53cr/+d3 197 | K//ndyv/53cr/+d3K//ndyv/53cr/+d3Kv/ofjb/649R/+uSVv/ailO2WD8rIAAAAAEAAAAAAAAAAAAA 198 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvJgU+A6pJV/OuR 199 | VP/pgjz/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cq/+d2Kf/qikj/872Y//vq 200 | 3////v7//vn1//328f/////////////////////////////////////////////+/v/87OL/9MCd/+uM 201 | TP/ndin/53Yq/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+mCPP/rkVT/6pJV/MmB 202 | T4AAAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 203 | AAKga0RA5pBV5OuSVf/piEX/53gs/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53Yp/+h8 204 | Mv/xrX//++vf//////////////////328f/2zK///vr4//////////////////////////////////// 205 | ///////////////////87eP/8bGG/+h9Nf/ndin/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3 206 | K//neCz/6YhF/+uSVf/mkFXkoGtEQAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 207 | AAAAAAAAAAAAAAAAAAAsJR0R2IpTpuuSVv/qjk//6Hsx/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3 208 | K//ndyv/53Yp/+mEP//2yq3///z7////////////////////////////876a//bOsv////////////// 209 | ///////////////////////////////////////////////9/P/3z7T/6odE/+d2Kf/ndyv/53cr/+d3 210 | K//ndyv/53cr/+d3K//ndyv/53cr/+h7Mf/qjk//65JW/9iKU6YsJR0RAAAAAAAAAAAAAAAAAAAAAAAA 211 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsnZKTOiRVe/rklX/6YM9/+d3K//ndyv/53cr/+d3 212 | K//ndyv/53cr/+d3K//ndyv/53Yp/+qIRf/42MP///////////////////////////////////////nc 213 | yP/sk1f/++vg//////////////////////////////////////////////////////////////////nd 214 | yv/ri0v/53Yp/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/6YM9/+uSVf/okVXvsnZKTAAA 215 | AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/zZYAISAbDdmLU6Xrk1b/6o1M/+d5 216 | L//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53Yp/+mEP//42ML///////////////////////// 217 | ///////////////////99vD/7JFU//Cpef/++/n///////////////////////////////////////// 218 | ////////////////////////+d3K/+qHRP/ndin/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d5 219 | L//qjUz/65NW/9mLU6UhIBsN/82WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AKlx 220 | SDjnkVXn65JV/+mDPf/ndyr/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cq/+h7Mv/1yav///////// 221 | //////////////////////////////////////////////K1i//neS7/9s2x//////////////////// 222 | ///////////////////////////////////////////////////30LX/6H01/+d2Kv/ndyv/53cr/+d3 223 | K//ndyv/53cr/+d3K//ndyr/6YM9/+uSVf/nkVXnqXFIOP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 224 | AAAAAAAAAggKAAAAAAPRh1J965JW/+qOT//oejD/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d2 225 | Kf/wq33//vz6///////////////////////////////////////////////////////42sX/6How/+uL 226 | Sv/76t7///////////////////////////////////////////////////////////////////39//Gy 227 | h//ndir/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+h6MP/qjk//65JW/9GHUn0AAAADAggKAAAA 228 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAOqqdgBpTTYT4Y5Vv+uTVv/ph0T/53cr/+d3K//ndyv/53cr/+d3 229 | K//ndyv/53cr/+d2Kf/qiEb/++nd//////////////////////////////////////////////////// 230 | /////////fTu/+uQUv/mdCb/8Kh4//77+P////////////////////////////////////////////// 231 | ///////////////////87uT/641N/+d2Kf/ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/6YdE/+uT 232 | Vv/hjlW/aU02E+qqdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//6QAtHhMNuiRVerrklT/6IA5/+d3 233 | Kv/ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndir/87qU//////////////////////////////////// 234 | ///////////////////////////////////xsYb/53Un/+h6MP/2y63///////////////////////// 235 | //////////////////////////////////////////////TBn//ndyv/53cr/+d3K//ndyv/53cr/+d3 236 | K//ndyv/53cq/+iAOf/rklT/6JFV6rR4TDb//6QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AM+G 237 | U2Tqklb9649Q/+h7Mf/ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndir/6YVA//vo3P////////////// 238 | ////////////////////////////////////////////////////////+Na//+h7Mf/ndSn/6opJ//vo 239 | 2//////////////////////////////////////////////////////////////////87eP/6olH/+d2 240 | Kf/ndyv/53cr/+d3K//ndyv/53cr/+d3K//oezH/649Q/+qSVv3PhlNk////AAAAAAAAAAAAAAAAAAAA 241 | AAAAAAAAGBoYAAAAAAPcjFWR65NW/+qLSv/neCz/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53Uo/++l 242 | c////fz///////////////////////////////////////////////////////////////////////3y 243 | 6//rjU7/53Yp/+d1KP/vpnT//vr3//////////////////////////////////////////////////// 244 | ///////////+//Csfv/ndSj/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53gs/+qLSv/rk1b/3IxVkQAA 245 | AAMYGhgAAAAAAAAAAAAAAAAAAAAAAIVoTQBcSjgL4o9WteuTVv/phkP/53cr/+d3K//ndyv/53cr/+d3 246 | K//ndyv/53cr/+d3K//1yKn///////////////////////////////////////////////////////// 247 | ////////////////////////8a6A/+d1KP/ndyr/53ov//XIqv////////////////////////////// 248 | ///////////////////////////////////3z7X/53gt/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3 249 | K//phkP/65NW/+KPVrVcSjgLhWhNAAAAAAAAAAAAAAAAAAAAAADOkmMAnG5KFuWRVs7rklX/6YM9/+d3 250 | Kv/ndyv/53cr/+d3K//ndyv/53cr/+d3Kv/ofzf/+uHR//////////////////////////////////// 251 | /////////fXw//fSuf/528b/++fZ//zw6P/+9/P////+//fTu//oejD/53cr/+d2Kf/qiEb/++bZ//// 252 | ////////////////////////////////////////////////////////++fa/+mCPP/ndir/53cr/+d3 253 | K//ndyv/53cr/+d3K//ndyr/6YM9/+uSVf/lkVbOnG5KFs6SYwAAAAAAAAAAAAAAAAAAAAAA7KBoALZ8 254 | UCLnkVbe65JV/+iAOf/ndyr/53cr/+d3K//ndyv/53cr/+d3K//ndin/6olI//zw6P////////////// 255 | //////////////////////////////307v/skVT/53ov/+mBO//qiUj/7JRY/+6hbP/vpHH/6Hwz/+d3 256 | K//ndyv/53Uo/++kcf/++fb///////////////////////////////////////////////////////30 257 | 7v/rjlD/53Yp/+d3K//ndyv/53cr/+d3K//ndyv/53cq/+iAOf/rklX/55FW3rZ8UCLsoGgAAAAAAAAA 258 | AAAAAAAAAAAAAPekaADDg1Qr6JJW5+uRVP/ofjf/53cq/+d3K//ndyv/53cr/+d3K//ndyv/53Uo/+yT 259 | V//+9/P/////////////////////////////////////////////////8bCE/+d1J//ndir/53Yp/+d1 260 | KP/ndSf/53Uo/+d3K//ndyv/53cr/+d3K//neS7/9cam//////////////////////////////////// 261 | ///////////////////++vf/7Zlg/+d1KP/ndyv/53cr/+d3K//ndyv/53cr/+d3Kv/ofjf/65FU/+iS 262 | VufDg1Qr96RoAAAAAAAAAAAAAAAAAAAAAAD4o2YAyYZVMOmSVuvrkVP/6H41/+d3Kv/ndyv/53cr/+d3 263 | K//ndyv/53cr/+d1KP/tmF///vr3//////////////////////////////////////////////////fS 264 | uv/neS//53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53Yp/+qHRP/65db///////// 265 | //////////////////////////////////////////z7/+6faf/ndSj/53cr/+d3K//ndyv/53cr/+d3 266 | K//ndyr/6H41/+uRU//pklbryYZVMPijZgAAAAAAAAAAAAAAAAAAAAAA9KFkAMuIVjDpklbr65FT/+h+ 267 | Nf/ndyr/53cr/+d3K//ndyv/53cr/+d3K//ndSj/7Zhf//769/////////////////////////////// 268 | ///////////////////87uT/6ohG/+d2Kf/ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3 269 | K//ndSj/7qFt//749P////////////////////////////////////////////78+v/unmj/53Uo/+d3 270 | K//ndyv/53cr/+d3K//ndyv/53cq/+h+Nf/rkVP/6ZJW68uIVjD0oWQAAAAAAAAAAAAAAAAAAAAAAOuc 271 | YwDLiFcq6ZJW5+uRVP/ofjf/53cq/+d3K//ndyv/53cr/+d3K//ndyv/53Uo/+ySVv/+9/L///////// 272 | //////////////////////////////////////////38/++kcf/ndSj/53cr/+d3K//ndyv/53cr/+d3 273 | K//ndyv/53cr/+d3K//ndyv/53cr/+d5Lv/0xKL///////////////////////////////////////// 274 | ///++fb/7Zdd/+d1KP/ndyv/53cr/+d3K//ndyv/53cr/+d3Kv/ofjf/65FU/+mSVufLiFcq65xjAAAA 275 | AAAAAAAAAAAAAAAAAADelmEAx4hYH+iSVt3rklX/6IA5/+d3Kv/ndyv/53cr/+d3K//ndyv/53cr/+d2 276 | Kf/qiEb//O/m///////////////////////////////////////////////////////1x6f/53cr/+d3 277 | K//ndyv/53cr/+d3K//ndyv/53cr/+d2Kf/ndSj/53Un/+d1J//mdCb/6YQ///rh0f////////////// 278 | /////////////////////////fLr/+uMTP/ndin/53cr/+d3K//ndyv/53cr/+d3K//ndyr/6IA5/+uS 279 | Vf/oklbdx4hYH96WYQAAAAAAAAAAAAAAAAAAAAAAyo9hAL2FWRPoklfN65JV/+mDPf/ndyr/53cr/+d3 280 | K//ndyv/53cr/+d3K//ndyr/6H41//ngzv////////////////////////////////////////////// 281 | ////////++bY/+mCPP/ndir/53cr/+d3K//ndyv/53Yq/+mBOv/ytYv/8raN//Gugf/vp3b/7qBr/+2Y 282 | X//zu5X///z7//////////////////////////////////rk1P/pgDn/53Yq/+d3K//ndyv/53cr/+d3 283 | K//ndyv/53cq/+mDPf/rklX/6JJXzb2FWRPKj2EAAAAAAAAAAAAAAAAAAAAAAKJ/XgCWeVwH5pJXsuuS 284 | Vv/phkP/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d2Kv/1xaT///////////////////////// 285 | //////////////////////////////759v/tmWD/53Uo/+d3K//ndyv/53cr/+d3K//oezL/+NfA//// 286 | //////////7+///9+//++vj//vj0///+/f/////////////////////////////////2yqz/53cr/+d3 287 | K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//phkP/65JW/+aSV7KWeVwHon9eAAAAAAAAAAAAAAAAAAAA 288 | AABART8A/+hTAOSSWIvrklb/6otK/+d4LP/ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndSj/7qFt//78 289 | +v//////////////////////////////////////////////////////87qU/+d1Kf/ndyv/53cr/+d3 290 | K//ndyv/53Uo/++ndv///fz///////////////////////////////////////////////////////// 291 | /////fz/76d1/+d1KP/ndyv/53cr/+d3K//ndyv/53cr/+d3K//neCz/6otK/+uSVv/kkliL/+hTAEBF 292 | PwAAAAAAAAAAAAAAAAAAAAAAAAAAAP+fWwDhklpc65JW/euPUP/oezH/53cr/+d3K//ndyv/53cr/+d3 293 | K//ndyv/53Yq/+mCPf/65db///////////////////////////////////////////////////////nc 294 | yP/ofDT/53cq/+d3K//ndyv/53cr/+d2Kv/phD//++fZ//////////////////////////////////// 295 | ////////////////////////++nd/+qGQv/ndir/53cr/+d3K//ndyv/53cr/+d3K//ndyv/6Hsx/+uP 296 | UP/rklb94ZJaXP+fWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADnmF8A25JdLOqSVujrklT/6IA5/+d3 297 | Kv/ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndin/8rWL//////////////////////////////////// 298 | ///////////////////99O7/65BR/+d1Kf/ndyv/53cr/+d3K//ndyv/53Yp//O8l/////////////// 299 | //////////////////////////////////////////////O8lv/ndir/53cr/+d3K//ndyv/53cr/+d3 300 | K//ndyv/53cq/+iAOf/rklT/6pJW6NuSXSznmF8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAy5RnAMWR 301 | Zgrok1i565JW/+mHRP/ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53Yq/+mFQf/65db///////// 302 | //////////////////////////////////////////////Gugf/ndSj/53cr/+d3K//ndyv/53cr/+d1 303 | Kf/skVT//fTu//////////////////////////////////////////////////vr3//qikj/53Yp/+d3 304 | K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ph0T/65JW/+iTWLnFkWYKy5RnAAAAAAAAAAAAAAAAAAAA 305 | AAAAAAAAAAAAABRIVwD/mU0A5ZRacuuSVv/qjk//6How/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3 306 | K//ndSj/76Z0//769//////////////////////////////////////////////////30bf/53ku/+d3 307 | K//ndyv/53cr/+d3K//ndyv/53ov//fSuf/////////////////////////////////////////////9 308 | +//xroH/53Yp/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//oejD/6o5P/+uSVv/llFpy/5lNABRI 309 | VwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A55heAN+VXyrqk1bk65JV/+mDPf/ndyr/53cr/+d3 310 | K//ndyv/53cr/+d3K//ndyv/53cr/+d6L//0w6L///////////////////////////////////////// 311 | /////////O3j/+qHRf/ndin/53cr/+d3K//ndyv/53cr/+d1KP/vpHH//vz7//////////////////// 312 | ///////////////////2zbH/6Hwz/+d3Kv/ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyr/6YM9/+uS 313 | Vf/qk1bk35VfKueYXgD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQICAMaZcACmoIgD6JRZmuuS 314 | Vv/qjUz/53kv/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndir/6YE7//fTuv////////////// 315 | ///////////////////////////////8+//vo2//53Uo/+d3K//ndyv/53cr/+d3K//ndir/6YI8//rk 316 | 1v/////////////////////////////////53Mj/6oZC/+d2Kf/ndyv/53cr/+d3K//ndyv/53cr/+d3 317 | K//ndyv/53kv/+qNTP/rklb/6JRZmqagiAPGmXAAAQICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 318 | AAD/tHMA7JZaAOSWXjvqk1bt65JV/+mDPf/ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d2 319 | Kf/phUH/99S8////////////////////////////////////////////9cWl/+d3Kv/ndyv/53cr/+d3 320 | K//ndyv/53cr/+d2Kf/zuZL////////////////////////////53Mn/6otJ/+d2Kf/ndyv/53cr/+d3 321 | K//ndyv/53cr/+d3K//ndyv/53cr/+mDPf/rklX/6pNW7eSWXjvslloA/7RzAAAAAAAAAAAAAAAAAAAA 322 | AAAAAAAAAAAAAAAAAAAAAAAAMkRDANSdbwDEpYEE6JRZmuuSVf/qjk//6Hsx/+d3K//ndyv/53cr/+d3 323 | K//ndyv/53cr/+d3K//ndyv/53Yp/+mCPP/1xqf//vv5//////////////////////////////////rk 324 | 1v/pgTr/53Yq/+d3K//ndyv/53cr/+d3K//ndin/649R//3y6//////////////9/P/2zrP/6oZD/+d2 325 | Kf/ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+h7Mf/qjk//65JV/+iUWZrEpYEE1J1vADJE 326 | QwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADvoGYA6ZZcAOSYYS3qk1fg65JV/+mI 327 | Rf/neCz/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndin/6How//Cqev/76dz///////// 328 | ///////////////////++fX/7Zhe/+d1KP/ndyv/53cr/+d3K//ndyv/53cr/+d5Lv/3z7X///////zs 329 | 4f/xsIT/6H00/+d2Kf/ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d4LP/piEX/65JV/+qT 330 | V+DkmGEt6ZZcAO+gZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQ19eAMOr 331 | iQD/dx0A6JZbb+uSVvzrkVT/6YI8/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3 332 | Kv/ndin/6ohG//O7lP/76d3///39//////////////////O5kv/ndSj/53cr/+d3K//ndyv/53cr/+d3 333 | K//ndSj/7Ztj//O8l//ri0r/53Yp/+d2Kv/ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3 334 | K//pgjz/65FU/+uSVvzolltv/3cdAMOriQBDX14AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 335 | AAAAAAAAAAAAAAAAAADXo3YA4pxmAN6fbQ3plFmq65JV/+uPUf/ofjb/53cq/+d3K//ndyv/53cr/+d3 336 | K//ndyv/53cr/+d3K//ndyv/53cr/+d2Kf/ndir/6oZC/++ndv/2yq3/+uPU//3z7f/31Lz/6Hsy/+d3 337 | K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndir/53Yp/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3 338 | K//ndyv/53cr/+d3Kv/ofjb/649R/+uSVf/plFmq3p9tDeKcZgDXo3YAAAAAAAAAAAAAAAAAAAAAAAAA 339 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRQUAO6UVgDpllsA5ZpjJuqTV87rklX/6o5O/+h8 340 | M//ndyr/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d2Kv/ndSj/53cr/+iA 341 | OP/ri0r/649Q/+d6L//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3 342 | K//ndyv/53cr/+d3K//ndyv/53cr/+d3Kv/ofDP/6o5O/+uSVf/qk1fO5ZpjJumWWwDulFYADRQUAAAA 343 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACXt60A/wAAAO+O 344 | TgDnmF8+6pNX4OuSVf/qjU3/6Hwz/+d3Kv/ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3 345 | K//ndyv/53cr/+d3K//ndir/53Yp/+d2Kf/ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3 346 | K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3Kv/ofDP/6o1N/+uSVf/qk1fg55hfPu+O 347 | TgD/AAAAl7etAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 348 | AAAAAAAAAAAAAM6yjgDTsooA+IA4AOiYXk3qk1fl65JV/+qOTv/ofjb/53cr/+d3K//ndyv/53cr/+d3 349 | K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3 350 | K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ofjb/6o5O/+uS 351 | Vf/qk1fl6JheTfiAOADTsooAzrKOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 352 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2qp9AN2pegD/cSAA6JheTeqTV+DrklX/649R/+mC 353 | PP/neCz/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3 354 | K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d4 355 | LP/pgjz/649R/+uSVf/qk1fg6JheTf5xIADdqXsA2qp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 356 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADeqHkA3qp7APZ/ 357 | NwDnmWA+6pRXzuuSVf/rkVT/6YhF/+h7Mf/ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3 358 | K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3 359 | K//ndyv/53cr/+h7Mf/piEX/65FU/+uSVf/qlFfO55lgPvZ/NwDeqnsA3qh5AAAAAAAAAAAAAAAAAAAA 360 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 361 | AAAAAAAAAAAAAN2rfgDYtY0A7o1OAOabYyXqlFmp65JW/OuSVf/qjk//6YM9/+d5L//ndyr/53cr/+d3 362 | K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3 363 | K//ndyv/53cr/+d3K//ndyr/53kv/+mDPf/qjk//65JV/+uSVvzqlFmp5ptjJe6NTgDXtY0A3at+AAAA 364 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 365 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1rmTAP8AAADpllsA46JvDOmWXG7qk1ff65JV/+uS 366 | Vf/qjUz/6YM9/+h6MP/ndyv/53cq/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3 367 | K//ndyv/53cr/+d3K//ndyv/53cq/+d3K//oejD/6YM9/+qNTP/rklX/65JV/+qTV9/pllxu46JvDOmW 368 | WwD/AAAA1rmTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 369 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC+59oA65JVAOWe 370 | ZwD9bRsA55piLOqVWpnrk1bt65JW/+uSVf/qjk//6YdE/+iAOf/oezH/53gs/+d3K//ndyr/53cq/+d3 371 | Kv/ndyr/53cq/+d3Kv/ndyr/53cq/+d3K//neCz/6Hsx/+iAOf/ph0T/6o5P/+uSVf/rklb/65NW7eqV 372 | WpnnmmIs/W0bAOWeZwDrklUAvufaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 373 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 374 | AAAAAAAAAAAAAKn//wDgqnsA17yXAOmWXADat48D6JlgOuqVWpnrk1fj65JW/+uSVv/rkVT/649Q/+qL 375 | Sv/phkP/6YM9/+iAOf/ofjf/6H41/+h+Nf/ofjf/6IA5/+mDPf/phkP/6otK/+uPUP/rkVT/65JW/+uS 376 | Vv/rk1fj6pVameiZYDrat48D6ZZcANe8lwDgqnsAqf//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 377 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 378 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALD59gDnm2MA4ad2AOqVWQDRyqwC55tiKemW 379 | XHDqlFi465NX5+uTVvzrklb/65JW/+uSVf/rklX/65FU/+uRU//rkVP/65FU/+uSVf/rklX/65JW/+uS 380 | Vv/rk1b865NX5+qUWLjpllxw55tiKdHKrALqlVkA4ad2AOebYwCw+fYAAAAAAAAAAAAAAAAAAAAAAAAA 381 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 382 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALf4 383 | 9ADom2MA36x+AOiYXwDwh0UA4qZ1CeeaYirpl11Z6ZVaiOqUWa/qlFjK6pNX2+uTV+Xrk1bp65NW6euT 384 | V+Xqk1fb6pRYyuqUWa/plVqI6ZddWeeaYiripnUJ8IdFAOiYXwDfrH4A6JtjALf49AAAAAAAAAAAAAAA 385 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 386 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 387 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAALP//wDSx6gAcP//AOKlcgDomF8A7JFTAPh3KgDcsocF5KFsD+ad 388 | Zhvnm2Ml55piKueaYirnm2Ml5p1mG+ShbA/csocF+HcqAOyRUwDomF8A4qVyAHD//wDSx6gAs///AAAA 389 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 390 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 391 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8Arf//AP+H 392 | QwDJ28YA3q6BAOShbQDmnGUA55phAOiZYADomWAA55phAOacZQDkoW0A3q6BAMjbxgD/h0MArf//AAD/ 393 | /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 394 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 395 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 396 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 397 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 398 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 399 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 400 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 401 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 402 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 403 | AAAAAAAA////gAH///////gAAB//////wAAAA/////8AAAAA/////gAAAAB////4AAAAAB////AAAAAA 404 | D///4AAAAAAH///AAAAAAAP//4AAAAAAAf//AAAAAAAA//4AAAAAAAB//AAAAAAAAD/8AAAAAAAAP/gA 405 | AAAAAAAf8AAAAAAAAA/wAAAAAAAAD+AAAAAAAAAH4AAAAAAAAAfgAAAAAAAAB8AAAAAAAAADwAAAAAAA 406 | AAPAAAAAAAAAA8AAAAAAAAADgAAAAAAAAAGAAAAAAAAAAYAAAAAAAAABgAAAAAAAAAGAAAAAAAAAAYAA 407 | AAAAAAABgAAAAAAAAAGAAAAAAAAAAYAAAAAAAAABgAAAAAAAAAGAAAAAAAAAAYAAAAAAAAABgAAAAAAA 408 | AAGAAAAAAAAAAcAAAAAAAAADwAAAAAAAAAPAAAAAAAAAA8AAAAAAAAAD4AAAAAAAAAfgAAAAAAAAB+AA 409 | AAAAAAAH8AAAAAAAAA/wAAAAAAAAD/gAAAAAAAAf/AAAAAAAAD/8AAAAAAAAP/4AAAAAAAB//wAAAAAA 410 | AP//gAAAAAAB///AAAAAAAP//+AAAAAAB///8AAAAAAP///4AAAAAB////wAAAAAP////wAAAAD///// 411 | wAAAA//////wAAAP//////4AAH////////////////////////8= 412 | 413 | 414 | 415 | 300, 17 416 | 417 | 418 | 421, 17 419 | 420 | 421 | 422 | AAABAAEAQEAAAAEAIAAoQgAAFgAAACgAAABAAAAAgAAAAAEAIAAAAAAAAEAAABMLAAATCwAAAAAAAAAA 423 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 424 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 425 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 426 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 427 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 428 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 429 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 430 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 431 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 432 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 433 | AAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAQAAAAGAAAACAAAAAkAAAAJAAAACQAAAAkAAAAIAAAABgAA 434 | AAQAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 435 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 436 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 437 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAUAAAAJAAAADwAAABgcFxEjSTQjMGhHLjx6UjRGglc3S4JX 438 | N0t6UjRGaEcuPEk0IzAcFxEjAAAAGAAAAA8AAAAJAAAABQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 439 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 440 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 441 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgGBAAAAAAEAAAACQAAABMyJRoog1c3SrFzR3TKgU6d2IlSvt+N 442 | U9Tjj1Ti5ZBV6uaQVe7mkFXu5ZBV6uOPVOLfjVPU2IlSvsqBTp2xc0d0g1c3SjIlGigAAAATAAAACQAA 443 | AAQIBgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 444 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 445 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQsHAAAAAAQAAAAMDw4MHoJXOEjAe0uI24pSxeaQ 446 | Vezqklb97JNW/+yTVv/sklX/65JV/+uRVP/rkVP/65FT/+uRVP/rklX/7JJV/+yTVv/sk1b/6pJW/eaQ 447 | VezbilLFwHtLiIJXN0gPDgweAAAADAAAAAQRCwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 448 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 449 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAoZFRAfmWU/WNGF 450 | UKvlkFXp65JW/+yTVv/rklT/649Q/+qLSv/phkP/6YM9/+iAOf/ofjf/6H41/+h+Nf/ofjf/6IA5/+mD 451 | Pf/phkP/6otK/+uPUP/rklT/7JNW/+uSVv/lkFXp0YVQq5llP1gZFRAfAAAACgAAAAIAAAAAAAAAAAAA 452 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 453 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYDwkAAAAABQAA 454 | ABWKXDtK0oZQq+eRVfDsk1b/65JV/+qOT//ph0T/6IA5/+h7Mf/neCz/53cr/+d3Kv/ndyr/53cq/+d3 455 | Kv/ndyr/53cq/+d3Kv/ndyr/53cr/+d4LP/oezH/6IA5/+mHRP/qjk//65JV/+yTVv/nkVXw0oZQq4pc 456 | O0oAAAAVAAAABRgPCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 457 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 458 | AAADAAABAAAACUYyIijAfEyF5Y9V5euTVv/rklX/6o1M/+mDPf/oejD/53cr/+d3Kv/ndyv/53cr/+d3 459 | K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3Kv/ndyv/6How/+mD 460 | Pf/qjUz/65JV/+uTVv/lj1XlwHxMhUYyIigAAAAJAwAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 461 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 462 | AAAAAAAAAAAAAAAAAAAAAAACAAAADYNYOELXiVK46pJV/OuSVf/qjk//6YM9/+d5L//ndyr/53cr/+d3 463 | K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3 464 | K//ndyv/53cr/+d3K//ndyr/53kv/+mDPf/qjk//65JV/+qSVfzXiVK4g1g4QgAAAA0AAAACAAAAAAAA 465 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 466 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAD6JrQ1nhjlTX65NW/+uRVP/piEX/6Hsx/+d3 467 | K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3 468 | K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/6Hsx/+mIRf/rkVT/65NW/+GO 469 | VNeia0NZAAAADwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 470 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAEK9zR2XlkFXl7JNW/+uP 471 | Uf/pgjz/53gs/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3 472 | K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3 473 | K//neCz/6YI8/+uPUf/sk1b/5ZBV5a9zR2UAAAAQAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 474 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAADbF0 475 | SGTmkFXq65NW/+qOTv/ofjb/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3 476 | K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3 477 | K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ofjb/6o5O/+uTVv/mkFXqsXRIZAAAAA0AAAABAAAAAAAA 478 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 479 | AAAKAAAAAAAACahvRVblkFXl65NW/+qNTf/ofDP/53cq/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3 480 | K//ndyv/53cr/+d3K//ndyv/53cr/+d2Kv/ndin/53Uo/+d1KP/ndSj/53Uo/+d2Kf/ndir/53cr/+d3 481 | K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cq/+h8M//qjU3/65NW/+WQ 482 | VeWob0VWAAAACQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 483 | AAAAAAAAAAAAAAAAAAAAAAAAAAAABI5gPTzijlTW7JNW/+qOTv/ofDP/53cq/+d3K//ndyv/53cr/+d3 484 | K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndin/53Uo/+d4LP/pgDr/64xM/+2XXf/unWb/7p1m/+2X 485 | Xf/rjU3/6YE7/+d4Lf/ndSj/53Yp/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3 486 | K//ndyr/6Hwz/+qOTv/sk1b/4o5U1o5gPTwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 487 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVg/KyDailO265JW/+uPUf/ofjb/53cq/+d3 488 | K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d2Kf/ndir/6oZD//CoeP/2zK//+uXX//3z 489 | 7P/++fb//vz6//78+v/++fb//fPt//vm2P/2zrL/8Kt8/+qIRv/ndyv/53Yp/+d3K//ndyv/53cr/+d3 490 | K//ndyv/53cr/+d3K//ndyv/53cr/+d3Kv/ofjb/649R/+uSVv/ailO2WD8rIAAAAAEAAAAAAAAAAAAA 491 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvJgU+A6pJV/OuR 492 | VP/pgjz/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cq/+d2Kf/qikj/872Y//vq 493 | 3////v7//vn1//328f/////////////////////////////////////////////+/v/87OL/9MCd/+uM 494 | TP/ndin/53Yq/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+mCPP/rkVT/6pJV/MmB 495 | T4AAAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 496 | AAKga0RA5pBV5OuSVf/piEX/53gs/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53Yp/+h8 497 | Mv/xrX//++vf//////////////////328f/2zK///vr4//////////////////////////////////// 498 | ///////////////////87eP/8bGG/+h9Nf/ndin/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3 499 | K//neCz/6YhF/+uSVf/mkFXkoGtEQAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 500 | AAAAAAAAAAAAAAAAAAAsJR0R2IpTpuuSVv/qjk//6Hsx/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3 501 | K//ndyv/53Yp/+mEP//2yq3///z7////////////////////////////876a//bOsv////////////// 502 | ///////////////////////////////////////////////9/P/3z7T/6odE/+d2Kf/ndyv/53cr/+d3 503 | K//ndyv/53cr/+d3K//ndyv/53cr/+h7Mf/qjk//65JW/9iKU6YsJR0RAAAAAAAAAAAAAAAAAAAAAAAA 504 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsnZKTOiRVe/rklX/6YM9/+d3K//ndyv/53cr/+d3 505 | K//ndyv/53cr/+d3K//ndyv/53Yp/+qIRf/42MP///////////////////////////////////////nc 506 | yP/sk1f/++vg//////////////////////////////////////////////////////////////////nd 507 | yv/ri0v/53Yp/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/6YM9/+uSVf/okVXvsnZKTAAA 508 | AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/zZYAISAbDdmLU6Xrk1b/6o1M/+d5 509 | L//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53Yp/+mEP//42ML///////////////////////// 510 | ///////////////////99vD/7JFU//Cpef/++/n///////////////////////////////////////// 511 | ////////////////////////+d3K/+qHRP/ndin/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d5 512 | L//qjUz/65NW/9mLU6UhIBsN/82WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AKlx 513 | SDjnkVXn65JV/+mDPf/ndyr/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cq/+h7Mv/1yav///////// 514 | //////////////////////////////////////////////K1i//neS7/9s2x//////////////////// 515 | ///////////////////////////////////////////////////30LX/6H01/+d2Kv/ndyv/53cr/+d3 516 | K//ndyv/53cr/+d3K//ndyr/6YM9/+uSVf/nkVXnqXFIOP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 517 | AAAAAAAAAggKAAAAAAPRh1J965JW/+qOT//oejD/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d2 518 | Kf/wq33//vz6///////////////////////////////////////////////////////42sX/6How/+uL 519 | Sv/76t7///////////////////////////////////////////////////////////////////39//Gy 520 | h//ndir/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+h6MP/qjk//65JW/9GHUn0AAAADAggKAAAA 521 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAOqqdgBpTTYT4Y5Vv+uTVv/ph0T/53cr/+d3K//ndyv/53cr/+d3 522 | K//ndyv/53cr/+d2Kf/qiEb/++nd//////////////////////////////////////////////////// 523 | /////////fTu/+uQUv/mdCb/8Kh4//77+P////////////////////////////////////////////// 524 | ///////////////////87uT/641N/+d2Kf/ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/6YdE/+uT 525 | Vv/hjlW/aU02E+qqdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//6QAtHhMNuiRVerrklT/6IA5/+d3 526 | Kv/ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndir/87qU//////////////////////////////////// 527 | ///////////////////////////////////xsYb/53Un/+h6MP/2y63///////////////////////// 528 | //////////////////////////////////////////////TBn//ndyv/53cr/+d3K//ndyv/53cr/+d3 529 | K//ndyv/53cq/+iAOf/rklT/6JFV6rR4TDb//6QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AM+G 530 | U2Tqklb9649Q/+h7Mf/ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndir/6YVA//vo3P////////////// 531 | ////////////////////////////////////////////////////////+Na//+h7Mf/ndSn/6opJ//vo 532 | 2//////////////////////////////////////////////////////////////////87eP/6olH/+d2 533 | Kf/ndyv/53cr/+d3K//ndyv/53cr/+d3K//oezH/649Q/+qSVv3PhlNk////AAAAAAAAAAAAAAAAAAAA 534 | AAAAAAAAGBoYAAAAAAPcjFWR65NW/+qLSv/neCz/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53Uo/++l 535 | c////fz///////////////////////////////////////////////////////////////////////3y 536 | 6//rjU7/53Yp/+d1KP/vpnT//vr3//////////////////////////////////////////////////// 537 | ///////////+//Csfv/ndSj/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53gs/+qLSv/rk1b/3IxVkQAA 538 | AAMYGhgAAAAAAAAAAAAAAAAAAAAAAIVoTQBcSjgL4o9WteuTVv/phkP/53cr/+d3K//ndyv/53cr/+d3 539 | K//ndyv/53cr/+d3K//1yKn///////////////////////////////////////////////////////// 540 | ////////////////////////8a6A/+d1KP/ndyr/53ov//XIqv////////////////////////////// 541 | ///////////////////////////////////3z7X/53gt/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3 542 | K//phkP/65NW/+KPVrVcSjgLhWhNAAAAAAAAAAAAAAAAAAAAAADOkmMAnG5KFuWRVs7rklX/6YM9/+d3 543 | Kv/ndyv/53cr/+d3K//ndyv/53cr/+d3Kv/ofzf/+uHR//////////////////////////////////// 544 | /////////fXw//fSuf/528b/++fZ//zw6P/+9/P////+//fTu//oejD/53cr/+d2Kf/qiEb/++bZ//// 545 | ////////////////////////////////////////////////////////++fa/+mCPP/ndir/53cr/+d3 546 | K//ndyv/53cr/+d3K//ndyr/6YM9/+uSVf/lkVbOnG5KFs6SYwAAAAAAAAAAAAAAAAAAAAAA7KBoALZ8 547 | UCLnkVbe65JV/+iAOf/ndyr/53cr/+d3K//ndyv/53cr/+d3K//ndin/6olI//zw6P////////////// 548 | //////////////////////////////307v/skVT/53ov/+mBO//qiUj/7JRY/+6hbP/vpHH/6Hwz/+d3 549 | K//ndyv/53Uo/++kcf/++fb///////////////////////////////////////////////////////30 550 | 7v/rjlD/53Yp/+d3K//ndyv/53cr/+d3K//ndyv/53cq/+iAOf/rklX/55FW3rZ8UCLsoGgAAAAAAAAA 551 | AAAAAAAAAAAAAPekaADDg1Qr6JJW5+uRVP/ofjf/53cq/+d3K//ndyv/53cr/+d3K//ndyv/53Uo/+yT 552 | V//+9/P/////////////////////////////////////////////////8bCE/+d1J//ndir/53Yp/+d1 553 | KP/ndSf/53Uo/+d3K//ndyv/53cr/+d3K//neS7/9cam//////////////////////////////////// 554 | ///////////////////++vf/7Zlg/+d1KP/ndyv/53cr/+d3K//ndyv/53cr/+d3Kv/ofjf/65FU/+iS 555 | VufDg1Qr96RoAAAAAAAAAAAAAAAAAAAAAAD4o2YAyYZVMOmSVuvrkVP/6H41/+d3Kv/ndyv/53cr/+d3 556 | K//ndyv/53cr/+d1KP/tmF///vr3//////////////////////////////////////////////////fS 557 | uv/neS//53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53Yp/+qHRP/65db///////// 558 | //////////////////////////////////////////z7/+6faf/ndSj/53cr/+d3K//ndyv/53cr/+d3 559 | K//ndyr/6H41/+uRU//pklbryYZVMPijZgAAAAAAAAAAAAAAAAAAAAAA9KFkAMuIVjDpklbr65FT/+h+ 560 | Nf/ndyr/53cr/+d3K//ndyv/53cr/+d3K//ndSj/7Zhf//769/////////////////////////////// 561 | ///////////////////87uT/6ohG/+d2Kf/ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3 562 | K//ndSj/7qFt//749P////////////////////////////////////////////78+v/unmj/53Uo/+d3 563 | K//ndyv/53cr/+d3K//ndyv/53cq/+h+Nf/rkVP/6ZJW68uIVjD0oWQAAAAAAAAAAAAAAAAAAAAAAOuc 564 | YwDLiFcq6ZJW5+uRVP/ofjf/53cq/+d3K//ndyv/53cr/+d3K//ndyv/53Uo/+ySVv/+9/L///////// 565 | //////////////////////////////////////////38/++kcf/ndSj/53cr/+d3K//ndyv/53cr/+d3 566 | K//ndyv/53cr/+d3K//ndyv/53cr/+d5Lv/0xKL///////////////////////////////////////// 567 | ///++fb/7Zdd/+d1KP/ndyv/53cr/+d3K//ndyv/53cr/+d3Kv/ofjf/65FU/+mSVufLiFcq65xjAAAA 568 | AAAAAAAAAAAAAAAAAADelmEAx4hYH+iSVt3rklX/6IA5/+d3Kv/ndyv/53cr/+d3K//ndyv/53cr/+d2 569 | Kf/qiEb//O/m///////////////////////////////////////////////////////1x6f/53cr/+d3 570 | K//ndyv/53cr/+d3K//ndyv/53cr/+d2Kf/ndSj/53Un/+d1J//mdCb/6YQ///rh0f////////////// 571 | /////////////////////////fLr/+uMTP/ndin/53cr/+d3K//ndyv/53cr/+d3K//ndyr/6IA5/+uS 572 | Vf/oklbdx4hYH96WYQAAAAAAAAAAAAAAAAAAAAAAyo9hAL2FWRPoklfN65JV/+mDPf/ndyr/53cr/+d3 573 | K//ndyv/53cr/+d3K//ndyr/6H41//ngzv////////////////////////////////////////////// 574 | ////////++bY/+mCPP/ndir/53cr/+d3K//ndyv/53Yq/+mBOv/ytYv/8raN//Gugf/vp3b/7qBr/+2Y 575 | X//zu5X///z7//////////////////////////////////rk1P/pgDn/53Yq/+d3K//ndyv/53cr/+d3 576 | K//ndyv/53cq/+mDPf/rklX/6JJXzb2FWRPKj2EAAAAAAAAAAAAAAAAAAAAAAKJ/XgCWeVwH5pJXsuuS 577 | Vv/phkP/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d2Kv/1xaT///////////////////////// 578 | //////////////////////////////759v/tmWD/53Uo/+d3K//ndyv/53cr/+d3K//oezL/+NfA//// 579 | //////////7+///9+//++vj//vj0///+/f/////////////////////////////////2yqz/53cr/+d3 580 | K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//phkP/65JW/+aSV7KWeVwHon9eAAAAAAAAAAAAAAAAAAAA 581 | AABART8A/+hTAOSSWIvrklb/6otK/+d4LP/ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndSj/7qFt//78 582 | +v//////////////////////////////////////////////////////87qU/+d1Kf/ndyv/53cr/+d3 583 | K//ndyv/53Uo/++ndv///fz///////////////////////////////////////////////////////// 584 | /////fz/76d1/+d1KP/ndyv/53cr/+d3K//ndyv/53cr/+d3K//neCz/6otK/+uSVv/kkliL/+hTAEBF 585 | PwAAAAAAAAAAAAAAAAAAAAAAAAAAAP+fWwDhklpc65JW/euPUP/oezH/53cr/+d3K//ndyv/53cr/+d3 586 | K//ndyv/53Yq/+mCPf/65db///////////////////////////////////////////////////////nc 587 | yP/ofDT/53cq/+d3K//ndyv/53cr/+d2Kv/phD//++fZ//////////////////////////////////// 588 | ////////////////////////++nd/+qGQv/ndir/53cr/+d3K//ndyv/53cr/+d3K//ndyv/6Hsx/+uP 589 | UP/rklb94ZJaXP+fWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADnmF8A25JdLOqSVujrklT/6IA5/+d3 590 | Kv/ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndin/8rWL//////////////////////////////////// 591 | ///////////////////99O7/65BR/+d1Kf/ndyv/53cr/+d3K//ndyv/53Yp//O8l/////////////// 592 | //////////////////////////////////////////////O8lv/ndir/53cr/+d3K//ndyv/53cr/+d3 593 | K//ndyv/53cq/+iAOf/rklT/6pJW6NuSXSznmF8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAy5RnAMWR 594 | Zgrok1i565JW/+mHRP/ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53Yq/+mFQf/65db///////// 595 | //////////////////////////////////////////////Gugf/ndSj/53cr/+d3K//ndyv/53cr/+d1 596 | Kf/skVT//fTu//////////////////////////////////////////////////vr3//qikj/53Yp/+d3 597 | K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ph0T/65JW/+iTWLnFkWYKy5RnAAAAAAAAAAAAAAAAAAAA 598 | AAAAAAAAAAAAABRIVwD/mU0A5ZRacuuSVv/qjk//6How/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3 599 | K//ndSj/76Z0//769//////////////////////////////////////////////////30bf/53ku/+d3 600 | K//ndyv/53cr/+d3K//ndyv/53ov//fSuf/////////////////////////////////////////////9 601 | +//xroH/53Yp/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//oejD/6o5P/+uSVv/llFpy/5lNABRI 602 | VwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A55heAN+VXyrqk1bk65JV/+mDPf/ndyr/53cr/+d3 603 | K//ndyv/53cr/+d3K//ndyv/53cr/+d6L//0w6L///////////////////////////////////////// 604 | /////////O3j/+qHRf/ndin/53cr/+d3K//ndyv/53cr/+d1KP/vpHH//vz7//////////////////// 605 | ///////////////////2zbH/6Hwz/+d3Kv/ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyr/6YM9/+uS 606 | Vf/qk1bk35VfKueYXgD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQICAMaZcACmoIgD6JRZmuuS 607 | Vv/qjUz/53kv/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndir/6YE7//fTuv////////////// 608 | ///////////////////////////////8+//vo2//53Uo/+d3K//ndyv/53cr/+d3K//ndir/6YI8//rk 609 | 1v/////////////////////////////////53Mj/6oZC/+d2Kf/ndyv/53cr/+d3K//ndyv/53cr/+d3 610 | K//ndyv/53kv/+qNTP/rklb/6JRZmqagiAPGmXAAAQICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 611 | AAD/tHMA7JZaAOSWXjvqk1bt65JV/+mDPf/ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d2 612 | Kf/phUH/99S8////////////////////////////////////////////9cWl/+d3Kv/ndyv/53cr/+d3 613 | K//ndyv/53cr/+d2Kf/zuZL////////////////////////////53Mn/6otJ/+d2Kf/ndyv/53cr/+d3 614 | K//ndyv/53cr/+d3K//ndyv/53cr/+mDPf/rklX/6pNW7eSWXjvslloA/7RzAAAAAAAAAAAAAAAAAAAA 615 | AAAAAAAAAAAAAAAAAAAAAAAAMkRDANSdbwDEpYEE6JRZmuuSVf/qjk//6Hsx/+d3K//ndyv/53cr/+d3 616 | K//ndyv/53cr/+d3K//ndyv/53Yp/+mCPP/1xqf//vv5//////////////////////////////////rk 617 | 1v/pgTr/53Yq/+d3K//ndyv/53cr/+d3K//ndin/649R//3y6//////////////9/P/2zrP/6oZD/+d2 618 | Kf/ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+h7Mf/qjk//65JV/+iUWZrEpYEE1J1vADJE 619 | QwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADvoGYA6ZZcAOSYYS3qk1fg65JV/+mI 620 | Rf/neCz/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndin/6How//Cqev/76dz///////// 621 | ///////////////////++fX/7Zhe/+d1KP/ndyv/53cr/+d3K//ndyv/53cr/+d5Lv/3z7X///////zs 622 | 4f/xsIT/6H00/+d2Kf/ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d4LP/piEX/65JV/+qT 623 | V+DkmGEt6ZZcAO+gZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQ19eAMOr 624 | iQD/dx0A6JZbb+uSVvzrkVT/6YI8/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3 625 | Kv/ndin/6ohG//O7lP/76d3///39//////////////////O5kv/ndSj/53cr/+d3K//ndyv/53cr/+d3 626 | K//ndSj/7Ztj//O8l//ri0r/53Yp/+d2Kv/ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3 627 | K//pgjz/65FU/+uSVvzolltv/3cdAMOriQBDX14AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 628 | AAAAAAAAAAAAAAAAAADXo3YA4pxmAN6fbQ3plFmq65JV/+uPUf/ofjb/53cq/+d3K//ndyv/53cr/+d3 629 | K//ndyv/53cr/+d3K//ndyv/53cr/+d2Kf/ndir/6oZC/++ndv/2yq3/+uPU//3z7f/31Lz/6Hsy/+d3 630 | K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndir/53Yp/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3 631 | K//ndyv/53cr/+d3Kv/ofjb/649R/+uSVf/plFmq3p9tDeKcZgDXo3YAAAAAAAAAAAAAAAAAAAAAAAAA 632 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRQUAO6UVgDpllsA5ZpjJuqTV87rklX/6o5O/+h8 633 | M//ndyr/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d2Kv/ndSj/53cr/+iA 634 | OP/ri0r/649Q/+d6L//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3 635 | K//ndyv/53cr/+d3K//ndyv/53cr/+d3Kv/ofDP/6o5O/+uSVf/qk1fO5ZpjJumWWwDulFYADRQUAAAA 636 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACXt60A/wAAAO+O 637 | TgDnmF8+6pNX4OuSVf/qjU3/6Hwz/+d3Kv/ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3 638 | K//ndyv/53cr/+d3K//ndir/53Yp/+d2Kf/ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3 639 | K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3Kv/ofDP/6o1N/+uSVf/qk1fg55hfPu+O 640 | TgD/AAAAl7etAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 641 | AAAAAAAAAAAAAM6yjgDTsooA+IA4AOiYXk3qk1fl65JV/+qOTv/ofjb/53cr/+d3K//ndyv/53cr/+d3 642 | K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3 643 | K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ofjb/6o5O/+uS 644 | Vf/qk1fl6JheTfiAOADTsooAzrKOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 645 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2qp9AN2pegD/cSAA6JheTeqTV+DrklX/649R/+mC 646 | PP/neCz/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3 647 | K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d4 648 | LP/pgjz/649R/+uSVf/qk1fg6JheTf5xIADdqXsA2qp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 649 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADeqHkA3qp7APZ/ 650 | NwDnmWA+6pRXzuuSVf/rkVT/6YhF/+h7Mf/ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3 651 | K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3 652 | K//ndyv/53cr/+h7Mf/piEX/65FU/+uSVf/qlFfO55lgPvZ/NwDeqnsA3qh5AAAAAAAAAAAAAAAAAAAA 653 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 654 | AAAAAAAAAAAAAN2rfgDYtY0A7o1OAOabYyXqlFmp65JW/OuSVf/qjk//6YM9/+d5L//ndyr/53cr/+d3 655 | K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3 656 | K//ndyv/53cr/+d3K//ndyr/53kv/+mDPf/qjk//65JV/+uSVvzqlFmp5ptjJe6NTgDXtY0A3at+AAAA 657 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 658 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1rmTAP8AAADpllsA46JvDOmWXG7qk1ff65JV/+uS 659 | Vf/qjUz/6YM9/+h6MP/ndyv/53cq/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3K//ndyv/53cr/+d3 660 | K//ndyv/53cr/+d3K//ndyv/53cq/+d3K//oejD/6YM9/+qNTP/rklX/65JV/+qTV9/pllxu46JvDOmW 661 | WwD/AAAA1rmTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 662 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC+59oA65JVAOWe 663 | ZwD9bRsA55piLOqVWpnrk1bt65JW/+uSVf/qjk//6YdE/+iAOf/oezH/53gs/+d3K//ndyr/53cq/+d3 664 | Kv/ndyr/53cq/+d3Kv/ndyr/53cq/+d3K//neCz/6Hsx/+iAOf/ph0T/6o5P/+uSVf/rklb/65NW7eqV 665 | WpnnmmIs/W0bAOWeZwDrklUAvufaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 666 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 667 | AAAAAAAAAAAAAKn//wDgqnsA17yXAOmWXADat48D6JlgOuqVWpnrk1fj65JW/+uSVv/rkVT/649Q/+qL 668 | Sv/phkP/6YM9/+iAOf/ofjf/6H41/+h+Nf/ofjf/6IA5/+mDPf/phkP/6otK/+uPUP/rkVT/65JW/+uS 669 | Vv/rk1fj6pVameiZYDrat48D6ZZcANe8lwDgqnsAqf//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 670 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 671 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALD59gDnm2MA4ad2AOqVWQDRyqwC55tiKemW 672 | XHDqlFi465NX5+uTVvzrklb/65JW/+uSVf/rklX/65FU/+uRU//rkVP/65FU/+uSVf/rklX/65JW/+uS 673 | Vv/rk1b865NX5+qUWLjpllxw55tiKdHKrALqlVkA4ad2AOebYwCw+fYAAAAAAAAAAAAAAAAAAAAAAAAA 674 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 675 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALf4 676 | 9ADom2MA36x+AOiYXwDwh0UA4qZ1CeeaYirpl11Z6ZVaiOqUWa/qlFjK6pNX2+uTV+Xrk1bp65NW6euT 677 | V+Xqk1fb6pRYyuqUWa/plVqI6ZddWeeaYiripnUJ8IdFAOiYXwDfrH4A6JtjALf49AAAAAAAAAAAAAAA 678 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 679 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 680 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAALP//wDSx6gAcP//AOKlcgDomF8A7JFTAPh3KgDcsocF5KFsD+ad 681 | Zhvnm2Ml55piKueaYirnm2Ml5p1mG+ShbA/csocF+HcqAOyRUwDomF8A4qVyAHD//wDSx6gAs///AAAA 682 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 683 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 684 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8Arf//AP+H 685 | QwDJ28YA3q6BAOShbQDmnGUA55phAOiZYADomWAA55phAOacZQDkoW0A3q6BAMjbxgD/h0MArf//AAD/ 686 | /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 687 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 688 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 689 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 690 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 691 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 692 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 693 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 694 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 695 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 696 | AAAAAAAA////gAH///////gAAB//////wAAAA/////8AAAAA/////gAAAAB////4AAAAAB////AAAAAA 697 | D///4AAAAAAH///AAAAAAAP//4AAAAAAAf//AAAAAAAA//4AAAAAAAB//AAAAAAAAD/8AAAAAAAAP/gA 698 | AAAAAAAf8AAAAAAAAA/wAAAAAAAAD+AAAAAAAAAH4AAAAAAAAAfgAAAAAAAAB8AAAAAAAAADwAAAAAAA 699 | AAPAAAAAAAAAA8AAAAAAAAADgAAAAAAAAAGAAAAAAAAAAYAAAAAAAAABgAAAAAAAAAGAAAAAAAAAAYAA 700 | AAAAAAABgAAAAAAAAAGAAAAAAAAAAYAAAAAAAAABgAAAAAAAAAGAAAAAAAAAAYAAAAAAAAABgAAAAAAA 701 | AAGAAAAAAAAAAcAAAAAAAAADwAAAAAAAAAPAAAAAAAAAA8AAAAAAAAAD4AAAAAAAAAfgAAAAAAAAB+AA 702 | AAAAAAAH8AAAAAAAAA/wAAAAAAAAD/gAAAAAAAAf/AAAAAAAAD/8AAAAAAAAP/4AAAAAAAB//wAAAAAA 703 | AP//gAAAAAAB///AAAAAAAP//+AAAAAAB///8AAAAAAP///4AAAAAB////wAAAAAP////wAAAAD///// 704 | wAAAA//////wAAAP//////4AAH////////////////////////8= 705 | 706 | 707 | --------------------------------------------------------------------------------