diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 42010ab..993021b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -19,10 +19,63 @@ jobs: dotnet-version: 8.0.x - name: Restore dependencies - run: dotnet restore + run: dotnet restore ThirdRun.csproj && dotnet restore ThirdRun.DesktopGL/ThirdRun.DesktopGL.csproj && dotnet restore ThirdRun.Tests/ThirdRun.Tests.csproj - - name: Build - run: dotnet build --no-restore + - name: Build Desktop + run: dotnet build ThirdRun.DesktopGL/ThirdRun.DesktopGL.csproj --no-restore --configuration Release + + - name: Build Tests + run: dotnet build ThirdRun.Tests/ThirdRun.Tests.csproj --no-restore --configuration Debug - name: Test - run: dotnet test --no-build --verbosity normal \ No newline at end of file + run: dotnet test ThirdRun.Tests/ThirdRun.Tests.csproj --no-build --verbosity normal + + build-android: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Setup .NET + uses: actions/setup-dotnet@v4 + with: + dotnet-version: 8.0.x + + - name: Setup Java JDK + uses: actions/setup-java@v4 + with: + distribution: 'microsoft' + java-version: 17 + + - name: Setup Android SDK + uses: android-actions/setup-android@v3 + + - name: Install Android workload + run: dotnet workload install android || echo "Android workload not available, skipping..." + continue-on-error: true + + - name: Restore workloads + run: dotnet workload restore ThirdRun.Android/ThirdRun.Android.csproj || echo "Workload restore failed, continuing..." + continue-on-error: true + + - name: Restore dependencies + run: dotnet restore ThirdRun.Android/ThirdRun.Android.csproj || echo "Android dependency restore failed" + continue-on-error: true + + - name: Build Android + run: dotnet build ThirdRun.Android/ThirdRun.Android.csproj --no-restore --configuration Release || echo "Android build failed" + continue-on-error: true + + - name: Publish Android APK + run: dotnet publish ThirdRun.Android/ThirdRun.Android.csproj -c Release -f net8.0-android || echo "Android publish failed" + continue-on-error: true + + - name: Upload APK artifact + uses: actions/upload-artifact@v4 + if: success() + with: + name: ThirdRun-Android-APK + path: | + ThirdRun.Android/bin/Release/net8.0-android/publish/*.apk + ThirdRun.Android/bin/Release/net8.0-android/*.apk + retention-days: 30 \ No newline at end of file diff --git a/.github/workflows/copilot-setup-steps.yml b/.github/workflows/copilot-setup-steps.yml new file mode 100644 index 0000000..e9714b1 --- /dev/null +++ b/.github/workflows/copilot-setup-steps.yml @@ -0,0 +1,47 @@ +name: "Copilot Setup Steps" + +# Automatically run the setup steps when they are changed to allow for easy validation, and +# allow manual testing through the repository's "Actions" tab +on: + workflow_dispatch: + push: + paths: + - .github/workflows/copilot-setup-steps.yml + pull_request: + paths: + - .github/workflows/copilot-setup-steps.yml + +jobs: + # The job MUST be called `copilot-setup-steps` or it will not be picked up by Copilot. + copilot-setup-steps: + runs-on: ubuntu-latest + + # Set the permissions to the lowest permissions possible needed for your steps. + # Copilot will be given its own token for its operations. + permissions: + # If you want to clone the repository as part of your setup steps, for example to install dependencies, you'll need the `contents: read` permission. If you don't clone the repository in your setup steps, Copilot will do this for you automatically after the steps complete. + contents: read + + # You can define any steps you want, and they will run before the agent starts. + # If you do not check out your code, Copilot will do this for you. + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup .NET + uses: actions/setup-dotnet@v4 + with: + dotnet-version: 8.0.x + + - name: Setup Java JDK + uses: actions/setup-java@v4 + with: + distribution: 'microsoft' + java-version: 17 + + - name: Setup Android SDK + uses: android-actions/setup-android@v3 + + - name: Install Android workload + run: dotnet workload install android || echo "Android workload not available, skipping..." + diff --git a/Content/Content.mgcb b/Content/Content.mgcb index 85baad8..4282d02 100644 --- a/Content/Content.mgcb +++ b/Content/Content.mgcb @@ -3,7 +3,7 @@ /outputDir:bin/$(Platform) /intermediateDir:obj/$(Platform) -/platform:Windows +/platform:DesktopGL /config: /profile:Reach /compress:False diff --git a/ThirdRun.Android/Activity1.cs b/ThirdRun.Android/Activity1.cs new file mode 100644 index 0000000..5a51cad --- /dev/null +++ b/ThirdRun.Android/Activity1.cs @@ -0,0 +1,47 @@ +using Android.App; +using Android.Content.PM; +using Android.OS; + +namespace ThirdRun.Android +{ + [Activity( + Label = "@string/app_name", + MainLauncher = true, + Icon = "@drawable/icon", + AlwaysRetainTaskState = true, + LaunchMode = LaunchMode.SingleInstance, + ScreenOrientation = ScreenOrientation.FullUser, + ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.Keyboard | ConfigChanges.KeyboardHidden | ConfigChanges.ScreenSize + )] + public class Activity1 : Activity + { + private MonogameRPG.Game1? _game; + + protected override void OnCreate(Bundle? bundle) + { + base.OnCreate(bundle); + + // Create and run the game + _game = new MonogameRPG.Game1(); + _game.Run(); + } + + protected override void OnResume() + { + base.OnResume(); + // Game lifecycle handled by MonoGame + } + + protected override void OnPause() + { + base.OnPause(); + // Game lifecycle handled by MonoGame + } + + protected override void OnDestroy() + { + _game?.Exit(); + base.OnDestroy(); + } + } +} \ No newline at end of file diff --git a/ThirdRun.Android/AndroidManifest.xml b/ThirdRun.Android/AndroidManifest.xml new file mode 100644 index 0000000..f4125bd --- /dev/null +++ b/ThirdRun.Android/AndroidManifest.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/ThirdRun.Android/Content/Arial.ttf b/ThirdRun.Android/Content/Arial.ttf new file mode 120000 index 0000000..dbef2a3 --- /dev/null +++ b/ThirdRun.Android/Content/Arial.ttf @@ -0,0 +1 @@ +../../Content/Arial.ttf \ No newline at end of file diff --git a/ThirdRun.Android/Content/Characters b/ThirdRun.Android/Content/Characters new file mode 120000 index 0000000..c4a293c --- /dev/null +++ b/ThirdRun.Android/Content/Characters @@ -0,0 +1 @@ +../../Content/Characters \ No newline at end of file diff --git a/ThirdRun.Android/Content/Content.mgcb b/ThirdRun.Android/Content/Content.mgcb new file mode 100644 index 0000000..cc108b5 --- /dev/null +++ b/ThirdRun.Android/Content/Content.mgcb @@ -0,0 +1,265 @@ +#----------------------------- Global Properties ----------------------------# + +/outputDir:bin/$(Platform) +/intermediateDir:obj/$(Platform) +/platform:Android +/config: +/profile:Reach +/compress:False + +#-------------------------------- References --------------------------------# + + +#---------------------------------- Content ---------------------------------# + +#begin Characters/hunter.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Characters/hunter.png + +#begin Characters/mage.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Characters/mage.png + +#begin Characters/priest.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Characters/priest.png + +#begin Characters/warrior.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Characters/warrior.png + +#begin Monsters/orc.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Monsters/orc.png + +#begin UI/Button/bottom-left-on.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:UI/Button/bottom-left-on.png + +#begin UI/Button/bottom-left.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:UI/Button/bottom-left.png + +#begin UI/Button/bottom-on.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:UI/Button/bottom-on.png + +#begin UI/Button/bottom-right-on.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:UI/Button/bottom-right-on.png + +#begin UI/Button/bottom-right.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:UI/Button/bottom-right.png + +#begin UI/Button/bottom.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:UI/Button/bottom.png + +#begin UI/Button/left-on.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:UI/Button/left-on.png + +#begin UI/Button/left.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:UI/Button/left.png + +#begin UI/Button/right-on.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:UI/Button/right-on.png + +#begin UI/Button/right.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:UI/Button/right.png + +#begin UI/Button/top-left-on.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:UI/Button/top-left-on.png + +#begin UI/Button/top-left.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:UI/Button/top-left.png + +#begin UI/Button/top-on.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:UI/Button/top-on.png + +#begin UI/Button/top-right-on.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:UI/Button/top-right-on.png + +#begin UI/Button/top-right.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:UI/Button/top-right.png + +#begin UI/Button/top.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:UI/Button/top.png diff --git a/ThirdRun.Android/Content/Monsters b/ThirdRun.Android/Content/Monsters new file mode 120000 index 0000000..ca6abc0 --- /dev/null +++ b/ThirdRun.Android/Content/Monsters @@ -0,0 +1 @@ +../../Content/Monsters \ No newline at end of file diff --git a/ThirdRun.Android/Content/UI b/ThirdRun.Android/Content/UI new file mode 120000 index 0000000..2d973a3 --- /dev/null +++ b/ThirdRun.Android/Content/UI @@ -0,0 +1 @@ +../../Content/UI \ No newline at end of file diff --git a/ThirdRun.Android/Resources/Drawable/icon.png b/ThirdRun.Android/Resources/Drawable/icon.png new file mode 100644 index 0000000..25fe044 Binary files /dev/null and b/ThirdRun.Android/Resources/Drawable/icon.png differ diff --git a/ThirdRun.Android/Resources/Values/Strings.xml b/ThirdRun.Android/Resources/Values/Strings.xml new file mode 100644 index 0000000..6ab3f15 --- /dev/null +++ b/ThirdRun.Android/Resources/Values/Strings.xml @@ -0,0 +1,4 @@ + + + ThirdRun + \ No newline at end of file diff --git a/ThirdRun.Android/ThirdRun.Android.csproj b/ThirdRun.Android/ThirdRun.Android.csproj new file mode 100644 index 0000000..3c6f31b --- /dev/null +++ b/ThirdRun.Android/ThirdRun.Android.csproj @@ -0,0 +1,31 @@ + + + net8.0-android + 23 + Exe + com.sidoine.thirdrun + 1 + 1.0 + ThirdRun.Android + ThirdRun.Android + enable + + + + + + + + + + + + + PreserveNewest + + + + + + + \ No newline at end of file diff --git a/ThirdRun.DesktopGL/Content/Arial.ttf b/ThirdRun.DesktopGL/Content/Arial.ttf new file mode 120000 index 0000000..dbef2a3 --- /dev/null +++ b/ThirdRun.DesktopGL/Content/Arial.ttf @@ -0,0 +1 @@ +../../Content/Arial.ttf \ No newline at end of file diff --git a/ThirdRun.DesktopGL/Content/Characters b/ThirdRun.DesktopGL/Content/Characters new file mode 120000 index 0000000..c4a293c --- /dev/null +++ b/ThirdRun.DesktopGL/Content/Characters @@ -0,0 +1 @@ +../../Content/Characters \ No newline at end of file diff --git a/ThirdRun.DesktopGL/Content/Content.mgcb b/ThirdRun.DesktopGL/Content/Content.mgcb new file mode 120000 index 0000000..192f1dc --- /dev/null +++ b/ThirdRun.DesktopGL/Content/Content.mgcb @@ -0,0 +1 @@ +../../Content/Content.mgcb \ No newline at end of file diff --git a/ThirdRun.DesktopGL/Content/Monsters b/ThirdRun.DesktopGL/Content/Monsters new file mode 120000 index 0000000..ca6abc0 --- /dev/null +++ b/ThirdRun.DesktopGL/Content/Monsters @@ -0,0 +1 @@ +../../Content/Monsters \ No newline at end of file diff --git a/ThirdRun.DesktopGL/Content/UI b/ThirdRun.DesktopGL/Content/UI new file mode 120000 index 0000000..2d973a3 --- /dev/null +++ b/ThirdRun.DesktopGL/Content/UI @@ -0,0 +1 @@ +../../Content/UI \ No newline at end of file diff --git a/ThirdRun.DesktopGL/Content/bin b/ThirdRun.DesktopGL/Content/bin new file mode 120000 index 0000000..599bfb2 --- /dev/null +++ b/ThirdRun.DesktopGL/Content/bin @@ -0,0 +1 @@ +../../Content/bin \ No newline at end of file diff --git a/ThirdRun.DesktopGL/Content/obj b/ThirdRun.DesktopGL/Content/obj new file mode 120000 index 0000000..7ff0392 --- /dev/null +++ b/ThirdRun.DesktopGL/Content/obj @@ -0,0 +1 @@ +../../Content/obj \ No newline at end of file diff --git a/src/Program.cs b/ThirdRun.DesktopGL/Program.cs similarity index 100% rename from src/Program.cs rename to ThirdRun.DesktopGL/Program.cs diff --git a/ThirdRun.DesktopGL/ThirdRun.DesktopGL.csproj b/ThirdRun.DesktopGL/ThirdRun.DesktopGL.csproj new file mode 100644 index 0000000..fdfc734 --- /dev/null +++ b/ThirdRun.DesktopGL/ThirdRun.DesktopGL.csproj @@ -0,0 +1,22 @@ + + + + Exe + net8.0 + ThirdRun.DesktopGL + ThirdRun.DesktopGL + enable + false + false + + + + + + + + + PreserveNewest + + + \ No newline at end of file diff --git a/ThirdRun.csproj b/ThirdRun.csproj index cb8e97e..a272972 100644 --- a/ThirdRun.csproj +++ b/ThirdRun.csproj @@ -1,7 +1,7 @@ - Exe + Library net8.0 ThirdRun ThirdRun @@ -18,6 +18,8 @@ + + diff --git a/ThirdRun.sln b/ThirdRun.sln index 08c6448..66d27bb 100644 --- a/ThirdRun.sln +++ b/ThirdRun.sln @@ -2,24 +2,36 @@ # Visual Studio Version 17 VisualStudioVersion = 17.5.2.0 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ThirdRun", "ThirdRun.csproj", "{14107365-1304-7FC2-F4AD-E9E35D3A3286}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ThirdRun.Tests", "ThirdRun.Tests\ThirdRun.Tests.csproj", "{EF64743F-17EF-4C78-90E8-29D992645F54}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ThirdRun", "ThirdRun.csproj", "{14107365-1304-7FC2-F4AD-E9E35D3A3286}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ThirdRun.Tests", "ThirdRun.Tests\ThirdRun.Tests.csproj", "{EF64743F-17EF-4C78-90E8-29D992645F54}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ThirdRun.DesktopGL", "ThirdRun.DesktopGL\ThirdRun.DesktopGL.csproj", "{D8F4C5A3-2F8E-4B5C-9A1D-3C7E8F9B2A4E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ThirdRun.Android", "ThirdRun.Android\ThirdRun.Android.csproj", "{B5E2F1A7-8C3D-4E9F-A2B6-7D4F3E5A8B9C}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {14107365-1304-7FC2-F4AD-E9E35D3A3286}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {14107365-1304-7FC2-F4AD-E9E35D3A3286}.Debug|Any CPU.Build.0 = Debug|Any CPU - {14107365-1304-7FC2-F4AD-E9E35D3A3286}.Release|Any CPU.ActiveCfg = Release|Any CPU - {14107365-1304-7FC2-F4AD-E9E35D3A3286}.Release|Any CPU.Build.0 = Release|Any CPU - {EF64743F-17EF-4C78-90E8-29D992645F54}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EF64743F-17EF-4C78-90E8-29D992645F54}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EF64743F-17EF-4C78-90E8-29D992645F54}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EF64743F-17EF-4C78-90E8-29D992645F54}.Release|Any CPU.Build.0 = Release|Any CPU + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {14107365-1304-7FC2-F4AD-E9E35D3A3286}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {14107365-1304-7FC2-F4AD-E9E35D3A3286}.Debug|Any CPU.Build.0 = Debug|Any CPU + {14107365-1304-7FC2-F4AD-E9E35D3A3286}.Release|Any CPU.ActiveCfg = Release|Any CPU + {14107365-1304-7FC2-F4AD-E9E35D3A3286}.Release|Any CPU.Build.0 = Release|Any CPU + {EF64743F-17EF-4C78-90E8-29D992645F54}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EF64743F-17EF-4C78-90E8-29D992645F54}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EF64743F-17EF-4C78-90E8-29D992645F54}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EF64743F-17EF-4C78-90E8-29D992645F54}.Release|Any CPU.Build.0 = Release|Any CPU + {D8F4C5A3-2F8E-4B5C-9A1D-3C7E8F9B2A4E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D8F4C5A3-2F8E-4B5C-9A1D-3C7E8F9B2A4E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D8F4C5A3-2F8E-4B5C-9A1D-3C7E8F9B2A4E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D8F4C5A3-2F8E-4B5C-9A1D-3C7E8F9B2A4E}.Release|Any CPU.Build.0 = Release|Any CPU + {B5E2F1A7-8C3D-4E9F-A2B6-7D4F3E5A8B9C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B5E2F1A7-8C3D-4E9F-A2B6-7D4F3E5A8B9C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B5E2F1A7-8C3D-4E9F-A2B6-7D4F3E5A8B9C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B5E2F1A7-8C3D-4E9F-A2B6-7D4F3E5A8B9C}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE