├── banner.png ├── source ├── PS5-Profile-Modder │ ├── Resources │ │ └── Images │ │ │ ├── ftp.png │ │ │ ├── icon.png │ │ │ ├── logo.png │ │ │ ├── other.jpg │ │ │ └── default_avatar.png │ ├── 3e15884a-7090-441d-99ff-f787a4cbc2da(2).ico │ ├── Properties │ │ ├── Settings.settings │ │ ├── Settings.Designer.cs │ │ ├── AssemblyInfo.cs │ │ ├── app.manifest │ │ ├── Resources.Designer.cs │ │ └── Resources.resx │ ├── UsersDictionary.cs │ ├── PS5User.cs │ ├── Program.cs │ ├── App.config │ ├── CropTool.cs │ ├── packages.config │ ├── CropTool.resx │ ├── ConnectForm.cs │ ├── CropTool.Designer.cs │ ├── ConnectForm.Designer.cs │ ├── Editor.Designer.cs │ ├── FodyWeavers.xsd │ ├── Editor.cs │ ├── ConnectForm.resx │ ├── PS5-Profile-Modder.csproj │ └── Editor.resx └── PS5-Profile-Modder.sln ├── README.md └── .gitignore /banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/koolaidxk1d/Hotswap/HEAD/banner.png -------------------------------------------------------------------------------- /source/PS5-Profile-Modder/Resources/Images/ftp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/koolaidxk1d/Hotswap/HEAD/source/PS5-Profile-Modder/Resources/Images/ftp.png -------------------------------------------------------------------------------- /source/PS5-Profile-Modder/Resources/Images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/koolaidxk1d/Hotswap/HEAD/source/PS5-Profile-Modder/Resources/Images/icon.png -------------------------------------------------------------------------------- /source/PS5-Profile-Modder/Resources/Images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/koolaidxk1d/Hotswap/HEAD/source/PS5-Profile-Modder/Resources/Images/logo.png -------------------------------------------------------------------------------- /source/PS5-Profile-Modder/Resources/Images/other.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/koolaidxk1d/Hotswap/HEAD/source/PS5-Profile-Modder/Resources/Images/other.jpg -------------------------------------------------------------------------------- /source/PS5-Profile-Modder/Resources/Images/default_avatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/koolaidxk1d/Hotswap/HEAD/source/PS5-Profile-Modder/Resources/Images/default_avatar.png -------------------------------------------------------------------------------- /source/PS5-Profile-Modder/3e15884a-7090-441d-99ff-f787a4cbc2da(2).ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/koolaidxk1d/Hotswap/HEAD/source/PS5-Profile-Modder/3e15884a-7090-441d-99ff-f787a4cbc2da(2).ico -------------------------------------------------------------------------------- /source/PS5-Profile-Modder/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /source/PS5-Profile-Modder/UsersDictionary.cs: -------------------------------------------------------------------------------- 1 | using ImageMagick; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Drawing; 5 | using System.Linq; 6 | using System.Text; 7 | using System.Threading.Tasks; 8 | 9 | namespace PS5_Profile_Modder { 10 | public static class Users { 11 | public static Dictionary UsersDict = new Dictionary(); 12 | } 13 | } -------------------------------------------------------------------------------- /source/PS5-Profile-Modder/PS5User.cs: -------------------------------------------------------------------------------- 1 | using ImageMagick; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Drawing; 5 | using System.Linq; 6 | using System.Text; 7 | using System.Threading.Tasks; 8 | 9 | namespace PS5_Profile_Modder { 10 | public class PS5User { 11 | public readonly string ID; 12 | public int[] TrophieCounts = new int[4]; 13 | public MagickImage Avatar; 14 | public bool Changed = false; 15 | 16 | public PS5User(string id, MagickImage avatar) { 17 | this.ID = id; 18 | this.Avatar = avatar; 19 | 20 | 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /source/PS5-Profile-Modder/Program.cs: -------------------------------------------------------------------------------- 1 | using DevExpress.LookAndFeel; 2 | using DevExpress.Skins; 3 | using DevExpress.UserSkins; 4 | using System; 5 | using System.Collections.Generic; 6 | using System.Linq; 7 | using System.Windows.Forms; 8 | 9 | namespace PS5_Profile_Modder { 10 | public static class Program { 11 | /// 12 | /// The main entry point for the application. 13 | /// 14 | [STAThread] 15 | public static void Main() { 16 | Application.EnableVisualStyles(); 17 | Application.SetCompatibleTextRenderingDefault(false); 18 | Application.Run(new Connect()); 19 | 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /source/PS5-Profile-Modder/Properties/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.18034 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 PS5_Profile_Modder.Properties { 12 | 13 | 14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] 16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { 17 | 18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 19 | 20 | public static Settings Default { 21 | get { 22 | return defaultInstance; 23 | } 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /source/PS5-Profile-Modder/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | // General Information about an assembly is controlled through the following 5 | // set of attributes. Change these attribute values to modify the information 6 | // associated with an assembly. 7 | [assembly: AssemblyTitle("HotswapPS5")] 8 | [assembly: AssemblyDescription("Automatically change your PS5 avatar.")] 9 | [assembly: AssemblyConfiguration("")] 10 | [assembly: AssemblyCompany("")] 11 | [assembly: AssemblyProduct("HotswapPS5")] 12 | [assembly: AssemblyCopyright("Copyright © koolaidxk1d 2023")] 13 | [assembly: AssemblyTrademark("")] 14 | [assembly: AssemblyCulture("")] 15 | // Setting ComVisible to false makes the types in this assembly not visible 16 | // to COM components. If you need to access a type in this assembly from 17 | // COM, set the ComVisible attribute to true on that type. 18 | [assembly: ComVisible(false)] 19 | // The following GUID is for the ID of the typelib if this project is exposed to COM 20 | [assembly: Guid("9006f149-aa49-4b8e-ba69-386d945fa738")] 21 | // Version information for an assembly consists of the following four values: 22 | // 23 | // Major Version 24 | // Minor Version 25 | // Build Number 26 | // Revision 27 | // 28 | // You can specify all the values or you can default the Build and Revision Numbers 29 | // by using the '*' as shown below: 30 | // [assembly: AssemblyVersion("1.0.*")] 31 | [assembly: AssemblyVersion("1.0.0.0")] 32 | [assembly: AssemblyFileVersion("1.0.0.0")] 33 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Hotswap 2 | ### Remote avatar changer for the PS5. 3 | 4 | ![](banner.png) 5 | 6 | ## Features 7 | - Uses existing FTP solutions. No payload needed! 8 | - Automatically handles .png/.dds file resizing and formatting 9 | - Built-in crop tool and photo editor 10 | - Pick image or take a picture with your webcam 11 | - Pull and save existing avatar 12 | - Automatic Light and Dark Mode themes 13 | 14 | ## How to Use 15 | 1) Input IP and Port to connect and grab the user data. 16 | 2) Make desired changes. 17 | 3) Click Save User to save changes to a given user. 18 | 19 | ## Build Instructions 20 | 21 | - Install [Visual Studio 2022](https://visualstudio.microsoft.com/downloads) (check the ".NET Desktop Development" box in the installer) and install [.NET Framework 4.8 Developer Pack](https://dotnet.microsoft.com/en-us/download/dotnet-framework/thank-you/net48-developer-pack-offline-installer). 22 | - Signup and get a free auth key at [Nuget.Devexpress.com](https://nuget.devexpress.com/) 23 | - Open VS and open the solution. Go into View > Other Windows > Package Manager Console. Click **Restore** and then Enter the following: 24 | 25 | ``` 26 | dotnet nuget add source https://nuget.devexpress.com/api -n DXFeed -u DevExpress -p {your auth key} 27 | Install-Package DevExpress.Win 28 | Unblock-File PS5-Profile-Modder/ConnectForm.resx 29 | Unblock-File PS5-Profile-Modder/Editor.resx 30 | ``` 31 | - The other dependencies *should* sort themselves out automatically. 32 | - Click on Editor.cs in the solution explorer. This will trigger a license file to be created in the Properties folder. Once this happens, you can **delete the license.licx** file (if you don't delete it, you will have popups when you run the program.) 33 | - Build (Ctrl-Shift-B) 34 | 35 | --- 36 | 37 | thanks [@DizzMods](https://twitter.com/dizzmods) 38 | -------------------------------------------------------------------------------- /source/PS5-Profile-Modder/App.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |
6 | 7 | 8 | 9 | 10 | 11 | System 12 | 13 | 14 | True 15 | 16 | 17 | Skin/WXI 18 | 19 | 20 | Darkness 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | UseSegoeUI 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | -------------------------------------------------------------------------------- /source/PS5-Profile-Modder.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 17 4 | VisualStudioVersion = 17.7.34003.232 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PS5-Profile-Modder", "PS5-Profile-Modder\PS5-Profile-Modder.csproj", "{84C8B2B0-ED33-4454-A716-66A4E332C7ED}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|Any CPU = Debug|Any CPU 11 | Debug|ARM = Debug|ARM 12 | Debug|ARM64 = Debug|ARM64 13 | Debug|x64 = Debug|x64 14 | Debug|x86 = Debug|x86 15 | Release|Any CPU = Release|Any CPU 16 | Release|ARM = Release|ARM 17 | Release|ARM64 = Release|ARM64 18 | Release|x64 = Release|x64 19 | Release|x86 = Release|x86 20 | EndGlobalSection 21 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 22 | {84C8B2B0-ED33-4454-A716-66A4E332C7ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 23 | {84C8B2B0-ED33-4454-A716-66A4E332C7ED}.Debug|Any CPU.Build.0 = Debug|Any CPU 24 | {84C8B2B0-ED33-4454-A716-66A4E332C7ED}.Debug|ARM.ActiveCfg = Debug|Any CPU 25 | {84C8B2B0-ED33-4454-A716-66A4E332C7ED}.Debug|ARM.Build.0 = Debug|Any CPU 26 | {84C8B2B0-ED33-4454-A716-66A4E332C7ED}.Debug|ARM64.ActiveCfg = Debug|Any CPU 27 | {84C8B2B0-ED33-4454-A716-66A4E332C7ED}.Debug|ARM64.Build.0 = Debug|Any CPU 28 | {84C8B2B0-ED33-4454-A716-66A4E332C7ED}.Debug|x64.ActiveCfg = Debug|Any CPU 29 | {84C8B2B0-ED33-4454-A716-66A4E332C7ED}.Debug|x64.Build.0 = Debug|Any CPU 30 | {84C8B2B0-ED33-4454-A716-66A4E332C7ED}.Debug|x86.ActiveCfg = Debug|x86 31 | {84C8B2B0-ED33-4454-A716-66A4E332C7ED}.Debug|x86.Build.0 = Debug|x86 32 | {84C8B2B0-ED33-4454-A716-66A4E332C7ED}.Release|Any CPU.ActiveCfg = Release|Any CPU 33 | {84C8B2B0-ED33-4454-A716-66A4E332C7ED}.Release|Any CPU.Build.0 = Release|Any CPU 34 | {84C8B2B0-ED33-4454-A716-66A4E332C7ED}.Release|ARM.ActiveCfg = Release|Any CPU 35 | {84C8B2B0-ED33-4454-A716-66A4E332C7ED}.Release|ARM.Build.0 = Release|Any CPU 36 | {84C8B2B0-ED33-4454-A716-66A4E332C7ED}.Release|ARM64.ActiveCfg = Release|Any CPU 37 | {84C8B2B0-ED33-4454-A716-66A4E332C7ED}.Release|ARM64.Build.0 = Release|Any CPU 38 | {84C8B2B0-ED33-4454-A716-66A4E332C7ED}.Release|x64.ActiveCfg = Release|Any CPU 39 | {84C8B2B0-ED33-4454-A716-66A4E332C7ED}.Release|x64.Build.0 = Release|Any CPU 40 | {84C8B2B0-ED33-4454-A716-66A4E332C7ED}.Release|x86.ActiveCfg = Release|x86 41 | {84C8B2B0-ED33-4454-A716-66A4E332C7ED}.Release|x86.Build.0 = Release|x86 42 | EndGlobalSection 43 | GlobalSection(SolutionProperties) = preSolution 44 | HideSolutionNode = FALSE 45 | EndGlobalSection 46 | GlobalSection(ExtensibilityGlobals) = postSolution 47 | SolutionGuid = {BB3F7AF4-1FDA-4049-B916-6859E01CCF98} 48 | EndGlobalSection 49 | EndGlobal 50 | -------------------------------------------------------------------------------- /source/PS5-Profile-Modder/CropTool.cs: -------------------------------------------------------------------------------- 1 | using DevExpress.XtraEditors; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.ComponentModel; 5 | using System.Data; 6 | using System.Drawing; 7 | using System.Linq; 8 | using System.Text; 9 | using System.Threading.Tasks; 10 | using System.Windows.Forms; 11 | using ImageMagick; 12 | using System.IO; 13 | using System.Drawing.Imaging; 14 | using DevExpress.XtraEditors.ImageEditor; 15 | 16 | namespace PS5_Profile_Modder { 17 | public partial class CropTool : DevExpress.XtraEditors.XtraForm { 18 | 19 | String SelectedUser; 20 | public CropTool(Image selected_user_image, String selected_user) { 21 | InitializeComponent(); 22 | SelectedUser = selected_user; 23 | pictureEdit1.Image = selected_user_image; 24 | if (!Connect.IsDarkMode()) { this.IconOptions.Image = global::PS5_Profile_Modder.Properties.Resources.other; } 25 | 26 | 27 | 28 | 29 | 30 | } 31 | 32 | private void btnChooseFile_Click(object sender, EventArgs e) { 33 | fileOpenDialog.ShowDialog(); 34 | 35 | } 36 | 37 | // if file is opened 38 | private void fileOpenDialog_FileOk(object sender, CancelEventArgs e) { 39 | try { 40 | pictureEdit1.Image = Bitmap.FromStream(fileOpenDialog.OpenFile()); 41 | 42 | } catch { 43 | XtraMessageBox.Show("Image is corrupt/unsupported ;__;", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 44 | return; 45 | } 46 | } 47 | 48 | 49 | private void btnTakePicture_Click(object sender, EventArgs e) { 50 | pictureEdit1.ShowTakePictureDialog(); 51 | } 52 | 53 | 54 | private void btnCrop_Click(object sender, EventArgs e) { 55 | pictureEdit1.ShowImageEditorDialog(); 56 | } 57 | 58 | private void btnDone_Click(object sender, EventArgs e) { 59 | try { 60 | 61 | var ms = new MemoryStream(); 62 | pictureEdit1.Image.Save(ms, ImageFormat.Png); 63 | byte[] i = ms.ToArray(); 64 | Users.UsersDict[SelectedUser].Avatar = new MagickImage(i); 65 | Users.UsersDict[SelectedUser].Changed = true; 66 | 67 | } catch { } 68 | 69 | this.Close(); 70 | 71 | } 72 | 73 | private void pictureEdit1_ImageEditorDialogShowing(object sender, DevExpress.XtraEditors.ImageEditor.ImageEditorDialogShowingEventArgs e) { 74 | e.Form.CustomizeCropOptions += CustomizeCropOptions; 75 | } 76 | 77 | void CustomizeCropOptions(object sender, CustomizeCropOptionsEventArgs e) { 78 | var Square = new AspectRatioInfo(AspectRatioMode.Square, "Square"); 79 | var Manual = new AspectRatioInfo(AspectRatioMode.Manual, "Manual"); 80 | e.AspectRatios.Clear(); 81 | e.AspectRatios.Add(Square); 82 | e.AspectRatios.Add(Manual); 83 | e.DefaultAspectRatio = Square; 84 | e.CropRegionToImageRatio = 100; 85 | 86 | } 87 | 88 | 89 | } 90 | } 91 | -------------------------------------------------------------------------------- /source/PS5-Profile-Modder/Properties/app.manifest: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 50 | 58 | 59 | 73 | -------------------------------------------------------------------------------- /source/PS5-Profile-Modder/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 PS5_Profile_Modder.Properties { 12 | using System; 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", "17.0.0.0")] 23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 25 | internal class Resources { 26 | 27 | private static global::System.Resources.ResourceManager resourceMan; 28 | 29 | private static global::System.Globalization.CultureInfo resourceCulture; 30 | 31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 32 | internal Resources() { 33 | } 34 | 35 | /// 36 | /// Returns the cached ResourceManager instance used by this class. 37 | /// 38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 39 | internal static global::System.Resources.ResourceManager ResourceManager { 40 | get { 41 | if (object.ReferenceEquals(resourceMan, null)) { 42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("PS5_Profile_Modder.Properties.Resources", typeof(Resources).Assembly); 43 | resourceMan = temp; 44 | } 45 | return resourceMan; 46 | } 47 | } 48 | 49 | /// 50 | /// Overrides the current thread's CurrentUICulture property for all 51 | /// resource lookups using this strongly typed resource class. 52 | /// 53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 54 | internal static global::System.Globalization.CultureInfo Culture { 55 | get { 56 | return resourceCulture; 57 | } 58 | set { 59 | resourceCulture = value; 60 | } 61 | } 62 | 63 | /// 64 | /// Looks up a localized resource of type System.Drawing.Bitmap. 65 | /// 66 | internal static System.Drawing.Bitmap default_avatar { 67 | get { 68 | object obj = ResourceManager.GetObject("default_avatar", resourceCulture); 69 | return ((System.Drawing.Bitmap)(obj)); 70 | } 71 | } 72 | 73 | /// 74 | /// Looks up a localized resource of type System.Drawing.Bitmap. 75 | /// 76 | internal static System.Drawing.Bitmap ftp { 77 | get { 78 | object obj = ResourceManager.GetObject("ftp", resourceCulture); 79 | return ((System.Drawing.Bitmap)(obj)); 80 | } 81 | } 82 | 83 | /// 84 | /// Looks up a localized resource of type System.Drawing.Bitmap. 85 | /// 86 | internal static System.Drawing.Bitmap other { 87 | get { 88 | object obj = ResourceManager.GetObject("other", resourceCulture); 89 | return ((System.Drawing.Bitmap)(obj)); 90 | } 91 | } 92 | } 93 | } 94 | -------------------------------------------------------------------------------- /source/PS5-Profile-Modder/packages.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /source/PS5-Profile-Modder/CropTool.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 | 252, 18 122 | 123 | -------------------------------------------------------------------------------- /source/PS5-Profile-Modder/ConnectForm.cs: -------------------------------------------------------------------------------- 1 | using DevExpress.LookAndFeel; 2 | using DevExpress.Skins; 3 | using DevExpress.XtraEditors; 4 | using FluentFTP; 5 | using ImageMagick; 6 | using Microsoft.Win32; 7 | using System; 8 | using System.Collections.Generic; 9 | using System.ComponentModel; 10 | using System.Data; 11 | using System.Diagnostics.Eventing.Reader; 12 | using System.Drawing; 13 | using System.Linq; 14 | using System.Net; 15 | using System.Runtime.CompilerServices; 16 | using System.Text; 17 | using System.Windows.Forms; 18 | using static System.Windows.Forms.VisualStyles.VisualStyleElement; 19 | 20 | namespace PS5_Profile_Modder { 21 | public partial class Connect : DevExpress.XtraEditors.XtraForm { 22 | 23 | FtpClient client; 24 | 25 | 26 | public Connect() { 27 | InitializeComponent(); 28 | DevExpress.XtraEditors.WindowsFormsSettings.AllowRoundedWindowCorners = DevExpress.Utils.DefaultBoolean.True; 29 | if (IsDarkMode()) 30 | this.LookAndFeel.SetSkinStyle(SkinStyle.WXI, SkinSvgPalette.WXI.Darkness); 31 | else 32 | this.LookAndFeel.SetSkinStyle(SkinStyle.WXI, SkinSvgPalette.WXI.Clearness); 33 | 34 | if (!Connect.IsDarkMode()) { IconOptions.Image = PS5_Profile_Modder.Properties.Resources.other; } 35 | 36 | Skin currentSkin = CommonSkins.GetSkin(UserLookAndFeel.Default); 37 | SkinElement element = currentSkin[CommonSkins.SkinButton]; 38 | btnConnect.Appearance.BackColor = currentSkin.SvgPalettes["DefaultSkinPalette"].GetColorByStyleName("Primary Background 0", "White"); 39 | } 40 | 41 | 42 | public static bool IsDarkMode() { 43 | string keyPath = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize"; 44 | string valueName = "AppsUseLightTheme"; 45 | object testValue = Registry.GetValue(keyPath, valueName, null); 46 | switch (testValue) { 47 | case 0: 48 | return true; 49 | case 1: 50 | return false; 51 | default: 52 | return false; 53 | } 54 | } 55 | 56 | private void btnConnect_Click(object sender, EventArgs e) { 57 | submitInput(); 58 | } 59 | private void inputIP_KeyPress(object sender, KeyPressEventArgs e) { 60 | if (e.KeyChar == 13) { 61 | submitInput(); 62 | } 63 | } 64 | private void inputPort_KeyPress(object sender, KeyPressEventArgs e) { 65 | if (e.KeyChar == 13) { 66 | submitInput(); 67 | } 68 | } 69 | 70 | 71 | private string InputIsValid() { 72 | if (!IPAddress.TryParse(inputIP.Text, out _)) { 73 | return "invalid_ip"; 74 | } else if (!(int.TryParse(inputPort.Text, out int result) && result < 65536 && result > 0)) { 75 | return "invalid_port"; 76 | } 77 | 78 | return "OK"; 79 | } 80 | 81 | private void submitInput() { 82 | 83 | switch (InputIsValid()) { 84 | case "invalid_ip": 85 | XtraMessageBox.Show("Enter a valid IP address.", "Invalid IP", MessageBoxButtons.OK); 86 | break; 87 | case "invalid_port": 88 | XtraMessageBox.Show("Enter a valid port between 1 and 65536.", "Invalid Port", MessageBoxButtons.OK); 89 | break; 90 | case "OK": 91 | RETRY: 92 | this.client = new FtpClient(inputIP.Text, int.Parse(inputPort.Text)); 93 | try { 94 | client.AutoConnect(); 95 | 96 | //Console.WriteLine("Success"); 97 | //this.Close(); 98 | } catch { 99 | if (XtraMessageBox.Show("Unable to connect. Is FTP running on the console?", "Connection Failed", 100 | MessageBoxButtons.RetryCancel) == DialogResult.Retry) { 101 | goto RETRY; 102 | } 103 | } 104 | 105 | FtpGetUsers(inputIP.Text, inputPort.Text); 106 | break; 107 | } 108 | } 109 | 110 | private void Connect_FormClosed(object sender, FormClosedEventArgs e) { 111 | Application.Exit(); 112 | } 113 | 114 | private void FtpGetUsers(string ip, string port) { 115 | client.SetWorkingDirectory("/user/home"); 116 | FtpListItem[] UserListItems = client.GetListing(); 117 | byte[] NameBuffer = new byte[17]; 118 | byte[] AvatarBuffer = new byte[100000000]; 119 | 120 | 121 | foreach (FtpListItem item in UserListItems) { 122 | Array.Clear(NameBuffer, 0, NameBuffer.Length); 123 | Array.Clear(AvatarBuffer, 0, AvatarBuffer.Length); 124 | MagickImage Avatar = null; 125 | 126 | //download name if possible 127 | try { 128 | client.DownloadBytes(out NameBuffer, string.Format("/user/home/{0}/username.dat", item.Name)); 129 | } catch { 130 | NameBuffer = Encoding.ASCII.GetBytes(item.Name); 131 | } 132 | //download avatar if possible 133 | try { 134 | client.DownloadBytes(out AvatarBuffer, string.Format("/system_data/priv/cache/profile/{0}/avatar.png", ("0x" + item.Name.ToUpper()))); 135 | Avatar = new MagickImage(AvatarBuffer); 136 | } catch { 137 | Console.WriteLine("Could not load the image or the image did not exist."); 138 | AvatarBuffer = new byte[100000000]; 139 | } 140 | 141 | Users.UsersDict.Add(System.Text.Encoding.Default.GetString(NameBuffer), new PS5User(item.Name, Avatar)); 142 | } 143 | 144 | Editor editorWindow = new Editor(client); 145 | editorWindow.ShowDialog(); 146 | this.Close(); 147 | 148 | 149 | } 150 | 151 | private void hyperlinkLabelControl1_HyperlinkClick(object sender, DevExpress.Utils.HyperlinkClickEventArgs e) { 152 | System.Diagnostics.Process.Start("https://" + e.Link); 153 | 154 | } 155 | } 156 | } 157 | -------------------------------------------------------------------------------- /source/PS5-Profile-Modder/CropTool.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace PS5_Profile_Modder { 2 | partial class CropTool { 3 | /// 4 | /// Required designer variable. 5 | /// 6 | private System.ComponentModel.IContainer components = null; 7 | 8 | /// 9 | /// Clean up any resources being used. 10 | /// 11 | /// true if managed resources should be disposed; otherwise, false. 12 | protected override void Dispose(bool disposing) { 13 | if (disposing && (components != null)) { 14 | components.Dispose(); 15 | } 16 | base.Dispose(disposing); 17 | } 18 | 19 | #region Windows Form Designer generated code 20 | 21 | /// 22 | /// Required method for Designer support - do not modify 23 | /// the contents of this method with the code editor. 24 | /// 25 | private void InitializeComponent() { 26 | this.pictureEdit1 = new DevExpress.XtraEditors.PictureEdit(); 27 | this.btnDone = new DevExpress.XtraEditors.SimpleButton(); 28 | this.btnCrop = new DevExpress.XtraEditors.SimpleButton(); 29 | this.btnChooseFile = new DevExpress.XtraEditors.SimpleButton(); 30 | this.btnTakePicture = new DevExpress.XtraEditors.SimpleButton(); 31 | this.fileOpenDialog = new System.Windows.Forms.OpenFileDialog(); 32 | ((System.ComponentModel.ISupportInitialize)(this.pictureEdit1.Properties)).BeginInit(); 33 | this.SuspendLayout(); 34 | // 35 | // pictureEdit1 36 | // 37 | this.pictureEdit1.EditValue = global::PS5_Profile_Modder.Properties.Resources.default_avatar; 38 | this.pictureEdit1.Location = new System.Drawing.Point(12, 12); 39 | this.pictureEdit1.Name = "pictureEdit1"; 40 | this.pictureEdit1.Properties.PictureStoreMode = DevExpress.XtraEditors.Controls.PictureStoreMode.Image; 41 | this.pictureEdit1.Properties.ShowCameraMenuItem = DevExpress.XtraEditors.Controls.CameraMenuItemVisibility.Auto; 42 | this.pictureEdit1.Properties.ShowMenu = false; 43 | this.pictureEdit1.Properties.SizeMode = DevExpress.XtraEditors.Controls.PictureSizeMode.Squeeze; 44 | this.pictureEdit1.Size = new System.Drawing.Size(250, 250); 45 | this.pictureEdit1.TabIndex = 0; 46 | this.pictureEdit1.ImageEditorDialogShowing += new DevExpress.XtraEditors.ImageEditor.ImageEditorDialogShowingEventHandler(this.pictureEdit1_ImageEditorDialogShowing); 47 | // 48 | // btnDone 49 | // 50 | this.btnDone.Location = new System.Drawing.Point(178, 328); 51 | this.btnDone.Name = "btnDone"; 52 | this.btnDone.Size = new System.Drawing.Size(85, 23); 53 | this.btnDone.TabIndex = 1; 54 | this.btnDone.Text = "Done"; 55 | this.btnDone.Click += new System.EventHandler(this.btnDone_Click); 56 | // 57 | // btnCrop 58 | // 59 | this.btnCrop.Location = new System.Drawing.Point(192, 268); 60 | this.btnCrop.Name = "btnCrop"; 61 | this.btnCrop.Size = new System.Drawing.Size(70, 23); 62 | this.btnCrop.TabIndex = 2; 63 | this.btnCrop.Text = "Crop"; 64 | this.btnCrop.Click += new System.EventHandler(this.btnCrop_Click); 65 | // 66 | // btnChooseFile 67 | // 68 | this.btnChooseFile.Location = new System.Drawing.Point(12, 268); 69 | this.btnChooseFile.Name = "btnChooseFile"; 70 | this.btnChooseFile.Size = new System.Drawing.Size(81, 23); 71 | this.btnChooseFile.TabIndex = 3; 72 | this.btnChooseFile.Text = "Choose a File"; 73 | this.btnChooseFile.Click += new System.EventHandler(this.btnChooseFile_Click); 74 | // 75 | // btnTakePicture 76 | // 77 | this.btnTakePicture.Location = new System.Drawing.Point(99, 268); 78 | this.btnTakePicture.Name = "btnTakePicture"; 79 | this.btnTakePicture.Size = new System.Drawing.Size(62, 23); 80 | this.btnTakePicture.TabIndex = 4; 81 | this.btnTakePicture.Text = "Webcam"; 82 | this.btnTakePicture.Click += new System.EventHandler(this.btnTakePicture_Click); 83 | // 84 | // fileOpenDialog 85 | // 86 | this.fileOpenDialog.Filter = "Image Files|*.jpg;*.jpeg;*.png;*.tif;*.bmp"; 87 | this.fileOpenDialog.RestoreDirectory = true; 88 | this.fileOpenDialog.Title = "Choose an Avatar"; 89 | this.fileOpenDialog.FileOk += new System.ComponentModel.CancelEventHandler(this.fileOpenDialog_FileOk); 90 | // 91 | // CropTool 92 | // 93 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 94 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 95 | this.ClientSize = new System.Drawing.Size(275, 363); 96 | this.Controls.Add(this.btnTakePicture); 97 | this.Controls.Add(this.btnChooseFile); 98 | this.Controls.Add(this.btnCrop); 99 | this.Controls.Add(this.btnDone); 100 | this.Controls.Add(this.pictureEdit1); 101 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; 102 | this.IconOptions.Image = global::PS5_Profile_Modder.Properties.Resources.default_avatar; 103 | 104 | this.MaximizeBox = false; 105 | this.MinimizeBox = false; 106 | this.Name = "CropTool"; 107 | this.ShowInTaskbar = false; 108 | this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; 109 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; 110 | this.Text = "Crop Image"; 111 | ((System.ComponentModel.ISupportInitialize)(this.pictureEdit1.Properties)).EndInit(); 112 | this.ResumeLayout(false); 113 | 114 | } 115 | 116 | #endregion 117 | 118 | private DevExpress.XtraEditors.PictureEdit pictureEdit1; 119 | private DevExpress.XtraEditors.SimpleButton btnDone; 120 | private DevExpress.XtraEditors.SimpleButton btnCrop; 121 | private DevExpress.XtraEditors.SimpleButton btnChooseFile; 122 | private DevExpress.XtraEditors.SimpleButton btnTakePicture; 123 | private System.Windows.Forms.OpenFileDialog fileOpenDialog; 124 | } 125 | } -------------------------------------------------------------------------------- /source/PS5-Profile-Modder/Properties/Resources.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 122 | ..\Resources\Images\default_avatar.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 123 | 124 | 125 | ..\Resources\Images\ftp.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 126 | 127 | 128 | ..\Resources\Images\icon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 129 | 130 | -------------------------------------------------------------------------------- /source/PS5-Profile-Modder/ConnectForm.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace PS5_Profile_Modder { 2 | partial class Connect { 3 | /// 4 | /// Required designer variable. 5 | /// 6 | private System.ComponentModel.IContainer components = null; 7 | 8 | /// 9 | /// Clean up any resources being used. 10 | /// 11 | /// true if managed resources should be disposed; otherwise, false. 12 | protected override void Dispose(bool disposing) { 13 | if (disposing && (components != null)) { 14 | components.Dispose(); 15 | } 16 | base.Dispose(disposing); 17 | } 18 | 19 | #region Windows Form Designer generated code 20 | 21 | /// 22 | /// Required method for Designer support - do not modify 23 | /// the contents of this method with the code editor. 24 | /// 25 | private void InitializeComponent() { 26 | this.components = new System.ComponentModel.Container(); 27 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Connect)); 28 | this.btnConnect = new DevExpress.XtraEditors.SimpleButton(); 29 | this.behaviorManager1 = new DevExpress.Utils.Behaviors.BehaviorManager(this.components); 30 | this.pictureBox1 = new System.Windows.Forms.PictureBox(); 31 | this.inputPort = new DevExpress.XtraEditors.TextEdit(); 32 | this.inputIP = new DevExpress.XtraEditors.TextEdit(); 33 | this.hyperlinkLabelControl1 = new DevExpress.XtraEditors.HyperlinkLabelControl(); 34 | ((System.ComponentModel.ISupportInitialize)(this.behaviorManager1)).BeginInit(); 35 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); 36 | ((System.ComponentModel.ISupportInitialize)(this.inputPort.Properties)).BeginInit(); 37 | ((System.ComponentModel.ISupportInitialize)(this.inputIP.Properties)).BeginInit(); 38 | this.SuspendLayout(); 39 | // 40 | // btnConnect 41 | // 42 | this.btnConnect.Location = new System.Drawing.Point(184, 46); 43 | this.btnConnect.Name = "btnConnect"; 44 | this.btnConnect.Size = new System.Drawing.Size(80, 28); 45 | this.btnConnect.TabIndex = 3; 46 | this.btnConnect.Text = "Connect"; 47 | this.btnConnect.Click += new System.EventHandler(this.btnConnect_Click); 48 | // 49 | // pictureBox1 50 | // 51 | this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image"))); 52 | this.pictureBox1.Location = new System.Drawing.Point(7, 3); 53 | this.pictureBox1.Name = "pictureBox1"; 54 | this.pictureBox1.Size = new System.Drawing.Size(100, 80); 55 | this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; 56 | this.pictureBox1.TabIndex = 8; 57 | this.pictureBox1.TabStop = false; 58 | // 59 | // inputPort 60 | // 61 | this.inputPort.EditValue = ""; 62 | this.inputPort.Location = new System.Drawing.Point(113, 46); 63 | this.inputPort.Name = "inputPort"; 64 | this.inputPort.Properties.NullValuePrompt = "Port"; 65 | this.inputPort.Properties.UseAdvancedMode = DevExpress.Utils.DefaultBoolean.True; 66 | this.inputPort.Properties.ValidateOnEnterKey = true; 67 | this.inputPort.Size = new System.Drawing.Size(65, 28); 68 | this.inputPort.TabIndex = 2; 69 | this.inputPort.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.inputPort_KeyPress); 70 | // 71 | // inputIP 72 | // 73 | this.inputIP.EditValue = ""; 74 | this.inputIP.Location = new System.Drawing.Point(113, 12); 75 | this.inputIP.Name = "inputIP"; 76 | this.inputIP.Properties.NullValuePrompt = "IP Address"; 77 | this.inputIP.Properties.ValidateOnEnterKey = true; 78 | this.inputIP.Size = new System.Drawing.Size(151, 28); 79 | this.inputIP.TabIndex = 1; 80 | this.inputIP.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.inputIP_KeyPress); 81 | // 82 | // hyperlinkLabelControl1 83 | // 84 | this.hyperlinkLabelControl1.AllowHtmlTextInToolTip = DevExpress.Utils.DefaultBoolean.True; 85 | this.hyperlinkLabelControl1.LinkBehavior = System.Windows.Forms.LinkBehavior.HoverUnderline; 86 | this.hyperlinkLabelControl1.Location = new System.Drawing.Point(184, 92); 87 | this.hyperlinkLabelControl1.Name = "hyperlinkLabelControl1"; 88 | this.hyperlinkLabelControl1.Size = new System.Drawing.Size(74, 13); 89 | this.hyperlinkLabelControl1.TabIndex = 9; 90 | this.hyperlinkLabelControl1.Text = "@koolaidxk1d"; 91 | this.hyperlinkLabelControl1.HyperlinkClick += new DevExpress.Utils.HyperlinkClickEventHandler(this.hyperlinkLabelControl1_HyperlinkClick); 92 | // 93 | // Connect 94 | // 95 | this.Appearance.Options.UseFont = true; 96 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 97 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 98 | this.ClientSize = new System.Drawing.Size(276, 117); 99 | this.Controls.Add(this.hyperlinkLabelControl1); 100 | this.Controls.Add(this.pictureBox1); 101 | this.Controls.Add(this.btnConnect); 102 | this.Controls.Add(this.inputPort); 103 | this.Controls.Add(this.inputIP); 104 | this.Font = new System.Drawing.Font("Tahoma", 8.25F); 105 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; 106 | this.IconOptions.Image = global::PS5_Profile_Modder.Properties.Resources.default_avatar; 107 | this.MaximizeBox = false; 108 | this.MinimizeBox = false; 109 | this.Name = "Connect"; 110 | this.Text = "Connect to PS5"; 111 | this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.Connect_FormClosed); 112 | ((System.ComponentModel.ISupportInitialize)(this.behaviorManager1)).EndInit(); 113 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); 114 | ((System.ComponentModel.ISupportInitialize)(this.inputPort.Properties)).EndInit(); 115 | ((System.ComponentModel.ISupportInitialize)(this.inputIP.Properties)).EndInit(); 116 | this.ResumeLayout(false); 117 | this.PerformLayout(); 118 | 119 | } 120 | 121 | #endregion 122 | private DevExpress.XtraEditors.TextEdit inputIP; 123 | private DevExpress.XtraEditors.TextEdit inputPort; 124 | private DevExpress.XtraEditors.SimpleButton btnConnect; 125 | private System.Windows.Forms.PictureBox pictureBox1; 126 | private DevExpress.Utils.Behaviors.BehaviorManager behaviorManager1; 127 | private DevExpress.XtraEditors.HyperlinkLabelControl hyperlinkLabelControl1; 128 | } 129 | } 130 | 131 | -------------------------------------------------------------------------------- /source/PS5-Profile-Modder/Editor.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace PS5_Profile_Modder { 2 | partial class Editor { 3 | /// 4 | /// Required designer variable. 5 | /// 6 | private System.ComponentModel.IContainer components = null; 7 | 8 | /// 9 | /// Clean up any resources being used. 10 | /// 11 | /// true if managed resources should be disposed; otherwise, false. 12 | protected override void Dispose(bool disposing) { 13 | if (disposing && (components != null)) { 14 | components.Dispose(); 15 | } 16 | base.Dispose(disposing); 17 | } 18 | 19 | #region Windows Form Designer generated code 20 | 21 | /// 22 | /// Required method for Designer support - do not modify 23 | /// the contents of this method with the code editor. 24 | /// 25 | private void InitializeComponent() { 26 | this.components = new System.ComponentModel.Container(); 27 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Editor)); 28 | this.btnSave = new DevExpress.XtraEditors.SimpleButton(); 29 | this.btnEdit = new DevExpress.XtraEditors.SimpleButton(); 30 | this.panelAvatar = new System.Windows.Forms.Panel(); 31 | this.behaviorManager1 = new DevExpress.Utils.Behaviors.BehaviorManager(this.components); 32 | this.btnTrash = new DevExpress.XtraEditors.SimpleButton(); 33 | this.dropUsers = new DevExpress.XtraEditors.ComboBoxEdit(); 34 | this.btnGrabber = new DevExpress.XtraEditors.SimpleButton(); 35 | ((System.ComponentModel.ISupportInitialize)(this.behaviorManager1)).BeginInit(); 36 | ((System.ComponentModel.ISupportInitialize)(this.dropUsers.Properties)).BeginInit(); 37 | this.SuspendLayout(); 38 | // 39 | // btnSave 40 | // 41 | this.btnSave.Enabled = false; 42 | this.btnSave.Location = new System.Drawing.Point(185, 217); 43 | this.btnSave.Name = "btnSave"; 44 | this.btnSave.Size = new System.Drawing.Size(95, 28); 45 | this.btnSave.TabIndex = 8; 46 | this.btnSave.Text = "Save User"; 47 | this.btnSave.Click += new System.EventHandler(this.btnSave_Click); 48 | // 49 | // btnEdit 50 | // 51 | this.btnEdit.Location = new System.Drawing.Point(22, 217); 52 | this.btnEdit.Name = "btnEdit"; 53 | this.btnEdit.Size = new System.Drawing.Size(157, 28); 54 | this.btnEdit.TabIndex = 9; 55 | this.btnEdit.Text = "Edit"; 56 | this.btnEdit.Click += new System.EventHandler(this.btnEdit_Click); 57 | // 58 | // panelAvatar 59 | // 60 | this.panelAvatar.Location = new System.Drawing.Point(22, 12); 61 | this.panelAvatar.Name = "panelAvatar"; 62 | this.panelAvatar.Size = new System.Drawing.Size(100, 100); 63 | this.panelAvatar.TabIndex = 10; 64 | this.panelAvatar.Paint += new System.Windows.Forms.PaintEventHandler(this.panelAvatar_Paint); 65 | // 66 | // btnTrash 67 | // 68 | this.btnTrash.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("btnTrash.ImageOptions.Image"))); 69 | this.btnTrash.Location = new System.Drawing.Point(22, 118); 70 | this.btnTrash.Name = "btnTrash"; 71 | this.btnTrash.Size = new System.Drawing.Size(26, 28); 72 | this.btnTrash.TabIndex = 11; 73 | this.btnTrash.ToolTip = "Wipe this user\'s avatar cache"; 74 | this.btnTrash.Click += new System.EventHandler(this.btnTrash_Click); 75 | // 76 | // dropUsers 77 | // 78 | this.dropUsers.Location = new System.Drawing.Point(138, 12); 79 | this.dropUsers.Name = "dropUsers"; 80 | this.dropUsers.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { 81 | new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)}); 82 | this.dropUsers.Properties.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.DisableTextEditor; 83 | this.dropUsers.Size = new System.Drawing.Size(142, 28); 84 | this.dropUsers.TabIndex = 1; 85 | this.dropUsers.SelectedIndexChanged += new System.EventHandler(this.dropUsers_SelectedIndexChanged); 86 | // 87 | // btnGrabber 88 | // 89 | this.btnGrabber.Appearance.ForeColor = System.Drawing.Color.OliveDrab; 90 | this.btnGrabber.Appearance.Options.UseForeColor = true; 91 | this.btnGrabber.ImageOptions.AllowGlyphSkinning = DevExpress.Utils.DefaultBoolean.True; 92 | this.btnGrabber.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("simpleButton1.ImageOptions.Image"))); 93 | this.btnGrabber.Location = new System.Drawing.Point(96, 118); 94 | this.btnGrabber.Name = "btnGrabber"; 95 | this.btnGrabber.Size = new System.Drawing.Size(26, 28); 96 | this.btnGrabber.TabIndex = 12; 97 | this.btnGrabber.ToolTip = "Download this avatar\'s files to your PC"; 98 | this.btnGrabber.Click += new System.EventHandler(this.btnGrabber_Click); 99 | // 100 | // Editor 101 | // 102 | this.Appearance.ForeColor = DevExpress.LookAndFeel.DXSkinColors.ForeColors.Information; 103 | this.Appearance.Options.UseForeColor = true; 104 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 105 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 106 | this.ClientSize = new System.Drawing.Size(298, 266); 107 | this.Controls.Add(this.btnGrabber); 108 | this.Controls.Add(this.btnTrash); 109 | this.Controls.Add(this.panelAvatar); 110 | this.Controls.Add(this.btnEdit); 111 | this.Controls.Add(this.btnSave); 112 | this.Controls.Add(this.dropUsers); 113 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; 114 | this.IconOptions.Image = ((System.Drawing.Image)(resources.GetObject("Editor.IconOptions.Image"))); 115 | this.MaximizeBox = false; 116 | this.Name = "Editor"; 117 | this.ShowInTaskbar = false; 118 | this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; 119 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; 120 | this.Text = "Editor"; 121 | ((System.ComponentModel.ISupportInitialize)(this.behaviorManager1)).EndInit(); 122 | ((System.ComponentModel.ISupportInitialize)(this.dropUsers.Properties)).EndInit(); 123 | this.ResumeLayout(false); 124 | 125 | } 126 | 127 | #endregion 128 | 129 | private DevExpress.XtraEditors.ComboBoxEdit dropUsers; 130 | private DevExpress.XtraEditors.SimpleButton btnSave; 131 | private DevExpress.XtraEditors.SimpleButton btnEdit; 132 | private System.Windows.Forms.Panel panelAvatar; 133 | private DevExpress.Utils.Behaviors.BehaviorManager behaviorManager1; 134 | private DevExpress.XtraEditors.SimpleButton btnTrash; 135 | private DevExpress.XtraEditors.SimpleButton btnGrabber; 136 | } 137 | } -------------------------------------------------------------------------------- /.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 | # Tools pulled down during build 16 | .tools/ 17 | .dotnet/ 18 | .packages/ 19 | 20 | # Build results 21 | [Dd]ebug/ 22 | [Dd]ebugPublic/ 23 | [Rr]elease/ 24 | [Rr]eleases/ 25 | x64/ 26 | x86/ 27 | bld/ 28 | [Bb]in/ 29 | [Oo]bj/ 30 | [Ll]og/ 31 | 32 | # Visual Studio 2015/2017 cache/options directory 33 | .vs/ 34 | # Uncomment if you have tasks that create the project's static files in wwwroot 35 | #wwwroot/ 36 | 37 | # Visual Studio 2017 auto generated files 38 | Generated\ Files/ 39 | 40 | # MSTest test Results 41 | [Tt]est[Rr]esult*/ 42 | [Bb]uild[Ll]og.* 43 | 44 | # NUNIT 45 | *.VisualState.xml 46 | TestResult.xml 47 | 48 | # Build Results of an ATL Project 49 | [Dd]ebugPS/ 50 | [Rr]eleasePS/ 51 | dlldata.c 52 | 53 | # Benchmark Results 54 | BenchmarkDotNet.Artifacts/ 55 | 56 | # .NET Core 57 | project.lock.json 58 | project.fragment.lock.json 59 | artifacts/ 60 | .dotnet/ 61 | 62 | # StyleCop 63 | StyleCopReport.xml 64 | 65 | # Files built by Visual Studio 66 | *_i.c 67 | *_p.c 68 | *_i.h 69 | *.ilk 70 | *.meta 71 | *.obj 72 | *.iobj 73 | *.pch 74 | *.pdb 75 | *.ipdb 76 | *.pgc 77 | *.pgd 78 | *.rsp 79 | *.sbr 80 | *.tlb 81 | *.tli 82 | *.tlh 83 | *.tmp 84 | *.tmp_proj 85 | *.log 86 | *.vspscc 87 | *.vssscc 88 | .builds 89 | *.pidb 90 | *.svclog 91 | *.scc 92 | 93 | # Chutzpah Test files 94 | _Chutzpah* 95 | 96 | # Visual C++ cache files 97 | ipch/ 98 | *.aps 99 | *.ncb 100 | *.opendb 101 | *.opensdf 102 | *.sdf 103 | *.cachefile 104 | *.VC.db 105 | *.VC.VC.opendb 106 | 107 | # Visual Studio profiler 108 | *.psess 109 | *.vsp 110 | *.vspx 111 | *.sap 112 | 113 | # Visual Studio Trace Files 114 | *.e2e 115 | 116 | # TFS 2012 Local Workspace 117 | $tf/ 118 | 119 | # Guidance Automation Toolkit 120 | *.gpState 121 | 122 | # ReSharper is a .NET coding add-in 123 | _ReSharper*/ 124 | *.[Rr]e[Ss]harper 125 | *.DotSettings.user 126 | 127 | # JustCode is a .NET coding add-in 128 | .JustCode 129 | 130 | # TeamCity is a build add-in 131 | _TeamCity* 132 | 133 | # DotCover is a Code Coverage Tool 134 | *.dotCover 135 | 136 | # AxoCover is a Code Coverage Tool 137 | .axoCover/* 138 | !.axoCover/settings.json 139 | 140 | # Visual Studio code coverage results 141 | *.coverage 142 | *.coveragexml 143 | 144 | # Visual Studio Code 145 | .vscode/* 146 | !.vscode/settings.json 147 | !.vscode/tasks.json 148 | !.vscode/launch.json 149 | !.vscode/extensions.json 150 | 151 | # NCrunch 152 | _NCrunch_* 153 | .*crunch*.local.xml 154 | nCrunchTemp_* 155 | 156 | # MightyMoose 157 | *.mm.* 158 | AutoTest.Net/ 159 | 160 | # Web workbench (sass) 161 | .sass-cache/ 162 | 163 | # Installshield output folder 164 | [Ee]xpress/ 165 | 166 | # DocProject is a documentation generator add-in 167 | DocProject/buildhelp/ 168 | DocProject/Help/*.HxT 169 | DocProject/Help/*.HxC 170 | DocProject/Help/*.hhc 171 | DocProject/Help/*.hhk 172 | DocProject/Help/*.hhp 173 | DocProject/Help/Html2 174 | DocProject/Help/html 175 | 176 | # Click-Once directory 177 | publish/ 178 | 179 | # Publish Web Output 180 | *.[Pp]ublish.xml 181 | *.azurePubxml 182 | # Note: Comment the next line if you want to checkin your web deploy settings, 183 | # but database connection strings (with potential passwords) will be unencrypted 184 | *.pubxml 185 | *.publishproj 186 | 187 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 188 | # checkin your Azure Web App publish settings, but sensitive information contained 189 | # in these scripts will be unencrypted 190 | PublishScripts/ 191 | 192 | # NuGet Packages 193 | *.nupkg 194 | # The packages folder can be ignored because of Package Restore 195 | **/[Pp]ackages/* 196 | # except build/, which is used as an MSBuild target. 197 | !**/[Pp]ackages/build/ 198 | # Uncomment if necessary however generally it will be regenerated when needed 199 | #!**/[Pp]ackages/repositories.config 200 | # NuGet v3's project.json files produces more ignorable files 201 | *.nuget.props 202 | *.nuget.targets 203 | 204 | # Microsoft Azure Build Output 205 | csx/ 206 | *.build.csdef 207 | 208 | # Microsoft Azure Emulator 209 | ecf/ 210 | rcf/ 211 | 212 | # Windows Store app package directories and files 213 | AppPackages/ 214 | BundleArtifacts/ 215 | Package.StoreAssociation.xml 216 | _pkginfo.txt 217 | *.appx 218 | 219 | # Visual Studio cache files 220 | # files ending in .cache can be ignored 221 | *.[Cc]ache 222 | # but keep track of directories ending in .cache 223 | !*.[Cc]ache/ 224 | 225 | # Others 226 | ClientBin/ 227 | ~$* 228 | *~ 229 | *.dbmdl 230 | *.dbproj.schemaview 231 | *.jfm 232 | *.pfx 233 | *.publishsettings 234 | orleans.codegen.cs 235 | 236 | # Including strong name files can present a security risk 237 | # (https://github.com/github/gitignore/pull/2483#issue-259490424) 238 | #*.snk 239 | 240 | # Since there are multiple workflows, uncomment next line to ignore bower_components 241 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 242 | #bower_components/ 243 | 244 | # RIA/Silverlight projects 245 | Generated_Code/ 246 | 247 | # Backup & report files from converting an old project file 248 | # to a newer Visual Studio version. Backup files are not needed, 249 | # because we have git ;-) 250 | _UpgradeReport_Files/ 251 | Backup*/ 252 | UpgradeLog*.XML 253 | UpgradeLog*.htm 254 | ServiceFabricBackup/ 255 | *.rptproj.bak 256 | 257 | # SQL Server files 258 | *.mdf 259 | *.ldf 260 | *.ndf 261 | 262 | # Business Intelligence projects 263 | *.rdl.data 264 | *.bim.layout 265 | *.bim_*.settings 266 | *.rptproj.rsuser 267 | 268 | # Microsoft Fakes 269 | FakesAssemblies/ 270 | 271 | # GhostDoc plugin setting file 272 | *.GhostDoc.xml 273 | 274 | # Node.js Tools for Visual Studio 275 | .ntvs_analysis.dat 276 | node_modules/ 277 | 278 | # Visual Studio 6 build log 279 | *.plg 280 | 281 | # Visual Studio 6 workspace options file 282 | *.opt 283 | 284 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 285 | *.vbw 286 | 287 | # Visual Studio LightSwitch build output 288 | **/*.HTMLClient/GeneratedArtifacts 289 | **/*.DesktopClient/GeneratedArtifacts 290 | **/*.DesktopClient/ModelManifest.xml 291 | **/*.Server/GeneratedArtifacts 292 | **/*.Server/ModelManifest.xml 293 | _Pvt_Extensions 294 | 295 | # Paket dependency manager 296 | .paket/paket.exe 297 | paket-files/ 298 | 299 | # FAKE - F# Make 300 | .fake/ 301 | 302 | # JetBrains Rider 303 | .idea/ 304 | *.sln.iml 305 | 306 | # CodeRush 307 | .cr/ 308 | 309 | # Python Tools for Visual Studio (PTVS) 310 | __pycache__/ 311 | *.pyc 312 | 313 | # Cake - Uncomment if you are using it 314 | # tools/** 315 | # !tools/packages.config 316 | 317 | # Tabs Studio 318 | *.tss 319 | 320 | # Telerik's JustMock configuration file 321 | *.jmconfig 322 | 323 | # BizTalk build output 324 | *.btp.cs 325 | *.btm.cs 326 | *.odx.cs 327 | *.xsd.cs 328 | 329 | # OpenCover UI analysis results 330 | OpenCover/ 331 | 332 | # Azure Stream Analytics local run output 333 | ASALocalRun/ 334 | 335 | # MSBuild Binary and Structured Log 336 | *.binlog 337 | 338 | # NVidia Nsight GPU debugger configuration file 339 | *.nvuser 340 | 341 | # MFractors (Xamarin productivity tool) working folder 342 | .mfractor/ 343 | 344 | ### OSX ### 345 | 346 | # General 347 | .DS_Store 348 | .AppleDouble 349 | .LSOverride 350 | 351 | # Icon must end with two \r 352 | Icon 353 | 354 | 355 | # Thumbnails 356 | ._* 357 | 358 | # Files that might appear in the root of a volume 359 | .DocumentRevisions-V100 360 | .fseventsd 361 | .Spotlight-V100 362 | .TemporaryItems 363 | .Trashes 364 | .VolumeIcon.icns 365 | .com.apple.timemachine.donotpresent 366 | 367 | # Directories potentially created on remote AFP share 368 | .AppleDB 369 | .AppleDesktop 370 | Network Trash Folder 371 | Temporary Items 372 | .apdisk 373 | 374 | # Ignore "InteropTests/NativeTests/out" 375 | InteropTests/NativeTests/out 376 | /src/System.Windows.Forms/src/comctl32.dll 377 | *.received.* 378 | 379 | # Normally do not want to pick up changes in the scratch project, this will ignore files that aren't already tracked. 380 | # 'git update-index --assume-unchanged ' will allow ignoring changes for tracked files. 381 | **/ScratchProject/ 382 | -------------------------------------------------------------------------------- /source/PS5-Profile-Modder/FodyWeavers.xsd: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | A list of assembly names to exclude from the default action of "embed all Copy Local references", delimited with line breaks 13 | 14 | 15 | 16 | 17 | A list of assembly names to include from the default action of "embed all Copy Local references", delimited with line breaks. 18 | 19 | 20 | 21 | 22 | A list of runtime assembly names to exclude from the default action of "embed all Copy Local references", delimited with line breaks 23 | 24 | 25 | 26 | 27 | A list of runtime assembly names to include from the default action of "embed all Copy Local references", delimited with line breaks. 28 | 29 | 30 | 31 | 32 | A list of unmanaged 32 bit assembly names to include, delimited with line breaks. 33 | 34 | 35 | 36 | 37 | A list of unmanaged 64 bit assembly names to include, delimited with line breaks. 38 | 39 | 40 | 41 | 42 | The order of preloaded assemblies, delimited with line breaks. 43 | 44 | 45 | 46 | 47 | 48 | This will copy embedded files to disk before loading them into memory. This is helpful for some scenarios that expected an assembly to be loaded from a physical file. 49 | 50 | 51 | 52 | 53 | Controls if .pdbs for reference assemblies are also embedded. 54 | 55 | 56 | 57 | 58 | Controls if runtime assemblies are also embedded. 59 | 60 | 61 | 62 | 63 | Controls whether the runtime assemblies are embedded with their full path or only with their assembly name. 64 | 65 | 66 | 67 | 68 | Embedded assemblies are compressed by default, and uncompressed when they are loaded. You can turn compression off with this option. 69 | 70 | 71 | 72 | 73 | As part of Costura, embedded assemblies are no longer included as part of the build. This cleanup can be turned off. 74 | 75 | 76 | 77 | 78 | Costura by default will load as part of the module initialization. This flag disables that behavior. Make sure you call CosturaUtility.Initialize() somewhere in your code. 79 | 80 | 81 | 82 | 83 | Costura will by default use assemblies with a name like 'resources.dll' as a satellite resource and prepend the output path. This flag disables that behavior. 84 | 85 | 86 | 87 | 88 | A list of assembly names to exclude from the default action of "embed all Copy Local references", delimited with | 89 | 90 | 91 | 92 | 93 | A list of assembly names to include from the default action of "embed all Copy Local references", delimited with |. 94 | 95 | 96 | 97 | 98 | A list of runtime assembly names to exclude from the default action of "embed all Copy Local references", delimited with | 99 | 100 | 101 | 102 | 103 | A list of runtime assembly names to include from the default action of "embed all Copy Local references", delimited with |. 104 | 105 | 106 | 107 | 108 | A list of unmanaged 32 bit assembly names to include, delimited with |. 109 | 110 | 111 | 112 | 113 | A list of unmanaged 64 bit assembly names to include, delimited with |. 114 | 115 | 116 | 117 | 118 | The order of preloaded assemblies, delimited with |. 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. 127 | 128 | 129 | 130 | 131 | A comma-separated list of error codes that can be safely ignored in assembly verification. 132 | 133 | 134 | 135 | 136 | 'false' to turn off automatic generation of the XML Schema file. 137 | 138 | 139 | 140 | 141 | -------------------------------------------------------------------------------- /source/PS5-Profile-Modder/Editor.cs: -------------------------------------------------------------------------------- 1 | using DevExpress.DirectX.NativeInterop.Direct2D; 2 | using DevExpress.XtraEditors; 3 | using DevExpress.XtraEditors.Design; 4 | using FluentFTP; 5 | using System; 6 | using System.Collections.Generic; 7 | using System.ComponentModel; 8 | using System.Data; 9 | using System.Drawing; 10 | using System.Linq; 11 | using System.Security.Cryptography.X509Certificates; 12 | using System.Text; 13 | using System.Threading.Tasks; 14 | using System.Windows.Forms; 15 | using ImageMagick; 16 | using System.IO; 17 | using DevExpress.LookAndFeel; 18 | using DevExpress.Skins; 19 | using System.Drawing.Imaging; 20 | 21 | namespace PS5_Profile_Modder { 22 | public partial class Editor : DevExpress.XtraEditors.XtraForm { 23 | 24 | Image SelectedUserImage = null; 25 | FtpClient client; 26 | 27 | Image OpenedImage; 28 | Stream fs; 29 | MagickImage mi; 30 | 31 | Skin currentSkin; 32 | SkinElement element; 33 | 34 | public Editor(FtpClient ftpclient) { 35 | InitializeComponent(); 36 | client = ftpclient; 37 | currentSkin = CommonSkins.GetSkin(UserLookAndFeel.Default); 38 | element = currentSkin[CommonSkins.SkinButton]; 39 | 40 | if (!Connect.IsDarkMode()) { IconOptions.Image = PS5_Profile_Modder.Properties.Resources.other; } 41 | 42 | 43 | btnSave.Appearance.BackColor = currentSkin.SvgPalettes["DefaultSkinPalette"]. 44 | GetColorByStyleName("Edit Background 0", "White"); 45 | 46 | 47 | foreach (KeyValuePair entry in Users.UsersDict) { 48 | dropUsers.Properties.Items.Add(entry.Key); 49 | } 50 | dropUsers.SelectedIndex = 0; 51 | 52 | 53 | 54 | 55 | 56 | 57 | } 58 | private void panelAvatar_Paint(object sender, PaintEventArgs e) { 59 | // Show Person Picture using PS5User.Avatar (or default if null) 60 | e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; 61 | Image image = new Bitmap(PS5_Profile_Modder.Properties.Resources.default_avatar, 98, 98); 62 | if (!Connect.IsDarkMode()) { image = new Bitmap(PS5_Profile_Modder.Properties.Resources.other, 98, 98); } 63 | try { image = new Bitmap(Users.UsersDict[dropUsers.SelectedItem.ToString()].Avatar.ToBitmap(), 98, 98); } catch { Console.WriteLine("No avatar found. Using default."); } 64 | TextureBrush tbrush = new TextureBrush(image, new RectangleF(0, 0, 98, 98)); 65 | e.Graphics.FillEllipse(tbrush, new RectangleF(0, 0, 98, 98)); 66 | 67 | if (Users.UsersDict[dropUsers.SelectedItem.ToString()].Changed == true) { 68 | btnSave.Enabled = true; 69 | btnSave.Appearance.BackColor = currentSkin.SvgPalettes["DefaultSkinPalette"]. 70 | GetColorByStyleName("Primary Background 0", "White"); 71 | } 72 | 73 | } 74 | 75 | private void btnEdit_Click(object sender, EventArgs e) { 76 | 77 | Form CropToolWindow = new CropTool(SelectedUserImage, dropUsers.SelectedItem.ToString()); 78 | CropToolWindow.ShowDialog(); 79 | 80 | panelAvatar.Refresh(); 81 | 82 | } 83 | private void btnSave_Click(object sender, EventArgs e) { 84 | try { 85 | MagickImage avatar = Users.UsersDict[dropUsers.SelectedItem.ToString()].Avatar; 86 | avatar.Format = MagickFormat.Png; 87 | 88 | IMagickGeometry g = new MagickGeometry(440, 440); 89 | g.FillArea = true; 90 | 91 | string tempDirectory = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()); 92 | Directory.CreateDirectory(tempDirectory); 93 | 94 | avatar.Resize(g); 95 | avatar.Crop(440, 440, Gravity.Center); 96 | avatar.Write(tempDirectory+"/avatar.png"); 97 | avatar.Format = MagickFormat.Dds; 98 | avatar.Write(tempDirectory+"/avatar440.dds"); 99 | avatar.Resize(260, 260); 100 | avatar.Write(tempDirectory+"/avatar260.dds"); 101 | avatar.Resize(128, 128); 102 | avatar.Write(tempDirectory+"/avatar128.dds"); 103 | avatar.Resize(64, 64); 104 | avatar.Write(tempDirectory+"/avatar64.dds"); 105 | 106 | try { client.DeleteFile(string.Format("/system_data/priv/cache/profile/{0}/avatar.png", "0x" + Users.UsersDict[dropUsers.SelectedItem.ToString()].ID.ToUpper())); } catch { } 107 | try { client.DeleteFile(string.Format("/system_data/priv/cache/profile/{0}/avatar440.dds", "0x" + Users.UsersDict[dropUsers.SelectedItem.ToString()].ID.ToUpper())); } catch { } 108 | try { client.DeleteFile(string.Format("/system_data/priv/cache/profile/{0}/avatar260.dds", "0x" + Users.UsersDict[dropUsers.SelectedItem.ToString()].ID.ToUpper())); } catch { } 109 | try { client.DeleteFile(string.Format("/system_data/priv/cache/profile/{0}/avatar128.dds", "0x" + Users.UsersDict[dropUsers.SelectedItem.ToString()].ID.ToUpper())); } catch { } 110 | try { client.DeleteFile(string.Format("/system_data/priv/cache/profile/{0}/avatar64.dds", "0x" + Users.UsersDict[dropUsers.SelectedItem.ToString()].ID.ToUpper())); } catch { } 111 | 112 | 113 | client.UploadFile(tempDirectory+"/avatar.png", string.Format("/system_data/priv/cache/profile/{0}/avatar.png", "0x" + Users.UsersDict[dropUsers.SelectedItem.ToString()].ID.ToUpper()), FtpRemoteExists.NoCheck); 114 | client.UploadFile(tempDirectory+"/avatar440.dds", string.Format("/system_data/priv/cache/profile/{0}/avatar440.dds", "0x" + Users.UsersDict[dropUsers.SelectedItem.ToString()].ID.ToUpper()), FtpRemoteExists.NoCheck); 115 | client.UploadFile(tempDirectory+"/avatar260.dds", string.Format("/system_data/priv/cache/profile/{0}/avatar260.dds", "0x" + Users.UsersDict[dropUsers.SelectedItem.ToString()].ID.ToUpper()), FtpRemoteExists.NoCheck); 116 | client.UploadFile(tempDirectory+"/avatar128.dds", string.Format("/system_data/priv/cache/profile/{0}/avatar128.dds", "0x" + Users.UsersDict[dropUsers.SelectedItem.ToString()].ID.ToUpper()), FtpRemoteExists.NoCheck); 117 | client.UploadFile(tempDirectory+"/avatar64.dds", string.Format("/system_data/priv/cache/profile/{0}/avatar64.dds", "0x" + Users.UsersDict[dropUsers.SelectedItem.ToString()].ID.ToUpper()), FtpRemoteExists.NoCheck); 118 | 119 | 120 | File.Delete(tempDirectory+"/avatar.png"); 121 | File.Delete(tempDirectory+"/avatar440.dds"); 122 | File.Delete(tempDirectory+"/avatar260.dds"); 123 | File.Delete(tempDirectory+"/avatar128.dds"); 124 | File.Delete(tempDirectory+"/avatar64.dds"); 125 | 126 | 127 | 128 | } catch { 129 | XtraMessageBox.Show("Unknown issue while converting and uploading images.", 130 | "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 131 | return; 132 | } 133 | 134 | Users.UsersDict[dropUsers.SelectedItem.ToString()].Changed = false; 135 | btnSave.Enabled = false; 136 | btnSave.Appearance.BackColor = currentSkin.SvgPalettes["DefaultSkinPalette"]. 137 | GetColorByStyleName("Edit Background 0", "White"); 138 | 139 | } 140 | 141 | 142 | 143 | private void dropUsers_SelectedIndexChanged(object sender, EventArgs e) { 144 | this.panelAvatar.Refresh(); 145 | if (Users.UsersDict[dropUsers.SelectedItem.ToString()].Avatar == null) { 146 | btnGrabber.Enabled = false; 147 | } else { 148 | btnGrabber.Enabled = true; 149 | } 150 | 151 | if (Users.UsersDict[dropUsers.SelectedItem.ToString()].Changed == true) { 152 | btnSave.Enabled = true; 153 | btnSave.Appearance.BackColor = currentSkin.SvgPalettes["DefaultSkinPalette"]. 154 | GetColorByStyleName("Primary Background 0", "White"); 155 | } else { 156 | btnSave.Enabled = false; 157 | btnSave.Appearance.BackColor = currentSkin.SvgPalettes["DefaultSkinPalette"]. 158 | GetColorByStyleName("Edit Background 0", "White"); 159 | } 160 | 161 | 162 | 163 | } 164 | 165 | private void btnTrash_Click(object sender, EventArgs e) { 166 | if (XtraMessageBox.Show("This will delete all avatar cache files associated with this user. Are you sure?", 167 | "Confirmation", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == DialogResult.OK) { 168 | client.SetWorkingDirectory(string.Format("/system_data/priv/cache/profile/{0}", ("0x" + Users.UsersDict[dropUsers.SelectedItem.ToString()].ID.ToUpper()))); 169 | try { client.DeleteFile("avatar.png"); } catch { } 170 | try { client.DeleteFile("avatar440.dds"); } catch { } 171 | try { client.DeleteFile("avatar260.dds"); } catch { } 172 | try { client.DeleteFile("avatar128.dds"); } catch { } 173 | try { client.DeleteFile("avatar64.dds"); } catch { } 174 | Users.UsersDict[dropUsers.SelectedItem.ToString()].Avatar = null; 175 | btnSave.Enabled = false; 176 | btnSave.Appearance.BackColor = currentSkin.SvgPalettes["DefaultSkinPalette"]. 177 | GetColorByStyleName("Edit Background 0", "White"); 178 | 179 | // 180 | this.panelAvatar.Refresh(); 181 | } 182 | } 183 | 184 | private void btnGrabber_Click(object sender, EventArgs e) { 185 | var dir = dropUsers.SelectedItem.ToString().Replace("\0", string.Empty); 186 | try { 187 | foreach (char c in System.IO.Path.GetInvalidFileNameChars()) { 188 | dir = dir.Replace(c, '_'); 189 | } 190 | Directory.CreateDirectory(dir); 191 | client.DownloadFile(dir + "/avatar.png", string.Format("/system_data/priv/cache/profile/{0}/avatar.png", "0x" + Users.UsersDict[dropUsers.SelectedItem.ToString()].ID.ToUpper())); 192 | client.DownloadFile(dir + "/avatar440.dds", string.Format("/system_data/priv/cache/profile/{0}/avatar440.dds", "0x" + Users.UsersDict[dropUsers.SelectedItem.ToString()].ID.ToUpper())); 193 | client.DownloadFile(dir + "/avatar260.dds", string.Format("/system_data/priv/cache/profile/{0}/avatar260.dds", "0x" + Users.UsersDict[dropUsers.SelectedItem.ToString()].ID.ToUpper())); 194 | client.DownloadFile(dir + "/avatar128.dds", string.Format("/system_data/priv/cache/profile/{0}/avatar128.dds", "0x" + Users.UsersDict[dropUsers.SelectedItem.ToString()].ID.ToUpper())); 195 | client.DownloadFile(dir + "/avatar64.dds", string.Format("/system_data/priv/cache/profile/{0}/avatar64.dds", "0x" + Users.UsersDict[dropUsers.SelectedItem.ToString()].ID.ToUpper())); 196 | } 197 | catch { 198 | XtraMessageBox.Show("Unknown issue while downloading images.", 199 | "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 200 | return; 201 | 202 | } 203 | XtraMessageBox.Show(string.Format("The user's images have been downloaded and saved inside the \"{0}\" folder.", dir), 204 | "Avatar Downloaded", MessageBoxButtons.OK, MessageBoxIcon.Information); 205 | return; 206 | 207 | } 208 | } 209 | } -------------------------------------------------------------------------------- /source/PS5-Profile-Modder/ConnectForm.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 | 125 | 126 | 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 305 | 306 | 307 | -------------------------------------------------------------------------------- /source/PS5-Profile-Modder/PS5-Profile-Modder.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | Debug 4 | x86 5 | 8.0.30703 6 | 2.0 7 | {84C8B2B0-ED33-4454-A716-66A4E332C7ED} 8 | WinExe 9 | Properties 10 | PS5_Profile_Modder 11 | HotswapPS5 12 | v4.8 13 | 512 14 | 15 | 16 | false 17 | true 18 | C:\dev\ 19 | true 20 | Disk 21 | false 22 | Foreground 23 | 7 24 | Days 25 | false 26 | false 27 | true 28 | true 29 | 2 30 | 1.0.0.%2a 31 | false 32 | true 33 | true 34 | 35 | 36 | AnyCPU 37 | true 38 | full 39 | false 40 | bin\Debug\ 41 | DEBUG;TRACE 42 | prompt 43 | 4 44 | 45 | 46 | AnyCPU 47 | none 48 | true 49 | bin\Release\ 50 | TRACE 51 | prompt 52 | 4 53 | 54 | 55 | 3e15884a-7090-441d-99ff-f787a4cbc2da%282%29.ico 56 | 57 | 58 | 4B4F6E33124228681487225275423969EA04E8DE 59 | 60 | 61 | PS5-Profile-Modder_TemporaryKey.pfx 62 | 63 | 64 | false 65 | 66 | 67 | true 68 | bin\x86\Debug\ 69 | DEBUG;TRACE 70 | full 71 | x86 72 | 7.3 73 | prompt 74 | true 75 | 76 | 77 | bin\x86\Release\ 78 | TRACE 79 | true 80 | pdbonly 81 | x86 82 | 7.3 83 | prompt 84 | true 85 | 86 | 87 | LocalIntranet 88 | 89 | 90 | Properties\app.manifest 91 | 92 | 93 | 94 | False 95 | True 96 | 97 | 98 | False 99 | True 100 | 101 | 102 | False 103 | True 104 | 105 | 106 | False 107 | True 108 | 109 | 110 | False 111 | True 112 | 113 | 114 | False 115 | True 116 | 117 | 118 | False 119 | True 120 | 121 | 122 | ..\packages\FluentFTP.47.1.0\lib\net472\FluentFTP.dll 123 | False 124 | True 125 | 126 | 127 | ..\packages\Magick.NET-Q16-AnyCPU.13.2.0\lib\netstandard20\Magick.NET-Q16-AnyCPU.dll 128 | False 129 | True 130 | 131 | 132 | ..\packages\Magick.NET.Core.13.2.0\lib\netstandard20\Magick.NET.Core.dll 133 | False 134 | True 135 | 136 | 137 | ..\packages\Magick.NET.SystemDrawing.7.0.6\lib\net462\Magick.NET.SystemDrawing.dll 138 | False 139 | True 140 | 141 | 142 | ..\packages\Microsoft.Win32.Primitives.4.3.0\lib\net46\Microsoft.Win32.Primitives.dll 143 | True 144 | True 145 | False 146 | 147 | 148 | False 149 | 150 | 151 | ..\packages\System.AppContext.4.3.0\lib\net463\System.AppContext.dll 152 | True 153 | True 154 | False 155 | 156 | 157 | False 158 | 159 | 160 | False 161 | 162 | 163 | ..\packages\System.Console.4.3.0\lib\net46\System.Console.dll 164 | True 165 | True 166 | False 167 | 168 | 169 | False 170 | 171 | 172 | ..\packages\System.Diagnostics.DiagnosticSource.4.3.0\lib\net46\System.Diagnostics.DiagnosticSource.dll 173 | False 174 | False 175 | 176 | 177 | ..\packages\System.Diagnostics.Tracing.4.3.0\lib\net462\System.Diagnostics.Tracing.dll 178 | True 179 | True 180 | False 181 | 182 | 183 | ..\packages\System.Globalization.Calendars.4.3.0\lib\net46\System.Globalization.Calendars.dll 184 | True 185 | True 186 | False 187 | 188 | 189 | ..\packages\System.IO.4.3.0\lib\net462\System.IO.dll 190 | True 191 | True 192 | False 193 | 194 | 195 | ..\packages\System.IO.Compression.4.3.0\lib\net46\System.IO.Compression.dll 196 | True 197 | True 198 | False 199 | 200 | 201 | False 202 | 203 | 204 | ..\packages\System.IO.Compression.ZipFile.4.3.0\lib\net46\System.IO.Compression.ZipFile.dll 205 | True 206 | True 207 | False 208 | 209 | 210 | ..\packages\System.IO.FileSystem.4.3.0\lib\net46\System.IO.FileSystem.dll 211 | True 212 | True 213 | False 214 | 215 | 216 | ..\packages\System.IO.FileSystem.Primitives.4.3.0\lib\net46\System.IO.FileSystem.Primitives.dll 217 | True 218 | True 219 | False 220 | 221 | 222 | ..\packages\System.Linq.4.3.0\lib\net463\System.Linq.dll 223 | True 224 | True 225 | False 226 | 227 | 228 | ..\packages\System.Linq.Expressions.4.3.0\lib\net463\System.Linq.Expressions.dll 229 | True 230 | True 231 | False 232 | 233 | 234 | ..\packages\System.Net.Http.4.3.0\lib\net46\System.Net.Http.dll 235 | True 236 | True 237 | False 238 | 239 | 240 | ..\packages\System.Net.Sockets.4.3.0\lib\net46\System.Net.Sockets.dll 241 | True 242 | True 243 | False 244 | 245 | 246 | False 247 | 248 | 249 | ..\packages\System.Reflection.4.3.0\lib\net462\System.Reflection.dll 250 | True 251 | True 252 | False 253 | 254 | 255 | ..\packages\System.Runtime.4.3.0\lib\net462\System.Runtime.dll 256 | True 257 | True 258 | False 259 | 260 | 261 | ..\packages\System.Runtime.Extensions.4.3.0\lib\net462\System.Runtime.Extensions.dll 262 | True 263 | True 264 | False 265 | 266 | 267 | ..\packages\System.Runtime.InteropServices.4.3.0\lib\net463\System.Runtime.InteropServices.dll 268 | True 269 | True 270 | False 271 | 272 | 273 | ..\packages\System.Runtime.InteropServices.RuntimeInformation.4.3.0\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll 274 | True 275 | True 276 | False 277 | 278 | 279 | ..\packages\System.Security.Cryptography.Algorithms.4.3.0\lib\net463\System.Security.Cryptography.Algorithms.dll 280 | True 281 | True 282 | False 283 | 284 | 285 | ..\packages\System.Security.Cryptography.Encoding.4.3.0\lib\net46\System.Security.Cryptography.Encoding.dll 286 | True 287 | True 288 | False 289 | 290 | 291 | ..\packages\System.Security.Cryptography.Primitives.4.3.0\lib\net46\System.Security.Cryptography.Primitives.dll 292 | True 293 | True 294 | False 295 | 296 | 297 | ..\packages\System.Security.Cryptography.X509Certificates.4.3.0\lib\net461\System.Security.Cryptography.X509Certificates.dll 298 | True 299 | True 300 | False 301 | 302 | 303 | ..\packages\System.Text.RegularExpressions.4.3.0\lib\net463\System.Text.RegularExpressions.dll 304 | True 305 | True 306 | False 307 | 308 | 309 | False 310 | 311 | 312 | False 313 | 314 | 315 | False 316 | 317 | 318 | False 319 | 320 | 321 | False 322 | 323 | 324 | False 325 | 326 | 327 | False 328 | 329 | 330 | False 331 | 332 | 333 | ..\packages\System.Xml.ReaderWriter.4.3.0\lib\net46\System.Xml.ReaderWriter.dll 334 | True 335 | True 336 | False 337 | 338 | 339 | 340 | 341 | Form 342 | 343 | 344 | ConnectForm.cs 345 | 346 | 347 | Form 348 | 349 | 350 | Editor.cs 351 | 352 | 353 | 354 | 355 | 356 | Form 357 | 358 | 359 | CropTool.cs 360 | 361 | 362 | 363 | ConnectForm.cs 364 | 365 | 366 | Editor.cs 367 | 368 | 369 | ResXFileCodeGenerator 370 | Resources.Designer.cs 371 | Designer 372 | 373 | 374 | True 375 | Resources.resx 376 | True 377 | 378 | 379 | 380 | 381 | 382 | SettingsSingleFileGenerator 383 | Settings.Designer.cs 384 | 385 | 386 | True 387 | Settings.settings 388 | True 389 | 390 | 391 | 392 | 393 | CropTool.cs 394 | 395 | 396 | 397 | 398 | 399 | 400 | 401 | 402 | 403 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | False 416 | Microsoft .NET Framework 4.8 %28x86 and x64%29 417 | true 418 | 419 | 420 | False 421 | .NET Framework 3.5 SP1 422 | false 423 | 424 | 425 | 426 | 427 | 428 | 429 | This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. 430 | 431 | 432 | 433 | 440 | 441 | 442 | 443 | 444 | 445 | 446 | -------------------------------------------------------------------------------- /source/PS5-Profile-Modder/Editor.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 | 125 | 126 | iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m 127 | dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAMdEVYdFRpdGxlAFRyYXNoO2SaNW0AAAJbSURBVDhP 128 | dZJvT5JRGMbRXH9Wqy/BN+mFiT6WCAKSQmZLZRogGNLMlUsxfRRXWLkgncSmJpaGERR/EpQMSlNb9aJe 129 | 9K4vcXXuE8+zEXm2a+c+97mu3+6z51EA+FcV+lZnxur0wDUwyTQBW98odC2OzH+8irIGU4XWaIep3e1l 130 | 9Smmk62X+8epV7wvkUKpVHLRoUHXk1Hrr8HWL8LunoDWaIOm2cbPVtc42D2JTyLlpKKivqn7geumF0/m 131 | nyMazyK3/RmFnS98jye2sLQSw0P/InrdIpjXRxkJQMURQWOBx7eEKf8qguEkXqc+Ip3b4zudqU/3w/cW 132 | QV7KUFYCHK1t6ESdugtCo4WP2sTerGvp5TudqU/35CNRhqlSBjCdNrb1YWU9jQU2rnh/HpH4JpbX3mJk 133 | MoDllykEl9ZBHuY9U8zIABrneLPZwUYuYC2WhegL8SdEEzncmZzFq2Qe4UgKBlMvAU4wVVFWAnCI3uRE 134 | cusA8XQB4nQIuU/fkczuYNg7x/uRNznoWh3y+0kE4KJP03TRjo0PX5HI7mKMTZDf+4F37/cxJM7yfjSV 135 | 559WypBKAI2GHmb8hsTmLjxTQQ7YYIDBUT/vE0Ct7y4FUFDSBW0XNyYZYGhiDoW9n9jY3seN4RkZcF7T 136 | yX6/v4syJYA6dYcMuDUWKAIOcP32tAyobbh6OKCmvv23LxBGIBTBgOcxFl8k8PRZDI5BH2bmV+F9tIBz 137 | QtuvYr4coBLa7qqES9AaLLjS4WZywdzuRHOLFTWCGWerjahWmUeK+XIAW5VMx4qqOqQmD18AFH8AEJMi 138 | C62GfuUAAAAASUVORK5CYII= 139 | 140 | 141 | 142 | 143 | iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABV0RVh0VGl0 144 | bGUARG93bmxvYWQ7QXJyb3c77I8a0AAAAk9JREFUOE91km1IU1EYxzfvsib2gkY5KaSLK4WhMLg6cdvd 145 | dLV8ySSKCKmwZqEpKoYohS9gb7rUvmnOaaPRi01EIupD2SgJ55pF1Jcgs6LoQ/ghK4Lk33lsjCXHB36c 146 | w3n+58c59x4FgCWWlZIRwyFSkX3Rgu67VhpinOOWCTZHNGztAfXCGb7A6dtFg3Dpjg2//rz7jxa3TCHV 147 | WZeJMlwBHVtgrD7ntWL+9xTmFtx4/92Nzz98aOrLpZCaoaIsTyC0eWS0DjOGzGzTfbz55sRrxtv5AdT3 148 | GlDfY0BtdzaFVVzBsfaM2zeeVmDmaxdCX85j8tNpRgMezp7Ao9lqXL13GHllKaMrCZTG0i2J5W0ZH7zB 149 | vbj+0grPjBnXQkYMh0zo88vYeXTbx/ScjZspyxNQCQUOMb+yU7/oCeVhMGiAazobg9NG7K/TLurtSXbK 150 | UHAlAX3IVYUO8WKTS4/+gIT+KQlV3emQijRdrBcbzvAFxZWpNCgTk9Xxux1ioGMsEy0jOmSVaJ7HJ8Su 151 | pV5WSTJl+AL7cVFxZTKTpoLelpSx55S4YC3b+lMrJdCi0PNEp5CKNdTnC1hFP2FBKtTU6ORNtWxO/57u 152 | HnnSPIHKOSb7L49b0Dkq48KICR03jWj35qLVk4MzbgOaB7JQ26v3U5YnUDe7DJiYK4fvlR23XtjgZX/C 153 | E7RgKGCG65kR/ZMG7KvbTuE4nmDNoca0xwcb03CgYcdSsLRGi5JqLYqqUlFwUoS9QkT+kRQ6AVdAd6O3 154 | vo6xPsyGZdBaHCPm3z4o/gL/F7wZt1fm3wAAAABJRU5ErkJggg== 155 | 156 | 157 | 158 | 159 | iVBORw0KGgoAAAANSUhEUgAAAPAAAADwCAYAAAA+VemSAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m 160 | dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAADmISURBVHhe7b0JlCTZWd97ezSLNJJYZAmQLAnmsclG 161 | CMnGNs+AQU8WcJCxwQI/ZIHFZvtg8TA28jOywMcHg/GiJ8FjEBbHHFsCgdBopqeX2vd937JyqVwjY98z 162 | cqu9qtP/L7KyurrqdlevFZk9d2p+nVm3qjIjbny/+303tmSNRkMgEHQo3EaBQNAZcBsFAkFnwG0UCASd 163 | AbdRIBB0BtxGgUDQGXAbBQJBZ8BtFAgEnQG3USAQdAbcRoFA0BlwGwUCQWfAbRQIBJ0Bt1EgEHQG3EaB 164 | QNAZcBsFAkFnwG0UCASdAbdRIBB0BtxGgUDQGXAbBQJBZ8BtFAgEnQG3USAQdAbcRoFA0BlwGwUCQWfA 165 | bRQIBJ0Bt1EgEHQG3EaBQNAZcBsFAkFnwG0UCASdAbdRIBB0BtxGgUDQGXAbBQJBZ8BtFAgEnQG3USAQ 166 | dAbcRoFA0BlwG6PAcqzb41rMdmzmOA4zXZOZjslsD9+7DrNtm1m2xbySx4JywMpBmQUBHstlVqvVWLVe 167 | Ddnc2mSVWoWVa/h5PWg+L5dfi9/9a3j8OfDbeP55MACWSqXSOsj4vm8AFziCi8NzPaIINkAMzLiuewVx 168 | 8FnEwK8hBj5omuZz4BnAWhiGwbDdmG3ZDH/DdE1nsiwzUzWZpVpMMzSWV/OsUCywgnSTbC57/DxfyLOd 169 | nR22u7t7W3gxHAXcxijgitvi4Qh8CdJegsDPQeCPlKvlP8LvruJ3Xc/zqgiObbCF96iAEl7XAy6e22i3 170 | BBeNZ0FAG9CXh+9LaK9gm28hBuqIAR/CamAY/EfwAfBVEPiSEDgCuOK2eDCBL4GvhsAfrFQrX8TPVATC 171 | Jv5uxzKtAHjY6A42voX/6B8TP7PwXiEIHcvzfVCy/JLgYglszw9xCPq+FJRs/AxtJQcDLw2wAbbZFraf 172 | B9axLf8TBP4uCPwkBL4kBL4guOK2uD+BL0HgN9U2a7/ol/1ZSLvtGM4ONmQAHIzdlmEasNU08ToGgoGA 173 | sDdBKWeGlEqmHwSCi8MiSgDbsgXkDWw8OmVUTS3wvQthSWYP8VGCxFu6rmMItv8cAr8fAj8NgS8JgR8x 174 | XHFb3JvAl7BR31CpVH4ZG3YDkt5QFKWuy7praRZ+1bZcxw2FRW1GmHhOtCQ+C+bBgragOaA2IZkJt1Ku 175 | utVyzatVapC6TFMiH/GyZahGXVO16xD470Lgp4TAjxCuuC3uXuCnsAF/GBt3DOIeSkVpU5IkW1d1y8Ef 176 | eQ5HTkHnUgoIZOyaVS7XbRIZEvuVWqUU1ALfD3wPsbGlaZoPgX8fAn8jBH6VEPgRwBW3xfkCX4LA34AN 177 | 9oemZdaLcnEP4nrIvFRKmb7rG76HEZwXBILOxS8dAZEBTXVKfsnG9MmpVCt+tVr1q5Uqldi+bdrbpmJm 178 | IfDPQ+BnhMAPGa64Le4s8BPgffj5sqIqjbyUL+PRpoxbcktC3Fcepud7ZikoWZWg4tYrdb9eqwelSqmE 179 | OXFFUqQdCPxZCPxmyHpJCPyQ4Irb4nYCO87rXNf9GMrlAOXyITaKqxoq7T02Ai8wSh5GZ/5GFjzO+MeY 180 | 5VLZrmF+jJI6COq0x8v1VVPdR6zMQtbvBq8SAj8EuOK2OCvwJQj8JpTOvxdm3UJ+W5Zl28FMV2RcwWkw 181 | kNNebCeoBiWS2K/4JdM2dyGrBv4heFII/IBwxW1xq8CXIPDbwZ9A2kYul6uoimq7tivkFdwWqGuSxCil 182 | w2xcrpVdxFWlUCh4kPbnIPDTQuAHgCtui5sCXzI98znd1F8sSsVGIVsIVA0lsysyr+DuKJWQjcuBC4lp 183 | T3UJ8VWBtHUI/Et4fEoIfJ+ckfYkLYFd5y2GY3y+WAzlrai6auNn4fFc3sYSCE4DgSkbW8jEJHGAstpH 184 | YihD3Cr4MHhSCHwfcMVtQQK79hssy/p9kjefzVeQeW3KvEcnY3A3lkDAg6o13/etSrniVirhMWPKxHXI 185 | 64K/B4GfEALfI2ekPYlrPYPHX1cUpZHP5zeReS2U0kJcwf3jQ+SSb5bLZZd2bFEmtk27BnkV8J0Q+Ame 186 | uC14MRwF3MYoQIblAnGfwONHdEOvSgVprzXnFfIKHpijQ01BJXDLtbJfKpd8XdV387n85Pb29ptBWErz 187 | 4MVwFHAbo2D/YP8WDg4P2PbW9iXXdf+mZmhrhUKhIauyhWx85/OWBYJ7AKV0cw81JA4PMQV+SSkoe4qk 188 | PJ9cTz5dyBYYD14MRwG3MQr29vdugSTe2tp6k23Zf0zzXqko0XmtpuMfXzkkEDwwJHDJLzX3TleD8BAT 189 | kkapkC9spuKpD0o56QnATsOL4SjgNkbB7h7mFieAxE/Utmo/h6y7iw7bsgyReQWPDt/z6TixTXPhoByU 190 | NF2r57P5OGLvbSfFbcGL4SjgNkaBYRrHYL5Lh4zeZXv2XEEqNDRFo2t2hcCCRwbtmUYmDk/2qJQrJZTV 191 | JUmSDjKZzH9OZ9NPAnYSXgxHAbcxCuiSwBM8bVnWr8uK3MDct+yarknnNvM6XiB4mCD/WvVK3avX6iXT 192 | MiuJbMKEsO8SAp/D1uZWyPbWNqtWq3/LsIwksu8NupY3cMSFCYKLoxyU7Xq1XkIp7efl/G4mm/lDOsED 193 | HJ8vzYvhKOA2RsFmfTMEEj+JEuY3VE1tFIvFUng9L92NgdPRAsGjgM7UCg8tVcoUf6V0Om3mC/l30Rla 194 | LXgxHAXcxijY3txmO5s7DKXLd9iOvaCoyg1VVem2kNxOFggeFSijjXCHFjIwHr18Pr8VT8SfX4+vPwEY 195 | wYvhKOA2RkEo8NbOE5u1zV8wDGO/UCxWNMx9HbpIwUXHCgQXxNEdXMxSqeSWy2Vf03U/kUxkIPFbUxsp 196 | RvBiOAq4jVGwU99h2/Xtt5X80peLSrEhq5pluoHhuJj7cjpZIHjUYOpGt+fx6aT7dDZbz2QyHz08PLwE 197 | uDEcBdzGKDgS+L2u6+pSUdo3TfjrlQwXoyGvcwWCR83RsWG3FJRdWZHrmAt37+/vPwW4MRwF3MYo2K3v 198 | PrFV2/qYZVkNWZZLx3fX4HSsQHAhYD6MMtqhebBuaFRGK7V67VsAN4ajgNsYBTubO2+pVWp/ZppmQ9M0 199 | unezye1UgeCigMBHZbSHytBOZ9LbyMQ/A7gxHAXcxijY2937rqAUpA3dOLB0K7wVLLdTBYKLorlXmu6n 200 | RR9u5+byuXo8Ef+z9fj6JV4MRwG3MQr2dvY+WHJLZV3VN23TFuWzIHqaAtPe6PATIJB5yyij5yDxV/Fi 201 | OAq4jVGwt7f37yBtQ9d033Isw6HPK+J1qkBwwdDN4klgJBY3k8iYiVjiPbwYjgJuYxRsb23/nuM4Dd3Q 202 | w/tcCYEF7QLK57CMti3byWVyW4n1xA/xYjgKuI1RUK/Ur9i23TAt0zq+2wanMwWCC6c5D3Yc23GkvLSH 203 | Mvpf8mI4CriNUQCBF0hgC/+hw3QhsKBtwDwYAtue45HA2xD4U7wYjgJuYxRA4BwE3oe/Yg+0oL1oftaS 204 | DZEdqSBtJuKJL/FiOAq4jVFQK9cw+bV3Q4EdCEwfBcrrTIHgojn6sDRM7Ry5KG+mEqnrvBiOAm5jFEBg 205 | Hxl4GwIb9AHcTTyBIHqan3ho0ckcELgOgcd5MRwF3MYogMAVCLwFTHSU4UBgB50nEESN60Jgz7MRl6Yi 206 | K9WN5MYcL4ajgNsYBeVyrWbbzqbjCIEF7UZ4VIQysKkqajWVSi/yYjgKuI1R4JVrdaspMEY8IbCgnQgF 207 | psRiKopaWxcCn8UrV4TAgjZFCHwuXtmDwBYEdoTAgjZDCHwuQmBB+3Ja4A0h8GnOCuwIBG3DTYEVCLwu 208 | BD6NEFjQzgiBz+GkwIRt2wJBWyAEvguEwIJ2RQh8F/iBX0dnNUtox+V2pEAQBWcETgqBz1DyS3XbsjdB 209 | eCFDKxMLBO0AyYvHpsBxIfAZfN+vW5YlBBa0JULgc2gJbJmW4doooS2aB7cpGGRCWiXWUZuDZW7B/btX 210 | Kg76CYR9g++dE311sy9P/U2bIQQ+h84Q2DIsx9ZNyzJ0Tae7FPqSLPmSIvlFpejhe0/XdQcBiV+jeTzv 211 | NV5p2AZd421gs6qa6lFfSeiroqp4qqp6mq5Rf5nNwZD39+2BEPgc2lLgo+yA5TIQYoaqq1a2mPUTqUR1 212 | dXl1c2lxqTwzO2NPTk+aC3MLxuLcoru2vBbkNnJlWZJLkNm28HfIOHSzAv57PCa0MiptP+ov0zQNWn/0 213 | Q7CR3Kiux9Yri0uLlanpSXtqbkGfWljSZ+eX3NjaWimbzQRysVgyDHTz0d8eZ2jOe0WBEPgc2lZgZAbT 214 | MK1ivhjEY/Ht2ZnZ8ujIaGxkYORzQ/1DH+/v7//Z/oH+D40Nj/3U5OjkRydGJz45NTbVuzC3KCXiiXJR 215 | KpawTlY7BeOjoCUclcearlv5fD5YX1vfmZ+dD0ZGRlbRT380ODT4CfTVz/QPj32oZ3TyH4+MTX5sanzy 216 | 09MT00NL80vFRCIZFIqyr+sodI5ej/deUSAEPofTAodzJc7OhIugmXnxqCMYFc1JJVLb8zPztdHh0cn+ 217 | 7v5/2t/T/+bhgWE2OjTKBgcH2cDgABsfGWcQl02OTbKpielLkzMz3zcxO/lH80vzudRGqqIqqk/rZoJw 218 | 3sx5347kSDTKukBXVM1PJjO7c7NzQW9vz1BPb8/P9fX3vRXysuGR4bCvBtBXfeir0fEpNg2mxqdeMzk+ 219 | +Xenpqb/19LCcj6dygQotx0TlTdti/A9IowHQgh8Du0kcBiQ+FIkxUOpfDA2OlZAifz/JtYTryVB+7r7 220 | 2DkCs+mZWTY5j+BcmPreucW5F+PxeICNH4RB+RgKjHXSlaLiLS8t74+PTKR6u3t/8cq1K8/29vUyZF12 221 | jsBscmKSLS0vsthK7AeRjfuSyaQPid3W6wuB+XAbo+BsCd0sX6MAm0xXCoqPYGz0dPVMz83MfU86lWZr 222 | K2sMJfI9CTy9OM0WlhZev7i0+NsbiQ1TU7UKgtGkgOS9d8cRViuQV1ZcrGejf7B/cGRo5J39vf3s6vWr 223 | 7F4ERh+RwGxxfvGrMXB+JpPKuJhHu5Tdo4wHQgh8Dm0hMJVrEEuTNSe2GmuMDI5Mdl3p+jaUz2wjufEg 224 | ArPllWWGOeHHc+mcb+hGGe+jc5ehw7Bsy5AV2VlaXmp0DXQNg7dBYPaAArP11XWWWEt8OpPJYE6s26HE 225 | nPe/KITA59AuApu6aUDWxtjIWBZB+D0913vYQxF4eZmlN9LPgucLUqGKdXW5y9AptAY7TbMQ0DeGhobi 226 | XT1d39Iz0MMelsDJePLpRCLxRUmSAsSFxV2OCyIUGJUTpglCYB5n5sCtuc8FgvfXpbxUnZ+e3x7sHfzo 227 | YN8gawl8vyX07NIsW1pZYiurKyyVSrFkKvmtYEhRlW28p3l6GToFOqxGEmdz2ToE3BzqG/pAd2836x7o 228 | fjCBV2MMUxeqVlgykWSYC78jtZFKaLrmh4M6DRyc5XnUeI5nupZrYmpVW18XAp/hVoGj2UiGZljxeKIx 229 | Mjx2pb+n/60IStbb1ctmJmfCwFpZWrkngcdnJ9hybJkhAFkilWDxZDwEAv9CUSqSvGUMVvrp5egUkH3N 230 | 1dXVxnD/8P/EYPcVPb09rKe/hw0PQtTegXsSeGJ8gi0sLLB4Cv2zkWSJjUSzz/D9xsbGr2PA8yCvLQS+ 231 | FW5jFJRKpfBqJJOO5p88fHABUMb3LFcvYuNMTc9X+3oH/gllX2KofygMRsrE01MQE3LejcBzc/Nsbmme 232 | rcXXQoEp+x5lYJZJZ54r5os9lmFtuQ5KM84ytTtUreRz+er05PQW+um9qFjYUO9QyGBP8/m169dYT1/P 233 | XQk8NzPHVldWw/4J++sIkjmfyb+9kC+s0cd74r0j6S/EiIl3FgLfDhIYA+wm/L1wgem0R9dy9PRGpjE0 234 | PD7b093/LpL2JCTtBOQkUc8TeBxZOh5LMEVSmJSTWCFbuIV8Ns8KucIndE0vYV7lcZepzSGBU8lUA+Xy 235 | KPrn60jgk5DAXV1dd5WBqe8gKSvmikzKSmcI+yyX/32ERgki2bzledQIgc/hrMBHhw4eMRbhuDrKQWdt 236 | GeXgwMgf9fcMfMUAgvA0/d0DDD8Ls/LY8BgbGRxhAwMIyCOBJ0ebgiMrsUQ8yZA1KPC4YO74DxRNyUPg 237 | Ou0M4i1bO2Piv7XYGvpr+D9C2Ne1KpaT0BSEHvv7IDAGutMCj2Cwm8RgNzc9FwpMg93tKEiFD2PAg74u 238 | nTvNXaZHiRD4HKITmI7HOroqF0vLC0v7y4vLH8ums+FOq9uSTLNMKhPOi8fGxsIMQ0LPTs6GpSCVfkW1 239 | yPJFyHobcoXce1RNXYS8u6B5rnSHgGDW6UKOubm5w8H+wZ8a6Bt4ErA7goFveGgYIuM5BO4ZmWDTswvh 240 | DkJVVhkGUKapd+S7DM3I+I5Pc2Hucj1KhMDncKvAzU7jlTIPm/CUScvWi3KxPD8/V8Y89RdKQYm5rnsu 241 | lUqFxWIx1t3dHe7cyqfzDPM0ZqgG02SN6bJ+W7Si9nZTN/sdx9nrtHmw53gaMmJlYmqihsz6g1Qe3xXh 242 | dKOf9WHqMTI5xzRFZ67lMlMzmamey9dbmhXzXT/AMlx4fwmBz6EpsHXxAtPhEBsCK8XqzOyM193b/ZFw 243 | b+rd0NPD+vr72NDwUFjmVb0q8yzvrvAt/814/6sQeBcCH5+83wmQwFJRqkxPTwcQ8++cEfV2DKOcHuxj 244 | IxPTGORMZusWT9Tb8UZbt5d9Twh8Em5jFEQmcPO9KAMH0/PTfv9I/88PjQ2x8xgcRTYZQVk4NsyymSyr 245 | Vqpsc3OTbW1tsa3NrfD5ndje2n4b1rkP8lIG7jiBMeCVUUJXhkaH3kd9cR79w/0hIxMjTNc1VCqQ14CY 246 | d89fxnZaFQLfCrcxCngCXwSW1byKhi7Gn12a3RoYH/iVoQlIegcGxwfZ2PQYG58dZ7lMjrIp0zWUgyir 247 | y+Uyq1abMtfrdS70M/zOt3qeN4W/OUAW5i5bu+K4ji6rsr+4sLg9PD78jwbGBl7VP9bP8Milb7QvPCNt 248 | bHaMFZRCU0jTZOj3JvbR4535DvRXGgKXsAzm6WV61AiBzyEqgamEpp1Imq7Za7G1g/GJ8U+Ojo0+NTY+ 249 | xk6DdjYyOhI+p5MMDN1glorg0m5mE9VUWX2r3lyvG2fXs0W5Un4f5KWA3MEI31E7sai/FE2xVpZXGuiL 250 | j03PTj87Oz/LZufOMjM3w6Zmpli9VmeGYzBJkZCB9WOB6RFTGNr+Z8DAdozt2B9Emw2Jj8/IukiEwOeA 251 | jRONwMCzPSqTzHQyfTAzOdMzNT71TXTCxkmmJqbY7PQsm5uaY6l4iqHkZpgHMkOBxEcCWygLdUtnQTVg 252 | +/v7t+Xw8JAFteBfBUFQ9h2/jCDuLIFRUkI+LZ1K35gYmfgC5v9vNHWTGZpxKxjgdFVnfskPpxWKroQZ 253 | +LTAmD+wG40bZ2LC9/3jHYa2Z/9WpVKh2w6Lw0gn4DZGQZQCU0BiXmfIRXlraWFJnpya/PuUNYjJmcmQ 254 | 8anxcI+zXJDDHVb5Qp4rMLYxU22VuSWU0yily5VKuLf6FM+WgtIXykF5H4HhdJrABOQLz8QaHx3Xs5ns 255 | u1VVvaTICjuJLMmsKBXDEnmzvnlHgQ8OD87ERFAKGCoUhm3zWsTHRKVcqeG9L7x8JoTA5xClwCG2reOt 256 | rWQiuT89Pf2Z6RmUhUdl4Nz8HJuZnWHrsfWbZ1PdQWDDRYB6LgKTDkf5YRDeguP//VpQkyqlCl3QcHxh 257 | QKcA8cLLCDHvMBcWFxqJZOI3srnsqwHL5XLNk1XQP3Q8PZfOMdMy70vgzeomq1VqrOyUP1Qr1yrIyAH+ 258 | Rgh8Am5jFEQucBM6vrkJYaXF+cUfja3FQmnT8TRLrafocsDwjKG7EdiCwLYbMM/DfM5vzukoo+DxK8ql 259 | 8p8jMBu+i/lch8nb4khiHdJuz8/PZ9Fnf31ucY6trKywxGqCJeIJlt3Ihv11NwIf3jg8ExM0b0bW/apq 260 | UB2tV+tbeF+bLnY5vSwXgRD4HHgCU3a6KFoiUWAicxysLa12LS8vfyNJTPImYgm2kdq4Z4FdF+IG5dbe 261 | 6WdQPv+rWr1WRQm9g9/Xw51onOXpCOzmOdEY2BpLy0t/vrC88Na1tTWWjCXDSwHvReDt3W22u7fL9vb2 262 | 2N7uXrivoF6vPxOUg9/E4xYGQTpnPLIrt4TA53Ba4HCEx2h7kSCYwoA0NdNNJ9KHS0tLfwyB3/SQBH4V 263 | 5P1QrVbT8XiIkt3AG+qnl6HToKmHpmp2MplsLKws/BcI/MZ7FdhxHfSXxVRLZRCFuaZLVQv110fQX3X0 264 | 3SZ+j7JvZP0lBD4HEhjBEArc7DQTWTEaEFiapuoBMst2PBZ/PrGWeMsDCvxMuVz5cWTgQrVcbbiOi7fB 265 | +5x6306E1oH6i27SHovHdiDwbyXXkm++V4GdkhMeZvJpn4Htv7YclD+E/jIr1co2fg8zX/77XwT03kLg 266 | c2gJDBGamTBCwvcniXWjnEnn9iDvFyDy34TAz96HwH8ZAn8UmcRGRmmg7HSQevWo1/FhQetBYNtpdD45 267 | +ugQGfgPk4nEeyDwq+9ZYMf/+pJb+jX0VRV9doDXRX8ZyLz8978oUEabmO4IgW/HzQx8MyjoHsqRgnIa 268 | Fnv5XP4glUplkJF/LZfOvRMCf/U5Ar/adJ23OV75R/xS+aVqtXZQqZQpGPGiBuQ99T6PBfgXgx76wcvn 269 | 8410Or0Ggf8lBP42CPxVdzoODIGfhcDPma7544Ef9FUr1QbYcpzmPAPV86n3umiEwOfSnAPbm3Qshzqs 270 | 2XG04aIEpbyFGTGGYE3TdopS8bCQK8SknPQpCPwTEPivQ+B3QOBvxBJ/M5b7nRD4vaZnfMzxvaulcrVa 271 | qdUaQRBsIlhpdhBm3vZYt4cNrReyFUlsmQYGvt1iQd5HX81ruvb/Yft+sKgV351X8n8FAn8jfvdb8Lvv 272 | xOMPuZ77cS/w+kvV0g7K5oZf8stH/aW1SxwIgc+hXQUmEEx07FEDDrLsDmRuKIpSx7xPgt6LtmEP42dT 273 | yLAbru8i/PxGuRI0glJQtx2PDjDTah2/Xnus28OmtV607WgnpA35bBtK78iK3JAkqSyrclbW5WX8zgj6 274 | as5xnA3XcX1s+0apUmoE5aCCNhM91WYDnRD4XNpT4BbNwKSda0cX3+sINA9sofzbowsSfN8/BPt0cz7P 275 | 8xw4r2MtqKREMPJe83Hn6Hgt+gv9pIESZN1GX+2jfw7BDd9Df3noL9eDzzTOmYD3WlEjBD4XvsDtBC3T 276 | LVCW0JGdj8H3GhZfQ4lIj0dZhOC93iuBW/sLfaQd9RVVNWFb2F+G3vZ9JQQ+h6bAFgTW0WG3bHiBIHKE 277 | wOdApSdG5fA4MK8DBYIoEQKfA+ZEdRRWm+HMkdOBAkGUYD6PQtoSAt8OEhhdJQQWtCWoDoXAd0IILGhr 278 | wpM5hcC3RQgsaGuEwHdGCCxoa4TAd4YnsGEIBNETfgmB74wQWNCuhF9C4DsjSmhBWyMEvjNCYEFbIwS+ 279 | M0JgQZsT/isEvg1cgcWX+GqHLyHw+ZDAlm5thhfgHX2FV9EKBBETRiMqaPxrqgVVCMyDrgsVAgvakTAa 280 | jwQWGfg2tATWITB1mU6g8wSCqGkJrBu6mSvkarH1mBD4NCSwCYE1CEzyagJBm0AK08UMmqGZ6UK6tra+ 281 | JgQ+DU/gMAsLBBFzU2DDzBQkCCwy8BmOBdbRaZht6HhE73Uk4Z70oy+r+d1xC+/3Hwfo5jitdTzzdep3 282 | Ow1aBzoMjKQCgTUILObAZ+AJzJuPtCf0j2FgDh+G6xH4Hv9i2FZRVajNu2TpaAPhx7eEf0N/e+trdQq0 283 | 3PSkud7hOuELpVO49mi3VF01VU0N15d+I2wP+6H19/TY/twUmDJwQWRgHp07B6aYxTMEp6VZuq7qdj6X 284 | r2ykNraT8cT+eiy+txZL7cbi6b1MKrul5OWKLuuOqTbzkkYzq/A1eK/drpCHNCPEMyy8ruiGUlSCXCa3 285 | mYwnd+Pr8YP19fXd1fXVvfXE+k4+k6+rkuobKmRX0UdHfdZ8Hd7rtxekcGsOnBFzYD4tgel+jhTZzY3b 286 | xmAh6VHFv4qh6EW5aGYz2frS0tLhzNRMdWpiKt4/0N/f29f3peGB4T8bH524OjU5PTc3P6+trq1uZrPZ 287 | TcjuIDaaAU2vd/SabUtrGbHEyK5Yd1UvFArltfjawdzC3Pbk5KQyODw42TvYe61vsO9PhweHX5gcnxyY 288 | nZ1NLi0ulVLJ1JYsyR5eKvyPslvbrzO4ReB8RgjMgwRGoYUMTEM6uopo5y8sp4YgLmpFPSNlvNXY6uH4 289 | +Lg/OjZ6ZWZm5l+PT4x/7/Xu62+8eu3Kq/q7+56AxM8Ojw69p3+s/yOjk6PPz8zNJOKx+LYiKQGVnjoi 290 | OXzNdv6ibYPlpM+bkSTJTG2ktmYWZg76R/vXr3Vd+51r16/9RHdf9zdd7b36mus911812Df45PjI+NdC 291 | 4vdPjE58fGZ2ZmR5ZTnI5XIVZOLQjmY/Hr9DW37Rf5YJgVEvZbIQOCYEPkMzA5ubiqJ0xEalOZymavpG 292 | ZiOYnZttDAwOxF+6/NI/jyfiX4nsysbGxlhXTxdDULOBnn42MjjCRsZG2ODEIBufGmeTU5P/1+zM7F+s 293 | r65Xi/liFStMtVpzvdtt3bE8VCVgnXVN0ZSiVLRjsdjB2PiYf733+v9/pefKd16/fp11d3eznv4edq3v 294 | Guvq7WJD/UMM4jJUI2x6YpohQ38z1vs/LCwvSPlsvo4KxAwHBOrLNv6i/0OBMb8TAt+GUGDtpsCImrYj 295 | HFiaWcjEsupSVvJJXgTmRG9v73e/8OUXWGw9xjY2Nu4o8NjkGJtfmGfLS8tfs7yw/N9WF1c9zBO38JoW 296 | ggUJrvk+R+91DAUSb7keHjQpv/l+rcGEdrjR/B7yqghgf3FpsTE8PFzo6ur6xWu9154gYa93nS/w1BQe 297 | Z6bZwuLCTy2tLG1A4rKpmiYI3/vRr9/9Ea6/EPjOnBW4tUHbh5simYYqqfbSwlJjaHBoPJPJfNvc3Bz7 298 | 0gtfumuB5+bn2ML8AltZWHl1bCX2bzFHlFFS72GO6FNmP0p4Z5bhIqCAJbCuVNpruqLrcl524+vx3amZ 299 | qUZPX89MX1/f3+vu6WbX+66Hwt6LwCijGbLwj63H1ou0c+tWgdsPIfBdcFpgDPxtCX2AJpV+qWRqb3Bw 300 | UAXvx3yQYd57dwJPDrLhsWE2MTHBUqkUwxyYBaXgUi6f+0fI5qMrKytb6Y30rlJUXDr8YuOLDsLQXu7W 301 | AMJbrnDMu09uvg4GDPxP2Zb2kiuyohULRTeRSOxiwGkMDg3mIeonr16/+s0QmHX33r/Ay6vL1FefwODn 302 | qIrq3GndokYIfBe0BFZbc2B0XLuhq5YBnRDUUml2dvYG5n2/iaB9amFhgaGkZFRCY+PeUeD+0X62Elth 303 | NE/e2t46Xv/NrU0WT8a/dXxi/L9OTU+lSOTMRmYH8+MAGdA6noTSfBEy85bvXmgeZw/BSwIMEZT5gaEW 304 | VTuXyVXpcNDs/Ozh0PCQ3NXd9SdXrl75ARL1Wtc1dj8C06A1MTnBUIKzxeVFtra+9vp4It5flIslkqNd 305 | tztVXELgc+gEgU14RMeNkCH3IGju6rWr3/PylZfZS5dfYvT44ksvhhmY5BwfG+cK3DXQxWzXPr3+lyrV 306 | CltPrIcBPj4+/v2TE5O/Oz01vbwwt+Cj1NxOp9LbhXyhUizKdlGRTQULBK/htg0Bw1MlwpNDaBkpW7dA 307 | 63FJDKAqnVBhYxQIz53SVbyOLCsmqggvk85sk7TLy8sH45PjtaGRoZVr3deev3zt8o9gPZ6mdbkfgcdH 308 | x9n48DhbW11j8XicpdPpkFwux6SC9M/w3uhfzRUC3zvcxijoGIEV3YzFYo3+gf7PISO9ARKzFpdfvkx7 309 | lxnNh0dGRsIAPy1w92A3g0Fn1v+kwARlrcmxyb8BAX55emz6C9OT06vI+tbi4uLWWmx1N5lK7qRzha1M 310 | Qa4WCkpJkTVXlWGmamCCDllV07QAPdewzPiZpRR1V5aUklwoVnKZ7DYy/G48vr63tLx0ODM7s4WBwxwY 311 | GFjs6e35PJb7/8E6vfvKtSvsyvUrTXHvQ+CRgREWW4uxRCzBPMdj5VKZBX4QUvJK9Pj1GJjWkPspC3P7 312 | PWqEwHfBWYFpr297QflLlVUP88HD693Xf7UV0CehTEwiQwKGsvOBBJ4ab5ae0+PTX4mM/t2Yg/5T8KmR 313 | 0ZGXx8ZG56enJ/KzczPmzPyCP7e4VFtaWdtdjcUP12OJQwhzEAdreL66Fr+xFosfLCyv7s7OztcwEPiT 314 | k5P66MjoxsjwyDgGoy9gWX8Ly/qTJC0en26tD+a79y1wb1cvW1xYpG3LqtUqK/kl+hC7WyiVSpSFr0Hg 315 | AEASft9HiRD4LrgpMGrUUOD2A//RmUcVzFHrCPif5gncgn5GwU/HR/sfXGA2MT7BhkeGGQRmEO5rwHcO 316 | DPT/8ODgwM+AfzMwOPA7/X39n+nr6f8c3u9PCDwPwfM/HRgY/GMMKr+L7//9YO/gv+jt7v1xLON7u3u6 317 | 39HT3fNMuC7dZ9fjfgSmtpeuvMQWZhdCSYMgOCNuC/pZQSp8FhP8ErB5/R41tCdaCHwOnSJwPp+vzszM 318 | +AjW//vq1aagPK5eucpefvllcIV1XekKJcac8qEIDFlDhvF8aHiIDeFxGI/d17vZlZeuXAJPnOHKFXbt 319 | GqqBPvxd/zDr7+0PK4Te3l7W29PbFPYhCNw70MteuPoCm1+cZ9vb22xvb4/t7Ozclt3dXYZJ/KfQtyVD 320 | Nxxev0eNEPgu6AiBkSIwXytPT00Hw4PDHx4fGWc8RoZG2PLCMksmkiEbiRTDfJPNzs+yl7peYqqunln/ 321 | hyFwTxfK15ev8YG8NLA8SoHpPS5fu8zmlubOrN+d8G3/M67tli3dEgLfI9zGKOgEgWkOrMmaNzM9s7M4 322 | t/jL+WyepVNplkllbiG+Fme1au3MOlLmXVpbYuVK+czPOlXgK91X2OWuy+zFyy+Gx3ln5mfCdafMu7uz 323 | y3a2kWXxeDv29/aZYzmXsf1rEFiU0PcItzEKOkVgLKO1srRyuLq8+t+xYb8CG5aZhnkMsjRzbCcsD0+v 324 | Y61WYwf7B2faiU4TuBvl8uWrl9nkzCSbW55jM7MzDH0UzmlRErNSpcSCShCuc6VSYZVyk3K5fEzYVqm8 325 | 2XbsmOd6NfQtScLt+ygRAt8FHVFCq5ipaYaOrLs3NzO3IBWk99DeVQpagvaoOq4Tzut460iZd3Nzk/uz 326 | ThKYjnvTmWd0uIwGLD/w6WwyZpoms2yLoZdYuVpmXtljW1tb4c9c3w375ujQUYjne8zxnA+XgpKHQS8g 327 | UXj9HjVC4LugEwSms5SwjLosy/7CwkJ9eXn5X+fz+afyuXx4UoKiKGFA307S0wLXN+sUwOzg4CB8HovH 328 | 2PjEeFsKfOXqlVBcOlllbHwsXE86LGRZqEBsk9mWHYp7UmC/7IcC+47PdFtnmq4x34LsbsDKdpl+9xnT 329 | MS9j8Kvjb2z8nN/vESMEvgs6QmBApzIqqqJvpDf2pmemY+Pj4397ZnKGTU5MsvX4OitKRVav1bnreFpg 330 | 1VDZwtoC0y09LLvp7KSp6Sk2Oj7KJsaQiek0RJI4AoFJ2PAss5dfYl968Uvh/HZxcTEslXVDD4WljBty 331 | nsCuzwzHCP/Ot48EdsrMdd2fRZldRnauonebX5w+jxoh8F1AAqOj2l5gysJ00j2W047H4wfzc/N/MT8z 332 | /9bZmVmWSCaYXJTvWmDDMlhsI8YSGwmW3cgyuSCzeCxOlxkyzLFZbCXG5qbn2MTIBBsdGQ1lfVQCd3V1 333 | MTrrKjwl9PKL4YC0sLgQXjU1NTMVZlyasx5nXZrzP4DAJaf0/bVyLVstV7fxGrT3Gd3K6e82gLb3LQKv 334 | CYHP4LkeXeB9q8CQpR2hDWqrtqZIip+IJXYXZhc+Nzs9+/Z4Mn5fAm9kNxjt0S5kC0zKSUzOyyFqUWWp 335 | eIqtLK2E5xFT6drbB+GOGOjvC4W+H4HpdynLUtv1a9fZl1/6Ml1wzxbnFxnWhWlFLZyvIkuGJ1zYth1W 336 | CQjkprQPIrAT/J/VoLpWD+qHruE6hoou5fRz24BYtA3bVFXVzGQg8IoQ+AwdJbCqhzu06JI7iFaOr8f3 337 | 5+bm/iSRSnwTCby1GV5ldOmI43WkHVXnCZzPNB9bFPPFMDOjX8ISnW4EQJmRWF5eYqNjo6yPZB7oZ9ev 338 | XGeXv3z5DC99+SV2+fLl8MQSErf3ei+bmZphdBUVneq4vLjMZqZnmCZBWqsUzlMtrZllSUaSlLLugwpM 339 | c2DP9n6kHJRjyOY3HNPxDIWu8tK5/dw2CIHPp5MEbkGBh0DXkK0CyLW3srbSJRWk76VApz3SdJ0v1ovW 340 | LcxktmOHAd1a57sR+Jg8ZJaLDPPvY+iEENrxtQCpl5YW2dzsXCgmMT01HWbShRnITsw1IVkX5xaZUlSa 341 | WdV0WOChpIW4lgo5FQipHvEQBdZt/Q2oQj9aLpcV0CB56W6WvH5tO4TA50MCax0mMBHu4IDEyLx+IpFo 342 | pJKpFWTkn02n069PJ9NsbXktLH9XVlfonN9bjg/fq8D09yfJS3kmyVIos6zITbG1JrImh8djPcsLMyo9 343 | ErZphzJiGsCw/AyDUCjxsbwPWWA6ndJzvHfbrv0ZZN5tcGjrtkOZ93Rfti2IRUsIfGcc16/Lmrkpd5jA 344 | xFEmprtYWLl0bg8Cu6lU6vmNxMZ7kutJlognmnuokUEftsDE6fbWz4rFYihiKOeRlCQslvmYRyVwpVah 345 | kzm+EvP+nw6CYAYlcyNwgy30k6Up/H5sV7C4ho7yQaWdWEJgPo7n14sdKjCBgA9vWk47ZBRJqW8kN27E 346 | Y/EZCPzzEPjNLYHpFMPWOlPgP6YCP+n4zvcjA3/WC7xyJag0kIUr6BsTmZdufs/tw3ZFCHwXdLrAFJRH 347 | 0O38NWQZR8pLB5mNjIfS+s9j67EfVzX1DaWgebYWzYkLxQJbT68/NgKjZH8Kcf59juP8juu5mVKp1PA9 348 | f8dE9KM/zJP9RM87BSHwXUACy7q5iXkGtxM7DcrEJsWsrJbzhfxhaiOl5vK5/5nOpH9sLbb2xtW1VboH 349 | FktkE4+DwK9F+3uRfT/peV6KxC35pRuu5YYfp6Iq6vH9tjoRIfBdAIFrsm5B4OZI3elQlqHgBXSGgiHL 350 | cg3yNjbSG2oylfz8emL9p5MbyXdC4Cc6VWD87B14/kHbtZ/3fT+LuW4j8IIDZGMf62xqcudKe5JbBG6e 351 | yLHAi+Eo4DZGAQQuP04Cn4RkRkBDY91UVKVeKBRuYCR3UpnUWDwT/20I/EMQ+O0katsLbFhvQfv78P1v 352 | oEweBLZX8hqBHxx6lueh6jBQRT0W4ragsbglcLaQraOCmuPFcBRwG6PA83xP160tErhVRtPjY4XWTMf4 353 | orKyLBWlg6yU3UVpnYHAL0Le38ilcz8GYb8dvL5NBH49BP6rEPZHbdv+BOa3L2AOn3V99wBZ94blWluG 354 | Zbg0PCHjaq31PLPuHQx9mJtumKasqmY+l9+EwBO8GI4CbmMUeI5HB2J2FFlBR8ncjux4lCbIwuH3EEjD 355 | cxvP61jvA7kg032gVSknjUPmPyhkCv8CfAB8OwT+Ooj5zGlJH7LArzFl8614/GvgRyDwL0Hcz0LcMdd1 356 | NWTbA9BwHXefymRLs0xN0egG8DrdkP/kOh6v82MA+okGXksuyga2yzZK6B5eDEcBtzEKIHAGAbOPQDBl 357 | RdYpCMLjhY8hFOwnQYCEn04ImRxDM2rIZPuQeb9YKFZBTipI4yi7/wJi/lfwS+AnwQ/mpNzfAn8Fz78e 358 | fDV4/RGvhsBPQ+CnIe1TkPM1eHw9eC3e4414v+cQmO8G34/l+QeWbn0IMv4q+D08v2Kb9ixQXNvd9lyv 359 | gdK5AWG3MP/1kYos2kFnyCFGeDYVZx0fK2ha1xTYzKaz28ury1/kxXAUcBujAIEyi9H+BoLKAo+1wLcF 360 | Iz0EJpl1lKE2KIE6OMCgdgPZegdU8dwtysUsWABDKMWvF4qFPwOfO+IP8sX8p/GzT0PKT9ma/d/x+Dnw 361 | v6DdF0E35rKTIAFRNWTgwLXcLXAIaRvIuIeY8m3h52VTN2lQoeWjW+pSmUwfcnZ22R9naFqnq6YsyzZ9 362 | WsbS8tLv8mI4CriNUYA51QsImgYClAQ2X5ECH0Hrjn7Q0Q9hua1pkIdKueanFwQQugbJN8EuBDvAIw18 363 | DQI/b+D7QzzuQ9R9yHngmm7DMZBFDbsBYQm6kGAfjztgE9Qga4Ds65qaSR/5SQMIDaIk7StP2NOQwBoE 364 | LoYCH0Dgf86L4SjgNkZBUA0+jeKMAtBRUUa/kgU+SbMfWn1BMoXP6Wym8Iwmyo6ngYSYnJr2EQ593zyk 365 | pdOZYoYJ6G8Jeq0QyqxhdhXCnobkJYnpg96yG9ndpYWl9/NiOAq4jVFQ3ax+TLe0Q4RZ0MzA/M4U3IT6 366 | 6BzCDEql79Fj8zkGgdbv8F5XcBPaR0ECo99MKS+VkvGkuTS/9E5eDEcBtzEKIPCP6pZaNjD3QmIwFUVH 367 | 51EHCgRRoRiyItMxfFOWNKsgFbdisbVFZODX8WI4CriNUeAF3nsM21g3TOtQpWNumobOEwiiRDEUTaFM 368 | bEoQOFeQ9lbXVj5HtzzixXAUcBujwHDcrzUd7/OmZTcMurBHUy3qQLq4gd+5AsGjJiyfDTo3IV+Q7FQ6 369 | fbi0vPRP6APKeTEcBdzGKDDd8hOmU/oly3YOLNOkwycoo4XAgihpClwsFs2CVKjEE3FrcWnxGwA3hqOA 370 | 2xgFEJjZXvB9rusqpmHs07yDdrYIgQVR0ToSIkmSDYEPFhcXr0LeJ4XAHCzbZbbrfq3jOF8wDKMB6BRD 371 | lNH8zhUIHjUqXcOMR2RgL43yeW5u7mdaNxTkxXAUcBujAGVz6/rSnwJboGboukUXNzSzsEBwcSjNK5HM 372 | 8Nz8olxPJpLplZWVNwFG8GI4CriNUXAkL/GtYBI0AJ2DSudGo1MFgotDVZVW9nVy2VxjfW39dwBrwYvh 373 | KOA2RgFcbfEM+LfgBihDYJTRsqmgU1sn/8syOlkgeIgoxFF8HWEqRcWUilItmUyWYquxb4+txVgLXgxH 374 | AbcxCjDnPcm7wBIEbhi6YSkaOhOdSiNiuGPrVOcLBA8KSuXjs68A7UCl0tnL5/ONldjKZyDtE0LgO0A3 375 | Qj/B067r/gok3jdMg07cD8sZIbDgUXFCYFNX9HDuK0nSTiKZMCDwO2IxiHsCXgxHAbcxCur1+jH08SPV 376 | avUbHMcZ1nW9YRmWbWiGBXktysQksRBZ8DAgcSmWTspLyJLs53K5xvLK8idi65D2FLwYjgJuYxTQJ7mf 377 | BBJfCoLgJyFwgFJ6F9mYbrVDAoc3BhcCCx4GJzNvS2BVVi26b9l6fH11cWnxa4TAdwF90v1pKpXK61FK 378 | /x5lYUgcYD4cdnCrs1uZmLIyb+MIBLfjZCV3Wt5isVjfSG9srcZWP0C3/6Wb8p+GF8NRwG2MAsh6BpLY 379 | 9/2/CoFnaYcWCK9tPZI4vJ0LIQQW3Cskrt7MvMcCE3JR9rO5bGNldeWTPHFb8GI4CriNUXA6+xJUSpdK 380 | pUsQ+Mcgr4GvQ7rFi67qNB9u7upv3kPr5jE8zsYSCI45ihMljB+q4ijzhvJaRbnoF6RCA4IOLywufG08 381 | EWe3gxfDUcBtjAL6qJHTeJ7HHMehw0rPQNxfNhVzCxn4gA4t0cUO2BAnEQILzqcVJ4pqFklgtZl5MRd2 382 | SV7IubG8vPwdS8tLjMrn28GL4SjgNkYBJOWCzNtEN18HgX/bUI0DtO+ieLY0TbOPMvCtEguRBac5GRth 383 | rDTv+oJKzsbPnSN5VYj7fpL3PHgxHAXcxig4FvV26EA13wCBn6edWiQxQCZunql1AiGw4Cwn5VXlVual 384 | n7mFYqGRSCV8iPkTp0W9HbwYjgJuYxRwpT1JU2C6GfnXIev+D1ULJd4JL3igTByW1MfZ+OwGFLyyackL 385 | wrtMqqqNstmRJCmUF/Pen6UL9Xmy8uDFcBRwG6OAK+1JjgRWZZVJsvxmWTM+bWA+bAH8zG59dk1zI5HI 386 | JDRdWXK08XgbVfD4Em731g0hEAth1lVv7m2W5VIobyKhQcifTCQTl4TADwBX2pO0MnAosMKKmvmXdNX8 387 | D2jb1HSzoZumdzQvDjeUTBsplFhk5FckTYHDOFCoXFZVi45eIOsSVZrzQtokZPwAXaCP50wI/ABwpT3J 388 | WYGZoZqvReX8C3lFzkpqoaHpWh1ltanrGolsKaHIzbJJlvGcCEfl1gY+ghcAgvbn9HYMzweg7QxxVZlu 389 | ih/OdXUM6oYSniLpoO0gk880YsnY1eW15b9NMgqBHwJcaU/CF5hhmzHZMt4HXbsLMiTWNLqCyTUoG0Pk 390 | 5ic9KBiFsWFDoTl7rXnBIWh/bsp7tD2b25i2NZ12S3NdigFkX1OX9UqxUGxsZDd2VhIr/2VxbfG5lbWV 391 | UEYh8EOAK+1JbiuwznQ6Zlxyn5OK0m9iXkMbs6Hr+haysWMaho0ROMzINEduikwb+3iefAQnMwvakBPz 392 | 2ha0PQFtW5pChajh4G3jb/yiXLyRSqUamUxmZjW++o8h77NLsSUmBH6IcKU9yR0E1hyH+SWPYVR+TaFQ 393 | +GHwRVmSd1RFJZHruhbOjZvQBRHIys2NT/PkFvR9ayQXtC/Nee1JaJ9HuIPqeJCm7St7RaV4SKdFQs4i 394 | JP73mXTmXRCYkbxC4IcMV9qT3J3Azc/HLRTeIuWlj0gFaZA+RBsbk0rrXcjs07Fj2tmFudExTXlvKa0F 395 | bQqduKMq2G504cHR9jNUw9TV8Px4muNW8DuNolRsQFgvvh7/H6trq9/nuM7T2UyWCYEfEVxpT3JvAjMI 396 | zCDwN+P5z4Mr9MFUckFuUFZGebUFoX3Mj+zWDi+1+XGeNHqHI/gRre8F0dHaFuH2oHkthA33KGN70f4N 397 | F9+XDcXYV4pKI5/LN7LpbHojsfGHyXjyB2Mrsb+0FltjtmMzIfAjhCvtSe5P4Nb3by9kw0+6/2+FXGFB 398 | ykmbKLEbKKsaNFojEOqQOEAgeCi3CfpMXIJuJGAKIoV2RhEOthFtGx/bqYJsu0PbDtu8gW3ayKfzXjqZ 399 | 7oK0v5qKp74rvhb/SjxnsdUYEwJfAFxpT/JgAjNsZAaJXwfeBf4h+E8QuTufzacwT6rhdxq0l1Iuyg0a 400 | ydWi2kRWb2iy1hBEA20DGmwJbM9wGxHZjSx91OdiOpV+AaL+SnI9+QOQ9rlELPEqZF+GRyYEvkC40p7k 401 | 4Qh8kmelrPR/oNz6O9h4/yy1kfotbOA/xbxpOJ1OrwH6T8pkM1Y2m3WALbgQqK8JFxjpTFrCdtgAC6lU 402 | qgt8Fhn24xD2w+A7IOpbQ1nXk6G0hBBYIBB0BNxGgUDQGXAbBQJBZ8BtFAgEnQG3USAQdAbcRoFA0Blw 403 | GwUCQWfAbRQIBJ0Bt1EgEHQG3EaBQNAZcBsFAkFnwG0UCASdAbdRIBB0BtxGgUDQGXAbBQJBZ8BtFAgE 404 | nQG3USAQdAbcRoFA0BlwGwUCQWfAbRQIBJ0Bt1EgEHQG3EaBQNAZcBsFAkFnwG0UCASdAbdRIBB0BtxG 405 | gUDQGXAbBQJBZ8BtFAgEnQG3USAQdAbcRoFA0BlwGwUCQWfAbRQIBJ0Bt1EgEHQG3EaBQNAJNNj/BtL3 406 | HmO0pleuAAAAAElFTkSuQmCC 407 | 408 | 409 | --------------------------------------------------------------------------------