├── .gitattributes
├── .gitignore
├── .vs
└── config
│ └── applicationhost.config
├── KcptunGUI.Resource
├── Byte.Designer.cs
├── Byte.resx
├── Class.cs
├── KcptunGUI.Resource.csproj
├── Properties
│ └── AssemblyInfo.cs
├── Resources
│ └── normal.cur
├── 图标.Designer.cs
├── 图标.resx
├── 图片.Designer.cs
├── 图片.resx
├── 字符串.Designer.cs
└── 字符串.resx
├── KcptunGUI.sln
├── KcptunGUI.v12.suo
├── KcptunGUI
├── App.config
├── App.xaml
├── App.xaml.cs
├── Class
│ ├── ConfigJson.cs
│ ├── LanguageJson.cs
│ └── LocalFunction.cs
├── KcptunGUI.csproj
├── MainWindow.xaml
├── MainWindow.xaml.cs
├── Properties
│ ├── AssemblyInfo.cs
│ ├── Resources.Designer.cs
│ ├── Resources.resx
│ ├── Settings.Designer.cs
│ └── Settings.settings
├── Resx
│ └── readme.html
├── SubFrame
│ ├── About.xaml
│ ├── About.xaml.cs
│ ├── ClientMode.xaml
│ ├── ClientMode.xaml.cs
│ ├── Configure.xaml
│ ├── Configure.xaml.cs
│ ├── ServerMode.xaml
│ ├── ServerMode.xaml.cs
│ ├── Status.xaml
│ └── Status.xaml.cs
├── app.ico
├── app.manifest
├── config.json
└── packages.config
└── readme.md
/.gitattributes:
--------------------------------------------------------------------------------
1 | ###############################################################################
2 | # Set default behavior to automatically normalize line endings.
3 | ###############################################################################
4 | * text=auto
5 |
6 | ###############################################################################
7 | # Set default behavior for command prompt diff.
8 | #
9 | # This is need for earlier builds of msysgit that does not have it on by
10 | # default for csharp files.
11 | # Note: This is only used by command line
12 | ###############################################################################
13 | #*.cs diff=csharp
14 |
15 | ###############################################################################
16 | # Set the merge driver for project and solution files
17 | #
18 | # Merging from the command prompt will add diff markers to the files if there
19 | # are conflicts (Merging from VS is not affected by the settings below, in VS
20 | # the diff markers are never inserted). Diff markers may cause the following
21 | # file extensions to fail to load in VS. An alternative would be to treat
22 | # these files as binary and thus will always conflict and require user
23 | # intervention with every merge. To do so, just uncomment the entries below
24 | ###############################################################################
25 | #*.sln merge=binary
26 | #*.csproj merge=binary
27 | #*.vbproj merge=binary
28 | #*.vcxproj merge=binary
29 | #*.vcproj merge=binary
30 | #*.dbproj merge=binary
31 | #*.fsproj merge=binary
32 | #*.lsproj merge=binary
33 | #*.wixproj merge=binary
34 | #*.modelproj merge=binary
35 | #*.sqlproj merge=binary
36 | #*.wwaproj merge=binary
37 |
38 | ###############################################################################
39 | # behavior for image files
40 | #
41 | # image files are treated as binary by default.
42 | ###############################################################################
43 | #*.jpg binary
44 | #*.png binary
45 | #*.gif binary
46 |
47 | ###############################################################################
48 | # diff behavior for common document formats
49 | #
50 | # Convert binary document formats to text before diffing them. This feature
51 | # is only available from the command line. Turn it on by uncommenting the
52 | # entries below.
53 | ###############################################################################
54 | #*.doc diff=astextplain
55 | #*.DOC diff=astextplain
56 | #*.docx diff=astextplain
57 | #*.DOCX diff=astextplain
58 | #*.dot diff=astextplain
59 | #*.DOT diff=astextplain
60 | #*.pdf diff=astextplain
61 | #*.PDF diff=astextplain
62 | #*.rtf diff=astextplain
63 | #*.RTF diff=astextplain
64 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | ## Ignore Visual Studio temporary files, build results, and
2 | ## files generated by popular Visual Studio add-ons.
3 |
4 | # User-specific files
5 | *.suo
6 | *.user
7 | *.sln.docstates
8 |
9 | # Build results
10 | [Dd]ebug/
11 | [Dd]ebugPublic/
12 | [Rr]elease/
13 | x64/
14 | build/
15 | bld/
16 | [Bb]in/
17 | [Oo]bj/
18 |
19 | # Roslyn cache directories
20 | *.ide/
21 |
22 | # MSTest test Results
23 | [Tt]est[Rr]esult*/
24 | [Bb]uild[Ll]og.*
25 |
26 | #NUNIT
27 | *.VisualState.xml
28 | TestResult.xml
29 |
30 | # Build Results of an ATL Project
31 | [Dd]ebugPS/
32 | [Rr]eleasePS/
33 | dlldata.c
34 |
35 | *_i.c
36 | *_p.c
37 | *_i.h
38 | *.ilk
39 | *.meta
40 | *.obj
41 | *.pch
42 | *.pdb
43 | *.pgc
44 | *.pgd
45 | *.rsp
46 | *.sbr
47 | *.tlb
48 | *.tli
49 | *.tlh
50 | *.tmp
51 | *.tmp_proj
52 | *.log
53 | *.vspscc
54 | *.vssscc
55 | .builds
56 | *.pidb
57 | *.svclog
58 | *.scc
59 |
60 | # Chutzpah Test files
61 | _Chutzpah*
62 |
63 | # Visual C++ cache files
64 | ipch/
65 | *.aps
66 | *.ncb
67 | *.opensdf
68 | *.sdf
69 | *.cachefile
70 |
71 | # Visual Studio profiler
72 | *.psess
73 | *.vsp
74 | *.vspx
75 |
76 | # TFS 2012 Local Workspace
77 | $tf/
78 |
79 | # Guidance Automation Toolkit
80 | *.gpState
81 |
82 | # ReSharper is a .NET coding add-in
83 | _ReSharper*/
84 | *.[Rr]e[Ss]harper
85 | *.DotSettings.user
86 |
87 | # JustCode is a .NET coding addin-in
88 | .JustCode
89 |
90 | # TeamCity is a build add-in
91 | _TeamCity*
92 |
93 | # DotCover is a Code Coverage Tool
94 | *.dotCover
95 |
96 | # NCrunch
97 | _NCrunch_*
98 | .*crunch*.local.xml
99 |
100 | # MightyMoose
101 | *.mm.*
102 | AutoTest.Net/
103 |
104 | # Web workbench (sass)
105 | .sass-cache/
106 |
107 | # Installshield output folder
108 | [Ee]xpress/
109 |
110 | # DocProject is a documentation generator add-in
111 | DocProject/buildhelp/
112 | DocProject/Help/*.HxT
113 | DocProject/Help/*.HxC
114 | DocProject/Help/*.hhc
115 | DocProject/Help/*.hhk
116 | DocProject/Help/*.hhp
117 | DocProject/Help/Html2
118 | DocProject/Help/html
119 |
120 | # Click-Once directory
121 | publish/
122 |
123 | # Publish Web Output
124 | *.[Pp]ublish.xml
125 | *.azurePubxml
126 | ## TODO: Comment the next line if you want to checkin your
127 | ## web deploy settings but do note that will include unencrypted
128 | ## passwords
129 | #*.pubxml
130 |
131 | # NuGet Packages Directory
132 | packages/*
133 | ## TODO: If the tool you use requires repositories.config
134 | ## uncomment the next line
135 | #!packages/repositories.config
136 |
137 | # Enable "build/" folder in the NuGet Packages folder since
138 | # NuGet packages use it for MSBuild targets.
139 | # This line needs to be after the ignore of the build folder
140 | # (and the packages folder if the line above has been uncommented)
141 | #!packages/build/
142 |
143 | # Windows Azure Build Output
144 | csx/
145 | *.build.csdef
146 |
147 | # Windows Store app package directory
148 | AppPackages/
149 |
150 | # Others
151 | sql/
152 | *.Cache
153 | ClientBin/
154 | [Ss]tyle[Cc]op.*
155 | ~$*
156 | *~
157 | *.dbmdl
158 | *.dbproj.schemaview
159 | *.pfx
160 | *.publishsettings
161 | node_modules/
162 |
163 | # RIA/Silverlight projects
164 | Generated_Code/
165 |
166 | # Backup & report files from converting an old project file
167 | # to a newer Visual Studio version. Backup files are not needed,
168 | # because we have git ;-)
169 | _UpgradeReport_Files/
170 | Backup*/
171 | UpgradeLog*.XML
172 | UpgradeLog*.htm
173 |
174 | # SQL Server files
175 | *.mdf
176 | *.ldf
177 |
178 | # Business Intelligence projects
179 | *.rdl.data
180 | *.bim.layout
181 | *.bim_*.settings
182 |
183 | # Microsoft Fakes
184 | FakesAssemblies/
185 |
186 | # LightSwitch generated files
187 | GeneratedArtifacts/
188 | _Pvt_Extensions/
189 | ModelManifest.xml
--------------------------------------------------------------------------------
/KcptunGUI.Resource/Byte.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // 此代码由工具生成。
4 | // 运行时版本:4.0.30319.42000
5 | //
6 | // 对此文件的更改可能会导致不正确的行为,并且如果
7 | // 重新生成代码,这些更改将会丢失。
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace KcptunGUI.Resource {
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", "4.0.0.0")]
23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
25 | public class Byte {
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 Byte() {
33 | }
34 |
35 | ///
36 | /// 返回此类使用的缓存的 ResourceManager 实例。
37 | ///
38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
39 | public 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("KcptunGUI.Resource.Byte", typeof(Byte).Assembly);
43 | resourceMan = temp;
44 | }
45 | return resourceMan;
46 | }
47 | }
48 |
49 | ///
50 | /// 使用此强类型资源类,为所有资源查找
51 | /// 重写当前线程的 CurrentUICulture 属性。
52 | ///
53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
54 | public static global::System.Globalization.CultureInfo Culture {
55 | get {
56 | return resourceCulture;
57 | }
58 | set {
59 | resourceCulture = value;
60 | }
61 | }
62 |
63 | ///
64 | /// 查找 System.Byte[] 类型的本地化资源。
65 | ///
66 | public static byte[] cur_normal {
67 | get {
68 | object obj = ResourceManager.GetObject("cur_normal", resourceCulture);
69 | return ((byte[])(obj));
70 | }
71 | }
72 | }
73 | }
74 |
--------------------------------------------------------------------------------
/KcptunGUI.Resource/Byte.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 | Resources\normal.cur;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
123 |
124 |
--------------------------------------------------------------------------------
/KcptunGUI.Resource/Class.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.IO;
4 | using System.Linq;
5 | using System.Text;
6 |
7 | namespace KcptunGUI.Resource {
8 | ///
9 | public class Class {
10 | /// 版本
11 | public const String Version = "2017-02-04";
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/KcptunGUI.Resource/KcptunGUI.Resource.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | AnyCPU
7 | {31173083-171C-4488-8CA2-C01D3651E15E}
8 | Library
9 | Properties
10 | KcptunGUI.Resource
11 | KcptunGUI.Resource
12 | v4.0
13 | 512
14 |
15 |
16 |
17 | true
18 | full
19 | false
20 | bin\Debug\
21 | DEBUG;TRACE
22 | prompt
23 | 4
24 | true
25 | bin\Debug\KcptunGUI.Resource.XML
26 |
27 |
28 | pdbonly
29 | true
30 | bin\Release\
31 | TRACE
32 | prompt
33 | 4
34 | AnyCPU
35 | false
36 | bin\Release\KcptunGUI.Resource.XML
37 | true
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 | True
49 | True
50 | Byte.resx
51 |
52 |
53 |
54 | True
55 | True
56 | 图标.resx
57 |
58 |
59 | True
60 | True
61 | 图片.resx
62 |
63 |
64 |
65 | True
66 | True
67 | 字符串.resx
68 |
69 |
70 |
71 |
72 | PublicResXFileCodeGenerator
73 | Byte.Designer.cs
74 |
75 |
76 | PublicResXFileCodeGenerator
77 | 图标.Designer.cs
78 |
79 |
80 | PublicResXFileCodeGenerator
81 | 图片.Designer.cs
82 |
83 |
84 | PublicResXFileCodeGenerator
85 | 字符串.Designer.cs
86 |
87 |
88 |
89 |
90 |
91 |
92 |
99 |
--------------------------------------------------------------------------------
/KcptunGUI.Resource/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // 有关程序集的一般信息由以下
6 | // 控制。更改这些特性值可修改
7 | // 与程序集关联的信息。
8 | [assembly: AssemblyTitle("KcptunGUI.Resource")]
9 | [assembly: AssemblyDescription("KcptunGUI资源集")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("SkyDust")]
12 | [assembly: AssemblyProduct("KcptunGUI.Resource")]
13 | [assembly: AssemblyCopyright("Copyright © 2017")]
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("31173083-171c-4488-8ca2-c01d3651e15e")]
24 |
25 | // 程序集的版本信息由下列四个值组成:
26 | //
27 | // 主版本
28 | // 次版本
29 | // 生成号
30 | // 修订号
31 | //
32 | //可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值,
33 | // 方法是按如下所示使用“*”: :
34 | // [assembly: AssemblyVersion("1.0.*")]
35 | [assembly: AssemblyVersion("0.0.0.0")]
36 | [assembly: AssemblyFileVersion("0.0.0.0")]
37 |
--------------------------------------------------------------------------------
/KcptunGUI.Resource/Resources/normal.cur:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ragnaroks/KcptunGUI/fb8821a7ed0e1bd53fbe3a2a5810328cf1c06ff3/KcptunGUI.Resource/Resources/normal.cur
--------------------------------------------------------------------------------
/KcptunGUI.Resource/图标.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // 此代码由工具生成。
4 | // 运行时版本:4.0.30319.42000
5 | //
6 | // 对此文件的更改可能会导致不正确的行为,并且如果
7 | // 重新生成代码,这些更改将会丢失。
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace KcptunGUI.Resource {
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", "4.0.0.0")]
23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
25 | public class 图标 {
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 图标() {
33 | }
34 |
35 | ///
36 | /// 返回此类使用的缓存的 ResourceManager 实例。
37 | ///
38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
39 | public 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("KcptunGUI.Resource.图标", typeof(图标).Assembly);
43 | resourceMan = temp;
44 | }
45 | return resourceMan;
46 | }
47 | }
48 |
49 | ///
50 | /// 使用此强类型资源类,为所有资源查找
51 | /// 重写当前线程的 CurrentUICulture 属性。
52 | ///
53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
54 | public static global::System.Globalization.CultureInfo Culture {
55 | get {
56 | return resourceCulture;
57 | }
58 | set {
59 | resourceCulture = value;
60 | }
61 | }
62 |
63 | ///
64 | /// 查找类似于 (Icon) 的 System.Drawing.Icon 类型的本地化资源。
65 | ///
66 | public static System.Drawing.Icon ico_64x64_appicon {
67 | get {
68 | object obj = ResourceManager.GetObject("ico_64x64_appicon", resourceCulture);
69 | return ((System.Drawing.Icon)(obj));
70 | }
71 | }
72 | }
73 | }
74 |
--------------------------------------------------------------------------------
/KcptunGUI.Resource/图标.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 |
123 | AAABAAEAQEAAAAEAIAAoQgAAFgAAACgAAABAAAAAgAAAAAEAIAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAA
124 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
125 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB7CQAAW0gAAGs2AABnPwAAYEoAAmRH
126 | AAJuTQACdC8ABHQtAARzMQAEb00AAmtNAAJvTQACZy4AAEs0AABQUAAAgAAAAAAAAAAAAAAAAAAAAAAA
127 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
128 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
129 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIAAAGk8AABwOAACcjoABmVJ
130 | AAhpQwAMaUkAEGhOARRpTgIYbVECGmxWAhxtWAMcbFYCHG5RAhptUQIYcFABFGxBABBfRQAKZUsABngy
131 | AARnPgAClEIAAICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
132 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
133 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAQAAAdTsAAmlN
134 | AAZsSAAMa0gAFG5RACJsTgIubE8DOm5RBEhvUgVSblQHWm9VCF5wVQhgcVYJYnBVCGBvVQdeb1QHWHBT
135 | Bk5wUgRCbVADNG5QAihuTwAabUoAEnRHAApoVgAEbCcAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
136 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
137 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGYz
138 | AABoOgACbEUACGxIABJqSgAibE8BNmxQA0xuUgRmb1MIfHBUCZFyVQqjc1cJr3RYCrd1WQu7dlkLvXZZ
139 | DL12WQy9dVkLu3NYC7VzVwyrcVYMm3BVColwVQh0bVMFWG5RBEJsTgEsak8AHGxFABBoOAAGdRUAAoAA
140 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
141 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
142 | AAAAAAAAAAAAAHpAAAJqRAAIa0sAFmtNACpsUAJGbVEFZm9TB4lxVQmndlkKw31eC9WCYgzhiWgP645s
143 | EPGRbxHzkm8R9ZJvEvWSbxL1km8S9ZFvEfOObRHxiWkP7YNkDeV+YAzbd1sNy3NXC7FwVQuXblIIdm9S
144 | BVhwUAM6bk8BIGpGABBvOwAGVVUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
145 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
146 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAl0fAARsSAAQZUsAKGlPAkptUQRyb1MIm3RYC8N7XAjfi2oO75Z0
147 | E/eZdRL9m3YR/Z14Ev+feRP/n3oS/595Ev+feRP/nnkT/555Ev+feRL/nnkT/5x4Ev+adhH9mXUS/Zd0
148 | FPmMahDxfV0L5XZaDs1xVQ2tcFQJh29UBl5sUQQ4bEsAGmZDAAqAKwAEAAAAAAAAAAAAAAAAAAAAAAAA
149 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
150 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZgAAAlhBAAprTAAaakwAQGtPAm5tUwefdFgJy4Rk
151 | DOmWcxL3m3cT/Z55E/+gehP/nngR/5x3EP+adQ//mnQO/5p0Df+Zcwz/mHIM/5hyDP+Ycwz/mHMN/5lz
152 | Df+adQ7/m3YQ/514Ef+feRP/nnkT/5t2E/2WcxP5hWUO73daDtdyVw+zb1QJhW5TBVRrTQAoaVAAEF4y
153 | AASqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
154 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASUkAAmJKAA5nTQAmak8CUGxQ
155 | BY9xVQnDgWAL65ZyEfufehT/oHoT/555Ef+bdg7/mnQN/5lzDP+adRH/nXke/5l0Ev+WcAj/lm8I/5Zv
156 | CP+Vbwj/lW4I/5VuCP+Vbwn/lXAK/5ZwCv+XcQv/l3IN/5p1Dv+deBH/n3oT/595FP+WcxL7g2QN73Va
157 | D9FwVg2nblMIam5TAzhqUgAYaUkACIBAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
158 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAyEAACUzgABmdK
159 | ABZpTQA4bE8CcG9TB61/XwvllHAP/aN8Ff+hexP/nXcQ/5t1Df+Zcwv/mHEJ/5dwCP+Wbwj/nHsi/6GF
160 | Pf+VcRP/lW4G/5VuBf+VbgX/lW4F/5VuBf+VbgX/lW4F/5RuBv+Ubgb/lG4H/5NtB/+Ubwn/lnEL/5hz
161 | Df+bdRD/n3kT/6F8Ff+VchH9gWIP7XNYD8FwVAqLbVIDUGpRASZlTgAMZzwAAmYzAAAAAAAAAAAAAAAA
162 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA
163 | AAB6FAACbTgABmlMABhqTwFCa1AFfnVYCb+GZQ3vn3oT/6J8FP+feRD/nHYN/5pzC/+YcQn/l3AH/5dw
164 | Bv+XbwX/l28G/518Jf+mjEv/mHUc/5ZvB/+YcAX/mHAF/5dvBf+WbwX/lm8F/5ZuBf+VbgX/lW4F/5Vu
165 | Bf+TbQX/k20G/5RuB/+Vbwn/lnEL/5hzDf+cdxD/oHsU/556FP+GZhD1eFwP0XBXDJluUwdcbFEBKm1L
166 | AA5rPQACZjMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
167 | AAAAAAAAAAAAAAAAAABqKgAAaToABmZMABppTwFGbVEFiXhcC8mObQ71on0U/6B6Ev+ddw7/m3QL/5ly
168 | Cf+YcQj/mHEG/5hwBf+YcAX/mXEF/5pyBv+ffST/rpZZ/6SEOf+WcRD/mXEG/5pyBf+acQX/mXEF/5lx
169 | Bf+YcAX/l28F/5dvBf+WbwX/lG0F/5VuBf+UbQX/lG0G/5RuB/+Ubgn/lnEL/5l0Dv+eeBL/oHwV/5Fv
170 | Efl8XxHZcVYMo29TB2JuUAIsbEUADmc3AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
171 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZEMABGlLABhoTgFEblEFiXxdC82TcBH1on0T/6B6
172 | Ef+cdQ3/mnMK/5lyCP+YcQf/mXEG/5pyBf+bcgX/nHMF/510Bf+ddQf/oYAq/7WhcP+5omz/poQ0/5t0
173 | Ef+cdAf/nnQG/550Bf+ddAX/nHMF/5pyBf+ZcQX/l3AF/5dvBf+WbgX/lW4F/5RtBf+TbQX/k20G/5Nt
174 | B/+Vbwr/mHIM/514Ef+gexT/lHES+X9hEN1yVwylblMIYGpOAihjSgAMQEAAAgAAAAAAAAAAAAAAAAAA
175 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZjMAAmJJABRqTQA+bFADhXtd
176 | CcuVcRH1onwU/6B6EP+cdg3/mnIK/5lyB/+Zcgb/m3IG/51zBf+edAX/n3UF/6F2Bf+idwb/oXgL/6iM
177 | Qv/FtpT/yLqY/8Oufv+xkUj/oHka/6F4B/+ieAb/oXcG/6B2Bv+edQb/nXQG/5tzBf+acgX/mHAF/5Zv
178 | Bf+VbgX/lG0F/5RtBf+TbQX/k20H/5RvCf+Ycg3/nHcQ/596E/+VchL5f2EP23JXDaFuUwZYak8AJGE+
179 | AAiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmdH
180 | AApkTAA0ak8CeHdaCMWTcBD1onwU/6B6Ef+cdgz/mnMJ/5pyB/+bcwb/nHMF/551Bf+gdgX/ongF/6R5
181 | Bv+leQb/pnsG/6Z8Cv+ukUP/yb+j/8/Grv/Pxq3/y7uY/7qdXf+ddxX/pnwI/6Z7B/+kegf/o3kG/6F3
182 | Bv+fdgb/nXQG/5tzBf+ZcQX/mHAF/5ZvBf+VbgX/lG0F/5NtBf+TbQb/lG4I/5dyDP+bdhD/n3oT/5Vy
183 | E/l8Xw/VclYLlW9QA0xqRwAWYzgABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
184 | AAAAAAAAAAAAAFdCAAZpSgAgaE4AZnRWBrePbA7zonwU/6B6EP+ddgz/m3QJ/5pzB/+ccwb/nnQF/6B2
185 | Bf+ieAX/pHoG/6Z7Bv+pfQb/qn4G/6t/B/+rfwj/ro0x/8S3l//UzLj/1M26/9TNuf/Pvpv/row//6R6
186 | Df+qfgj/qH0I/6d8B/+legf/o3kH/6F3Bv+fdgb/nXQG/5tyBf+ZcQX/l28F/5ZuBf+VbgX/k20F/5Nt
187 | Bv+Ubgj/l3IM/5x3EP+hfRr/lXMW93pcDc1wUwiFcFADNGhFABCAQAACAAAAAAAAAAAAAAAAAAAAAAAA
188 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAAAJiSAAWZkwARm1RA6GDZAvto30U/6F7Ef+ddg3/nHQJ/5t0
189 | B/+ddAb/n3UF/6J4Bf+legX/qHwG/6p+Bv+sgAb/roEH/6+CB/+wgwf/sYQI/66GGf++q3f/2dPE/9nT
190 | xf/Z1MX/2dLB/8mzg/+rhiz/qn8L/6yACP+rfwj/qX4I/6d8B/+legf/o3gG/6F3Bv+edQb/m3MF/5py
191 | Bf+XcAX/lm8F/5VuBf+TbQb/k20G/5RuCP+Xcg3/o4Ek/6yKLv+NbBbzdFcMu21TBmRuUQAkbDsACIAA
192 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0JAAJhQAAMZ0sAMmlOAn59XgnfoHoT/6J8
193 | Ev+edw3/nHUK/5x1B/+edQb/oXcF/6V6Bf+ofAb/q38G/66AB/+wggf/soQH/7WGCP+1hwj/togI/7eI
194 | CP+1iAz/uZ1R/9HLuP/d2s//3dnO/97Zzv/a08L/xq9+/6eBI/+rgQz/roIJ/66BCf+rgAj/qn4I/6h8
195 | B/+legf/ongH/592Bv+cdAb/mnIG/5hwBf+WbwX/lW4F/5NtBf+TbQb/lG8M/6GBKv+vkT7/qogs/4Vm
196 | E+twVQqdbVADTmpOABZtSAAEVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkMgAGZ0cAHGlN
197 | AFxvUgS1lHAO+6R+FP+geQ7/nnYK/510B/+fdQb/oncF/6Z6Bf+qfQb/rYAH/6+CB/+yhAj/tYYI/7eI
198 | CP+5ign/uooJ/7qKCf+7iwr/uowM/7ubRf/Rx7D/39vS/+Dc1P/f3dT/3dnN/9rPuv/Ep2z/q4Qk/62C
199 | Df+xhAn/roIJ/62ACf+rfwj/qX4I/6Z7B/+jeAf/oHYG/510Bv+acgb/mHAF/5ZvBf+UbgX/lG4K/5d0
200 | Gv+khTX/r5JF/7CQOv+dfCD9dloNzXBUCHptUAEwbUoADGAhAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
201 | AAAzMwACYEYADmdMADhrUAKLf18I46V+Ff+hexD/n3cM/551CP+fdQb/oncG/6Z7Bv+qfgb/roEH/7GE
202 | B/+0hgj/t4gI/7mKCP+7iwn/vYwJ/76NCf++jgr/v48K/76PDP+9nED/08qx/+Lg2v/i39j/4+Hb/+He
203 | 1v/h3NL/3NG7/8etd/+0jjT/socS/7KFCf+wgwn/rYEJ/6yACP+pfgj/pnsH/6N5B/+gdwb/nXQG/5py
204 | Bv+XcAX/lW4F/5ZyE/+kh0D/r5ZU/6+VUP+wlEX/r40y/4hoE+1yVQupblEFUmtNABpdRgAEAAAAAAAA
205 | AAAAAAAAAAAAAAAAAAAAAAAAWE0ABGVLABxnTQBacVQDu5ZyD/ekfRP/oHkO/552Cf+fdgf/ongG/6Z6
206 | Bv+qfgb/roEG/7OEB/+2hwj/uYkI/7uMCP+9jQn/v48J/8GQCf/CkQr/w5IK/8KRCv+8jhD/uZhD/9PH
207 | rP/j4dv/4+Hb/+Pi3v/k49//4+Da/+Hd0//d1ML/y7WH/7iQKf+0hwn/s4YJ/7GDCf+vggn/rIAI/6p+
208 | CP+nfAf/o3kH/6B2Bv+ddAb/mnIF/5dvBf+Ubwz/oIQ8/7GbYv+wmFf/sJVM/7CSPv+gfSP7eVoM0XBT
209 | CHpsTwIwYEgADD4fAAAAAAAAAAAAAAAAAAAAAAAAQEAAAGJFAApnSwAyaE4CgYJhCN+iexT9onsQ/593
210 | DP+fdwj/ongG/6V6Bv+qfQb/roEG/7KEBv+3hwj/uooI/72NCP/Ajwn/wpEJ/8STCf/GlAr/x5QK/8eU
211 | Cv+/kRP/uJI3/8mwfP/d1MP/4+Db/+Th3P/k4t7/5ePg/+Xk4f/l5OH/5OHc/9TGqP+6lTf/tokL/7aI
212 | Cf+zhgn/soUJ/6+CCf+tgAj/qn4I/6d7B/+jeQf/oHYG/5tzBf+ZcQX/lW8H/5x+L/+tmGD/sZpd/7CW
213 | Uf+wlEj/rIsz/4xrFutwVQqhbVIETGlNABZmRgACAAAAAAAAAAAAAAAAAAAAAFA6AAJeSAAUZkwATG9T
214 | A62VcRDzpH0T/6F5Dv+gdwn/oXcH/6R5Bv+ofQb/roEG/7KEB/+3hwf/vIsI/7+OCP/CkAn/xJIJ/8aU
215 | Cf/Jlgr/ypcK/8uXCv/HlhD/uppK/9LAnP/g2Mj/5uPf/+bm5P/m5eT/5ubk/+bl4//m5OL/5uXk/+Xk
216 | 4v/b0Ln/tJVL/7WJEP+5ign/t4gJ/7SGCf+xhAn/r4IJ/6yACP+pfgj/pnsH/6J4B/+edQb/m3IF/5dw
217 | B/+bfCv/rJdh/7OdZf+wmFf/sJVN/7CRPv+ffST3dloNxW5TB2psTQIkbU0ABoCAAAAAAAAAAAAAAAAA
218 | AABePwAEYkcAImdMAWh2WAPPnHcR+6N8Ef+geQz/oXcI/6N4Bv+oewb/rH8G/7KEBv+3hwf/u4sH/8CO
219 | CP/DkQn/x5QJ/8mWCf/LmAr/zpkK/8+aCv/Qmwr/yZsc/8C0lP/k4Nn/5+Xj/+bl4v/n5uX/5+Xj/+Xk
220 | 3v/n5+b/5eTg/+Th2v/m5eL/5N/X/8+7k/+8kyr/vY0L/7qLCf+3iQn/tIYJ/7KFCf+vggn/rIAI/6l+
221 | CP+legf/oXcG/510Bv+Zcgj/nX8w/6+aZ/+0n2j/sZtd/6+VUP+vkkH/p4Yt/YBgEN9vUwmJbU4DOG1I
222 | AAxpPAAAAAAAAAAAAABVAAAAYDwACmVJADJrUAKHimcK5aJ7Ev+jew//oXgK/6J4B/+megb/qn8G/7CC
223 | Bv+2hwb/u4sH/8CPB//Ekgn/yJUJ/8yXCv/OmQr/0JsK/9GcCv/SnQv/050L/82iKv/b2ND/5uXi/+fm
224 | 4v/n5uT/5+fl/+jm5v/n5eL/5uLc/+fm5P/l4+D/5ePe/+jn5P/Ry7v/v5o1/8CPDP++jQn/uosJ/7eJ
225 | Cf+zhgn/sYQJ/62BCf+rgAj/qH0H/6N5B/+fdQf/lnAN/5x+M/+ynmr/taFu/7GaX/+wl1X/sJRH/62M
226 | Nf+Tchvtc1cLpWxQBExuSAAUfj8AAgAAAAAAAAAAVzAAAmNFABBnTQBGcVQCp5l0EfGlfhP/onkN/6F4
227 | CP+kegb/qH0G/66BBv+0hQb/u4oH/8COCP/Fkgn/yZYK/82ZCv/Qmwr/050L/9WeC//Wnwv/16AM/9ih
228 | DP/ToRv/zLyR/+np5//o5+b/6Ofm/+jn5//o6Of/6Ojo/+jo6P/q6en/6ejm/+fk3f/XzLD/xKA+/8KS
229 | Df/CkQv/wZAK/76NCv+6ign/tIcM/6yBEf+mfBX/pXwR/6R7Dv+geBD/nXge/6mIPv+4n2b/uql7/7im
230 | dv+zn2j/sZlb/7CVTf+xkkD/oIAm93hcDsFtUgZkZ08AHmRSAASAgAAAAAAAAGFKAAJlTAAYaE4AWHtb
231 | BMGcdxH5pX0S/6J6Df+ieQj/pnsG/6t/Bv+xgwb/uIgH/76NCP/EkQn/yZYJ/86ZCv/RnAr/1J4L/9ag
232 | C//Zogv/2qIM/9mjDP/aowz/2KIP/9CsSP/g3dj/6Obk/+fk4f/n5uT/6Ofm/+fm5P/n5OD/4t7T/9fH
233 | nf/Cplj/w5Ye/8eWDP/GlAv/xJML/8OSC//Ajwr/uowO/7SOMP+/nVj/x6Nc/72ZUf+ohjv/rI1H/8Or
234 | dv/FtY//w7WR/76vh/+5pnj/s55n/7GaXv+wllH/sZND/6WELP2CZBLTcFMHdmxTAShoXAAGaGgAAIAA
235 | AABiOgAEZEkAIGlNAGp/XwXPnngR/aR9Ef+jegv/pHoH/6h8Bv+ugAb/tYYG/7yLB//CkAj/yJQJ/8yY
236 | Cf/RnAr/1J4L/9egC//ZoQv/26ML/9ykDP/cpQz/3aUM/9iiEP/Kp0n/2dTJ/+jo6P/p6Of/6efj/+nn
237 | 5P/s7Ov/3dXB/8qvZ//MmxX/zpoN/82ZC//MmAv/yZYL/8aUC//Ekwv/wZEL/7qRIv/Er33/39nM/+De
238 | 1v/b1cX/1Mis/9HEqf/QyLL/y8Gm/8W4lv+/sIj/u6p+/7Wib/+ym2H/sJZT/7CUSP+oiDP9iGkX4XBU
239 | CIltUQE0YkoACkw7AACAOAAAbUQABmZKAChsTwF6h2UJ3aF7Ev+kfA//o3oK/6V6B/+rfgb/sYIG/7mI
240 | B/+/jgj/xZMI/8uXCf/Pmgn/054K/9egC//aogv/3KQL/92lDP/bow3/1Z8O/9GdFv/Op0P/yK9v/9zS
241 | uP/q6ur/5uXg/9/Yw//e0rD/386i/82qS//SnxL/054M/9KdC//Pmwv/zpoL/8uYC//Ilgv/xpUL/8GS
242 | DP/Cn0H/1cu1/+He1v/h3tj/3dnO/9vWyP/X0MD/08q2/83Dqv/HvJ3/wbSP/7ysgv+3pHT/spxj/6+W
243 | VP+wlEn/q405/45wHOlyVgibbFABPmRCAAxWKgAAaGgAAGNPAAZkSgAubFABh49sDOOlfRL/pHwO/6N6
244 | Cf+newb/rX8G/7SFB/+7iwf/wpAI/8eUCP/NmAn/0pwJ/9egCv/aogv/2aIM/9KdEP/Jlxj/w5Ql/8if
245 | P//Qtnn/yq9q/9mwQP/Vtlz/3dGt/9jDhv/UsE3/06k1/9OkJP/ZpBD/2aMN/9ahDf/Unw3/0p4N/9Cc
246 | DP/Omgz/y5gM/8eWDP/ElA7/xaZR/9zY0P/k4t7/4uDa/97a0f/b1sn/19C+/9PKtf/OxKv/yb2f/8K0
247 | kP+8rIH/t6V2/7OfaP+wmFf/sJRK/6yNOf+RcRnvdFYHpWxQA0RjRAAOVzUAAEREAABbRwAIZkoAMG5Q
248 | AI2Tbw3npn8T/6R8Dv+kewn/qXwG/6+BBv+2hwb/vYwH/8SRCP/Llgn/0JoJ/9WeCv/ZoQv/0JwQ/72N
249 | HP/HnUH/0ruI/9fJrP/f07z/1My4/9mtMf/krRT/4a4g/9ywN//cqyX/36gT/+GpEP/hqA//3qcP/92l
250 | D//apA//2aIP/9ahD//Unw//0J0O/86aDv/LmA7/x5YP/8inSv/b1cX/4t3U/+Lf1//h3tb/3dnP/9jS
251 | w//UzLj/zsSr/8m9nv/EtpP/vq6F/7ildv+0n2n/sJhZ/7CVTf+sjjv/lHQd8XVYCqttTwNIZ0gAEGBA
252 | AABAQAAAWEYACmZLADJvUQCPlXAO56eAE/+kfA3/pXsJ/6p9Bv+xgwb/uYgG/7+OB//Gkwj/zZgJ/9Kc
253 | Cf/XoQv/ypoZ/8mlUv/Tv5X/39S//9XKrP/RuXr/0byD/8m+of/mrxj/6LAV/+S3Pv/ey5b/1Lhu/92r
254 | I//nrhH/5awQ/+SrEP/iqRD/4KgQ/96mEP/bpRD/2KMQ/9WgEP/TnxD/z5wP/8qYEP/Dnzj/0ces/+Tg
255 | 2P/h28//39rO/93Zzf/Z1Mb/1M67/8/Frf/JvZ7/w7WR/7+viP+4pnf/s59p/7CaW/+tkkv/pocx/5h5
256 | I/F3WQytbU4ESmZGABBgQAAAQEAAAFhGAAplSgAyb1EAkZVxDueogBP/pXwN/6V8Cf+qfgf/s4QH/7qJ
257 | B//Bjwf/yJQI/8+aCf/Unwr/zJoS/8WmYv/bzrP/497T/+Dd1v/UvHz/368r/+izIf/lsyz/5LAm/9Kv
258 | Wv/nsyP/57Yx/+u1I//ttBb/7rMT/+2yE//rsRP/6K8T/+WtE//iqhL/36gS/92mEv/apRL/16IS/9Og
259 | Ev/OnBL/xZoh/867iP/n5OD/4+DX/+Db0P/d2Mv/2dPF/9XPvf/QyLL/ysCk/8W4lv/AsIr/uql8/7Wg
260 | a/+xmlz/qI1C/6KBJv+aeiXxd1kMrW1OBExmRgAQYEAAAEBAAABYRgAKZksAMm5RAI+VcQ7nqIAT/6Z8
261 | Df+mfAn/rH8H/7OEB/+7igf/w5AH/8qWCP/Rmwn/zZoT/7+eUf/Zyq3/4t7W/+Tg2f/Yy7D/zKlQ/96r
262 | Iv/osh7/5LAi/9CpQ//bv3v/6rQi//G4HP/yuRr/87kY//O5F//ytxb/8bYW/+60Fv/rshb/6LAV/+Wt
263 | Ff/hqxX/3qgV/9umFf/YpBX/1KEU/8+fFf/IpD3/2Myr/+bj3f/j4Nn/3trP/9nTwv/Uy7f/0Mau/8vA
264 | pP/DtZP/rJdh/6qUWv+njkv/o4c+/51+Lf+qjDj/nHwn8XZZC6trUANKZEcAEGBAAABCQgAAW0cACGdM
265 | ADBuUQCNlXEO56iBE/+mfQ3/pn0J/61/B/+zhQb/vIoG/8SRB//Llwn/ypcQ/7mXQ//Qv5f/39vP/+Pf
266 | 1//k4Nn/4NbB/8mudf/Gn0H/zaM7/8igQf/JrXX/1Ld4/9usMf/xuiT/9Lsj//S7If/0uh//9Loe//S5
267 | G//zuBn/8bYY/+61F//rshf/6LEX/+StFv/gqxb/3qkW/9qlFv/Vohb/z54Z/8epVP/UyKr/2tPA/9jS
268 | xP/b1sj/2NHA/9HJsv/LwaX/tKJ0/5t7J/+WcA3/lW8J/5VxDf+Ydhn/poYw/5t8KPF1WAqpalADSGRJ
269 | ABBbQQAAVVUAAF1IAAhjSAAwbVEAi5NwDeWogBP/pn4O/6d9Cf+tfwf/tIUG/7yLBv/EkQj/xpUP/7mU
270 | N//Ltoj/2dG+/+Dazf/j3tX/5uTf/+fm4v/l3tD/3s2s/9zKpv/g0bT/5+DS/9vNsf/LqFb/7bks//O9
271 | Kf/0vSj/9L0n//S9Jv/0vCT/9Lsh//S6H//zuRz/8bgb/+61Gv/qsxr/5rAa/+KsGf/eqRn/2qYZ/9Si
272 | Gf/Mnh3/uZhA/7GXVP+wnGz/xrqY/83Bn//Iu5n/v7CJ/6eMRP+Zcw3/lG4J/5NtCf+WcA//nHgb/6aF
273 | LP+ZeiXxdFgKpWpQA0RdSQAOSTwAAGhoAABhTQAGY0kALG1RAIOQbQzhpn4S/6d+Dv+nfQn/rIAH/7SF
274 | B/+8iwf/wpAL/76WMP/Hr3n/1suz/9zWxv/g3ND/4+DX/+Xi2f/n5uD/6Ofi/+no4//q6OX/6urn/+vp
275 | 6P/m3c//2Lt7/9+yOP/xvjL/9L8w//S/Lv/0viz/9L0q//S9KP/0vSf/9Lwk//O7If/zuh7/8Lcd/+y0
276 | HP/lrxz/4qwb/96qG//Zphv/0KEf/8KlXf/FrHX/vJ9i/6yPSP+qjkL/q49H/6WIPP+ceR//mXMT/5dz
277 | Gv+Zdh3/oX4o/6mJNf+ujjr/l3kl7XRYCZ1rTwE+YUIADFMpAAA4OAAAWEEABmRIACZrTwB2iGYI2aN8
278 | Ev+ofw//p34K/6x/B/+0hAf/vIsH/76QFP/Cp2D/z8Ol/9fPvP/c1sb/4NzP/+Pg1v/k4dj/5+Xf/+no
279 | 5P/q6eb/6ujl/+rp5f/s6ur/6eTc/9nEmv/Mpkv/3bA5/+69Of/zwTf/9MA1//TAMv/0vy//9L8t//S+
280 | K//0vSj/9L0l//O7If/wuCD/67Qf/+exH//irR7/3aoe/9OmK//YxJT/39fF/9jLrv+9oWX/qYc2/6WC
281 | L/+gfSf/n3wq/6eHPv+rj03/rJFM/66SS/+wlEn/rI48/5BzIeVxVQiRa04BNmFGAApQOgAAAAAAAFQ2
282 | AARlRwAeZ00AZIBeBcugehH9qYAR/6h+C/+rfwf/soMH/7uKB/++khv/xq9z/9LIrf/Xzrn/29XF/9/a
283 | z//i3tP/5uPd/+fm4P/o5+T/6unm/+rq6P/r6OX/6+rn/+zq6f/l3tD/2cWd/8+tYP/LokH/57k///PC
284 | Pf/0wzv/9MI4//TBNv/0wDL/9L8v//S/Lf/zvir/8rsm//C4I//ttiL/5rIi/+CtIf/Zqij/0LJf/9XM
285 | sv/e2cv/0sWo/8Syhv+/qnn/uqNu/7eha/+3o3D/taBs/7KcYf+wllL/sJRH/6iKNv2GahjZbVMGfGhO
286 | ACpjPgAIYCAAAAAAAABgPgACZEcAFmVLAFJ5WgS5nnkR+amBEv+ofg3/q38I/7GDB/+6igr/wJQg/8ew
287 | dP/Rx63/1s64/9rTwv/f2cz/4d3R/+Tf1//n5N7/6Ofj/+no5v/q6OX/6+rn/+zs6v/t7Oz/7evq/+vn
288 | 4f/n3s3/4dW9/9W+gf/vw0v/9cVC//XEP//0xD7/9MI7//TBOP/0wDT/878w//O+Lf/xvCn/8Lom/+u2
289 | Jf/ksST/3qwk/9SnK//Fp1T/z8Wr/9nSwf/Ty7T/z8So/8m9nP/Cs43/uah6/7Ofav+xm1//sJZQ/7GV
290 | Rf+lhzT7gGIUy2tPA2hlSwAgYUMABIAAAAAAAAAAZDUAAGRHAA5mSwBAb1IBn5p2EO+pghP/qH8N/6p/
291 | Cf+vggf/uYoN/7+WJ//ErXD/zsOl/9TKsf/Yz7v/3dbG/+Dbzv/i3M//5eLa/+jm4f/q6eT/6unl/+vn
292 | 4//r6OL/7Ovn/+zq5//s6uf/5eDW/9jJo//avGv/7sNP//TGS//1xkf/9cVF//TFQ//0xD//88I7//PA
293 | N//zvzT/8b4w//G9LP/vuSf/6LUn/+KvJ//Zqij/ya5p/9bMtf/Y0L3/1Mu1/9DGq//Kvp7/w7SP/7mn
294 | eP+ynWb/sZla/7GVTv+xlEP/oYIt83VZDLNqTwJUZkoAFl9BAAIAAAAAAAAAAAAAAABPOgAIYkgALGpO
295 | AH6KZwnhpX4T/6mAD/+qfwr/roEI/7WIEf+3kjL/vqZs/83Bof/TyrL/2NC8/9zWxv/g287/49/U/+Tg
296 | 1f/m49n/6OXe/+nn4f/s6+j/7Orm/+zq5//s6+f/7Ovo/+Tcyv/NtHv/xKJW/82oU//ZslH/88hQ//TI
297 | Tf/0xkr/9MVH//TERP/zwz//8sE7//G/Nv/wvTP/77st/+u4K//ksyz/0qk5/8CnYv/NwKD/1s22/8u/
298 | nf+0n2n/wLGJ/8O1jv+4pnX/sZpf/7CWU/+xlEn/rpA+/5J2JOdvUwaTaUsAPGxFAAyAPAAAAAAAAAAA
299 | AAAAAAAAXDgABGFEAB5mSgBed1YAx6B6EfupgRH/qX8M/6uACv+shiH/tppY/8Kuff/LvZr/0ces/9XM
300 | tf/a07//3tfI/+HbzP/k4df/5+Td/+jm4P/p5+T/7Ovo/+no5P/s6+n/7Ovn/+3s6v/s6uX/5dzI/+HS
301 | s//k177/18GO//DHV//1yVP/9chR//THTf/zxkr/88VH//LDQ//wwT3/7745/+69Nf/suTD/4rQ4/9e6
302 | cf/DsIP/vKVq/7eibf+2oGL/sJJB/7WgaP/Csoj/t6Rx/7GbXv+vllD/sJNC/6eINf18XxDTaU8DcmVL
303 | AChoQAAGgAAAAAAAAAAAAAAAAAAAAGk+AAJgRAAQZEkAQm1RAaGXcw/vqYET/6mADv+mfQ//p4o7/8Cv
304 | gf/GuJP/y7+e/8/FqP/TybD/2M+5/9zVxP/g283/49/U/+Xi2f/o5d7/5eTd/+beyv/a0LT/49/W/+3s
305 | 6f/s6+f/7Onl/+zp4//o5uP/5uTd/9zQrv/ux1//9Mta//XKV//0yVT/88hS//LGTv/xxEr/8MJE/+6/
306 | P//svTv/6ro2/+e3M//esTX/zbmC/9LEpf/Fr33/uJY8/7OUQf+3oWn/wa+C/7eibP+sk0//sJRM/7GU
307 | Qv+fgS/zclYKsWlNAVJjSgAYVkIAAgAAAAAAAAAAAAAAAAAAAABVAAAAXEAACGRJACplSwB0gmEG2aZ/
308 | FP2ngBH/o3wV/6mMQf/Arn//xbaO/8m8mf/OwqP/0ses/9bOuP/a0r//3dfG/+Dbzv/j39X/4t7R/93R
309 | rv/exX7/3cF2/9XJqf/s6+j/7evo/+3t6v/v7uv/3tS6/93Lmv/ly4L/8ctk//PMYP/zy13/88pa//LJ
310 | V//xx1P/8MVP/+/CSv/twEb/671A/+i6PP/mtzf/4LI1/8isYP/SyK3/wKho/7iXP/+yl1T/t6R0/7qo
311 | d/+wml7/n4Ev/6qNPf+ukDz9iGwd4WpPA4doTAA2YEQADCQkAAIAAAAAAAAAAAAAAAAAAAAAAAAAAGA/
312 | AAJmSAAWZksATm9SAK2ZdRf1qoQg/6eDKP+wlU//v6x6/8Oyh//HuZT/zL+f/9DEqP/UyrL/2NC6/9rS
313 | v//e2Mf/3NXF/9fIoP/gxHX/68hr/+fHcf/UxZ3/6+nk/+fl3v/p5+H/6ujk/+PNkP/uy3D/885q//PO
314 | Z//yzWX/7chh/+fBXf/sxVz/8MhZ/+/FVP/twk//68BL/+m9Rv/mukH/47Y9/+CzOP/UrEL/zbNt/8Kf
315 | Qv+3nl3/u6Vx/7aibP+0nWP/pIc8/5t5Hv+nhzD/oYMw93JXCr1oSwBeZkgAIGBDAAYAAAAAAAAAAAAA
316 | AAAAAAAAAAAAAAAAAABmMwAAZUIACmVHAC5mSgB6f2AN2bCPOP+wkj//tJpW/76qd//CsIP/xbWL/8m7
317 | lv/OwaL/0ses/9bMtP/Z0Lz/29TC/9XJrf/SuXr/48Jq/+vJbP/lx3P/zsOo/+Tg1//YzbD/2sqg/+DO
318 | nv/rzXv/8c9w//LPb//yzm3/6MVq/9a0Yv/Rr2H/4L1i/+3GXf/txVn/68JU/+jAUP/jukz/3bVG/92z
319 | Qf/csT7/2a04/9CnOv/HoTn/vqJa/8Szif/BrX3/u6Rr/6WGNf+eehv/qYox/4VnGONpTgOLZksAOmRE
320 | AA50KwACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEg2AARiRQAWZUgATGtPAaObfCj5s5ZD/7SZ
321 | UP+8p23/wq+A/8SziP/HuZL/y76c/8/DpP/SyKz/1s22/9nQuv/WyKn/w6px/9KzZP/iwWv/3sN7/9XP
322 | wv/a0Lf/2cKC/9O5c//VuG3/58hx/+/Oc//xz3L/68tx/9q/ev/Zx6H/28up/9G3dv/iwGH/6sRd/+nB
323 | WP/fuVb/yKhX/8qnWv/EoUr/0alC/9asPP/RqDj/yKE5/7+eQf+9pWj/wa+A/7ula/+tjj7/pIIk/5p8
324 | JvtvVAaxaEwAWmVKABxpMgAGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMwAAXjMACGVI
325 | AChkSgBsfWAP0auNOv+0lkj/uaFg/8Guev/CsYL/xLSJ/8i5kv/Lvpz/z8Ok/9HFp//WzLT/2M61/9LA
326 | mP/Hq27/xaRb/8OmYv/NuH//3cSA/9q/e//SuH3/07mA/93Ad//rzHX/7cx0/+PHff/YyKf/4trI/+LZ
327 | xP/QuIb/zq9g/+C9YP/gvV3/07dx/9TEoP/UxaT/yrSD/8inVP/QqUD/z6c7/8eiO//AnTz/upxL/7ym
328 | bP+5oWH/spRC/6mJM/+BYxTbZ00CfGdLADJYRQAMHQkAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
329 | AAAAAAAAAAAAAFUAAAJlSgAOZEgAOGlOAYuGaRThsJI9/7aaT/+/qW3/w7B+/8Szhv/Gto7/ybqV/83A
330 | oP/Qxab/08is/9bLsv/Y0Ln/2tG7/9nMsP/VxJ7/0b6N/9q/eP/UwY3/2dC6/9TGqP/Ir3n/0rd0/+XI
331 | ef/Zwoj/39bB/+Tf0//j3tH/39fC/823if/Fp2T/xaZd/8Svdv/Qw6D/1cqt/9THp//LsGr/zahE/8ym
332 | P//Goj7/wJ0+/7ybQf+3mkr/s5dK/7CSPv+JbBvpbVAEmWVKAEBfQwAUMzMAAgAAAAAAAAAAAAAAAAAA
333 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbUkABGJJABhlSgBUb1UIpZR3Ju2xk0H/u6Jd/8Ku
334 | d//Dr3v/wKx3/7qlbf/Gt5D/yLiS/8a1iv/DtI3/0MWo/9fOt//a0r3/1cyz/8Swff/KsXH/z72R/9zV
335 | wf/h2sn/39W9/9K/j//bwnz/zLyV/97Vwf/g2cj/4NnJ/9/YyP/c0rz/1cal/864hv/IrnX/xapm/8ar
336 | Yf/Jqlj/zalN/82oRf/KpUL/xaFC/8CeQ/+8m0P/sY4y/6mIK/+WeSbxdFkLr2dMAF5lRwAeTzUABgAA
337 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABcPwAGZUcAJmRJ
338 | AGJ2Wwyxm3wo77KTQP++pFz/vqNb/7yhV/+7omL/vKh1/76ocv+/pmf/wK16/8y/nf/NwaH/08em/8m7
339 | lP/BrX//xK18/9PEov/b0rz/29K4/97TtP/Vwo3/1L2A/9DFqv/d1cL/3NS//9zTv//b07//2dC4/9fO
340 | tv/Vyq//zr6Y/8atcP/MrFb/z6xQ/82pTP/Kp0j/yKRF/8SiR//An0f/uJY6/6eDHv+TcBDzdlgGu2dM
341 | AGxlRwAuaTgACgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
342 | AAAAAAAAVQAAAGVCAA5kSQAuZ0wAbHtdCbmYdhjvsIwp/8CeRf+9oVn/wq12/8Sxf//EsH7/w69+/8e3
343 | jf/NwJ3/w7GD/8myd//JtX7/zsKj/9TIq//RxaT/0cKb/9C7hv/Runv/1bx4/8y4gv/YzrX/2tK8/9nQ
344 | uf/YzrX/1820/9XLsf/TyKv/0cSm/82/nP/Isnz/yKpY/8yrUf/KqE3/yKdL/8elSf/Do0r/vZxB/6yI
345 | Jf+UchHzelwHw2lOAXhlSwA2Y0YAEFVVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
346 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABvRQACXEoAEGNJADRpTQFwelsFuZdyD++xjS7/v6Re/8Ww
347 | ef/Fs4D/xbKD/7+sef+/rHr/w7KG/7+qdP/Jrmn/y7Jw/8i3iv/MvZf/xbF9/863ev/Ks3b/yK1t/8Sq
348 | av/FsH3/1cmr/9bMs//Vy6//1Mis/9PIq//Sxqj/0MSl/87Bof/LvJb/xa95/8WoWv/JqlL/yKhP/8in
349 | Tv/Hp07/wKBF/6+LKf+UcRDxeVsHwWpOAXpmSQA6YksAFFlTAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
350 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEAAAE1BAARdRAASYkgANGdM
351 | AGx1VgOvkW8Q7a6POf/BpVv/xKxt/8OveP++qW//wKt1/7yocP/BrXr/v6Vm/8KoZv/Aq3f/yLaK/8Kr
352 | cP/IsXH/y7mL/8y7kv/ItYn/y7uT/9HEpP/Rxqf/0cao/9HFpv/Pw6P/zsGg/82/nf/LvJf/ybqS/8Sv
353 | ev/Cplv/yKlU/8ioU//IqFL/wqJJ/66JJv+ObQ7xdVgEt2lOAXZlSQA6YEEAFFlDAARVVQAAAAAAAAAA
354 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
355 | AAAzMwAASDcABFxDABBkSAAuZUkAYG9TAqOEYwrhqIYq/72iVv/Dqmf/w610/8Ktdv+/p2b/v6t1/8Ks
356 | dv/BqnD/xLGB/8m3jP/DrHb/wKhs/8SxgP/HuZb/zsKf/87Bn//OwZ//zsGf/82/nP/Mv5v/y76Z/8q8
357 | lv/Ku5P/yLmP/8e2iv/Drnj/waZf/8ipV//Jqlf/v51A/6iEIf+DYgjlcFQDq2ZNAGhlSwA0ZEMAFFkz
358 | AARVKwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
359 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzAABKGwACWjgADmRHACZjSABSaE0Ai3xdCtGaeyf3tZlK/8Gp
360 | Z//Fr3T/wqps/8Oudv/ItYX/x7WH/8i3jP/JupD/yLaK/8Cpcv++pmn/watx/8Oyhf/MvZj/y72W/8u8
361 | lv/Ku5P/yrqR/8m5j//IuI3/yLeL/8e2hv/HtYT/xbB6/8OqZP/EpVD/tpMy/5h1FPl7XQbXaU0Ak2VM
362 | AFhjSAAqYEMAEGQ4AARVKwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
363 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUPwAGYkkAGGRI
364 | ADhlSQBqak8BoX9fCteceRv1spVE/cKra//GsHX/w6xt/8Gqa//DsH3/x7WE/8Wzgv/GsoH/wqtx/76l
365 | af/Dr3r/ybmN/8m4jP/KuY3/ybiL/8m3if/Jtob/yLaD/8i1gf/ItH//x7N5/8Osbf+0mEf9mngZ9X5d
366 | BttsUACnZksAcGRJADxgSQAaTj0ACFVVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
367 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
368 | AAAAAAAAAAAAAG1JAARlTQAOZUkAKGNHAExmSwB4blEAq4JkENeegS7vrY84+7qcSf/Ap13/w61x/8av
369 | c//ErXD/xrN//8m2hP/ItYL/ybaE/8e0gP/CrXL/yLR+/8m1gv/JtoL/ybV+/8eyeP/FrnD/vaZk/7CV
370 | SvuggzLvhmgX2XBTA7FoTAB+ZksAUGRKACxnRgAQYEAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
371 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
372 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVVUAAmNLAAheRwAWY0kALGRLAExkSwBwbVAAn3ZW
373 | AMeIZwzfoIMw7ayPQfewk0P7t5xR/7+mZP/ErW3/xK5u/8Wub/+/pmH/wKRU/7+iVP+8oVn/u6Jg/7Wc
374 | V/2tkkb5pIY075BzIuF3WAbJblECoWdLAHZlSQBQZEkAMGBDABhWPwAIVVUAAgAAAAAAAAAAAAAAAAAA
375 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
376 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMwAASDYABGBC
377 | AApfSQAWY0kAKmVKAEJmSwBeaE0AfHBSA516XAi5f18Gy4lpENmWdyTjnYAv5Z+CMeefgjLnmXkh55p4
378 | GeeYdRflknAU44trGNuCZBLNe10Mu3BUBKFpTQCBZUsAYGVKAERkSAAsYkYAGFlCAAxbOgAEFAoAAgAA
379 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
380 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
381 | AAAAAAAAAAAAAAAAAABmMwAAWjwABF5EAAhmSgAQZEYAHGFIACxmSQBAZUkAUGVKAGJqTgB0bVABgW9R
382 | AYdvUQGLblEBi25RAItuUACLblAAiW1QAINrTgF2ZksAZGZJAFJmSQBAZEcALmJFAB5lRQASX0UACGNG
383 | AAQzGQACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
384 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
385 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVAAAAaT4AAmM8AARPOwAIZUMADlpF
386 | ABReRgAcZEgAJGNHACplRwAsZUkALmNIAC5jSAAuY0gALmRIACxiSQAqY0gAJGNGABxkRAAWZEIADlg6
387 | AAhbOAAEXjgAAlUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
388 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
389 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
390 | AAAAAAAAAAAAAF41AABEPgACWEEAAmk+AARnRAAGalIABmRMAAZfSAAIX0gACF9IAAhjTgAGZkgABmY+
391 | AARkQQACYD4AAmQ1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
392 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
393 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
394 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAgEcAAICAAABeXgAAVVUAAFVV
395 | AABVVQAAY2MAAIBHAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
396 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
397 | AAAAAAAA////////////////////////////////////wAH///////wAAD//////8AAAB//////AAAAB
398 | /////wAAAAD////+AAAAAD////wAAAAAH///8AAAAAAP///gAAAAAAf//8AAAAAAA///wAAAAAAB//+A
399 | AAAAAAD//wAAAAAAAP//AAAAAAAAf/4AAAAAAAB//AAAAAAAAD/8AAAAAAAAP/gAAAAAAAAf+AAAAAAA
400 | AB/4AAAAAAAAD/AAAAAAAAAP8AAAAAAAAA/wAAAAAAAAD/AAAAAAAAAH8AAAAAAAAAfgAAAAAAAAB+AA
401 | AAAAAAAH4AAAAAAAAAfgAAAAAAAAB+AAAAAAAAAH4AAAAAAAAAfgAAAAAAAAB+AAAAAAAAAH8AAAAAAA
402 | AAfwAAAAAAAAD/AAAAAAAAAP8AAAAAAAAA/4AAAAAAAAD/gAAAAAAAAf+AAAAAAAAB/8AAAAAAAAH/wA
403 | AAAAAAA//gAAAAAAAD/+AAAAAAAAf/8AAAAAAAD//wAAAAAAAP//gAAAAAAB///AAAAAAAP//+AAAAAA
404 | B///8AAAAAAP///4AAAAAB////wAAAAAP////gAAAAB/////gAAAAf/////gAAAH//////gAAB//////
405 | /wAAf///////8A////////////////////////////////////8=
406 |
407 |
408 |
--------------------------------------------------------------------------------
/KcptunGUI.Resource/图片.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // 此代码由工具生成。
4 | // 运行时版本:4.0.30319.42000
5 | //
6 | // 对此文件的更改可能会导致不正确的行为,并且如果
7 | // 重新生成代码,这些更改将会丢失。
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace KcptunGUI.Resource {
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", "4.0.0.0")]
23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
25 | public class 图片 {
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 图片() {
33 | }
34 |
35 | ///
36 | /// 返回此类使用的缓存的 ResourceManager 实例。
37 | ///
38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
39 | public 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("KcptunGUI.Resource.图片", typeof(图片).Assembly);
43 | resourceMan = temp;
44 | }
45 | return resourceMan;
46 | }
47 | }
48 |
49 | ///
50 | /// 使用此强类型资源类,为所有资源查找
51 | /// 重写当前线程的 CurrentUICulture 属性。
52 | ///
53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
54 | public 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 | public static System.Drawing.Bitmap png_32x32_connect_1 {
67 | get {
68 | object obj = ResourceManager.GetObject("png_32x32_connect_1", resourceCulture);
69 | return ((System.Drawing.Bitmap)(obj));
70 | }
71 | }
72 |
73 | ///
74 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。
75 | ///
76 | public static System.Drawing.Bitmap png_32x32_disconnect_1 {
77 | get {
78 | object obj = ResourceManager.GetObject("png_32x32_disconnect_1", resourceCulture);
79 | return ((System.Drawing.Bitmap)(obj));
80 | }
81 | }
82 |
83 | ///
84 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。
85 | ///
86 | public static System.Drawing.Bitmap png_32x32_signal0_1 {
87 | get {
88 | object obj = ResourceManager.GetObject("png_32x32_signal0_1", resourceCulture);
89 | return ((System.Drawing.Bitmap)(obj));
90 | }
91 | }
92 |
93 | ///
94 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。
95 | ///
96 | public static System.Drawing.Bitmap png_32x32_signal1_1 {
97 | get {
98 | object obj = ResourceManager.GetObject("png_32x32_signal1_1", resourceCulture);
99 | return ((System.Drawing.Bitmap)(obj));
100 | }
101 | }
102 |
103 | ///
104 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。
105 | ///
106 | public static System.Drawing.Bitmap png_32x32_signal2_1 {
107 | get {
108 | object obj = ResourceManager.GetObject("png_32x32_signal2_1", resourceCulture);
109 | return ((System.Drawing.Bitmap)(obj));
110 | }
111 | }
112 |
113 | ///
114 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。
115 | ///
116 | public static System.Drawing.Bitmap png_32x32_signal3_1 {
117 | get {
118 | object obj = ResourceManager.GetObject("png_32x32_signal3_1", resourceCulture);
119 | return ((System.Drawing.Bitmap)(obj));
120 | }
121 | }
122 |
123 | ///
124 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。
125 | ///
126 | public static System.Drawing.Bitmap png_32x32_signal4_1 {
127 | get {
128 | object obj = ResourceManager.GetObject("png_32x32_signal4_1", resourceCulture);
129 | return ((System.Drawing.Bitmap)(obj));
130 | }
131 | }
132 |
133 | ///
134 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。
135 | ///
136 | public static System.Drawing.Bitmap png_72x72_appicon {
137 | get {
138 | object obj = ResourceManager.GetObject("png_72x72_appicon", resourceCulture);
139 | return ((System.Drawing.Bitmap)(obj));
140 | }
141 | }
142 |
143 | ///
144 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。
145 | ///
146 | public static System.Drawing.Bitmap png_72x72_archive_1 {
147 | get {
148 | object obj = ResourceManager.GetObject("png_72x72_archive_1", resourceCulture);
149 | return ((System.Drawing.Bitmap)(obj));
150 | }
151 | }
152 |
153 | ///
154 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。
155 | ///
156 | public static System.Drawing.Bitmap png_72x72_chart_1 {
157 | get {
158 | object obj = ResourceManager.GetObject("png_72x72_chart_1", resourceCulture);
159 | return ((System.Drawing.Bitmap)(obj));
160 | }
161 | }
162 |
163 | ///
164 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。
165 | ///
166 | public static System.Drawing.Bitmap png_72x72_colorful_1 {
167 | get {
168 | object obj = ResourceManager.GetObject("png_72x72_colorful_1", resourceCulture);
169 | return ((System.Drawing.Bitmap)(obj));
170 | }
171 | }
172 |
173 | ///
174 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。
175 | ///
176 | public static System.Drawing.Bitmap png_72x72_configure_1 {
177 | get {
178 | object obj = ResourceManager.GetObject("png_72x72_configure_1", resourceCulture);
179 | return ((System.Drawing.Bitmap)(obj));
180 | }
181 | }
182 |
183 | ///
184 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。
185 | ///
186 | public static System.Drawing.Bitmap png_72x72_download_1 {
187 | get {
188 | object obj = ResourceManager.GetObject("png_72x72_download_1", resourceCulture);
189 | return ((System.Drawing.Bitmap)(obj));
190 | }
191 | }
192 |
193 | ///
194 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。
195 | ///
196 | public static System.Drawing.Bitmap png_72x72_driver_1 {
197 | get {
198 | object obj = ResourceManager.GetObject("png_72x72_driver_1", resourceCulture);
199 | return ((System.Drawing.Bitmap)(obj));
200 | }
201 | }
202 |
203 | ///
204 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。
205 | ///
206 | public static System.Drawing.Bitmap png_72x72_log_1 {
207 | get {
208 | object obj = ResourceManager.GetObject("png_72x72_log_1", resourceCulture);
209 | return ((System.Drawing.Bitmap)(obj));
210 | }
211 | }
212 |
213 | ///
214 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。
215 | ///
216 | public static System.Drawing.Bitmap png_72x72_mac_1 {
217 | get {
218 | object obj = ResourceManager.GetObject("png_72x72_mac_1", resourceCulture);
219 | return ((System.Drawing.Bitmap)(obj));
220 | }
221 | }
222 |
223 | ///
224 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。
225 | ///
226 | public static System.Drawing.Bitmap png_72x72_save_1 {
227 | get {
228 | object obj = ResourceManager.GetObject("png_72x72_save_1", resourceCulture);
229 | return ((System.Drawing.Bitmap)(obj));
230 | }
231 | }
232 |
233 | ///
234 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。
235 | ///
236 | public static System.Drawing.Bitmap png_72x72_server_1 {
237 | get {
238 | object obj = ResourceManager.GetObject("png_72x72_server_1", resourceCulture);
239 | return ((System.Drawing.Bitmap)(obj));
240 | }
241 | }
242 |
243 | ///
244 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。
245 | ///
246 | public static System.Drawing.Bitmap png_72x72_status_1 {
247 | get {
248 | object obj = ResourceManager.GetObject("png_72x72_status_1", resourceCulture);
249 | return ((System.Drawing.Bitmap)(obj));
250 | }
251 | }
252 |
253 | ///
254 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。
255 | ///
256 | public static System.Drawing.Bitmap png_72x72_status_2 {
257 | get {
258 | object obj = ResourceManager.GetObject("png_72x72_status_2", resourceCulture);
259 | return ((System.Drawing.Bitmap)(obj));
260 | }
261 | }
262 |
263 | ///
264 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。
265 | ///
266 | public static System.Drawing.Bitmap png_72x72_text_1 {
267 | get {
268 | object obj = ResourceManager.GetObject("png_72x72_text_1", resourceCulture);
269 | return ((System.Drawing.Bitmap)(obj));
270 | }
271 | }
272 |
273 | ///
274 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。
275 | ///
276 | public static System.Drawing.Bitmap png_72x72_unload_1 {
277 | get {
278 | object obj = ResourceManager.GetObject("png_72x72_unload_1", resourceCulture);
279 | return ((System.Drawing.Bitmap)(obj));
280 | }
281 | }
282 |
283 | ///
284 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。
285 | ///
286 | public static System.Drawing.Bitmap png_72x72_upload_1 {
287 | get {
288 | object obj = ResourceManager.GetObject("png_72x72_upload_1", resourceCulture);
289 | return ((System.Drawing.Bitmap)(obj));
290 | }
291 | }
292 |
293 | ///
294 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。
295 | ///
296 | public static System.Drawing.Bitmap png_72x72_user_1 {
297 | get {
298 | object obj = ResourceManager.GetObject("png_72x72_user_1", resourceCulture);
299 | return ((System.Drawing.Bitmap)(obj));
300 | }
301 | }
302 |
303 | ///
304 | /// 查找 System.Drawing.Bitmap 类型的本地化资源。
305 | ///
306 | public static System.Drawing.Bitmap png_none {
307 | get {
308 | object obj = ResourceManager.GetObject("png_none", resourceCulture);
309 | return ((System.Drawing.Bitmap)(obj));
310 | }
311 | }
312 | }
313 | }
314 |
--------------------------------------------------------------------------------
/KcptunGUI.Resource/字符串.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // 此代码由工具生成。
4 | // 运行时版本:4.0.30319.42000
5 | //
6 | // 对此文件的更改可能会导致不正确的行为,并且如果
7 | // 重新生成代码,这些更改将会丢失。
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace KcptunGUI.Resource {
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", "4.0.0.0")]
23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
25 | public class 字符串 {
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 字符串() {
33 | }
34 |
35 | ///
36 | /// 返回此类使用的缓存的 ResourceManager 实例。
37 | ///
38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
39 | public 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("KcptunGUI.Resource.字符串", typeof(字符串).Assembly);
43 | resourceMan = temp;
44 | }
45 | return resourceMan;
46 | }
47 | }
48 |
49 | ///
50 | /// 使用此强类型资源类,为所有资源查找
51 | /// 重写当前线程的 CurrentUICulture 属性。
52 | ///
53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
54 | public static global::System.Globalization.CultureInfo Culture {
55 | get {
56 | return resourceCulture;
57 | }
58 | set {
59 | resourceCulture = value;
60 | }
61 | }
62 |
63 | ///
64 | /// 查找类似 {"Language":"简体中文","LangTag":"zh_CN","LCID":2052,"Text":["KcptunGUI","客户端","服务端","首选项","状态","关于","显示当前运行状态","关于本程序","进行首选项设定","客户端模式","服务端模式","以下选项会即时生效并自动保存","是否自动关闭导航菜单","是否记住窗口位置","是否读取系统状态","区域ID,据此提供不同的内容","程序显示语言","处理器","处理器负载:","程序处理器占用:","内存","内存负载:","程序占用:","网络","系统上传速率:","系统下载速率:","KcptunGUI总出网速率:","KcptunGUI总入网速率:","Kcptun总出网速率:","Kcptun总入网速率:","有效流量比:","退出"]} 的本地化字符串。
65 | ///
66 | public static string String_Language_CHS {
67 | get {
68 | return ResourceManager.GetString("String_Language_CHS", resourceCulture);
69 | }
70 | }
71 |
72 | ///
73 | /// 查找类似 {"Language":"English","LangTag":"en_us","LCID":1033,"Text":["KcptunGUI","Client","Server","Config","Status","About","Display application status","About application","Configure settings","Client mode","Server mode","These settings will apply immediately","Whether or not auto close menu","Whether or not remember window location","Whether or not fetch application status","Location ID","Applocation display language","Processor","Processor load:","Application occupied:","Memory","System occupied:","Application o [字符串的其余部分被截断]"; 的本地化字符串。
74 | ///
75 | public static string String_Language_ENG {
76 | get {
77 | return ResourceManager.GetString("String_Language_ENG", resourceCulture);
78 | }
79 | }
80 | }
81 | }
82 |
--------------------------------------------------------------------------------
/KcptunGUI.Resource/字符串.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 | {"Language":"简体中文","LangTag":"zh_CN","LCID":2052,"Text":["KcptunGUI","客户端","服务端","首选项","状态","关于","显示当前运行状态","关于本程序","进行首选项设定","客户端模式","服务端模式","以下选项会即时生效并自动保存","是否自动关闭导航菜单","是否记住窗口位置","是否读取系统状态","区域ID,据此提供不同的内容","程序显示语言","处理器","处理器负载:","程序处理器占用:","内存","内存负载:","程序占用:","网络","系统上传速率:","系统下载速率:","KcptunGUI总出网速率:","KcptunGUI总入网速率:","Kcptun总出网速率:","Kcptun总入网速率:","有效流量比:","退出"]}
122 | 内置简体中文
123 |
124 |
125 | {"Language":"English","LangTag":"en_us","LCID":1033,"Text":["KcptunGUI","Client","Server","Config","Status","About","Display application status","About application","Configure settings","Client mode","Server mode","These settings will apply immediately","Whether or not auto close menu","Whether or not remember window location","Whether or not fetch application status","Location ID","Applocation display language","Processor","Processor load:","Application occupied:","Memory","System occupied:","Application occupied:","Network","System rate[upload]:","System rate[download]:","KcptunGUI rate[upload]:","KcptunGUI rate[download]:","Kcptun rate[upload]:","Kcptun rate[download]:","Availability flow ratio:","Exit"]}
126 | 内置英文
127 |
128 |
--------------------------------------------------------------------------------
/KcptunGUI.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio 14
4 | VisualStudioVersion = 14.0.25420.1
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KcptunGUI", "KcptunGUI\KcptunGUI.csproj", "{E8AB7C42-3E50-436D-8171-DAE15E9C7522}"
7 | EndProject
8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KcptunGUI.Resource", "KcptunGUI.Resource\KcptunGUI.Resource.csproj", "{31173083-171C-4488-8CA2-C01D3651E15E}"
9 | EndProject
10 | Global
11 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
12 | Debug|Any CPU = Debug|Any CPU
13 | Debug|x64 = Debug|x64
14 | Debug|x86 = Debug|x86
15 | Release|Any CPU = Release|Any CPU
16 | Release|x64 = Release|x64
17 | Release|x86 = Release|x86
18 | EndGlobalSection
19 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
20 | {E8AB7C42-3E50-436D-8171-DAE15E9C7522}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
21 | {E8AB7C42-3E50-436D-8171-DAE15E9C7522}.Debug|Any CPU.Build.0 = Debug|Any CPU
22 | {E8AB7C42-3E50-436D-8171-DAE15E9C7522}.Debug|x64.ActiveCfg = Debug|x64
23 | {E8AB7C42-3E50-436D-8171-DAE15E9C7522}.Debug|x64.Build.0 = Debug|x64
24 | {E8AB7C42-3E50-436D-8171-DAE15E9C7522}.Debug|x86.ActiveCfg = Debug|x86
25 | {E8AB7C42-3E50-436D-8171-DAE15E9C7522}.Debug|x86.Build.0 = Debug|x86
26 | {E8AB7C42-3E50-436D-8171-DAE15E9C7522}.Release|Any CPU.ActiveCfg = Release|Any CPU
27 | {E8AB7C42-3E50-436D-8171-DAE15E9C7522}.Release|Any CPU.Build.0 = Release|Any CPU
28 | {E8AB7C42-3E50-436D-8171-DAE15E9C7522}.Release|x64.ActiveCfg = Release|x64
29 | {E8AB7C42-3E50-436D-8171-DAE15E9C7522}.Release|x64.Build.0 = Release|x64
30 | {E8AB7C42-3E50-436D-8171-DAE15E9C7522}.Release|x86.ActiveCfg = Release|x86
31 | {E8AB7C42-3E50-436D-8171-DAE15E9C7522}.Release|x86.Build.0 = Release|x86
32 | {31173083-171C-4488-8CA2-C01D3651E15E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
33 | {31173083-171C-4488-8CA2-C01D3651E15E}.Debug|Any CPU.Build.0 = Debug|Any CPU
34 | {31173083-171C-4488-8CA2-C01D3651E15E}.Debug|x64.ActiveCfg = Debug|Any CPU
35 | {31173083-171C-4488-8CA2-C01D3651E15E}.Debug|x64.Build.0 = Debug|Any CPU
36 | {31173083-171C-4488-8CA2-C01D3651E15E}.Debug|x86.ActiveCfg = Debug|Any CPU
37 | {31173083-171C-4488-8CA2-C01D3651E15E}.Debug|x86.Build.0 = Debug|Any CPU
38 | {31173083-171C-4488-8CA2-C01D3651E15E}.Release|Any CPU.ActiveCfg = Release|Any CPU
39 | {31173083-171C-4488-8CA2-C01D3651E15E}.Release|Any CPU.Build.0 = Release|Any CPU
40 | {31173083-171C-4488-8CA2-C01D3651E15E}.Release|x64.ActiveCfg = Release|Any CPU
41 | {31173083-171C-4488-8CA2-C01D3651E15E}.Release|x64.Build.0 = Release|Any CPU
42 | {31173083-171C-4488-8CA2-C01D3651E15E}.Release|x86.ActiveCfg = Release|Any CPU
43 | {31173083-171C-4488-8CA2-C01D3651E15E}.Release|x86.Build.0 = Release|Any CPU
44 | EndGlobalSection
45 | GlobalSection(SolutionProperties) = preSolution
46 | HideSolutionNode = FALSE
47 | EndGlobalSection
48 | EndGlobal
49 |
--------------------------------------------------------------------------------
/KcptunGUI.v12.suo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ragnaroks/KcptunGUI/fb8821a7ed0e1bd53fbe3a2a5810328cf1c06ff3/KcptunGUI.v12.suo
--------------------------------------------------------------------------------
/KcptunGUI/App.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/KcptunGUI/App.xaml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
21 |
24 |
28 |
34 |
37 |
41 |
42 |
43 |
44 |
45 |
--------------------------------------------------------------------------------
/KcptunGUI/App.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Windows;
3 | using System.IO;
4 | using System.Windows.Input;
5 | using Newtonsoft.Json;
6 | using System.Diagnostics;
7 |
8 | namespace KcptunGUI
9 | {
10 | ///
11 | /// App.xaml 的交互逻辑
12 | ///
13 | public partial class App : Application{
14 | public const String AppName = "KcptunGUI";
15 | public const String AppFileName = "KcptunGUI.exe";
16 | public static readonly String AppVersion = String.Format(
17 | "{0}.{1}.{2}({3})",
18 | Application.ResourceAssembly.GetName().Version.Major,
19 | Application.ResourceAssembly.GetName().Version.Minor,
20 | Application.ResourceAssembly.GetName().Version.Build,
21 | Application.ResourceAssembly.GetName().Version.Revision
22 | );
23 | public static readonly String AppRunPath = Environment.CurrentDirectory;//运行目录,无路径分隔符,默认是D:\My Projects\KcptunGUI\KcptunGUI\bin\Debug\x86
24 | public static readonly String AppFilePath = AppDomain.CurrentDomain.BaseDirectory;//程序集目录,有路径分隔符,D:\My Projects\KcptunGUI\KcptunGUI\bin\Debug\x86\
25 | public static readonly String AppExecFilePath = Path.Combine(AppFilePath,AppFileName);//可执行文件,D:\My Projects\KcptunGUI\KcptunGUI\bin\Debug\x86\KcptunGUI.exe
26 | public static readonly String AppResxPath = Path.Combine(AppFilePath,"Resx");//资源目录,D:\My Projects\KcptunGUI\KcptunGUI\bin\Debug\x86\Resx
27 | public static readonly String AppConfigFilePath = Path.Combine(AppFilePath,"config.json");//配置文件,D:\My Projects\KcptunGUI\KcptunGUI\bin\Debug\x86\config.json
28 | public static readonly System.Text.UTF8Encoding UTF8EncodingNoBom = new System.Text.UTF8Encoding(false,true);//无BOM编码
29 | public static Class.ConfigJson AppConfigObject;
30 | public static Class.LanguageJson AppLanguageObject;
31 | public static System.Windows.Forms.NotifyIcon nicon = new System.Windows.Forms.NotifyIcon();//托盘图标
32 | public static Cursor[] AppCursor = new Cursor[2];
33 | public static readonly Process AppProcess=Process.GetCurrentProcess();
34 |
35 | protected override void OnStartup( StartupEventArgs e ) {
36 | String AppConfigJson = String.Empty;
37 | //环境检查
38 | if(!File.Exists(AppConfigFilePath)){//若配置文件不存在
39 | MessageBox.Show("配置文件不存在(Not found config.json file)","错误(Error)",MessageBoxButton.OK,MessageBoxImage.Error);
40 | Environment.Exit(0);
41 | }else{
42 | AppConfigJson = File.ReadAllText( AppConfigFilePath,App.UTF8EncodingNoBom);//读取配置文件字符串
43 | if(!Class.LocalFunction.ValidateJSONBySchema(AppConfigJson,KcptunGUI.Properties.Resources.String_AppConfigJsonSchema)){//若配置文件无效
44 | if(MessageBox.Show("配置文件无效,是否重建配置文件?(Configure file is invalid,set up?)",App.AppName,MessageBoxButton.YesNo,MessageBoxImage.Question) == MessageBoxResult.Yes) {
45 | File.WriteAllText(AppConfigFilePath,KcptunGUI.Properties.Resources.String_AppConfigJsonDefault,UTF8EncodingNoBom);//写入默认配置
46 | MessageBox.Show("配置文件重建完成(Configure file is set up)",AppName,MessageBoxButton.OK,MessageBoxImage.Information);
47 | AppConfigJson = File.ReadAllText(AppConfigFilePath,UTF8EncodingNoBom);//重读配置文件字符串
48 | } else { Environment.Exit(0); }
49 | }
50 | AppConfigObject = JsonConvert.DeserializeObject(AppConfigJson);//加载配置文件
51 | }
52 | //if(!Directory.Exists(Class.AppAttributes.ResxPath)){ MessageBox.Show("Resx目录不存在(Not found Resx folder)","错误(Error)",MessageBoxButton.OK,MessageBoxImage.Error); Environment.Exit(0); }//若resx目录不存在
53 | AppLanguageObject = Class.LocalFunction.LoadLanguageObjectFromJSON(App.AppConfigObject.LCID);
54 | AppCursor[0]=new Cursor(Class.LocalFunction.BytesToStream(Resource.Byte.cur_normal));//默认鼠标样式
55 | //
56 | base.OnStartup( e );
57 | }
58 | }
59 | }
60 |
--------------------------------------------------------------------------------
/KcptunGUI/Class/ConfigJson.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 |
4 | namespace KcptunGUI.Class {
5 | ///
6 | /// 配置文件实体类
7 | ///
8 | public class ConfigJson {
9 | /// 区域ID
10 | public Int32 LCID { get; set; }
11 |
12 | /// 是否自动关闭菜单
13 | public Boolean TabAutoHide { get; set; }
14 |
15 | /// 是否记住窗口位置
16 | public Boolean RememberWinLocation { get; set; }
17 |
18 | /// 窗口显示位置
19 | public Int32[] WinLocation { get; set; }
20 |
21 | /// 是否获取系统状态
22 | public Boolean FetchSystemStatus { get; set; }
23 |
24 | /// 服务器节点子类
25 | public class NodesItems {
26 | /// 主机名
27 | public String hostname { get; set; }
28 | /// IP
29 | public String ip { get; set; }
30 | /// 描述
31 | public String description { get; set; }
32 | /// 本地端口
33 | public Int32 localport { get; set; }
34 | /// 远程端口
35 | public Int32 remoteport { get; set; }
36 | /// 是否自动链接
37 | public Boolean autoconnect { get; set; }
38 | }
39 | /// 服务器节点
40 | public List Nodes { get; set; }
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/KcptunGUI/Class/LanguageJson.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 |
4 | namespace KcptunGUI.Class {
5 | /// 语言配置文件实体类
6 | public class LanguageJson {
7 | /// 语言描述
8 | public String Language { get; set; }
9 | /// 语言标签
10 | public String LangTag { get; set; }
11 | /// LCID
12 | public Int32 LCID { get; set; }
13 | ///
14 | /// 文本列表
15 | ///
16 | public List Text { get; set; }
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/KcptunGUI/Class/LocalFunction.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using Newtonsoft.Json;
4 | using Newtonsoft.Json.Linq;
5 | using Newtonsoft.Json.Schema;
6 | using System.Diagnostics;
7 | using System.Runtime.InteropServices;
8 | using System.IO;
9 | using System.Net.NetworkInformation;
10 |
11 | namespace KcptunGUI.Class {
12 | class LocalFunction {
13 | #region 非托管方法
14 | [DllImport("user32.dll",CharSet = CharSet.Auto)]
15 | public static extern Boolean IsWindowVisible(IntPtr hWnd);//当前窗体是否显示
16 | #endregion
17 |
18 | #region 托管方法
19 | /// 清除空白字符
20 | /// 要处理的字符串
21 | /// false清理空格,true清理全部
22 | /// 已处理的字符串
23 | static public String TrimJSON(String _JSON,Boolean _All=false) {
24 | return _All ? System.Text.RegularExpressions.Regex.Replace(_JSON.Trim(),@"\s","") : _JSON.Trim();
25 | }
26 |
27 | /// 字节组转内存流
28 | /// 字节组
29 | /// 内存流
30 | public static Stream BytesToStream(Byte[] _bytes) {
31 | return new MemoryStream(_bytes);
32 | }
33 |
34 | /// 内存流转字节组
35 | /// 内存流
36 | /// 字节组
37 | public static Byte[] StreamToBytes(Stream _stream) {
38 | Byte[] bytes = new Byte[_stream.Length];
39 | _stream.Read(bytes,0,bytes.Length);
40 | _stream.Seek(0,SeekOrigin.Begin);
41 | return bytes;
42 | }
43 |
44 | /// 验证指定JSON合法性
45 | /// 待验证的JSON
46 | /// 验证器字符串
47 | /// 是否合法
48 | public static Boolean ValidateJSONBySchema( String _JSON , String _SchemaString ) {
49 | if( String.IsNullOrWhiteSpace( _JSON ) || String.IsNullOrWhiteSpace( _SchemaString ) || _JSON.IndexOf( "}{" , 0 ) > -1 || _SchemaString.IndexOf( "}{" , 0 ) > -1 ) { return false; }
50 | JSchema schema = JSchema.Parse( _SchemaString );
51 | JObject jo = JObject.Parse( _JSON );
52 | IList errors;
53 | Boolean v = jo.IsValid( schema , out errors );
54 | if( errors.Count == 0 && v == true ) {
55 | return true;
56 | } else {
57 | foreach( var value in errors ) { Console.WriteLine( "验证失败: " + value ); }
58 | return false;
59 | }
60 | }
61 |
62 | /// 通过LCID来加载对应的语言文件
63 | /// LCID
64 | /// 已经反序列化的语言对象
65 | public static Class.LanguageJson LoadLanguageObjectFromJSON(Int32 _LCID) {
66 | switch(_LCID) {
67 | case 1033:
68 | return JsonConvert.DeserializeObject(KcptunGUI.Resource.字符串.String_Language_ENG);//英文
69 | case 2052:
70 | default:
71 | return JsonConvert.DeserializeObject(KcptunGUI.Resource.字符串.String_Language_CHS);//简体中文
72 | }
73 | }
74 |
75 | /// 根据控件Uid返回对应的全球化文本
76 | /// 控件的Uid属性
77 | /// 全球化文本
78 | public static String GetString(String _SenderUid) {
79 | UInt16 index = 0;
80 | if(String.IsNullOrWhiteSpace(_SenderUid)) {
81 | return App.AppLanguageObject.Text[0];
82 | } else {
83 | UInt16.TryParse(_SenderUid,out index);
84 | return App.AppLanguageObject.Text[index];
85 | }
86 | }
87 |
88 | /// 根据控件索引返回对应的全球化文本
89 | /// 手动指定的索引
90 | /// 全球化文本
91 | public static String GetString(UInt16 _Index) {
92 | return App.AppLanguageObject.Text[_Index];
93 | }
94 |
95 | /// 将当前对象写入文件
96 | /// JSON对象
97 | /// 文件完整路径
98 | public static void SaveJsonToFile(Object _JSON,String _Path) {
99 | System.IO.File.WriteAllText( App.AppConfigFilePath , JsonConvert.SerializeObject( _JSON ) , App.UTF8EncodingNoBom );
100 | }
101 |
102 | /// 保存配置文件
103 | public static void SaveAppConfig(){
104 | Class.LocalFunction.SaveJsonToFile(App.AppConfigObject , App.AppConfigFilePath);
105 | }
106 |
107 | /// 获取活动网卡实例的设备描述
108 | /// 设备描述
109 | public static String GetNetworkInterfaceInstance() {
110 | NetworkInterface[] ni = NetworkInterface.GetAllNetworkInterfaces();
111 | String InstanceName = "";
112 | foreach(NetworkInterface item in ni) {
113 | if(item.IsReceiveOnly != true
114 | && item.NetworkInterfaceType != NetworkInterfaceType.Loopback
115 | && item.NetworkInterfaceType != NetworkInterfaceType.Tunnel
116 | && item.NetworkInterfaceType != NetworkInterfaceType.Unknown
117 | && item.OperationalStatus == OperationalStatus.Up
118 | && item.GetPhysicalAddress() != PhysicalAddress.None
119 | ) {
120 | InstanceName = item.Description;
121 | }
122 | }
123 | return InstanceName;
124 | }
125 |
126 | /// 字节单位换算
127 | /// 字节计数
128 | /// out 换算后的数据
129 | /// out 换算后的数据的单位
130 | public static void BytesCountUnitScaler_Single(Single _BytesCount,out Single _Value,out String _Unit) {
131 | if(1024<=_BytesCount && _BytesCount<1048576) {//1024²
132 | _Value=_BytesCount/1024;//kbyte
133 | _Unit="KB";
134 | } else if(1048576<=_BytesCount && _BytesCount<1073741824) {//1024³
135 | _Value=_BytesCount/1048576;//mbyte
136 | _Unit="MB";
137 | } else if(1073741824<=_BytesCount && _BytesCount<1099511627776) {//1024⁴
138 | _Value=_BytesCount/1073741824;//gbyte
139 | _Unit="GB";
140 | }else {
141 | _Value=_BytesCount;//byte
142 | _Unit="B";
143 | }
144 | }
145 | #endregion
146 |
147 | #region 处理器状态
148 | /// 获得系统处理器性能计数器
149 | /// 处理器总负载
150 | /// KcptunGUI的处理器占用
151 | public static void GetPerformanceCounter_Processor(out PerformanceCounter _pc1,out PerformanceCounter _pc2) {
152 | _pc1=new PerformanceCounter("Processor","% Processor Time","_Total");
153 | _pc2=new PerformanceCounter("Process","% Processor Time",App.AppProcess.ProcessName);
154 | }
155 |
156 | /// 获取处理器状态
157 | /// 计数器
158 | /// 已处理的数据
159 | public static String[] GetStatus_Processor(PerformanceCounter[] _pcs) {
160 | String[] Status = {
161 | String.Format("{0:N0}%",_pcs[0].NextValue()),
162 | String.Format("{0:N2}%",_pcs[1].NextValue())
163 | };
164 | return Status;
165 | }
166 | #endregion
167 |
168 | #region 内存状态
169 | /// 获取系统内存计数器
170 | /// out 系统内存总量计数器
171 | /// out 系统可用内存计数器
172 | public static void GetSystemMemoryPerformanceCounter(out PerformanceCounter _pc1,out PerformanceCounter _pc2) {
173 | _pc1=new PerformanceCounter(readOnly:true,instanceName:String.Empty,categoryName:"Memory",counterName: "Commit Limit");//计数器_系统内存总字节
174 | _pc2=new PerformanceCounter(readOnly:true,instanceName:String.Empty,categoryName:"Memory",counterName:"Available Bytes");//计数器_系统当前可用内存字节数
175 | //pcs[2]=new PerformanceCounter(readOnly:true,instanceName:String.Empty,categoryName:"Memory",counterName:"Modified Page List Bytes");//计数器_系统当前"已修改"内存字节数
176 | }
177 |
178 | /// 根据进程名获取内存占用计数器
179 | /// 进程名
180 | /// 进程专用工作集计数器
181 | /// 专用工作集计数器
182 | public static void GetApplicationWorkingSetPrivateMemoryPerformanceCounter(String _ProcessName,out PerformanceCounter _pc) {
183 | _pc=new PerformanceCounter(readOnly:true,instanceName:_ProcessName,categoryName:"Process",counterName: "Working Set - Private");
184 | }
185 |
186 | /// 获取内存状态
187 | /// 计数器
188 | /// 已转化的数据
189 | public static String[] GetStatus_Memory(PerformanceCounter[] pcs){
190 | //当前可用内存
191 | Single AvailableMemory_Bytes = pcs[1].NextValue();
192 | Single AvailableMemory_HumanBytes;
193 | String AvailableMemory_Unit;
194 | BytesCountUnitScaler_Single(AvailableMemory_Bytes,out AvailableMemory_HumanBytes,out AvailableMemory_Unit);
195 | //系统总内存
196 | Single TotalMemory_Bytes = pcs[0].NextValue();
197 | Single TotalMemory_HumanBytes;
198 | String TotalMemory_Unit;
199 | BytesCountUnitScaler_Single(TotalMemory_Bytes,out TotalMemory_HumanBytes,out TotalMemory_Unit);
200 | //当前占用内存
201 | Single UsedMemory_Bytes = TotalMemory_Bytes-AvailableMemory_Bytes;
202 | Single UsedMemory_HumanBytes;
203 | String UsedMemory_Unit;
204 | BytesCountUnitScaler_Single(UsedMemory_Bytes,out UsedMemory_HumanBytes,out UsedMemory_Unit);
205 | //内存负载
206 | Single SystemOccupied = UsedMemory_Bytes/TotalMemory_Bytes;//0.05=5%
207 | //本应用程序虚拟内存
208 | Single AppVirtualMemory_Bytes = Process.GetCurrentProcess().VirtualMemorySize64;
209 | Single AppVirtualMemory_HumanBytes;
210 | String AppVirtualMemory_Unit;
211 | BytesCountUnitScaler_Single(AppVirtualMemory_Bytes,out AppVirtualMemory_HumanBytes,out AppVirtualMemory_Unit);
212 | //本应用程序独享内存
213 | Single AppPrivateMemory_Bytes = Process.GetCurrentProcess().PrivateMemorySize64;
214 | Single AppPrivateMemory_HumanBytes;
215 | String AppPrivateMemory_Unit;
216 | BytesCountUnitScaler_Single(AppPrivateMemory_Bytes,out AppPrivateMemory_HumanBytes,out AppPrivateMemory_Unit);
217 | //本应用程序实际内存
218 | Single AppRealMemory_Bytes = pcs[2].NextValue();
219 | Single AppRealMemory_HumanBytes;
220 | String AppRealMemory_Unit;
221 | BytesCountUnitScaler_Single(AppRealMemory_Bytes,out AppRealMemory_HumanBytes,out AppRealMemory_Unit);
222 | //内存状态
223 | String[] Status = {
224 | String.Format("{0:N1}{1} / {2:N1}{3} {4:N1}%",UsedMemory_HumanBytes,UsedMemory_Unit,TotalMemory_HumanBytes,TotalMemory_Unit,SystemOccupied*100),//内存负载: 3.2GB/31.9GB 10.1%
225 | String.Format("{0:N1}{1}",AppVirtualMemory_HumanBytes,AppVirtualMemory_Unit),//应用程序分配的虚拟内存
226 | String.Format("{0:N1}{1}",AppPrivateMemory_HumanBytes,AppPrivateMemory_Unit),//应用程序分配的物理内存
227 | String.Format("{0:N1}{1}",AppRealMemory_HumanBytes,AppRealMemory_Unit)//应用程序分配的专用工作集
228 | };
229 | return Status;
230 | }
231 | #endregion
232 |
233 | /// 获取网络计数器
234 | /// 出网字节计数器
235 | /// 入网字节计数器
236 | public static void GetPerformanceCounter_Network(out PerformanceCounter _pc1,out PerformanceCounter _pc2) {
237 | NetworkInterface ni = null;
238 | NetworkInterface[] nis = NetworkInterface.GetAllNetworkInterfaces();
239 | foreach(NetworkInterface item in nis) {//遍历出活动网卡,一般来说单网卡不会有问题
240 | if(item.IsReceiveOnly != true
241 | && item.NetworkInterfaceType != NetworkInterfaceType.Loopback
242 | && item.NetworkInterfaceType != NetworkInterfaceType.Tunnel
243 | && item.NetworkInterfaceType != NetworkInterfaceType.Unknown
244 | && item.OperationalStatus == OperationalStatus.Up
245 | && item.GetPhysicalAddress() != PhysicalAddress.None
246 | ) {ni = item;}
247 | }
248 | /* fix issue #1 by github@Lensual */
249 | _pc1=(ni.Description.IndexOf("Intel")>-1) ? new PerformanceCounter("Network Interface","Bytes Sent/sec",ni.Description.Replace('(','[').Replace(')',']')) : new PerformanceCounter("Network Interface","Bytes Sent/sec",ni.Description);
250 | _pc2=(ni.Description.IndexOf("Intel")>-1) ? new PerformanceCounter("Network Interface","Bytes Received/sec",ni.Description.Replace('(','[').Replace(')',']')) : new PerformanceCounter("Network Interface","Bytes Received/sec",ni.Description);
251 | }
252 |
253 | /// 获取网络状态
254 | /// 计数器
255 | /// 已处理的数据
256 | public static String[] GetStatus_Network(PerformanceCounter[] _pcs){
257 | //1s内出网字节
258 | Single Sent_Bytes = _pcs[0].NextValue();
259 | Single Sent_HumanBytes;
260 | String Sent_Unit;
261 | BytesCountUnitScaler_Single(Sent_Bytes,out Sent_HumanBytes,out Sent_Unit);
262 | //1s内入网字节
263 | Single Received_Bytes = _pcs[1].NextValue();
264 | Single Received_HumanBytes;
265 | String Received_Unit;
266 | BytesCountUnitScaler_Single(Received_Bytes,out Received_HumanBytes,out Received_Unit);
267 | String[] Status = {
268 | String.Format("{0:N2} {1}/s",Sent_HumanBytes,Sent_Unit),
269 | String.Format("{0:N2} {1}/s",Received_HumanBytes,Received_Unit)
270 | };
271 | return Status;
272 | }
273 | //
274 | }
275 | }
--------------------------------------------------------------------------------
/KcptunGUI/KcptunGUI.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | AnyCPU
7 | {E8AB7C42-3E50-436D-8171-DAE15E9C7522}
8 | WinExe
9 | Properties
10 | KcptunGUI
11 | KcptunGUI
12 | v4.5
13 | 512
14 | {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
15 | 4
16 |
17 | false
18 |
19 |
20 | 发布\
21 | true
22 | Disk
23 | false
24 | Foreground
25 | 7
26 | Days
27 | false
28 | false
29 | true
30 | 0
31 | 1.0.0.0
32 | false
33 | true
34 |
35 |
36 | AnyCPU
37 | true
38 | full
39 | false
40 | bin\Debug\Any\
41 | DEBUG;TRACE
42 | prompt
43 | 4
44 | NativeRecommendedRules.ruleset
45 | true
46 | true
47 | false
48 | true
49 |
50 |
51 | AnyCPU
52 | none
53 | true
54 | bin\Release\Any\
55 | TRACE
56 | prompt
57 | 4
58 | false
59 | Auto
60 | true
61 |
62 |
63 |
64 |
65 | KcptunGUI.App
66 |
67 |
68 | app.ico
69 |
70 |
71 |
72 | true
73 | bin\Debug\x64\
74 | DEBUG;TRACE
75 | true
76 | full
77 | x64
78 | prompt
79 | NativeRecommendedRules.ruleset
80 | false
81 |
82 |
83 | bin\Release\x64\
84 | true
85 | pdbonly
86 | x64
87 | prompt
88 | MinimumRecommendedRules.ruleset
89 | false
90 |
91 |
92 | true
93 | bin\Debug\x86\
94 | DEBUG;TRACE
95 | true
96 | full
97 | x86
98 | prompt
99 | NativeRecommendedRules.ruleset
100 | false
101 | false
102 |
103 |
104 | bin\Release\x86\
105 | true
106 | pdbonly
107 | x86
108 | prompt
109 | MinimumRecommendedRules.ruleset
110 | false
111 | TRACE
112 |
113 |
114 | false
115 |
116 |
117 |
118 |
119 |
120 |
121 | false
122 |
123 |
124 |
125 |
126 | app.manifest
127 |
128 |
129 |
130 | ..\packages\MaterialDesignColors.1.1.3\lib\net45\MaterialDesignColors.dll
131 | True
132 |
133 |
134 | ..\packages\MaterialDesignThemes.2.2.1.750\lib\net45\MaterialDesignThemes.Wpf.dll
135 | True
136 |
137 |
138 | ..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll
139 | True
140 |
141 |
142 | ..\packages\Newtonsoft.Json.Schema.2.0.8\lib\net45\Newtonsoft.Json.Schema.dll
143 | True
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 | 4.0
153 |
154 |
155 |
156 |
157 |
158 | ..\packages\Extended.Wpf.Toolkit.3.0\lib\net40\Xceed.Wpf.AvalonDock.dll
159 | True
160 |
161 |
162 | ..\packages\Extended.Wpf.Toolkit.3.0\lib\net40\Xceed.Wpf.AvalonDock.Themes.Aero.dll
163 | True
164 |
165 |
166 | ..\packages\Extended.Wpf.Toolkit.3.0\lib\net40\Xceed.Wpf.AvalonDock.Themes.Metro.dll
167 | True
168 |
169 |
170 | ..\packages\Extended.Wpf.Toolkit.3.0\lib\net40\Xceed.Wpf.AvalonDock.Themes.VS2010.dll
171 | True
172 |
173 |
174 | ..\packages\Extended.Wpf.Toolkit.3.0\lib\net40\Xceed.Wpf.DataGrid.dll
175 | True
176 |
177 |
178 | ..\packages\Extended.Wpf.Toolkit.3.0\lib\net40\Xceed.Wpf.Toolkit.dll
179 | True
180 |
181 |
182 |
183 |
184 | MSBuild:Compile
185 | Designer
186 |
187 |
188 |
189 |
190 |
191 | MainWindow.xaml
192 |
193 |
194 | App.xaml
195 | Code
196 |
197 |
198 | About.xaml
199 |
200 |
201 | ClientMode.xaml
202 |
203 |
204 | Configure.xaml
205 |
206 |
207 | ServerMode.xaml
208 |
209 |
210 | Status.xaml
211 |
212 |
213 | MSBuild:Compile
214 | Designer
215 |
216 |
217 | Designer
218 | MSBuild:Compile
219 |
220 |
221 | Designer
222 | MSBuild:Compile
223 |
224 |
225 | Designer
226 | MSBuild:Compile
227 |
228 |
229 | Designer
230 | MSBuild:Compile
231 |
232 |
233 | Designer
234 | MSBuild:Compile
235 |
236 |
237 |
238 |
239 | Code
240 |
241 |
242 | True
243 | True
244 | Resources.resx
245 |
246 |
247 | True
248 | Settings.settings
249 | True
250 |
251 |
252 | ResXFileCodeGenerator
253 | Resources.Designer.cs
254 | Designer
255 |
256 |
257 |
258 |
259 |
260 | SettingsSingleFileGenerator
261 | Settings.Designer.cs
262 |
263 |
264 |
265 | Always
266 |
267 |
268 |
269 |
270 | False
271 | .NET Framework 3.5 SP1 Client Profile
272 | false
273 |
274 |
275 | False
276 | .NET Framework 3.5 SP1
277 | true
278 |
279 |
280 |
281 |
282 |
283 |
284 |
285 |
286 |
287 |
288 | {31173083-171c-4488-8ca2-c01d3651e15e}
289 | KcptunGUI.Resource
290 |
291 |
292 |
293 |
294 |
295 |
296 |
303 |
--------------------------------------------------------------------------------
/KcptunGUI/MainWindow.xaml:
--------------------------------------------------------------------------------
1 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
--------------------------------------------------------------------------------
/KcptunGUI/MainWindow.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Diagnostics;
3 | using System.Windows;
4 | using System.Windows.Controls;
5 | using System.Windows.Interop;
6 |
7 | namespace KcptunGUI {
8 | ///
9 | /// MainWindow.xaml 的交互逻辑
10 | ///
11 | public partial class MainWindow : Window {
12 | public static SubFrame.ClientMode pageClientMode;
13 | public static SubFrame.ServerMode pageServerMode;
14 | public static SubFrame.Configure pageConfigure;
15 | public static SubFrame.Status pageStatus;
16 | public static SubFrame.About pageAbout;
17 | //public static SubFrame.Helper pageHelper;
18 | public MainWindow(){
19 | InitializeComponent();
20 | this.Loaded += MainWindow_Loaded;//窗体加载完成
21 | this.Closing += MainWindow_Closing;//窗口即将关闭,可取消
22 | this.Closed += MainWindow_Closed;//窗口已确定将关闭,不可取消
23 | }
24 |
25 | #region 初始化
26 | private void MainWindow_Loaded( object sender , RoutedEventArgs e ) {//窗体加载完成
27 | if( App.AppConfigObject.RememberWinLocation && App.AppConfigObject.WinLocation[0] != 0 && App.AppConfigObject.WinLocation[1] != 0 ) {
28 | this.Top = Convert.ToDouble(App.AppConfigObject.WinLocation[0]);
29 | this.Left = Convert.ToDouble(App.AppConfigObject.WinLocation[1]);
30 | } else {
31 | this.Top = ( SystemParameters.PrimaryScreenHeight / 2 ) - ( this.ActualHeight/2 );
32 | this.Left = ( SystemParameters.PrimaryScreenWidth / 2 ) - ( this.ActualWidth/2 );
33 | }
34 | //托盘
35 | App.nicon.Icon = KcptunGUI.Resource.图标.ico_64x64_appicon;
36 | App.nicon.Text = App.AppName + " " + App.AppVersion;
37 | App.nicon.Visible = true;
38 | App.nicon.MouseClick += Nicon_MouseClick;
39 | App.nicon.ContextMenuStrip = new System.Windows.Forms.ContextMenuStrip();
40 | System.Windows.Forms.ToolStripMenuItem[] tsmi = new System.Windows.Forms.ToolStripMenuItem[1];
41 | tsmi[0] = new System.Windows.Forms.ToolStripMenuItem(){
42 | Name="NIcon_ToolStripMenuItem_ExitApp",
43 | Image = KcptunGUI.Resource.图片.png_none,
44 | ImageScaling=System.Windows.Forms.ToolStripItemImageScaling.SizeToFit
45 | };
46 | for(Int32 i=0;i窗口即将关闭,可取消
64 | private void MainWindow_Closing( object sender , System.ComponentModel.CancelEventArgs e ) {}
65 |
66 | /// 窗口已确定将关闭
67 | private void MainWindow_Closed( object sender , EventArgs e ) {
68 | //if (cmdp_isRun == true) {MainWindow_StopKcptun_Click(null, null);}
69 | App.AppConfigObject.WinLocation[0] = Convert.ToInt32(this.Top);
70 | App.AppConfigObject.WinLocation[1] = Convert.ToInt32(this.Left);
71 | Class.LocalFunction.SaveAppConfig();
72 | App.nicon.Visible = false;
73 | }
74 |
75 | /// 加载全球化文本
76 | public void MainWindow_I18N() {
77 | this.MainWindow_TextBlock_AppVersion.Text = "Version: " + App.AppVersion;
78 | this.MainWindow_ListBoxItem_ClientMode.Content = Class.LocalFunction.GetString(this.MainWindow_ListBoxItem_ClientMode.Uid);
79 | this.MainWindow_ListBoxItem_ServerMode.Content = Class.LocalFunction.GetString(this.MainWindow_ListBoxItem_ServerMode.Uid);
80 | this.MainWindow_ListBoxItem_Configure.Content = Class.LocalFunction.GetString(this.MainWindow_ListBoxItem_Configure.Uid);
81 | this.MainWindow_ListBoxItem_Status.Content = Class.LocalFunction.GetString(this.MainWindow_ListBoxItem_Status.Uid);
82 | this.MainWindow_ListBoxItem_About.Content =Class.LocalFunction.GetString(this.MainWindow_ListBoxItem_About.Uid);
83 | App.nicon.ContextMenuStrip.Items[0].Text=Class.LocalFunction.GetString(0);
84 | }
85 | #endregion
86 |
87 | #region 控件事件响应
88 | /// 根据x:Name响应Button.Click
89 | private void Button_Clicked(Object sender,RoutedEventArgs e) {
90 | Button thisButton = sender as Button;
91 | switch(thisButton.Name){
92 | case "MainWindow_Button_ViewSrcOnGitHub":
93 | Process.Start("https://github.com/ragnaroks/KcptunGUI");
94 | break;
95 | case "MainWindow_Button_ViewSrcOnOSchina":
96 | Process.Start("https://git.oschina.net/ragnaroks/KcptunGUI");
97 | break;
98 | case "MainWindow_Button_GetHelp":
99 | Process.Start("https://github.com/ragnaroks/KcptunGUI/wiki");
100 | break;
101 | case "MainWindow_Button_GetHelp2":
102 | Process.Start("https://git.oschina.net/ragnaroks/KcptunGUI/wikis");
103 | break;
104 | default:break;
105 | }
106 | }
107 |
108 | /// 根据x:Name响应CheckBox.Checked,单选框选择
109 | private void CheckBox_Checked(object sender, RoutedEventArgs e){
110 | CheckBox thisCheckBox = sender as CheckBox;
111 | if( false == thisCheckBox.IsMouseOver ) { return; }
112 | switch (thisCheckBox.Name) {
113 | case "KcptunConfig_Compress":
114 | break;
115 | default:break;
116 | }
117 | }
118 |
119 | /// 根据x:Name响应CheckBox.Unchecked,单选框取消选择
120 | private void CheckBox_Unchecked(object sender, RoutedEventArgs e){
121 | CheckBox thisCheckBox = sender as CheckBox;
122 | if (false == thisCheckBox.IsMouseOver) { return; }
123 | switch (thisCheckBox.Name){
124 | case "KcptunConfig_Compress":
125 | break;
126 | default:
127 | break;
128 | }
129 | }
130 |
131 | /// 根据x:Name响应TextBox.TextChanged,输入框变动
132 | private void TextBox_TextChanged(object sender, TextChangedEventArgs e){
133 | TextBox thisTextBox = sender as TextBox;
134 | switch (thisTextBox.Name) {
135 | case "MainWindow_LogsText":
136 | //this.MainWindow_LogsView.ScrollToBottom();
137 | break;
138 | case "KcptunConfig_Server":
139 | break;
140 | default:
141 | break;
142 | }
143 | }
144 |
145 | /// 根据x:Name响应TextBox.LostKeyboardFocus,输入框丢失键盘焦点
146 | private void TextBox_LostKeyboardFocus(object sender,System.Windows.Input.KeyboardFocusChangedEventArgs e) {
147 | TextBox thisTextBox = sender as TextBox;
148 | switch(thisTextBox.Name) {
149 | case "KcptunConfig_MTU":
150 | break;
151 | default: break;
152 | }
153 | }
154 |
155 | /// 根据x:Name响应ComboBox.SelectionChanged,下拉选单变动
156 | private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e){
157 | ComboBox thisComboBox = sender as ComboBox;
158 | switch (thisComboBox.Name) {
159 | case "KcptunConfig_SystemBit":
160 | break;
161 | default:
162 | break;
163 | }
164 | }
165 |
166 | /// 根据x:Name响应ListBoxItem.MouseLeftButtonUp,响应ListBoxItem鼠标左键松开
167 | private void ListBoxItem_MouseLeftButtonUp(object sender,System.Windows.Input.MouseButtonEventArgs e) {
168 | ListBoxItem thisListBoxItem = sender as ListBoxItem;
169 | if(!thisListBoxItem.IsMouseOver) { return; }
170 | switch(thisListBoxItem.Name) {
171 | case "MainWindow_ListBoxItem_ClientMode":
172 | this.MainWindow_Frame_ViewArea.Content = pageClientMode;
173 | break;
174 | case "MainWindow_ListBoxItem_ServerMode":
175 | this.MainWindow_Frame_ViewArea.Content = pageServerMode;
176 | break;
177 | case "MainWindow_ListBoxItem_Configure":
178 | this.MainWindow_Frame_ViewArea.Content = pageConfigure;
179 | break;
180 | case "MainWindow_ListBoxItem_About":
181 | this.MainWindow_Frame_ViewArea.Content = pageAbout;
182 | break;
183 | case "MainWindow_ListBoxItem_Status":
184 | this.MainWindow_Frame_ViewArea.Content = pageStatus;
185 | break;
186 | default: break;
187 | }
188 | if(App.AppConfigObject.TabAutoHide) { this.MainWindow_ToggleButton_ToggleMenu.IsChecked = false; }
189 | }
190 |
191 | /// 托盘鼠标点击事件
192 | private void Nicon_MouseClick(object _sender,System.Windows.Forms.MouseEventArgs _e) {
193 | switch(_e.Button) {
194 | default:
195 | case System.Windows.Forms.MouseButtons.Left: //按下鼠标左键,显示/隐藏窗口
196 | App.nicon.ContextMenuStrip.Hide();
197 | if(Class.LocalFunction.IsWindowVisible(new WindowInteropHelper(this).Handle)) {
198 | this.Hide();
199 | }
200 | else {
201 | this.Show();
202 | this.WindowState = WindowState.Normal;
203 | }
204 | break;
205 | case System.Windows.Forms.MouseButtons.Right: //按下鼠标右键,显示菜单
206 | App.nicon.ContextMenuStrip.Show();
207 | break;
208 | }
209 | }
210 |
211 | /// 根据x:Name响应ToolStripMenuItem.Click,菜单点击事件
212 | private void ToolStripMenuItem_Click(object _sender,EventArgs _e){
213 | System.Windows.Forms.ToolStripMenuItem thisToolStripMenuItem = _sender as System.Windows.Forms.ToolStripMenuItem;
214 | switch(thisToolStripMenuItem.Name) {
215 | case "NIcon_ToolStripMenuItem_ExitApp":
216 | this.Close();
217 | break;
218 | default:break;
219 | }
220 | }
221 | #endregion
222 |
223 | ///
224 | ///
225 | ///
226 | ///
227 | ///
228 | private void MainWindow_RunKcptun_Click(object sender, RoutedEventArgs e){
229 | var cmdp= new Process();
230 | cmdp.StartInfo.CreateNoWindow = true;
231 | //cmdp.StartInfo.FileName = Environment.CurrentDirectory +"\\"+ (Properties.Settings.Default.setKcptunConfig_SystemBit.Equals(0) ? "client_windows_386.exe" : "client_windows_amd64.exe");
232 | //cmdp.StartInfo.Arguments = strKcptunArgvs;
233 | cmdp.StartInfo.WorkingDirectory = Environment.CurrentDirectory;
234 | cmdp.StartInfo.UseShellExecute = false;
235 | cmdp.StartInfo.RedirectStandardInput = true;
236 | cmdp.StartInfo.RedirectStandardOutput = true;
237 | cmdp.StartInfo.RedirectStandardError = true;
238 | cmdp.ErrorDataReceived += Cmdp_ErrorDataReceived;
239 | cmdp.Start();
240 | cmdp.BeginErrorReadLine();
241 | //cmdp_isRun = true;
242 | //this.MainWindow_LogsText.Text += "\nKcptun已后台运行,监听本地" + Properties.Settings.Default.setKcptunConfig_LocalPort + "端口";
243 | //nicon.ShowBalloonTip(1500, App.AppName + " " + App.AppVersion, "Kcptun已后台运行,监听本地" + Properties.Settings.Default.setKcptunConfig_LocalPort + "端口", System.Windows.Forms.ToolTipIcon.Info);
244 | //this.MainWindow_RunKcptun.IsEnabled = false; this.MainWindow_StopKcptun.IsEnabled = true;
245 | }
246 |
247 | ///
248 | ///
249 | ///
250 | ///
251 | ///
252 | private void Cmdp_ErrorDataReceived(object sender, DataReceivedEventArgs e){
253 | this.Dispatcher.Invoke(new Action(delegate {
254 | //this.MainWindow_LogsText.Text += "\n" + e.Data;
255 | }));
256 | }
257 |
258 | ///
259 | ///
260 | ///
261 | ///
262 | ///
263 | private void MainWindow_StopKcptun_Click(object sender, RoutedEventArgs e){
264 | /*
265 | cmdp.CancelErrorRead(); cmdp.Kill(); cmdp_isRun = false;
266 | this.MainWindow_LogsText.Text += "\nKcptun已停止运行," + Properties.Settings.Default.setKcptunConfig_LocalPort + "端口已释放";
267 | nicon.ShowBalloonTip(1500, App.AppName + " " + App.AppVersion, "Kcptun已停止运行," + Properties.Settings.Default.setKcptunConfig_LocalPort + "端口已释放", System.Windows.Forms.ToolTipIcon.Info);
268 | this.MainWindow_RunKcptun.IsEnabled = true; this.MainWindow_StopKcptun.IsEnabled = false;
269 | */
270 | }
271 |
272 |
273 | }
274 | }
275 |
--------------------------------------------------------------------------------
/KcptunGUI/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Resources;
3 | using System.Runtime.CompilerServices;
4 | using System.Runtime.InteropServices;
5 | using System.Windows;
6 |
7 | // 有关程序集的常规信息通过以下
8 | // 特性集控制。更改这些特性值可修改
9 | // 与程序集关联的信息。
10 | [assembly: AssemblyTitle("KcptunGUI")]
11 | [assembly: AssemblyDescription("kcptun的Windows用户界面")]
12 | [assembly: AssemblyConfiguration("")]
13 | [assembly: AssemblyCompany("SkyDust")]
14 | [assembly: AssemblyProduct("KcptunGUI")]
15 | [assembly: AssemblyCopyright("Copyright © 2016")]
16 | [assembly: AssemblyTrademark("")]
17 | [assembly: AssemblyCulture("")]
18 |
19 | // 将 ComVisible 设置为 false 使此程序集中的类型
20 | // 对 COM 组件不可见。 如果需要从 COM 访问此程序集中的类型,
21 | // 则将该类型上的 ComVisible 特性设置为 true。
22 | [assembly: ComVisible(false)]
23 |
24 | //若要开始生成可本地化的应用程序,请在
25 | // 中的 .csproj 文件中
26 | //设置 CultureYouAreCodingWith。 例如,如果您在源文件中
27 | //使用的是美国英语,请将 设置为 en-US。 然后取消
28 | //对以下 NeutralResourceLanguage 特性的注释。 更新
29 | //以下行中的“en-US”以匹配项目文件中的 UICulture 设置。
30 |
31 | //[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
32 |
33 |
34 | [assembly: ThemeInfo(
35 | ResourceDictionaryLocation.None, //主题特定资源词典所处位置
36 | //(在页面或应用程序资源词典中
37 | // 未找到某个资源的情况下使用)
38 | ResourceDictionaryLocation.SourceAssembly //常规资源词典所处位置
39 | //(在页面、应用程序或任何主题特定资源词典中
40 | // 未找到某个资源的情况下使用)
41 | )]
42 |
43 |
44 | // 程序集的版本信息由下面四个值组成:
45 | //
46 | // 主版本
47 | // 次版本
48 | // 生成号
49 | // 修订号
50 | //
51 | // 可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值,
52 | // 方法是按如下所示使用“*”:
53 | // [assembly: AssemblyVersion("1.0.*")]
54 | [assembly: AssemblyVersion("0.3.*")]
55 | [assembly: AssemblyFileVersion("0.0.0.0")]
56 |
--------------------------------------------------------------------------------
/KcptunGUI/Properties/Resources.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // 此代码由工具生成。
4 | // 运行时版本:4.0.30319.42000
5 | //
6 | // 对此文件的更改可能会导致不正确的行为,并且如果
7 | // 重新生成代码,这些更改将会丢失。
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace KcptunGUI.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", "4.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("KcptunGUI.Properties.Resources", typeof(Resources).Assembly);
43 | resourceMan = temp;
44 | }
45 | return resourceMan;
46 | }
47 | }
48 |
49 | ///
50 | /// 使用此强类型资源类,为所有资源查找
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 | /// 查找类似 {"LCID":2052,"TabAutoHide":true,"RememberWinLocation":true,"FetchSystemStatus":true,"WinLocation":[0,0],"Nodes":[{"hostname":"too.simple.com","ip":"1.2.4.8","description":"图样主机 - 1","localport":1081,"remoteport":8000,"autoconnect":false}]} 的本地化字符串。
65 | ///
66 | internal static string String_AppConfigJsonDefault {
67 | get {
68 | return ResourceManager.GetString("String_AppConfigJsonDefault", resourceCulture);
69 | }
70 | }
71 |
72 | ///
73 | /// 查找类似 {"$schema":"http://json-schema.org/draft-04/schema#","type":"object","properties":{"LCID":{"type":"integer"},"TabAutoHide":{"type":"boolean"},"RememberWinLocation":{"type":"boolean"},"FetchSystemStatus":{"type":"boolean"},"WinLocation":{"type":"array","items":{"type":"integer"}},"Nodes":{"type":"array","items":{"type":"object","properties":{"hostname":{"type":"string"},"ip":{"type":"string"},"description":{"type":"string"},"localport":{"type":"integer"},"remoteport":{"type":"integer"},"autoconnect":{"type": [字符串的其余部分被截断]"; 的本地化字符串。
74 | ///
75 | internal static string String_AppConfigJsonSchema {
76 | get {
77 | return ResourceManager.GetString("String_AppConfigJsonSchema", resourceCulture);
78 | }
79 | }
80 | }
81 | }
82 |
--------------------------------------------------------------------------------
/KcptunGUI/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 | {"$schema":"http://json-schema.org/draft-04/schema#","type":"object","properties":{"LCID":{"type":"integer"},"TabAutoHide":{"type":"boolean"},"RememberWinLocation":{"type":"boolean"},"FetchSystemStatus":{"type":"boolean"},"WinLocation":{"type":"array","items":{"type":"integer"}},"Nodes":{"type":"array","items":{"type":"object","properties":{"hostname":{"type":"string"},"ip":{"type":"string"},"description":{"type":"string"},"localport":{"type":"integer"},"remoteport":{"type":"integer"},"autoconnect":{"type":"boolean"}},"required":["hostname","ip","description","localport","remoteport","autoconnect"]}}},"required":["LCID","TabAutoHide","RememberWinLocation","FetchSystemStatus","WinLocation","Nodes"]}
122 |
123 |
124 | {"LCID":2052,"TabAutoHide":true,"RememberWinLocation":true,"FetchSystemStatus":true,"WinLocation":[0,0],"Nodes":[{"hostname":"too.simple.com","ip":"1.2.4.8","description":"图样主机 - 1","localport":1081,"remoteport":8000,"autoconnect":false}]}
125 | 内置默认配置json
126 |
127 |
--------------------------------------------------------------------------------
/KcptunGUI/Properties/Settings.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // 此代码由工具生成。
4 | // 运行时版本:4.0.30319.42000
5 | //
6 | // 对此文件的更改可能会导致不正确的行为,并且如果
7 | // 重新生成代码,这些更改将会丢失。
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace KcptunGUI.Properties {
12 |
13 |
14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.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 | }
27 |
--------------------------------------------------------------------------------
/KcptunGUI/Properties/Settings.settings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/KcptunGUI/Resx/readme.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | none
6 |
7 | Resx
8 |
--------------------------------------------------------------------------------
/KcptunGUI/SubFrame/About.xaml:
--------------------------------------------------------------------------------
1 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/KcptunGUI/SubFrame/About.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Threading.Tasks;
6 | using System.Windows;
7 | using System.Windows.Controls;
8 | using System.Windows.Data;
9 | using System.Windows.Documents;
10 | using System.Windows.Input;
11 | using System.Windows.Media;
12 | using System.Windows.Media.Imaging;
13 | using System.Windows.Navigation;
14 | using System.Windows.Shapes;
15 | using System.IO;
16 | using System.Drawing.Imaging;
17 | using System.Windows.Interop;
18 | using System.Collections.ObjectModel;
19 | using System.Net.NetworkInformation;
20 | using System.Diagnostics;
21 |
22 | namespace KcptunGUI.SubFrame {
23 | ///
24 | /// About.xaml 的交互逻辑
25 | ///
26 | public partial class About : Page {
27 | public About() {
28 | InitializeComponent();
29 | this.Loaded += About_Loaded;
30 | this.PageAbout_Image_Icon.Source = Imaging.CreateBitmapSourceFromHBitmap(KcptunGUI.Resource.图片.png_72x72_user_1.GetHbitmap() , IntPtr.Zero , Int32Rect.Empty , BitmapSizeOptions.FromEmptyOptions());
31 |
32 | }
33 |
34 | private void About_Loaded(object sender , RoutedEventArgs e) {
35 | PageAbout_I18N();
36 | }
37 |
38 | /// 加载本地化文本
39 | private void PageAbout_I18N() {
40 | this.PageAbout_TextBlock_PageHeader.Text = Class.LocalFunction.GetString(this.PageAbout_TextBlock_PageHeader.Uid);
41 | }
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/KcptunGUI/SubFrame/ClientMode.xaml:
--------------------------------------------------------------------------------
1 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/KcptunGUI/SubFrame/ClientMode.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Threading.Tasks;
6 | using System.Windows;
7 | using System.Windows.Controls;
8 | using System.Windows.Data;
9 | using System.Windows.Documents;
10 | using System.Windows.Input;
11 | using System.Windows.Media;
12 | using System.Windows.Media.Imaging;
13 | using System.Windows.Navigation;
14 | using System.Windows.Shapes;
15 |
16 | namespace KcptunGUI.SubFrame {
17 | ///
18 | /// ClientMode.xaml 的交互逻辑
19 | ///
20 | public partial class ClientMode : Page {
21 | public ClientMode() {
22 | InitializeComponent();
23 | }
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/KcptunGUI/SubFrame/Configure.xaml:
--------------------------------------------------------------------------------
1 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
--------------------------------------------------------------------------------
/KcptunGUI/SubFrame/Configure.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Windows;
3 | using System.Windows.Controls;
4 | using System.Windows.Interop;
5 | using System.Windows.Media.Imaging;
6 |
7 | namespace KcptunGUI.SubFrame {
8 | ///
9 | /// Configure.xaml 的交互逻辑
10 | ///
11 | public partial class Configure : Page {
12 | public MainWindow _MainWindow { get; set; }
13 | public Configure() {
14 | InitializeComponent(); //PageConfigure
15 | this.Loaded += Configure_Loaded;
16 | this.PageConfigure_Image_Icon.Source = Imaging.CreateBitmapSourceFromHBitmap(KcptunGUI.Resource.图片.png_72x72_configure_1.GetHbitmap() , IntPtr.Zero , Int32Rect.Empty , BitmapSizeOptions.FromEmptyOptions());
17 | PageConfigure_Grid_Configure.DataContext = App.AppConfigObject;
18 | }
19 |
20 | private void Configure_Loaded(object sender , RoutedEventArgs e) {
21 | PageConfigure_I18N();
22 | foreach(ComboBoxItem item in PageConfigure_ComboBox_Setting_Language.Items ) {//显示当前使用的语言
23 | if( item.Tag.ToString() == App.AppConfigObject.LCID.ToString() ) {
24 | item.IsSelected = true; return;
25 | }
26 | }
27 | }
28 |
29 | /// 加载本地化文本
30 | private void PageConfigure_I18N() {
31 | PageConfigure_TextBlock_PageHeader.Text = Class.LocalFunction.GetString(PageConfigure_TextBlock_PageHeader.Uid);
32 | PageConfigure_TextBlock_ConfigureTip.Text = Class.LocalFunction.GetString(PageConfigure_TextBlock_ConfigureTip.Uid);
33 | PageConfigure_TextBlock_Setting_TabAutoHide.Text = Class.LocalFunction.GetString(PageConfigure_TextBlock_Setting_TabAutoHide.Uid);
34 | PageConfigure_TextBlock_Setting_RememberWinLocation.Text = Class.LocalFunction.GetString(PageConfigure_TextBlock_Setting_RememberWinLocation.Uid);
35 | PageConfigure_TextBlock_Setting_FetchSystemStatus.Text = Class.LocalFunction.GetString(PageConfigure_TextBlock_Setting_FetchSystemStatus.Uid);
36 | PageConfigure_TextBlock_Setting_LCID.Text = Class.LocalFunction.GetString(PageConfigure_TextBlock_Setting_LCID.Uid);
37 | PageConfigure_TextBlock_Setting_Language.Text = Class.LocalFunction.GetString(PageConfigure_TextBlock_Setting_Language.Uid);
38 |
39 | }
40 |
41 | /// System.Windows.Controls.Primitives.ToggleButton元素失去焦点的事件
42 | private void ToggleButton_LostFocus(object sender , RoutedEventArgs e) {
43 | //System.Windows.Controls.Primitives.ToggleButton thisToggleButton = (System.Windows.Controls.Primitives.ToggleButton)sender;
44 | Class.LocalFunction.SaveJsonToFile(App.AppConfigObject ,App.AppConfigFilePath);
45 | }
46 |
47 | private void ComboBox_SelectionChanged(object sender , SelectionChangedEventArgs e) {
48 | ComboBox thisComboBox =sender as ComboBox;
49 | switch( thisComboBox.Name ) {
50 | case "PageConfigure_ComboBox_Setting_Language":
51 | PageConfigure_TextBox_Setting_LCID.Text = (thisComboBox.SelectedItem as ComboBoxItem).Tag.ToString();
52 | App.AppConfigObject.LCID = Int32.Parse(PageConfigure_TextBox_Setting_LCID.Text);
53 | App.AppLanguageObject=Class.LocalFunction.LoadLanguageObjectFromJSON(App.AppConfigObject.LCID);
54 | PageConfigure_I18N();
55 | _MainWindow.MainWindow_I18N();
56 | break;
57 | default:break;
58 | }
59 | Class.LocalFunction.SaveJsonToFile(App.AppConfigObject , App.AppConfigFilePath);
60 | }
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/KcptunGUI/SubFrame/ServerMode.xaml:
--------------------------------------------------------------------------------
1 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/KcptunGUI/SubFrame/ServerMode.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Threading.Tasks;
6 | using System.Windows;
7 | using System.Windows.Controls;
8 | using System.Windows.Data;
9 | using System.Windows.Documents;
10 | using System.Windows.Input;
11 | using System.Windows.Media;
12 | using System.Windows.Media.Imaging;
13 | using System.Windows.Navigation;
14 | using System.Windows.Shapes;
15 |
16 | namespace KcptunGUI.SubFrame {
17 | ///
18 | /// ServerMode.xaml 的交互逻辑
19 | ///
20 | public partial class ServerMode : Page {
21 | public ServerMode() {
22 | InitializeComponent();
23 | }
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/KcptunGUI/SubFrame/Status.xaml:
--------------------------------------------------------------------------------
1 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
--------------------------------------------------------------------------------
/KcptunGUI/SubFrame/Status.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Windows;
3 | using System.Windows.Controls;
4 | using System.Windows.Interop;
5 | using System.Windows.Media.Imaging;
6 | using System.Threading;
7 | using System.Diagnostics;
8 | using System.Threading.Tasks;
9 |
10 | namespace KcptunGUI.SubFrame {
11 | ///
12 | /// Status.xaml 的交互逻辑
13 | ///
14 | public partial class Status : Page {
15 | public MainWindow _MainWindow { get; set; }
16 | public Status() {
17 | InitializeComponent();
18 | this.Loaded += Status_Loaded;
19 | this.PageStatus_Image_Icon.Source = Imaging.CreateBitmapSourceFromHBitmap(KcptunGUI.Resource.图片.png_72x72_status_2.GetHbitmap() , IntPtr.Zero , Int32Rect.Empty , BitmapSizeOptions.FromEmptyOptions());
20 | GetOccupyingAsync();
21 | }
22 |
23 | #region 初始化
24 | /// 注意,每次切换到都会触发,不能用做初始化操作
25 | private void Status_Loaded(object sender , RoutedEventArgs e) {
26 | PageStatus_I18N();
27 | }
28 |
29 | /// 加载本地化文本
30 | private void PageStatus_I18N() {
31 | PageStatus_TextBlock_PageHeader.Text = Class.LocalFunction.GetString(PageStatus_TextBlock_PageHeader.Uid);
32 | //CPU
33 | PageStatus_TextBlock_ProcessorCardHeader.Text = Class.LocalFunction.GetString(PageStatus_TextBlock_ProcessorCardHeader.Uid);
34 | PageStatus_TextBlock_ProcessorCardSystemOccupyingPretext.Text = Class.LocalFunction.GetString(PageStatus_TextBlock_ProcessorCardSystemOccupyingPretext.Uid);
35 | PageStatus_TextBlock_ProcessorCardApplicationOccupyingPretext.Text = Class.LocalFunction.GetString(PageStatus_TextBlock_ProcessorCardApplicationOccupyingPretext.Uid);
36 | //Memory
37 | PageStatus_TextBlock_MemoryCardHeader.Text = Class.LocalFunction.GetString(PageStatus_TextBlock_MemoryCardHeader.Uid);
38 | PageStatus_TextBlock_MemoryCardSystemOccupyiedPretext.Text = Class.LocalFunction.GetString(PageStatus_TextBlock_MemoryCardSystemOccupyiedPretext.Uid);
39 | PageStatus_TextBlock_MemoryCardApplocationOccupyiedPretext.Text = Class.LocalFunction.GetString(PageStatus_TextBlock_MemoryCardApplocationOccupyiedPretext.Uid);
40 | //Network
41 | PageStatus_TextBlock_NetworkCardHeader.Text = Class.LocalFunction.GetString(PageStatus_TextBlock_NetworkCardHeader.Uid);
42 | PageStatus_TextBlock_NetworkCardSystemUploadPretext.Text = Class.LocalFunction.GetString( PageStatus_TextBlock_NetworkCardSystemUploadPretext.Uid);
43 | PageStatus_TextBlock_NetworkCardSystemDownloadPretext.Text = Class.LocalFunction.GetString( PageStatus_TextBlock_NetworkCardSystemDownloadPretext.Uid);
44 | }
45 | #endregion
46 |
47 | #region 读取系统状态
48 | /// 读取系统状态
49 | private async void GetOccupyingAsync() {
50 | await Task.Run( () => GetOccupyingDataAsync() );
51 | }
52 | /// 异步获取系统状态
53 | /// 无
54 | private void GetOccupyingDataAsync() {
55 | //处理器
56 | PerformanceCounter[] counter_Processor = new PerformanceCounter[2];//处理器计数器
57 | Class.LocalFunction.GetPerformanceCounter_Processor(out counter_Processor[0],out counter_Processor[1]);//系统负载,KcptunGUI的占用
58 | //内存
59 | PerformanceCounter[] counter_Memory = new PerformanceCounter[3];//内存计数器
60 | Class.LocalFunction.GetSystemMemoryPerformanceCounter(out counter_Memory[0],out counter_Memory[1]);//系统总内存,系统可用总内存
61 | Class.LocalFunction.GetApplicationWorkingSetPrivateMemoryPerformanceCounter(App.AppProcess.ProcessName,out counter_Memory[2]);//本程序专用工作集
62 | //网络
63 | PerformanceCounter[] counter_Network = new PerformanceCounter[2];//网络计数器
64 | Class.LocalFunction.GetPerformanceCounter_Network(out counter_Network[0],out counter_Network[1]);//出网字节,入网字节
65 | //数据处理
66 | while( true ) {
67 | if( App.AppConfigObject.FetchSystemStatus ) {
68 | String[] value_Processor = Class.LocalFunction.GetStatus_Processor(counter_Processor);//处理器状态数据
69 | String[] value_Memory = Class.LocalFunction.GetStatus_Memory(counter_Memory);//内存状态数据
70 | String[] value_Network = Class.LocalFunction.GetStatus_Network(counter_Network);//网络状态数据
71 | this.Dispatcher.Invoke(
72 | () => {
73 | //处理器
74 | this.PageStatus_TextBlock_ProcessorCardSystemOccupyingText.Text =value_Processor[0];
75 | this.PageStatus_TextBlock_ProcessorCardApplicationOccupyingText.Text = value_Processor[1];
76 | //网络
77 | this.PageStatus_TextBlock_NetworkCardSystemUploadText.Text = value_Network[0];
78 | this.PageStatus_TextBlock_NetworkCardSystemDownloadText.Text = value_Network[1];
79 | //内存
80 | this.PageStatus_TextBlock_MemoryCardSystemOccupyiedText.Text=value_Memory[0];
81 | this.PageStatus_TextBlock_MemoryCardApplocationOccupyiedText.Text=value_Memory[3];
82 | }
83 | );
84 | }
85 | Thread.Sleep( 1000 );
86 | }
87 | }
88 | #endregion
89 | //
90 | }
91 | }
92 |
--------------------------------------------------------------------------------
/KcptunGUI/app.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ragnaroks/KcptunGUI/fb8821a7ed0e1bd53fbe3a2a5810328cf1c06ff3/KcptunGUI/app.ico
--------------------------------------------------------------------------------
/KcptunGUI/app.manifest:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
55 |
56 |
57 |
58 |
--------------------------------------------------------------------------------
/KcptunGUI/config.json:
--------------------------------------------------------------------------------
1 | {
2 | "LCID": 2052,
3 | "TabAutoHide": true,
4 | "RememberWinLocation": true,
5 | "FetchSystemStatus": true,
6 | "WinLocation": [
7 | 0,
8 | 0
9 | ],
10 | "Nodes": [
11 | {
12 | "hostname": "too.simple.com",
13 | "ip": "1.2.4.8",
14 | "description": "图样主机 - 1",
15 | "localport": 1081,
16 | "remoteport": 8000,
17 | "autoconnect": false
18 | }
19 | ]
20 | }
--------------------------------------------------------------------------------
/KcptunGUI/packages.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/readme.md:
--------------------------------------------------------------------------------
1 | Read on: [https://www.ragnaroks.org/kcptungui/](https://www.ragnaroks.org/kcptungui/)
--------------------------------------------------------------------------------