# HG changeset patch # User StephaneLenclud # Date 1443123545 -7200 # Node ID e7c8c2b500bdc74c767e2aa0dd44894604373903 # Parent e22bf44c4300e23696df645615e0687c354d27d9 Add PowerManager C++/CLI project. Monitor Power On/Off notifications working. Moving to .NET 4.6 diff -r e22bf44c4300 -r e7c8c2b500bd .editorconfig --- a/.editorconfig Thu Sep 24 14:35:50 2015 +0200 +++ b/.editorconfig Thu Sep 24 21:39:05 2015 +0200 @@ -6,7 +6,7 @@ end_of_line = crlf ; 4-column tab indentation -[*.cs] +[*.*] indent_style = space indent_size = 4 diff -r e22bf44c4300 -r e7c8c2b500bd Client/App.config --- a/Client/App.config Thu Sep 24 14:35:50 2015 +0200 +++ b/Client/App.config Thu Sep 24 21:39:05 2015 +0200 @@ -1,6 +1,6 @@ - + diff -r e22bf44c4300 -r e7c8c2b500bd Client/Properties/Resources.Designer.cs --- a/Client/Properties/Resources.Designer.cs Thu Sep 24 14:35:50 2015 +0200 +++ b/Client/Properties/Resources.Designer.cs Thu Sep 24 21:39:05 2015 +0200 @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:4.0.30319.18444 +// Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. diff -r e22bf44c4300 -r e7c8c2b500bd Client/Properties/Settings.Designer.cs --- a/Client/Properties/Settings.Designer.cs Thu Sep 24 14:35:50 2015 +0200 +++ b/Client/Properties/Settings.Designer.cs Thu Sep 24 21:39:05 2015 +0200 @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:4.0.30319.18444 +// Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. @@ -12,7 +12,7 @@ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")] internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); diff -r e22bf44c4300 -r e7c8c2b500bd Client/SharpDisplayClient.csproj --- a/Client/SharpDisplayClient.csproj Thu Sep 24 14:35:50 2015 +0200 +++ b/Client/SharpDisplayClient.csproj Thu Sep 24 21:39:05 2015 +0200 @@ -1,5 +1,5 @@  - + Debug @@ -9,7 +9,7 @@ Properties SharpDisplayClient SharpDisplayClient - v4.5 + v4.6 512 publish\ diff -r e22bf44c4300 -r e7c8c2b500bd Interface/SharpDisplayInterface.csproj --- a/Interface/SharpDisplayInterface.csproj Thu Sep 24 14:35:50 2015 +0200 +++ b/Interface/SharpDisplayInterface.csproj Thu Sep 24 21:39:05 2015 +0200 @@ -1,5 +1,5 @@  - + Debug @@ -9,7 +9,7 @@ Properties SharpDisplayInterface SharpDisplayInterface - v4.5 + v4.6 512 diff -r e22bf44c4300 -r e7c8c2b500bd PowerManager/AssemblyInfo.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PowerManager/AssemblyInfo.cpp Thu Sep 24 21:39:05 2015 +0200 @@ -0,0 +1,38 @@ +#include "stdafx.h" + +using namespace System; +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; +using namespace System::Security::Permissions; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute(L"PowerManager")]; +[assembly:AssemblyDescriptionAttribute(L"")]; +[assembly:AssemblyConfigurationAttribute(L"")]; +[assembly:AssemblyCompanyAttribute(L"")]; +[assembly:AssemblyProductAttribute(L"PowerManager")]; +[assembly:AssemblyCopyrightAttribute(L"Copyright (c) 2015")]; +[assembly:AssemblyTrademarkAttribute(L"")]; +[assembly:AssemblyCultureAttribute(L"")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + +[assembly:CLSCompliantAttribute(true)]; \ No newline at end of file diff -r e22bf44c4300 -r e7c8c2b500bd PowerManager/PowerManager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PowerManager/PowerManager.cpp Thu Sep 24 21:39:05 2015 +0200 @@ -0,0 +1,142 @@ +// This is the main DLL file. + +#include "stdafx.h" + +#include "PowerManager.h" + +using namespace System::Diagnostics; + +namespace PowerManager +{ + /// + PowerSettingNotifier::PowerSettingNotifier(IntPtr aHandle, Boolean aService) + { + Construct(aHandle, aService); + } + + /// + PowerSettingNotifier::PowerSettingNotifier(IntPtr aHandle) + { + //By default we assume we run as a Window + Construct(aHandle, false); + } + + /// + void PowerSettingNotifier::Construct(IntPtr aHandle, Boolean aService) + { + iHandle = aHandle; + iIsService = aService; + iMonitorPowerOnDelegate = nullptr; + iMonitorPowerOffDelegate = nullptr; + iMonitorPowerObserverCount = 0; + } + + /// + Boolean PowerSettingNotifier::RegisterPowerSettingNotification(IntPtr aHandle, Boolean aService) + { + HANDLE handle = aHandle.ToPointer(); + HPOWERNOTIFY res=::RegisterPowerSettingNotification(handle, &GUID_MONITOR_POWER_ON, (aService?DEVICE_NOTIFY_SERVICE_HANDLE:DEVICE_NOTIFY_WINDOW_HANDLE)); + return (res != NULL); + }; + + /// + Boolean PowerSettingNotifier::RegisterPowerSettingNotification(IntPtr aHandle) + { + return RegisterPowerSettingNotification(aHandle,false); + }; + + /// + void PowerSettingNotifier::WndProc(Message% aMessage) + { + POWERBROADCAST_SETTING* setting; + + if (aMessage.Msg == WM_POWERBROADCAST && aMessage.WParam.ToInt32() == PBT_POWERSETTINGCHANGE) + { + setting=(POWERBROADCAST_SETTING*)aMessage.LParam.ToPointer(); + if (setting->PowerSetting == GUID_MONITOR_POWER_ON) + { + if (setting->Data[0] == 0x0) + { + Debug::WriteLine(L"POWERBROADCAST: Monitor Power Off"); + OnMonitorPowerOff(); + } + else if (setting->Data[0] == 0x1) + { + Debug::WriteLine(L"POWERBROADCAST: Monitor Power On"); + OnMonitorPowerOn(); + } + } + } + + + } + + /// + void PowerSettingNotifier::OnMonitorPowerOn::add(PowerManagerDelegate^ d) + { + iMonitorPowerOnDelegate += d; + iMonitorPowerObserverCount++; + //iMonitorPowerOnDelegate->GetInvocationList()->GetLength(0) + if (iMonitorPowerObserverCount == 1) + { + //TODO: register + RegisterPowerSettingNotification(iHandle,iIsService); + } + + } + + /// + void PowerSettingNotifier::OnMonitorPowerOn::remove(PowerManagerDelegate^ d) + { + iMonitorPowerOnDelegate -= d; + iMonitorPowerObserverCount--; + if (iMonitorPowerObserverCount==0) + { + //TODO: unregister + } + } + + // + void PowerSettingNotifier::OnMonitorPowerOn::raise() + { + if (iMonitorPowerOnDelegate != nullptr) + { + iMonitorPowerOnDelegate->Invoke(); + } + } + + /// + void PowerSettingNotifier::OnMonitorPowerOff::add(PowerManagerDelegate^ d) + { + iMonitorPowerOffDelegate += d; + iMonitorPowerObserverCount++; + if (iMonitorPowerObserverCount == 1) + { + //TODO: register + RegisterPowerSettingNotification(iHandle, iIsService); + } + } + + /// + void PowerSettingNotifier::OnMonitorPowerOff::remove(PowerManagerDelegate^ d) + { + iMonitorPowerOffDelegate -= d; + iMonitorPowerObserverCount--; + if (iMonitorPowerObserverCount == 0) + { + //TODO: unregister + } + } + + // + void PowerSettingNotifier::OnMonitorPowerOff::raise() + { + if (iMonitorPowerOffDelegate != nullptr) + { + iMonitorPowerOffDelegate->Invoke(); + } + } + + + +} \ No newline at end of file diff -r e22bf44c4300 -r e7c8c2b500bd PowerManager/PowerManager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PowerManager/PowerManager.h Thu Sep 24 21:39:05 2015 +0200 @@ -0,0 +1,55 @@ +// PowerManager.h + +#pragma once + +using namespace System; +using namespace System::Windows::Forms; + +namespace PowerManager +{ + public delegate void PowerManagerDelegate(); + + public ref class PowerSettingNotifier + { + public: + PowerSettingNotifier(IntPtr aHandle, Boolean aService); + PowerSettingNotifier(IntPtr aHandle); + // + void WndProc(Message% aMessage); + + event PowerManagerDelegate^ OnMonitorPowerOn + { + void add(PowerManagerDelegate^ d); + void remove(PowerManagerDelegate^ d); + private: + void raise(); + } + + event PowerManagerDelegate^ OnMonitorPowerOff + { + void add(PowerManagerDelegate^ d); + void remove(PowerManagerDelegate^ d); + private: + void raise(); + } + + private: + void Construct(IntPtr aHandle, Boolean aService); + // + Boolean RegisterPowerSettingNotification(IntPtr aHandle, Boolean aService); + Boolean RegisterPowerSettingNotification(IntPtr aHandle); + + private: + PowerManagerDelegate^ iMonitorPowerOnDelegate; + PowerManagerDelegate^ iMonitorPowerOffDelegate; + + + private: + /// Window or Service handle + IntPtr iHandle; + /// Specify whether we run as Window or a Service + Boolean iIsService; + /// + int iMonitorPowerObserverCount; + }; +} diff -r e22bf44c4300 -r e7c8c2b500bd PowerManager/PowerManager.vcxproj --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PowerManager/PowerManager.vcxproj Thu Sep 24 21:39:05 2015 +0200 @@ -0,0 +1,166 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + {C174F23D-3055-49BC-B6B0-563011AF624D} + v4.6 + ManagedCProj + PowerManager + 8.1 + + + + DynamicLibrary + true + v140 + true + Unicode + + + DynamicLibrary + false + v140 + true + Unicode + + + DynamicLibrary + true + v140 + true + Unicode + + + DynamicLibrary + false + v140 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + + + true + + + false + + + false + + + + Level3 + Disabled + WIN32;_DEBUG;%(PreprocessorDefinitions) + Use + + + true + user32.lib + + + + + Level3 + Disabled + _DEBUG;%(PreprocessorDefinitions) + Use + + + true + + + + + + Level3 + WIN32;NDEBUG;%(PreprocessorDefinitions) + Use + + + true + user32.lib + + + + + Level3 + NDEBUG;%(PreprocessorDefinitions) + Use + + + true + + + + + + + + + + + + + + + + + + + Create + Create + Create + Create + + + + + + + + + + + + + + + \ No newline at end of file diff -r e22bf44c4300 -r e7c8c2b500bd PowerManager/PowerManager.vcxproj.filters --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PowerManager/PowerManager.vcxproj.filters Thu Sep 24 21:39:05 2015 +0200 @@ -0,0 +1,52 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Header Files + + + Header Files + + + Header Files + + + + + Source Files + + + Source Files + + + Source Files + + + + + + + + Resource Files + + + + + Resource Files + + + \ No newline at end of file diff -r e22bf44c4300 -r e7c8c2b500bd PowerManager/ReadMe.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PowerManager/ReadMe.txt Thu Sep 24 21:39:05 2015 +0200 @@ -0,0 +1,38 @@ +======================================================================== + DYNAMIC LINK LIBRARY : PowerManager Project Overview +======================================================================== + +AppWizard has created this PowerManager DLL for you. + +This file contains a summary of what you will find in each of the files that +make up your PowerManager application. + +PowerManager.vcxproj + This is the main project file for VC++ projects generated using an Application Wizard. + It contains information about the version of Visual C++ that generated the file, and + information about the platforms, configurations, and project features selected with the + Application Wizard. + +PowerManager.vcxproj.filters + This is the filters file for VC++ projects generated using an Application Wizard. + It contains information about the association between the files in your project + and the filters. This association is used in the IDE to show grouping of files with + similar extensions under a specific node (for e.g. ".cpp" files are associated with the + "Source Files" filter). + +PowerManager.cpp + This is the main DLL source file. + +PowerManager.h + This file contains a class declaration. + +AssemblyInfo.cpp + Contains custom attributes for modifying assembly metadata. + +///////////////////////////////////////////////////////////////////////////// +Other notes: + +AppWizard uses "TODO:" to indicate parts of the source code you +should add to or customize. + +///////////////////////////////////////////////////////////////////////////// diff -r e22bf44c4300 -r e7c8c2b500bd PowerManager/Stdafx.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PowerManager/Stdafx.cpp Thu Sep 24 21:39:05 2015 +0200 @@ -0,0 +1,5 @@ +// stdafx.cpp : source file that includes just the standard includes +// PowerManager.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" diff -r e22bf44c4300 -r e7c8c2b500bd PowerManager/Stdafx.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PowerManager/Stdafx.h Thu Sep 24 21:39:05 2015 +0200 @@ -0,0 +1,8 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, +// but are changed infrequently + +#pragma once + +#include + diff -r e22bf44c4300 -r e7c8c2b500bd PowerManager/app.ico Binary file PowerManager/app.ico has changed diff -r e22bf44c4300 -r e7c8c2b500bd PowerManager/app.rc Binary file PowerManager/app.rc has changed diff -r e22bf44c4300 -r e7c8c2b500bd PowerManager/resource.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PowerManager/resource.h Thu Sep 24 21:39:05 2015 +0200 @@ -0,0 +1,3 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by app.rc diff -r e22bf44c4300 -r e7c8c2b500bd Server/App.config --- a/Server/App.config Thu Sep 24 14:35:50 2015 +0200 +++ b/Server/App.config Thu Sep 24 21:39:05 2015 +0200 @@ -6,7 +6,7 @@ - + diff -r e22bf44c4300 -r e7c8c2b500bd Server/MainForm.Hid.cs --- a/Server/MainForm.Hid.cs Thu Sep 24 14:35:50 2015 +0200 +++ b/Server/MainForm.Hid.cs Thu Sep 24 21:39:05 2015 +0200 @@ -31,6 +31,9 @@ /// private Hid.Handler iHidHandler; + /// + private PowerManager.PowerSettingNotifier iPowerSettingNotifier; + /// /// Register HID devices so that we receive corresponding WM_INPUT messages. /// @@ -91,8 +94,24 @@ Debug.WriteLine("Failed to register raw input devices: " + Marshal.GetLastWin32Error().ToString()); } iHidHandler.OnHidEvent += HandleHidEventThreadSafe; + + //TODO: Move this some place else + iPowerSettingNotifier = new PowerManager.PowerSettingNotifier(Handle); + iPowerSettingNotifier.OnMonitorPowerOn += MonitorPowerOn; + iPowerSettingNotifier.OnMonitorPowerOff += MonitorPowerOff; } + static void MonitorPowerOn() + { + Debug.WriteLine("ON"); + } + + static void MonitorPowerOff() + { + Debug.WriteLine("OFF"); + } + + /// /// Here we receive HID events from our HID library. /// @@ -411,6 +430,13 @@ iHidHandler.ProcessInput(ref message); break; } + + //Hook in our power manager + if (iPowerSettingNotifier!=null) + { + iPowerSettingNotifier.WndProc(ref message); + } + //Is that needed? Check the docs. base.WndProc(ref message); } diff -r e22bf44c4300 -r e7c8c2b500bd Server/Properties/Resources.Designer.cs --- a/Server/Properties/Resources.Designer.cs Thu Sep 24 14:35:50 2015 +0200 +++ b/Server/Properties/Resources.Designer.cs Thu Sep 24 21:39:05 2015 +0200 @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:4.0.30319.34209 +// Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. diff -r e22bf44c4300 -r e7c8c2b500bd Server/Properties/Settings.Designer.cs --- a/Server/Properties/Settings.Designer.cs Thu Sep 24 14:35:50 2015 +0200 +++ b/Server/Properties/Settings.Designer.cs Thu Sep 24 21:39:05 2015 +0200 @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:4.0.30319.18408 +// Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. @@ -12,7 +12,7 @@ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "12.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")] internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); diff -r e22bf44c4300 -r e7c8c2b500bd Server/SharpDisplayManager.csproj --- a/Server/SharpDisplayManager.csproj Thu Sep 24 14:35:50 2015 +0200 +++ b/Server/SharpDisplayManager.csproj Thu Sep 24 21:39:05 2015 +0200 @@ -1,5 +1,5 @@  - + Debug @@ -9,7 +9,7 @@ Properties SharpDisplayManager SharpDisplayManager - v4.5 + v4.6 512 true @@ -33,7 +33,7 @@ index.htm false 0 - 0.5.4.0 + 0.5.5.0 false true true @@ -216,6 +216,10 @@ {88eee0dc-abbc-4738-bad6-7e08cf7f50f9} SharpDisplayInterface + + {c174f23d-3055-49bc-b6b0-563011af624d} + PowerManager + diff -r e22bf44c4300 -r e7c8c2b500bd SharpDisplayManager.sln --- a/SharpDisplayManager.sln Thu Sep 24 14:35:50 2015 +0200 +++ b/SharpDisplayManager.sln Thu Sep 24 21:39:05 2015 +0200 @@ -1,44 +1,72 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2013 +# Visual Studio 14 +VisualStudioVersion = 14.0.23107.0 +MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharpDisplayManager", "Server\SharpDisplayManager.csproj", "{1DA8C1B3-18C5-4E74-BE4E-0B0E15FBAF49}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharpDisplayClient", "Client\SharpDisplayClient.csproj", "{7EE64074-8CDB-4448-B40C-81B75D6B31CD}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharpDisplayInterface", "Interface\SharpDisplayInterface.csproj", "{88EEE0DC-ABBC-4738-BAD6-7E08CF7F50F9}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PowerManager", "PowerManager\PowerManager.vcxproj", "{C174F23D-3055-49BC-B6B0-563011AF624D}" +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 {1DA8C1B3-18C5-4E74-BE4E-0B0E15FBAF49}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1DA8C1B3-18C5-4E74-BE4E-0B0E15FBAF49}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1DA8C1B3-18C5-4E74-BE4E-0B0E15FBAF49}.Debug|x64.ActiveCfg = Debug|Any CPU + {1DA8C1B3-18C5-4E74-BE4E-0B0E15FBAF49}.Debug|x64.Build.0 = Debug|Any CPU {1DA8C1B3-18C5-4E74-BE4E-0B0E15FBAF49}.Debug|x86.ActiveCfg = Debug|x86 {1DA8C1B3-18C5-4E74-BE4E-0B0E15FBAF49}.Debug|x86.Build.0 = Debug|x86 {1DA8C1B3-18C5-4E74-BE4E-0B0E15FBAF49}.Release|Any CPU.ActiveCfg = Release|Any CPU {1DA8C1B3-18C5-4E74-BE4E-0B0E15FBAF49}.Release|Any CPU.Build.0 = Release|Any CPU + {1DA8C1B3-18C5-4E74-BE4E-0B0E15FBAF49}.Release|x64.ActiveCfg = Release|Any CPU + {1DA8C1B3-18C5-4E74-BE4E-0B0E15FBAF49}.Release|x64.Build.0 = Release|Any CPU {1DA8C1B3-18C5-4E74-BE4E-0B0E15FBAF49}.Release|x86.ActiveCfg = Release|x86 {1DA8C1B3-18C5-4E74-BE4E-0B0E15FBAF49}.Release|x86.Build.0 = Release|x86 {7EE64074-8CDB-4448-B40C-81B75D6B31CD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7EE64074-8CDB-4448-B40C-81B75D6B31CD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7EE64074-8CDB-4448-B40C-81B75D6B31CD}.Debug|x64.ActiveCfg = Debug|Any CPU + {7EE64074-8CDB-4448-B40C-81B75D6B31CD}.Debug|x64.Build.0 = Debug|Any CPU {7EE64074-8CDB-4448-B40C-81B75D6B31CD}.Debug|x86.ActiveCfg = Debug|x86 {7EE64074-8CDB-4448-B40C-81B75D6B31CD}.Debug|x86.Build.0 = Debug|x86 {7EE64074-8CDB-4448-B40C-81B75D6B31CD}.Release|Any CPU.ActiveCfg = Release|Any CPU {7EE64074-8CDB-4448-B40C-81B75D6B31CD}.Release|Any CPU.Build.0 = Release|Any CPU + {7EE64074-8CDB-4448-B40C-81B75D6B31CD}.Release|x64.ActiveCfg = Release|Any CPU + {7EE64074-8CDB-4448-B40C-81B75D6B31CD}.Release|x64.Build.0 = Release|Any CPU {7EE64074-8CDB-4448-B40C-81B75D6B31CD}.Release|x86.ActiveCfg = Release|x86 {7EE64074-8CDB-4448-B40C-81B75D6B31CD}.Release|x86.Build.0 = Release|x86 {88EEE0DC-ABBC-4738-BAD6-7E08CF7F50F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {88EEE0DC-ABBC-4738-BAD6-7E08CF7F50F9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {88EEE0DC-ABBC-4738-BAD6-7E08CF7F50F9}.Debug|x64.ActiveCfg = Debug|Any CPU + {88EEE0DC-ABBC-4738-BAD6-7E08CF7F50F9}.Debug|x64.Build.0 = Debug|Any CPU {88EEE0DC-ABBC-4738-BAD6-7E08CF7F50F9}.Debug|x86.ActiveCfg = Debug|x86 {88EEE0DC-ABBC-4738-BAD6-7E08CF7F50F9}.Debug|x86.Build.0 = Debug|x86 {88EEE0DC-ABBC-4738-BAD6-7E08CF7F50F9}.Release|Any CPU.ActiveCfg = Release|Any CPU {88EEE0DC-ABBC-4738-BAD6-7E08CF7F50F9}.Release|Any CPU.Build.0 = Release|Any CPU + {88EEE0DC-ABBC-4738-BAD6-7E08CF7F50F9}.Release|x64.ActiveCfg = Release|Any CPU + {88EEE0DC-ABBC-4738-BAD6-7E08CF7F50F9}.Release|x64.Build.0 = Release|Any CPU {88EEE0DC-ABBC-4738-BAD6-7E08CF7F50F9}.Release|x86.ActiveCfg = Release|x86 {88EEE0DC-ABBC-4738-BAD6-7E08CF7F50F9}.Release|x86.Build.0 = Release|x86 + {C174F23D-3055-49BC-B6B0-563011AF624D}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {C174F23D-3055-49BC-B6B0-563011AF624D}.Debug|x64.ActiveCfg = Debug|x64 + {C174F23D-3055-49BC-B6B0-563011AF624D}.Debug|x64.Build.0 = Debug|x64 + {C174F23D-3055-49BC-B6B0-563011AF624D}.Debug|x86.ActiveCfg = Debug|Win32 + {C174F23D-3055-49BC-B6B0-563011AF624D}.Debug|x86.Build.0 = Debug|Win32 + {C174F23D-3055-49BC-B6B0-563011AF624D}.Release|Any CPU.ActiveCfg = Release|Win32 + {C174F23D-3055-49BC-B6B0-563011AF624D}.Release|x64.ActiveCfg = Release|x64 + {C174F23D-3055-49BC-B6B0-563011AF624D}.Release|x64.Build.0 = Release|x64 + {C174F23D-3055-49BC-B6B0-563011AF624D}.Release|x86.ActiveCfg = Release|Win32 + {C174F23D-3055-49BC-B6B0-563011AF624D}.Release|x86.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE