├── .gitignore
├── Iconizer.sln
├── Iconizer
├── App.config
├── Form1.Designer.cs
├── Form1.cs
├── Form1.resx
├── IconExtractor
│ ├── IconExtractor.cs
│ ├── IconUtil.cs
│ └── NativeMethods.cs
├── Iconizer.cs
├── Iconizer.csproj
├── Program.cs
├── Properties
│ ├── AssemblyInfo.cs
│ ├── Resources.Designer.cs
│ ├── Resources.resx
│ ├── Settings.Designer.cs
│ └── Settings.settings
├── UnitData.cs
└── icon.ico
├── Info
├── Iconizer.exe
└── IconizerDemo.gif
├── LICENSE
└── README.md
/.gitignore:
--------------------------------------------------------------------------------
1 | ## Ignore Visual Studio temporary files, build results, and
2 | ## files generated by popular Visual Studio add-ons.
3 | ##
4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
5 |
6 | # User-specific files
7 | *.suo
8 | *.user
9 | *.userosscache
10 | *.sln.docstates
11 |
12 | # User-specific files (MonoDevelop/Xamarin Studio)
13 | *.userprefs
14 |
15 | # Build results
16 | [Dd]ebug/
17 | [Dd]ebugPublic/
18 | [Rr]elease/
19 | [Rr]eleases/
20 | x64/
21 | x86/
22 | bld/
23 | [Bb]in/
24 | [Oo]bj/
25 | [Ll]og/
26 |
27 | # Visual Studio 2015 cache/options directory
28 | .vs/
29 | # Uncomment if you have tasks that create the project's static files in wwwroot
30 | #wwwroot/
31 |
32 | # MSTest test Results
33 | [Tt]est[Rr]esult*/
34 | [Bb]uild[Ll]og.*
35 |
36 | # NUNIT
37 | *.VisualState.xml
38 | TestResult.xml
39 |
40 | # Build Results of an ATL Project
41 | [Dd]ebugPS/
42 | [Rr]eleasePS/
43 | dlldata.c
44 |
45 | # .NET Core
46 | project.lock.json
47 | project.fragment.lock.json
48 | artifacts/
49 | **/Properties/launchSettings.json
50 |
51 | *_i.c
52 | *_p.c
53 | *_i.h
54 | *.ilk
55 | *.meta
56 | *.obj
57 | *.pch
58 | *.pdb
59 | *.pgc
60 | *.pgd
61 | *.rsp
62 | *.sbr
63 | *.tlb
64 | *.tli
65 | *.tlh
66 | *.tmp
67 | *.tmp_proj
68 | *.log
69 | *.vspscc
70 | *.vssscc
71 | .builds
72 | *.pidb
73 | *.svclog
74 | *.scc
75 |
76 | # Chutzpah Test files
77 | _Chutzpah*
78 |
79 | # Visual C++ cache files
80 | ipch/
81 | *.aps
82 | *.ncb
83 | *.opendb
84 | *.opensdf
85 | *.sdf
86 | *.cachefile
87 | *.VC.db
88 | *.VC.VC.opendb
89 |
90 | # Visual Studio profiler
91 | *.psess
92 | *.vsp
93 | *.vspx
94 | *.sap
95 |
96 | # TFS 2012 Local Workspace
97 | $tf/
98 |
99 | # Guidance Automation Toolkit
100 | *.gpState
101 |
102 | # ReSharper is a .NET coding add-in
103 | _ReSharper*/
104 | *.[Rr]e[Ss]harper
105 | *.DotSettings.user
106 |
107 | # JustCode is a .NET coding add-in
108 | .JustCode
109 |
110 | # TeamCity is a build add-in
111 | _TeamCity*
112 |
113 | # DotCover is a Code Coverage Tool
114 | *.dotCover
115 |
116 | # Visual Studio code coverage results
117 | *.coverage
118 | *.coveragexml
119 |
120 | # NCrunch
121 | _NCrunch_*
122 | .*crunch*.local.xml
123 | nCrunchTemp_*
124 |
125 | # MightyMoose
126 | *.mm.*
127 | AutoTest.Net/
128 |
129 | # Web workbench (sass)
130 | .sass-cache/
131 |
132 | # Installshield output folder
133 | [Ee]xpress/
134 |
135 | # DocProject is a documentation generator add-in
136 | DocProject/buildhelp/
137 | DocProject/Help/*.HxT
138 | DocProject/Help/*.HxC
139 | DocProject/Help/*.hhc
140 | DocProject/Help/*.hhk
141 | DocProject/Help/*.hhp
142 | DocProject/Help/Html2
143 | DocProject/Help/html
144 |
145 | # Click-Once directory
146 | publish/
147 |
148 | # Publish Web Output
149 | *.[Pp]ublish.xml
150 | *.azurePubxml
151 | # TODO: Comment the next line if you want to checkin your web deploy settings
152 | # but database connection strings (with potential passwords) will be unencrypted
153 | *.pubxml
154 | *.publishproj
155 |
156 | # Microsoft Azure Web App publish settings. Comment the next line if you want to
157 | # checkin your Azure Web App publish settings, but sensitive information contained
158 | # in these scripts will be unencrypted
159 | PublishScripts/
160 |
161 | # NuGet Packages
162 | *.nupkg
163 | # The packages folder can be ignored because of Package Restore
164 | **/packages/*
165 | # except build/, which is used as an MSBuild target.
166 | !**/packages/build/
167 | # Uncomment if necessary however generally it will be regenerated when needed
168 | #!**/packages/repositories.config
169 | # NuGet v3's project.json files produces more ignorable files
170 | *.nuget.props
171 | *.nuget.targets
172 |
173 | # Microsoft Azure Build Output
174 | csx/
175 | *.build.csdef
176 |
177 | # Microsoft Azure Emulator
178 | ecf/
179 | rcf/
180 |
181 | # Windows Store app package directories and files
182 | AppPackages/
183 | BundleArtifacts/
184 | Package.StoreAssociation.xml
185 | _pkginfo.txt
186 |
187 | # Visual Studio cache files
188 | # files ending in .cache can be ignored
189 | *.[Cc]ache
190 | # but keep track of directories ending in .cache
191 | !*.[Cc]ache/
192 |
193 | # Others
194 | ClientBin/
195 | ~$*
196 | *~
197 | *.dbmdl
198 | *.dbproj.schemaview
199 | *.jfm
200 | *.pfx
201 | *.publishsettings
202 | orleans.codegen.cs
203 |
204 | # Since there are multiple workflows, uncomment next line to ignore bower_components
205 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
206 | #bower_components/
207 |
208 | # RIA/Silverlight projects
209 | Generated_Code/
210 |
211 | # Backup & report files from converting an old project file
212 | # to a newer Visual Studio version. Backup files are not needed,
213 | # because we have git ;-)
214 | _UpgradeReport_Files/
215 | Backup*/
216 | UpgradeLog*.XML
217 | UpgradeLog*.htm
218 |
219 | # SQL Server files
220 | *.mdf
221 | *.ldf
222 | *.ndf
223 |
224 | # Business Intelligence projects
225 | *.rdl.data
226 | *.bim.layout
227 | *.bim_*.settings
228 |
229 | # Microsoft Fakes
230 | FakesAssemblies/
231 |
232 | # GhostDoc plugin setting file
233 | *.GhostDoc.xml
234 |
235 | # Node.js Tools for Visual Studio
236 | .ntvs_analysis.dat
237 | node_modules/
238 |
239 | # Typescript v1 declaration files
240 | typings/
241 |
242 | # Visual Studio 6 build log
243 | *.plg
244 |
245 | # Visual Studio 6 workspace options file
246 | *.opt
247 |
248 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
249 | *.vbw
250 |
251 | # Visual Studio LightSwitch build output
252 | **/*.HTMLClient/GeneratedArtifacts
253 | **/*.DesktopClient/GeneratedArtifacts
254 | **/*.DesktopClient/ModelManifest.xml
255 | **/*.Server/GeneratedArtifacts
256 | **/*.Server/ModelManifest.xml
257 | _Pvt_Extensions
258 |
259 | # Paket dependency manager
260 | .paket/paket.exe
261 | paket-files/
262 |
263 | # FAKE - F# Make
264 | .fake/
265 |
266 | # JetBrains Rider
267 | .idea/
268 | *.sln.iml
269 |
270 | # CodeRush
271 | .cr/
272 |
273 | # Python Tools for Visual Studio (PTVS)
274 | __pycache__/
275 | *.pyc
276 |
277 | # Cake - Uncomment if you are using it
278 | # tools/**
279 | # !tools/packages.config
280 |
281 | # Telerik's JustMock configuration file
282 | *.jmconfig
283 |
284 | # BizTalk build output
285 | *.btp.cs
286 | *.btm.cs
287 | *.odx.cs
288 | *.xsd.cs
289 |
--------------------------------------------------------------------------------
/Iconizer.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio 14
4 | VisualStudioVersion = 14.0.23107.0
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Iconizer", "Iconizer\Iconizer.csproj", "{664F93DD-773F-410E-95DB-4C35DC3B9616}"
7 | EndProject
8 | Global
9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
10 | Debug|Any CPU = Debug|Any CPU
11 | Debug|x64 = Debug|x64
12 | Release|Any CPU = Release|Any CPU
13 | Release|x64 = Release|x64
14 | EndGlobalSection
15 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
16 | {664F93DD-773F-410E-95DB-4C35DC3B9616}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
17 | {664F93DD-773F-410E-95DB-4C35DC3B9616}.Debug|Any CPU.Build.0 = Debug|Any CPU
18 | {664F93DD-773F-410E-95DB-4C35DC3B9616}.Debug|x64.ActiveCfg = Debug|x64
19 | {664F93DD-773F-410E-95DB-4C35DC3B9616}.Debug|x64.Build.0 = Debug|x64
20 | {664F93DD-773F-410E-95DB-4C35DC3B9616}.Release|Any CPU.ActiveCfg = Release|Any CPU
21 | {664F93DD-773F-410E-95DB-4C35DC3B9616}.Release|Any CPU.Build.0 = Release|Any CPU
22 | {664F93DD-773F-410E-95DB-4C35DC3B9616}.Release|x64.ActiveCfg = Release|x64
23 | {664F93DD-773F-410E-95DB-4C35DC3B9616}.Release|x64.Build.0 = Release|x64
24 | EndGlobalSection
25 | GlobalSection(SolutionProperties) = preSolution
26 | HideSolutionNode = FALSE
27 | EndGlobalSection
28 | EndGlobal
29 |
--------------------------------------------------------------------------------
/Iconizer/App.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/Iconizer/Form1.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace Iconizer
2 | {
3 | partial class Form1
4 | {
5 | ///
6 | /// Required designer variable.
7 | ///
8 | private System.ComponentModel.IContainer components = null;
9 |
10 | ///
11 | /// Clean up any resources being used.
12 | ///
13 | /// true if managed resources should be disposed; otherwise, false.
14 | protected override void Dispose(bool disposing)
15 | {
16 | if (disposing && (components != null))
17 | {
18 | components.Dispose();
19 | }
20 | base.Dispose(disposing);
21 | }
22 |
23 | #region Windows Form Designer generated code
24 |
25 | ///
26 | /// Required method for Designer support - do not modify
27 | /// the contents of this method with the code editor.
28 | ///
29 | private void InitializeComponent()
30 | {
31 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
32 | this._options = new System.Windows.Forms.CheckedListBox();
33 | this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
34 | this._clear = new System.Windows.Forms.Button();
35 | this._add = new System.Windows.Forms.Button();
36 | this.label1 = new System.Windows.Forms.Label();
37 | this._saveQuick = new System.Windows.Forms.Button();
38 | this._saveFull = new System.Windows.Forms.Button();
39 | this._view = new System.Windows.Forms.ListView();
40 | this._openDiag = new System.Windows.Forms.OpenFileDialog();
41 | this._saveDiag = new System.Windows.Forms.FolderBrowserDialog();
42 | this.tableLayoutPanel1.SuspendLayout();
43 | this.SuspendLayout();
44 | //
45 | // _options
46 | //
47 | this._options.ColumnWidth = 90;
48 | this._options.Dock = System.Windows.Forms.DockStyle.Fill;
49 | this._options.FormattingEnabled = true;
50 | this._options.Items.AddRange(new object[] {
51 | "8px",
52 | "16px",
53 | "32px",
54 | "48px",
55 | "64px",
56 | "128px",
57 | "256px",
58 | "Keep Crisp",
59 | "Keep Ratio"});
60 | this._options.Location = new System.Drawing.Point(165, 3);
61 | this._options.MultiColumn = true;
62 | this._options.Name = "_options";
63 | this.tableLayoutPanel1.SetRowSpan(this._options, 2);
64 | this._options.Size = new System.Drawing.Size(303, 54);
65 | this._options.TabIndex = 0;
66 | //
67 | // tableLayoutPanel1
68 | //
69 | this.tableLayoutPanel1.ColumnCount = 4;
70 | this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 162F));
71 | this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
72 | this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 110F));
73 | this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 103F));
74 | this.tableLayoutPanel1.Controls.Add(this._clear, 2, 1);
75 | this.tableLayoutPanel1.Controls.Add(this._add, 2, 0);
76 | this.tableLayoutPanel1.Controls.Add(this.label1, 0, 0);
77 | this.tableLayoutPanel1.Controls.Add(this._options, 1, 0);
78 | this.tableLayoutPanel1.Controls.Add(this._saveQuick, 3, 0);
79 | this.tableLayoutPanel1.Controls.Add(this._saveFull, 3, 1);
80 | this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Top;
81 | this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);
82 | this.tableLayoutPanel1.Name = "tableLayoutPanel1";
83 | this.tableLayoutPanel1.RowCount = 2;
84 | this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
85 | this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
86 | this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
87 | this.tableLayoutPanel1.Size = new System.Drawing.Size(684, 60);
88 | this.tableLayoutPanel1.TabIndex = 1;
89 | //
90 | // _clear
91 | //
92 | this._clear.Dock = System.Windows.Forms.DockStyle.Fill;
93 | this._clear.Location = new System.Drawing.Point(474, 33);
94 | this._clear.Name = "_clear";
95 | this._clear.Size = new System.Drawing.Size(104, 24);
96 | this._clear.TabIndex = 3;
97 | this._clear.Text = "Clear";
98 | this._clear.UseVisualStyleBackColor = true;
99 | this._clear.Click += new System.EventHandler(this._clear_Click);
100 | //
101 | // _add
102 | //
103 | this._add.Dock = System.Windows.Forms.DockStyle.Fill;
104 | this._add.Location = new System.Drawing.Point(474, 3);
105 | this._add.Name = "_add";
106 | this._add.Size = new System.Drawing.Size(104, 24);
107 | this._add.TabIndex = 4;
108 | this._add.Text = "Add ...";
109 | this._add.UseVisualStyleBackColor = true;
110 | this._add.Click += new System.EventHandler(this._add_Click);
111 | //
112 | // label1
113 | //
114 | this.label1.AutoSize = true;
115 | this.label1.Cursor = System.Windows.Forms.Cursors.Help;
116 | this.label1.Dock = System.Windows.Forms.DockStyle.Fill;
117 | this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 24F);
118 | this.label1.Location = new System.Drawing.Point(3, 0);
119 | this.label1.Name = "label1";
120 | this.tableLayoutPanel1.SetRowSpan(this.label1, 2);
121 | this.label1.Size = new System.Drawing.Size(156, 60);
122 | this.label1.TabIndex = 0;
123 | this.label1.Text = "Iconizer";
124 | this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
125 | this.label1.Click += new System.EventHandler(this.label1_Click);
126 | //
127 | // _saveQuick
128 | //
129 | this._saveQuick.Dock = System.Windows.Forms.DockStyle.Fill;
130 | this._saveQuick.Location = new System.Drawing.Point(584, 3);
131 | this._saveQuick.Name = "_saveQuick";
132 | this._saveQuick.Size = new System.Drawing.Size(97, 24);
133 | this._saveQuick.TabIndex = 1;
134 | this._saveQuick.Text = "Quick Save";
135 | this._saveQuick.UseVisualStyleBackColor = true;
136 | this._saveQuick.Click += new System.EventHandler(this._saveQuick_Click);
137 | //
138 | // _saveFull
139 | //
140 | this._saveFull.Dock = System.Windows.Forms.DockStyle.Fill;
141 | this._saveFull.Location = new System.Drawing.Point(584, 33);
142 | this._saveFull.Name = "_saveFull";
143 | this._saveFull.Size = new System.Drawing.Size(97, 24);
144 | this._saveFull.TabIndex = 2;
145 | this._saveFull.Text = "Save ...";
146 | this._saveFull.UseVisualStyleBackColor = true;
147 | this._saveFull.Click += new System.EventHandler(this._saveFull_Click);
148 | //
149 | // _view
150 | //
151 | this._view.AllowDrop = true;
152 | this._view.Dock = System.Windows.Forms.DockStyle.Fill;
153 | this._view.FullRowSelect = true;
154 | this._view.Location = new System.Drawing.Point(0, 60);
155 | this._view.Name = "_view";
156 | this._view.Size = new System.Drawing.Size(684, 315);
157 | this._view.TabIndex = 2;
158 | this._view.UseCompatibleStateImageBehavior = false;
159 | this._view.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this._view_ItemDrag);
160 | this._view.DragDrop += new System.Windows.Forms.DragEventHandler(this._view_DragDrop);
161 | this._view.DragEnter += new System.Windows.Forms.DragEventHandler(this._view_DragEnter);
162 | this._view.KeyDown += new System.Windows.Forms.KeyEventHandler(this._view_KeyDown);
163 | //
164 | // _openDiag
165 | //
166 | this._openDiag.Filter = "Image or Binary Files|*.png;*.jpg;*.jpeg;*.bmp;*.exe;*.dll";
167 | this._openDiag.Multiselect = true;
168 | this._openDiag.RestoreDirectory = true;
169 | //
170 | // _saveDiag
171 | //
172 | this._saveDiag.Description = "Select the folder where icons will be saved";
173 | //
174 | // Form1
175 | //
176 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
177 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
178 | this.ClientSize = new System.Drawing.Size(684, 375);
179 | this.Controls.Add(this._view);
180 | this.Controls.Add(this.tableLayoutPanel1);
181 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
182 | this.MinimumSize = new System.Drawing.Size(700, 100);
183 | this.Name = "Form1";
184 | this.Text = "Iconizer";
185 | this.Activated += new System.EventHandler(this.Form1_Activated);
186 | this.tableLayoutPanel1.ResumeLayout(false);
187 | this.tableLayoutPanel1.PerformLayout();
188 | this.ResumeLayout(false);
189 |
190 | }
191 |
192 | #endregion
193 |
194 | private System.Windows.Forms.CheckedListBox _options;
195 | private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
196 | private System.Windows.Forms.Label label1;
197 | private System.Windows.Forms.Button _saveQuick;
198 | private System.Windows.Forms.Button _saveFull;
199 | private System.Windows.Forms.ListView _view;
200 | private System.Windows.Forms.Button _clear;
201 | private System.Windows.Forms.Button _add;
202 | private System.Windows.Forms.OpenFileDialog _openDiag;
203 | private System.Windows.Forms.FolderBrowserDialog _saveDiag;
204 | }
205 | }
206 |
207 |
--------------------------------------------------------------------------------
/Iconizer/Form1.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Collections.Specialized;
4 | using System.Diagnostics;
5 | using System.Drawing;
6 | using System.Drawing.Imaging;
7 | using System.IO;
8 | using System.Linq;
9 | using System.Reflection;
10 | using System.Windows.Forms;
11 | using TsudaKageyu;
12 |
13 | namespace Iconizer
14 | {
15 | public enum DropOperation
16 | {
17 | NormalExport = 0,
18 | DesktopINI = 1,
19 | BitmapExport = 2,
20 | }
21 | public partial class Form1 : Form
22 | {
23 | public List bitmaps = new List();
24 |
25 | static bool CheckIfImage(string path)
26 | {
27 | var ext = Path.GetExtension(path);
28 | return ext == ".png" || ext == ".jpg" || ext == ".jpeg" || ext == ".bmp";
29 | }
30 |
31 | static bool CheckIfBinary(string path)
32 | {
33 | var ext = Path.GetExtension(path);
34 | return ext == ".exe" || ext == ".dll";
35 | }
36 |
37 | static bool CheckIfIcon(string path)
38 | {
39 | var ext = Path.GetExtension(path);
40 | return ext == ".ico";
41 | }
42 |
43 | bool CheckIfExist(string path)
44 | {
45 | return bitmaps.Any((x) => x.path == path);
46 | }
47 |
48 | static bool CheckIfCompatible(string[] paths)
49 | {
50 | return paths.Any((x) => CheckIfImage(x) || CheckIfBinary(x) || CheckIfIcon(x));
51 | }
52 |
53 | void AddImage(Image bitmap, string path)
54 | {
55 | var data = new BitmapData() { bitmap = bitmap, path = path, name = Path.GetFileNameWithoutExtension(path) };
56 | bitmaps.Add(data);
57 | _view.LargeImageList.Images.Add(data.GetHashCode().ToString(), data.bitmap);
58 | _view.Items.Add(new ListViewItem() { ImageKey = data.GetHashCode().ToString(), Text = data.name, ToolTipText = data.path, Tag = data, Selected = true });
59 | }
60 |
61 | void AddBinary(string path)
62 | {
63 | var icons = new IconExtractor(path);
64 | var iter = 0;
65 | foreach (var icon in icons.GetAllIcons())
66 | {
67 | var iconss = IconUtil.Split(icon);
68 | var data = new BitmapData() { bitmap = IconUtil.ToBitmap(Utility.GetNicestIcon(iconss)), path = path, name = Path.GetFileNameWithoutExtension(path), iteration = iter++ };
69 | bitmaps.Add(data);
70 | _view.LargeImageList.Images.Add(data.GetHashCode().ToString(), data.bitmap);
71 | _view.Items.Add(new ListViewItem() { ImageKey = data.GetHashCode().ToString(), Text = data.name, ToolTipText = data.path, Tag = data, Selected = true });
72 |
73 | foreach (var ic in iconss)
74 | {
75 | ic.Dispose();
76 | }
77 | icon.Dispose();
78 | }
79 | }
80 |
81 | void AddIcon(string path)
82 | {
83 | Icon c = new Icon(path);
84 | var cc = (IconUtil.Split(c));
85 | var data = new BitmapData() { bitmap = IconUtil.ToBitmap(Utility.GetNicestIcon(cc)), path = path, name = Path.GetFileNameWithoutExtension(path) };
86 | bitmaps.Add(data);
87 | _view.LargeImageList.Images.Add(data.GetHashCode().ToString(), data.bitmap);
88 | _view.Items.Add(new ListViewItem() { ImageKey = data.GetHashCode().ToString(), Text = data.name, ToolTipText = data.path, Tag = data, Selected = true });
89 |
90 | foreach (var ic in cc)
91 | {
92 | ic.Dispose();
93 | }
94 | c.Dispose();
95 | }
96 |
97 | void RemoveSelected()
98 | {
99 | _view.BeginUpdate();
100 | for (int i = _view.SelectedItems.Count - 1; i >= 0; i--)
101 | {
102 | var data = (BitmapData)_view.SelectedItems[i].Tag;
103 | bitmaps.Remove(data);
104 | _view.SelectedItems[i].Remove();
105 | _view.LargeImageList.Images.RemoveByKey(data.GetHashCode().ToString());
106 | data.bitmap.Dispose();
107 | }
108 | _view.EndUpdate();
109 | }
110 |
111 | void RemoveAll()
112 | {
113 | _view.BeginUpdate();
114 | for (int i = _view.Items.Count - 1; i >= 0; i--)
115 | {
116 | var data = (BitmapData)_view.Items[i].Tag;
117 | bitmaps.Remove(data);
118 | _view.Items[i].Remove();
119 | _view.LargeImageList.Images.RemoveByKey(data.GetHashCode().ToString());
120 | data.bitmap.Dispose();
121 | }
122 | _view.EndUpdate();
123 | }
124 |
125 |
126 | Bitmap[] GetImageSeries(Image master, OptionsData options)
127 | {
128 | var v = new Bitmap[options.sizes.Count];
129 | for (int i = 0; i < options.sizes.Count; i++)
130 | {
131 | if (!options.keepCrisp || (master.Width >= options.sizes[i].Width && master.Height >= options.sizes[i].Height))
132 | v[i] = Utility.ResizeImage(master, options.sizes[i], options.keepAspect);
133 | }
134 | return v;
135 | }
136 |
137 | void SaveQuick()
138 | {
139 | var options = OptionsData.FromCheckBoxes(_options);
140 | foreach (var data in bitmaps)
141 | {
142 | var images = GetImageSeries(data.bitmap, options);
143 | var file = new FileStream(Utility.NextAvailableFilename(data.GetIcoPath()), FileMode.CreateNew);
144 | Utility.SavePngsAsIcon(images, file);
145 |
146 | file.Dispose();
147 | foreach (var img in images)
148 | {
149 | if (img != null)
150 | img.Dispose();
151 | }
152 | }
153 | }
154 |
155 | StringCollection SendToCopyDump(DropOperation op)
156 | {
157 | var options = OptionsData.FromCheckBoxes(_options);
158 | StringCollection paths = new StringCollection();
159 | if (op == DropOperation.BitmapExport)
160 | foreach (ListViewItem item in _view.SelectedItems)
161 | {
162 | var data = (BitmapData)item.Tag;
163 | var path = data.GetPngPath(Path.GetTempPath());
164 | if (File.Exists(path)) File.Delete(path);
165 | var file = new FileStream(path, FileMode.Create);
166 | paths.Add(path);
167 | data.bitmap.Save(file, ImageFormat.Png);
168 | file.Close();
169 | }
170 | else
171 | foreach (ListViewItem item in _view.SelectedItems)
172 | {
173 | var data = (BitmapData)item.Tag;
174 | var images = GetImageSeries(data.bitmap, options);
175 | var path = data.GetIcoPath(Path.GetTempPath());
176 | if (File.Exists(path)) File.Delete(path);
177 | var file = new FileStream(path, FileMode.Create);
178 | paths.Add(path);
179 | Utility.SavePngsAsIcon(images, file);
180 |
181 | file.Dispose();
182 | foreach (var img in images)
183 | {
184 | if (img != null)
185 | img.Dispose();
186 | }
187 | }
188 |
189 | if (op == DropOperation.DesktopINI && _view.SelectedItems.Count == 1)
190 | {
191 | var path = Path.Combine(Path.GetTempPath(), "desktop.ini");
192 | if (File.Exists(path)) File.Delete(path);
193 | var ico = (BitmapData)_view.SelectedItems[0].Tag;
194 | var icon = Path.GetFileName(ico.GetIcoPath());
195 | File.WriteAllText(path, string.Format("[.ShellClassInfo]\r\nIconResource={0}", icon));
196 | new FileInfo(ico.GetIcoPath(Path.GetTempPath())).Attributes = new FileInfo(path).Attributes = FileAttributes.Hidden | FileAttributes.System;
197 |
198 | paths.Add(path);
199 | }
200 |
201 | return paths;
202 | }
203 |
204 | void SaveFull(string folder)
205 | {
206 | var options = OptionsData.FromCheckBoxes(_options);
207 | foreach (var data in bitmaps)
208 | {
209 | var images = GetImageSeries(data.bitmap, options);
210 | var file = new FileStream(Utility.NextAvailableFilename(data.GetIcoPath(folder)), FileMode.CreateNew);
211 | Utility.SavePngsAsIcon(images, file);
212 |
213 | file.Dispose();
214 | foreach (var img in images)
215 | {
216 | if (img != null)
217 | img.Dispose();
218 | }
219 | }
220 | }
221 |
222 | public Form1()
223 | {
224 | InitializeComponent();
225 | _view.LargeImageList = new ImageList() { ImageSize = new Size(128, 128), ColorDepth = ColorDepth.Depth32Bit };
226 | for (int i = 0; i < _options.Items.Count; i++)
227 | {
228 | _options.SetItemChecked(i, true);
229 | }
230 | }
231 |
232 | private void _view_DragDrop(object sender, DragEventArgs e)
233 | {
234 | if (e.Data.GetDataPresent(DataFormats.FileDrop))
235 | {
236 | _view.BeginUpdate();
237 | foreach (var path in (string[])e.Data.GetData(DataFormats.FileDrop))
238 | {
239 | if (CheckIfExist(path)) { }
240 | else if (CheckIfImage(path))
241 | AddImage(Image.FromFile(path), path);
242 | else if (CheckIfBinary(path))
243 | AddBinary(path);
244 | else if (CheckIfIcon(path))
245 | AddIcon(path);
246 | }
247 | _view.EndUpdate();
248 | }
249 |
250 | }
251 |
252 | private void _view_DragEnter(object sender, DragEventArgs e)
253 | {
254 | if (e.Data.GetDataPresent(DataFormats.FileDrop) && CheckIfCompatible((string[])e.Data.GetData(DataFormats.FileDrop)))
255 | e.Effect = DragDropEffects.Copy;
256 | else
257 | e.Effect = DragDropEffects.None;
258 | }
259 |
260 | private void _clear_Click(object sender, EventArgs e)
261 | {
262 | if (_view.SelectedItems.Count == 0)
263 | RemoveAll();
264 | else
265 | RemoveSelected();
266 | }
267 |
268 | private void _saveQuick_Click(object sender, EventArgs e)
269 | {
270 | UseWaitCursor = true;
271 | Application.DoEvents();
272 | SaveQuick();
273 | UseWaitCursor = false;
274 | MessageBox.Show("Icon(s) saved successfully!", "Finished", MessageBoxButtons.OK, MessageBoxIcon.Information);
275 | }
276 |
277 | private void _saveFull_Click(object sender, EventArgs e)
278 | {
279 | if (_saveDiag.ShowDialog() == DialogResult.OK)
280 | {
281 | UseWaitCursor = true;
282 | Application.DoEvents();
283 | SaveFull(_saveDiag.SelectedPath);
284 | UseWaitCursor = false;
285 | MessageBox.Show("Icon(s) saved successfully!", "Finished", MessageBoxButtons.OK, MessageBoxIcon.Information);
286 | }
287 | }
288 |
289 | private void _add_Click(object sender, EventArgs e)
290 | {
291 | if (_openDiag.ShowDialog() == DialogResult.OK)
292 | {
293 | foreach (var path in _openDiag.FileNames)
294 | {
295 | if (CheckIfImage(path))
296 | AddImage(Image.FromFile(path), path);
297 | if (CheckIfBinary(path))
298 | AddBinary(path);
299 | else if (CheckIfIcon(path))
300 | AddIcon(path);
301 | }
302 | }
303 | }
304 |
305 | private void _view_KeyDown(object sender, KeyEventArgs e)
306 | {
307 | if (e.KeyCode == Keys.Delete)
308 | {
309 | RemoveSelected();
310 | }
311 | else if (e.Control && e.KeyCode == Keys.A)
312 | {
313 | _view.BeginUpdate();
314 | foreach (ListViewItem item in _view.Items)
315 | {
316 | item.Selected = true;
317 | }
318 | _view.EndUpdate();
319 | }
320 | }
321 |
322 | private void _view_ItemDrag(object sender, ItemDragEventArgs e)
323 | {
324 | bool withPNG = ModifierKeys == Keys.Shift;
325 | bool withINI = !withPNG && ModifierKeys == Keys.Control;
326 |
327 | UseWaitCursor = true;
328 | if (withINI)
329 | this.Text = "Iconizer - Drop to Change Folder icon";
330 | else
331 | this.Text = withPNG ? "Iconizer - Release SHIFT and Drop to Export PNG" : "Iconizer - Drop to Export ICO";
332 |
333 | Application.DoEvents();
334 | var lists = SendToCopyDump((triggerInvalidating = withINI) ? DropOperation.DesktopINI : (withPNG ? DropOperation.BitmapExport : DropOperation.NormalExport));
335 | var data = new DataObject();
336 | data.SetFileDropList(lists);
337 | data.SetData("Preferred DropEffect", DragDropEffects.Move); // Cut
338 |
339 | DoDragDrop(data, DragDropEffects.Copy);
340 | if (withINI)
341 | this.Text = "Iconizer - Click here to Invalidate the explorer cache";
342 | else
343 | this.Text = "Iconizer";
344 | UseWaitCursor = false;
345 | }
346 |
347 |
348 | // This trick is used for invalidating folder caches..
349 | bool triggerInvalidating = false;
350 |
351 | private void Form1_Activated(object sender, EventArgs e)
352 | {
353 |
354 | if (triggerInvalidating)
355 | {
356 | triggerInvalidating = false;
357 | Utility.InvalidateExplorerCache();
358 | this.Text = "Iconizer";
359 | }
360 |
361 | }
362 |
363 | private void label1_Click(object sender, EventArgs e)
364 | {
365 | MessageBox.Show("Iconizer is made with <3 by Wello Soft\n\n" +
366 | "http://github.com/willnode/Iconizer" + "\n" +
367 | "http://wellosoft.wordpress.com", "Iconizer " + AssemblyName.GetAssemblyName(Assembly.GetExecutingAssembly().Location).Version.ToString(), MessageBoxButtons.OK, MessageBoxIcon.Information
368 | );
369 | }
370 | }
371 | }
372 |
--------------------------------------------------------------------------------
/Iconizer/Form1.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
121 | 17, 17
122 |
123 |
124 | 157, 17
125 |
126 |
127 |
128 |
129 | AAABAAgAAAAAAAEAIABrFQAAhgAAAEBAAAABACAAKEIAAPEVAAAwMAAAAQAgAKglAAAZWAAAKCgAAAEA
130 | IABoGgAAwX0AACAgAAABACAAqBAAACmYAAAYGAAAAQAgAIgJAADRqAAAFBQAAAEAIAC4BgAAWbIAABAQ
131 | AAABACAAaAQAABG5AACJUE5HDQoaCgAAAA1JSERSAAABAAAAAQAIBgAAAFxyqGYAABUySURBVHic7d1N
132 | UBtXggfw/0NCgCywAPFl7BhvxkmYWmfI1xxyyMDUHFK1W7vMVZeJ82HnkC2bQ3KNc9vaC7Brx5nsVtl7
133 | 0WWmyt6t3aqtrZ0xmZpK1WQTh3ysv7CRiT0GGwwCCQmEpN4DEgbRSC0h+r2n/v+qlAr0U/dTKv+/ultN
134 | SxiGASJyphrZEyAieVgARA7GAiByMBYAkYOxAIgcjAVA5GAsACIHYwEQORgLgMjBWABEDsYCIHIwFgCR
135 | g7EAiByMBUDkYCwAIgdjARA5GAuAyMFYAEQOxgIgcjAWAJGDsQCIHIwFQORgLAAiB2MBEDkYC4DIwVgA
136 | RA7GAiByMLfdGxRCbPz7+d9N9AM4BWAQALZ9S6FR8MdtrHzLYbGvQiz7mxIN03+1tG6jjA1b3kYFXu8O
137 | Yy4DGH3/9aNjFlZBFtn9XZ3C9g1mC+D87yaGAZxubmxAZ0sT6uvyumgPwl+JMOxyE+ZjytiwHa93p+WJ
138 | ZAoP5pYwH00AwMj7rx8dsjIdKs4RBZALf+/hDrS3NCKaBNI7TKMi7/oWBlYquCXPt4x1WBqzF+HP/tJV
139 | A+z3AI8Wovg+/BAGMPIBS6Aiqr4APvn97X4AV3oPd2D//kYsJYFMgSmostuvSvhVeb01AvDXAYtL6yUA
140 | YOADHg7smt15lHES8FRzYwPaWxj+Xa/DbIxNrzdtAAurQEdzI1oaG4D1czmkGRkFMNjZ0oQow7+7dZiN
141 | sfn1ZgxgMQkcCDQB2RO5pBcpHwPW17l3POYH9AyDreswGyPp9aYyQIPH9g+TqEJsLwADQLOvAavpnZcX
142 | e37RbTD8pa/DwpPM1pPMAE3eOgtbIBUpdSGQ7mHY83WYjZH8ejMG4HbVFJ0HqUmZAqiGMOzpOszGqPp6
143 | SRtKFEBVh4HhJ4XZXwBGwR+LDTcfo2oYGH5SnNQ9gKoOA8NPGpBWAFUdBoafNCGlAKo6DAw/aUTKdQC7
144 | WQ4oHAaGnzSjxKcAOVqHgeEnDSlTAFqHgeEnTSlRAFqHgeFnQ2hMegFoHQaGn5cAa07p6wAAhcPA8G+Z
145 | K3tAT8peBwAoHAaGn+/8VULJ6wAAhcPA8JvPlYWgJeWuAwAUDgPDz3f+KiP9JGA+ZcPA8DP8VUipAlA2
146 | DAw/w1+llCkAZcPA8FuaK/tBT0oUgLJhYPj37qvUSAnSC0DZMCgcKJ3mSmqTeyGQqmFQOFA6zZXUJ+9C
147 | IFXDoHCgdJor6UFOAagaBoUDpdNcSR/2XwikahgUDpROcyW9SD8JuBnDb2GMwnMl/ShTAAy/hTE6zZW0
148 | oEQBMPwWxug0V9KG9AJg+C2M0WmupBX1bwhi4UkMfxnbYfgJqt8QxMKTGP4ytsPwU5a6NwSx8CSGv4zt
149 | MPy0iZo3BLHwJIa/jO3YNFfSh/STgPkY/tLXo9JcSS9KFQDDX/p6VJor6UeZAmD4S1+PSnMlPSlRAAx/
150 | 6etRaa6kL+kFwPCXvh6d5kpqU+tCIIa/quZK6lPnQiCGv6rmSnqQfggAgOG3sB6d5kr6kF8ADH9VzZX0
151 | IrcAGP6qmSuLQU/yCoDhr6q5sgH0JP8QIIvhL2M7Gs2V1KREATD8ZWxHo7mSuuwvAKPgj8WGM1DQa66k
152 | NrUuBCq2nIHSaq6kPnUuBCq2nIFSd65sA21JuSEIw1/GdlSdq2F9+6QeJU4Cbub4QJmNUXWuTL32lCoA
153 | xwfKbIyqc2X4q4IyBeD4QJmNUXWuDH/VUKIAHB8oszGqzpXhryrSC8DxgTIbo+pcy1gHqU3qbcEdHyiz
154 | MarOleGvSupcB+C0QJmNUXWuDH/VUuObgZwWKLMxqs6V4a9q0s8BOC5QZmNUnWsp62AraEn/G4KYjVE1
155 | UGZjVJ0r3/kdQe8bgpiNUTVQZmNUnesevV5Sj5xPAZwWKLMxqs6V4XcU6fcD2OFXJS0HFA6U2RhV58rw
156 | O470k4BVHSizMarOleF3JL1uCGI2RtVAmY1Rda4Mv2OpcyFQicsBhQNlNkbVuTL8jib9EMCM1oEyG6Pq
157 | XBl+x1OuALQOlNkYVefK8BMUKwCtA2U2RtW57sHrZTnoSZkC0DpQZmNUnSvf+WkTJQpA60CZjVF1rpJe
158 | L6lLegFoHSizMarOleEnE0pfBwAoHCizMarO1Y7XyyLQklvWhrUOlNkYSXOdejyOP935DW7M/HFjqZE3
159 | evPPWzO7dW3GDs+0ur6jw69sWaGV9e08g/LmV+gZ2/uq0Kss/PxiSy3O9TKA0aWhyTFIYnsBGFA7UGVt
160 | R9Jc//v7s/jT5G/QFmjBKy8dQ4O3Hm2BlgLbKBQ3s21ZX15ovFm0Ci0vND7/FRRbXuq2Cy0vbTY7j56e
161 | m0U0voyJqanB6bnZwabhvxhZGpocMp3AHpO2B1AIw198TC78L790DG0Hm3Etfh3L6WX8YW5u03MKB36n
162 | d6lK/1zJtVp/Rfk/m1VUacsL7QGUMpfO2g7sa9mH1w6+hOn7c/jDV1+ebho+gqWhsO0lIP0kYD6Gv/iY
163 | qcfj+GLyt3j5pWNARxr/s/B7TK38gNm1ue1PJuXMrD3E7ZU7+I+F/0RNRxqvvfQyAJxuHD7Sb/dclCoA
164 | ht/aer6481sEAi1oO9iMb2LfYs1Ys7A1Uk3SSOJ/Y1+i62AAnYE2ADhl9xyUKQCG3/p6bs78EYcPH8C1
165 | +HWGX3NJI4lv4t/imcOHAWDQ7u0rUQCyA1XSdhSZ6z5vA+LpuIWtkeqW0zH4vF4p25b6xSCAOoHSKfwA
166 | EAi08Ji/SsynFtC63y9l23IvBFIkUDqF38p2SC9JIwlPba2Ubcu7IYhGgdJprkSlkFMAGgWK4adqpsRd
167 | gUtYbD6G4ScqixKfAuSoFChlw882oApSpgAY/vLWQbQbShQAw1/eOoh2S3oBMPzlrYOoEtS/IYiFJzH8
168 | ROVR9otBTMcw/OwDqigpBcDw7806iEol/W8BLI1h+Bl+2hPSTwLmY/jLmwtROZQqAIa/vLkQlUuZAmD4
169 | y5sL0W4oUQAMf3lzIdot6QXA8Jc3F6JKUOtCIIa/Iq+XyCp1LgRi+Bl+sp0aFwIx/Aw/SSH/QiCGn+En
170 | aeSeBGT4GX6SSl4BMPwMP0knpQCi8VXUu7b+juEvbTlRJcgpgEQSrk1bZvhLW05UKTIK4PKDuSXs9wA1
171 | guEvdTlRJckogNH5aAKPFqLw162XwE4YfpMxbAiqINsL4P3Xj44BGPk+/BCLS1F0eQFfLUo+JwAw/ES7
172 | 5Zax0fdfPzr0D/81ge/DD08/mFvCgUATGjxudDQ2ALC4G7wX4S+DlfBXYh4MP+0FKQUAAB+sl8C/zUcT
173 | p+ajiY3vRS/1f3Rj27+Y/rjz88pkFFhJKQVWib0LonJJKwAA+GD9cGAMAP49bPhv3LjdV8rzd8qCzBNt
174 | ldh7sTDsirU1EBUmtQA2+5sjIoJsGVBhLwz/TPYUqEpIvx8AEcnDAiByMBYAkYPZfg6g6XioB8AFAKNL
175 | F4KX7d4+ET1hewEIoB/rDwBgARBJZP8hgEAPBACB/v1vhnps3z4RbbC9AASAhsZmuFxuCGCw6BOIaM9I
176 | OwnoC3QBwClZ2yciSXsAAkBTxyEIoKf5zVC/3XMgonX2F0C2AWrr6lHf2AwAH9o9ByJaJ+e24Ok1AIC/
177 | +wiEQH/LW9wLIJJBxiHA+Fo8BgCob/RzL4BIIhl7ABHgybkA/4EjEEB/61shfiJAZDMZ5wAiQgCp5AqA
178 | 9b2A7CcCw61vhfx2z4fIyWwvgLl/CY4DQHp1ZeN3zYeOwuV29wih3qGA/02WElUvKScBBXA3mYhuHAfU
179 | uN1oPdILAKcDb6t1QlAAV5pZAlSlpBXAWiK2cR5AAPD62+D1t0EAl9reVipwfWAJUJWSdSXgZ2vx6LZf
180 | th7phbuu3g/gkv1TMicE4HK7+4TAlRaeo6AqI6cABMZTidi2X9e43Gh7+nm4XO7+9rdDFyTMzFTXcy+i
181 | xuXuA1gCVF1kHQKMAcBqNLJtWa3XB/9TRwGBN9rfCZ22e275BACP14eu516EK1sC/LSCqoWUAnj4z8GI
182 | AMZXIrNbzgPkHr7WLrT29EIAwx3vhN6QMcec3JzqWAJUhWTeEmxsNbaw48J9rV1o6ekFgAtSS2DTV5dt
183 | 3hMQwJUAS4A0J60AhMBnqUQM6eTKjmNyJSCAC53vhM7YN7sn8r+60OP1ofO5F1HjdvdB4EpArU8siEoi
184 | rQCmPw1eBhBJRGYhBHZ8+AIbewIfdr4TutD5jv2By59T3b6thwOKfWxJZJnUuwIL4HJifrrouH2BLgR+
185 | dAw1bvcbQuBK1wn7biW205cX5/YEWAKkM9m3Bf/XtXgMub8OLKTB34b2Z15ErdfXB+DrrhM2/fFQga8v
186 | 3zgcYAmQpqQWwINPg2NC4O7y7D1L42u9PrQ98yJ87Yf8AC51nQhd6jqxt6ErkH8AW/cEBHClnSVAGpG9
187 | BwAAoyuRWRjplOlHgvkPl8uN5kNH1/cGPPWDAggfOLG3JwiLzaku78Rgu4TzFETlkF4AArhopFOR5UfW
188 | 9gJy6hr9aP/xT9F04IgfwIcHToTCB05U/uPCYnsAOR6vD53PPtkT6GAJkAakF8D9XwcjAEaXH91DJp0q
189 | 6bk1Ljeauo6g69ir2Nfa1SOAC90nQuHuE6HT3RU6NBBWGwDrJdDx7JNzAiwBUp30AgAAAYwY6VQkXuJe
190 | QI7LU4/mnl50HnsVvo5DPTVu9zAEFrpPhi50n7T3TkP5ewIyPrYkskqJArj362AEAqPLs/csnwswe7g9
191 | 9fAfPIrOv3wVLT29qPX63gBwqftkaKH7ZOhS98nQG90nS/sIsZx5eLw+dGz6dIAlQKqy/bsBd5LdCzgV
192 | mwn7mw4e3dW6atxueFu74G3tQjq5gkRk1r8ajQyuRhcGM+kUuk+GIgDGs49FZP84KaehuT1y++9/Mb55
193 | cqXKlcCjm1f7MunUla4ToYHpT4Pb//qJSCJlCuCHT4KRp94NDS0/unehobULtQ2+iqzX5amHr/0QfO2H
194 | AABr8RjWElH/WjzWn0zE+o30GpLx2JZbkSUWHqH7ZGjX2/Z4fWh/liVA6lKmAADgh0+CFw+/G/rV0t1r
195 | /YHen+7JNjxeHzxeH9C6J6vfpi57YvBhtgQOnAgNPGAJkCKUOAeQZ2htJYbYdFj2PCom9+lA7rLhA3t8
196 | 8RKRVcoVwNQnwXEBfBSbCcPsrkG6yh0O1LAESCHKFQAA3D0fPANgbGHyWxglXhugso09gew9BrtPsgRI
197 | LiULAAAE8MtMciWyOHW97I8FVXx4vD60P/NkT4AlQDIpWwDh88EIgF+uLs4i+ucJ2dOpqM3nBARw5SBL
198 | gCRRtgAAIHw+OCYEjsdn7yGxMC3/7buCj9q8cwIsAZJB6QIAgMmPgxcBjCxNXcfK/LTs3Fb+cGDTnsAh
199 | lgDZTPkCAIDJj4NDAri4NHUdVu4gpJONTweyf0p86F2WANlHiwIAgDsfB4+jSkugNntiMLcn8BRLgGyi
200 | TQEA6yUggIvR7OFANcnd7Sh3ToAlQHbQqgAA4PbHweMQGFn64TqWZ8LSj+MrfU4g8PTzEECfAIYr/J+O
201 | aBvtCgAAbp8LDgngeHwmjMXwd1VzsVAmncLi/VvA+l8pDkmeDjmAlgUAABPnghcBvLC6OBuZv/mF9pcN
202 | Z9IpzN26irVEbFwIDEx9wj8Yor2nbQEAwMS54DiAI5nkytjCzS+QmLsnfz++jEcmk8LjifXwAxi4e57h
203 | J3toXQAAMHEuGLl1LjgA4KPY/QksTnyNdCImO9OWH0Y6hce3rmItHhsXDD/ZTPsCyLl1LngGwAvJ5YWx
204 | +RtfYHkmrPy5gUw2/KnEevjDDD/ZrGoKAABunQuO3zobHBACQ/GZcOTxtc+RsPilI3bLpFOYv/Vkt3+S
205 | 4ScJqqoAcm6eDY4AOGKkUx/F/jyB+WufY2V+Wpk9AmNT+AUwMPkxw09yVGUBAMDNs8HIzbPBM1g/SXgx
206 | +sP1yPy1zxGfCSOTXJF6zD8/8WS3/w7DTxJVbQHk3DwbvHvjbPC4yO4RxGfCd+evfY6l8He27xXkwr+W
207 | iI1DYOA2w0+SKXVT0L1042wwAuAMgDPPvRcaXF2c/dXq4uxgFNdRt78Nnv0B1Pqa4fLU78n289/5J84x
208 | /CSfYwpgsxtng5cBXH7uvZAfwODq4uzfri7O9gPwuzz1qPU1w93gg9vbCHeDDzWu3f1nyuSF/xbDT4pw
209 | ZAHkZPcKLmYf6H0v1JdJrvSvzk//bBXoM4AeAGh/4edlb8NIp7AwcRXplfWz/Qw/qcTRBZDv+tlg7tuC
210 | RnK/6/27kFHu+nLhTyUYflJT1Z8ElGVz+AUwcPMsw0/q4R5AEbmP70phpFOI3H7yzn+D4SdFcQ+giHLC
211 | v5ANvxAMP6mNBVBMCQ2Qe+dPZ3f7r/8Tw09q4yFAEVYPATLpFBY37fZfY/hJAywAK4o0gJFOYfHOVaRW
212 | 1t/5/4/hJ03wEKCIYu/+RvadP7fbz/CTTlgAxRRoACNvt//7f2T4SS88BChip3MARjqFpTtP3vm/Y/hJ
213 | Q9wDKKJo+AXDT/piAZRoc/gBDHw7yvCTvlgARYhNuwBGOoUow09VhAVggQCAdArRyfW/6hPAwDcMP1UB
214 | FkARAoCRyYY/+84/rkD4FxejaKsNyJ4GVUBnbQem52albJsFYEF009n+8RH54QeAyOISvC6v7GlQBexz
215 | +RCLx6VsmwVQhBBAJhv+rxUJP4DLU1MP8GNvL2pFrey50C54hAc/8T6PW1NTAHDZ7u2zAIobh8DAVXXC
216 | DwCjc3PzmL2/gJ/4nmcJaMojPHjF9zKm789hZv0QYNTuObAAihDAwNVhpcKPr4c+GwMw8uVX3wEPXfhF
217 | 889xuP4pnhPQgEd40FnbgR/VP42/bv4rZB668IevvgSAkehQeMzu+QjDKPuOV+VtUJT6F/a0k77h14YB
218 | nG4LtODw4W40eOvRFmjZcbwBo+DPW5c9+aeV5YXG548qtrzQ+PxXUGx5qdsutLy02ZiPTq6t4fFiBNH4
219 | MiampnIn/0aWhiaHAMD2PLIA9NY3/Fo/gFMGMFg8llv/Jy5UCMa2f+7N+gpVUmXXl7/uQmsp/vxiSy3O
220 | 9TKA0aWhybGN31Z7ARCROngOgMjBWABEDsYCIHIwFgCRg7EAiByMBUDkYCwAIgdjARA5GAuAyMFYAEQO
221 | xgIgcjAWAJGDsQCIHIwFQORgLAAiB2MBEDkYC4DIwVgARA7GAiByMBYAkYOxAIgcjAVA5GAsACIHYwEQ
222 | ORgLgMjBWABEDsYCIHKw/wc/GVGSZ5l0QwAAAABJRU5ErkJggigAAABAAAAAgAAAAAEAIAAAAAAAAAAA
223 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
224 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
225 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
226 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
227 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
228 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
229 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
230 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
231 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
232 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
233 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
234 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
235 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
236 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
237 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
238 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
239 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
240 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
241 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
242 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
243 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
244 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
245 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
246 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
247 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
248 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
249 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
250 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
251 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
252 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
253 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
254 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP48w
255 | gD6PL/89jy7/PI8t/zuPLP86jyv/OY8q/ziPKP83jyf/No8m/zWPJf80jyP/M48i/zKPIf8xjyD/MI8f
256 | /y+PHv8ujxz/LY8b/yyPGv8rjxn/Ko8X/ymPFv8ojxX/J48U/yaPE/8ljxL/JI8Q/yOPD/8ijw6AAAAA
257 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
258 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
259 | AAAAAAAAAAAAAAAAAD+PMf9iuFn/heCC/4Xggv+E4IH/g+CA/4PggP+C4H//guB+/4Hgff+A4H3/gOB8
260 | /3/gfP9/4Hv/fuB6/33gev994Hn/fOB5/3zgeP974Hf/euB3/3rgdv954Hb/eeB1/3jgdP934HT/d+Bz
261 | /3Hbbf9MuEH/Io8O/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
262 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACmcDKfAAAA
263 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/jzH/huCD/zTML/8zzC7/Mswt/zHMLP8wzCv/L8wp
264 | /y7MKP8tzCf/LMwm/yvMJf8qzCT/Kcwj/yjMIv8nzCH/Jswg/yXMH/8kzB7/I8wd/yLMHP8hzBv/IMwa
265 | /x/MGf8ezBj/HcwX/xzMFv8bzBX/duBy/yKPDv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
266 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
267 | AAAAAAAAAAAApm8v/6ZvL58AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP48x/4bgg/80zC//M8wu
268 | /zLMLf8xzCz/MMwr/y/MKf8uzCj/Lcwn/yzMJv8rzCX/Kswk/ynMI/8ozCL/J8wh/ybMIP8lzB//JMwe
269 | /yPMHf8izBz/Icwb/yDMGv8fzBn/HswY/x3MF/8czBb/G8wV/3bgcv8ijw7/AAAAAAAAAAAAAAAAAAAA
270 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
271 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKZuLf+ydzD/pm4snwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
272 | AD+PMf+G4IP/NMwv/zPMLv8yzC3/Mcws/zDMK/8vzCn/Lswo/y3MJ/8szCb/K8wl/yrMJP8pzCP/KMwi
273 | /yfMIf8mzCD/Jcwf/yTMHv8jzB3/Iswc/yHMG/8gzBr/H8wZ/x7MGP8dzBf/HMwW/xvMFf924HL/Io8O
274 | /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
275 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACmbSr/5Jo9/7J2Lf+mbCmfAAAA
276 | AAAAAAAAAAAAAAAAAAAAAAA/jzH/huCD/zTML/8zzC7/Mswt/zHMLP8wzCv/L8wp/y7MKP8tzCf/LMwm
277 | /yvMJf8qzCT/Kcwj/yjMIv8nzCH/Jswg/yXMH/8kzB7/I8wd/yLMHP8hzBv/IMwa/x/MGf8ezBj/HcwX
278 | /xzMFv8bzBX/duBy/yKPDv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
279 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApmwoYKZsKK+mbCjvqm8p
280 | /+idPv/kmTz/snUr/6ZrJZ8AAAAAAAAAAAAAAAAAAAAAP48x/4bgg/80zC//M8wu/zLMLf8xzCz/MMwr
281 | /y/MKf8uzCj/Lcwn/yzMJv8rzCX/Kswk/ynMI/8ozCL/J8wh/ybMIP8lzB//JMwe/yPMHf8izBz/Icwb
282 | /yDMGv8fzBn/HswY/x3MF/8czBb/G8wV/3bgcv8ijw7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
283 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACmayZQpmwn
284 | 37J1K//PijT/4JY5/+icPP/onDz/6Jw8/+SZO/+ydCj/pmoinwAAAAAAAAAAAAAAAD+PMf+G4IP/NMwv
285 | /zPMLv8yzC3/Mcws/zDMK/8vzCn/Lswo/y3MJ/8szCb/K8wl/yrMJP8pzCP/KMwi/yfMIf8mzCD/Jcwf
286 | /yTMHv8jzB3/Iswc/yHMG/8gzBr/H8wZ/x7MGP8dzBf/HMwW/xvMFf924HL/Io8O/wAAAAAAAAAAAAAA
287 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
288 | AAAAAACmayWPqm4m/8+JM//omzv/6Js7/+ibO//omzv/6Js7/+ibO//omzv/5Jg5/7JyJf+maSCfAAAA
289 | AAAAAAA/jzH/huCD/zTML/8zzC7/Mswt/zHMLP8wzCv/L8wp/y7MKP8tzCf/LMwm/yvMJf8qzCT/Kcwj
290 | /yjMIv8nzCH/Jswg/yXMH/8kzB7/I8wd/yLMHP8hzBv/IMwa/x/MGf8ezBj/HcwX/xzMFv8bzBX/duBy
291 | /yKPDv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
292 | AAAAAAAAAAAAAAAAAAAAAACmaiOfsnMn/+SYOP/omzr/6Js6/+ibOv/omzr/6Js6/+ibOv/omzr/6Js6
293 | /9yRNf+qax//pmgeYAAAAAAAAAAAP48x/4bgg/80zC//M8wu/zLMLf8xzCz/MMwr/y/MKf8uzCj/Lcwn
294 | /yzMJv8rzCX/Kswk/ynMI/8ozCL/J8wh/ybMIP8lzB//JMwe/yPMHf8izBz/Icwb/yDMGv8fzBn/HswY
295 | /x3MF/8czBb/G8wV/3bgcv8ijw7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
296 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACmaSBwrm8j/+SXN//omjn/6Jo5/+iaOf/omjn/6Jo5
297 | /+iaOf/omjn/6Jo5/9yQM/+qah3/pmccYAAAAAAAAAAAAAAAAD+PMf+G4IP/NMwv/zPMLv8yzC3/Mcws
298 | /zDMK/8vzCn/Lswo/y3MJ/8szCb/K8wl/yrMJP8pzCP/KMwi/yfMIf8mzCD/Jcwf/yTMHv8jzB3/Iswc
299 | /yHMG/8gzBr/H8wZ/x7MGP8dzBf/HMwW/xvMFf924HL/Io8O/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
300 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACmaB4gpmge/9yQM//omjf/z4ct
301 | /7t3Jf+qah7/pmcc/6ZnG/+mZxv/6Jo3/9yQMv+qaRv/pmYaYAAAAAAAAAAAAAAAAAAAAAA/jzH/huCD
302 | /zTML/8zzC7/Mswt/zHMLP8wzCv/L8wp/y7MKP8tzCf/LMwm/yvMJf8qzCT/Kcwj/yjMIv8nzCH/Jswg
303 | /yXMH/8kzB7/I8wd/yLMHP8hzBv/IMwa/x/MGf8ezBj/HcwX/xzMFv8bzBX/duBy/yKPDv8AAAAAAAAA
304 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApmcc
305 | n796Jv/ckDH/rm0e/6ZmGt+mZxtwpmYbIAAAAAAAAAAApmUY/9yPMP+qaBn/pmUYYAAAAAAAAAAAAAAA
306 | AAAAAAAAAAAAP48x/4bgg/80zC//M8wu/zLMLf8xzCz/MMwr/y/MKf8uzCj/Lcwn/yzMJv8rzCX/Kswk
307 | /ynMI/8ozCL/J8wh/ybMIP8lzB//JMwe/yPMHf8izBz/Icwb/yDMGv8fzBn/HswY/x3MF/8czBb/G8wV
308 | /3bgcv8ijw7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
309 | AAAAAAAAAAAApmYZEKZmGv/Hfyf/pmYZ/6ZmGXAAAAAAAAAAAAAAAAAAAAAAAAAAAKZkFv+qZxf/pmQW
310 | YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+PMf+G4IP/NMwv/zPMLv8yzC3/Mcws/zDMK/8vzCn/Lswo
311 | /y3MJ/8szCb/K8wl/yrMJP8pzCP/KMwi/yfMIf8mzCD/Jcwf/yTMHv8jzB3/Iswc/yHMG/8gzBr/H8wZ
312 | /x7MGP8dzBf/HMwW/xvMFf924HL/Io8O/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
313 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKZlF1CmZRf/pmUX/6ZlF0AAAAAAAAAAAAAAAAAAAAAAAAAA
314 | AAAAAACmYxP/pmMTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/jzH/huCD/zTML/8zzC7/Mswt
315 | /zHMLP8wzCv/L8wp/y7MKP8tzCf/LMwm/yvMJf8qzCT/Kcwj/yjMIv8nzCH/Jswg/yXMH/8kzB7/I8wd
316 | /yLMHP8hzBv/IMwa/x/MGf8ezBj/HcwX/xzMFv8bzBX/duBy/yKPDv8AAAAAAAAAAAAAAAAAAAAAAAAA
317 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACmZBWApmQV/6ZkFWAAAAAAAAAA
318 | AAAAAAAAAAAAAAAAAAAAAAAAAAAApmIRYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP48x
319 | /4bgg/80zC//M8wu/zLMLf8xzCz/MMwr/y/MKf8uzCj/Lcwn/yzMJv8rzCX/Kswk/ynMI/8ozCL/J8wh
320 | /ybMIP8lzB//JMwe/yPMHf8izBz/Icwb/yDMGv8fzBn/HswY/x3MF/8czBb/G8wV/3bgcv8ijw7/AAAA
321 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApmMS
322 | n6ZjEr8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
323 | AAAAAAAAAAAAAAAAAD+PMf+G4IP/NMwv/zPMLv8yzC3/Mcws/zDMK/8vzCn/Lswo/y3MJ/8szCb/K8wl
324 | /yrMJP8pzCP/KMwi/yfMIf8mzCD/Jcwf/yTMHv8jzB3/Iswc/yHMG/8gzBr/H8wZ/x7MGP8dzBf/HMwW
325 | /xvMFf924HL/Io8O/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
326 | AAAAAAAAAAAAAAAAAKZiEL+mYhBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
327 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/jzH/huCD/zTML/8zzC7/Mswt/zHMLP8wzCv/L8wp
328 | /y7MKP8tzCf/LMwm/yvMJf8qzCT/Kcwj/yjMIv8nzCH/Jswg/yXMH/8kzB7/I8wd/yLMHP8hzBv/IMwa
329 | /x/MGf8ezBj/HcwX/xzMFv8bzBX/duBy/yKPDv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
330 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACmYQ4wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
331 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP48x/4bgg/80zC//M8wu
332 | /zLMLf8xzCz/MMwr/y/MKf8uzCj/Lcwn/yzMJv8rzCX/Kswk/ynMI/8ozCL/J8wh/ybMIP8lzB//JMwe
333 | /yPMHf8izBz/Icwb/yDMGv8fzBn/HswY/x3MF/8czBb/G8wV/3bgcv8ijw7/AAAAAAAAAAAAAAAAAAAA
334 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
335 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
336 | AD+PMf+G4IP/NMwv/zPMLv8yzC3/Mcws/zDMK/8vzCn/Lswo/y3MJ/8szCb/K8wl/yrMJP8pzCP/KMwi
337 | /yfMIf8mzCD/Jcwf/yTMHv8jzB3/Iswc/yHMG/8gzBr/H8wZ/x7MGP8dzBf/HMwW/xvMFf924HL/Io8O
338 | /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA27iL
339 | gNu4iv/buIr/27eJ/9u3if/bt4j/27aI/9u2h//btof/27aG/9u2hv/btob/27aG/9u1hf/btYX/27WE
340 | /9u1hP/btIT/27SD/9u0g/8/jzH/huCD/zTML/8zzC7/Mswt/zHMLP8wzCv/L8wp/y7MKP8tzCf/LMwm
341 | /yvMJf8qzCT/Kcwj/yjMIv8nzCH/Jswg/yXMH/8kzB7/I8wd/yLMHP8hzBv/IMwa/x/MGf8ezBj/HcwX
342 | /xzMFv8bzBX/duBy/yKPDv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
343 | AAAAAAAAAAAAAAAAANu4i//t0q7//+zR///s0f//7ND//+zQ///r0P//69D//+vP///rz///687//+vO
344 | ///rzv//687//+vN///qzf//6s3//+rN///qzf//6sz/P48x/4bgg/80zC//M8wu/zLMLf8xzCz/MMwr
345 | /y/MKf8uzCj/Lcwn/yzMJv8rzCX/Kswk/ynMI/8ozCL/J8wh/ybMIP8lzB//JMwe/yPMHf8izBz/Icwb
346 | /yDMGv8fzBn/HswY/x3MF/8czBb/G8wV/3bgcv8ijw7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
347 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbuIv//+zR///fsv//37L//9+y///fsf//37H//96w
348 | ///esP//3q///96v///erv//3a7//92t///drf//3az//9ys///crP//3Kv//9yr/z+PMf+G4IP/NMwv
349 | /zPMLv8yzC3/Mcws/zDMK/8vzCn/Lswo/y3MJ/8szCb/K8wl/yrMJP8pzCP/KMwi/yfMIf8mzCD/Jcwf
350 | /yTMHv8jzB3/Iswc/yHMG/8gzBr/H8wZ/x7MGP8dzBf/HMwW/xvMFf924HL/Io8O/wAAAAAAAAAAAAAA
351 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA27iM///s0f//37P//9+y
352 | ///fsv//37L//9+x///fsf//3rD//96w///er///3q///96u///drv//3a3//92t///drP//3Kz//9ys
353 | ///cq/8/jzH/huCD/zTML/8zzC7/Mswt/zHMLP8wzCv/L8wp/y7MKP8tzCf/LMwm/yvMJf8qzCT/Kcwj
354 | /yjMIv8nzCH/Jswg/yXMH/8kzB7/I8wd/yLMHP8hzBv/IMwa/x/MGf8ezBj/HcwX/xzMFv8bzBX/duBy
355 | /yKPDv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
356 | ANu4jP//7NL//+Cz///fs///37L//9+y///fsv//37H//9+x///esP//3rD//96v///er///3q7//92u
357 | ///drf//3a3//92s///crP//3Kz/P48x/4bgg/80zC//M8wu/zLMLf8xzCz/MMwr/y/MKf8uzCj/Lcwn
358 | /yzMJv8rzCX/Kswk/ynMI/8ozCL/J8wh/ybMIP8lzB//JMwe/yPMHf8izBz/Icwb/yDMGv8fzBn/HswY
359 | /x3MF/8czBb/G8wV/3bgcv8ijw7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
360 | AAAAAAAAAAAAAAAAAAAAAADbuI3//+zS///gtP//4LP//9+z///fsv//37L//9+y///fsf//37H//96w
361 | ///esP//3q///96v///erv//3a7//92t///drf//3az//9ys/z+PMf+G4IP/NMwv/zPMLv8yzC3/Mcws
362 | /zDMK/8vzCn/Lswo/y3MJ/8szCb/K8wl/yrMJP8pzCP/KMwi/yfMIf8mzCD/Jcwf/yTMHv8jzB3/Iswc
363 | /yHMG/8gzBr/H8wZ/x7MGP8dzBf/HMwW/xvMFf924HL/Io8O/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
364 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA27iN///s0///4LT//+C0///gs///37P//9+y
365 | ///fsv//37L//9+x///fsf//3rD//96w///er///3q///96u///drv//3a3//92t///drP8/jzH/huCD
366 | /zTML/8zzC7/Mswt/zHMLP8wzCv/L8wp/y7MKP8tzCf/LMwm/yvMJf8qzCT/Kcwj/yjMIv8nzCH/Jswg
367 | /yXMH/8kzB7/I8wd/yLMHP8hzBv/IMwa/x/MGf8ezBj/HcwX/xzMFv8bzBX/duBy/yKPDv8AAAAAAAAA
368 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANu5jf//7NP//+C1
369 | ///gtP//4LT//+Cz///fs///37L//9+y///fsv//37H//9+x///esP//3rD//96v///er///3q7//92u
370 | ///drf/z2KX/P48x/4bgg/80zC//M8wu/zLMLf8xzCz/MMwr/y/MKf8uzCj/Lcwn/yzMJv8rzCX/Kswk
371 | /ynMI/8ozCL/J8wh/ybMIP8lzB//JMwe/yPMHf8izBz/Icwb/yDMGv8fzBn/HswY/x3MF/8czBb/G8wV
372 | /3HbbP8ijw7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
373 | AAAAAADbuY7//+3T///gtf//4LX//+C0///gtP//4LP//9+z///fsv//37L//9+y///fsf//37H//96w
374 | ///esP//3q///96v///erv//3a7/89il/z+PMf9iuFn/heCC/4Xggv+E4IH/g+CA/4PggP+C4H//guB+
375 | /4Hgff+A4H3/gOB8/3/gfP9/4Hv/fuB6/33gev994Hn/fOB5/3zgeP974Hf/euB3/3rgdv954Hb/eeB1
376 | /3jgdP934HT/d+Bz/3bgc/9MuEH/Io8O/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
377 | AAAAAAAAAAAAAAAAAAAAAAAAAAAA27mO///t0///4bb//+C1///gtf//4LT//+C0///gs///37P//9+y
378 | ///fsv//37L//9+x///fsf//3rD//96w///er///3q///96u///drv+ftm//Po8v/z2PLv88jy3/O48s
379 | /zqPK/85jyr/OI8o/zePJ/82jyb/NY8l/zSPI/8zjyL/Mo8h/zGPIP8wjx//L48e/y6PHP8tjxv/LI8a
380 | /yuPGf8qjxf/KY8W/yiPFf8njxT/Jo8T/yWPEv8kjxD/I48P/yKPDoAAAAAAAAAAAAAAAAAAAAAAAAAA
381 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANu5j///7dT//+G2///htv//4LX//+C1
382 | ///gtP//4LT//+Cz///fs///37L//9+y///fsv//37H//9+x///esP//3rD//96v///er///3q7//92u
383 | ///drf//3a3//92s///crP//3Kz//9yr///cq///6sz/27SD/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
384 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
385 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbuY///+3U
386 | ///ht///4bb//+G2///gtf//4LX//+C0///gtP//4LP//9+z///fsv//37L//9+y///fsf//37H//96w
387 | ///esP//3q///96v///erv//3a7//92t///drf//3az//9ys///crP//3Kv//+rN/9u0g/8AAAAAAAAA
388 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
389 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
390 | AAAAAAAAAAAA27qP///t1P//4bf//+G3///htv//4bb//+C1///gtf//4LT//+C0///gs///37P//9+y
391 | ///fsv//37L//9+x///fsf//3rD//96w///er///3q///96u///drv//3a3//92t///drP//3Kz//9ys
392 | ///qzf/btIT/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
393 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
394 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANu6kP//7tT//+G4///ht///4bf//+G2///htv//4LX//+C1
395 | ///gtP//4LT//+Cz///fs///37L//9+y///fsv//37H//9+x///esP//3rD//96v///er///3q7//92u
396 | ///drf//3a3//92s///crP//6s3/27WE/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
397 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
398 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbupH//+7V///iuP//4bj//+G3
399 | ///ht///4bb//+G2///gtf//4LX//+C0///gtP//4LP//9+z///fsv//37L//9+y///fsf//37H//96w
400 | ///esP//3q///96v///erv//3a7//92t///drf//3az//+rN/9u1hP8AAAAAAAAAAAAAAAAAAAAAAAAA
401 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
402 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA27qR
403 | ///u1f//4rn//+K4///huP//4bf//+G3///htv//4bb//+C1///gtf//4LT//+C0///gs///37P//9+y
404 | ///fsv//37L//9+x///fsf//3rD//96w///er///3q///96u///drv//3a3//92t///rzf/btYX/AAAA
405 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
406 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
407 | AAAAAAAAAAAAAAAAANu6kv//7tX//+K5///iuf//4rj//+G4///ht///4bf//+G2///htv//4LX//+C1
408 | ///gtP//4LT//+Cz///fs///37L//9+y///fsv//37H//9+x///esP//3rD//96v///er///3q7//92u
409 | ///drf//687/27WF/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
410 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
411 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbu5L//+7W///iuf//4rn//+K5///iuP//4bj//+G3
412 | ///ht///4bb//+G2///gtf//4LX//+C0///gtP//4LP//9+z///fsv//37L//9+y///fsf//37H//96w
413 | ///esP//3q///96v///erv//3a7//+vO/9u2hv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
414 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
415 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA27uS///u1v//4rr//+K5
416 | ///iuf//4rn//+K4///huP//4bf//+G3///htv//4bb//+C1///gtf//4LT//+C0///gs///37P//9+y
417 | ///fsv//37L//9+x///fsf//3rD//96w///er///3q///96u///rzv/btob/AAAAAAAAAAAAAAAAAAAA
418 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
419 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
420 | ANu7kv//7tb//+O6///iuv//4rn//+K5///iuf//4rj//+G4///ht///4bf//+G2///htv//4LX//+C1
421 | ///gtP//4LT//+Cz///fs///37L//9+y///fsv//37H//9+x///esP//3rD//96v///er///687/27aG
422 | /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
423 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
424 | AAAAAAAAAAAAAAAAAAAAAADbu5P//+7W///ju///47r//+K6///iuf//4rn//+K5///iuP//4bj//+G3
425 | ///ht///4bb//+G2///gtf//4LX//+C0///gtP//4LP//9+z///fsv//37L//9+y///fsf//37H//96w
426 | ///esP//3q///+vP/9u2hv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
427 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
428 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA27uT///u1///47v//+O7///juv//4rr//+K5
429 | ///iuf//4rn//+K4///huP//4bf//+G3///htv//4bb//+C1///gtf//4LT//+C0///gs///37P//9+y
430 | ///fsv//37L//9+x///fsf//3rD//96w///rz//btof/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
431 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
432 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANu8lP//7tf//+O8
433 | ///ju///47v//+O6///iuv//4rn//+K5///iuf//4rj//+G4///ht///4bf//+G2///htv//4LX//+C1
434 | ///gtP//4LT//+Cz///fs///37L//9+y///fsv//37H//9+x///esP//69D/27aH/wAAAAAAAAAAAAAA
435 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
436 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
437 | AAAAAADbvJT//+/X///jvP//47z//+O7///ju///47r//+K6///iuf//4rn//+K5///iuP//4bj//+G3
438 | ///ht///4bb//+G2///gtf//4LX//+C0///gtP//4LP//9+z///fsv//37L//9+y///fsf//37H//+vQ
439 | /9u2iP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
440 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
441 | AAAAAAAAAAAAAAAAAAAAAAAAAAAA27yV///v1///5L3//+O8///jvP//47v//+O7///juv//4rr//+K5
442 | ///iuf//4rn//+K4///huP//4bf//+G3///htv//4bb//+C1///gtf//4LT//+C0///gs///37P//9+y
443 | ///fsv//37L//9+x///s0P/bt4j/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
444 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
445 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANu8lf//79j//+S9///kvf//47z//+O8
446 | ///ju///47v//+O6///iuv//4rn//+K5///iuf//4rj//+G4///ht///4bf//+G2///htv//4LX//+C1
447 | ///gtP//4LT//+Cz///fs///37L//9+y///fsv//7ND/27eJ/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
448 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
449 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbvJb//+/Y
450 | ///kvv//5L3//+S9///jvP//47z//+O7///ju///47r//+K6///iuf//4rn//+K5///iuP//4bj//+G3
451 | ///ht///4bb//+G2///gtf//4LX//+C0///gtP//4LP//9+z///fsv//37L//+zR/9u3if8AAAAAAAAA
452 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
453 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
454 | AAAAAAAAAAAA272W///v2f//5L7//+S+///kvf//5L3//+O8///jvP//47v//+O7///juv//4rr//+K5
455 | ///iuf//4rn//+K4///huP//4bf//+G3///htv//4bb//+C1///gtf//4LT//+C0///gs///37P//9+y
456 | //3pzf/buIr/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
457 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
458 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANu9l//t1rj//+/Z///v2P//79j//+/X///v1///7tf//+7X
459 | ///u1v//7tb//+7W///u1v//7tX//+7V///u1f//7tT//+3U///t1P//7dT//+3T///t0///7NP//+zT
460 | ///s0v//7NL//+zR///s0f/t0q7/27iK/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
461 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
462 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbvZeA272X/9u9lv/bvJb/27yV
463 | /9u8lf/bvJT/27yU/9u7k//bu5P/27uS/9u7kv/bu5L/27qS/9u6kf/bupH/27qQ/9u6j//buY//27mP
464 | /9u5jv/buY7/27mN/9u4jf/buI3/27iM/9u4jP/buIv/27iL/9u4i4AAAAAAAAAAAAAAAAAAAAAAAAAA
465 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
466 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
467 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
468 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
469 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
470 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
471 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
472 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
473 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
474 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
475 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
476 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
477 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
478 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
479 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
480 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
481 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
482 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
483 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
484 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
485 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
486 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
487 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
488 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
489 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
490 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
491 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
492 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
493 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
494 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
495 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
496 | AAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////////////////////////////////////////////
497 | ///////////////////////////gAAAAf////+AAAAB////f4AAAAH///8/gAAAAf///x+AAAAB////D
498 | 4AAAAH///gHgAAAAf//4AOAAAAB///AAYAAAAH//4ABgAAAAf//AAOAAAAB//4AB4AAAAH//gMPgAAAA
499 | f/8Hx+AAAAB//w/P4AAAAH//H9/gAAAAf/8//+AAAAB//z//4AAAAH//f//gAAAAf////+AAAAB//gAA
500 | AAAAAH/+AAAAAAAAf/4AAAAAAAB//gAAAAAAAH/+AAAAAAAAf/4AAAAAAAB//gAAAAAAAH/+AAAAAAAA
501 | f/4AAAAAAAB//gAAAAAAAH/+AAAAB/////4AAAAH/////gAAAAf////+AAAAB/////4AAAAH/////gAA
502 | AAf////+AAAAB/////4AAAAH/////gAAAAf////+AAAAB/////4AAAAH/////gAAAAf////+AAAAB///
503 | //4AAAAH/////gAAAAf////+AAAAB/////4AAAAH/////gAAAAf////+AAAAB/////4AAAAH////////
504 | //////////////////////////////////////////////////////////////////////8oAAAAMAAA
505 | AGAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
506 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
507 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
508 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
509 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
510 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
511 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
512 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
513 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
514 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
515 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
516 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
517 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
518 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
519 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
520 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
521 | 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
549 | /yzMJ/8rzCX/Kcwk/yjMI/8nzCH/Jcwg/yTMHv8jzB3/Icwb/yDMGv8ezBn/HcwX/xzMFv924HL/Io8O
550 | /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACmZxxAu3ck/+SWNf+/eSX/pmcb
551 | v6ZnG2CmZhsgAAAAAMd/J//cjzD/qmgZ76ZlGDAAAAAAAAAAAAAAAAAAAAAAP48x/4Xggv8zzC7/Msws
552 | /zDMK/8vzCr/Lswo/yzMJ/8rzCX/Kcwk/yjMI/8nzCH/Jcwg/yTMHv8jzB3/Icwb/yDMGv8ezBn/HcwX
553 | /xzMFv924HL/Io8O/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACmZhmfy4Io
554 | /69sHO+mZhlQAAAAAAAAAAAAAAAAAAAAALt1H/+qZxfvpmQVMAAAAAAAAAAAAAAAAAAAAAAAAAAAP48x
555 | /4Xggv8zzC7/Msws/zDMK/8vzCr/Lswo/yzMJ/8rzCX/Kcwk/yjMI/8nzCH/Jcwg/yTMHv8jzB3/Icwb
556 | /yDMGv8ezBn/HcwX/xzMFv924HL/Io8O/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
557 | AAAAAACmZRbfr2sa76ZlFzAAAAAAAAAAAAAAAAAAAAAAAAAAAKZjEu+mYxMwAAAAAAAAAAAAAAAAAAAA
558 | AAAAAAAAAAAAP48x/4Xggv8zzC7/Msws/zDMK/8vzCr/Lswo/yzMJ/8rzCX/Kcwk/yjMI/8nzCH/Jcwg
559 | /yTMHv8jzB3/Icwb/yDMGv8ezBn/HcwX/xzMFv924HL/Io8O/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
560 | AAAAAAAAAAAAAAAAAAAAAACmYxP/pmMTcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKZiEDAAAAAAAAAA
561 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAP48x/4Xggv8zzC7/Msws/zDMK/8vzCr/Lswo/yzMJ/8rzCX/Kcwk
562 | /yjMI/8nzCH/Jcwg/yTMHv8jzB3/Icwb/yDMGv8ezBn/HcwX/xzMFv924HL/Io8O/wAAAAAAAAAAAAAA
563 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACmYhHfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
564 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP48x/4Xggv8zzC7/Msws/zDMK/8vzCr/Lswo
565 | /yzMJ/8rzCX/Kcwk/yjMI/8nzCH/Jcwg/yTMHv8jzB3/Icwb/yDMGv8ezBn/HcwX/xzMFv924HL/Io8O
566 | /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACmYQ9AAAAAAAAAAAAAAAAAAAAA
567 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP48x/4Xggv8zzC7/Msws
568 | /zDMK/8vzCr/Lswo/yzMJ/8rzCX/Kcwk/yjMI/8nzCH/Jcwg/yTMHv8jzB3/Icwb/yDMGv8ezBn/HcwX
569 | /xzMFv924HL/Io8O/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
570 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP48x
571 | /4Xggv8zzC7/Msws/zDMK/8vzCr/Lswo/yzMJ/8rzCX/Kcwk/yjMI/8nzCH/Jcwg/yTMHv8jzB3/Icwb
572 | /yDMGv8ezBn/HcwX/xzMFv924HL/Io8O/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
573 | AAAAAADbuIvP27iK/9u3if/bt4n/27eI/9u2h//btof/27aG/9u2hv/btob/27WF/9u1hP/btYT/27SD
574 | /9u0gv/bs4L/P48x/4Xggv8zzC7/Msws/zDMK/8vzCr/Lswo/yzMJ/8rzCX/Kcwk/yjMI/8nzCH/Jcwg
575 | /yTMHv8jzB3/Icwb/yDMGv8ezBn/HcwX/xzMFv924HL/Io8O/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
576 | AAAAAAAAAAAAAAAAAAAAAADbuIv/+OLE///s0f//7ND//+zQ///r0P//68///+vP///rzv//687//+vO
577 | ///rzf//6s3//+rN///qzP//6sz/P48x/4Xggv8zzC7/Msws/zDMK/8vzCr/Lswo/yzMJ/8rzCX/Kcwk
578 | /yjMI/8nzCH/Jcwg/yTMHv8jzB3/Icwb/yDMGv8ezBn/HcwX/xzMFv924HL/Io8O/wAAAAAAAAAAAAAA
579 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbuIz//+zR///fs///37L//9+x///fsf//3rD//96v
580 | ///er///3q7//92t///drf//3az//9ys///cq///3Kr/P48x/4Xggv8zzC7/Msws/zDMK/8vzCr/Lswo
581 | /yzMJ/8rzCX/Kcwk/yjMI/8nzCH/Jcwg/yTMHv8jzB3/Icwb/yDMGv8ezBn/HcwX/xzMFv924HL/Io8O
582 | /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbuIz//+zS///gs///37P//9+y
583 | ///fsf//37H//96w///er///3q///96u///drf//3a3//92s///crP//3Kv/P48x/4Xggv8zzC7/Msws
584 | /zDMK/8vzCr/Lswo/yzMJ/8rzCX/Kcwk/yjMI/8nzCH/Jcwg/yTMHv8jzB3/Icwb/yDMGv8ezBn/HcwX
585 | /xzMFv924HL/Io8O/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbuI3//+zS
586 | ///gtP//4LP//9+z///fsv//37H//9+x///esP//3q///96v///erv//3a3//92t///drP/n0pz/P48x
587 | /3jRc/+F4IL/hOCA/4PggP+C4H//guB+/4Dgff+A4Hz/f+B8/37ge/994Hr/fOB5/3zgeP974Hf/euB2
588 | /3ngdv944HX/d+B0/3fgc/9hzFr/Io8O/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
589 | AAAAAADbuY3//+zT///gtP//4LT//+Cz///fs///37L//9+x///fsf//3rD//96v///er///3q7//92t
590 | ///drf//3az/Y55I/z2PL/88jy3/O48s/zmPKv84jyj/N48n/zWPJf80jyP/Mo8i/zGPIP8wjx//Lo8d
591 | /y2PG/8sjxr/Ko8Y/ymPFv8njxX/Jo8T/yWPEv8jjxD/Io8OzwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
592 | AAAAAAAAAAAAAAAAAAAAAADbuY7//+3T///gtf//4LT//+C0///gs///37P//9+y///fsf//37H//96w
593 | ///er///3q///96u///drf//3a3//92s///crP//3Kv//9yq///qzP/bs4L/AAAAAAAAAAAAAAAAAAAA
594 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
595 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbuY///+3T///htv//4LX//+C0///gtP//4LP//9+z
596 | ///fsv//37H//9+x///esP//3q///96v///erv//3a3//92t///drP//3Kz//9yr///qzP/btIL/AAAA
597 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
598 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbuY///+3U///htv//4bb//+C1
599 | ///gtP//4LT//+Cz///fs///37L//9+x///fsf//3rD//96v///er///3q7//92t///drf//3az//9ys
600 | ///qzf/btIP/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
601 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbupD//+3U
602 | ///ht///4bb//+G2///gtf//4LT//+C0///gs///37P//9+y///fsf//37H//96w///er///3q///96u
603 | ///drf//3a3//92s///qzf/btYT/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
604 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
605 | AAAAAADbupD//+7U///huP//4bf//+G2///htv//4LX//+C0///gtP//4LP//9+z///fsv//37H//9+x
606 | ///esP//3q///96v///erv//3a3//92t///rzf/btYT/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
607 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
608 | AAAAAAAAAAAAAAAAAAAAAADbupH//+7V///iuP//4bj//+G3///htv//4bb//+C1///gtP//4LT//+Cz
609 | ///fs///37L//9+x///fsf//3rD//96v///er///3q7//92t///rzv/btYX/AAAAAAAAAAAAAAAAAAAA
610 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
611 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbu5L//+7V///iuf//4rj//+G4///ht///4bb//+G2
612 | ///gtf//4LT//+C0///gs///37P//9+y///fsf//37H//96w///er///3q///96u///rzv/btob/AAAA
613 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
614 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbu5L//+7W///iuf//4rn//+K4
615 | ///huP//4bf//+G2///htv//4LX//+C0///gtP//4LP//9+z///fsv//37H//9+x///esP//3q///96v
616 | ///rzv/btob/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
617 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbu5L//+7W
618 | ///juv//4rn//+K5///iuP//4bj//+G3///htv//4bb//+C1///gtP//4LT//+Cz///fs///37L//9+x
619 | ///fsf//3rD//96v///rz//btob/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
620 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
621 | AAAAAADbu5P//+7W///ju///47r//+K5///iuf//4rj//+G4///ht///4bb//+G2///gtf//4LT//+C0
622 | ///gs///37P//9+y///fsf//37H//96w///rz//btof/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
623 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
624 | AAAAAAAAAAAAAAAAAAAAAADbvJT//+7X///ju///47v//+O6///iuf//4rn//+K4///huP//4bf//+G2
625 | ///htv//4LX//+C0///gtP//4LP//9+z///fsv//37H//9+x///r0P/btof/AAAAAAAAAAAAAAAAAAAA
626 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
627 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbvJT//+/X///jvP//47v//+O7///juv//4rn//+K5
628 | ///iuP//4bj//+G3///htv//4bb//+C1///gtP//4LT//+Cz///fs///37L//9+x///s0P/bt4j/AAAA
629 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
630 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbvJX//+/X///kvf//47z//+O7
631 | ///ju///47r//+K5///iuf//4rj//+G4///ht///4bb//+G2///gtf//4LT//+C0///gs///37P//9+y
632 | ///s0P/bt4n/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
633 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbvJb//+/Y
634 | ///kvf//5L3//+O8///ju///47v//+O6///iuf//4rn//+K4///huP//4bf//+G2///htv//4LX//+C0
635 | ///gtP//4LP//9+z///s0f/bt4n/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
636 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
637 | AAAAAADbvZb/+ObM///v2P//79f//+/X///u1///7tb//+7W///u1v//7tX//+7V///u1P//7dT//+3U
638 | ///t0///7dP//+zT///s0v//7NL//+zR//bfv//buIr/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
639 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
640 | AAAAAAAAAAAAAAAAAAAAAADbvZfP272W/9u8lv/bvJX/27yU/9u8lP/bu5P/27uS/9u7kv/bu5L/27qR
641 | /9u6kP/bupD/27mP/9u5j//buY7/27mN/9u4jf/buIz/27iM/9u4i//buIvPAAAAAAAAAAAAAAAAAAAA
642 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
643 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
644 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
645 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
646 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
647 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
648 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
649 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
650 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
651 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
652 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
653 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
654 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
655 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
656 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
657 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
658 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
659 | AAAAAAAAAAAA////////AAD///////8AAP///////wAA////////jv////////+2///7+AAAH7X///n4
660 | AAAftP//+PgAAB+z///4eAAAH7L//8A4AAAfsf//ABgAAB+w//4AGAAAH6///AAYAAAfrv/8ADgAAB9v
661 | //gIeAAAHy7/+Hj4AAAfLP/4+fgAAB8q//n7+AAAHyf/+//4AAAfJf/7//gAAB8i////+AAAHyD/+AAA
662 | AAAfHv/4AAAAAB8b//gAAAAAHxn/+AAAAAAfFv/4AAAAAB8U//gAAAAAHxL/+AAAH///D//4AAAf//8A
663 | APgAAB///wAA+AAAH///AAD4AAAf//8AAPgAAB///wAA+AAAH///AAD4AAAf//8AAPgAAB///4//+AAA
664 | H///tv/4AAAf//+1//gAAB///7T/+AAAH///s//4AAAf//+y//gAAB///7L/+AAAH///sf////////+w
665 | /////////6//////////rv////////+t/////////6z/KAAAACgAAABQAAAAAQAgAAAAAAAAAAAAAAAA
666 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
667 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
668 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
669 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
670 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
671 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
672 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
673 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
674 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
675 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
676 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
677 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
678 | AD6PMM89jy//O48t/zqPK/84jyn/N48n/zWPJf80jyP/Mo8h/zCPH/8vjx7/LY8c/yyPGv8qjxj/KY8W
679 | /yePFP8ljxL/JI8Q/yKPDs8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
680 | AAAAAAAAAAAAAAAAAAAAAACmcDCfAAAAAAAAAAAAAAAAAAAAAAAAAAA/jzH/gdt9/4Tggf+D4ID/guB/
681 | /4Lgfv+A4H3/gOB8/3/gfP994Hr/feB5/3zgef974Hf/euB2/3ngdv944HT/d+Bz/3HbbP8ijw7/AAAA
682 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsncw
683 | /6ZuLJ8AAAAAAAAAAAAAAAAAAAAAP48x/4Xggv8yzC3/Mcws/y/MKv8uzCj/LMwn/yvMJf8pzCT/J8wi
684 | /ybMIP8kzB//I8wd/yHMG/8gzBr/HswY/xzMFv924HP/Io8O/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
685 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACmbCkgpmwocMeFM//Pizb/pmwnnwAAAAAAAAAAAAAA
686 | AD+PMf+F4IL/Mswt/zHMLP8vzCr/Lswo/yzMJ/8rzCX/Kcwk/yfMIv8mzCD/JMwf/yPMHf8hzBv/IMwa
687 | /x7MGP8czBb/duBz/yKPDv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
688 | AKZrJiCmbCavt3gs/8+KNP/gljn/6Jw8/8+JM/+maiKfAAAAAAAAAAA/jzH/heCC/zLMLf8xzCz/L8wq
689 | /y7MKP8szCf/K8wl/ynMJP8nzCL/Jswg/yTMH/8jzB3/Icwb/yDMGv8ezBj/HMwW/3bgc/8ijw7/AAAA
690 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKZqIzCqbiXv2I81/+ibO//omzv/6Js7
691 | /+ibO//omzv/v3sp/6ZoHnAAAAAAP48x/4Xggv8yzC3/Mcws/y/MKv8uzCj/LMwn/yvMJf8pzCT/J8wi
692 | /ybMIP8kzB//I8wd/yHMG/8gzBr/HswY/xzMFv924HP/Io8O/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
693 | AAAAAAAAAAAAAAAAAKZpIBCqbCLv3JE0/+iaOf/ckTP/2I4y/+CUNf/omjn/z4ct/6ZnHM+mZxwQAAAA
694 | AD+PMf+F4IL/Mswt/zHMLP8vzCr/Lswo/yzMJ/8rzCX/Kcwk/yfMIv8mzCD/JMwf/yPMHf8hzBv/IMwa
695 | /x7MGP8czBb/duBz/yKPDv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACmaB2fz4ct
696 | /8eAKf+qah3vpmcbn6ZnG4DHgCj/z4Yr/6ZmGM+mZhkQAAAAAAAAAAA/jzH/heCC/zLMLf8xzCz/L8wq
697 | /y7MKP8szCf/K8wl/ynMJP8nzCL/Jswg/yTMH/8jzB3/Icwb/yDMGv8ezBj/HMwW/3bgc/8ijw7/AAAA
698 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACmZhkQrmwd/7JvHv+mZhmAAAAAAAAAAAAAAAAAsm4b
699 | /6ZkFc+mZBYQAAAAAAAAAAAAAAAAP48x/4Xggv8yzC3/Mcws/y/MKv8uzCj/LMwn/yvMJf8pzCT/J8wi
700 | /ybMIP8kzB//I8wd/yHMG/8gzBr/HswY/xzMFv924HP/Io8O/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
701 | AAAAAAAAAAAAsW0bYKZkFv+mZRZgAAAAAAAAAAAAAAAAAAAAAKZjEs+mYxMQAAAAAAAAAAAAAAAAAAAA
702 | AD+PMf+F4IL/Mswt/zHMLP8vzCr/Lswo/yzMJ/8rzCX/Kcwk/yfMIv8mzCD/JMwf/yPMHf8hzBv/IMwa
703 | /x7MGP8czBb/duBz/yKPDv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKZjE4CmYxKPAAAA
704 | AAAAAAAAAAAAAAAAAAAAAACmYg8QAAAAAAAAAAAAAAAAAAAAAAAAAAA/jzH/heCC/zLMLf8xzCz/L8wq
705 | /y7MKP8szCf/K8wl/ynMJP8nzCL/Jswg/yTMH/8jzB3/Icwb/yDMGv8ezBj/HMwW/3bgc/8ijw7/AAAA
706 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACmYg9gpmIQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
707 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAP48x/4Xggv8yzC3/Mcws/y/MKv8uzCj/LMwn/yvMJf8pzCT/J8wi
708 | /ybMIP8kzB//I8wd/yHMG/8gzBr/HswY/xzMFv924HP/Io8O/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
709 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
710 | AD+PMf+F4IL/Mswt/zHMLP8vzCr/Lswo/yzMJ/8rzCX/Kcwk/yfMIv8mzCD/JMwf/yPMHf8hzBv/IMwa
711 | /x7MGP8czBb/duBz/yKPDv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANu4i8/buIr/27eJ
712 | /9u3if/btoj/27aH/9u2hv/btob/27aG/9u1hf/btYT/27SD/9u0g/8/jzH/heCC/zLMLf8xzCz/L8wq
713 | /y7MKP8szCf/K8wl/ynMJP8nzCL/Jswg/yTMH/8jzB3/Icwb/yDMGv8ezBj/HMwW/3bgc/8ijw7/AAAA
714 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbuIv//enN///s0f//7ND//+vQ///r0P//68///+vO
715 | ///rzv//687//+rN///qzf//6sz/P48x/4Xggv8yzC3/Mcws/y/MKv8uzCj/LMwn/yvMJf8pzCT/J8wi
716 | /ybMIP8kzB//I8wd/yHMG/8gzBr/HswY/xzMFv924HP/Io8O/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
717 | AAAAAAAAAAAA27iM///s0f//37P//9+y///fsf//3rD//96w///er///3q7//92t///drf//3Kz//9yr
718 | /z+PMf+F4IL/Mswt/zHMLP8vzCr/Lswo/yzMJ/8rzCX/Kcwk/yfMIv8mzCD/JMwf/yPMHf8hzBv/IMwa
719 | /x7MGP8czBb/duBz/yKPDv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANu4jf//7NL//+Cz
720 | ///fs///37L//9+x///esP//3rD//96v///erv//3a3//92t///crP8/jzH/heCC/zLMLf8xzCz/L8wq
721 | /y7MKP8szCf/K8wl/ynMJP8nzCL/Jswg/yTMH/8jzB3/Icwb/yDMGv8ezBj/HMwW/3bgc/8ijw7/AAAA
722 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbuI3//+zT///gtP//4LP//9+z///fsv//37H//96w
723 | ///esP//3q///96u///drf/n053/P48x/4Hbff+E4IH/g+CA/4Lgf/+C4H7/gOB9/4DgfP9/4Hz/feB6
724 | /33gef984Hn/e+B3/3rgdv954Hb/eOB0/3fgc/9x22z/Io8O/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
725 | AAAAAAAAAAAA27mO///s0///4LX//+C0///gs///37P//9+y///fsf//3rD//96w///er///3q7//92t
726 | /2OeSP89jy//O48t/zqPK/84jyn/N48n/zWPJf80jyP/Mo8h/zCPH/8vjx7/LY8c/yyPGv8qjxj/KY8W
727 | /yePFP8ljxL/JI8Q/yKPDs8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANu5j///7dP//+C1
728 | ///gtf//4LT//+Cz///fs///37L//9+x///esP//3rD//96v///erv//3a3//92t///crP//3Kv//+rM
729 | /9u0g/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
730 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbuY///+3U///htv//4LX//+C1///gtP//4LP//9+z
731 | ///fsv//37H//96w///esP//3q///96u///drf//3a3//9ys///qzf/btIP/AAAAAAAAAAAAAAAAAAAA
732 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
733 | AAAAAAAAAAAA27qQ///t1P//4bf//+G2///gtf//4LX//+C0///gs///37P//9+y///fsf//3rD//96w
734 | ///er///3q7//92t///drf//6s3/27WE/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
735 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANu6kf//7tT//+G4
736 | ///ht///4bb//+C1///gtf//4LT//+Cz///fs///37L//9+x///esP//3rD//96v///erv//3a3//+vO
737 | /9u1hf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
738 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbupL//+7V///iuP//4bj//+G3///htv//4LX//+C1
739 | ///gtP//4LP//9+z///fsv//37H//96w///esP//3q///96u///rzv/btob/AAAAAAAAAAAAAAAAAAAA
740 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
741 | AAAAAAAAAAAA27uS///u1v//4rn//+K4///huP//4bf//+G2///gtf//4LX//+C0///gs///37P//9+y
742 | ///fsf//3rD//96w///er///687/27aG/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
743 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANu7kv//7tb//+K6
744 | ///iuf//4rj//+G4///ht///4bb//+C1///gtf//4LT//+Cz///fs///37L//9+x///esP//3rD//+vP
745 | /9u2hv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
746 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbu5P//+7W///ju///4rr//+K5///iuP//4bj//+G3
747 | ///htv//4LX//+C1///gtP//4LP//9+z///fsv//37H//96w///r0P/btof/AAAAAAAAAAAAAAAAAAAA
748 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
749 | AAAAAAAAAAAA27yU///u1///47v//+O7///iuv//4rn//+K4///huP//4bf//+G2///gtf//4LX//+C0
750 | ///gs///37P//9+y///fsf//69D/27aI/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
751 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANu8lf//79f//+O8
752 | ///ju///47v//+K6///iuf//4rj//+G4///ht///4bb//+C1///gtf//4LT//+Cz///fs///37L//+zQ
753 | /9u3if8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
754 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbvJX//+/Y///kvf//47z//+O7///ju///4rr//+K5
755 | ///iuP//4bj//+G3///htv//4LX//+C1///gtP//4LP//9+z///s0f/bt4n/AAAAAAAAAAAAAAAAAAAA
756 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
757 | AAAAAAAAAAAA272W//3s1P//79j//+/X///u1///7tb//+7W///u1v//7tX//+7U///t1P//7dT//+3T
758 | ///s0///7NP//+zS///s0f/96c3/27iK/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
759 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANu9l8/bvZb/27yV
760 | /9u8lf/bvJT/27uT/9u7kv/bu5L/27qS/9u6kf/bupD/27mP/9u5j//buY7/27iN/9u4jf/buIz/27iL
761 | /9u4i88AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
762 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
763 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
764 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
765 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
766 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
767 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
768 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
769 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
770 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
771 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
772 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////9+z
773 | ////////37H////////esP///////96v////gAAP687//++AAA8AAAD/54AADwAAAP+DgAAPAAAA/gGA
774 | AA8AAAD8AIAADwAAAPgAgAAPAAAA+AGAAA8AAADw44AADwAAAPHngAAPAAAA8++AAA8AAADz/4AADwAA
775 | AP//gAAPAAAA8AAAAA8AAADwAAAAD7uS//AAAAAP4rn/8AAAAA/iuP/wAAAAD+G3//AAAAAP4bb/8AAB
776 | ///gtP/wAAH//+Cz//AAAf//37L/8AAB///fsf/wAAH//96v//AAAf//687/8AAB//8AAADwAAH//wAA
777 | APAAAf//AAAA8AAB//8AAADwAAH//wAAAPAAAf//AAAA8AAB//8AAAD//////wAAAP//////AAAA////
778 | //8AAAD//////wAAACgAAAAgAAAAQAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
779 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
780 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
781 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
782 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
783 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
784 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
785 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
786 | AAAAAAAAAAAAAAAAAD6PMO88jy7/Oo8r/ziPKf82jyf/NI8k/zKPIv8wjx//Lo8d/yyPG/8qjxj/KI8W
787 | /yaPE/8kjxH/Io8P7wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
788 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAPo8w/4Xggv+E4ID/g+B//4Hgfv+A4H3/f+B8/37gev994Hn/e+B4
789 | /3rgd/954Hb/eOB0/3fgc/8ijw//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
790 | AAAAAAAAAAAApnAwnwAAAAAAAAAAAAAAAAAAAAA+jzD/heCC/zHMLP8vzCr/Lcwo/yvMJv8pzCT/J8wi
791 | /yXMIP8jzB7/Icwc/x/MGv8dzBj/d+Bz/yKPD/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
792 | AAAAAAAAAAAAAAAAAAAAAACmbSv/pm0pnwAAAAAAAAAAAAAAAD6PMP+F4IL/Mcws/y/MKv8tzCj/K8wm
793 | /ynMJP8nzCL/Jcwg/yPMHv8hzBz/H8wa/x3MGP934HP/Io8P/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
794 | AAAAAAAAAAAAAAAAAKZsJiCmbCefrnIq/8eEMv+/fi7/pmojnwAAAAAAAAAAPo8w/4Xggv8xzCz/L8wq
795 | /y3MKP8rzCb/Kcwk/yfMIv8lzCD/I8we/yHMHP8fzBr/HcwY/3fgc/8ijw//AAAAAAAAAAAAAAAAAAAA
796 | AAAAAAAAAAAAAAAAAAAAAACmaiIwqm0l79iPNf/omzr/6Js6/+ibOv+ubyL/pmgeYAAAAAA+jzD/heCC
797 | /zHMLP8vzCr/Lcwo/yvMJv8pzCT/J8wi/yXMIP8jzB7/Icwc/x/MGv8dzBj/d+Bz/yKPD/8AAAAAAAAA
798 | AAAAAAAAAAAAAAAAAAAAAAAAAAAApmgeEKpsIe/Phy7/v3on/7d0I//DfSj/v3ol/6ZmGp8AAAAAAAAA
799 | AD6PMP+F4IL/Mcws/y/MKv8tzCj/K8wm/ynMJP8nzCL/Jcwg/yPMHv8hzBz/H8wa/x3MGP934HP/Io8P
800 | /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACmZhqAqmkc/6ZmGq+mZhowAAAAAKZlFv+mZRafAAAA
801 | AAAAAAAAAAAAPo8w/4Xggv8xzCz/L8wq/y3MKP8rzCb/Kcwk/yfMIv8lzCD/I8we/yHMHP8fzBr/HcwY
802 | /3fgc/8ijw//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKZkFr+mZBaPAAAAAAAAAAAAAAAApmMS
803 | nwAAAAAAAAAAAAAAAAAAAAA+jzD/heCC/zHMLP8vzCr/Lcwo/yvMJv8pzCT/J8wi/yXMIP8jzB7/Icwc
804 | /x/MGv8dzBj/d+Bz/yKPD/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApmIR3wAAAAAAAAAAAAAA
805 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD6PMP+F4IL/Mcws/y/MKv8tzCj/K8wm/ynMJP8nzCL/Jcwg
806 | /yPMHv8hzBz/H8wa/x3MGP934HP/Io8P/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACmYQ4gAAAA
807 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPo8w/4Xggv8xzCz/L8wq/y3MKP8rzCb/Kcwk
808 | /yfMIv8lzCD/I8we/yHMHP8fzBr/HcwY/3fgc/8ijw//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA27iL
809 | 79u4iv/bt4n/27aI/9u2h//btob/27aG/9u1hf/btYT/27SD/9u0gv8+jzD/heCC/zHMLP8vzCr/Lcwo
810 | /yvMJv8pzCT/J8wi/yXMIP8jzB7/Icwc/x/MGv8dzBj/d+Bz/yKPD/8AAAAAAAAAAAAAAAAAAAAAAAAA
811 | AAAAAADbuIz//+zR///s0f//7ND//+vQ///rz///687//+vO///rzf//6s3//+rM/z6PMP+F4IL/Mcws
812 | /y/MKv8tzCj/K8wm/ynMJP8nzCL/Jcwg/yPMHv8hzBz/H8wa/x3MGP934HP/Io8P/wAAAAAAAAAAAAAA
813 | AAAAAAAAAAAAAAAAANu4jP//7NL//9+z///fsv//37H//96w///er///3a7//92t///drP/z16T/Po8w
814 | /4Xggv+E4ID/g+B//4Hgfv+A4H3/f+B8/37gev994Hn/e+B4/3rgd/954Hb/eOB0/3fgc/8ijw//AAAA
815 | AAAAAAAAAAAAAAAAAAAAAAAAAAAA27iN///s0v//4LT//9+z///fsv//37H//96w///er///3a7//92t
816 | //PYpf9KlDj/PI8u/zqPK/84jyn/No8n/zSPJP8yjyL/MI8f/y6PHf8sjxv/Ko8Y/yiPFv8mjxP/JI8R
817 | /yKPD+8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbuY7//+zT///gtP//4LT//9+z///fsv//37H//96w
818 | ///er///3a7//92t///drP//3Kv//+rM/9u0gv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
819 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANu5j///7dP//+C1///gtP//4LT//9+z
820 | ///fsv//37H//96w///er///3a7//92t///drP//6s3/27SD/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
821 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA27qQ///t1P//4bb//+C1
822 | ///gtP//4LT//9+z///fsv//37H//96w///er///3a7//92t///rzf/btYT/AAAAAAAAAAAAAAAAAAAA
823 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbupH//+7U
824 | ///ht///4bb//+C1///gtP//4LT//9+z///fsv//37H//96w///er///3a7//+vO/9u1hf8AAAAAAAAA
825 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
826 | ANu7kv//7tX//+K4///ht///4bb//+C1///gtP//4LT//9+z///fsv//37H//96w///er///687/27aG
827 | /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
828 | AAAAAAAAAAAA27uS///u1v//4rn//+K4///ht///4bb//+C1///gtP//4LT//9+z///fsv//37H//96w
829 | ///rz//btob/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
830 | AAAAAAAAAAAAAAAAAAAAAADbu5P//+7W///juv//4rn//+K4///ht///4bb//+C1///gtP//4LT//9+z
831 | ///fsv//37H//+vQ/9u2h/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
832 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANu8lP//7tf//+O7///juv//4rn//+K4///ht///4bb//+C1
833 | ///gtP//4LT//9+z///fsv//7ND/27aI/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
834 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA27yV///v1///47z//+O7///juv//4rn//+K4
835 | ///ht///4bb//+C1///gtP//4LT//9+z///s0f/bt4n/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
836 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbvJb//+/Y///v1///7tf//+7W
837 | ///u1v//7tX//+7U///t1P//7dP//+zT///s0v//7NL//+zR/9u4iv8AAAAAAAAAAAAAAAAAAAAAAAAA
838 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANu9l+/bvJb/27yV
839 | /9u8lP/bu5P/27uS/9u7kv/bupH/27qQ/9u5j//buY7/27iN/9u4jP/buIz/27iL7wAAAAAAAAAAAAAA
840 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
841 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
842 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
843 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
844 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
845 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
846 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
847 | AAAAAAAAAAAA//////////////////wAB//8AAf/vAAH/5wAB/wMAAf4BAAH8AwAB/CcAAfzvAAH9/wA
848 | B/f8AAfgAAAH4AAAB+AAAAfgAAAH4AA//+AAP//gAD//4AA//+AAP//gAD//4AA//+AAP//gAD//4AA/
849 | /+AAP/////////////////8oAAAAGAAAADAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
850 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
851 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
852 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
853 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
854 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
855 | AAAAAAAAAAAAAAAAAKZvL58AAAAAAAAAAAAAAAA+jzD/O48t/zmPKv82jyb/M48j/zCPIP8ujxz/K48Z
856 | /yiPFv8ljxL/I48P/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApmwoMKZtKv+mbCifAAAA
857 | AAAAAAA+jzD/hOCB/4PggP+B4H7/f+B8/37gev984Hn/euB3/3ngdf934HT/I48P/wAAAAAAAAAAAAAA
858 | AAAAAAAAAAAAAAAAAKZrJTCmayXfv30u/9ONNf+/fSz/pmkhnwAAAAA+jzD/hOCB/zDMKv8tzCf/Kswl
859 | /yfMIv8lzB//Iswc/x/MGv934HT/I48P/wAAAAAAAAAAAAAAAAAAAAAAAAAApmkgMKpsIu/Hgiz/x4Er
860 | /8+HLv+/eif/pmccnwAAAAA+jzD/hOCB/zDMKv8tzCf/Kswl/yfMIv8lzB//Iswc/x/MGv934HT/I48P
861 | /wAAAAAAAAAAAAAAAAAAAAAAAAAApmcbr6ZmG/+mZhuPpmYbUKZlF/+mZRefAAAAAAAAAAA+jzD/hOCB
862 | /zDMKv8tzCf/Kswl/yfMIv8lzB//Iswc/x/MGv934HT/I48P/wAAAAAAAAAAAAAAAAAAAAAAAAAApmQW
863 | 76ZlFzAAAAAAAAAAAKZjEp8AAAAAAAAAAAAAAAA+jzD/hOCB/zDMKv8tzCf/Kswl/yfMIv8lzB//Iswc
864 | /x/MGv934HT/I48P/wAAAAAAAAAAAAAAAAAAAAAAAAAApmIQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
865 | AAAAAAA+jzD/hOCB/zDMKv8tzCf/Kswl/yfMIv8lzB//Iswc/x/MGv934HT/I48P/wAAAAAAAAAAAAAA
866 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+jzD/hOCB/zDMKv8tzCf/Kswl
867 | /yfMIv8lzB//Iswc/x/MGv934HT/I48P/wAAAAAAAAAAAAAAAAAAAADdu4//5MSb/+TEmv/kw5n/5MOY
868 | /+TDl//kwpb/5MGV/+TBlP8+jzD/hOCB/zDMKv8tzCf/Kswl/yfMIv8lzB//Iswc/x/MGv934HT/I48P
869 | /wAAAAAAAAAAAAAAAAAAAADkxZ7//+nK///lwf//5cD//+W////kvv//5L3//+O8///ju/8+jzD/hOCB
870 | /4PggP+B4H7/f+B8/37gev984Hn/euB3/3ngdf934HT/I48P/wAAAAAAAAAAAAAAAAAAAADkxZ///+bD
871 | ///fs///37H//96w///er///3a7//92s/+fSnP8+jzD/O48t/zmPKv82jyb/M48j/zCPIP8ujxz/K48Z
872 | /yiPFv8ljxL/I48P/xjMEiAAAAAAAAAAAAAAAADkxqD//+bE///gtP//37P//9+x///esP//3q///92u
873 | ///drP//47z/5MGV/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
874 | AAAAAADkxqD//+fF///gtf//4LT//9+z///fsf//3rD//96v///drv//5L3/5MKW/wAAAAAAAAAAAAAA
875 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADkx6L//+fG///htv//4LX//+C0
876 | ///fs///37H//96w///er///5L7/5MOX/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
877 | AAAAAAAAAAAAAAAAAAAAAADkyKP//+jH///huP//4bb//+C1///gtP//37P//9+x///esP//5b//5MOY
878 | /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADkyKT//+jI
879 | ///iuf//4bj//+G2///gtf//4LT//9+z///fsf//5cD/5MOZ/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
880 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADkyaX//+nJ///juv//4rn//+G4///htv//4LX//+C0
881 | ///fs///5cH/5MSa/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
882 | AAAAAADkyab//+zQ///pyf//6Mj//+jH///nxv//58X//+bE///mw///6cr/5MSb/wAAAAAAAAAAAAAA
883 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdwJv/5Mmm/+TJpf/kyKT/5Mij
884 | /+THov/kxqD/5Mag/+TFn//kxZ7/3buP///fsiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
885 | 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
937 | /4B/s/+Af7H/gH+w/4B/zv+AP4X///8AAA==
938 |
939 |
940 |
--------------------------------------------------------------------------------
/Iconizer/IconExtractor/IconExtractor.cs:
--------------------------------------------------------------------------------
1 | /*
2 | * IconExtractor/IconUtil for .NET
3 | * Copyright (C) 2014 Tsuda Kageyu. All rights reserved.
4 | *
5 | * Redistribution and use in source and binary forms, with or without
6 | * modification, are permitted provided that the following conditions
7 | * are met:
8 | *
9 | * 1. Redistributions of source code must retain the above copyright
10 | * notice, this list of conditions and the following disclaimer.
11 | * 2. Redistributions in binary form must reproduce the above copyright
12 | * notice, this list of conditions and the following disclaimer in the
13 | * documentation and/or other materials provided with the distribution.
14 | *
15 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
16 | * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
17 | * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
18 | * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER
19 | * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
20 | * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
21 | * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
22 | * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
23 | * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
24 | * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 | */
27 |
28 | using System;
29 | using System.Collections.Generic;
30 | using System.ComponentModel;
31 | using System.Drawing;
32 | using System.IO;
33 | using System.Runtime.InteropServices;
34 | using System.Text;
35 |
36 | namespace TsudaKageyu
37 | {
38 | public class IconExtractor
39 | {
40 | ////////////////////////////////////////////////////////////////////////
41 | // Constants
42 |
43 | // Flags for LoadLibraryEx().
44 |
45 | private const uint LOAD_LIBRARY_AS_DATAFILE = 0x00000002;
46 |
47 | // Resource types for EnumResourceNames().
48 |
49 | private readonly static IntPtr RT_ICON = (IntPtr)3;
50 | private readonly static IntPtr RT_GROUP_ICON = (IntPtr)14;
51 |
52 | private const int MAX_PATH = 260;
53 |
54 | ////////////////////////////////////////////////////////////////////////
55 | // Fields
56 |
57 | private byte[][] iconData = null; // Binary data of each icon.
58 |
59 | ////////////////////////////////////////////////////////////////////////
60 | // Public properties
61 |
62 | ///
63 | /// Gets the full path of the associated file.
64 | ///
65 | public string FileName
66 | {
67 | get;
68 | private set;
69 | }
70 |
71 | ///
72 | /// Gets the count of the icons in the associated file.
73 | ///
74 | public int Count
75 | {
76 | get { return iconData.Length; }
77 | }
78 |
79 | ///
80 | /// Initializes a new instance of the IconExtractor class from the specified file name.
81 | ///
82 | /// The file to extract icons from.
83 | public IconExtractor(string fileName)
84 | {
85 | Initialize(fileName);
86 | }
87 |
88 | ///
89 | /// Extracts an icon from the file.
90 | ///
91 | /// Zero based index of the icon to be extracted.
92 | /// A System.Drawing.Icon object.
93 | /// Always returns new copy of the Icon. It should be disposed by the user.
94 | public Icon GetIcon(int index)
95 | {
96 | if (index < 0 || Count <= index)
97 | throw new ArgumentOutOfRangeException("index");
98 |
99 | // Create an Icon from the .ico file in memory.
100 |
101 | using (var ms = new MemoryStream(iconData[index]))
102 | {
103 | return new Icon(ms);
104 | }
105 | }
106 |
107 | ///
108 | /// Extracts all the icons from the file.
109 | ///
110 | /// An array of System.Drawing.Icon objects.
111 | /// Always returns new copies of the Icons. They should be disposed by the user.
112 | public Icon[] GetAllIcons()
113 | {
114 | var icons = new List();
115 | for (int i = 0; i < Count; ++i)
116 | icons.Add(GetIcon(i));
117 |
118 | return icons.ToArray();
119 | }
120 |
121 | ///
122 | /// Save an icon to the specified output Stream.
123 | ///
124 | /// Zero based index of the icon to be saved.
125 | /// The Stream to save to.
126 | public void Save(int index, Stream outputStream)
127 | {
128 | if (index < 0 || Count <= index)
129 | throw new ArgumentOutOfRangeException("index");
130 |
131 | if (outputStream == null)
132 | throw new ArgumentNullException("outputStream");
133 |
134 | var data = iconData[index];
135 | outputStream.Write(data, 0, data.Length);
136 | }
137 |
138 | private void Initialize(string fileName)
139 | {
140 | if (fileName == null)
141 | throw new ArgumentNullException("fileName");
142 |
143 | IntPtr hModule = IntPtr.Zero;
144 | try
145 | {
146 | hModule = NativeMethods.LoadLibraryEx(fileName, IntPtr.Zero, LOAD_LIBRARY_AS_DATAFILE);
147 | if (hModule == IntPtr.Zero)
148 | throw new Win32Exception();
149 |
150 | FileName = GetFileName(hModule);
151 |
152 | // Enumerate the icon resource and build .ico files in memory.
153 |
154 | var tmpData = new List();
155 |
156 | ENUMRESNAMEPROC callback = (h, t, name, l) =>
157 | {
158 | // Refer to the following URL for the data structures used here:
159 | // http://msdn.microsoft.com/en-us/library/ms997538.aspx
160 |
161 | // RT_GROUP_ICON resource consists of a GRPICONDIR and GRPICONDIRENTRY's.
162 |
163 | var dir = GetDataFromResource(hModule, RT_GROUP_ICON, name);
164 |
165 | // Calculate the size of an entire .icon file.
166 |
167 | int count = BitConverter.ToUInt16(dir, 4); // GRPICONDIR.idCount
168 | int len = 6 + 16 * count; // sizeof(ICONDIR) + sizeof(ICONDIRENTRY) * count
169 | for (int i = 0; i < count; ++i)
170 | len += BitConverter.ToInt32(dir, 6 + 14 * i + 8); // GRPICONDIRENTRY.dwBytesInRes
171 |
172 | using (var dst = new BinaryWriter(new MemoryStream(len)))
173 | {
174 | // Copy GRPICONDIR to ICONDIR.
175 |
176 | dst.Write(dir, 0, 6);
177 |
178 | int picOffset = 6 + 16 * count; // sizeof(ICONDIR) + sizeof(ICONDIRENTRY) * count
179 |
180 | for (int i = 0; i < count; ++i)
181 | {
182 | // Load the picture.
183 |
184 | ushort id = BitConverter.ToUInt16(dir, 6 + 14 * i + 12); // GRPICONDIRENTRY.nID
185 | var pic = GetDataFromResource(hModule, RT_ICON, (IntPtr)id);
186 |
187 | // Copy GRPICONDIRENTRY to ICONDIRENTRY.
188 |
189 | dst.Seek(6 + 16 * i, SeekOrigin.Begin);
190 |
191 | dst.Write(dir, 6 + 14 * i, 8); // First 8bytes are identical.
192 | dst.Write(pic.Length); // ICONDIRENTRY.dwBytesInRes
193 | dst.Write(picOffset); // ICONDIRENTRY.dwImageOffset
194 |
195 | // Copy a picture.
196 |
197 | dst.Seek(picOffset, SeekOrigin.Begin);
198 | dst.Write(pic, 0, pic.Length);
199 |
200 | picOffset += pic.Length;
201 | }
202 |
203 | tmpData.Add(((MemoryStream)dst.BaseStream).ToArray());
204 | }
205 |
206 | return true;
207 | };
208 | NativeMethods.EnumResourceNames(hModule, RT_GROUP_ICON, callback, IntPtr.Zero);
209 |
210 | iconData = tmpData.ToArray();
211 | }
212 | finally
213 | {
214 | if (hModule != IntPtr.Zero)
215 | NativeMethods.FreeLibrary(hModule);
216 | }
217 | }
218 |
219 | private byte[] GetDataFromResource(IntPtr hModule, IntPtr type, IntPtr name)
220 | {
221 | // Load the binary data from the specified resource.
222 |
223 | IntPtr hResInfo = NativeMethods.FindResource(hModule, name, type);
224 | if (hResInfo == IntPtr.Zero)
225 | throw new Win32Exception();
226 |
227 | IntPtr hResData = NativeMethods.LoadResource(hModule, hResInfo);
228 | if (hResData == IntPtr.Zero)
229 | throw new Win32Exception();
230 |
231 | IntPtr pResData = NativeMethods.LockResource(hResData);
232 | if (pResData == IntPtr.Zero)
233 | throw new Win32Exception();
234 |
235 | uint size = NativeMethods.SizeofResource(hModule, hResInfo);
236 | if (size == 0)
237 | throw new Win32Exception();
238 |
239 | byte[] buf = new byte[size];
240 | Marshal.Copy(pResData, buf, 0, buf.Length);
241 |
242 | return buf;
243 | }
244 |
245 | private string GetFileName(IntPtr hModule)
246 | {
247 | // Alternative to GetModuleFileName() for the module loaded with
248 | // LOAD_LIBRARY_AS_DATAFILE option.
249 |
250 | // Get the file name in the format like:
251 | // "\\Device\\HarddiskVolume2\\Windows\\System32\\shell32.dll"
252 |
253 | string fileName;
254 | {
255 | var buf = new StringBuilder(MAX_PATH);
256 | int len = NativeMethods.GetMappedFileName(
257 | NativeMethods.GetCurrentProcess(), hModule, buf, buf.Capacity);
258 | if (len == 0)
259 | throw new Win32Exception();
260 |
261 | fileName = buf.ToString();
262 | }
263 |
264 | // Convert the device name to drive name like:
265 | // "C:\\Windows\\System32\\shell32.dll"
266 |
267 | for (char c = 'A'; c <= 'Z'; ++c)
268 | {
269 | var drive = c + ":";
270 | var buf = new StringBuilder(MAX_PATH);
271 | int len = NativeMethods.QueryDosDevice(drive, buf, buf.Capacity);
272 | if (len == 0)
273 | continue;
274 |
275 | var devPath = buf.ToString();
276 | if (fileName.StartsWith(devPath))
277 | return (drive + fileName.Substring(devPath.Length));
278 | }
279 |
280 | return fileName;
281 | }
282 | }
283 | }
284 |
--------------------------------------------------------------------------------
/Iconizer/IconExtractor/IconUtil.cs:
--------------------------------------------------------------------------------
1 | /*
2 | * IconExtractor/IconUtil for .NET
3 | * Copyright (C) 2014 Tsuda Kageyu. All rights reserved.
4 | *
5 | * Redistribution and use in source and binary forms, with or without
6 | * modification, are permitted provided that the following conditions
7 | * are met:
8 | *
9 | * 1. Redistributions of source code must retain the above copyright
10 | * notice, this list of conditions and the following disclaimer.
11 | * 2. Redistributions in binary form must reproduce the above copyright
12 | * notice, this list of conditions and the following disclaimer in the
13 | * documentation and/or other materials provided with the distribution.
14 | *
15 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
16 | * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
17 | * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
18 | * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER
19 | * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
20 | * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
21 | * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
22 | * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
23 | * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
24 | * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 | */
27 |
28 | using System;
29 | using System.Collections.Generic;
30 | using System.Drawing;
31 | using System.IO;
32 | using System.Reflection;
33 | using System.Reflection.Emit;
34 |
35 | namespace TsudaKageyu
36 | {
37 | public static class IconUtil
38 | {
39 | private delegate byte[] GetIconDataDelegate(Icon icon);
40 |
41 | static GetIconDataDelegate getIconData;
42 |
43 | static IconUtil()
44 | {
45 | // Create a dynamic method to access Icon.iconData private field.
46 |
47 | var dm = new DynamicMethod(
48 | "GetIconData", typeof(byte[]), new Type[] { typeof(Icon) }, typeof(Icon));
49 | var fi = typeof(Icon).GetField(
50 | "iconData", BindingFlags.Instance | BindingFlags.NonPublic);
51 | var gen = dm.GetILGenerator();
52 | gen.Emit(OpCodes.Ldarg_0);
53 | gen.Emit(OpCodes.Ldfld, fi);
54 | gen.Emit(OpCodes.Ret);
55 |
56 | getIconData = (GetIconDataDelegate)dm.CreateDelegate(typeof(GetIconDataDelegate));
57 | }
58 |
59 | ///
60 | /// Split an Icon consists of multiple icons into an array of Icon each
61 | /// consists of single icons.
62 | ///
63 | /// A System.Drawing.Icon to be split.
64 | /// An array of System.Drawing.Icon.
65 | public static Icon[] Split(Icon icon)
66 | {
67 | if (icon == null)
68 | throw new ArgumentNullException("icon");
69 |
70 | // Get an .ico file in memory, then split it into separate icons.
71 |
72 | var src = GetIconData(icon);
73 |
74 | var splitIcons = new List();
75 | {
76 | int count = BitConverter.ToUInt16(src, 4);
77 |
78 | for (int i = 0; i < count; i++)
79 | {
80 | int length = BitConverter.ToInt32(src, 6 + 16 * i + 8); // ICONDIRENTRY.dwBytesInRes
81 | int offset = BitConverter.ToInt32(src, 6 + 16 * i + 12); // ICONDIRENTRY.dwImageOffset
82 |
83 | using (var dst = new BinaryWriter(new MemoryStream(6 + 16 + length)))
84 | {
85 | // Copy ICONDIR and set idCount to 1.
86 |
87 | dst.Write(src, 0, 4);
88 | dst.Write((short)1);
89 |
90 | // Copy ICONDIRENTRY and set dwImageOffset to 22.
91 |
92 | dst.Write(src, 6 + 16 * i, 12); // ICONDIRENTRY except dwImageOffset
93 | dst.Write(22); // ICONDIRENTRY.dwImageOffset
94 |
95 | // Copy a picture.
96 |
97 | dst.Write(src, offset, length);
98 |
99 | // Create an icon from the in-memory file.
100 |
101 | dst.BaseStream.Seek(0, SeekOrigin.Begin);
102 | splitIcons.Add(new Icon(dst.BaseStream));
103 | }
104 | }
105 | }
106 |
107 | return splitIcons.ToArray();
108 | }
109 |
110 | ///
111 | /// Converts an Icon to a GDI+ Bitmap preserving the transparent area.
112 | ///
113 | /// An System.Drawing.Icon to be converted.
114 | /// A System.Drawing.Bitmap Object.
115 | public static Bitmap ToBitmap(Icon icon)
116 | {
117 | if (icon == null)
118 | throw new ArgumentNullException("icon");
119 |
120 | // Quick workaround: Create an .ico file in memory, then load it as a Bitmap.
121 |
122 | using (var ms = new MemoryStream())
123 | {
124 | icon.Save(ms);
125 | using (var bmp = (Bitmap)Image.FromStream(ms))
126 | {
127 | return new Bitmap(bmp);
128 | }
129 | }
130 | }
131 |
132 | ///
133 | /// Gets the bit depth of an Icon.
134 | ///
135 | /// An System.Drawing.Icon object.
136 | /// Bit depth of the icon.
137 | ///
138 | /// This method takes into account the PNG header.
139 | /// If the icon has multiple variations, this method returns the bit
140 | /// depth of the first variation.
141 | ///
142 | public static int GetBitCount(Icon icon)
143 | {
144 | if (icon == null)
145 | throw new ArgumentNullException("icon");
146 |
147 | // Get an .ico file in memory, then read the header.
148 |
149 | var data = GetIconData(icon);
150 | if (data.Length >= 51
151 | && data[22] == 0x89 && data[23] == 0x50 && data[24] == 0x4e && data[25] == 0x47
152 | && data[26] == 0x0d && data[27] == 0x0a && data[28] == 0x1a && data[29] == 0x0a
153 | && data[30] == 0x00 && data[31] == 0x00 && data[32] == 0x00 && data[33] == 0x0d
154 | && data[34] == 0x49 && data[35] == 0x48 && data[36] == 0x44 && data[37] == 0x52)
155 | {
156 | // The picture is PNG. Read IHDR chunk.
157 |
158 | switch (data[47])
159 | {
160 | case 0:
161 | return data[46];
162 | case 2:
163 | return data[46] * 3;
164 | case 3:
165 | return data[46];
166 | case 4:
167 | return data[46] * 2;
168 | case 6:
169 | return data[46] * 4;
170 | default:
171 | // NOP
172 | break;
173 | }
174 | }
175 | else if (data.Length >= 22)
176 | {
177 | // The picture is not PNG. Read ICONDIRENTRY structure.
178 |
179 | return BitConverter.ToUInt16(data, 12);
180 | }
181 |
182 | throw new ArgumentException("The icon is corrupt. Couldn't read the header.", "icon");
183 | }
184 |
185 | private static byte[] GetIconData(Icon icon)
186 | {
187 | var data = getIconData(icon);
188 | if (data != null)
189 | {
190 | return data;
191 | }
192 | else
193 | {
194 | using (var ms = new MemoryStream())
195 | {
196 | icon.Save(ms);
197 | return ms.ToArray();
198 | }
199 | }
200 | }
201 | }
202 | }
203 |
--------------------------------------------------------------------------------
/Iconizer/IconExtractor/NativeMethods.cs:
--------------------------------------------------------------------------------
1 | /*
2 | * IconExtractor/IconUtil for .NET
3 | * Copyright (C) 2014 Tsuda Kageyu. All rights reserved.
4 | *
5 | * Redistribution and use in source and binary forms, with or without
6 | * modification, are permitted provided that the following conditions
7 | * are met:
8 | *
9 | * 1. Redistributions of source code must retain the above copyright
10 | * notice, this list of conditions and the following disclaimer.
11 | * 2. Redistributions in binary form must reproduce the above copyright
12 | * notice, this list of conditions and the following disclaimer in the
13 | * documentation and/or other materials provided with the distribution.
14 | *
15 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
16 | * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
17 | * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
18 | * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER
19 | * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
20 | * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
21 | * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
22 | * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
23 | * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
24 | * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 | */
27 |
28 | using System;
29 | using System.Runtime.InteropServices;
30 | using System.Security;
31 | using System.Text;
32 |
33 | namespace TsudaKageyu
34 | {
35 | internal static class NativeMethods
36 | {
37 | [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
38 | [SuppressUnmanagedCodeSecurity]
39 | public static extern IntPtr LoadLibraryEx(string lpFileName, IntPtr hFile, uint dwFlags);
40 |
41 | [DllImport("kernel32.dll", SetLastError = true)]
42 | [SuppressUnmanagedCodeSecurity]
43 | public static extern bool FreeLibrary(IntPtr hModule);
44 |
45 | [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
46 | [SuppressUnmanagedCodeSecurity]
47 | public static extern bool EnumResourceNames(IntPtr hModule, IntPtr lpszType, ENUMRESNAMEPROC lpEnumFunc, IntPtr lParam);
48 |
49 | [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
50 | [SuppressUnmanagedCodeSecurity]
51 | public static extern IntPtr FindResource(IntPtr hModule, IntPtr lpName, IntPtr lpType);
52 |
53 | [DllImport("kernel32.dll", SetLastError = true)]
54 | [SuppressUnmanagedCodeSecurity]
55 | public static extern IntPtr LoadResource(IntPtr hModule, IntPtr hResInfo);
56 |
57 | [DllImport("kernel32.dll", SetLastError = true)]
58 | [SuppressUnmanagedCodeSecurity]
59 | public static extern IntPtr LockResource(IntPtr hResData);
60 |
61 | [DllImport("kernel32.dll", SetLastError = true)]
62 | [SuppressUnmanagedCodeSecurity]
63 | public static extern uint SizeofResource(IntPtr hModule, IntPtr hResInfo);
64 |
65 | [DllImport("kernel32.dll", SetLastError = true)]
66 | [SuppressUnmanagedCodeSecurity]
67 | public static extern IntPtr GetCurrentProcess();
68 |
69 | [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
70 | [SuppressUnmanagedCodeSecurity]
71 | public static extern int QueryDosDevice(string lpDeviceName, StringBuilder lpTargetPath, int ucchMax);
72 |
73 | [DllImport("psapi.dll", SetLastError = true, CharSet = CharSet.Unicode)]
74 | [SuppressUnmanagedCodeSecurity]
75 | public static extern int GetMappedFileName(IntPtr hProcess, IntPtr lpv, StringBuilder lpFilename, int nSize);
76 | }
77 |
78 | [UnmanagedFunctionPointer(CallingConvention.Winapi, SetLastError = true, CharSet = CharSet.Unicode)]
79 | [SuppressUnmanagedCodeSecurity]
80 | internal delegate bool ENUMRESNAMEPROC(IntPtr hModule, IntPtr lpszType, IntPtr lpszName, IntPtr lParam);
81 | }
82 |
--------------------------------------------------------------------------------
/Iconizer/Iconizer.cs:
--------------------------------------------------------------------------------
1 | // https://stackoverflow.com/questions/1922040/resize-an-image-c-sharp
2 | // https://stackoverflow.com/questions/3213999/how-to-create-an-icon-file-that-contains-multiple-sizes-images-in-c-sharp
3 |
4 | using System;
5 | using System.Collections.Generic;
6 | using System.Diagnostics;
7 | using System.Drawing;
8 | using System.Drawing.Drawing2D;
9 | using System.Drawing.Imaging;
10 | using System.IO;
11 | using System.Linq;
12 | using System.Runtime.InteropServices;
13 | using System.Windows.Forms;
14 |
15 | ///
16 | /// Method utilities for creating icons, checking path, resize, etc.
17 | ///
18 | public class Utility
19 | {
20 |
21 | ///
22 | /// Resize the image to the specified width and height.
23 | ///
24 | /// The image to resize.
25 | /// The width to resize to.
26 | /// The height to resize to.
27 | /// The resized image.
28 | public static Bitmap ResizeImage(Image image, Size size, bool fit)
29 | {
30 | var width = size.Width;
31 | var height = size.Height;
32 | var destRect = new Rectangle(0, 0, width, height);
33 | var destImage = new Bitmap(width, height, PixelFormat.Format32bppArgb);
34 |
35 | if (fit)
36 | {
37 | if (image.Width > image.Height)
38 | {
39 | destRect.Height = (int)(image.Height / (float)image.Width * height);
40 | destRect.Y = (height - destRect.Height) / 2;
41 | }
42 | else
43 | {
44 | destRect.Width = (int)(image.Width / (float)image.Height * width);
45 | destRect.X = (width - destRect.Width) / 2;
46 | }
47 | }
48 |
49 | destImage.SetResolution(image.HorizontalResolution, image.VerticalResolution);
50 |
51 | using (var graphics = Graphics.FromImage(destImage))
52 | {
53 | graphics.CompositingMode = CompositingMode.SourceCopy;
54 | graphics.CompositingQuality = CompositingQuality.HighQuality;
55 | graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
56 | graphics.SmoothingMode = SmoothingMode.HighQuality;
57 | graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
58 |
59 | using (var wrapMode = new ImageAttributes())
60 | {
61 | wrapMode.SetWrapMode(WrapMode.TileFlipXY);
62 | graphics.DrawImage(image, destRect, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, wrapMode);
63 | }
64 | }
65 |
66 | return destImage;
67 | }
68 |
69 |
70 |
71 | // ---------------------------------------------------------------------------------------
72 | // ---------------------------------------------------------------------------------------
73 |
74 | ///
75 | /// Represents the max allowed width of an icon.
76 | ///
77 | private const int MaxIconWidth = 256;
78 |
79 | ///
80 | /// Represents the max allowed height of an icon.
81 | ///
82 | private const int MaxIconHeight = 256;
83 |
84 | private const ushort HeaderReserved = 0;
85 | private const ushort HeaderIconType = 1;
86 | private const byte HeaderLength = 6;
87 |
88 | private const byte EntryReserved = 0;
89 | private const byte EntryLength = 16;
90 |
91 | private const byte PngColorsInPalette = 0;
92 | private const ushort PngColorPlanes = 1;
93 |
94 | ///
95 | /// Saves the specified objects as a single
96 | /// icon into the output stream.
97 | ///
98 | /// The bitmaps to save as an icon.
99 | /// The output stream.
100 | ///
101 | /// The expected input for the parameter are
102 | /// portable network graphic files that have a
103 | /// of and where the
104 | /// width is less than or equal to and the
105 | /// height is less than or equal to .
106 | ///
107 | ///
108 | /// Occurs if any of the input images do
109 | /// not follow the required image format. See remarks for details.
110 | ///
111 | ///
112 | /// Occurs if any of the arguments are null.
113 | ///
114 | public static void SavePngsAsIcon(IEnumerable images, Stream stream)
115 | {
116 | if (images == null)
117 | throw new ArgumentNullException("images");
118 | if (stream == null)
119 | throw new ArgumentNullException("stream");
120 |
121 | Bitmap[] orderedImages = images.Where(i => i != null)
122 | .OrderBy(i => i.Width)
123 | .ThenBy(i => i.Height)
124 | .ToArray();
125 |
126 | using (var writer = new BinaryWriter(stream))
127 | {
128 |
129 | // write the header
130 | writer.Write(HeaderReserved);
131 | writer.Write(HeaderIconType);
132 | writer.Write((ushort)orderedImages.Length);
133 |
134 | // save the image buffers and offsets
135 | Dictionary buffers = new Dictionary();
136 |
137 | // tracks the length of the buffers as the iterations occur
138 | // and adds that to the offset of the entries
139 | uint lengthSum = 0;
140 | uint baseOffset = (uint)(HeaderLength +
141 | EntryLength * orderedImages.Length);
142 |
143 | for (int i = 0; i < orderedImages.Length; i++)
144 | {
145 | Bitmap image = orderedImages[i];
146 |
147 | // creates a byte array from an image
148 | byte[] buffer = CreateImageBuffer(image);
149 |
150 | // calculates what the offset of this image will be
151 | // in the stream
152 | uint offset = (baseOffset + lengthSum);
153 |
154 | // writes the image entry
155 | writer.Write(GetIconWidth(image));
156 | writer.Write(GetIconHeight(image));
157 | writer.Write(PngColorsInPalette);
158 | writer.Write(EntryReserved);
159 | writer.Write(PngColorPlanes);
160 | writer.Write((ushort)Image.GetPixelFormatSize(image.PixelFormat));
161 | writer.Write((uint)buffer.Length);
162 | writer.Write(offset);
163 |
164 | lengthSum += (uint)buffer.Length;
165 |
166 | // adds the buffer to be written at the offset
167 | buffers.Add(offset, buffer);
168 | }
169 |
170 | // writes the buffers for each image
171 | foreach (var kvp in buffers)
172 | {
173 |
174 | // seeks to the specified offset required for the image buffer
175 | writer.BaseStream.Seek(kvp.Key, SeekOrigin.Begin);
176 |
177 | // writes the buffer
178 | writer.Write(kvp.Value);
179 | }
180 | }
181 |
182 | }
183 |
184 | private static byte GetIconHeight(Bitmap image)
185 | {
186 | if (image.Height == MaxIconHeight)
187 | return 0;
188 |
189 | return (byte)image.Height;
190 | }
191 |
192 | private static byte GetIconWidth(Bitmap image)
193 | {
194 | if (image.Width == MaxIconWidth)
195 | return 0;
196 |
197 | return (byte)image.Width;
198 | }
199 |
200 | private static byte[] CreateImageBuffer(Bitmap image)
201 | {
202 | using (var stream = new MemoryStream())
203 | {
204 | image.Save(stream, ImageFormat.Png);
205 |
206 | return stream.ToArray();
207 | }
208 | }
209 |
210 | // ---------------------------------------------------------------------------------------
211 | // ---------------------------------------------------------------------------------------
212 |
213 | private static string numberPattern = " ({0})";
214 |
215 | public static string NextAvailableFilename(string path)
216 | {
217 | // Short-cut if already available
218 | if (!File.Exists(path))
219 | return path;
220 |
221 | // If path has extension then insert the number pattern just before the extension and return next filename
222 | if (Path.HasExtension(path))
223 | return GetNextFilename(path.Insert(path.LastIndexOf(Path.GetExtension(path)), numberPattern));
224 |
225 | // Otherwise just append the pattern to the path and return next filename
226 | return GetNextFilename(path + numberPattern);
227 | }
228 |
229 | private static string GetNextFilename(string pattern)
230 | {
231 | string tmp = string.Format(pattern, 1);
232 | if (tmp == pattern)
233 | throw new ArgumentException("The pattern must include an index place-holder", "pattern");
234 |
235 | if (!File.Exists(tmp))
236 | return tmp; // short-circuit if no matches
237 |
238 | int min = 1, max = 2; // min is inclusive, max is exclusive/untested
239 |
240 | while (File.Exists(string.Format(pattern, max)))
241 | {
242 | min = max;
243 | max *= 2;
244 | }
245 |
246 | while (max != min + 1)
247 | {
248 | int pivot = (max + min) / 2;
249 | if (File.Exists(string.Format(pattern, pivot)))
250 | min = pivot;
251 | else
252 | max = pivot;
253 | }
254 |
255 | return string.Format(pattern, max);
256 | }
257 |
258 | // -------------------------------------------------------------------------------------------
259 |
260 | public static Icon GetNicestIcon (Icon[] icons)
261 | {
262 | var nicest = icons[0];
263 | var nicestDepth = TsudaKageyu.IconUtil.GetBitCount(nicest);
264 | for (int i = 1; i < icons.Length; i++)
265 | {
266 | var icon = icons[i];
267 | var bit = TsudaKageyu.IconUtil.GetBitCount(icon);
268 | if (!(icon.Width < nicest.Width && icon.Height < nicest.Height) && bit >= nicestDepth)
269 | {
270 | nicest = icon;
271 | nicestDepth = bit;
272 | }
273 | }
274 | return nicest;
275 | }
276 |
277 | [DllImport("kernel32.dll", SetLastError =true)]
278 | public static extern bool Wow64DisableWow64FsRedirection(ref IntPtr intptr);
279 |
280 | [DllImport("kernel32.dll", SetLastError = true)]
281 | public static extern bool Wow64RevertWow64FsRedirection(ref IntPtr intptr);
282 |
283 | public static void InvalidateExplorerCache ()
284 | {
285 | try
286 | {
287 | var intptr = new IntPtr();
288 | // Calling 32 bit to external 64 bit is dangerous....
289 | if (Wow64DisableWow64FsRedirection(ref intptr))
290 | {
291 | Process.Start("ie4uinit", "-show");
292 | Wow64RevertWow64FsRedirection(ref intptr);
293 | } else
294 | Process.Start("ie4uinit", "-show");
295 | }
296 | catch (Exception)
297 | {
298 |
299 | }
300 | }
301 |
302 | }
303 |
--------------------------------------------------------------------------------
/Iconizer/Iconizer.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | AnyCPU
7 | {664F93DD-773F-410E-95DB-4C35DC3B9616}
8 | WinExe
9 | Properties
10 | Iconizer
11 | Iconizer
12 | v4.5.2
13 | 512
14 | true
15 |
16 |
17 | AnyCPU
18 | true
19 | full
20 | false
21 | bin\Debug\
22 | DEBUG;TRACE
23 | prompt
24 | 4
25 |
26 |
27 | AnyCPU
28 | pdbonly
29 | true
30 | bin\Release\
31 | TRACE
32 | prompt
33 | 4
34 |
35 |
36 | true
37 |
38 |
39 | icon.ico
40 |
41 |
42 | true
43 | bin\x64\Debug\
44 | DEBUG;TRACE
45 | full
46 | x64
47 | prompt
48 | MinimumRecommendedRules.ruleset
49 | true
50 |
51 |
52 | bin\x64\Release\
53 | TRACE
54 | true
55 | pdbonly
56 | x64
57 | prompt
58 | MinimumRecommendedRules.ruleset
59 | true
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 | Form
69 |
70 |
71 | Form1.cs
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 | Form1.cs
82 |
83 |
84 | ResXFileCodeGenerator
85 | Resources.Designer.cs
86 | Designer
87 |
88 |
89 | True
90 | Resources.resx
91 |
92 |
93 | SettingsSingleFileGenerator
94 | Settings.Designer.cs
95 |
96 |
97 | True
98 | Settings.settings
99 | True
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
116 |
--------------------------------------------------------------------------------
/Iconizer/Program.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Diagnostics;
4 | using System.Linq;
5 | using System.Threading.Tasks;
6 | using System.Windows.Forms;
7 |
8 | namespace Iconizer
9 | {
10 | static class Program
11 | {
12 | ///
13 | /// The main entry point for the application.
14 | ///
15 | [STAThread]
16 | static void Main()
17 | {
18 | Application.EnableVisualStyles();
19 | Application.SetCompatibleTextRenderingDefault(false);
20 | Application.Run(new Form1());
21 | }
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Iconizer/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // General Information about an assembly is controlled through the following
6 | // set of attributes. Change these attribute values to modify the information
7 | // associated with an assembly.
8 | [assembly: AssemblyTitle("Iconizer")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("")]
12 | [assembly: AssemblyProduct("Iconizer")]
13 | [assembly: AssemblyCopyright("Copyright © 2017")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // Setting ComVisible to false makes the types in this assembly not visible
18 | // to COM components. If you need to access a type in this assembly from
19 | // COM, set the ComVisible attribute to true on that type.
20 | [assembly: ComVisible(false)]
21 |
22 | // The following GUID is for the ID of the typelib if this project is exposed to COM
23 | [assembly: Guid("664f93dd-773f-410e-95db-4c35dc3b9616")]
24 |
25 | // Version information for an assembly consists of the following four values:
26 | //
27 | // Major Version
28 | // Minor Version
29 | // Build Number
30 | // Revision
31 | //
32 | // You can specify all the values or you can default the Build and Revision Numbers
33 | // by using the '*' as shown below:
34 | [assembly: AssemblyVersion("1.1.*")]
35 | [assembly: AssemblyFileVersion("1.1.0.0")]
36 |
--------------------------------------------------------------------------------
/Iconizer/Properties/Resources.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // This code was generated by a tool.
4 | // Runtime Version:4.0.30319.42000
5 | //
6 | // Changes to this file may cause incorrect behavior and will be lost if
7 | // the code is regenerated.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace Iconizer.Properties
12 | {
13 |
14 |
15 | ///
16 | /// A strongly-typed resource class, for looking up localized strings, etc.
17 | ///
18 | // This class was auto-generated by the StronglyTypedResourceBuilder
19 | // class via a tool like ResGen or Visual Studio.
20 | // To add or remove a member, edit your .ResX file then rerun ResGen
21 | // with the /str option, or rebuild your VS project.
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 |
28 | private static global::System.Resources.ResourceManager resourceMan;
29 |
30 | private static global::System.Globalization.CultureInfo resourceCulture;
31 |
32 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
33 | internal Resources()
34 | {
35 | }
36 |
37 | ///
38 | /// Returns the cached ResourceManager instance used by this class.
39 | ///
40 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
41 | internal static global::System.Resources.ResourceManager ResourceManager
42 | {
43 | get
44 | {
45 | if ((resourceMan == null))
46 | {
47 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Iconizer.Properties.Resources", typeof(Resources).Assembly);
48 | resourceMan = temp;
49 | }
50 | return resourceMan;
51 | }
52 | }
53 |
54 | ///
55 | /// Overrides the current thread's CurrentUICulture property for all
56 | /// resource lookups using this strongly typed resource class.
57 | ///
58 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
59 | internal static global::System.Globalization.CultureInfo Culture
60 | {
61 | get
62 | {
63 | return resourceCulture;
64 | }
65 | set
66 | {
67 | resourceCulture = value;
68 | }
69 | }
70 | }
71 | }
72 |
--------------------------------------------------------------------------------
/Iconizer/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 | text/microsoft-resx
107 |
108 |
109 | 2.0
110 |
111 |
112 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
113 |
114 |
115 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
--------------------------------------------------------------------------------
/Iconizer/Properties/Settings.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // This code was generated by a tool.
4 | // Runtime Version:4.0.30319.42000
5 | //
6 | // Changes to this file may cause incorrect behavior and will be lost if
7 | // the code is regenerated.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace Iconizer.Properties
12 | {
13 |
14 |
15 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
16 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
17 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
18 | {
19 |
20 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
21 |
22 | public static Settings Default
23 | {
24 | get
25 | {
26 | return defaultInstance;
27 | }
28 | }
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/Iconizer/Properties/Settings.settings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Iconizer/UnitData.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Drawing;
4 | using System.IO;
5 | using System.Linq;
6 | using System.Text;
7 | using System.Threading.Tasks;
8 | using System.Windows.Forms;
9 |
10 | namespace Iconizer
11 | {
12 | ///
13 | /// Each options data
14 | ///
15 | public class OptionsData
16 | {
17 | public List sizes = new List();
18 | public bool keepAspect;
19 | public bool keepCrisp;
20 |
21 | public static OptionsData FromCheckBoxes(CheckedListBox box)
22 | {
23 | var data = new OptionsData();
24 | if (box.GetItemChecked(0))
25 | data.sizes.Add(new Size(8, 8));
26 | if (box.GetItemChecked(1))
27 | data.sizes.Add(new Size(16, 16));
28 | if (box.GetItemChecked(2))
29 | data.sizes.Add(new Size(32, 32));
30 | if (box.GetItemChecked(3))
31 | data.sizes.Add(new Size(48, 48));
32 | if (box.GetItemChecked(4))
33 | data.sizes.Add(new Size(64, 64));
34 | if (box.GetItemChecked(5))
35 | data.sizes.Add(new Size(128, 128));
36 | if (box.GetItemChecked(6))
37 | data.sizes.Add(new Size(256, 256));
38 | if (box.GetItemChecked(7))
39 | data.keepCrisp = true;
40 | if (box.GetItemChecked(8))
41 | data.keepAspect = true;
42 | return data;
43 | }
44 | }
45 |
46 | ///
47 | /// Stored individual bitmap data
48 | ///
49 | public class BitmapData
50 | {
51 | public Image bitmap;
52 | public string path;
53 | public string name;
54 |
55 | public int iteration;
56 |
57 | public override int GetHashCode()
58 | {
59 | return path.GetHashCode() ^ iteration;
60 | }
61 |
62 | public override bool Equals(object obj)
63 | {
64 | return obj is BitmapData && path.GetHashCode() == ((BitmapData)obj).GetHashCode();
65 | }
66 |
67 | public string GetIcoPath()
68 | {
69 | if (iteration == 0)
70 | return Path.ChangeExtension(path, ".ico");
71 | else
72 | return Path.ChangeExtension(path, null) + iteration.ToString() + ".ico";
73 | }
74 |
75 | public string GetIcoPath(string directory)
76 | {
77 | return Path.Combine(directory, Path.GetFileName(GetIcoPath()));
78 | }
79 |
80 | public string GetPngPath()
81 | {
82 | if (iteration == 0)
83 | return Path.ChangeExtension(path, ".png");
84 | else
85 | return Path.ChangeExtension(path, null) + iteration.ToString() + ".png";
86 | }
87 |
88 | public string GetPngPath(string directory)
89 | {
90 | return Path.Combine(directory, Path.GetFileName(GetPngPath()));
91 | }
92 |
93 | }
94 |
95 |
96 | }
97 |
--------------------------------------------------------------------------------
/Iconizer/icon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/willnode/Iconizer/d10d75b8bd2293d7ae5854921406e0dbfeb9983d/Iconizer/icon.ico
--------------------------------------------------------------------------------
/Info/Iconizer.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/willnode/Iconizer/d10d75b8bd2293d7ae5854921406e0dbfeb9983d/Info/Iconizer.exe
--------------------------------------------------------------------------------
/Info/IconizerDemo.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/willnode/Iconizer/d10d75b8bd2293d7ae5854921406e0dbfeb9983d/Info/IconizerDemo.gif
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2017 Wildan Mubarok
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Iconizer
2 |
3 | Image to Icon Converter with High Quality Output
4 |
5 | 
6 |
7 | [Download Binary](Info/Iconizer.exe)
8 |
9 | ## Usage
10 |
11 | There are range of software that offer Bitmap to Icon conversion, but most of them are either too simple (only write one image per icon) or too complicated (too much button/steps). This program tries to solve this problem.
12 |
13 | ## Features
14 |
15 | In very simple step: Drag in, then drag out. You can do this with multiple files.
16 |
17 | In longer explanation you can drag Bitmaps (`*.jpg, *.png, *.bmp`) inward to add them in collections, or do this via Add Button. Other than bitmaps, you also can drag in binary files (`*.exe, *.dll`) to extract icons inside it. The software automatically pick the clearest image in case the icon is packed to multiple images.
18 |
19 | While it's easy to drag in, it's also legit to drag it out. You drag the selected icon out to the folder destination in explorer. All image processing is done quickly after you hold and move the mouse. It just works.
20 |
21 | However if you want the convenient way to save these icons, you can hit the `Quick Save` to save the icons in the same folder with each image sources. Or use the obvious `Save...` button to place all of the icons in one place together.
22 |
23 | Options above the header determines how the icon output should be generated. All `..px` options determines which resolutions should be generated and packet to the icon. `Keep crisp` means the icon won't generate larger images if source is not large enough to avoid blur. `Keep ratio` means the icon won't stretched out in case if the image doesn't have equal width and height.
24 |
25 | There also cool hidden trick: If you drag one icon out with helding down the control key, it'll also generate `desktop.ini` refering to the icon in destination folder, thus changing the folder icon in instant. Of course, the change can't be see instantly. That's why after switching focus to the software, the explorer 'blinks' to update its cache. Internally this equivalent to call `ie4uinit -show` in cmd to invalidate explorer cache.
26 |
27 | ## Credit
28 |
29 | (c) 2017 Wildan Mubarok
30 |
31 | This software uses [IconExtractor](https://github.com/TsudaKageyu/IconExtractor/) to pull icons from binaries.
32 |
33 | This software uses code snippets from SE [here](https://stackoverflow.com/a/32530019/3908409), [here](https://stackoverflow.com/a/24199315/3908409), [here](https://stackoverflow.com/a/1078898/3908409) to build the software faster than I thought.
34 |
35 | Unless otherwise stated, the code is redistributed under MIT License
--------------------------------------------------------------------------------