diff --git a/Dalamud.Bootstrap/Bootstrapper.cs b/Dalamud.Bootstrap/Bootstrapper.cs index 31511d115..25e8f19c4 100644 --- a/Dalamud.Bootstrap/Bootstrapper.cs +++ b/Dalamud.Bootstrap/Bootstrapper.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.IO; using System.IO.Pipes; using System.Text.RegularExpressions; @@ -18,17 +19,18 @@ namespace Dalamud.Bootstrap m_options = options; } - public static void Test() + public void Launch(string exePath, IDictionary arguments) { - // - } + var options = new GameProcessCreationOptions + { + ImagePath = exePath, + Arguments = arguments, + CreateSuspended = true + }; - public void Launch(string exePath, string? commandLine) - { - commandLine = commandLine ?? ""; + using var process = GameProcess.Create(options); - - //throw new NotImplementedException("TODO"); + // TODO: Inject(process); } /// @@ -62,14 +64,9 @@ namespace Dalamud.Bootstrap using var process = GameProcess.Open(pid); var exePath = process.GetImageFilePath(); - var argument = process.GetGameArguments(); - - - - var encryptedArgument = EncryptArgument(argument.ToString()); diff --git a/Dalamud.Bootstrap/GameProcess.cs b/Dalamud.Bootstrap/GameProcess.cs index 828a5683e..8f5d53955 100644 --- a/Dalamud.Bootstrap/GameProcess.cs +++ b/Dalamud.Bootstrap/GameProcess.cs @@ -4,6 +4,8 @@ using Dalamud.Bootstrap.OS.Windows.Raw; using Dalamud.Bootstrap.SqexArg; using Microsoft.Win32.SafeHandles; using System; +using System.Collections.Generic; +using System.IO; using System.Runtime.InteropServices; using System.Text; @@ -181,6 +183,11 @@ namespace Dalamud.Bootstrap } } + private static uint CreateCommandLineKey() + { + return (uint)(Environment.TickCount & 0xFFFF_0000); + } + public static GameProcess Create(GameProcessCreationOptions options) { unsafe @@ -188,9 +195,17 @@ namespace Dalamud.Bootstrap SECURITY_ATTRIBUTES processAttr, threadAttr; STARTUPINFOW startupInfo = default; PROCESS_INFORMATION processInfo = default; - uint creationFlag; + uint creationFlag = default; - BuildCommandLine(options); + var key = CreateCommandLineKey(); + var commandLine = BuildCommandLine(options.Arguments, key); + var currentDirectory = Path.Combine(Directory.GetParent(Path.GetDirectoryName(options.ImagePath)).FullName, "boot"); // this is fucked + var environments = BuildEnvironments(options.Environments); + + if (options.CreateSuspended) + { + creationFlag |= (uint)PROCESS_CREATION_FLAGS.CREATE_SUSPENDED; + } if (!Kernel32.CreateProcessW( options.ImagePath, @@ -207,10 +222,23 @@ namespace Dalamud.Bootstrap { ProcessException.ThrowLastOsError(); } - } - - throw new NotImplementedException(); + Kernel32.CloseHandle(//////////////////// fucking thread ) + + return new GameProcess(processInfo.hProcess); + } + } + + private static string BuildCommandLine(IDictionary arguments, uint key) + { + var builder = new SqexArgBuilder(arguments); + + return builder.Build(key); + } + + private static byte[] BuildEnvironments(IDictionary? environments) + { + } /// @@ -290,7 +318,6 @@ namespace Dalamud.Bootstrap ReadMemoryExact(address, buffer); } - private IntPtr GetPebAddress() { unsafe @@ -428,34 +455,6 @@ namespace Dalamud.Bootstrap return createdTick & 0xFFFF_0000; } - /// - /// Reads command-line arguments from the game and decrypts them if necessary. - /// - /// - /// Command-line arguments that looks like this: - /// /DEV.TestSID =ABCD /UserPath =C:\Examples - /// - public ArgumentBuilder GetGameArguments() - { - var processArguments = GetProcessArguments(); - - // arg[0] is a path to exe(normally), arg[1] is actual stuff. - if (processArguments.Length < 2) - { - throw new ProcessException($"There's only {processArguments.Length} process arguments. It must have at least 2 arguments."); - } - - // We're interested in argument that contains session id - var argument = processArguments[1]; - - // If it's encrypted, we need to decrypt it first - if (EncryptedArgument.TryParse(argument, out var encryptedArgument)) - { - var key = GetArgumentEncryptionKey(); - argument = encryptedArgument.Decrypt(key); - } - - return argument; - } + public uint Id => Kernel32.GetProcessId(m_handle); } } diff --git a/Dalamud.Bootstrap/GameProcessCreationOptions.cs b/Dalamud.Bootstrap/GameProcessCreationOptions.cs index 7cef746d7..0c9de8eaf 100644 --- a/Dalamud.Bootstrap/GameProcessCreationOptions.cs +++ b/Dalamud.Bootstrap/GameProcessCreationOptions.cs @@ -8,7 +8,7 @@ namespace Dalamud.Bootstrap { public string ImagePath { get; set; } = null!; - public IList? Arguments { get; set; } + public IDictionary Arguments { get; set; } public IDictionary? Environments { get; set; } diff --git a/Dalamud.Bootstrap/SqexArg/ArgumentBuilder.cs b/Dalamud.Bootstrap/SqexArg/SqexArgBuilder.cs similarity index 55% rename from Dalamud.Bootstrap/SqexArg/ArgumentBuilder.cs rename to Dalamud.Bootstrap/SqexArg/SqexArgBuilder.cs index 51f3c36fd..1cb6259a6 100644 --- a/Dalamud.Bootstrap/SqexArg/ArgumentBuilder.cs +++ b/Dalamud.Bootstrap/SqexArg/SqexArgBuilder.cs @@ -3,18 +3,18 @@ using System.Text; namespace Dalamud.Bootstrap.SqexArg { - public sealed class ArgumentBuilder + public sealed class SqexArgBuilder { - private readonly Dictionary m_dict; + private readonly IDictionary m_dict; - public ArgumentBuilder() + public SqexArgBuilder() { m_dict = new Dictionary(); } - public ArgumentBuilder(IEnumerable> collection) + public SqexArgBuilder(IDictionary collection) { - m_dict = new Dictionary(collection); + m_dict = collection; } /// @@ -22,19 +22,21 @@ namespace Dalamud.Bootstrap.SqexArg /// /// /// - public static ArgumentBuilder Parse(string argument) + public static SqexArgBuilder Parse(string argument) { - return new ArgumentBuilder(ArgumentParser.Parse(argument)); + var arguments = new Dictionary(SqexArgumentParser.Parse(argument)); // uhhh + + return new SqexArgBuilder(arguments); } - public ArgumentBuilder Add(string key, string value) + public SqexArgBuilder Add(string key, string value) { m_dict.Add(key, value); return this; } - public ArgumentBuilder Clear() + public SqexArgBuilder Clear() { m_dict.Clear(); @@ -43,9 +45,9 @@ namespace Dalamud.Bootstrap.SqexArg public bool ContainsKey(string key) => m_dict.ContainsKey(key); - public bool ContainsValue(string value) => m_dict.ContainsValue(value); + //public bool ContainsValue(string value) => m_dict.ContainsValue(value); - public ArgumentBuilder Remove(string key) + public SqexArgBuilder Remove(string key) { m_dict.Remove(key); @@ -54,17 +56,7 @@ namespace Dalamud.Bootstrap.SqexArg public bool TryRemove(string key) => m_dict.Remove(key); - private static void Write(StringBuilder buffer, string key, string value) - { - var escapedKey = EscapeValue(key); - var escapedvalue = EscapeValue(value); - // TODO: (from chat) - // This line, the = in your version has a space before it - // If you're sending the arguments in plaintext, game doesn't like the space there - // (But I think it needs to be there in crypted args) - buffer.Append($" /{escapedKey} ={escapedvalue}"); // TODO: thanks SE - } private static string EscapeValue(string value) { @@ -72,16 +64,37 @@ namespace Dalamud.Bootstrap.SqexArg return value.Replace(" ", " "); } - public override string ToString() + private string BuildRawString() { + // This is not exposed because (from chat): + // This line, the = in your version has a space before it + // If you're sending the arguments in plaintext, game doesn't like the space there + // (But I think it needs to be there in crypted args) var buffer = new StringBuilder(300); - + foreach (var kv in m_dict) { - Write(buffer, kv.Key, kv.Value); + WriteKeyValue(buffer, kv.Key, kv.Value); } return buffer.ToString(); } + + private static void WriteKeyValue(StringBuilder buffer, string key, string value) + { + var escapedKey = EscapeValue(key); + var escapedvalue = EscapeValue(value); + + buffer.Append($" /{escapedKey} ={escapedvalue}"); + } + + public string Build(uint key) + { + var plainText = BuildRawString(); + + var enc = new SqexEncryptedArgument(plainText, key); + + return enc.Build(); + } } } diff --git a/Dalamud.Bootstrap/SqexArg/ArgumentParser.cs b/Dalamud.Bootstrap/SqexArg/SqexArgumentParser.cs similarity index 97% rename from Dalamud.Bootstrap/SqexArg/ArgumentParser.cs rename to Dalamud.Bootstrap/SqexArg/SqexArgumentParser.cs index 4246a5f17..a1b59f17a 100644 --- a/Dalamud.Bootstrap/SqexArg/ArgumentParser.cs +++ b/Dalamud.Bootstrap/SqexArg/SqexArgumentParser.cs @@ -6,7 +6,7 @@ using static Pidgin.Parser; namespace Dalamud.Bootstrap.SqexArg { - public static class ArgumentParser + public static class SqexArgumentParser { private static readonly Parser KeyMarkerNoEscape = String(" "); diff --git a/Dalamud.Bootstrap/SqexArg/EncryptedArgument.cs b/Dalamud.Bootstrap/SqexArg/SqexEncryptedArgument.cs similarity index 95% rename from Dalamud.Bootstrap/SqexArg/EncryptedArgument.cs rename to Dalamud.Bootstrap/SqexArg/SqexEncryptedArgument.cs index 9e4bdd1c3..72e0fa5f1 100644 --- a/Dalamud.Bootstrap/SqexArg/EncryptedArgument.cs +++ b/Dalamud.Bootstrap/SqexArg/SqexEncryptedArgument.cs @@ -8,7 +8,7 @@ using Dalamud.Bootstrap.Crypto; namespace Dalamud.Bootstrap.SqexArg { - internal sealed class EncryptedArgument + internal sealed class SqexEncryptedArgument { private static readonly char[] ChecksumTable = { @@ -32,7 +32,7 @@ namespace Dalamud.Bootstrap.SqexArg /// /// A string that is already encrypted and encoded to url-safe variant of base64. /// A checksum that is used to validate the encryption key. - private EncryptedArgument(string encodedData, char checksum) + private SqexEncryptedArgument(string encodedData, char checksum) { Data = encodedData; Checksum = checksum; @@ -43,7 +43,7 @@ namespace Dalamud.Bootstrap.SqexArg /// /// A data that is not encrypted. /// A key that is used to encrypt the data. - public EncryptedArgument(string plainText, uint key) + public SqexEncryptedArgument(string plainText, uint key) { Span keyBytes = stackalloc byte[8]; CreateKey(key, keyBytes); @@ -157,7 +157,7 @@ namespace Dalamud.Bootstrap.SqexArg /// /// An argument that is encrypted and usually starts with //**sqex0003 and ends with **// /// Returns true if successful, false otherwise. - public static bool TryParse(string argument, out EncryptedArgument output) + public static bool TryParse(string argument, out SqexEncryptedArgument output) { if (!Extract(argument, out var data, out var checksum)) { @@ -165,7 +165,7 @@ namespace Dalamud.Bootstrap.SqexArg return false; } - output = new EncryptedArgument(data, checksum); + output = new SqexEncryptedArgument(data, checksum); return true; } @@ -196,7 +196,7 @@ namespace Dalamud.Bootstrap.SqexArg return true; } - public override string ToString() => $"//**sqex0003{Data}{Checksum}**//"; + public string Build() => $"//**sqex0003{Data}{Checksum}**//"; /// /// Formats a key. diff --git a/Dalamud.sln b/Dalamud.sln index 4f213b08c..1baa5ce54 100644 --- a/Dalamud.sln +++ b/Dalamud.sln @@ -1,188 +1,192 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.29215.179 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dalamud", "Dalamud\Dalamud.csproj", "{B92DAB43-2279-4A2C-96E3-D9D5910EDBEA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dalamud.Injector", "Dalamud.Injector\Dalamud.Injector.csproj", "{5B832F73-5F54-4ADC-870F-D0095EF72C9A}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "lib", "lib", "{E9868930-4223-4D57-8F31-84E580E4B24B}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CoreHook", "CoreHook", "{CE78D902-02B5-4C7B-A46A-D44BD2F4C622}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CoreHook", "lib\CoreHook\src\CoreHook\CoreHook.csproj", "{441EE8F0-AD8E-479B-9F68-12D157F080AF}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CoreHook.BinaryInjection", "lib\CoreHook\src\CoreHook.BinaryInjection\CoreHook.BinaryInjection.csproj", "{91CB76FC-8E4B-4B4C-B5AD-D681866A2188}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CoreHook.DependencyModel", "lib\CoreHook\src\CoreHook.DependencyModel\CoreHook.DependencyModel.csproj", "{1155DC7F-22F5-4217-A03C-D0E603C27698}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CoreHook.CoreLoad", "lib\CoreHook\src\CoreHook.CoreLoad\CoreHook.CoreLoad.csproj", "{A1BC1DFD-AAE0-4221-A972-46CEBE4FCBF8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CoreHook.IPC", "lib\CoreHook\src\CoreHook.IPC\CoreHook.IPC.csproj", "{B585D1B1-63D8-454E-B76E-F1E0D550DCE7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CoreHook.Memory", "lib\CoreHook\src\CoreHook.Memory\CoreHook.Memory.csproj", "{ED4FFE13-5F83-42B9-8847-E7C4D7A988E8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dalamud.Bootstrap", "Dalamud.Bootstrap\Dalamud.Bootstrap.csproj", "{19032128-E336-460F-B6E4-EAF6055589E5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dalamud.Testing", "Dalamud.Testing\Dalamud.Testing.csproj", "{0A99A6B3-12E2-4197-A6F3-9211B6D4D824}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Build", "Build\Build.csproj", "{A6BB70E8-7F14-410F-A296-1B4495F6F069}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Debug|x64 = Debug|x64 - Debug|x86 = Debug|x86 - Release|Any CPU = Release|Any CPU - Release|x64 = Release|x64 - Release|x86 = Release|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {B92DAB43-2279-4A2C-96E3-D9D5910EDBEA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B92DAB43-2279-4A2C-96E3-D9D5910EDBEA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B92DAB43-2279-4A2C-96E3-D9D5910EDBEA}.Debug|x64.ActiveCfg = Debug|Any CPU - {B92DAB43-2279-4A2C-96E3-D9D5910EDBEA}.Debug|x64.Build.0 = Debug|Any CPU - {B92DAB43-2279-4A2C-96E3-D9D5910EDBEA}.Debug|x86.ActiveCfg = Debug|Any CPU - {B92DAB43-2279-4A2C-96E3-D9D5910EDBEA}.Debug|x86.Build.0 = Debug|Any CPU - {B92DAB43-2279-4A2C-96E3-D9D5910EDBEA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B92DAB43-2279-4A2C-96E3-D9D5910EDBEA}.Release|Any CPU.Build.0 = Release|Any CPU - {B92DAB43-2279-4A2C-96E3-D9D5910EDBEA}.Release|x64.ActiveCfg = Release|Any CPU - {B92DAB43-2279-4A2C-96E3-D9D5910EDBEA}.Release|x64.Build.0 = Release|Any CPU - {B92DAB43-2279-4A2C-96E3-D9D5910EDBEA}.Release|x86.ActiveCfg = Release|Any CPU - {B92DAB43-2279-4A2C-96E3-D9D5910EDBEA}.Release|x86.Build.0 = Release|Any CPU - {5B832F73-5F54-4ADC-870F-D0095EF72C9A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5B832F73-5F54-4ADC-870F-D0095EF72C9A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5B832F73-5F54-4ADC-870F-D0095EF72C9A}.Debug|x64.ActiveCfg = Debug|Any CPU - {5B832F73-5F54-4ADC-870F-D0095EF72C9A}.Debug|x64.Build.0 = Debug|Any CPU - {5B832F73-5F54-4ADC-870F-D0095EF72C9A}.Debug|x86.ActiveCfg = Debug|Any CPU - {5B832F73-5F54-4ADC-870F-D0095EF72C9A}.Debug|x86.Build.0 = Debug|Any CPU - {5B832F73-5F54-4ADC-870F-D0095EF72C9A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5B832F73-5F54-4ADC-870F-D0095EF72C9A}.Release|Any CPU.Build.0 = Release|Any CPU - {5B832F73-5F54-4ADC-870F-D0095EF72C9A}.Release|x64.ActiveCfg = Release|Any CPU - {5B832F73-5F54-4ADC-870F-D0095EF72C9A}.Release|x64.Build.0 = Release|Any CPU - {5B832F73-5F54-4ADC-870F-D0095EF72C9A}.Release|x86.ActiveCfg = Release|Any CPU - {5B832F73-5F54-4ADC-870F-D0095EF72C9A}.Release|x86.Build.0 = Release|Any CPU - {441EE8F0-AD8E-479B-9F68-12D157F080AF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {441EE8F0-AD8E-479B-9F68-12D157F080AF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {441EE8F0-AD8E-479B-9F68-12D157F080AF}.Debug|x64.ActiveCfg = Debug|Any CPU - {441EE8F0-AD8E-479B-9F68-12D157F080AF}.Debug|x64.Build.0 = Debug|Any CPU - {441EE8F0-AD8E-479B-9F68-12D157F080AF}.Debug|x86.ActiveCfg = Debug|Any CPU - {441EE8F0-AD8E-479B-9F68-12D157F080AF}.Debug|x86.Build.0 = Debug|Any CPU - {441EE8F0-AD8E-479B-9F68-12D157F080AF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {441EE8F0-AD8E-479B-9F68-12D157F080AF}.Release|Any CPU.Build.0 = Release|Any CPU - {441EE8F0-AD8E-479B-9F68-12D157F080AF}.Release|x64.ActiveCfg = Release|Any CPU - {441EE8F0-AD8E-479B-9F68-12D157F080AF}.Release|x64.Build.0 = Release|Any CPU - {441EE8F0-AD8E-479B-9F68-12D157F080AF}.Release|x86.ActiveCfg = Release|Any CPU - {441EE8F0-AD8E-479B-9F68-12D157F080AF}.Release|x86.Build.0 = Release|Any CPU - {91CB76FC-8E4B-4B4C-B5AD-D681866A2188}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {91CB76FC-8E4B-4B4C-B5AD-D681866A2188}.Debug|Any CPU.Build.0 = Debug|Any CPU - {91CB76FC-8E4B-4B4C-B5AD-D681866A2188}.Debug|x64.ActiveCfg = Debug|Any CPU - {91CB76FC-8E4B-4B4C-B5AD-D681866A2188}.Debug|x64.Build.0 = Debug|Any CPU - {91CB76FC-8E4B-4B4C-B5AD-D681866A2188}.Debug|x86.ActiveCfg = Debug|Any CPU - {91CB76FC-8E4B-4B4C-B5AD-D681866A2188}.Debug|x86.Build.0 = Debug|Any CPU - {91CB76FC-8E4B-4B4C-B5AD-D681866A2188}.Release|Any CPU.ActiveCfg = Release|Any CPU - {91CB76FC-8E4B-4B4C-B5AD-D681866A2188}.Release|Any CPU.Build.0 = Release|Any CPU - {91CB76FC-8E4B-4B4C-B5AD-D681866A2188}.Release|x64.ActiveCfg = Release|Any CPU - {91CB76FC-8E4B-4B4C-B5AD-D681866A2188}.Release|x64.Build.0 = Release|Any CPU - {91CB76FC-8E4B-4B4C-B5AD-D681866A2188}.Release|x86.ActiveCfg = Release|Any CPU - {91CB76FC-8E4B-4B4C-B5AD-D681866A2188}.Release|x86.Build.0 = Release|Any CPU - {1155DC7F-22F5-4217-A03C-D0E603C27698}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1155DC7F-22F5-4217-A03C-D0E603C27698}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1155DC7F-22F5-4217-A03C-D0E603C27698}.Debug|x64.ActiveCfg = Debug|Any CPU - {1155DC7F-22F5-4217-A03C-D0E603C27698}.Debug|x64.Build.0 = Debug|Any CPU - {1155DC7F-22F5-4217-A03C-D0E603C27698}.Debug|x86.ActiveCfg = Debug|Any CPU - {1155DC7F-22F5-4217-A03C-D0E603C27698}.Debug|x86.Build.0 = Debug|Any CPU - {1155DC7F-22F5-4217-A03C-D0E603C27698}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1155DC7F-22F5-4217-A03C-D0E603C27698}.Release|Any CPU.Build.0 = Release|Any CPU - {1155DC7F-22F5-4217-A03C-D0E603C27698}.Release|x64.ActiveCfg = Release|Any CPU - {1155DC7F-22F5-4217-A03C-D0E603C27698}.Release|x64.Build.0 = Release|Any CPU - {1155DC7F-22F5-4217-A03C-D0E603C27698}.Release|x86.ActiveCfg = Release|Any CPU - {1155DC7F-22F5-4217-A03C-D0E603C27698}.Release|x86.Build.0 = Release|Any CPU - {A1BC1DFD-AAE0-4221-A972-46CEBE4FCBF8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A1BC1DFD-AAE0-4221-A972-46CEBE4FCBF8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A1BC1DFD-AAE0-4221-A972-46CEBE4FCBF8}.Debug|x64.ActiveCfg = Debug|Any CPU - {A1BC1DFD-AAE0-4221-A972-46CEBE4FCBF8}.Debug|x64.Build.0 = Debug|Any CPU - {A1BC1DFD-AAE0-4221-A972-46CEBE4FCBF8}.Debug|x86.ActiveCfg = Debug|Any CPU - {A1BC1DFD-AAE0-4221-A972-46CEBE4FCBF8}.Debug|x86.Build.0 = Debug|Any CPU - {A1BC1DFD-AAE0-4221-A972-46CEBE4FCBF8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A1BC1DFD-AAE0-4221-A972-46CEBE4FCBF8}.Release|Any CPU.Build.0 = Release|Any CPU - {A1BC1DFD-AAE0-4221-A972-46CEBE4FCBF8}.Release|x64.ActiveCfg = Release|Any CPU - {A1BC1DFD-AAE0-4221-A972-46CEBE4FCBF8}.Release|x64.Build.0 = Release|Any CPU - {A1BC1DFD-AAE0-4221-A972-46CEBE4FCBF8}.Release|x86.ActiveCfg = Release|Any CPU - {A1BC1DFD-AAE0-4221-A972-46CEBE4FCBF8}.Release|x86.Build.0 = Release|Any CPU - {B585D1B1-63D8-454E-B76E-F1E0D550DCE7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B585D1B1-63D8-454E-B76E-F1E0D550DCE7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B585D1B1-63D8-454E-B76E-F1E0D550DCE7}.Debug|x64.ActiveCfg = Debug|Any CPU - {B585D1B1-63D8-454E-B76E-F1E0D550DCE7}.Debug|x64.Build.0 = Debug|Any CPU - {B585D1B1-63D8-454E-B76E-F1E0D550DCE7}.Debug|x86.ActiveCfg = Debug|Any CPU - {B585D1B1-63D8-454E-B76E-F1E0D550DCE7}.Debug|x86.Build.0 = Debug|Any CPU - {B585D1B1-63D8-454E-B76E-F1E0D550DCE7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B585D1B1-63D8-454E-B76E-F1E0D550DCE7}.Release|Any CPU.Build.0 = Release|Any CPU - {B585D1B1-63D8-454E-B76E-F1E0D550DCE7}.Release|x64.ActiveCfg = Release|Any CPU - {B585D1B1-63D8-454E-B76E-F1E0D550DCE7}.Release|x64.Build.0 = Release|Any CPU - {B585D1B1-63D8-454E-B76E-F1E0D550DCE7}.Release|x86.ActiveCfg = Release|Any CPU - {B585D1B1-63D8-454E-B76E-F1E0D550DCE7}.Release|x86.Build.0 = Release|Any CPU - {ED4FFE13-5F83-42B9-8847-E7C4D7A988E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {ED4FFE13-5F83-42B9-8847-E7C4D7A988E8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {ED4FFE13-5F83-42B9-8847-E7C4D7A988E8}.Debug|x64.ActiveCfg = Debug|Any CPU - {ED4FFE13-5F83-42B9-8847-E7C4D7A988E8}.Debug|x64.Build.0 = Debug|Any CPU - {ED4FFE13-5F83-42B9-8847-E7C4D7A988E8}.Debug|x86.ActiveCfg = Debug|Any CPU - {ED4FFE13-5F83-42B9-8847-E7C4D7A988E8}.Debug|x86.Build.0 = Debug|Any CPU - {ED4FFE13-5F83-42B9-8847-E7C4D7A988E8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {ED4FFE13-5F83-42B9-8847-E7C4D7A988E8}.Release|Any CPU.Build.0 = Release|Any CPU - {ED4FFE13-5F83-42B9-8847-E7C4D7A988E8}.Release|x64.ActiveCfg = Release|Any CPU - {ED4FFE13-5F83-42B9-8847-E7C4D7A988E8}.Release|x64.Build.0 = Release|Any CPU - {ED4FFE13-5F83-42B9-8847-E7C4D7A988E8}.Release|x86.ActiveCfg = Release|Any CPU - {ED4FFE13-5F83-42B9-8847-E7C4D7A988E8}.Release|x86.Build.0 = Release|Any CPU - {19032128-E336-460F-B6E4-EAF6055589E5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {19032128-E336-460F-B6E4-EAF6055589E5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {19032128-E336-460F-B6E4-EAF6055589E5}.Debug|x64.ActiveCfg = Debug|Any CPU - {19032128-E336-460F-B6E4-EAF6055589E5}.Debug|x64.Build.0 = Debug|Any CPU - {19032128-E336-460F-B6E4-EAF6055589E5}.Debug|x86.ActiveCfg = Debug|Any CPU - {19032128-E336-460F-B6E4-EAF6055589E5}.Debug|x86.Build.0 = Debug|Any CPU - {19032128-E336-460F-B6E4-EAF6055589E5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {19032128-E336-460F-B6E4-EAF6055589E5}.Release|Any CPU.Build.0 = Release|Any CPU - {19032128-E336-460F-B6E4-EAF6055589E5}.Release|x64.ActiveCfg = Release|Any CPU - {19032128-E336-460F-B6E4-EAF6055589E5}.Release|x64.Build.0 = Release|Any CPU - {19032128-E336-460F-B6E4-EAF6055589E5}.Release|x86.ActiveCfg = Release|Any CPU - {19032128-E336-460F-B6E4-EAF6055589E5}.Release|x86.Build.0 = Release|Any CPU - {0A99A6B3-12E2-4197-A6F3-9211B6D4D824}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0A99A6B3-12E2-4197-A6F3-9211B6D4D824}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0A99A6B3-12E2-4197-A6F3-9211B6D4D824}.Debug|x64.ActiveCfg = Debug|Any CPU - {0A99A6B3-12E2-4197-A6F3-9211B6D4D824}.Debug|x64.Build.0 = Debug|Any CPU - {0A99A6B3-12E2-4197-A6F3-9211B6D4D824}.Debug|x86.ActiveCfg = Debug|Any CPU - {0A99A6B3-12E2-4197-A6F3-9211B6D4D824}.Debug|x86.Build.0 = Debug|Any CPU - {0A99A6B3-12E2-4197-A6F3-9211B6D4D824}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0A99A6B3-12E2-4197-A6F3-9211B6D4D824}.Release|Any CPU.Build.0 = Release|Any CPU - {0A99A6B3-12E2-4197-A6F3-9211B6D4D824}.Release|x64.ActiveCfg = Release|Any CPU - {0A99A6B3-12E2-4197-A6F3-9211B6D4D824}.Release|x64.Build.0 = Release|Any CPU - {0A99A6B3-12E2-4197-A6F3-9211B6D4D824}.Release|x86.ActiveCfg = Release|Any CPU - {0A99A6B3-12E2-4197-A6F3-9211B6D4D824}.Release|x86.Build.0 = Release|Any CPU - {A6BB70E8-7F14-410F-A296-1B4495F6F069}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A6BB70E8-7F14-410F-A296-1B4495F6F069}.Debug|x64.ActiveCfg = Debug|Any CPU - {A6BB70E8-7F14-410F-A296-1B4495F6F069}.Debug|x64.Build.0 = Debug|Any CPU - {A6BB70E8-7F14-410F-A296-1B4495F6F069}.Debug|x86.ActiveCfg = Debug|Any CPU - {A6BB70E8-7F14-410F-A296-1B4495F6F069}.Debug|x86.Build.0 = Debug|Any CPU - {A6BB70E8-7F14-410F-A296-1B4495F6F069}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A6BB70E8-7F14-410F-A296-1B4495F6F069}.Release|x64.ActiveCfg = Release|Any CPU - {A6BB70E8-7F14-410F-A296-1B4495F6F069}.Release|x64.Build.0 = Release|Any CPU - {A6BB70E8-7F14-410F-A296-1B4495F6F069}.Release|x86.ActiveCfg = Release|Any CPU - {A6BB70E8-7F14-410F-A296-1B4495F6F069}.Release|x86.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {CE78D902-02B5-4C7B-A46A-D44BD2F4C622} = {E9868930-4223-4D57-8F31-84E580E4B24B} - {441EE8F0-AD8E-479B-9F68-12D157F080AF} = {CE78D902-02B5-4C7B-A46A-D44BD2F4C622} - {91CB76FC-8E4B-4B4C-B5AD-D681866A2188} = {CE78D902-02B5-4C7B-A46A-D44BD2F4C622} - {1155DC7F-22F5-4217-A03C-D0E603C27698} = {CE78D902-02B5-4C7B-A46A-D44BD2F4C622} - {A1BC1DFD-AAE0-4221-A972-46CEBE4FCBF8} = {CE78D902-02B5-4C7B-A46A-D44BD2F4C622} - {B585D1B1-63D8-454E-B76E-F1E0D550DCE7} = {CE78D902-02B5-4C7B-A46A-D44BD2F4C622} - {ED4FFE13-5F83-42B9-8847-E7C4D7A988E8} = {CE78D902-02B5-4C7B-A46A-D44BD2F4C622} - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {79B65AC9-C940-410E-AB61-7EA7E12C7599} - EndGlobalSection -EndGlobal + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29215.179 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dalamud", "Dalamud\Dalamud.csproj", "{B92DAB43-2279-4A2C-96E3-D9D5910EDBEA}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dalamud.Injector", "Dalamud.Injector\Dalamud.Injector.csproj", "{5B832F73-5F54-4ADC-870F-D0095EF72C9A}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "lib", "lib", "{E9868930-4223-4D57-8F31-84E580E4B24B}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CoreHook", "CoreHook", "{CE78D902-02B5-4C7B-A46A-D44BD2F4C622}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CoreHook", "lib\CoreHook\src\CoreHook\CoreHook.csproj", "{441EE8F0-AD8E-479B-9F68-12D157F080AF}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CoreHook.BinaryInjection", "lib\CoreHook\src\CoreHook.BinaryInjection\CoreHook.BinaryInjection.csproj", "{91CB76FC-8E4B-4B4C-B5AD-D681866A2188}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CoreHook.DependencyModel", "lib\CoreHook\src\CoreHook.DependencyModel\CoreHook.DependencyModel.csproj", "{1155DC7F-22F5-4217-A03C-D0E603C27698}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CoreHook.CoreLoad", "lib\CoreHook\src\CoreHook.CoreLoad\CoreHook.CoreLoad.csproj", "{A1BC1DFD-AAE0-4221-A972-46CEBE4FCBF8}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CoreHook.IPC", "lib\CoreHook\src\CoreHook.IPC\CoreHook.IPC.csproj", "{B585D1B1-63D8-454E-B76E-F1E0D550DCE7}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CoreHook.Memory", "lib\CoreHook\src\CoreHook.Memory\CoreHook.Memory.csproj", "{ED4FFE13-5F83-42B9-8847-E7C4D7A988E8}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dalamud.Bootstrap", "Dalamud.Bootstrap\Dalamud.Bootstrap.csproj", "{19032128-E336-460F-B6E4-EAF6055589E5}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dalamud.Testing", "Dalamud.Testing\Dalamud.Testing.csproj", "{0A99A6B3-12E2-4197-A6F3-9211B6D4D824}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Build", "Build\Build.csproj", "{A6BB70E8-7F14-410F-A296-1B4495F6F069}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Bootstrap", "Bootstrap", "{9EBA28F0-EAF8-4E5B-9FD6-D4758B07D040}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {B92DAB43-2279-4A2C-96E3-D9D5910EDBEA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B92DAB43-2279-4A2C-96E3-D9D5910EDBEA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B92DAB43-2279-4A2C-96E3-D9D5910EDBEA}.Debug|x64.ActiveCfg = Debug|Any CPU + {B92DAB43-2279-4A2C-96E3-D9D5910EDBEA}.Debug|x64.Build.0 = Debug|Any CPU + {B92DAB43-2279-4A2C-96E3-D9D5910EDBEA}.Debug|x86.ActiveCfg = Debug|Any CPU + {B92DAB43-2279-4A2C-96E3-D9D5910EDBEA}.Debug|x86.Build.0 = Debug|Any CPU + {B92DAB43-2279-4A2C-96E3-D9D5910EDBEA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B92DAB43-2279-4A2C-96E3-D9D5910EDBEA}.Release|Any CPU.Build.0 = Release|Any CPU + {B92DAB43-2279-4A2C-96E3-D9D5910EDBEA}.Release|x64.ActiveCfg = Release|Any CPU + {B92DAB43-2279-4A2C-96E3-D9D5910EDBEA}.Release|x64.Build.0 = Release|Any CPU + {B92DAB43-2279-4A2C-96E3-D9D5910EDBEA}.Release|x86.ActiveCfg = Release|Any CPU + {B92DAB43-2279-4A2C-96E3-D9D5910EDBEA}.Release|x86.Build.0 = Release|Any CPU + {5B832F73-5F54-4ADC-870F-D0095EF72C9A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5B832F73-5F54-4ADC-870F-D0095EF72C9A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5B832F73-5F54-4ADC-870F-D0095EF72C9A}.Debug|x64.ActiveCfg = Debug|Any CPU + {5B832F73-5F54-4ADC-870F-D0095EF72C9A}.Debug|x64.Build.0 = Debug|Any CPU + {5B832F73-5F54-4ADC-870F-D0095EF72C9A}.Debug|x86.ActiveCfg = Debug|Any CPU + {5B832F73-5F54-4ADC-870F-D0095EF72C9A}.Debug|x86.Build.0 = Debug|Any CPU + {5B832F73-5F54-4ADC-870F-D0095EF72C9A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5B832F73-5F54-4ADC-870F-D0095EF72C9A}.Release|Any CPU.Build.0 = Release|Any CPU + {5B832F73-5F54-4ADC-870F-D0095EF72C9A}.Release|x64.ActiveCfg = Release|Any CPU + {5B832F73-5F54-4ADC-870F-D0095EF72C9A}.Release|x64.Build.0 = Release|Any CPU + {5B832F73-5F54-4ADC-870F-D0095EF72C9A}.Release|x86.ActiveCfg = Release|Any CPU + {5B832F73-5F54-4ADC-870F-D0095EF72C9A}.Release|x86.Build.0 = Release|Any CPU + {441EE8F0-AD8E-479B-9F68-12D157F080AF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {441EE8F0-AD8E-479B-9F68-12D157F080AF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {441EE8F0-AD8E-479B-9F68-12D157F080AF}.Debug|x64.ActiveCfg = Debug|Any CPU + {441EE8F0-AD8E-479B-9F68-12D157F080AF}.Debug|x64.Build.0 = Debug|Any CPU + {441EE8F0-AD8E-479B-9F68-12D157F080AF}.Debug|x86.ActiveCfg = Debug|Any CPU + {441EE8F0-AD8E-479B-9F68-12D157F080AF}.Debug|x86.Build.0 = Debug|Any CPU + {441EE8F0-AD8E-479B-9F68-12D157F080AF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {441EE8F0-AD8E-479B-9F68-12D157F080AF}.Release|Any CPU.Build.0 = Release|Any CPU + {441EE8F0-AD8E-479B-9F68-12D157F080AF}.Release|x64.ActiveCfg = Release|Any CPU + {441EE8F0-AD8E-479B-9F68-12D157F080AF}.Release|x64.Build.0 = Release|Any CPU + {441EE8F0-AD8E-479B-9F68-12D157F080AF}.Release|x86.ActiveCfg = Release|Any CPU + {441EE8F0-AD8E-479B-9F68-12D157F080AF}.Release|x86.Build.0 = Release|Any CPU + {91CB76FC-8E4B-4B4C-B5AD-D681866A2188}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {91CB76FC-8E4B-4B4C-B5AD-D681866A2188}.Debug|Any CPU.Build.0 = Debug|Any CPU + {91CB76FC-8E4B-4B4C-B5AD-D681866A2188}.Debug|x64.ActiveCfg = Debug|Any CPU + {91CB76FC-8E4B-4B4C-B5AD-D681866A2188}.Debug|x64.Build.0 = Debug|Any CPU + {91CB76FC-8E4B-4B4C-B5AD-D681866A2188}.Debug|x86.ActiveCfg = Debug|Any CPU + {91CB76FC-8E4B-4B4C-B5AD-D681866A2188}.Debug|x86.Build.0 = Debug|Any CPU + {91CB76FC-8E4B-4B4C-B5AD-D681866A2188}.Release|Any CPU.ActiveCfg = Release|Any CPU + {91CB76FC-8E4B-4B4C-B5AD-D681866A2188}.Release|Any CPU.Build.0 = Release|Any CPU + {91CB76FC-8E4B-4B4C-B5AD-D681866A2188}.Release|x64.ActiveCfg = Release|Any CPU + {91CB76FC-8E4B-4B4C-B5AD-D681866A2188}.Release|x64.Build.0 = Release|Any CPU + {91CB76FC-8E4B-4B4C-B5AD-D681866A2188}.Release|x86.ActiveCfg = Release|Any CPU + {91CB76FC-8E4B-4B4C-B5AD-D681866A2188}.Release|x86.Build.0 = Release|Any CPU + {1155DC7F-22F5-4217-A03C-D0E603C27698}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1155DC7F-22F5-4217-A03C-D0E603C27698}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1155DC7F-22F5-4217-A03C-D0E603C27698}.Debug|x64.ActiveCfg = Debug|Any CPU + {1155DC7F-22F5-4217-A03C-D0E603C27698}.Debug|x64.Build.0 = Debug|Any CPU + {1155DC7F-22F5-4217-A03C-D0E603C27698}.Debug|x86.ActiveCfg = Debug|Any CPU + {1155DC7F-22F5-4217-A03C-D0E603C27698}.Debug|x86.Build.0 = Debug|Any CPU + {1155DC7F-22F5-4217-A03C-D0E603C27698}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1155DC7F-22F5-4217-A03C-D0E603C27698}.Release|Any CPU.Build.0 = Release|Any CPU + {1155DC7F-22F5-4217-A03C-D0E603C27698}.Release|x64.ActiveCfg = Release|Any CPU + {1155DC7F-22F5-4217-A03C-D0E603C27698}.Release|x64.Build.0 = Release|Any CPU + {1155DC7F-22F5-4217-A03C-D0E603C27698}.Release|x86.ActiveCfg = Release|Any CPU + {1155DC7F-22F5-4217-A03C-D0E603C27698}.Release|x86.Build.0 = Release|Any CPU + {A1BC1DFD-AAE0-4221-A972-46CEBE4FCBF8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A1BC1DFD-AAE0-4221-A972-46CEBE4FCBF8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A1BC1DFD-AAE0-4221-A972-46CEBE4FCBF8}.Debug|x64.ActiveCfg = Debug|Any CPU + {A1BC1DFD-AAE0-4221-A972-46CEBE4FCBF8}.Debug|x64.Build.0 = Debug|Any CPU + {A1BC1DFD-AAE0-4221-A972-46CEBE4FCBF8}.Debug|x86.ActiveCfg = Debug|Any CPU + {A1BC1DFD-AAE0-4221-A972-46CEBE4FCBF8}.Debug|x86.Build.0 = Debug|Any CPU + {A1BC1DFD-AAE0-4221-A972-46CEBE4FCBF8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A1BC1DFD-AAE0-4221-A972-46CEBE4FCBF8}.Release|Any CPU.Build.0 = Release|Any CPU + {A1BC1DFD-AAE0-4221-A972-46CEBE4FCBF8}.Release|x64.ActiveCfg = Release|Any CPU + {A1BC1DFD-AAE0-4221-A972-46CEBE4FCBF8}.Release|x64.Build.0 = Release|Any CPU + {A1BC1DFD-AAE0-4221-A972-46CEBE4FCBF8}.Release|x86.ActiveCfg = Release|Any CPU + {A1BC1DFD-AAE0-4221-A972-46CEBE4FCBF8}.Release|x86.Build.0 = Release|Any CPU + {B585D1B1-63D8-454E-B76E-F1E0D550DCE7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B585D1B1-63D8-454E-B76E-F1E0D550DCE7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B585D1B1-63D8-454E-B76E-F1E0D550DCE7}.Debug|x64.ActiveCfg = Debug|Any CPU + {B585D1B1-63D8-454E-B76E-F1E0D550DCE7}.Debug|x64.Build.0 = Debug|Any CPU + {B585D1B1-63D8-454E-B76E-F1E0D550DCE7}.Debug|x86.ActiveCfg = Debug|Any CPU + {B585D1B1-63D8-454E-B76E-F1E0D550DCE7}.Debug|x86.Build.0 = Debug|Any CPU + {B585D1B1-63D8-454E-B76E-F1E0D550DCE7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B585D1B1-63D8-454E-B76E-F1E0D550DCE7}.Release|Any CPU.Build.0 = Release|Any CPU + {B585D1B1-63D8-454E-B76E-F1E0D550DCE7}.Release|x64.ActiveCfg = Release|Any CPU + {B585D1B1-63D8-454E-B76E-F1E0D550DCE7}.Release|x64.Build.0 = Release|Any CPU + {B585D1B1-63D8-454E-B76E-F1E0D550DCE7}.Release|x86.ActiveCfg = Release|Any CPU + {B585D1B1-63D8-454E-B76E-F1E0D550DCE7}.Release|x86.Build.0 = Release|Any CPU + {ED4FFE13-5F83-42B9-8847-E7C4D7A988E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {ED4FFE13-5F83-42B9-8847-E7C4D7A988E8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {ED4FFE13-5F83-42B9-8847-E7C4D7A988E8}.Debug|x64.ActiveCfg = Debug|Any CPU + {ED4FFE13-5F83-42B9-8847-E7C4D7A988E8}.Debug|x64.Build.0 = Debug|Any CPU + {ED4FFE13-5F83-42B9-8847-E7C4D7A988E8}.Debug|x86.ActiveCfg = Debug|Any CPU + {ED4FFE13-5F83-42B9-8847-E7C4D7A988E8}.Debug|x86.Build.0 = Debug|Any CPU + {ED4FFE13-5F83-42B9-8847-E7C4D7A988E8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {ED4FFE13-5F83-42B9-8847-E7C4D7A988E8}.Release|Any CPU.Build.0 = Release|Any CPU + {ED4FFE13-5F83-42B9-8847-E7C4D7A988E8}.Release|x64.ActiveCfg = Release|Any CPU + {ED4FFE13-5F83-42B9-8847-E7C4D7A988E8}.Release|x64.Build.0 = Release|Any CPU + {ED4FFE13-5F83-42B9-8847-E7C4D7A988E8}.Release|x86.ActiveCfg = Release|Any CPU + {ED4FFE13-5F83-42B9-8847-E7C4D7A988E8}.Release|x86.Build.0 = Release|Any CPU + {19032128-E336-460F-B6E4-EAF6055589E5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {19032128-E336-460F-B6E4-EAF6055589E5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {19032128-E336-460F-B6E4-EAF6055589E5}.Debug|x64.ActiveCfg = Debug|Any CPU + {19032128-E336-460F-B6E4-EAF6055589E5}.Debug|x64.Build.0 = Debug|Any CPU + {19032128-E336-460F-B6E4-EAF6055589E5}.Debug|x86.ActiveCfg = Debug|Any CPU + {19032128-E336-460F-B6E4-EAF6055589E5}.Debug|x86.Build.0 = Debug|Any CPU + {19032128-E336-460F-B6E4-EAF6055589E5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {19032128-E336-460F-B6E4-EAF6055589E5}.Release|Any CPU.Build.0 = Release|Any CPU + {19032128-E336-460F-B6E4-EAF6055589E5}.Release|x64.ActiveCfg = Release|Any CPU + {19032128-E336-460F-B6E4-EAF6055589E5}.Release|x64.Build.0 = Release|Any CPU + {19032128-E336-460F-B6E4-EAF6055589E5}.Release|x86.ActiveCfg = Release|Any CPU + {19032128-E336-460F-B6E4-EAF6055589E5}.Release|x86.Build.0 = Release|Any CPU + {0A99A6B3-12E2-4197-A6F3-9211B6D4D824}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0A99A6B3-12E2-4197-A6F3-9211B6D4D824}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0A99A6B3-12E2-4197-A6F3-9211B6D4D824}.Debug|x64.ActiveCfg = Debug|Any CPU + {0A99A6B3-12E2-4197-A6F3-9211B6D4D824}.Debug|x64.Build.0 = Debug|Any CPU + {0A99A6B3-12E2-4197-A6F3-9211B6D4D824}.Debug|x86.ActiveCfg = Debug|Any CPU + {0A99A6B3-12E2-4197-A6F3-9211B6D4D824}.Debug|x86.Build.0 = Debug|Any CPU + {0A99A6B3-12E2-4197-A6F3-9211B6D4D824}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0A99A6B3-12E2-4197-A6F3-9211B6D4D824}.Release|Any CPU.Build.0 = Release|Any CPU + {0A99A6B3-12E2-4197-A6F3-9211B6D4D824}.Release|x64.ActiveCfg = Release|Any CPU + {0A99A6B3-12E2-4197-A6F3-9211B6D4D824}.Release|x64.Build.0 = Release|Any CPU + {0A99A6B3-12E2-4197-A6F3-9211B6D4D824}.Release|x86.ActiveCfg = Release|Any CPU + {0A99A6B3-12E2-4197-A6F3-9211B6D4D824}.Release|x86.Build.0 = Release|Any CPU + {A6BB70E8-7F14-410F-A296-1B4495F6F069}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A6BB70E8-7F14-410F-A296-1B4495F6F069}.Debug|x64.ActiveCfg = Debug|Any CPU + {A6BB70E8-7F14-410F-A296-1B4495F6F069}.Debug|x64.Build.0 = Debug|Any CPU + {A6BB70E8-7F14-410F-A296-1B4495F6F069}.Debug|x86.ActiveCfg = Debug|Any CPU + {A6BB70E8-7F14-410F-A296-1B4495F6F069}.Debug|x86.Build.0 = Debug|Any CPU + {A6BB70E8-7F14-410F-A296-1B4495F6F069}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A6BB70E8-7F14-410F-A296-1B4495F6F069}.Release|x64.ActiveCfg = Release|Any CPU + {A6BB70E8-7F14-410F-A296-1B4495F6F069}.Release|x64.Build.0 = Release|Any CPU + {A6BB70E8-7F14-410F-A296-1B4495F6F069}.Release|x86.ActiveCfg = Release|Any CPU + {A6BB70E8-7F14-410F-A296-1B4495F6F069}.Release|x86.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {5B832F73-5F54-4ADC-870F-D0095EF72C9A} = {9EBA28F0-EAF8-4E5B-9FD6-D4758B07D040} + {CE78D902-02B5-4C7B-A46A-D44BD2F4C622} = {E9868930-4223-4D57-8F31-84E580E4B24B} + {441EE8F0-AD8E-479B-9F68-12D157F080AF} = {CE78D902-02B5-4C7B-A46A-D44BD2F4C622} + {91CB76FC-8E4B-4B4C-B5AD-D681866A2188} = {CE78D902-02B5-4C7B-A46A-D44BD2F4C622} + {1155DC7F-22F5-4217-A03C-D0E603C27698} = {CE78D902-02B5-4C7B-A46A-D44BD2F4C622} + {A1BC1DFD-AAE0-4221-A972-46CEBE4FCBF8} = {CE78D902-02B5-4C7B-A46A-D44BD2F4C622} + {B585D1B1-63D8-454E-B76E-F1E0D550DCE7} = {CE78D902-02B5-4C7B-A46A-D44BD2F4C622} + {ED4FFE13-5F83-42B9-8847-E7C4D7A988E8} = {CE78D902-02B5-4C7B-A46A-D44BD2F4C622} + {19032128-E336-460F-B6E4-EAF6055589E5} = {9EBA28F0-EAF8-4E5B-9FD6-D4758B07D040} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {79B65AC9-C940-410E-AB61-7EA7E12C7599} + EndGlobalSection +EndGlobal