diff --git a/.gitattributes b/.gitattributes index e53d317832..07145d0fe9 100644 --- a/.gitattributes +++ b/.gitattributes @@ -33,6 +33,7 @@ *.ruleset text *.shproj text *.sln text +*.slnx text *.targets text *.vb text *.vbproj text diff --git a/.github/ISSUE_TEMPLATE/01_Bug_Report.md b/.github/ISSUE_TEMPLATE/01_Bug_Report.md index 918b30c8c8..d643b2347d 100644 --- a/.github/ISSUE_TEMPLATE/01_Bug_Report.md +++ b/.github/ISSUE_TEMPLATE/01_Bug_Report.md @@ -26,7 +26,7 @@ assignees: '' * Do you know whether it is specific to that configuration? * Are you running in any particular type of environment? (e.g. Containers, a cloud scenario, app you are trying to target is a different user) * Is it a self-contained published application? -* What's the output of `dotnet info` +* What's the output of `dotnet --info` --> ### Regression? diff --git a/debuggees.sln b/debuggees.sln deleted file mode 100644 index 8786ab4f78..0000000000 --- a/debuggees.sln +++ /dev/null @@ -1,735 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.12.35309.182 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestDebuggee", "src\SOS\lldbplugin.tests\TestDebuggee\TestDebuggee.csproj", "{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SOS", "SOS", "{41638A4C-0DAF-47ED-A774-ECBBAC0315D7}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{19FAB78C-3351-4911-8F0C-8C6056401740}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Debuggees", "Debuggees", "{C3072949-6D24-451B-A308-2F3621F858B0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WebApp3", "src\SOS\SOS.UnitTests\Debuggees\WebApp3\WebApp3.csproj", "{252E5845-8D4C-4306-9D8F-ED2E2F7005F6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SimpleThrow", "src\SOS\SOS.UnitTests\Debuggees\SimpleThrow\SimpleThrow.csproj", "{179EF543-E30A-4428-ABA0-2E2621860173}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DivZero", "src\SOS\SOS.UnitTests\Debuggees\DivZero\DivZero.csproj", "{447AC053-2E0A-4119-BD11-30A4A8E3F765}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GCWhere", "src\SOS\SOS.UnitTests\Debuggees\GCWhere\GCWhere.csproj", "{664F46A9-3C99-489B-AAB9-4CD3A430C425}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NestedExceptionTest", "src\SOS\SOS.UnitTests\Debuggees\NestedExceptionTest\NestedExceptionTest.csproj", "{0CB805C8-0B76-4B1D-8AAF-48535B180448}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Overflow", "src\SOS\SOS.UnitTests\Debuggees\Overflow\Overflow.csproj", "{20251748-AA7B-45BE-ADAA-C9375F5CC80F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ReflectionTest", "src\SOS\SOS.UnitTests\Debuggees\ReflectionTest\ReflectionTest.csproj", "{DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TaskNestedException", "src\SOS\SOS.UnitTests\Debuggees\TaskNestedException\TaskNestedException\TaskNestedException.csproj", "{73EA5188-1E4F-42D8-B63E-F1B878A4EB63}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RandomUserLibrary", "src\SOS\SOS.UnitTests\Debuggees\TaskNestedException\RandomUserLibrary\RandomUserLibrary.csproj", "{B50D14DB-8EE5-47BD-B412-62FA5C693CC7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SymbolTestApp", "src\SOS\SOS.UnitTests\Debuggees\SymbolTestApp\SymbolTestApp\SymbolTestApp.csproj", "{112FE2A7-3FD2-4496-8A14-171898AD5CF5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SymbolTestDll", "src\SOS\SOS.UnitTests\Debuggees\SymbolTestApp\SymbolTestDll\SymbolTestDll.csproj", "{8C27904A-47C0-44C7-B191-88FF34580CBE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LineNums", "src\SOS\SOS.UnitTests\Debuggees\LineNums\LineNums.csproj", "{84881FB8-37E1-4D9B-B27E-9831C30DCC04}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GCPOH", "src\SOS\SOS.UnitTests\Debuggees\GCPOH\GCPOH.csproj", "{0A34CA51-8B8C-41A1-BE24-AB2C574EA144}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DotnetDumpCommands", "src\SOS\SOS.UnitTests\Debuggees\DotnetDumpCommands\DotnetDumpCommands.csproj", "{F9A69812-DC52-428D-9DB1-8B831A8FF776}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DynamicMethod", "src\SOS\SOS.UnitTests\Debuggees\DynamicMethod\DynamicMethod.csproj", "{2F9AA5A9-D42A-42C6-B483-1B9284C62F91}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Checked|Any CPU = Checked|Any CPU - Checked|ARM = Checked|ARM - Checked|ARM64 = Checked|ARM64 - Checked|x64 = Checked|x64 - Checked|x86 = Checked|x86 - Debug|Any CPU = Debug|Any CPU - Debug|ARM = Debug|ARM - Debug|ARM64 = Debug|ARM64 - Debug|x64 = Debug|x64 - Debug|x86 = Debug|x86 - Release|Any CPU = Release|Any CPU - Release|ARM = Release|ARM - Release|ARM64 = Release|ARM64 - Release|x64 = Release|x64 - Release|x86 = Release|x86 - RelWithDebInfo|Any CPU = RelWithDebInfo|Any CPU - RelWithDebInfo|ARM = RelWithDebInfo|ARM - RelWithDebInfo|ARM64 = RelWithDebInfo|ARM64 - RelWithDebInfo|x64 = RelWithDebInfo|x64 - RelWithDebInfo|x86 = RelWithDebInfo|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Checked|Any CPU.ActiveCfg = Release|Any CPU - {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Checked|Any CPU.Build.0 = Release|Any CPU - {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Checked|ARM.ActiveCfg = Release|Any CPU - {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Checked|ARM.Build.0 = Release|Any CPU - {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Checked|ARM64.ActiveCfg = Release|Any CPU - {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Checked|ARM64.Build.0 = Release|Any CPU - {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Checked|x64.ActiveCfg = Release|Any CPU - {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Checked|x64.Build.0 = Release|Any CPU - {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Checked|x86.ActiveCfg = Release|Any CPU - {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Checked|x86.Build.0 = Release|Any CPU - {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Debug|ARM.ActiveCfg = Debug|Any CPU - {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Debug|ARM.Build.0 = Debug|Any CPU - {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Debug|ARM64.Build.0 = Debug|Any CPU - {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Debug|x64.ActiveCfg = Debug|Any CPU - {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Debug|x64.Build.0 = Debug|Any CPU - {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Debug|x86.ActiveCfg = Debug|Any CPU - {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Debug|x86.Build.0 = Debug|Any CPU - {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Release|Any CPU.Build.0 = Release|Any CPU - {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Release|ARM.ActiveCfg = Release|Any CPU - {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Release|ARM.Build.0 = Release|Any CPU - {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Release|ARM64.ActiveCfg = Release|Any CPU - {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Release|ARM64.Build.0 = Release|Any CPU - {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Release|x64.ActiveCfg = Release|Any CPU - {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Release|x64.Build.0 = Release|Any CPU - {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Release|x86.ActiveCfg = Release|Any CPU - {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Release|x86.Build.0 = Release|Any CPU - {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU - {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU - {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU - {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU - {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU - {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU - {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU - {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.RelWithDebInfo|x64.Build.0 = Release|Any CPU - {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU - {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.RelWithDebInfo|x86.Build.0 = Release|Any CPU - {252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Checked|Any CPU.Build.0 = Debug|Any CPU - {252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Checked|ARM.ActiveCfg = Debug|Any CPU - {252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Checked|ARM.Build.0 = Debug|Any CPU - {252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Checked|ARM64.ActiveCfg = Debug|Any CPU - {252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Checked|ARM64.Build.0 = Debug|Any CPU - {252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Checked|x64.ActiveCfg = Debug|Any CPU - {252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Checked|x64.Build.0 = Debug|Any CPU - {252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Checked|x86.ActiveCfg = Debug|Any CPU - {252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Checked|x86.Build.0 = Debug|Any CPU - {252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Debug|ARM.ActiveCfg = Debug|Any CPU - {252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Debug|ARM.Build.0 = Debug|Any CPU - {252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Debug|ARM64.Build.0 = Debug|Any CPU - {252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Debug|x64.ActiveCfg = Debug|Any CPU - {252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Debug|x64.Build.0 = Debug|Any CPU - {252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Debug|x86.ActiveCfg = Debug|Any CPU - {252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Debug|x86.Build.0 = Debug|Any CPU - {252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Release|Any CPU.Build.0 = Release|Any CPU - {252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Release|ARM.ActiveCfg = Release|Any CPU - {252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Release|ARM.Build.0 = Release|Any CPU - {252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Release|ARM64.ActiveCfg = Release|Any CPU - {252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Release|ARM64.Build.0 = Release|Any CPU - {252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Release|x64.ActiveCfg = Release|Any CPU - {252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Release|x64.Build.0 = Release|Any CPU - {252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Release|x86.ActiveCfg = Release|Any CPU - {252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Release|x86.Build.0 = Release|Any CPU - {252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU - {252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU - {252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU - {252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU - {252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU - {252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU - {252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU - {252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.RelWithDebInfo|x64.Build.0 = Release|Any CPU - {252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU - {252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.RelWithDebInfo|x86.Build.0 = Release|Any CPU - {179EF543-E30A-4428-ABA0-2E2621860173}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {179EF543-E30A-4428-ABA0-2E2621860173}.Checked|Any CPU.Build.0 = Debug|Any CPU - {179EF543-E30A-4428-ABA0-2E2621860173}.Checked|ARM.ActiveCfg = Debug|Any CPU - {179EF543-E30A-4428-ABA0-2E2621860173}.Checked|ARM.Build.0 = Debug|Any CPU - {179EF543-E30A-4428-ABA0-2E2621860173}.Checked|ARM64.ActiveCfg = Debug|Any CPU - {179EF543-E30A-4428-ABA0-2E2621860173}.Checked|ARM64.Build.0 = Debug|Any CPU - {179EF543-E30A-4428-ABA0-2E2621860173}.Checked|x64.ActiveCfg = Debug|Any CPU - {179EF543-E30A-4428-ABA0-2E2621860173}.Checked|x64.Build.0 = Debug|Any CPU - {179EF543-E30A-4428-ABA0-2E2621860173}.Checked|x86.ActiveCfg = Debug|Any CPU - {179EF543-E30A-4428-ABA0-2E2621860173}.Checked|x86.Build.0 = Debug|Any CPU - {179EF543-E30A-4428-ABA0-2E2621860173}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {179EF543-E30A-4428-ABA0-2E2621860173}.Debug|Any CPU.Build.0 = Debug|Any CPU - {179EF543-E30A-4428-ABA0-2E2621860173}.Debug|ARM.ActiveCfg = Debug|Any CPU - {179EF543-E30A-4428-ABA0-2E2621860173}.Debug|ARM.Build.0 = Debug|Any CPU - {179EF543-E30A-4428-ABA0-2E2621860173}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {179EF543-E30A-4428-ABA0-2E2621860173}.Debug|ARM64.Build.0 = Debug|Any CPU - {179EF543-E30A-4428-ABA0-2E2621860173}.Debug|x64.ActiveCfg = Debug|Any CPU - {179EF543-E30A-4428-ABA0-2E2621860173}.Debug|x64.Build.0 = Debug|Any CPU - {179EF543-E30A-4428-ABA0-2E2621860173}.Debug|x86.ActiveCfg = Debug|Any CPU - {179EF543-E30A-4428-ABA0-2E2621860173}.Debug|x86.Build.0 = Debug|Any CPU - {179EF543-E30A-4428-ABA0-2E2621860173}.Release|Any CPU.ActiveCfg = Release|Any CPU - {179EF543-E30A-4428-ABA0-2E2621860173}.Release|Any CPU.Build.0 = Release|Any CPU - {179EF543-E30A-4428-ABA0-2E2621860173}.Release|ARM.ActiveCfg = Release|Any CPU - {179EF543-E30A-4428-ABA0-2E2621860173}.Release|ARM.Build.0 = Release|Any CPU - {179EF543-E30A-4428-ABA0-2E2621860173}.Release|ARM64.ActiveCfg = Release|Any CPU - {179EF543-E30A-4428-ABA0-2E2621860173}.Release|ARM64.Build.0 = Release|Any CPU - {179EF543-E30A-4428-ABA0-2E2621860173}.Release|x64.ActiveCfg = Release|Any CPU - {179EF543-E30A-4428-ABA0-2E2621860173}.Release|x64.Build.0 = Release|Any CPU - {179EF543-E30A-4428-ABA0-2E2621860173}.Release|x86.ActiveCfg = Release|Any CPU - {179EF543-E30A-4428-ABA0-2E2621860173}.Release|x86.Build.0 = Release|Any CPU - {179EF543-E30A-4428-ABA0-2E2621860173}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU - {179EF543-E30A-4428-ABA0-2E2621860173}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU - {179EF543-E30A-4428-ABA0-2E2621860173}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU - {179EF543-E30A-4428-ABA0-2E2621860173}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU - {179EF543-E30A-4428-ABA0-2E2621860173}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU - {179EF543-E30A-4428-ABA0-2E2621860173}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU - {179EF543-E30A-4428-ABA0-2E2621860173}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU - {179EF543-E30A-4428-ABA0-2E2621860173}.RelWithDebInfo|x64.Build.0 = Release|Any CPU - {179EF543-E30A-4428-ABA0-2E2621860173}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU - {179EF543-E30A-4428-ABA0-2E2621860173}.RelWithDebInfo|x86.Build.0 = Release|Any CPU - {447AC053-2E0A-4119-BD11-30A4A8E3F765}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {447AC053-2E0A-4119-BD11-30A4A8E3F765}.Checked|Any CPU.Build.0 = Debug|Any CPU - {447AC053-2E0A-4119-BD11-30A4A8E3F765}.Checked|ARM.ActiveCfg = Debug|Any CPU - {447AC053-2E0A-4119-BD11-30A4A8E3F765}.Checked|ARM.Build.0 = Debug|Any CPU - {447AC053-2E0A-4119-BD11-30A4A8E3F765}.Checked|ARM64.ActiveCfg = Debug|Any CPU - {447AC053-2E0A-4119-BD11-30A4A8E3F765}.Checked|ARM64.Build.0 = Debug|Any CPU - {447AC053-2E0A-4119-BD11-30A4A8E3F765}.Checked|x64.ActiveCfg = Debug|Any CPU - {447AC053-2E0A-4119-BD11-30A4A8E3F765}.Checked|x64.Build.0 = Debug|Any CPU - {447AC053-2E0A-4119-BD11-30A4A8E3F765}.Checked|x86.ActiveCfg = Debug|Any CPU - {447AC053-2E0A-4119-BD11-30A4A8E3F765}.Checked|x86.Build.0 = Debug|Any CPU - {447AC053-2E0A-4119-BD11-30A4A8E3F765}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {447AC053-2E0A-4119-BD11-30A4A8E3F765}.Debug|Any CPU.Build.0 = Debug|Any CPU - {447AC053-2E0A-4119-BD11-30A4A8E3F765}.Debug|ARM.ActiveCfg = Debug|Any CPU - {447AC053-2E0A-4119-BD11-30A4A8E3F765}.Debug|ARM.Build.0 = Debug|Any CPU - {447AC053-2E0A-4119-BD11-30A4A8E3F765}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {447AC053-2E0A-4119-BD11-30A4A8E3F765}.Debug|ARM64.Build.0 = Debug|Any CPU - {447AC053-2E0A-4119-BD11-30A4A8E3F765}.Debug|x64.ActiveCfg = Debug|Any CPU - {447AC053-2E0A-4119-BD11-30A4A8E3F765}.Debug|x64.Build.0 = Debug|Any CPU - {447AC053-2E0A-4119-BD11-30A4A8E3F765}.Debug|x86.ActiveCfg = Debug|Any CPU - {447AC053-2E0A-4119-BD11-30A4A8E3F765}.Debug|x86.Build.0 = Debug|Any CPU - {447AC053-2E0A-4119-BD11-30A4A8E3F765}.Release|Any CPU.ActiveCfg = Release|Any CPU - {447AC053-2E0A-4119-BD11-30A4A8E3F765}.Release|Any CPU.Build.0 = Release|Any CPU - {447AC053-2E0A-4119-BD11-30A4A8E3F765}.Release|ARM.ActiveCfg = Release|Any CPU - {447AC053-2E0A-4119-BD11-30A4A8E3F765}.Release|ARM.Build.0 = Release|Any CPU - {447AC053-2E0A-4119-BD11-30A4A8E3F765}.Release|ARM64.ActiveCfg = Release|Any CPU - {447AC053-2E0A-4119-BD11-30A4A8E3F765}.Release|ARM64.Build.0 = Release|Any CPU - {447AC053-2E0A-4119-BD11-30A4A8E3F765}.Release|x64.ActiveCfg = Release|Any CPU - {447AC053-2E0A-4119-BD11-30A4A8E3F765}.Release|x64.Build.0 = Release|Any CPU - {447AC053-2E0A-4119-BD11-30A4A8E3F765}.Release|x86.ActiveCfg = Release|Any CPU - {447AC053-2E0A-4119-BD11-30A4A8E3F765}.Release|x86.Build.0 = Release|Any CPU - {447AC053-2E0A-4119-BD11-30A4A8E3F765}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU - {447AC053-2E0A-4119-BD11-30A4A8E3F765}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU - {447AC053-2E0A-4119-BD11-30A4A8E3F765}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU - {447AC053-2E0A-4119-BD11-30A4A8E3F765}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU - {447AC053-2E0A-4119-BD11-30A4A8E3F765}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU - {447AC053-2E0A-4119-BD11-30A4A8E3F765}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU - {447AC053-2E0A-4119-BD11-30A4A8E3F765}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU - {447AC053-2E0A-4119-BD11-30A4A8E3F765}.RelWithDebInfo|x64.Build.0 = Release|Any CPU - {447AC053-2E0A-4119-BD11-30A4A8E3F765}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU - {447AC053-2E0A-4119-BD11-30A4A8E3F765}.RelWithDebInfo|x86.Build.0 = Release|Any CPU - {664F46A9-3C99-489B-AAB9-4CD3A430C425}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {664F46A9-3C99-489B-AAB9-4CD3A430C425}.Checked|Any CPU.Build.0 = Debug|Any CPU - {664F46A9-3C99-489B-AAB9-4CD3A430C425}.Checked|ARM.ActiveCfg = Debug|Any CPU - {664F46A9-3C99-489B-AAB9-4CD3A430C425}.Checked|ARM.Build.0 = Debug|Any CPU - {664F46A9-3C99-489B-AAB9-4CD3A430C425}.Checked|ARM64.ActiveCfg = Debug|Any CPU - {664F46A9-3C99-489B-AAB9-4CD3A430C425}.Checked|ARM64.Build.0 = Debug|Any CPU - {664F46A9-3C99-489B-AAB9-4CD3A430C425}.Checked|x64.ActiveCfg = Debug|Any CPU - {664F46A9-3C99-489B-AAB9-4CD3A430C425}.Checked|x64.Build.0 = Debug|Any CPU - {664F46A9-3C99-489B-AAB9-4CD3A430C425}.Checked|x86.ActiveCfg = Debug|Any CPU - {664F46A9-3C99-489B-AAB9-4CD3A430C425}.Checked|x86.Build.0 = Debug|Any CPU - {664F46A9-3C99-489B-AAB9-4CD3A430C425}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {664F46A9-3C99-489B-AAB9-4CD3A430C425}.Debug|Any CPU.Build.0 = Debug|Any CPU - {664F46A9-3C99-489B-AAB9-4CD3A430C425}.Debug|ARM.ActiveCfg = Debug|Any CPU - {664F46A9-3C99-489B-AAB9-4CD3A430C425}.Debug|ARM.Build.0 = Debug|Any CPU - {664F46A9-3C99-489B-AAB9-4CD3A430C425}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {664F46A9-3C99-489B-AAB9-4CD3A430C425}.Debug|ARM64.Build.0 = Debug|Any CPU - {664F46A9-3C99-489B-AAB9-4CD3A430C425}.Debug|x64.ActiveCfg = Debug|Any CPU - {664F46A9-3C99-489B-AAB9-4CD3A430C425}.Debug|x64.Build.0 = Debug|Any CPU - {664F46A9-3C99-489B-AAB9-4CD3A430C425}.Debug|x86.ActiveCfg = Debug|Any CPU - {664F46A9-3C99-489B-AAB9-4CD3A430C425}.Debug|x86.Build.0 = Debug|Any CPU - {664F46A9-3C99-489B-AAB9-4CD3A430C425}.Release|Any CPU.ActiveCfg = Release|Any CPU - {664F46A9-3C99-489B-AAB9-4CD3A430C425}.Release|Any CPU.Build.0 = Release|Any CPU - {664F46A9-3C99-489B-AAB9-4CD3A430C425}.Release|ARM.ActiveCfg = Release|Any CPU - {664F46A9-3C99-489B-AAB9-4CD3A430C425}.Release|ARM.Build.0 = Release|Any CPU - {664F46A9-3C99-489B-AAB9-4CD3A430C425}.Release|ARM64.ActiveCfg = Release|Any CPU - {664F46A9-3C99-489B-AAB9-4CD3A430C425}.Release|ARM64.Build.0 = Release|Any CPU - {664F46A9-3C99-489B-AAB9-4CD3A430C425}.Release|x64.ActiveCfg = Release|Any CPU - {664F46A9-3C99-489B-AAB9-4CD3A430C425}.Release|x64.Build.0 = Release|Any CPU - {664F46A9-3C99-489B-AAB9-4CD3A430C425}.Release|x86.ActiveCfg = Release|Any CPU - {664F46A9-3C99-489B-AAB9-4CD3A430C425}.Release|x86.Build.0 = Release|Any CPU - {664F46A9-3C99-489B-AAB9-4CD3A430C425}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU - {664F46A9-3C99-489B-AAB9-4CD3A430C425}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU - {664F46A9-3C99-489B-AAB9-4CD3A430C425}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU - {664F46A9-3C99-489B-AAB9-4CD3A430C425}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU - {664F46A9-3C99-489B-AAB9-4CD3A430C425}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU - {664F46A9-3C99-489B-AAB9-4CD3A430C425}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU - {664F46A9-3C99-489B-AAB9-4CD3A430C425}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU - {664F46A9-3C99-489B-AAB9-4CD3A430C425}.RelWithDebInfo|x64.Build.0 = Release|Any CPU - {664F46A9-3C99-489B-AAB9-4CD3A430C425}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU - {664F46A9-3C99-489B-AAB9-4CD3A430C425}.RelWithDebInfo|x86.Build.0 = Release|Any CPU - {0CB805C8-0B76-4B1D-8AAF-48535B180448}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {0CB805C8-0B76-4B1D-8AAF-48535B180448}.Checked|Any CPU.Build.0 = Debug|Any CPU - {0CB805C8-0B76-4B1D-8AAF-48535B180448}.Checked|ARM.ActiveCfg = Debug|Any CPU - {0CB805C8-0B76-4B1D-8AAF-48535B180448}.Checked|ARM.Build.0 = Debug|Any CPU - {0CB805C8-0B76-4B1D-8AAF-48535B180448}.Checked|ARM64.ActiveCfg = Debug|Any CPU - {0CB805C8-0B76-4B1D-8AAF-48535B180448}.Checked|ARM64.Build.0 = Debug|Any CPU - {0CB805C8-0B76-4B1D-8AAF-48535B180448}.Checked|x64.ActiveCfg = Debug|Any CPU - {0CB805C8-0B76-4B1D-8AAF-48535B180448}.Checked|x64.Build.0 = Debug|Any CPU - {0CB805C8-0B76-4B1D-8AAF-48535B180448}.Checked|x86.ActiveCfg = Debug|Any CPU - {0CB805C8-0B76-4B1D-8AAF-48535B180448}.Checked|x86.Build.0 = Debug|Any CPU - {0CB805C8-0B76-4B1D-8AAF-48535B180448}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0CB805C8-0B76-4B1D-8AAF-48535B180448}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0CB805C8-0B76-4B1D-8AAF-48535B180448}.Debug|ARM.ActiveCfg = Debug|Any CPU - {0CB805C8-0B76-4B1D-8AAF-48535B180448}.Debug|ARM.Build.0 = Debug|Any CPU - {0CB805C8-0B76-4B1D-8AAF-48535B180448}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {0CB805C8-0B76-4B1D-8AAF-48535B180448}.Debug|ARM64.Build.0 = Debug|Any CPU - {0CB805C8-0B76-4B1D-8AAF-48535B180448}.Debug|x64.ActiveCfg = Debug|Any CPU - {0CB805C8-0B76-4B1D-8AAF-48535B180448}.Debug|x64.Build.0 = Debug|Any CPU - {0CB805C8-0B76-4B1D-8AAF-48535B180448}.Debug|x86.ActiveCfg = Debug|Any CPU - {0CB805C8-0B76-4B1D-8AAF-48535B180448}.Debug|x86.Build.0 = Debug|Any CPU - {0CB805C8-0B76-4B1D-8AAF-48535B180448}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0CB805C8-0B76-4B1D-8AAF-48535B180448}.Release|Any CPU.Build.0 = Release|Any CPU - {0CB805C8-0B76-4B1D-8AAF-48535B180448}.Release|ARM.ActiveCfg = Release|Any CPU - {0CB805C8-0B76-4B1D-8AAF-48535B180448}.Release|ARM.Build.0 = Release|Any CPU - {0CB805C8-0B76-4B1D-8AAF-48535B180448}.Release|ARM64.ActiveCfg = Release|Any CPU - {0CB805C8-0B76-4B1D-8AAF-48535B180448}.Release|ARM64.Build.0 = Release|Any CPU - {0CB805C8-0B76-4B1D-8AAF-48535B180448}.Release|x64.ActiveCfg = Release|Any CPU - {0CB805C8-0B76-4B1D-8AAF-48535B180448}.Release|x64.Build.0 = Release|Any CPU - {0CB805C8-0B76-4B1D-8AAF-48535B180448}.Release|x86.ActiveCfg = Release|Any CPU - {0CB805C8-0B76-4B1D-8AAF-48535B180448}.Release|x86.Build.0 = Release|Any CPU - {0CB805C8-0B76-4B1D-8AAF-48535B180448}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU - {0CB805C8-0B76-4B1D-8AAF-48535B180448}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU - {0CB805C8-0B76-4B1D-8AAF-48535B180448}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU - {0CB805C8-0B76-4B1D-8AAF-48535B180448}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU - {0CB805C8-0B76-4B1D-8AAF-48535B180448}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU - {0CB805C8-0B76-4B1D-8AAF-48535B180448}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU - {0CB805C8-0B76-4B1D-8AAF-48535B180448}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU - {0CB805C8-0B76-4B1D-8AAF-48535B180448}.RelWithDebInfo|x64.Build.0 = Release|Any CPU - {0CB805C8-0B76-4B1D-8AAF-48535B180448}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU - {0CB805C8-0B76-4B1D-8AAF-48535B180448}.RelWithDebInfo|x86.Build.0 = Release|Any CPU - {20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Checked|Any CPU.Build.0 = Debug|Any CPU - {20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Checked|ARM.ActiveCfg = Debug|Any CPU - {20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Checked|ARM.Build.0 = Debug|Any CPU - {20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Checked|ARM64.ActiveCfg = Debug|Any CPU - {20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Checked|ARM64.Build.0 = Debug|Any CPU - {20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Checked|x64.ActiveCfg = Debug|Any CPU - {20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Checked|x64.Build.0 = Debug|Any CPU - {20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Checked|x86.ActiveCfg = Debug|Any CPU - {20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Checked|x86.Build.0 = Debug|Any CPU - {20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Debug|ARM.ActiveCfg = Debug|Any CPU - {20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Debug|ARM.Build.0 = Debug|Any CPU - {20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Debug|ARM64.Build.0 = Debug|Any CPU - {20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Debug|x64.ActiveCfg = Debug|Any CPU - {20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Debug|x64.Build.0 = Debug|Any CPU - {20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Debug|x86.ActiveCfg = Debug|Any CPU - {20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Debug|x86.Build.0 = Debug|Any CPU - {20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Release|Any CPU.Build.0 = Release|Any CPU - {20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Release|ARM.ActiveCfg = Release|Any CPU - {20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Release|ARM.Build.0 = Release|Any CPU - {20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Release|ARM64.ActiveCfg = Release|Any CPU - {20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Release|ARM64.Build.0 = Release|Any CPU - {20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Release|x64.ActiveCfg = Release|Any CPU - {20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Release|x64.Build.0 = Release|Any CPU - {20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Release|x86.ActiveCfg = Release|Any CPU - {20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Release|x86.Build.0 = Release|Any CPU - {20251748-AA7B-45BE-ADAA-C9375F5CC80F}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU - {20251748-AA7B-45BE-ADAA-C9375F5CC80F}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU - {20251748-AA7B-45BE-ADAA-C9375F5CC80F}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU - {20251748-AA7B-45BE-ADAA-C9375F5CC80F}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU - {20251748-AA7B-45BE-ADAA-C9375F5CC80F}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU - {20251748-AA7B-45BE-ADAA-C9375F5CC80F}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU - {20251748-AA7B-45BE-ADAA-C9375F5CC80F}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU - {20251748-AA7B-45BE-ADAA-C9375F5CC80F}.RelWithDebInfo|x64.Build.0 = Release|Any CPU - {20251748-AA7B-45BE-ADAA-C9375F5CC80F}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU - {20251748-AA7B-45BE-ADAA-C9375F5CC80F}.RelWithDebInfo|x86.Build.0 = Release|Any CPU - {DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Checked|Any CPU.Build.0 = Debug|Any CPU - {DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Checked|ARM.ActiveCfg = Debug|Any CPU - {DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Checked|ARM.Build.0 = Debug|Any CPU - {DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Checked|ARM64.ActiveCfg = Debug|Any CPU - {DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Checked|ARM64.Build.0 = Debug|Any CPU - {DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Checked|x64.ActiveCfg = Debug|Any CPU - {DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Checked|x64.Build.0 = Debug|Any CPU - {DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Checked|x86.ActiveCfg = Debug|Any CPU - {DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Checked|x86.Build.0 = Debug|Any CPU - {DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Debug|ARM.ActiveCfg = Debug|Any CPU - {DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Debug|ARM.Build.0 = Debug|Any CPU - {DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Debug|ARM64.Build.0 = Debug|Any CPU - {DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Debug|x64.ActiveCfg = Debug|Any CPU - {DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Debug|x64.Build.0 = Debug|Any CPU - {DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Debug|x86.ActiveCfg = Debug|Any CPU - {DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Debug|x86.Build.0 = Debug|Any CPU - {DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Release|Any CPU.Build.0 = Release|Any CPU - {DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Release|ARM.ActiveCfg = Release|Any CPU - {DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Release|ARM.Build.0 = Release|Any CPU - {DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Release|ARM64.ActiveCfg = Release|Any CPU - {DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Release|ARM64.Build.0 = Release|Any CPU - {DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Release|x64.ActiveCfg = Release|Any CPU - {DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Release|x64.Build.0 = Release|Any CPU - {DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Release|x86.ActiveCfg = Release|Any CPU - {DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Release|x86.Build.0 = Release|Any CPU - {DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU - {DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU - {DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU - {DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU - {DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU - {DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU - {DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU - {DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.RelWithDebInfo|x64.Build.0 = Release|Any CPU - {DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU - {DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.RelWithDebInfo|x86.Build.0 = Release|Any CPU - {73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Checked|Any CPU.Build.0 = Debug|Any CPU - {73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Checked|ARM.ActiveCfg = Debug|Any CPU - {73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Checked|ARM.Build.0 = Debug|Any CPU - {73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Checked|ARM64.ActiveCfg = Debug|Any CPU - {73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Checked|ARM64.Build.0 = Debug|Any CPU - {73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Checked|x64.ActiveCfg = Debug|Any CPU - {73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Checked|x64.Build.0 = Debug|Any CPU - {73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Checked|x86.ActiveCfg = Debug|Any CPU - {73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Checked|x86.Build.0 = Debug|Any CPU - {73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Debug|Any CPU.Build.0 = Debug|Any CPU - {73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Debug|ARM.ActiveCfg = Debug|Any CPU - {73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Debug|ARM.Build.0 = Debug|Any CPU - {73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Debug|ARM64.Build.0 = Debug|Any CPU - {73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Debug|x64.ActiveCfg = Debug|Any CPU - {73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Debug|x64.Build.0 = Debug|Any CPU - {73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Debug|x86.ActiveCfg = Debug|Any CPU - {73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Debug|x86.Build.0 = Debug|Any CPU - {73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Release|Any CPU.ActiveCfg = Release|Any CPU - {73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Release|Any CPU.Build.0 = Release|Any CPU - {73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Release|ARM.ActiveCfg = Release|Any CPU - {73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Release|ARM.Build.0 = Release|Any CPU - {73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Release|ARM64.ActiveCfg = Release|Any CPU - {73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Release|ARM64.Build.0 = Release|Any CPU - {73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Release|x64.ActiveCfg = Release|Any CPU - {73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Release|x64.Build.0 = Release|Any CPU - {73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Release|x86.ActiveCfg = Release|Any CPU - {73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Release|x86.Build.0 = Release|Any CPU - {73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU - {73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU - {73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU - {73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU - {73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU - {73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU - {73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU - {73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.RelWithDebInfo|x64.Build.0 = Release|Any CPU - {73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU - {73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.RelWithDebInfo|x86.Build.0 = Release|Any CPU - {B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Checked|Any CPU.Build.0 = Debug|Any CPU - {B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Checked|ARM.ActiveCfg = Debug|Any CPU - {B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Checked|ARM.Build.0 = Debug|Any CPU - {B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Checked|ARM64.ActiveCfg = Debug|Any CPU - {B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Checked|ARM64.Build.0 = Debug|Any CPU - {B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Checked|x64.ActiveCfg = Debug|Any CPU - {B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Checked|x64.Build.0 = Debug|Any CPU - {B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Checked|x86.ActiveCfg = Debug|Any CPU - {B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Checked|x86.Build.0 = Debug|Any CPU - {B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Debug|ARM.ActiveCfg = Debug|Any CPU - {B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Debug|ARM.Build.0 = Debug|Any CPU - {B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Debug|ARM64.Build.0 = Debug|Any CPU - {B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Debug|x64.ActiveCfg = Debug|Any CPU - {B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Debug|x64.Build.0 = Debug|Any CPU - {B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Debug|x86.ActiveCfg = Debug|Any CPU - {B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Debug|x86.Build.0 = Debug|Any CPU - {B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Release|Any CPU.Build.0 = Release|Any CPU - {B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Release|ARM.ActiveCfg = Release|Any CPU - {B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Release|ARM.Build.0 = Release|Any CPU - {B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Release|ARM64.ActiveCfg = Release|Any CPU - {B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Release|ARM64.Build.0 = Release|Any CPU - {B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Release|x64.ActiveCfg = Release|Any CPU - {B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Release|x64.Build.0 = Release|Any CPU - {B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Release|x86.ActiveCfg = Release|Any CPU - {B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Release|x86.Build.0 = Release|Any CPU - {B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU - {B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU - {B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU - {B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU - {B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU - {B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU - {B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU - {B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.RelWithDebInfo|x64.Build.0 = Release|Any CPU - {B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU - {B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.RelWithDebInfo|x86.Build.0 = Release|Any CPU - {112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Checked|Any CPU.Build.0 = Debug|Any CPU - {112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Checked|ARM.ActiveCfg = Debug|Any CPU - {112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Checked|ARM.Build.0 = Debug|Any CPU - {112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Checked|ARM64.ActiveCfg = Debug|Any CPU - {112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Checked|ARM64.Build.0 = Debug|Any CPU - {112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Checked|x64.ActiveCfg = Debug|Any CPU - {112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Checked|x64.Build.0 = Debug|Any CPU - {112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Checked|x86.ActiveCfg = Debug|Any CPU - {112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Checked|x86.Build.0 = Debug|Any CPU - {112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Debug|ARM.ActiveCfg = Debug|Any CPU - {112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Debug|ARM.Build.0 = Debug|Any CPU - {112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Debug|ARM64.Build.0 = Debug|Any CPU - {112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Debug|x64.ActiveCfg = Debug|Any CPU - {112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Debug|x64.Build.0 = Debug|Any CPU - {112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Debug|x86.ActiveCfg = Debug|Any CPU - {112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Debug|x86.Build.0 = Debug|Any CPU - {112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Release|Any CPU.Build.0 = Release|Any CPU - {112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Release|ARM.ActiveCfg = Release|Any CPU - {112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Release|ARM.Build.0 = Release|Any CPU - {112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Release|ARM64.ActiveCfg = Release|Any CPU - {112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Release|ARM64.Build.0 = Release|Any CPU - {112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Release|x64.ActiveCfg = Release|Any CPU - {112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Release|x64.Build.0 = Release|Any CPU - {112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Release|x86.ActiveCfg = Release|Any CPU - {112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Release|x86.Build.0 = Release|Any CPU - {112FE2A7-3FD2-4496-8A14-171898AD5CF5}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU - {112FE2A7-3FD2-4496-8A14-171898AD5CF5}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU - {112FE2A7-3FD2-4496-8A14-171898AD5CF5}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU - {112FE2A7-3FD2-4496-8A14-171898AD5CF5}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU - {112FE2A7-3FD2-4496-8A14-171898AD5CF5}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU - {112FE2A7-3FD2-4496-8A14-171898AD5CF5}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU - {112FE2A7-3FD2-4496-8A14-171898AD5CF5}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU - {112FE2A7-3FD2-4496-8A14-171898AD5CF5}.RelWithDebInfo|x64.Build.0 = Release|Any CPU - {112FE2A7-3FD2-4496-8A14-171898AD5CF5}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU - {112FE2A7-3FD2-4496-8A14-171898AD5CF5}.RelWithDebInfo|x86.Build.0 = Release|Any CPU - {8C27904A-47C0-44C7-B191-88FF34580CBE}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {8C27904A-47C0-44C7-B191-88FF34580CBE}.Checked|Any CPU.Build.0 = Debug|Any CPU - {8C27904A-47C0-44C7-B191-88FF34580CBE}.Checked|ARM.ActiveCfg = Debug|Any CPU - {8C27904A-47C0-44C7-B191-88FF34580CBE}.Checked|ARM.Build.0 = Debug|Any CPU - {8C27904A-47C0-44C7-B191-88FF34580CBE}.Checked|ARM64.ActiveCfg = Debug|Any CPU - {8C27904A-47C0-44C7-B191-88FF34580CBE}.Checked|ARM64.Build.0 = Debug|Any CPU - {8C27904A-47C0-44C7-B191-88FF34580CBE}.Checked|x64.ActiveCfg = Debug|Any CPU - {8C27904A-47C0-44C7-B191-88FF34580CBE}.Checked|x64.Build.0 = Debug|Any CPU - {8C27904A-47C0-44C7-B191-88FF34580CBE}.Checked|x86.ActiveCfg = Debug|Any CPU - {8C27904A-47C0-44C7-B191-88FF34580CBE}.Checked|x86.Build.0 = Debug|Any CPU - {8C27904A-47C0-44C7-B191-88FF34580CBE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8C27904A-47C0-44C7-B191-88FF34580CBE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8C27904A-47C0-44C7-B191-88FF34580CBE}.Debug|ARM.ActiveCfg = Debug|Any CPU - {8C27904A-47C0-44C7-B191-88FF34580CBE}.Debug|ARM.Build.0 = Debug|Any CPU - {8C27904A-47C0-44C7-B191-88FF34580CBE}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {8C27904A-47C0-44C7-B191-88FF34580CBE}.Debug|ARM64.Build.0 = Debug|Any CPU - {8C27904A-47C0-44C7-B191-88FF34580CBE}.Debug|x64.ActiveCfg = Debug|Any CPU - {8C27904A-47C0-44C7-B191-88FF34580CBE}.Debug|x64.Build.0 = Debug|Any CPU - {8C27904A-47C0-44C7-B191-88FF34580CBE}.Debug|x86.ActiveCfg = Debug|Any CPU - {8C27904A-47C0-44C7-B191-88FF34580CBE}.Debug|x86.Build.0 = Debug|Any CPU - {8C27904A-47C0-44C7-B191-88FF34580CBE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8C27904A-47C0-44C7-B191-88FF34580CBE}.Release|Any CPU.Build.0 = Release|Any CPU - {8C27904A-47C0-44C7-B191-88FF34580CBE}.Release|ARM.ActiveCfg = Release|Any CPU - {8C27904A-47C0-44C7-B191-88FF34580CBE}.Release|ARM.Build.0 = Release|Any CPU - {8C27904A-47C0-44C7-B191-88FF34580CBE}.Release|ARM64.ActiveCfg = Release|Any CPU - {8C27904A-47C0-44C7-B191-88FF34580CBE}.Release|ARM64.Build.0 = Release|Any CPU - {8C27904A-47C0-44C7-B191-88FF34580CBE}.Release|x64.ActiveCfg = Release|Any CPU - {8C27904A-47C0-44C7-B191-88FF34580CBE}.Release|x64.Build.0 = Release|Any CPU - {8C27904A-47C0-44C7-B191-88FF34580CBE}.Release|x86.ActiveCfg = Release|Any CPU - {8C27904A-47C0-44C7-B191-88FF34580CBE}.Release|x86.Build.0 = Release|Any CPU - {8C27904A-47C0-44C7-B191-88FF34580CBE}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU - {8C27904A-47C0-44C7-B191-88FF34580CBE}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU - {8C27904A-47C0-44C7-B191-88FF34580CBE}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU - {8C27904A-47C0-44C7-B191-88FF34580CBE}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU - {8C27904A-47C0-44C7-B191-88FF34580CBE}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU - {8C27904A-47C0-44C7-B191-88FF34580CBE}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU - {8C27904A-47C0-44C7-B191-88FF34580CBE}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU - {8C27904A-47C0-44C7-B191-88FF34580CBE}.RelWithDebInfo|x64.Build.0 = Release|Any CPU - {8C27904A-47C0-44C7-B191-88FF34580CBE}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU - {8C27904A-47C0-44C7-B191-88FF34580CBE}.RelWithDebInfo|x86.Build.0 = Release|Any CPU - {84881FB8-37E1-4D9B-B27E-9831C30DCC04}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {84881FB8-37E1-4D9B-B27E-9831C30DCC04}.Checked|Any CPU.Build.0 = Debug|Any CPU - {84881FB8-37E1-4D9B-B27E-9831C30DCC04}.Checked|ARM.ActiveCfg = Debug|Any CPU - {84881FB8-37E1-4D9B-B27E-9831C30DCC04}.Checked|ARM.Build.0 = Debug|Any CPU - {84881FB8-37E1-4D9B-B27E-9831C30DCC04}.Checked|ARM64.ActiveCfg = Debug|Any CPU - {84881FB8-37E1-4D9B-B27E-9831C30DCC04}.Checked|ARM64.Build.0 = Debug|Any CPU - {84881FB8-37E1-4D9B-B27E-9831C30DCC04}.Checked|x64.ActiveCfg = Debug|Any CPU - {84881FB8-37E1-4D9B-B27E-9831C30DCC04}.Checked|x64.Build.0 = Debug|Any CPU - {84881FB8-37E1-4D9B-B27E-9831C30DCC04}.Checked|x86.ActiveCfg = Debug|Any CPU - {84881FB8-37E1-4D9B-B27E-9831C30DCC04}.Checked|x86.Build.0 = Debug|Any CPU - {84881FB8-37E1-4D9B-B27E-9831C30DCC04}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {84881FB8-37E1-4D9B-B27E-9831C30DCC04}.Debug|Any CPU.Build.0 = Debug|Any CPU - {84881FB8-37E1-4D9B-B27E-9831C30DCC04}.Debug|ARM.ActiveCfg = Debug|Any CPU - {84881FB8-37E1-4D9B-B27E-9831C30DCC04}.Debug|ARM.Build.0 = Debug|Any CPU - {84881FB8-37E1-4D9B-B27E-9831C30DCC04}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {84881FB8-37E1-4D9B-B27E-9831C30DCC04}.Debug|ARM64.Build.0 = Debug|Any CPU - {84881FB8-37E1-4D9B-B27E-9831C30DCC04}.Debug|x64.ActiveCfg = Debug|Any CPU - {84881FB8-37E1-4D9B-B27E-9831C30DCC04}.Debug|x64.Build.0 = Debug|Any CPU - {84881FB8-37E1-4D9B-B27E-9831C30DCC04}.Debug|x86.ActiveCfg = Debug|Any CPU - {84881FB8-37E1-4D9B-B27E-9831C30DCC04}.Debug|x86.Build.0 = Debug|Any CPU - {84881FB8-37E1-4D9B-B27E-9831C30DCC04}.Release|Any CPU.ActiveCfg = Release|Any CPU - {84881FB8-37E1-4D9B-B27E-9831C30DCC04}.Release|Any CPU.Build.0 = Release|Any CPU - {84881FB8-37E1-4D9B-B27E-9831C30DCC04}.Release|ARM.ActiveCfg = Release|Any CPU - {84881FB8-37E1-4D9B-B27E-9831C30DCC04}.Release|ARM.Build.0 = Release|Any CPU - {84881FB8-37E1-4D9B-B27E-9831C30DCC04}.Release|ARM64.ActiveCfg = Release|Any CPU - {84881FB8-37E1-4D9B-B27E-9831C30DCC04}.Release|ARM64.Build.0 = Release|Any CPU - {84881FB8-37E1-4D9B-B27E-9831C30DCC04}.Release|x64.ActiveCfg = Release|Any CPU - {84881FB8-37E1-4D9B-B27E-9831C30DCC04}.Release|x64.Build.0 = Release|Any CPU - {84881FB8-37E1-4D9B-B27E-9831C30DCC04}.Release|x86.ActiveCfg = Release|Any CPU - {84881FB8-37E1-4D9B-B27E-9831C30DCC04}.Release|x86.Build.0 = Release|Any CPU - {84881FB8-37E1-4D9B-B27E-9831C30DCC04}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU - {84881FB8-37E1-4D9B-B27E-9831C30DCC04}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU - {84881FB8-37E1-4D9B-B27E-9831C30DCC04}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU - {84881FB8-37E1-4D9B-B27E-9831C30DCC04}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU - {84881FB8-37E1-4D9B-B27E-9831C30DCC04}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU - {84881FB8-37E1-4D9B-B27E-9831C30DCC04}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU - {84881FB8-37E1-4D9B-B27E-9831C30DCC04}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU - {84881FB8-37E1-4D9B-B27E-9831C30DCC04}.RelWithDebInfo|x64.Build.0 = Release|Any CPU - {84881FB8-37E1-4D9B-B27E-9831C30DCC04}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU - {84881FB8-37E1-4D9B-B27E-9831C30DCC04}.RelWithDebInfo|x86.Build.0 = Release|Any CPU - {0A34CA51-8B8C-41A1-BE24-AB2C574EA144}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {0A34CA51-8B8C-41A1-BE24-AB2C574EA144}.Checked|Any CPU.Build.0 = Debug|Any CPU - {0A34CA51-8B8C-41A1-BE24-AB2C574EA144}.Checked|ARM.ActiveCfg = Debug|Any CPU - {0A34CA51-8B8C-41A1-BE24-AB2C574EA144}.Checked|ARM.Build.0 = Debug|Any CPU - {0A34CA51-8B8C-41A1-BE24-AB2C574EA144}.Checked|ARM64.ActiveCfg = Debug|Any CPU - {0A34CA51-8B8C-41A1-BE24-AB2C574EA144}.Checked|ARM64.Build.0 = Debug|Any CPU - {0A34CA51-8B8C-41A1-BE24-AB2C574EA144}.Checked|x64.ActiveCfg = Debug|Any CPU - {0A34CA51-8B8C-41A1-BE24-AB2C574EA144}.Checked|x64.Build.0 = Debug|Any CPU - {0A34CA51-8B8C-41A1-BE24-AB2C574EA144}.Checked|x86.ActiveCfg = Debug|Any CPU - {0A34CA51-8B8C-41A1-BE24-AB2C574EA144}.Checked|x86.Build.0 = Debug|Any CPU - {0A34CA51-8B8C-41A1-BE24-AB2C574EA144}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0A34CA51-8B8C-41A1-BE24-AB2C574EA144}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0A34CA51-8B8C-41A1-BE24-AB2C574EA144}.Debug|ARM.ActiveCfg = Debug|Any CPU - {0A34CA51-8B8C-41A1-BE24-AB2C574EA144}.Debug|ARM.Build.0 = Debug|Any CPU - {0A34CA51-8B8C-41A1-BE24-AB2C574EA144}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {0A34CA51-8B8C-41A1-BE24-AB2C574EA144}.Debug|ARM64.Build.0 = Debug|Any CPU - {0A34CA51-8B8C-41A1-BE24-AB2C574EA144}.Debug|x64.ActiveCfg = Debug|Any CPU - {0A34CA51-8B8C-41A1-BE24-AB2C574EA144}.Debug|x64.Build.0 = Debug|Any CPU - {0A34CA51-8B8C-41A1-BE24-AB2C574EA144}.Debug|x86.ActiveCfg = Debug|Any CPU - {0A34CA51-8B8C-41A1-BE24-AB2C574EA144}.Debug|x86.Build.0 = Debug|Any CPU - {0A34CA51-8B8C-41A1-BE24-AB2C574EA144}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0A34CA51-8B8C-41A1-BE24-AB2C574EA144}.Release|Any CPU.Build.0 = Release|Any CPU - {0A34CA51-8B8C-41A1-BE24-AB2C574EA144}.Release|ARM.ActiveCfg = Release|Any CPU - {0A34CA51-8B8C-41A1-BE24-AB2C574EA144}.Release|ARM.Build.0 = Release|Any CPU - {0A34CA51-8B8C-41A1-BE24-AB2C574EA144}.Release|ARM64.ActiveCfg = Release|Any CPU - {0A34CA51-8B8C-41A1-BE24-AB2C574EA144}.Release|ARM64.Build.0 = Release|Any CPU - {0A34CA51-8B8C-41A1-BE24-AB2C574EA144}.Release|x64.ActiveCfg = Release|Any CPU - {0A34CA51-8B8C-41A1-BE24-AB2C574EA144}.Release|x64.Build.0 = Release|Any CPU - {0A34CA51-8B8C-41A1-BE24-AB2C574EA144}.Release|x86.ActiveCfg = Release|Any CPU - {0A34CA51-8B8C-41A1-BE24-AB2C574EA144}.Release|x86.Build.0 = Release|Any CPU - {0A34CA51-8B8C-41A1-BE24-AB2C574EA144}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU - {0A34CA51-8B8C-41A1-BE24-AB2C574EA144}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU - {0A34CA51-8B8C-41A1-BE24-AB2C574EA144}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU - {0A34CA51-8B8C-41A1-BE24-AB2C574EA144}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU - {0A34CA51-8B8C-41A1-BE24-AB2C574EA144}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU - {0A34CA51-8B8C-41A1-BE24-AB2C574EA144}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU - {0A34CA51-8B8C-41A1-BE24-AB2C574EA144}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU - {0A34CA51-8B8C-41A1-BE24-AB2C574EA144}.RelWithDebInfo|x64.Build.0 = Release|Any CPU - {0A34CA51-8B8C-41A1-BE24-AB2C574EA144}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU - {0A34CA51-8B8C-41A1-BE24-AB2C574EA144}.RelWithDebInfo|x86.Build.0 = Release|Any CPU - {F9A69812-DC52-428D-9DB1-8B831A8FF776}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {F9A69812-DC52-428D-9DB1-8B831A8FF776}.Checked|Any CPU.Build.0 = Debug|Any CPU - {F9A69812-DC52-428D-9DB1-8B831A8FF776}.Checked|ARM.ActiveCfg = Debug|Any CPU - {F9A69812-DC52-428D-9DB1-8B831A8FF776}.Checked|ARM.Build.0 = Debug|Any CPU - {F9A69812-DC52-428D-9DB1-8B831A8FF776}.Checked|ARM64.ActiveCfg = Debug|Any CPU - {F9A69812-DC52-428D-9DB1-8B831A8FF776}.Checked|ARM64.Build.0 = Debug|Any CPU - {F9A69812-DC52-428D-9DB1-8B831A8FF776}.Checked|x64.ActiveCfg = Debug|Any CPU - {F9A69812-DC52-428D-9DB1-8B831A8FF776}.Checked|x64.Build.0 = Debug|Any CPU - {F9A69812-DC52-428D-9DB1-8B831A8FF776}.Checked|x86.ActiveCfg = Debug|Any CPU - {F9A69812-DC52-428D-9DB1-8B831A8FF776}.Checked|x86.Build.0 = Debug|Any CPU - {F9A69812-DC52-428D-9DB1-8B831A8FF776}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F9A69812-DC52-428D-9DB1-8B831A8FF776}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F9A69812-DC52-428D-9DB1-8B831A8FF776}.Debug|ARM.ActiveCfg = Debug|Any CPU - {F9A69812-DC52-428D-9DB1-8B831A8FF776}.Debug|ARM.Build.0 = Debug|Any CPU - {F9A69812-DC52-428D-9DB1-8B831A8FF776}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {F9A69812-DC52-428D-9DB1-8B831A8FF776}.Debug|ARM64.Build.0 = Debug|Any CPU - {F9A69812-DC52-428D-9DB1-8B831A8FF776}.Debug|x64.ActiveCfg = Debug|Any CPU - {F9A69812-DC52-428D-9DB1-8B831A8FF776}.Debug|x64.Build.0 = Debug|Any CPU - {F9A69812-DC52-428D-9DB1-8B831A8FF776}.Debug|x86.ActiveCfg = Debug|Any CPU - {F9A69812-DC52-428D-9DB1-8B831A8FF776}.Debug|x86.Build.0 = Debug|Any CPU - {F9A69812-DC52-428D-9DB1-8B831A8FF776}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F9A69812-DC52-428D-9DB1-8B831A8FF776}.Release|Any CPU.Build.0 = Release|Any CPU - {F9A69812-DC52-428D-9DB1-8B831A8FF776}.Release|ARM.ActiveCfg = Release|Any CPU - {F9A69812-DC52-428D-9DB1-8B831A8FF776}.Release|ARM.Build.0 = Release|Any CPU - {F9A69812-DC52-428D-9DB1-8B831A8FF776}.Release|ARM64.ActiveCfg = Release|Any CPU - {F9A69812-DC52-428D-9DB1-8B831A8FF776}.Release|ARM64.Build.0 = Release|Any CPU - {F9A69812-DC52-428D-9DB1-8B831A8FF776}.Release|x64.ActiveCfg = Release|Any CPU - {F9A69812-DC52-428D-9DB1-8B831A8FF776}.Release|x64.Build.0 = Release|Any CPU - {F9A69812-DC52-428D-9DB1-8B831A8FF776}.Release|x86.ActiveCfg = Release|Any CPU - {F9A69812-DC52-428D-9DB1-8B831A8FF776}.Release|x86.Build.0 = Release|Any CPU - {F9A69812-DC52-428D-9DB1-8B831A8FF776}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU - {F9A69812-DC52-428D-9DB1-8B831A8FF776}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU - {F9A69812-DC52-428D-9DB1-8B831A8FF776}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU - {F9A69812-DC52-428D-9DB1-8B831A8FF776}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU - {F9A69812-DC52-428D-9DB1-8B831A8FF776}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU - {F9A69812-DC52-428D-9DB1-8B831A8FF776}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU - {F9A69812-DC52-428D-9DB1-8B831A8FF776}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU - {F9A69812-DC52-428D-9DB1-8B831A8FF776}.RelWithDebInfo|x64.Build.0 = Release|Any CPU - {F9A69812-DC52-428D-9DB1-8B831A8FF776}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU - {F9A69812-DC52-428D-9DB1-8B831A8FF776}.RelWithDebInfo|x86.Build.0 = Release|Any CPU - {2F9AA5A9-D42A-42C6-B483-1B9284C62F91}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {2F9AA5A9-D42A-42C6-B483-1B9284C62F91}.Checked|Any CPU.Build.0 = Debug|Any CPU - {2F9AA5A9-D42A-42C6-B483-1B9284C62F91}.Checked|ARM.ActiveCfg = Debug|Any CPU - {2F9AA5A9-D42A-42C6-B483-1B9284C62F91}.Checked|ARM.Build.0 = Debug|Any CPU - {2F9AA5A9-D42A-42C6-B483-1B9284C62F91}.Checked|ARM64.ActiveCfg = Debug|Any CPU - {2F9AA5A9-D42A-42C6-B483-1B9284C62F91}.Checked|ARM64.Build.0 = Debug|Any CPU - {2F9AA5A9-D42A-42C6-B483-1B9284C62F91}.Checked|x64.ActiveCfg = Debug|Any CPU - {2F9AA5A9-D42A-42C6-B483-1B9284C62F91}.Checked|x64.Build.0 = Debug|Any CPU - {2F9AA5A9-D42A-42C6-B483-1B9284C62F91}.Checked|x86.ActiveCfg = Debug|Any CPU - {2F9AA5A9-D42A-42C6-B483-1B9284C62F91}.Checked|x86.Build.0 = Debug|Any CPU - {2F9AA5A9-D42A-42C6-B483-1B9284C62F91}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2F9AA5A9-D42A-42C6-B483-1B9284C62F91}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2F9AA5A9-D42A-42C6-B483-1B9284C62F91}.Debug|ARM.ActiveCfg = Debug|Any CPU - {2F9AA5A9-D42A-42C6-B483-1B9284C62F91}.Debug|ARM.Build.0 = Debug|Any CPU - {2F9AA5A9-D42A-42C6-B483-1B9284C62F91}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {2F9AA5A9-D42A-42C6-B483-1B9284C62F91}.Debug|ARM64.Build.0 = Debug|Any CPU - {2F9AA5A9-D42A-42C6-B483-1B9284C62F91}.Debug|x64.ActiveCfg = Debug|Any CPU - {2F9AA5A9-D42A-42C6-B483-1B9284C62F91}.Debug|x64.Build.0 = Debug|Any CPU - {2F9AA5A9-D42A-42C6-B483-1B9284C62F91}.Debug|x86.ActiveCfg = Debug|Any CPU - {2F9AA5A9-D42A-42C6-B483-1B9284C62F91}.Debug|x86.Build.0 = Debug|Any CPU - {2F9AA5A9-D42A-42C6-B483-1B9284C62F91}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2F9AA5A9-D42A-42C6-B483-1B9284C62F91}.Release|Any CPU.Build.0 = Release|Any CPU - {2F9AA5A9-D42A-42C6-B483-1B9284C62F91}.Release|ARM.ActiveCfg = Release|Any CPU - {2F9AA5A9-D42A-42C6-B483-1B9284C62F91}.Release|ARM.Build.0 = Release|Any CPU - {2F9AA5A9-D42A-42C6-B483-1B9284C62F91}.Release|ARM64.ActiveCfg = Release|Any CPU - {2F9AA5A9-D42A-42C6-B483-1B9284C62F91}.Release|ARM64.Build.0 = Release|Any CPU - {2F9AA5A9-D42A-42C6-B483-1B9284C62F91}.Release|x64.ActiveCfg = Release|Any CPU - {2F9AA5A9-D42A-42C6-B483-1B9284C62F91}.Release|x64.Build.0 = Release|Any CPU - {2F9AA5A9-D42A-42C6-B483-1B9284C62F91}.Release|x86.ActiveCfg = Release|Any CPU - {2F9AA5A9-D42A-42C6-B483-1B9284C62F91}.Release|x86.Build.0 = Release|Any CPU - {2F9AA5A9-D42A-42C6-B483-1B9284C62F91}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU - {2F9AA5A9-D42A-42C6-B483-1B9284C62F91}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU - {2F9AA5A9-D42A-42C6-B483-1B9284C62F91}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU - {2F9AA5A9-D42A-42C6-B483-1B9284C62F91}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU - {2F9AA5A9-D42A-42C6-B483-1B9284C62F91}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU - {2F9AA5A9-D42A-42C6-B483-1B9284C62F91}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU - {2F9AA5A9-D42A-42C6-B483-1B9284C62F91}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU - {2F9AA5A9-D42A-42C6-B483-1B9284C62F91}.RelWithDebInfo|x64.Build.0 = Release|Any CPU - {2F9AA5A9-D42A-42C6-B483-1B9284C62F91}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU - {2F9AA5A9-D42A-42C6-B483-1B9284C62F91}.RelWithDebInfo|x86.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {6C43BE85-F8C3-4D76-8050-F25CE953A7FD} = {C3072949-6D24-451B-A308-2F3621F858B0} - {41638A4C-0DAF-47ED-A774-ECBBAC0315D7} = {19FAB78C-3351-4911-8F0C-8C6056401740} - {C3072949-6D24-451B-A308-2F3621F858B0} = {41638A4C-0DAF-47ED-A774-ECBBAC0315D7} - {252E5845-8D4C-4306-9D8F-ED2E2F7005F6} = {C3072949-6D24-451B-A308-2F3621F858B0} - {179EF543-E30A-4428-ABA0-2E2621860173} = {C3072949-6D24-451B-A308-2F3621F858B0} - {447AC053-2E0A-4119-BD11-30A4A8E3F765} = {C3072949-6D24-451B-A308-2F3621F858B0} - {664F46A9-3C99-489B-AAB9-4CD3A430C425} = {C3072949-6D24-451B-A308-2F3621F858B0} - {0CB805C8-0B76-4B1D-8AAF-48535B180448} = {C3072949-6D24-451B-A308-2F3621F858B0} - {20251748-AA7B-45BE-ADAA-C9375F5CC80F} = {C3072949-6D24-451B-A308-2F3621F858B0} - {DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288} = {C3072949-6D24-451B-A308-2F3621F858B0} - {73EA5188-1E4F-42D8-B63E-F1B878A4EB63} = {C3072949-6D24-451B-A308-2F3621F858B0} - {B50D14DB-8EE5-47BD-B412-62FA5C693CC7} = {C3072949-6D24-451B-A308-2F3621F858B0} - {112FE2A7-3FD2-4496-8A14-171898AD5CF5} = {C3072949-6D24-451B-A308-2F3621F858B0} - {8C27904A-47C0-44C7-B191-88FF34580CBE} = {C3072949-6D24-451B-A308-2F3621F858B0} - {84881FB8-37E1-4D9B-B27E-9831C30DCC04} = {C3072949-6D24-451B-A308-2F3621F858B0} - {0A34CA51-8B8C-41A1-BE24-AB2C574EA144} = {C3072949-6D24-451B-A308-2F3621F858B0} - {F9A69812-DC52-428D-9DB1-8B831A8FF776} = {C3072949-6D24-451B-A308-2F3621F858B0} - {2F9AA5A9-D42A-42C6-B483-1B9284C62F91} = {C3072949-6D24-451B-A308-2F3621F858B0} - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {46465737-C938-44FC-BE1A-4CE139EBB5E0} - EndGlobalSection -EndGlobal diff --git a/debuggees.slnx b/debuggees.slnx new file mode 100644 index 0000000000..4c7e2688af --- /dev/null +++ b/debuggees.slnx @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/diagnostics.sln b/diagnostics.sln deleted file mode 100644 index 91ac02996f..0000000000 --- a/diagnostics.sln +++ /dev/null @@ -1,2393 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.3.32519.111 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Diagnostics.TestHelpers", "src\Microsoft.Diagnostics.TestHelpers\Microsoft.Diagnostics.TestHelpers.csproj", "{730C1201-1848-4F1E-8C1F-6316FB886C35}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SOS", "SOS", "{41638A4C-0DAF-47ED-A774-ECBBAC0315D7}" - ProjectSection(SolutionItems) = preProject - src\SOS\CMakeLists.txt = src\SOS\CMakeLists.txt - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SOS.UnitTests", "src\SOS\SOS.UnitTests\SOS.UnitTests.csproj", "{1532DB3C-7DCD-45C6-B697-62B8378A16A2}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lldbplugin", "src\SOS\lldbplugin\lldbplugin.vcxproj", "{D52C65C4-2C7D-45E6-9F5C-6F3A96796018}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{19FAB78C-3351-4911-8F0C-8C6056401740}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tools", "Tools", "{B62728C8-1267-4043-B46F-5537BBAEC692}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "dotnet-trace", "src\Tools\dotnet-trace\dotnet-trace.csproj", "{718350FA-2DD9-4950-BA41-D7A7F66DAC91}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "dotnet-dump", "src\Tools\dotnet-dump\dotnet-dump.csproj", "{43D41DE9-7CCC-4DCB-A68A-B9099E538125}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Strike", "src\SOS\Strike\Strike.vcxproj", "{41F59D85-FC36-3015-861B-F177863252BC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SOS.InstallHelper", "src\SOS\SOS.InstallHelper\SOS.InstallHelper.csproj", "{1F012743-941B-4915-8C55-02097894CF3F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "dotnet-sos", "src\Tools\dotnet-sos\dotnet-sos.csproj", "{41351955-16D5-48D7-AF4C-AF25F5FB2E78}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SOS.Hosting", "src\SOS\SOS.Hosting\SOS.Hosting.csproj", "{ED27F39F-DF5C-4E22-87E0-EC5B5873B503}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Diagnostics.Repl", "src\Microsoft.Diagnostics.Repl\Microsoft.Diagnostics.Repl.csproj", "{90CF2633-58F0-44EE-943B-D70207455F20}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "dotnet-counters", "src\Tools\dotnet-counters\dotnet-counters.csproj", "{2A9B5988-982F-4E26-9E44-D38AC5978C30}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SOS.Package", "src\SOS\SOS.Package\SOS.Package.csproj", "{234416E9-EA5F-4018-AC34-67682C5D3E04}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Diagnostics.DebugServices", "src\Microsoft.Diagnostics.DebugServices\Microsoft.Diagnostics.DebugServices.csproj", "{A1CE682A-12C4-4FF9-B864-A9A15A8726D2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SOS.Symbol.Package", "src\SOS\SOS.Package\SOS.Symbol.Package.csproj", "{410394E0-7F4F-42D5-B5FA-30956F44ACBC}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{03479E19-3F18-49A6-910A-F5041E27E7C0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DotnetTrace.UnitTests", "src\tests\dotnet-trace\DotnetTrace.UnitTests.csproj", "{AEDCCF5B-5AD0-4D64-BF73-5CF468E07D22}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "dotnet-gcdump", "src\Tools\dotnet-gcdump\dotnet-gcdump.csproj", "{936678B3-3392-4F4F-943C-B6A4BFCBAADC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DotnetCounters.UnitTests", "src\tests\dotnet-counters\DotnetCounters.UnitTests.csproj", "{E5A7DC6C-BF8D-418A-BCBD-094EB748FA82}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Diagnostics.NETCore.Client", "src\Microsoft.Diagnostics.NETCore.Client\Microsoft.Diagnostics.NETCore.Client.csproj", "{D8BE9C81-194E-43E5-82CF-2080892FBDE7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Diagnostics.NETCore.Client.UnitTests", "src\tests\Microsoft.Diagnostics.NETCore.Client\Microsoft.Diagnostics.NETCore.Client.UnitTests.csproj", "{6F4DD2F8-1C7B-4A87-B7E5-1BEE9F5AC128}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tracee", "src\tests\Tracee\Tracee.csproj", "{C79D6069-2C18-48CB-846E-71F7168C2F7D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EventPipe.UnitTests", "src\tests\eventpipe\EventPipe.UnitTests.csproj", "{CED9ABBA-861E-4C0A-9359-22351208EF27}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Common", "Common", "{298AE119-6625-4604-BDE5-0765DC34C856}" - ProjectSection(SolutionItems) = preProject - src\Tools\Common\CommandExtensions.cs = src\Tools\Common\CommandExtensions.cs - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Commands", "Commands", "{C457CBCD-3A8D-4402-9A2B-693A0390D3F9}" - ProjectSection(SolutionItems) = preProject - src\Tools\Common\Commands\ProcessStatus.cs = src\Tools\Common\Commands\ProcessStatus.cs - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Diagnostics.Monitoring", "src\Microsoft.Diagnostics.Monitoring\Microsoft.Diagnostics.Monitoring.csproj", "{CFCF90E5-91CF-44FD-819D-97F530AEF769}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "inc", "inc", "{41BDFD6D-D165-4D67-BEF6-4E539040D30A}" - ProjectSection(SolutionItems) = preProject - src\shared\inc\arrayholder.h = src\shared\inc\arrayholder.h - src\shared\inc\bitvector.h = src\shared\inc\bitvector.h - src\shared\inc\check.h = src\shared\inc\check.h - src\shared\inc\check.inl = src\shared\inc\check.inl - src\shared\inc\clrdata.idl = src\shared\inc\clrdata.idl - src\shared\inc\clrhost.h = src\shared\inc\clrhost.h - src\shared\inc\clrinternal.idl = src\shared\inc\clrinternal.idl - src\shared\inc\clrnt.h = src\shared\inc\clrnt.h - src\shared\inc\clrprivappxhosting.idl = src\shared\inc\clrprivappxhosting.idl - src\shared\inc\clrprivbinding.idl = src\shared\inc\clrprivbinding.idl - src\shared\inc\clrprivhosting.idl = src\shared\inc\clrprivhosting.idl - src\shared\inc\clrprivruntimebinders.idl = src\shared\inc\clrprivruntimebinders.idl - src\shared\inc\clrtypes.h = src\shared\inc\clrtypes.h - src\shared\inc\CMakeLists.txt = src\shared\inc\CMakeLists.txt - src\shared\inc\contract.h = src\shared\inc\contract.h - src\shared\inc\contract.inl = src\shared\inc\contract.inl - src\shared\inc\cor.h = src\shared\inc\cor.h - src\shared\inc\cordebug.idl = src\shared\inc\cordebug.idl - src\shared\inc\coreclrhost.h = src\shared\inc\coreclrhost.h - src\shared\inc\corexcep.h = src\shared\inc\corexcep.h - src\shared\inc\corhdr.h = src\shared\inc\corhdr.h - src\shared\inc\corhlpr.cpp = src\shared\inc\corhlpr.cpp - src\shared\inc\corhlpr.h = src\shared\inc\corhlpr.h - src\shared\inc\corhlprpriv.h = src\shared\inc\corhlprpriv.h - src\shared\inc\corjitflags.h = src\shared\inc\corjitflags.h - src\shared\inc\corprof.idl = src\shared\inc\corprof.idl - src\shared\inc\corpub.idl = src\shared\inc\corpub.idl - src\shared\inc\corsym.idl = src\shared\inc\corsym.idl - src\shared\inc\cortypeinfo.h = src\shared\inc\cortypeinfo.h - src\shared\inc\crosscomp.h = src\shared\inc\crosscomp.h - src\shared\inc\crsttypes.h = src\shared\inc\crsttypes.h - src\shared\inc\crtwrap.h = src\shared\inc\crtwrap.h - src\shared\inc\daccess.h = src\shared\inc\daccess.h - src\shared\inc\dacprivate.h = src\shared\inc\dacprivate.h - src\shared\inc\dbgenginemetrics.h = src\shared\inc\dbgenginemetrics.h - src\shared\inc\dbgportable.h = src\shared\inc\dbgportable.h - src\shared\inc\dbgutil.h = src\shared\inc\dbgutil.h - src\shared\inc\debugmacros.h = src\shared\inc\debugmacros.h - src\shared\inc\debugmacrosext.h = src\shared\inc\debugmacrosext.h - src\shared\inc\debugreturn.h = src\shared\inc\debugreturn.h - src\shared\inc\entrypoints.h = src\shared\inc\entrypoints.h - src\shared\inc\ex.h = src\shared\inc\ex.h - src\shared\inc\fstring.h = src\shared\inc\fstring.h - src\shared\inc\fusion.idl = src\shared\inc\fusion.idl - src\shared\inc\gcdecoder.cpp = src\shared\inc\gcdecoder.cpp - src\shared\inc\gcdesc.h = src\shared\inc\gcdesc.h - src\shared\inc\gcdump.h = src\shared\inc\gcdump.h - src\shared\inc\gcinfo.h = src\shared\inc\gcinfo.h - src\shared\inc\gcinfodecoder.h = src\shared\inc\gcinfodecoder.h - src\shared\inc\gcinfodumper.h = src\shared\inc\gcinfodumper.h - src\shared\inc\gcinfotypes.h = src\shared\inc\gcinfotypes.h - src\shared\inc\gcmsg.inl = src\shared\inc\gcmsg.inl - src\shared\inc\genericstackprobe.h = src\shared\inc\genericstackprobe.h - src\shared\inc\getproductversionnumber.h = src\shared\inc\getproductversionnumber.h - src\shared\inc\hillclimbing.h = src\shared\inc\hillclimbing.h - src\shared\inc\holder.h = src\shared\inc\holder.h - src\shared\inc\iallocator.h = src\shared\inc\iallocator.h - src\shared\inc\iterator.h = src\shared\inc\iterator.h - src\shared\inc\livedatatarget.h = src\shared\inc\livedatatarget.h - src\shared\inc\log.h = src\shared\inc\log.h - src\shared\inc\loglf.h = src\shared\inc\loglf.h - src\shared\inc\longfilepathwrappers.h = src\shared\inc\longfilepathwrappers.h - src\shared\inc\mdcommon.h = src\shared\inc\mdcommon.h - src\shared\inc\memoryrange.h = src\shared\inc\memoryrange.h - src\shared\inc\metadata.h = src\shared\inc\metadata.h - src\shared\inc\metahost.idl = src\shared\inc\metahost.idl - src\shared\inc\MSCOREE.IDL = src\shared\inc\MSCOREE.IDL - src\shared\inc\mscorsvc.idl = src\shared\inc\mscorsvc.idl - src\shared\inc\msodw.h = src\shared\inc\msodw.h - src\shared\inc\new.hpp = src\shared\inc\new.hpp - src\shared\inc\nibblemapmacros.h = src\shared\inc\nibblemapmacros.h - src\shared\inc\nsutilpriv.h = src\shared\inc\nsutilpriv.h - src\shared\inc\opcode.def = src\shared\inc\opcode.def - src\shared\inc\openum.h = src\shared\inc\openum.h - src\shared\inc\ostype.h = src\shared\inc\ostype.h - src\shared\inc\palclr.h = src\shared\inc\palclr.h - src\shared\inc\palclr_win.h = src\shared\inc\palclr_win.h - src\shared\inc\pedecoder.h = src\shared\inc\pedecoder.h - src\shared\inc\pedecoder.inl = src\shared\inc\pedecoder.inl - src\shared\inc\predeftlsslot.h = src\shared\inc\predeftlsslot.h - src\shared\inc\random.h = src\shared\inc\random.h - src\shared\inc\readytorun.h = src\shared\inc\readytorun.h - src\shared\inc\readytoruninstructionset.h = src\shared\inc\readytoruninstructionset.h - src\shared\inc\regdisp.h = src\shared\inc\regdisp.h - src\shared\inc\registrywrapper.h = src\shared\inc\registrywrapper.h - src\shared\inc\resource.h = src\shared\inc\resource.h - src\shared\inc\runtimeinfo.h = src\shared\inc\runtimeinfo.h - src\shared\inc\safemath.h = src\shared\inc\safemath.h - src\shared\inc\safewrap.h = src\shared\inc\safewrap.h - src\shared\inc\sbuffer.h = src\shared\inc\sbuffer.h - src\shared\inc\sbuffer.inl = src\shared\inc\sbuffer.inl - src\shared\inc\securityutil.h = src\shared\inc\securityutil.h - src\shared\inc\securitywrapper.h = src\shared\inc\securitywrapper.h - src\shared\inc\sigparser.h = src\shared\inc\sigparser.h - src\shared\inc\sospriv.idl = src\shared\inc\sospriv.idl - src\shared\inc\sstring.h = src\shared\inc\sstring.h - src\shared\inc\sstring.inl = src\shared\inc\sstring.inl - src\shared\inc\stacktrace.h = src\shared\inc\stacktrace.h - src\shared\inc\staticcontract.h = src\shared\inc\staticcontract.h - src\shared\inc\static_assert.h = src\shared\inc\static_assert.h - src\shared\inc\stdmacros.h = src\shared\inc\stdmacros.h - src\shared\inc\stresslog.h = src\shared\inc\stresslog.h - src\shared\inc\switches.h = src\shared\inc\switches.h - src\shared\inc\tls.h = src\shared\inc\tls.h - src\shared\inc\unreachable.h = src\shared\inc\unreachable.h - src\shared\inc\utilcode.h = src\shared\inc\utilcode.h - src\shared\inc\volatile.h = src\shared\inc\volatile.h - src\shared\inc\warningcontrol.h = src\shared\inc\warningcontrol.h - src\shared\inc\win64unwind.h = src\shared\inc\win64unwind.h - src\shared\inc\winwrap.h = src\shared\inc\winwrap.h - src\shared\inc\xclrdata.idl = src\shared\inc\xclrdata.idl - src\shared\inc\xcordebug.idl = src\shared\inc\xcordebug.idl - src\shared\inc\yieldprocessornormalized.h = src\shared\inc\yieldprocessornormalized.h - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "llvm", "llvm", "{06730767-421B-465F-BB63-A3A07D72D7A2}" - ProjectSection(SolutionItems) = preProject - src\shared\inc\llvm\Dwarf.def = src\shared\inc\llvm\Dwarf.def - src\shared\inc\llvm\Dwarf.h = src\shared\inc\llvm\Dwarf.h - src\shared\inc\llvm\ELF.h = src\shared\inc\llvm\ELF.h - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Diagnostics.Monitoring.UnitTests", "src\tests\Microsoft.Diagnostics.Monitoring\Microsoft.Diagnostics.Monitoring.UnitTests.csproj", "{6419BA04-6F1A-4D2F-8DE4-5C359E0364A3}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EventPipeTracee", "src\tests\EventPipeTracee\EventPipeTracee.csproj", "{870A7AD0-B808-491E-92F6-433BE990B374}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Diagnostics.Monitoring.EventPipe", "src\Microsoft.Diagnostics.Monitoring.EventPipe\Microsoft.Diagnostics.Monitoring.EventPipe.csproj", "{E1E2C698-E247-4D48-AE01-542B43744ACB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Diagnostics.Monitoring.EventPipe.UnitTests", "src\tests\Microsoft.Diagnostics.Monitoring.EventPipe\Microsoft.Diagnostics.Monitoring.EventPipe.UnitTests.csproj", "{A58B7F72-E9DF-4962-9E15-300EF4C53ABB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "dotnet-stack", "src\Tools\dotnet-stack\dotnet-stack.csproj", "{642E6E67-8A84-473D-9507-C302BF10989D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "StackTracee", "src\tests\StackTracee\StackTracee.csproj", "{57EB54E7-521A-4CDE-9DAE-8D6AE90A20BB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Diagnostics.DebugServices.Implementation", "src\Microsoft.Diagnostics.DebugServices.Implementation\Microsoft.Diagnostics.DebugServices.Implementation.csproj", "{1F23F5DA-F766-445F-88FF-86137BDC2709}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "inc", "inc", "{BE45F03E-D700-404F-A890-8ED7D8969958}" - ProjectSection(SolutionItems) = preProject - src\SOS\inc\clrma.h = src\SOS\inc\clrma.h - src\SOS\inc\clrma.idl = src\SOS\inc\clrma.idl - src\SOS\inc\clrmaservice.h = src\SOS\inc\clrmaservice.h - src\SOS\inc\debuggerservices.h = src\SOS\inc\debuggerservices.h - src\SOS\inc\host.h = src\SOS\inc\host.h - src\SOS\inc\hostservices.h = src\SOS\inc\hostservices.h - src\SOS\inc\lldbservices.h = src\SOS\inc\lldbservices.h - src\SOS\inc\outputservice.h = src\SOS\inc\outputservice.h - src\SOS\inc\remotememoryservice.h = src\SOS\inc\remotememoryservice.h - src\SOS\inc\runtime.h = src\SOS\inc\runtime.h - src\SOS\inc\specialdiaginfo.h = src\SOS\inc\specialdiaginfo.h - src\SOS\inc\specialthreadinfo.h = src\SOS\inc\specialthreadinfo.h - src\SOS\inc\symbolservice.h = src\SOS\inc\symbolservice.h - src\SOS\inc\target.h = src\SOS\inc\target.h - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SOS.Extensions", "src\SOS\SOS.Extensions\SOS.Extensions.csproj", "{729ED9E8-C92F-4E0E-B8A7-CC2C1374C751}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "extensions", "src\SOS\extensions\extensions.vcxproj", "{EEC90A42-CDCD-4EE3-B47D-C109D604E7E2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Diagnostics.ExtensionCommands", "src\Microsoft.Diagnostics.ExtensionCommands\Microsoft.Diagnostics.ExtensionCommands.csproj", "{5FC66A16-41E9-4D22-A44C-FEBB7DCCAAF8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Diagnostics.DebugServices.UnitTests", "src\tests\Microsoft.Diagnostics.DebugServices.UnitTests\Microsoft.Diagnostics.DebugServices.UnitTests.csproj", "{064BC7DD-D44C-400E-9215-7546E092AB98}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ExitCodeTracee", "src\tests\ExitCodeTracee\ExitCodeTracee.csproj", "{61F73DD0-F346-4D7A-AB12-63415B4EEEE1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "dotnet-dsrouter", "src\Tools\dotnet-dsrouter\dotnet-dsrouter.csproj", "{2BD55143-B102-4FEC-84AD-DC3B330FA9AC}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dbgshim", "src\dbgshim\dbgshim.vcxproj", "{BD779298-8631-3F5D-AA59-82897E5454A7}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "shared", "shared", "{7852EDE4-93DF-4DB1-8A86-C521703811AF}" - ProjectSection(SolutionItems) = preProject - src\shared\README.txt = src\shared\README.txt - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gcdump", "src\shared\gcdump\gcdump.vcxproj", "{20EBC3C4-917C-402D-B778-9A6E3742BF5A}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "utilcode", "src\shared\utilcode\utilcode.vcxproj", "{8C35FEF8-1101-38F6-ACD0-462A1EA53A7D}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "minipal", "minipal", "{795B7A50-1B1F-406E-94E0-F9B35104EF22}" - ProjectSection(SolutionItems) = preProject - src\shared\minipal\CMakeLists.txt = src\shared\minipal\CMakeLists.txt - src\shared\minipal\dn-u16.h = src\shared\minipal\dn-u16.h - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DbgShim.UnitTests", "src\tests\DbgShim.UnitTests\DbgShim.UnitTests.csproj", "{DD60B7C4-BECC-4C7D-A53B-FCDD4C92B728}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CommonTestRunner", "src\tests\CommonTestRunner\CommonTestRunner.csproj", "{DFF48CB6-4504-41C6-A8F1-F4A3D316D49F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DotnetStack.UnitTests", "src\tests\dotnet-stack\DotnetStack.UnitTests.csproj", "{E8F133F8-4D20-475D-9D16-2BA236DAB65F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Diagnostics.WebSocketServer", "src\Microsoft.Diagnostics.WebSocketServer\Microsoft.Diagnostics.WebSocketServer.csproj", "{1043FA82-37CC-4809-80DC-C1EB06A55133}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestExtension", "src\tests\TestExtension\TestExtension.csproj", "{C6EB3C21-FDFF-4CF0-BE3A-3D1A3924408E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.FileFormats", "src\Microsoft.FileFormats\Microsoft.FileFormats.csproj", "{830A70D3-E604-467A-9846-6C5DF5BD3976}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.SymbolStore", "src\Microsoft.SymbolStore\Microsoft.SymbolStore.csproj", "{438A539E-6AF2-4402-BBA0-E2AAC71A28A1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "dotnet-symbol", "src\Tools\dotnet-symbol\dotnet-symbol.csproj", "{B6C33C85-08A7-47D9-BEA8-36164BB3653B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestHelpers", "src\tests\TestHelpers\TestHelpers.csproj", "{C32F2858-6B5F-4967-ABC4-852B6399C4AE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.FileFormats.UnitTests", "src\tests\Microsoft.FileFormats.UnitTests\Microsoft.FileFormats.UnitTests.csproj", "{44F93947-8FD4-4946-8AE5-EF6D25970CC7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.SymbolStore.UnitTests", "src\tests\Microsoft.SymbolStore.UnitTests\Microsoft.SymbolStore.UnitTests.csproj", "{C2422836-BA25-4751-9060-7C7890085869}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.SymbolManifestGenerator", "src\Microsoft.SymbolManifestGenerator\Microsoft.SymbolManifestGenerator.csproj", "{28B55114-88C0-44B6-BBD8-50C14ED59EE2}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dbgutil", "src\shared\debug\dbgutil\dbgutil.vcxproj", "{A9A7C879-C320-3327-BB84-16E1322E17AE}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "debug", "debug", "{00D9021E-A202-4BCB-9A59-13D5BEEBF423}" - ProjectSection(SolutionItems) = preProject - src\shared\debug\CMakeLists.txt = src\shared\debug\CMakeLists.txt - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "inc", "inc", "{19663AE5-3EEA-472E-B157-37C2C7C6BACB}" - ProjectSection(SolutionItems) = preProject - src\shared\debug\inc\dbgtargetcontext.h = src\shared\debug\inc\dbgtargetcontext.h - src\shared\debug\inc\dbgutil.h = src\shared\debug\inc\dbgutil.h - src\shared\debug\inc\runtimeinfo.h = src\shared\debug\inc\runtimeinfo.h - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "dump", "dump", "{3B26AB4F-8129-4DAF-8BB0-A6075663F6D2}" - ProjectSection(SolutionItems) = preProject - src\shared\debug\inc\dump\dumpcommon.h = src\shared\debug\inc\dump\dumpcommon.h - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Unix", "Unix", "{8944D9BF-69ED-4798-B533-559CAB011B07}" - ProjectSection(SolutionItems) = preProject - src\shared\minipal\Unix\CMakeLists.txt = src\shared\minipal\Unix\CMakeLists.txt - src\shared\minipal\Unix\dn-u16.cpp = src\shared\minipal\Unix\dn-u16.cpp - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Windows", "Windows", "{06FB18BC-F4DD-4DB9-A566-551254CD1064}" - ProjectSection(SolutionItems) = preProject - src\shared\minipal\Windows\CMakeLists.txt = src\shared\minipal\Windows\CMakeLists.txt - src\shared\minipal\Windows\dn-u16.cpp = src\shared\minipal\Windows\dn-u16.cpp - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "native", "native", "{641F00F0-2693-451B-A96A-13E4E115BF0F}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "minipal", "minipal", "{D9A91544-CDF8-4C68-BAD2-47F4968A8652}" - ProjectSection(SolutionItems) = preProject - src\shared\native\minipal\asansupport.cpp = src\shared\native\minipal\asansupport.cpp - src\shared\native\minipal\configure.cmake = src\shared\native\minipal\configure.cmake - src\shared\native\minipal\cpufeatures.c = src\shared\native\minipal\cpufeatures.c - src\shared\native\minipal\cpufeatures.h = src\shared\native\minipal\cpufeatures.h - src\shared\native\minipal\cpuid.h = src\shared\native\minipal\cpuid.h - src\shared\native\minipal\entrypoints.h = src\shared\native\minipal\entrypoints.h - src\shared\native\minipal\getexepath.h = src\shared\native\minipal\getexepath.h - src\shared\native\minipal\minipalconfig.h.in = src\shared\native\minipal\minipalconfig.h.in - src\shared\native\minipal\random.c = src\shared\native\minipal\random.c - src\shared\native\minipal\random.h = src\shared\native\minipal\random.h - src\shared\native\minipal\strings.h = src\shared\native\minipal\strings.h - src\shared\native\minipal\time.c = src\shared\native\minipal\time.c - src\shared\native\minipal\time.h = src\shared\native\minipal\time.h - src\shared\native\minipal\types.h = src\shared\native\minipal\types.h - src\shared\native\minipal\unicodedata.c = src\shared\native\minipal\unicodedata.c - src\shared\native\minipal\utf8.c = src\shared\native\minipal\utf8.c - src\shared\native\minipal\utf8.h = src\shared\native\minipal\utf8.h - src\shared\native\minipal\utils.h = src\shared\native\minipal\utils.h - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "inc", "inc", "{9E51C821-4095-4250-BD8A-2A29396DB1B4}" - ProjectSection(SolutionItems) = preProject - src\inc\corcompile.h = src\inc\corcompile.h - src\inc\ntimageex.h = src\inc\ntimageex.h - src\inc\releaseholder.h = src\inc\releaseholder.h - src\inc\stacktrace.h = src\inc\stacktrace.h - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "rt", "rt", "{D2D76252-D225-4B79-9DDB-A36867A4720E}" - ProjectSection(SolutionItems) = preProject - src\inc\rt\intsafe.h = src\inc\rt\intsafe.h - src\inc\rt\oaidl.h = src\inc\rt\oaidl.h - src\inc\rt\psapi.h = src\inc\rt\psapi.h - src\inc\rt\tchar.h = src\inc\rt\tchar.h - src\inc\rt\tlhelp32.h = src\inc\rt\tlhelp32.h - src\inc\rt\winapifamily.h = src\inc\rt\winapifamily.h - src\inc\rt\winternl.h = src\inc\rt\winternl.h - src\inc\rt\winver.h = src\inc\rt\winver.h - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Checked|Any CPU = Checked|Any CPU - Checked|ARM = Checked|ARM - Checked|ARM64 = Checked|ARM64 - Checked|x64 = Checked|x64 - Checked|x86 = Checked|x86 - Debug|Any CPU = Debug|Any CPU - Debug|ARM = Debug|ARM - Debug|ARM64 = Debug|ARM64 - Debug|x64 = Debug|x64 - Debug|x86 = Debug|x86 - Release|Any CPU = Release|Any CPU - Release|ARM = Release|ARM - Release|ARM64 = Release|ARM64 - Release|x64 = Release|x64 - Release|x86 = Release|x86 - RelWithDebInfo|Any CPU = RelWithDebInfo|Any CPU - RelWithDebInfo|ARM = RelWithDebInfo|ARM - RelWithDebInfo|ARM64 = RelWithDebInfo|ARM64 - RelWithDebInfo|x64 = RelWithDebInfo|x64 - RelWithDebInfo|x86 = RelWithDebInfo|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {730C1201-1848-4F1E-8C1F-6316FB886C35}.Checked|Any CPU.ActiveCfg = Release|Any CPU - {730C1201-1848-4F1E-8C1F-6316FB886C35}.Checked|Any CPU.Build.0 = Release|Any CPU - {730C1201-1848-4F1E-8C1F-6316FB886C35}.Checked|ARM.ActiveCfg = Release|Any CPU - {730C1201-1848-4F1E-8C1F-6316FB886C35}.Checked|ARM.Build.0 = Release|Any CPU - {730C1201-1848-4F1E-8C1F-6316FB886C35}.Checked|ARM64.ActiveCfg = Release|Any CPU - {730C1201-1848-4F1E-8C1F-6316FB886C35}.Checked|ARM64.Build.0 = Release|Any CPU - {730C1201-1848-4F1E-8C1F-6316FB886C35}.Checked|x64.ActiveCfg = Release|Any CPU - {730C1201-1848-4F1E-8C1F-6316FB886C35}.Checked|x64.Build.0 = Release|Any CPU - {730C1201-1848-4F1E-8C1F-6316FB886C35}.Checked|x86.ActiveCfg = Release|Any CPU - {730C1201-1848-4F1E-8C1F-6316FB886C35}.Checked|x86.Build.0 = Release|Any CPU - {730C1201-1848-4F1E-8C1F-6316FB886C35}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {730C1201-1848-4F1E-8C1F-6316FB886C35}.Debug|Any CPU.Build.0 = Debug|Any CPU - {730C1201-1848-4F1E-8C1F-6316FB886C35}.Debug|ARM.ActiveCfg = Debug|Any CPU - {730C1201-1848-4F1E-8C1F-6316FB886C35}.Debug|ARM.Build.0 = Debug|Any CPU - {730C1201-1848-4F1E-8C1F-6316FB886C35}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {730C1201-1848-4F1E-8C1F-6316FB886C35}.Debug|ARM64.Build.0 = Debug|Any CPU - {730C1201-1848-4F1E-8C1F-6316FB886C35}.Debug|x64.ActiveCfg = Debug|Any CPU - {730C1201-1848-4F1E-8C1F-6316FB886C35}.Debug|x64.Build.0 = Debug|Any CPU - {730C1201-1848-4F1E-8C1F-6316FB886C35}.Debug|x86.ActiveCfg = Debug|Any CPU - {730C1201-1848-4F1E-8C1F-6316FB886C35}.Debug|x86.Build.0 = Debug|Any CPU - {730C1201-1848-4F1E-8C1F-6316FB886C35}.Release|Any CPU.ActiveCfg = Release|Any CPU - {730C1201-1848-4F1E-8C1F-6316FB886C35}.Release|Any CPU.Build.0 = Release|Any CPU - {730C1201-1848-4F1E-8C1F-6316FB886C35}.Release|ARM.ActiveCfg = Release|Any CPU - {730C1201-1848-4F1E-8C1F-6316FB886C35}.Release|ARM.Build.0 = Release|Any CPU - {730C1201-1848-4F1E-8C1F-6316FB886C35}.Release|ARM64.ActiveCfg = Release|Any CPU - {730C1201-1848-4F1E-8C1F-6316FB886C35}.Release|ARM64.Build.0 = Release|Any CPU - {730C1201-1848-4F1E-8C1F-6316FB886C35}.Release|x64.ActiveCfg = Release|Any CPU - {730C1201-1848-4F1E-8C1F-6316FB886C35}.Release|x64.Build.0 = Release|Any CPU - {730C1201-1848-4F1E-8C1F-6316FB886C35}.Release|x86.ActiveCfg = Release|Any CPU - {730C1201-1848-4F1E-8C1F-6316FB886C35}.Release|x86.Build.0 = Release|Any CPU - {730C1201-1848-4F1E-8C1F-6316FB886C35}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU - {730C1201-1848-4F1E-8C1F-6316FB886C35}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU - {730C1201-1848-4F1E-8C1F-6316FB886C35}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU - {730C1201-1848-4F1E-8C1F-6316FB886C35}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU - {730C1201-1848-4F1E-8C1F-6316FB886C35}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU - {730C1201-1848-4F1E-8C1F-6316FB886C35}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU - {730C1201-1848-4F1E-8C1F-6316FB886C35}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU - {730C1201-1848-4F1E-8C1F-6316FB886C35}.RelWithDebInfo|x64.Build.0 = Release|Any CPU - {730C1201-1848-4F1E-8C1F-6316FB886C35}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU - {730C1201-1848-4F1E-8C1F-6316FB886C35}.RelWithDebInfo|x86.Build.0 = Release|Any CPU - {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.Checked|Any CPU.ActiveCfg = Release|Any CPU - {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.Checked|Any CPU.Build.0 = Release|Any CPU - {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.Checked|ARM.ActiveCfg = Release|Any CPU - {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.Checked|ARM.Build.0 = Release|Any CPU - {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.Checked|ARM64.ActiveCfg = Release|Any CPU - {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.Checked|ARM64.Build.0 = Release|Any CPU - {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.Checked|x64.ActiveCfg = Release|Any CPU - {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.Checked|x64.Build.0 = Release|Any CPU - {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.Checked|x86.ActiveCfg = Release|Any CPU - {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.Checked|x86.Build.0 = Release|Any CPU - {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.Debug|ARM.ActiveCfg = Debug|Any CPU - {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.Debug|ARM.Build.0 = Debug|Any CPU - {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.Debug|ARM64.Build.0 = Debug|Any CPU - {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.Debug|x64.ActiveCfg = Debug|Any CPU - {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.Debug|x64.Build.0 = Debug|Any CPU - {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.Debug|x86.ActiveCfg = Debug|Any CPU - {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.Debug|x86.Build.0 = Debug|Any CPU - {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.Release|Any CPU.Build.0 = Release|Any CPU - {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.Release|ARM.ActiveCfg = Release|Any CPU - {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.Release|ARM.Build.0 = Release|Any CPU - {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.Release|ARM64.ActiveCfg = Release|Any CPU - {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.Release|ARM64.Build.0 = Release|Any CPU - {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.Release|x64.ActiveCfg = Release|Any CPU - {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.Release|x64.Build.0 = Release|Any CPU - {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.Release|x86.ActiveCfg = Release|Any CPU - {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.Release|x86.Build.0 = Release|Any CPU - {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU - {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU - {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU - {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU - {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU - {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU - {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU - {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.RelWithDebInfo|x64.Build.0 = Release|Any CPU - {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU - {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.RelWithDebInfo|x86.Build.0 = Release|Any CPU - {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.Checked|Any CPU.ActiveCfg = Release|x64 - {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.Checked|Any CPU.Build.0 = Release|x64 - {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.Checked|ARM.ActiveCfg = Release|x64 - {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.Checked|ARM.Build.0 = Release|x64 - {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.Checked|ARM64.ActiveCfg = Release|x64 - {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.Checked|ARM64.Build.0 = Release|x64 - {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.Checked|x64.ActiveCfg = Release|x64 - {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.Checked|x64.Build.0 = Release|x64 - {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.Checked|x86.ActiveCfg = Release|x86 - {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.Checked|x86.Build.0 = Release|x86 - {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.Debug|Any CPU.ActiveCfg = Debug|x64 - {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.Debug|ARM.ActiveCfg = Debug|x86 - {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.Debug|ARM64.ActiveCfg = Debug|x86 - {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.Debug|x64.ActiveCfg = Debug|x64 - {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.Debug|x64.Build.0 = Debug|x64 - {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.Debug|x86.ActiveCfg = Debug|x86 - {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.Debug|x86.Build.0 = Debug|x86 - {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.Release|Any CPU.ActiveCfg = Release|x86 - {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.Release|ARM.ActiveCfg = Release|x86 - {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.Release|ARM64.ActiveCfg = Release|x86 - {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.Release|x64.ActiveCfg = Release|x64 - {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.Release|x86.ActiveCfg = Release|x86 - {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.RelWithDebInfo|Any CPU.ActiveCfg = Release|x64 - {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.RelWithDebInfo|Any CPU.Build.0 = Release|x64 - {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.RelWithDebInfo|ARM.ActiveCfg = Release|x64 - {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.RelWithDebInfo|ARM.Build.0 = Release|x64 - {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.RelWithDebInfo|ARM64.ActiveCfg = Release|x64 - {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.RelWithDebInfo|ARM64.Build.0 = Release|x64 - {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.RelWithDebInfo|x64.ActiveCfg = Release|x64 - {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.RelWithDebInfo|x64.Build.0 = Release|x64 - {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.RelWithDebInfo|x86.ActiveCfg = Release|x86 - {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.RelWithDebInfo|x86.Build.0 = Release|x86 - {718350FA-2DD9-4950-BA41-D7A7F66DAC91}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {718350FA-2DD9-4950-BA41-D7A7F66DAC91}.Checked|Any CPU.Build.0 = Debug|Any CPU - {718350FA-2DD9-4950-BA41-D7A7F66DAC91}.Checked|ARM.ActiveCfg = Debug|Any CPU - {718350FA-2DD9-4950-BA41-D7A7F66DAC91}.Checked|ARM.Build.0 = Debug|Any CPU - {718350FA-2DD9-4950-BA41-D7A7F66DAC91}.Checked|ARM64.ActiveCfg = Debug|Any CPU - {718350FA-2DD9-4950-BA41-D7A7F66DAC91}.Checked|ARM64.Build.0 = Debug|Any CPU - {718350FA-2DD9-4950-BA41-D7A7F66DAC91}.Checked|x64.ActiveCfg = Debug|Any CPU - {718350FA-2DD9-4950-BA41-D7A7F66DAC91}.Checked|x64.Build.0 = Debug|Any CPU - {718350FA-2DD9-4950-BA41-D7A7F66DAC91}.Checked|x86.ActiveCfg = Debug|Any CPU - {718350FA-2DD9-4950-BA41-D7A7F66DAC91}.Checked|x86.Build.0 = Debug|Any CPU - {718350FA-2DD9-4950-BA41-D7A7F66DAC91}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {718350FA-2DD9-4950-BA41-D7A7F66DAC91}.Debug|Any CPU.Build.0 = Debug|Any CPU - {718350FA-2DD9-4950-BA41-D7A7F66DAC91}.Debug|ARM.ActiveCfg = Debug|Any CPU - {718350FA-2DD9-4950-BA41-D7A7F66DAC91}.Debug|ARM.Build.0 = Debug|Any CPU - {718350FA-2DD9-4950-BA41-D7A7F66DAC91}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {718350FA-2DD9-4950-BA41-D7A7F66DAC91}.Debug|ARM64.Build.0 = Debug|Any CPU - {718350FA-2DD9-4950-BA41-D7A7F66DAC91}.Debug|x64.ActiveCfg = Debug|Any CPU - {718350FA-2DD9-4950-BA41-D7A7F66DAC91}.Debug|x64.Build.0 = Debug|Any CPU - {718350FA-2DD9-4950-BA41-D7A7F66DAC91}.Debug|x86.ActiveCfg = Debug|Any CPU - {718350FA-2DD9-4950-BA41-D7A7F66DAC91}.Debug|x86.Build.0 = Debug|Any CPU - {718350FA-2DD9-4950-BA41-D7A7F66DAC91}.Release|Any CPU.ActiveCfg = Release|Any CPU - {718350FA-2DD9-4950-BA41-D7A7F66DAC91}.Release|Any CPU.Build.0 = Release|Any CPU - {718350FA-2DD9-4950-BA41-D7A7F66DAC91}.Release|ARM.ActiveCfg = Release|Any CPU - {718350FA-2DD9-4950-BA41-D7A7F66DAC91}.Release|ARM.Build.0 = Release|Any CPU - {718350FA-2DD9-4950-BA41-D7A7F66DAC91}.Release|ARM64.ActiveCfg = Release|Any CPU - {718350FA-2DD9-4950-BA41-D7A7F66DAC91}.Release|ARM64.Build.0 = Release|Any CPU - {718350FA-2DD9-4950-BA41-D7A7F66DAC91}.Release|x64.ActiveCfg = Release|Any CPU - {718350FA-2DD9-4950-BA41-D7A7F66DAC91}.Release|x64.Build.0 = Release|Any CPU - {718350FA-2DD9-4950-BA41-D7A7F66DAC91}.Release|x86.ActiveCfg = Release|Any CPU - {718350FA-2DD9-4950-BA41-D7A7F66DAC91}.Release|x86.Build.0 = Release|Any CPU - {718350FA-2DD9-4950-BA41-D7A7F66DAC91}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU - {718350FA-2DD9-4950-BA41-D7A7F66DAC91}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU - {718350FA-2DD9-4950-BA41-D7A7F66DAC91}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU - {718350FA-2DD9-4950-BA41-D7A7F66DAC91}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU - {718350FA-2DD9-4950-BA41-D7A7F66DAC91}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU - {718350FA-2DD9-4950-BA41-D7A7F66DAC91}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU - {718350FA-2DD9-4950-BA41-D7A7F66DAC91}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU - {718350FA-2DD9-4950-BA41-D7A7F66DAC91}.RelWithDebInfo|x64.Build.0 = Release|Any CPU - {718350FA-2DD9-4950-BA41-D7A7F66DAC91}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU - {718350FA-2DD9-4950-BA41-D7A7F66DAC91}.RelWithDebInfo|x86.Build.0 = Release|Any CPU - {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.Checked|Any CPU.ActiveCfg = Release|Any CPU - {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.Checked|Any CPU.Build.0 = Release|Any CPU - {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.Checked|ARM.ActiveCfg = Release|Any CPU - {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.Checked|ARM.Build.0 = Release|Any CPU - {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.Checked|ARM64.ActiveCfg = Release|Any CPU - {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.Checked|ARM64.Build.0 = Release|Any CPU - {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.Checked|x64.ActiveCfg = Release|Any CPU - {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.Checked|x64.Build.0 = Release|Any CPU - {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.Checked|x86.ActiveCfg = Release|Any CPU - {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.Checked|x86.Build.0 = Release|Any CPU - {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.Debug|Any CPU.Build.0 = Debug|Any CPU - {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.Debug|ARM.ActiveCfg = Debug|Any CPU - {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.Debug|ARM.Build.0 = Debug|Any CPU - {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.Debug|ARM64.Build.0 = Debug|Any CPU - {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.Debug|x64.ActiveCfg = Debug|Any CPU - {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.Debug|x64.Build.0 = Debug|Any CPU - {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.Debug|x86.ActiveCfg = Debug|Any CPU - {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.Debug|x86.Build.0 = Debug|Any CPU - {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.Release|Any CPU.ActiveCfg = Release|Any CPU - {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.Release|Any CPU.Build.0 = Release|Any CPU - {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.Release|ARM.ActiveCfg = Release|Any CPU - {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.Release|ARM.Build.0 = Release|Any CPU - {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.Release|ARM64.ActiveCfg = Release|Any CPU - {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.Release|ARM64.Build.0 = Release|Any CPU - {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.Release|x64.ActiveCfg = Release|Any CPU - {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.Release|x64.Build.0 = Release|Any CPU - {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.Release|x86.ActiveCfg = Release|Any CPU - {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.Release|x86.Build.0 = Release|Any CPU - {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU - {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU - {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU - {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU - {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU - {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU - {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU - {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.RelWithDebInfo|x64.Build.0 = Release|Any CPU - {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU - {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.RelWithDebInfo|x86.Build.0 = Release|Any CPU - {41F59D85-FC36-3015-861B-F177863252BC}.Checked|Any CPU.ActiveCfg = Checked|x64 - {41F59D85-FC36-3015-861B-F177863252BC}.Checked|ARM.ActiveCfg = Checked|x64 - {41F59D85-FC36-3015-861B-F177863252BC}.Checked|ARM64.ActiveCfg = Checked|x64 - {41F59D85-FC36-3015-861B-F177863252BC}.Checked|x64.ActiveCfg = Checked|x64 - {41F59D85-FC36-3015-861B-F177863252BC}.Checked|x64.Build.0 = Checked|x64 - {41F59D85-FC36-3015-861B-F177863252BC}.Checked|x86.ActiveCfg = Checked|x64 - {41F59D85-FC36-3015-861B-F177863252BC}.Debug|Any CPU.ActiveCfg = Debug|x64 - {41F59D85-FC36-3015-861B-F177863252BC}.Debug|ARM.ActiveCfg = Debug|x64 - {41F59D85-FC36-3015-861B-F177863252BC}.Debug|ARM64.ActiveCfg = Debug|x64 - {41F59D85-FC36-3015-861B-F177863252BC}.Debug|x64.ActiveCfg = Debug|x64 - {41F59D85-FC36-3015-861B-F177863252BC}.Debug|x64.Build.0 = Debug|x64 - {41F59D85-FC36-3015-861B-F177863252BC}.Debug|x86.ActiveCfg = Debug|x64 - {41F59D85-FC36-3015-861B-F177863252BC}.Release|Any CPU.ActiveCfg = Release|x64 - {41F59D85-FC36-3015-861B-F177863252BC}.Release|ARM.ActiveCfg = Release|x64 - {41F59D85-FC36-3015-861B-F177863252BC}.Release|ARM64.ActiveCfg = Release|x64 - {41F59D85-FC36-3015-861B-F177863252BC}.Release|x64.ActiveCfg = Release|x64 - {41F59D85-FC36-3015-861B-F177863252BC}.Release|x86.ActiveCfg = Release|x64 - {41F59D85-FC36-3015-861B-F177863252BC}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|x64 - {41F59D85-FC36-3015-861B-F177863252BC}.RelWithDebInfo|ARM.ActiveCfg = RelWithDebInfo|x64 - {41F59D85-FC36-3015-861B-F177863252BC}.RelWithDebInfo|ARM64.ActiveCfg = RelWithDebInfo|x64 - {41F59D85-FC36-3015-861B-F177863252BC}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 - {41F59D85-FC36-3015-861B-F177863252BC}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 - {41F59D85-FC36-3015-861B-F177863252BC}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|x64 - {1F012743-941B-4915-8C55-02097894CF3F}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {1F012743-941B-4915-8C55-02097894CF3F}.Checked|Any CPU.Build.0 = Debug|Any CPU - {1F012743-941B-4915-8C55-02097894CF3F}.Checked|ARM.ActiveCfg = Debug|Any CPU - {1F012743-941B-4915-8C55-02097894CF3F}.Checked|ARM.Build.0 = Debug|Any CPU - {1F012743-941B-4915-8C55-02097894CF3F}.Checked|ARM64.ActiveCfg = Debug|Any CPU - {1F012743-941B-4915-8C55-02097894CF3F}.Checked|ARM64.Build.0 = Debug|Any CPU - {1F012743-941B-4915-8C55-02097894CF3F}.Checked|x64.ActiveCfg = Debug|Any CPU - {1F012743-941B-4915-8C55-02097894CF3F}.Checked|x64.Build.0 = Debug|Any CPU - {1F012743-941B-4915-8C55-02097894CF3F}.Checked|x86.ActiveCfg = Debug|Any CPU - {1F012743-941B-4915-8C55-02097894CF3F}.Checked|x86.Build.0 = Debug|Any CPU - {1F012743-941B-4915-8C55-02097894CF3F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1F012743-941B-4915-8C55-02097894CF3F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1F012743-941B-4915-8C55-02097894CF3F}.Debug|ARM.ActiveCfg = Debug|Any CPU - {1F012743-941B-4915-8C55-02097894CF3F}.Debug|ARM.Build.0 = Debug|Any CPU - {1F012743-941B-4915-8C55-02097894CF3F}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {1F012743-941B-4915-8C55-02097894CF3F}.Debug|ARM64.Build.0 = Debug|Any CPU - {1F012743-941B-4915-8C55-02097894CF3F}.Debug|x64.ActiveCfg = Debug|Any CPU - {1F012743-941B-4915-8C55-02097894CF3F}.Debug|x64.Build.0 = Debug|Any CPU - {1F012743-941B-4915-8C55-02097894CF3F}.Debug|x86.ActiveCfg = Debug|Any CPU - {1F012743-941B-4915-8C55-02097894CF3F}.Debug|x86.Build.0 = Debug|Any CPU - {1F012743-941B-4915-8C55-02097894CF3F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1F012743-941B-4915-8C55-02097894CF3F}.Release|Any CPU.Build.0 = Release|Any CPU - {1F012743-941B-4915-8C55-02097894CF3F}.Release|ARM.ActiveCfg = Release|Any CPU - {1F012743-941B-4915-8C55-02097894CF3F}.Release|ARM.Build.0 = Release|Any CPU - {1F012743-941B-4915-8C55-02097894CF3F}.Release|ARM64.ActiveCfg = Release|Any CPU - {1F012743-941B-4915-8C55-02097894CF3F}.Release|ARM64.Build.0 = Release|Any CPU - {1F012743-941B-4915-8C55-02097894CF3F}.Release|x64.ActiveCfg = Release|Any CPU - {1F012743-941B-4915-8C55-02097894CF3F}.Release|x64.Build.0 = Release|Any CPU - {1F012743-941B-4915-8C55-02097894CF3F}.Release|x86.ActiveCfg = Release|Any CPU - {1F012743-941B-4915-8C55-02097894CF3F}.Release|x86.Build.0 = Release|Any CPU - {1F012743-941B-4915-8C55-02097894CF3F}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU - {1F012743-941B-4915-8C55-02097894CF3F}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU - {1F012743-941B-4915-8C55-02097894CF3F}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU - {1F012743-941B-4915-8C55-02097894CF3F}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU - {1F012743-941B-4915-8C55-02097894CF3F}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU - {1F012743-941B-4915-8C55-02097894CF3F}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU - {1F012743-941B-4915-8C55-02097894CF3F}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU - {1F012743-941B-4915-8C55-02097894CF3F}.RelWithDebInfo|x64.Build.0 = Release|Any CPU - {1F012743-941B-4915-8C55-02097894CF3F}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU - {1F012743-941B-4915-8C55-02097894CF3F}.RelWithDebInfo|x86.Build.0 = Release|Any CPU - {41351955-16D5-48D7-AF4C-AF25F5FB2E78}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {41351955-16D5-48D7-AF4C-AF25F5FB2E78}.Checked|Any CPU.Build.0 = Debug|Any CPU - {41351955-16D5-48D7-AF4C-AF25F5FB2E78}.Checked|ARM.ActiveCfg = Debug|Any CPU - {41351955-16D5-48D7-AF4C-AF25F5FB2E78}.Checked|ARM.Build.0 = Debug|Any CPU - {41351955-16D5-48D7-AF4C-AF25F5FB2E78}.Checked|ARM64.ActiveCfg = Debug|Any CPU - {41351955-16D5-48D7-AF4C-AF25F5FB2E78}.Checked|ARM64.Build.0 = Debug|Any CPU - {41351955-16D5-48D7-AF4C-AF25F5FB2E78}.Checked|x64.ActiveCfg = Debug|Any CPU - {41351955-16D5-48D7-AF4C-AF25F5FB2E78}.Checked|x64.Build.0 = Debug|Any CPU - {41351955-16D5-48D7-AF4C-AF25F5FB2E78}.Checked|x86.ActiveCfg = Debug|Any CPU - {41351955-16D5-48D7-AF4C-AF25F5FB2E78}.Checked|x86.Build.0 = Debug|Any CPU - {41351955-16D5-48D7-AF4C-AF25F5FB2E78}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {41351955-16D5-48D7-AF4C-AF25F5FB2E78}.Debug|Any CPU.Build.0 = Debug|Any CPU - {41351955-16D5-48D7-AF4C-AF25F5FB2E78}.Debug|ARM.ActiveCfg = Debug|Any CPU - {41351955-16D5-48D7-AF4C-AF25F5FB2E78}.Debug|ARM.Build.0 = Debug|Any CPU - {41351955-16D5-48D7-AF4C-AF25F5FB2E78}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {41351955-16D5-48D7-AF4C-AF25F5FB2E78}.Debug|ARM64.Build.0 = Debug|Any CPU - {41351955-16D5-48D7-AF4C-AF25F5FB2E78}.Debug|x64.ActiveCfg = Debug|Any CPU - {41351955-16D5-48D7-AF4C-AF25F5FB2E78}.Debug|x64.Build.0 = Debug|Any CPU - {41351955-16D5-48D7-AF4C-AF25F5FB2E78}.Debug|x86.ActiveCfg = Debug|Any CPU - {41351955-16D5-48D7-AF4C-AF25F5FB2E78}.Debug|x86.Build.0 = Debug|Any CPU - {41351955-16D5-48D7-AF4C-AF25F5FB2E78}.Release|Any CPU.ActiveCfg = Release|Any CPU - {41351955-16D5-48D7-AF4C-AF25F5FB2E78}.Release|Any CPU.Build.0 = Release|Any CPU - {41351955-16D5-48D7-AF4C-AF25F5FB2E78}.Release|ARM.ActiveCfg = Release|Any CPU - {41351955-16D5-48D7-AF4C-AF25F5FB2E78}.Release|ARM.Build.0 = Release|Any CPU - {41351955-16D5-48D7-AF4C-AF25F5FB2E78}.Release|ARM64.ActiveCfg = Release|Any CPU - {41351955-16D5-48D7-AF4C-AF25F5FB2E78}.Release|ARM64.Build.0 = Release|Any CPU - {41351955-16D5-48D7-AF4C-AF25F5FB2E78}.Release|x64.ActiveCfg = Release|Any CPU - {41351955-16D5-48D7-AF4C-AF25F5FB2E78}.Release|x64.Build.0 = Release|Any CPU - {41351955-16D5-48D7-AF4C-AF25F5FB2E78}.Release|x86.ActiveCfg = Release|Any CPU - {41351955-16D5-48D7-AF4C-AF25F5FB2E78}.Release|x86.Build.0 = Release|Any CPU - {41351955-16D5-48D7-AF4C-AF25F5FB2E78}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU - {41351955-16D5-48D7-AF4C-AF25F5FB2E78}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU - {41351955-16D5-48D7-AF4C-AF25F5FB2E78}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU - {41351955-16D5-48D7-AF4C-AF25F5FB2E78}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU - {41351955-16D5-48D7-AF4C-AF25F5FB2E78}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU - {41351955-16D5-48D7-AF4C-AF25F5FB2E78}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU - {41351955-16D5-48D7-AF4C-AF25F5FB2E78}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU - {41351955-16D5-48D7-AF4C-AF25F5FB2E78}.RelWithDebInfo|x64.Build.0 = Release|Any CPU - {41351955-16D5-48D7-AF4C-AF25F5FB2E78}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU - {41351955-16D5-48D7-AF4C-AF25F5FB2E78}.RelWithDebInfo|x86.Build.0 = Release|Any CPU - {ED27F39F-DF5C-4E22-87E0-EC5B5873B503}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {ED27F39F-DF5C-4E22-87E0-EC5B5873B503}.Checked|Any CPU.Build.0 = Debug|Any CPU - {ED27F39F-DF5C-4E22-87E0-EC5B5873B503}.Checked|ARM.ActiveCfg = Debug|Any CPU - {ED27F39F-DF5C-4E22-87E0-EC5B5873B503}.Checked|ARM.Build.0 = Debug|Any CPU - {ED27F39F-DF5C-4E22-87E0-EC5B5873B503}.Checked|ARM64.ActiveCfg = Debug|Any CPU - {ED27F39F-DF5C-4E22-87E0-EC5B5873B503}.Checked|ARM64.Build.0 = Debug|Any CPU - {ED27F39F-DF5C-4E22-87E0-EC5B5873B503}.Checked|x64.ActiveCfg = Debug|Any CPU - {ED27F39F-DF5C-4E22-87E0-EC5B5873B503}.Checked|x64.Build.0 = Debug|Any CPU - {ED27F39F-DF5C-4E22-87E0-EC5B5873B503}.Checked|x86.ActiveCfg = Debug|Any CPU - {ED27F39F-DF5C-4E22-87E0-EC5B5873B503}.Checked|x86.Build.0 = Debug|Any CPU - {ED27F39F-DF5C-4E22-87E0-EC5B5873B503}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {ED27F39F-DF5C-4E22-87E0-EC5B5873B503}.Debug|Any CPU.Build.0 = Debug|Any CPU - {ED27F39F-DF5C-4E22-87E0-EC5B5873B503}.Debug|ARM.ActiveCfg = Debug|Any CPU - {ED27F39F-DF5C-4E22-87E0-EC5B5873B503}.Debug|ARM.Build.0 = Debug|Any CPU - {ED27F39F-DF5C-4E22-87E0-EC5B5873B503}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {ED27F39F-DF5C-4E22-87E0-EC5B5873B503}.Debug|ARM64.Build.0 = Debug|Any CPU - {ED27F39F-DF5C-4E22-87E0-EC5B5873B503}.Debug|x64.ActiveCfg = Debug|Any CPU - {ED27F39F-DF5C-4E22-87E0-EC5B5873B503}.Debug|x64.Build.0 = Debug|Any CPU - {ED27F39F-DF5C-4E22-87E0-EC5B5873B503}.Debug|x86.ActiveCfg = Debug|Any CPU - {ED27F39F-DF5C-4E22-87E0-EC5B5873B503}.Debug|x86.Build.0 = Debug|Any CPU - {ED27F39F-DF5C-4E22-87E0-EC5B5873B503}.Release|Any CPU.ActiveCfg = Release|Any CPU - {ED27F39F-DF5C-4E22-87E0-EC5B5873B503}.Release|Any CPU.Build.0 = Release|Any CPU - {ED27F39F-DF5C-4E22-87E0-EC5B5873B503}.Release|ARM.ActiveCfg = Release|Any CPU - {ED27F39F-DF5C-4E22-87E0-EC5B5873B503}.Release|ARM.Build.0 = Release|Any CPU - {ED27F39F-DF5C-4E22-87E0-EC5B5873B503}.Release|ARM64.ActiveCfg = Release|Any CPU - {ED27F39F-DF5C-4E22-87E0-EC5B5873B503}.Release|ARM64.Build.0 = Release|Any CPU - {ED27F39F-DF5C-4E22-87E0-EC5B5873B503}.Release|x64.ActiveCfg = Release|Any CPU - {ED27F39F-DF5C-4E22-87E0-EC5B5873B503}.Release|x64.Build.0 = Release|Any CPU - {ED27F39F-DF5C-4E22-87E0-EC5B5873B503}.Release|x86.ActiveCfg = Release|Any CPU - {ED27F39F-DF5C-4E22-87E0-EC5B5873B503}.Release|x86.Build.0 = Release|Any CPU - {ED27F39F-DF5C-4E22-87E0-EC5B5873B503}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU - {ED27F39F-DF5C-4E22-87E0-EC5B5873B503}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU - {ED27F39F-DF5C-4E22-87E0-EC5B5873B503}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU - {ED27F39F-DF5C-4E22-87E0-EC5B5873B503}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU - {ED27F39F-DF5C-4E22-87E0-EC5B5873B503}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU - {ED27F39F-DF5C-4E22-87E0-EC5B5873B503}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU - {ED27F39F-DF5C-4E22-87E0-EC5B5873B503}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU - {ED27F39F-DF5C-4E22-87E0-EC5B5873B503}.RelWithDebInfo|x64.Build.0 = Release|Any CPU - {ED27F39F-DF5C-4E22-87E0-EC5B5873B503}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU - {ED27F39F-DF5C-4E22-87E0-EC5B5873B503}.RelWithDebInfo|x86.Build.0 = Release|Any CPU - {90CF2633-58F0-44EE-943B-D70207455F20}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {90CF2633-58F0-44EE-943B-D70207455F20}.Checked|Any CPU.Build.0 = Debug|Any CPU - {90CF2633-58F0-44EE-943B-D70207455F20}.Checked|ARM.ActiveCfg = Debug|Any CPU - {90CF2633-58F0-44EE-943B-D70207455F20}.Checked|ARM.Build.0 = Debug|Any CPU - {90CF2633-58F0-44EE-943B-D70207455F20}.Checked|ARM64.ActiveCfg = Debug|Any CPU - {90CF2633-58F0-44EE-943B-D70207455F20}.Checked|ARM64.Build.0 = Debug|Any CPU - {90CF2633-58F0-44EE-943B-D70207455F20}.Checked|x64.ActiveCfg = Debug|Any CPU - {90CF2633-58F0-44EE-943B-D70207455F20}.Checked|x64.Build.0 = Debug|Any CPU - {90CF2633-58F0-44EE-943B-D70207455F20}.Checked|x86.ActiveCfg = Debug|Any CPU - {90CF2633-58F0-44EE-943B-D70207455F20}.Checked|x86.Build.0 = Debug|Any CPU - {90CF2633-58F0-44EE-943B-D70207455F20}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {90CF2633-58F0-44EE-943B-D70207455F20}.Debug|Any CPU.Build.0 = Debug|Any CPU - {90CF2633-58F0-44EE-943B-D70207455F20}.Debug|ARM.ActiveCfg = Debug|Any CPU - {90CF2633-58F0-44EE-943B-D70207455F20}.Debug|ARM.Build.0 = Debug|Any CPU - {90CF2633-58F0-44EE-943B-D70207455F20}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {90CF2633-58F0-44EE-943B-D70207455F20}.Debug|ARM64.Build.0 = Debug|Any CPU - {90CF2633-58F0-44EE-943B-D70207455F20}.Debug|x64.ActiveCfg = Debug|Any CPU - {90CF2633-58F0-44EE-943B-D70207455F20}.Debug|x64.Build.0 = Debug|Any CPU - {90CF2633-58F0-44EE-943B-D70207455F20}.Debug|x86.ActiveCfg = Debug|Any CPU - {90CF2633-58F0-44EE-943B-D70207455F20}.Debug|x86.Build.0 = Debug|Any CPU - {90CF2633-58F0-44EE-943B-D70207455F20}.Release|Any CPU.ActiveCfg = Release|Any CPU - {90CF2633-58F0-44EE-943B-D70207455F20}.Release|Any CPU.Build.0 = Release|Any CPU - {90CF2633-58F0-44EE-943B-D70207455F20}.Release|ARM.ActiveCfg = Release|Any CPU - {90CF2633-58F0-44EE-943B-D70207455F20}.Release|ARM.Build.0 = Release|Any CPU - {90CF2633-58F0-44EE-943B-D70207455F20}.Release|ARM64.ActiveCfg = Release|Any CPU - {90CF2633-58F0-44EE-943B-D70207455F20}.Release|ARM64.Build.0 = Release|Any CPU - {90CF2633-58F0-44EE-943B-D70207455F20}.Release|x64.ActiveCfg = Release|Any CPU - {90CF2633-58F0-44EE-943B-D70207455F20}.Release|x64.Build.0 = Release|Any CPU - {90CF2633-58F0-44EE-943B-D70207455F20}.Release|x86.ActiveCfg = Release|Any CPU - {90CF2633-58F0-44EE-943B-D70207455F20}.Release|x86.Build.0 = Release|Any CPU - {90CF2633-58F0-44EE-943B-D70207455F20}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU - {90CF2633-58F0-44EE-943B-D70207455F20}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU - {90CF2633-58F0-44EE-943B-D70207455F20}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU - {90CF2633-58F0-44EE-943B-D70207455F20}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU - {90CF2633-58F0-44EE-943B-D70207455F20}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU - {90CF2633-58F0-44EE-943B-D70207455F20}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU - {90CF2633-58F0-44EE-943B-D70207455F20}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU - {90CF2633-58F0-44EE-943B-D70207455F20}.RelWithDebInfo|x64.Build.0 = Release|Any CPU - {90CF2633-58F0-44EE-943B-D70207455F20}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU - {90CF2633-58F0-44EE-943B-D70207455F20}.RelWithDebInfo|x86.Build.0 = Release|Any CPU - {2A9B5988-982F-4E26-9E44-D38AC5978C30}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {2A9B5988-982F-4E26-9E44-D38AC5978C30}.Checked|Any CPU.Build.0 = Debug|Any CPU - {2A9B5988-982F-4E26-9E44-D38AC5978C30}.Checked|ARM.ActiveCfg = Debug|Any CPU - {2A9B5988-982F-4E26-9E44-D38AC5978C30}.Checked|ARM.Build.0 = Debug|Any CPU - {2A9B5988-982F-4E26-9E44-D38AC5978C30}.Checked|ARM64.ActiveCfg = Debug|Any CPU - {2A9B5988-982F-4E26-9E44-D38AC5978C30}.Checked|ARM64.Build.0 = Debug|Any CPU - {2A9B5988-982F-4E26-9E44-D38AC5978C30}.Checked|x64.ActiveCfg = Debug|Any CPU - {2A9B5988-982F-4E26-9E44-D38AC5978C30}.Checked|x64.Build.0 = Debug|Any CPU - {2A9B5988-982F-4E26-9E44-D38AC5978C30}.Checked|x86.ActiveCfg = Debug|Any CPU - {2A9B5988-982F-4E26-9E44-D38AC5978C30}.Checked|x86.Build.0 = Debug|Any CPU - {2A9B5988-982F-4E26-9E44-D38AC5978C30}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2A9B5988-982F-4E26-9E44-D38AC5978C30}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2A9B5988-982F-4E26-9E44-D38AC5978C30}.Debug|ARM.ActiveCfg = Debug|Any CPU - {2A9B5988-982F-4E26-9E44-D38AC5978C30}.Debug|ARM.Build.0 = Debug|Any CPU - {2A9B5988-982F-4E26-9E44-D38AC5978C30}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {2A9B5988-982F-4E26-9E44-D38AC5978C30}.Debug|ARM64.Build.0 = Debug|Any CPU - {2A9B5988-982F-4E26-9E44-D38AC5978C30}.Debug|x64.ActiveCfg = Debug|Any CPU - {2A9B5988-982F-4E26-9E44-D38AC5978C30}.Debug|x64.Build.0 = Debug|Any CPU - {2A9B5988-982F-4E26-9E44-D38AC5978C30}.Debug|x86.ActiveCfg = Debug|Any CPU - {2A9B5988-982F-4E26-9E44-D38AC5978C30}.Debug|x86.Build.0 = Debug|Any CPU - {2A9B5988-982F-4E26-9E44-D38AC5978C30}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2A9B5988-982F-4E26-9E44-D38AC5978C30}.Release|Any CPU.Build.0 = Release|Any CPU - {2A9B5988-982F-4E26-9E44-D38AC5978C30}.Release|ARM.ActiveCfg = Release|Any CPU - {2A9B5988-982F-4E26-9E44-D38AC5978C30}.Release|ARM.Build.0 = Release|Any CPU - {2A9B5988-982F-4E26-9E44-D38AC5978C30}.Release|ARM64.ActiveCfg = Release|Any CPU - {2A9B5988-982F-4E26-9E44-D38AC5978C30}.Release|ARM64.Build.0 = Release|Any CPU - {2A9B5988-982F-4E26-9E44-D38AC5978C30}.Release|x64.ActiveCfg = Release|Any CPU - {2A9B5988-982F-4E26-9E44-D38AC5978C30}.Release|x64.Build.0 = Release|Any CPU - {2A9B5988-982F-4E26-9E44-D38AC5978C30}.Release|x86.ActiveCfg = Release|Any CPU - {2A9B5988-982F-4E26-9E44-D38AC5978C30}.Release|x86.Build.0 = Release|Any CPU - {2A9B5988-982F-4E26-9E44-D38AC5978C30}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU - {2A9B5988-982F-4E26-9E44-D38AC5978C30}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU - {2A9B5988-982F-4E26-9E44-D38AC5978C30}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU - {2A9B5988-982F-4E26-9E44-D38AC5978C30}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU - {2A9B5988-982F-4E26-9E44-D38AC5978C30}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU - {2A9B5988-982F-4E26-9E44-D38AC5978C30}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU - {2A9B5988-982F-4E26-9E44-D38AC5978C30}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU - {2A9B5988-982F-4E26-9E44-D38AC5978C30}.RelWithDebInfo|x64.Build.0 = Release|Any CPU - {2A9B5988-982F-4E26-9E44-D38AC5978C30}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU - {2A9B5988-982F-4E26-9E44-D38AC5978C30}.RelWithDebInfo|x86.Build.0 = Release|Any CPU - {234416E9-EA5F-4018-AC34-67682C5D3E04}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {234416E9-EA5F-4018-AC34-67682C5D3E04}.Checked|Any CPU.Build.0 = Debug|Any CPU - {234416E9-EA5F-4018-AC34-67682C5D3E04}.Checked|ARM.ActiveCfg = Debug|Any CPU - {234416E9-EA5F-4018-AC34-67682C5D3E04}.Checked|ARM.Build.0 = Debug|Any CPU - {234416E9-EA5F-4018-AC34-67682C5D3E04}.Checked|ARM64.ActiveCfg = Debug|Any CPU - {234416E9-EA5F-4018-AC34-67682C5D3E04}.Checked|ARM64.Build.0 = Debug|Any CPU - {234416E9-EA5F-4018-AC34-67682C5D3E04}.Checked|x64.ActiveCfg = Debug|Any CPU - {234416E9-EA5F-4018-AC34-67682C5D3E04}.Checked|x64.Build.0 = Debug|Any CPU - {234416E9-EA5F-4018-AC34-67682C5D3E04}.Checked|x86.ActiveCfg = Debug|Any CPU - {234416E9-EA5F-4018-AC34-67682C5D3E04}.Checked|x86.Build.0 = Debug|Any CPU - {234416E9-EA5F-4018-AC34-67682C5D3E04}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {234416E9-EA5F-4018-AC34-67682C5D3E04}.Debug|Any CPU.Build.0 = Debug|Any CPU - {234416E9-EA5F-4018-AC34-67682C5D3E04}.Debug|ARM.ActiveCfg = Debug|Any CPU - {234416E9-EA5F-4018-AC34-67682C5D3E04}.Debug|ARM.Build.0 = Debug|Any CPU - {234416E9-EA5F-4018-AC34-67682C5D3E04}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {234416E9-EA5F-4018-AC34-67682C5D3E04}.Debug|ARM64.Build.0 = Debug|Any CPU - {234416E9-EA5F-4018-AC34-67682C5D3E04}.Debug|x64.ActiveCfg = Debug|Any CPU - {234416E9-EA5F-4018-AC34-67682C5D3E04}.Debug|x64.Build.0 = Debug|Any CPU - {234416E9-EA5F-4018-AC34-67682C5D3E04}.Debug|x86.ActiveCfg = Debug|Any CPU - {234416E9-EA5F-4018-AC34-67682C5D3E04}.Debug|x86.Build.0 = Debug|Any CPU - {234416E9-EA5F-4018-AC34-67682C5D3E04}.Release|Any CPU.ActiveCfg = Release|Any CPU - {234416E9-EA5F-4018-AC34-67682C5D3E04}.Release|Any CPU.Build.0 = Release|Any CPU - {234416E9-EA5F-4018-AC34-67682C5D3E04}.Release|ARM.ActiveCfg = Release|Any CPU - {234416E9-EA5F-4018-AC34-67682C5D3E04}.Release|ARM.Build.0 = Release|Any CPU - {234416E9-EA5F-4018-AC34-67682C5D3E04}.Release|ARM64.ActiveCfg = Release|Any CPU - {234416E9-EA5F-4018-AC34-67682C5D3E04}.Release|ARM64.Build.0 = Release|Any CPU - {234416E9-EA5F-4018-AC34-67682C5D3E04}.Release|x64.ActiveCfg = Release|Any CPU - {234416E9-EA5F-4018-AC34-67682C5D3E04}.Release|x64.Build.0 = Release|Any CPU - {234416E9-EA5F-4018-AC34-67682C5D3E04}.Release|x86.ActiveCfg = Release|Any CPU - {234416E9-EA5F-4018-AC34-67682C5D3E04}.Release|x86.Build.0 = Release|Any CPU - {234416E9-EA5F-4018-AC34-67682C5D3E04}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU - {234416E9-EA5F-4018-AC34-67682C5D3E04}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU - {234416E9-EA5F-4018-AC34-67682C5D3E04}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU - {234416E9-EA5F-4018-AC34-67682C5D3E04}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU - {234416E9-EA5F-4018-AC34-67682C5D3E04}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU - {234416E9-EA5F-4018-AC34-67682C5D3E04}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU - {234416E9-EA5F-4018-AC34-67682C5D3E04}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU - {234416E9-EA5F-4018-AC34-67682C5D3E04}.RelWithDebInfo|x64.Build.0 = Release|Any CPU - {234416E9-EA5F-4018-AC34-67682C5D3E04}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU - {234416E9-EA5F-4018-AC34-67682C5D3E04}.RelWithDebInfo|x86.Build.0 = Release|Any CPU - {A1CE682A-12C4-4FF9-B864-A9A15A8726D2}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {A1CE682A-12C4-4FF9-B864-A9A15A8726D2}.Checked|Any CPU.Build.0 = Debug|Any CPU - {A1CE682A-12C4-4FF9-B864-A9A15A8726D2}.Checked|ARM.ActiveCfg = Debug|Any CPU - {A1CE682A-12C4-4FF9-B864-A9A15A8726D2}.Checked|ARM.Build.0 = Debug|Any CPU - {A1CE682A-12C4-4FF9-B864-A9A15A8726D2}.Checked|ARM64.ActiveCfg = Debug|Any CPU - {A1CE682A-12C4-4FF9-B864-A9A15A8726D2}.Checked|ARM64.Build.0 = Debug|Any CPU - {A1CE682A-12C4-4FF9-B864-A9A15A8726D2}.Checked|x64.ActiveCfg = Debug|Any CPU - {A1CE682A-12C4-4FF9-B864-A9A15A8726D2}.Checked|x64.Build.0 = Debug|Any CPU - {A1CE682A-12C4-4FF9-B864-A9A15A8726D2}.Checked|x86.ActiveCfg = Debug|Any CPU - {A1CE682A-12C4-4FF9-B864-A9A15A8726D2}.Checked|x86.Build.0 = Debug|Any CPU - {A1CE682A-12C4-4FF9-B864-A9A15A8726D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A1CE682A-12C4-4FF9-B864-A9A15A8726D2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A1CE682A-12C4-4FF9-B864-A9A15A8726D2}.Debug|ARM.ActiveCfg = Debug|Any CPU - {A1CE682A-12C4-4FF9-B864-A9A15A8726D2}.Debug|ARM.Build.0 = Debug|Any CPU - {A1CE682A-12C4-4FF9-B864-A9A15A8726D2}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {A1CE682A-12C4-4FF9-B864-A9A15A8726D2}.Debug|ARM64.Build.0 = Debug|Any CPU - {A1CE682A-12C4-4FF9-B864-A9A15A8726D2}.Debug|x64.ActiveCfg = Debug|Any CPU - {A1CE682A-12C4-4FF9-B864-A9A15A8726D2}.Debug|x64.Build.0 = Debug|Any CPU - {A1CE682A-12C4-4FF9-B864-A9A15A8726D2}.Debug|x86.ActiveCfg = Debug|Any CPU - {A1CE682A-12C4-4FF9-B864-A9A15A8726D2}.Debug|x86.Build.0 = Debug|Any CPU - {A1CE682A-12C4-4FF9-B864-A9A15A8726D2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A1CE682A-12C4-4FF9-B864-A9A15A8726D2}.Release|Any CPU.Build.0 = Release|Any CPU - {A1CE682A-12C4-4FF9-B864-A9A15A8726D2}.Release|ARM.ActiveCfg = Release|Any CPU - {A1CE682A-12C4-4FF9-B864-A9A15A8726D2}.Release|ARM.Build.0 = Release|Any CPU - {A1CE682A-12C4-4FF9-B864-A9A15A8726D2}.Release|ARM64.ActiveCfg = Release|Any CPU - {A1CE682A-12C4-4FF9-B864-A9A15A8726D2}.Release|ARM64.Build.0 = Release|Any CPU - {A1CE682A-12C4-4FF9-B864-A9A15A8726D2}.Release|x64.ActiveCfg = Release|Any CPU - {A1CE682A-12C4-4FF9-B864-A9A15A8726D2}.Release|x64.Build.0 = Release|Any CPU - {A1CE682A-12C4-4FF9-B864-A9A15A8726D2}.Release|x86.ActiveCfg = Release|Any CPU - {A1CE682A-12C4-4FF9-B864-A9A15A8726D2}.Release|x86.Build.0 = Release|Any CPU - {A1CE682A-12C4-4FF9-B864-A9A15A8726D2}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU - {A1CE682A-12C4-4FF9-B864-A9A15A8726D2}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU - {A1CE682A-12C4-4FF9-B864-A9A15A8726D2}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU - {A1CE682A-12C4-4FF9-B864-A9A15A8726D2}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU - {A1CE682A-12C4-4FF9-B864-A9A15A8726D2}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU - {A1CE682A-12C4-4FF9-B864-A9A15A8726D2}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU - {A1CE682A-12C4-4FF9-B864-A9A15A8726D2}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU - {A1CE682A-12C4-4FF9-B864-A9A15A8726D2}.RelWithDebInfo|x64.Build.0 = Release|Any CPU - {A1CE682A-12C4-4FF9-B864-A9A15A8726D2}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU - {A1CE682A-12C4-4FF9-B864-A9A15A8726D2}.RelWithDebInfo|x86.Build.0 = Release|Any CPU - {410394E0-7F4F-42D5-B5FA-30956F44ACBC}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {410394E0-7F4F-42D5-B5FA-30956F44ACBC}.Checked|Any CPU.Build.0 = Debug|Any CPU - {410394E0-7F4F-42D5-B5FA-30956F44ACBC}.Checked|ARM.ActiveCfg = Debug|Any CPU - {410394E0-7F4F-42D5-B5FA-30956F44ACBC}.Checked|ARM.Build.0 = Debug|Any CPU - {410394E0-7F4F-42D5-B5FA-30956F44ACBC}.Checked|ARM64.ActiveCfg = Debug|Any CPU - {410394E0-7F4F-42D5-B5FA-30956F44ACBC}.Checked|ARM64.Build.0 = Debug|Any CPU - {410394E0-7F4F-42D5-B5FA-30956F44ACBC}.Checked|x64.ActiveCfg = Debug|Any CPU - {410394E0-7F4F-42D5-B5FA-30956F44ACBC}.Checked|x64.Build.0 = Debug|Any CPU - {410394E0-7F4F-42D5-B5FA-30956F44ACBC}.Checked|x86.ActiveCfg = Debug|Any CPU - {410394E0-7F4F-42D5-B5FA-30956F44ACBC}.Checked|x86.Build.0 = Debug|Any CPU - {410394E0-7F4F-42D5-B5FA-30956F44ACBC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {410394E0-7F4F-42D5-B5FA-30956F44ACBC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {410394E0-7F4F-42D5-B5FA-30956F44ACBC}.Debug|ARM.ActiveCfg = Debug|Any CPU - {410394E0-7F4F-42D5-B5FA-30956F44ACBC}.Debug|ARM.Build.0 = Debug|Any CPU - {410394E0-7F4F-42D5-B5FA-30956F44ACBC}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {410394E0-7F4F-42D5-B5FA-30956F44ACBC}.Debug|ARM64.Build.0 = Debug|Any CPU - {410394E0-7F4F-42D5-B5FA-30956F44ACBC}.Debug|x64.ActiveCfg = Debug|Any CPU - {410394E0-7F4F-42D5-B5FA-30956F44ACBC}.Debug|x64.Build.0 = Debug|Any CPU - {410394E0-7F4F-42D5-B5FA-30956F44ACBC}.Debug|x86.ActiveCfg = Debug|Any CPU - {410394E0-7F4F-42D5-B5FA-30956F44ACBC}.Debug|x86.Build.0 = Debug|Any CPU - {410394E0-7F4F-42D5-B5FA-30956F44ACBC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {410394E0-7F4F-42D5-B5FA-30956F44ACBC}.Release|Any CPU.Build.0 = Release|Any CPU - {410394E0-7F4F-42D5-B5FA-30956F44ACBC}.Release|ARM.ActiveCfg = Release|Any CPU - {410394E0-7F4F-42D5-B5FA-30956F44ACBC}.Release|ARM.Build.0 = Release|Any CPU - {410394E0-7F4F-42D5-B5FA-30956F44ACBC}.Release|ARM64.ActiveCfg = Release|Any CPU - {410394E0-7F4F-42D5-B5FA-30956F44ACBC}.Release|ARM64.Build.0 = Release|Any CPU - {410394E0-7F4F-42D5-B5FA-30956F44ACBC}.Release|x64.ActiveCfg = Release|Any CPU - {410394E0-7F4F-42D5-B5FA-30956F44ACBC}.Release|x64.Build.0 = Release|Any CPU - {410394E0-7F4F-42D5-B5FA-30956F44ACBC}.Release|x86.ActiveCfg = Release|Any CPU - {410394E0-7F4F-42D5-B5FA-30956F44ACBC}.Release|x86.Build.0 = Release|Any CPU - {410394E0-7F4F-42D5-B5FA-30956F44ACBC}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU - {410394E0-7F4F-42D5-B5FA-30956F44ACBC}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU - {410394E0-7F4F-42D5-B5FA-30956F44ACBC}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU - {410394E0-7F4F-42D5-B5FA-30956F44ACBC}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU - {410394E0-7F4F-42D5-B5FA-30956F44ACBC}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU - {410394E0-7F4F-42D5-B5FA-30956F44ACBC}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU - {410394E0-7F4F-42D5-B5FA-30956F44ACBC}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU - {410394E0-7F4F-42D5-B5FA-30956F44ACBC}.RelWithDebInfo|x64.Build.0 = Release|Any CPU - {410394E0-7F4F-42D5-B5FA-30956F44ACBC}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU - {410394E0-7F4F-42D5-B5FA-30956F44ACBC}.RelWithDebInfo|x86.Build.0 = Release|Any CPU - {AEDCCF5B-5AD0-4D64-BF73-5CF468E07D22}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {AEDCCF5B-5AD0-4D64-BF73-5CF468E07D22}.Checked|Any CPU.Build.0 = Debug|Any CPU - {AEDCCF5B-5AD0-4D64-BF73-5CF468E07D22}.Checked|ARM.ActiveCfg = Debug|Any CPU - {AEDCCF5B-5AD0-4D64-BF73-5CF468E07D22}.Checked|ARM.Build.0 = Debug|Any CPU - {AEDCCF5B-5AD0-4D64-BF73-5CF468E07D22}.Checked|ARM64.ActiveCfg = Debug|Any CPU - {AEDCCF5B-5AD0-4D64-BF73-5CF468E07D22}.Checked|ARM64.Build.0 = Debug|Any CPU - {AEDCCF5B-5AD0-4D64-BF73-5CF468E07D22}.Checked|x64.ActiveCfg = Debug|Any CPU - {AEDCCF5B-5AD0-4D64-BF73-5CF468E07D22}.Checked|x64.Build.0 = Debug|Any CPU - {AEDCCF5B-5AD0-4D64-BF73-5CF468E07D22}.Checked|x86.ActiveCfg = Debug|Any CPU - {AEDCCF5B-5AD0-4D64-BF73-5CF468E07D22}.Checked|x86.Build.0 = Debug|Any CPU - {AEDCCF5B-5AD0-4D64-BF73-5CF468E07D22}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AEDCCF5B-5AD0-4D64-BF73-5CF468E07D22}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AEDCCF5B-5AD0-4D64-BF73-5CF468E07D22}.Debug|ARM.ActiveCfg = Debug|Any CPU - {AEDCCF5B-5AD0-4D64-BF73-5CF468E07D22}.Debug|ARM.Build.0 = Debug|Any CPU - {AEDCCF5B-5AD0-4D64-BF73-5CF468E07D22}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {AEDCCF5B-5AD0-4D64-BF73-5CF468E07D22}.Debug|ARM64.Build.0 = Debug|Any CPU - {AEDCCF5B-5AD0-4D64-BF73-5CF468E07D22}.Debug|x64.ActiveCfg = Debug|Any CPU - {AEDCCF5B-5AD0-4D64-BF73-5CF468E07D22}.Debug|x64.Build.0 = Debug|Any CPU - {AEDCCF5B-5AD0-4D64-BF73-5CF468E07D22}.Debug|x86.ActiveCfg = Debug|Any CPU - {AEDCCF5B-5AD0-4D64-BF73-5CF468E07D22}.Debug|x86.Build.0 = Debug|Any CPU - {AEDCCF5B-5AD0-4D64-BF73-5CF468E07D22}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AEDCCF5B-5AD0-4D64-BF73-5CF468E07D22}.Release|Any CPU.Build.0 = Release|Any CPU - {AEDCCF5B-5AD0-4D64-BF73-5CF468E07D22}.Release|ARM.ActiveCfg = Release|Any CPU - {AEDCCF5B-5AD0-4D64-BF73-5CF468E07D22}.Release|ARM.Build.0 = Release|Any CPU - {AEDCCF5B-5AD0-4D64-BF73-5CF468E07D22}.Release|ARM64.ActiveCfg = Release|Any CPU - {AEDCCF5B-5AD0-4D64-BF73-5CF468E07D22}.Release|ARM64.Build.0 = Release|Any CPU - {AEDCCF5B-5AD0-4D64-BF73-5CF468E07D22}.Release|x64.ActiveCfg = Release|Any CPU - {AEDCCF5B-5AD0-4D64-BF73-5CF468E07D22}.Release|x64.Build.0 = Release|Any CPU - {AEDCCF5B-5AD0-4D64-BF73-5CF468E07D22}.Release|x86.ActiveCfg = Release|Any CPU - {AEDCCF5B-5AD0-4D64-BF73-5CF468E07D22}.Release|x86.Build.0 = Release|Any CPU - {AEDCCF5B-5AD0-4D64-BF73-5CF468E07D22}.RelWithDebInfo|Any CPU.ActiveCfg = Debug|Any CPU - {AEDCCF5B-5AD0-4D64-BF73-5CF468E07D22}.RelWithDebInfo|Any CPU.Build.0 = Debug|Any CPU - {AEDCCF5B-5AD0-4D64-BF73-5CF468E07D22}.RelWithDebInfo|ARM.ActiveCfg = Debug|Any CPU - {AEDCCF5B-5AD0-4D64-BF73-5CF468E07D22}.RelWithDebInfo|ARM.Build.0 = Debug|Any CPU - {AEDCCF5B-5AD0-4D64-BF73-5CF468E07D22}.RelWithDebInfo|ARM64.ActiveCfg = Debug|Any CPU - {AEDCCF5B-5AD0-4D64-BF73-5CF468E07D22}.RelWithDebInfo|ARM64.Build.0 = Debug|Any CPU - {AEDCCF5B-5AD0-4D64-BF73-5CF468E07D22}.RelWithDebInfo|x64.ActiveCfg = Debug|Any CPU - {AEDCCF5B-5AD0-4D64-BF73-5CF468E07D22}.RelWithDebInfo|x64.Build.0 = Debug|Any CPU - {AEDCCF5B-5AD0-4D64-BF73-5CF468E07D22}.RelWithDebInfo|x86.ActiveCfg = Debug|Any CPU - {AEDCCF5B-5AD0-4D64-BF73-5CF468E07D22}.RelWithDebInfo|x86.Build.0 = Debug|Any CPU - {936678B3-3392-4F4F-943C-B6A4BFCBAADC}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {936678B3-3392-4F4F-943C-B6A4BFCBAADC}.Checked|Any CPU.Build.0 = Debug|Any CPU - {936678B3-3392-4F4F-943C-B6A4BFCBAADC}.Checked|ARM.ActiveCfg = Debug|Any CPU - {936678B3-3392-4F4F-943C-B6A4BFCBAADC}.Checked|ARM.Build.0 = Debug|Any CPU - {936678B3-3392-4F4F-943C-B6A4BFCBAADC}.Checked|ARM64.ActiveCfg = Debug|Any CPU - {936678B3-3392-4F4F-943C-B6A4BFCBAADC}.Checked|ARM64.Build.0 = Debug|Any CPU - {936678B3-3392-4F4F-943C-B6A4BFCBAADC}.Checked|x64.ActiveCfg = Debug|Any CPU - {936678B3-3392-4F4F-943C-B6A4BFCBAADC}.Checked|x64.Build.0 = Debug|Any CPU - {936678B3-3392-4F4F-943C-B6A4BFCBAADC}.Checked|x86.ActiveCfg = Debug|Any CPU - {936678B3-3392-4F4F-943C-B6A4BFCBAADC}.Checked|x86.Build.0 = Debug|Any CPU - {936678B3-3392-4F4F-943C-B6A4BFCBAADC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {936678B3-3392-4F4F-943C-B6A4BFCBAADC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {936678B3-3392-4F4F-943C-B6A4BFCBAADC}.Debug|ARM.ActiveCfg = Debug|Any CPU - {936678B3-3392-4F4F-943C-B6A4BFCBAADC}.Debug|ARM.Build.0 = Debug|Any CPU - {936678B3-3392-4F4F-943C-B6A4BFCBAADC}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {936678B3-3392-4F4F-943C-B6A4BFCBAADC}.Debug|ARM64.Build.0 = Debug|Any CPU - {936678B3-3392-4F4F-943C-B6A4BFCBAADC}.Debug|x64.ActiveCfg = Debug|Any CPU - {936678B3-3392-4F4F-943C-B6A4BFCBAADC}.Debug|x64.Build.0 = Debug|Any CPU - {936678B3-3392-4F4F-943C-B6A4BFCBAADC}.Debug|x86.ActiveCfg = Debug|Any CPU - {936678B3-3392-4F4F-943C-B6A4BFCBAADC}.Debug|x86.Build.0 = Debug|Any CPU - {936678B3-3392-4F4F-943C-B6A4BFCBAADC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {936678B3-3392-4F4F-943C-B6A4BFCBAADC}.Release|Any CPU.Build.0 = Release|Any CPU - {936678B3-3392-4F4F-943C-B6A4BFCBAADC}.Release|ARM.ActiveCfg = Release|Any CPU - {936678B3-3392-4F4F-943C-B6A4BFCBAADC}.Release|ARM.Build.0 = Release|Any CPU - {936678B3-3392-4F4F-943C-B6A4BFCBAADC}.Release|ARM64.ActiveCfg = Release|Any CPU - {936678B3-3392-4F4F-943C-B6A4BFCBAADC}.Release|ARM64.Build.0 = Release|Any CPU - {936678B3-3392-4F4F-943C-B6A4BFCBAADC}.Release|x64.ActiveCfg = Release|Any CPU - {936678B3-3392-4F4F-943C-B6A4BFCBAADC}.Release|x64.Build.0 = Release|Any CPU - {936678B3-3392-4F4F-943C-B6A4BFCBAADC}.Release|x86.ActiveCfg = Release|Any CPU - {936678B3-3392-4F4F-943C-B6A4BFCBAADC}.Release|x86.Build.0 = Release|Any CPU - {936678B3-3392-4F4F-943C-B6A4BFCBAADC}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU - {936678B3-3392-4F4F-943C-B6A4BFCBAADC}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU - {936678B3-3392-4F4F-943C-B6A4BFCBAADC}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU - {936678B3-3392-4F4F-943C-B6A4BFCBAADC}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU - {936678B3-3392-4F4F-943C-B6A4BFCBAADC}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU - {936678B3-3392-4F4F-943C-B6A4BFCBAADC}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU - {936678B3-3392-4F4F-943C-B6A4BFCBAADC}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU - {936678B3-3392-4F4F-943C-B6A4BFCBAADC}.RelWithDebInfo|x64.Build.0 = Release|Any CPU - {936678B3-3392-4F4F-943C-B6A4BFCBAADC}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU - {936678B3-3392-4F4F-943C-B6A4BFCBAADC}.RelWithDebInfo|x86.Build.0 = Release|Any CPU - {E5A7DC6C-BF8D-418A-BCBD-094EB748FA82}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {E5A7DC6C-BF8D-418A-BCBD-094EB748FA82}.Checked|Any CPU.Build.0 = Debug|Any CPU - {E5A7DC6C-BF8D-418A-BCBD-094EB748FA82}.Checked|ARM.ActiveCfg = Debug|Any CPU - {E5A7DC6C-BF8D-418A-BCBD-094EB748FA82}.Checked|ARM.Build.0 = Debug|Any CPU - {E5A7DC6C-BF8D-418A-BCBD-094EB748FA82}.Checked|ARM64.ActiveCfg = Debug|Any CPU - {E5A7DC6C-BF8D-418A-BCBD-094EB748FA82}.Checked|ARM64.Build.0 = Debug|Any CPU - {E5A7DC6C-BF8D-418A-BCBD-094EB748FA82}.Checked|x64.ActiveCfg = Debug|Any CPU - {E5A7DC6C-BF8D-418A-BCBD-094EB748FA82}.Checked|x64.Build.0 = Debug|Any CPU - {E5A7DC6C-BF8D-418A-BCBD-094EB748FA82}.Checked|x86.ActiveCfg = Debug|Any CPU - {E5A7DC6C-BF8D-418A-BCBD-094EB748FA82}.Checked|x86.Build.0 = Debug|Any CPU - {E5A7DC6C-BF8D-418A-BCBD-094EB748FA82}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E5A7DC6C-BF8D-418A-BCBD-094EB748FA82}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E5A7DC6C-BF8D-418A-BCBD-094EB748FA82}.Debug|ARM.ActiveCfg = Debug|Any CPU - {E5A7DC6C-BF8D-418A-BCBD-094EB748FA82}.Debug|ARM.Build.0 = Debug|Any CPU - {E5A7DC6C-BF8D-418A-BCBD-094EB748FA82}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {E5A7DC6C-BF8D-418A-BCBD-094EB748FA82}.Debug|ARM64.Build.0 = Debug|Any CPU - {E5A7DC6C-BF8D-418A-BCBD-094EB748FA82}.Debug|x64.ActiveCfg = Debug|Any CPU - {E5A7DC6C-BF8D-418A-BCBD-094EB748FA82}.Debug|x64.Build.0 = Debug|Any CPU - {E5A7DC6C-BF8D-418A-BCBD-094EB748FA82}.Debug|x86.ActiveCfg = Debug|Any CPU - {E5A7DC6C-BF8D-418A-BCBD-094EB748FA82}.Debug|x86.Build.0 = Debug|Any CPU - {E5A7DC6C-BF8D-418A-BCBD-094EB748FA82}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E5A7DC6C-BF8D-418A-BCBD-094EB748FA82}.Release|Any CPU.Build.0 = Release|Any CPU - {E5A7DC6C-BF8D-418A-BCBD-094EB748FA82}.Release|ARM.ActiveCfg = Release|Any CPU - {E5A7DC6C-BF8D-418A-BCBD-094EB748FA82}.Release|ARM.Build.0 = Release|Any CPU - {E5A7DC6C-BF8D-418A-BCBD-094EB748FA82}.Release|ARM64.ActiveCfg = Release|Any CPU - {E5A7DC6C-BF8D-418A-BCBD-094EB748FA82}.Release|ARM64.Build.0 = Release|Any CPU - {E5A7DC6C-BF8D-418A-BCBD-094EB748FA82}.Release|x64.ActiveCfg = Release|Any CPU - {E5A7DC6C-BF8D-418A-BCBD-094EB748FA82}.Release|x64.Build.0 = Release|Any CPU - {E5A7DC6C-BF8D-418A-BCBD-094EB748FA82}.Release|x86.ActiveCfg = Release|Any CPU - {E5A7DC6C-BF8D-418A-BCBD-094EB748FA82}.Release|x86.Build.0 = Release|Any CPU - {E5A7DC6C-BF8D-418A-BCBD-094EB748FA82}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU - {E5A7DC6C-BF8D-418A-BCBD-094EB748FA82}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU - {E5A7DC6C-BF8D-418A-BCBD-094EB748FA82}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU - {E5A7DC6C-BF8D-418A-BCBD-094EB748FA82}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU - {E5A7DC6C-BF8D-418A-BCBD-094EB748FA82}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU - {E5A7DC6C-BF8D-418A-BCBD-094EB748FA82}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU - {E5A7DC6C-BF8D-418A-BCBD-094EB748FA82}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU - {E5A7DC6C-BF8D-418A-BCBD-094EB748FA82}.RelWithDebInfo|x64.Build.0 = Release|Any CPU - {E5A7DC6C-BF8D-418A-BCBD-094EB748FA82}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU - {E5A7DC6C-BF8D-418A-BCBD-094EB748FA82}.RelWithDebInfo|x86.Build.0 = Release|Any CPU - {D8BE9C81-194E-43E5-82CF-2080892FBDE7}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {D8BE9C81-194E-43E5-82CF-2080892FBDE7}.Checked|Any CPU.Build.0 = Debug|Any CPU - {D8BE9C81-194E-43E5-82CF-2080892FBDE7}.Checked|ARM.ActiveCfg = Debug|Any CPU - {D8BE9C81-194E-43E5-82CF-2080892FBDE7}.Checked|ARM.Build.0 = Debug|Any CPU - {D8BE9C81-194E-43E5-82CF-2080892FBDE7}.Checked|ARM64.ActiveCfg = Debug|Any CPU - {D8BE9C81-194E-43E5-82CF-2080892FBDE7}.Checked|ARM64.Build.0 = Debug|Any CPU - {D8BE9C81-194E-43E5-82CF-2080892FBDE7}.Checked|x64.ActiveCfg = Debug|Any CPU - {D8BE9C81-194E-43E5-82CF-2080892FBDE7}.Checked|x64.Build.0 = Debug|Any CPU - {D8BE9C81-194E-43E5-82CF-2080892FBDE7}.Checked|x86.ActiveCfg = Debug|Any CPU - {D8BE9C81-194E-43E5-82CF-2080892FBDE7}.Checked|x86.Build.0 = Debug|Any CPU - {D8BE9C81-194E-43E5-82CF-2080892FBDE7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D8BE9C81-194E-43E5-82CF-2080892FBDE7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D8BE9C81-194E-43E5-82CF-2080892FBDE7}.Debug|ARM.ActiveCfg = Debug|Any CPU - {D8BE9C81-194E-43E5-82CF-2080892FBDE7}.Debug|ARM.Build.0 = Debug|Any CPU - {D8BE9C81-194E-43E5-82CF-2080892FBDE7}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {D8BE9C81-194E-43E5-82CF-2080892FBDE7}.Debug|ARM64.Build.0 = Debug|Any CPU - {D8BE9C81-194E-43E5-82CF-2080892FBDE7}.Debug|x64.ActiveCfg = Debug|Any CPU - {D8BE9C81-194E-43E5-82CF-2080892FBDE7}.Debug|x64.Build.0 = Debug|Any CPU - {D8BE9C81-194E-43E5-82CF-2080892FBDE7}.Debug|x86.ActiveCfg = Debug|Any CPU - {D8BE9C81-194E-43E5-82CF-2080892FBDE7}.Debug|x86.Build.0 = Debug|Any CPU - {D8BE9C81-194E-43E5-82CF-2080892FBDE7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D8BE9C81-194E-43E5-82CF-2080892FBDE7}.Release|Any CPU.Build.0 = Release|Any CPU - {D8BE9C81-194E-43E5-82CF-2080892FBDE7}.Release|ARM.ActiveCfg = Release|Any CPU - {D8BE9C81-194E-43E5-82CF-2080892FBDE7}.Release|ARM.Build.0 = Release|Any CPU - {D8BE9C81-194E-43E5-82CF-2080892FBDE7}.Release|ARM64.ActiveCfg = Release|Any CPU - {D8BE9C81-194E-43E5-82CF-2080892FBDE7}.Release|ARM64.Build.0 = Release|Any CPU - {D8BE9C81-194E-43E5-82CF-2080892FBDE7}.Release|x64.ActiveCfg = Release|Any CPU - {D8BE9C81-194E-43E5-82CF-2080892FBDE7}.Release|x64.Build.0 = Release|Any CPU - {D8BE9C81-194E-43E5-82CF-2080892FBDE7}.Release|x86.ActiveCfg = Release|Any CPU - {D8BE9C81-194E-43E5-82CF-2080892FBDE7}.Release|x86.Build.0 = Release|Any CPU - {D8BE9C81-194E-43E5-82CF-2080892FBDE7}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU - {D8BE9C81-194E-43E5-82CF-2080892FBDE7}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU - {D8BE9C81-194E-43E5-82CF-2080892FBDE7}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU - {D8BE9C81-194E-43E5-82CF-2080892FBDE7}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU - {D8BE9C81-194E-43E5-82CF-2080892FBDE7}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU - {D8BE9C81-194E-43E5-82CF-2080892FBDE7}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU - {D8BE9C81-194E-43E5-82CF-2080892FBDE7}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU - {D8BE9C81-194E-43E5-82CF-2080892FBDE7}.RelWithDebInfo|x64.Build.0 = Release|Any CPU - {D8BE9C81-194E-43E5-82CF-2080892FBDE7}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU - {D8BE9C81-194E-43E5-82CF-2080892FBDE7}.RelWithDebInfo|x86.Build.0 = Release|Any CPU - {6F4DD2F8-1C7B-4A87-B7E5-1BEE9F5AC128}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {6F4DD2F8-1C7B-4A87-B7E5-1BEE9F5AC128}.Checked|Any CPU.Build.0 = Debug|Any CPU - {6F4DD2F8-1C7B-4A87-B7E5-1BEE9F5AC128}.Checked|ARM.ActiveCfg = Debug|Any CPU - {6F4DD2F8-1C7B-4A87-B7E5-1BEE9F5AC128}.Checked|ARM.Build.0 = Debug|Any CPU - {6F4DD2F8-1C7B-4A87-B7E5-1BEE9F5AC128}.Checked|ARM64.ActiveCfg = Debug|Any CPU - {6F4DD2F8-1C7B-4A87-B7E5-1BEE9F5AC128}.Checked|ARM64.Build.0 = Debug|Any CPU - {6F4DD2F8-1C7B-4A87-B7E5-1BEE9F5AC128}.Checked|x64.ActiveCfg = Debug|Any CPU - {6F4DD2F8-1C7B-4A87-B7E5-1BEE9F5AC128}.Checked|x64.Build.0 = Debug|Any CPU - {6F4DD2F8-1C7B-4A87-B7E5-1BEE9F5AC128}.Checked|x86.ActiveCfg = Debug|Any CPU - {6F4DD2F8-1C7B-4A87-B7E5-1BEE9F5AC128}.Checked|x86.Build.0 = Debug|Any CPU - {6F4DD2F8-1C7B-4A87-B7E5-1BEE9F5AC128}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6F4DD2F8-1C7B-4A87-B7E5-1BEE9F5AC128}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6F4DD2F8-1C7B-4A87-B7E5-1BEE9F5AC128}.Debug|ARM.ActiveCfg = Debug|Any CPU - {6F4DD2F8-1C7B-4A87-B7E5-1BEE9F5AC128}.Debug|ARM.Build.0 = Debug|Any CPU - {6F4DD2F8-1C7B-4A87-B7E5-1BEE9F5AC128}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {6F4DD2F8-1C7B-4A87-B7E5-1BEE9F5AC128}.Debug|ARM64.Build.0 = Debug|Any CPU - {6F4DD2F8-1C7B-4A87-B7E5-1BEE9F5AC128}.Debug|x64.ActiveCfg = Debug|Any CPU - {6F4DD2F8-1C7B-4A87-B7E5-1BEE9F5AC128}.Debug|x64.Build.0 = Debug|Any CPU - {6F4DD2F8-1C7B-4A87-B7E5-1BEE9F5AC128}.Debug|x86.ActiveCfg = Debug|Any CPU - {6F4DD2F8-1C7B-4A87-B7E5-1BEE9F5AC128}.Debug|x86.Build.0 = Debug|Any CPU - {6F4DD2F8-1C7B-4A87-B7E5-1BEE9F5AC128}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6F4DD2F8-1C7B-4A87-B7E5-1BEE9F5AC128}.Release|Any CPU.Build.0 = Release|Any CPU - {6F4DD2F8-1C7B-4A87-B7E5-1BEE9F5AC128}.Release|ARM.ActiveCfg = Release|Any CPU - {6F4DD2F8-1C7B-4A87-B7E5-1BEE9F5AC128}.Release|ARM.Build.0 = Release|Any CPU - {6F4DD2F8-1C7B-4A87-B7E5-1BEE9F5AC128}.Release|ARM64.ActiveCfg = Release|Any CPU - {6F4DD2F8-1C7B-4A87-B7E5-1BEE9F5AC128}.Release|ARM64.Build.0 = Release|Any CPU - {6F4DD2F8-1C7B-4A87-B7E5-1BEE9F5AC128}.Release|x64.ActiveCfg = Release|Any CPU - {6F4DD2F8-1C7B-4A87-B7E5-1BEE9F5AC128}.Release|x64.Build.0 = Release|Any CPU - {6F4DD2F8-1C7B-4A87-B7E5-1BEE9F5AC128}.Release|x86.ActiveCfg = Release|Any CPU - {6F4DD2F8-1C7B-4A87-B7E5-1BEE9F5AC128}.Release|x86.Build.0 = Release|Any CPU - {6F4DD2F8-1C7B-4A87-B7E5-1BEE9F5AC128}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU - {6F4DD2F8-1C7B-4A87-B7E5-1BEE9F5AC128}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU - {6F4DD2F8-1C7B-4A87-B7E5-1BEE9F5AC128}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU - {6F4DD2F8-1C7B-4A87-B7E5-1BEE9F5AC128}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU - {6F4DD2F8-1C7B-4A87-B7E5-1BEE9F5AC128}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU - {6F4DD2F8-1C7B-4A87-B7E5-1BEE9F5AC128}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU - {6F4DD2F8-1C7B-4A87-B7E5-1BEE9F5AC128}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU - {6F4DD2F8-1C7B-4A87-B7E5-1BEE9F5AC128}.RelWithDebInfo|x64.Build.0 = Release|Any CPU - {6F4DD2F8-1C7B-4A87-B7E5-1BEE9F5AC128}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU - {6F4DD2F8-1C7B-4A87-B7E5-1BEE9F5AC128}.RelWithDebInfo|x86.Build.0 = Release|Any CPU - {C79D6069-2C18-48CB-846E-71F7168C2F7D}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {C79D6069-2C18-48CB-846E-71F7168C2F7D}.Checked|Any CPU.Build.0 = Debug|Any CPU - {C79D6069-2C18-48CB-846E-71F7168C2F7D}.Checked|ARM.ActiveCfg = Debug|Any CPU - {C79D6069-2C18-48CB-846E-71F7168C2F7D}.Checked|ARM.Build.0 = Debug|Any CPU - {C79D6069-2C18-48CB-846E-71F7168C2F7D}.Checked|ARM64.ActiveCfg = Debug|Any CPU - {C79D6069-2C18-48CB-846E-71F7168C2F7D}.Checked|ARM64.Build.0 = Debug|Any CPU - {C79D6069-2C18-48CB-846E-71F7168C2F7D}.Checked|x64.ActiveCfg = Debug|Any CPU - {C79D6069-2C18-48CB-846E-71F7168C2F7D}.Checked|x64.Build.0 = Debug|Any CPU - {C79D6069-2C18-48CB-846E-71F7168C2F7D}.Checked|x86.ActiveCfg = Debug|Any CPU - {C79D6069-2C18-48CB-846E-71F7168C2F7D}.Checked|x86.Build.0 = Debug|Any CPU - {C79D6069-2C18-48CB-846E-71F7168C2F7D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C79D6069-2C18-48CB-846E-71F7168C2F7D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C79D6069-2C18-48CB-846E-71F7168C2F7D}.Debug|ARM.ActiveCfg = Debug|Any CPU - {C79D6069-2C18-48CB-846E-71F7168C2F7D}.Debug|ARM.Build.0 = Debug|Any CPU - {C79D6069-2C18-48CB-846E-71F7168C2F7D}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {C79D6069-2C18-48CB-846E-71F7168C2F7D}.Debug|ARM64.Build.0 = Debug|Any CPU - {C79D6069-2C18-48CB-846E-71F7168C2F7D}.Debug|x64.ActiveCfg = Debug|Any CPU - {C79D6069-2C18-48CB-846E-71F7168C2F7D}.Debug|x64.Build.0 = Debug|Any CPU - {C79D6069-2C18-48CB-846E-71F7168C2F7D}.Debug|x86.ActiveCfg = Debug|Any CPU - {C79D6069-2C18-48CB-846E-71F7168C2F7D}.Debug|x86.Build.0 = Debug|Any CPU - {C79D6069-2C18-48CB-846E-71F7168C2F7D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C79D6069-2C18-48CB-846E-71F7168C2F7D}.Release|Any CPU.Build.0 = Release|Any CPU - {C79D6069-2C18-48CB-846E-71F7168C2F7D}.Release|ARM.ActiveCfg = Release|Any CPU - {C79D6069-2C18-48CB-846E-71F7168C2F7D}.Release|ARM.Build.0 = Release|Any CPU - {C79D6069-2C18-48CB-846E-71F7168C2F7D}.Release|ARM64.ActiveCfg = Release|Any CPU - {C79D6069-2C18-48CB-846E-71F7168C2F7D}.Release|ARM64.Build.0 = Release|Any CPU - {C79D6069-2C18-48CB-846E-71F7168C2F7D}.Release|x64.ActiveCfg = Release|Any CPU - {C79D6069-2C18-48CB-846E-71F7168C2F7D}.Release|x64.Build.0 = Release|Any CPU - {C79D6069-2C18-48CB-846E-71F7168C2F7D}.Release|x86.ActiveCfg = Release|Any CPU - {C79D6069-2C18-48CB-846E-71F7168C2F7D}.Release|x86.Build.0 = Release|Any CPU - {C79D6069-2C18-48CB-846E-71F7168C2F7D}.RelWithDebInfo|Any CPU.ActiveCfg = Debug|Any CPU - {C79D6069-2C18-48CB-846E-71F7168C2F7D}.RelWithDebInfo|Any CPU.Build.0 = Debug|Any CPU - {C79D6069-2C18-48CB-846E-71F7168C2F7D}.RelWithDebInfo|ARM.ActiveCfg = Debug|Any CPU - {C79D6069-2C18-48CB-846E-71F7168C2F7D}.RelWithDebInfo|ARM.Build.0 = Debug|Any CPU - {C79D6069-2C18-48CB-846E-71F7168C2F7D}.RelWithDebInfo|ARM64.ActiveCfg = Debug|Any CPU - {C79D6069-2C18-48CB-846E-71F7168C2F7D}.RelWithDebInfo|ARM64.Build.0 = Debug|Any CPU - {C79D6069-2C18-48CB-846E-71F7168C2F7D}.RelWithDebInfo|x64.ActiveCfg = Debug|Any CPU - {C79D6069-2C18-48CB-846E-71F7168C2F7D}.RelWithDebInfo|x64.Build.0 = Debug|Any CPU - {C79D6069-2C18-48CB-846E-71F7168C2F7D}.RelWithDebInfo|x86.ActiveCfg = Debug|Any CPU - {C79D6069-2C18-48CB-846E-71F7168C2F7D}.RelWithDebInfo|x86.Build.0 = Debug|Any CPU - {CED9ABBA-861E-4C0A-9359-22351208EF27}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {CED9ABBA-861E-4C0A-9359-22351208EF27}.Checked|Any CPU.Build.0 = Debug|Any CPU - {CED9ABBA-861E-4C0A-9359-22351208EF27}.Checked|ARM.ActiveCfg = Debug|Any CPU - {CED9ABBA-861E-4C0A-9359-22351208EF27}.Checked|ARM.Build.0 = Debug|Any CPU - {CED9ABBA-861E-4C0A-9359-22351208EF27}.Checked|ARM64.ActiveCfg = Debug|Any CPU - {CED9ABBA-861E-4C0A-9359-22351208EF27}.Checked|ARM64.Build.0 = Debug|Any CPU - {CED9ABBA-861E-4C0A-9359-22351208EF27}.Checked|x64.ActiveCfg = Debug|Any CPU - {CED9ABBA-861E-4C0A-9359-22351208EF27}.Checked|x64.Build.0 = Debug|Any CPU - {CED9ABBA-861E-4C0A-9359-22351208EF27}.Checked|x86.ActiveCfg = Debug|Any CPU - {CED9ABBA-861E-4C0A-9359-22351208EF27}.Checked|x86.Build.0 = Debug|Any CPU - {CED9ABBA-861E-4C0A-9359-22351208EF27}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CED9ABBA-861E-4C0A-9359-22351208EF27}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CED9ABBA-861E-4C0A-9359-22351208EF27}.Debug|ARM.ActiveCfg = Debug|Any CPU - {CED9ABBA-861E-4C0A-9359-22351208EF27}.Debug|ARM.Build.0 = Debug|Any CPU - {CED9ABBA-861E-4C0A-9359-22351208EF27}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {CED9ABBA-861E-4C0A-9359-22351208EF27}.Debug|ARM64.Build.0 = Debug|Any CPU - {CED9ABBA-861E-4C0A-9359-22351208EF27}.Debug|x64.ActiveCfg = Debug|Any CPU - {CED9ABBA-861E-4C0A-9359-22351208EF27}.Debug|x64.Build.0 = Debug|Any CPU - {CED9ABBA-861E-4C0A-9359-22351208EF27}.Debug|x86.ActiveCfg = Debug|Any CPU - {CED9ABBA-861E-4C0A-9359-22351208EF27}.Debug|x86.Build.0 = Debug|Any CPU - {CED9ABBA-861E-4C0A-9359-22351208EF27}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CED9ABBA-861E-4C0A-9359-22351208EF27}.Release|Any CPU.Build.0 = Release|Any CPU - {CED9ABBA-861E-4C0A-9359-22351208EF27}.Release|ARM.ActiveCfg = Release|Any CPU - {CED9ABBA-861E-4C0A-9359-22351208EF27}.Release|ARM.Build.0 = Release|Any CPU - {CED9ABBA-861E-4C0A-9359-22351208EF27}.Release|ARM64.ActiveCfg = Release|Any CPU - {CED9ABBA-861E-4C0A-9359-22351208EF27}.Release|ARM64.Build.0 = Release|Any CPU - {CED9ABBA-861E-4C0A-9359-22351208EF27}.Release|x64.ActiveCfg = Release|Any CPU - {CED9ABBA-861E-4C0A-9359-22351208EF27}.Release|x64.Build.0 = Release|Any CPU - {CED9ABBA-861E-4C0A-9359-22351208EF27}.Release|x86.ActiveCfg = Release|Any CPU - {CED9ABBA-861E-4C0A-9359-22351208EF27}.Release|x86.Build.0 = Release|Any CPU - {CED9ABBA-861E-4C0A-9359-22351208EF27}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU - {CED9ABBA-861E-4C0A-9359-22351208EF27}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU - {CED9ABBA-861E-4C0A-9359-22351208EF27}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU - {CED9ABBA-861E-4C0A-9359-22351208EF27}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU - {CED9ABBA-861E-4C0A-9359-22351208EF27}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU - {CED9ABBA-861E-4C0A-9359-22351208EF27}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU - {CED9ABBA-861E-4C0A-9359-22351208EF27}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU - {CED9ABBA-861E-4C0A-9359-22351208EF27}.RelWithDebInfo|x64.Build.0 = Release|Any CPU - {CED9ABBA-861E-4C0A-9359-22351208EF27}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU - {CED9ABBA-861E-4C0A-9359-22351208EF27}.RelWithDebInfo|x86.Build.0 = Release|Any CPU - {CFCF90E5-91CF-44FD-819D-97F530AEF769}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {CFCF90E5-91CF-44FD-819D-97F530AEF769}.Checked|Any CPU.Build.0 = Debug|Any CPU - {CFCF90E5-91CF-44FD-819D-97F530AEF769}.Checked|ARM.ActiveCfg = Debug|Any CPU - {CFCF90E5-91CF-44FD-819D-97F530AEF769}.Checked|ARM.Build.0 = Debug|Any CPU - {CFCF90E5-91CF-44FD-819D-97F530AEF769}.Checked|ARM64.ActiveCfg = Debug|Any CPU - {CFCF90E5-91CF-44FD-819D-97F530AEF769}.Checked|ARM64.Build.0 = Debug|Any CPU - {CFCF90E5-91CF-44FD-819D-97F530AEF769}.Checked|x64.ActiveCfg = Debug|Any CPU - {CFCF90E5-91CF-44FD-819D-97F530AEF769}.Checked|x64.Build.0 = Debug|Any CPU - {CFCF90E5-91CF-44FD-819D-97F530AEF769}.Checked|x86.ActiveCfg = Debug|Any CPU - {CFCF90E5-91CF-44FD-819D-97F530AEF769}.Checked|x86.Build.0 = Debug|Any CPU - {CFCF90E5-91CF-44FD-819D-97F530AEF769}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CFCF90E5-91CF-44FD-819D-97F530AEF769}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CFCF90E5-91CF-44FD-819D-97F530AEF769}.Debug|ARM.ActiveCfg = Debug|Any CPU - {CFCF90E5-91CF-44FD-819D-97F530AEF769}.Debug|ARM.Build.0 = Debug|Any CPU - {CFCF90E5-91CF-44FD-819D-97F530AEF769}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {CFCF90E5-91CF-44FD-819D-97F530AEF769}.Debug|ARM64.Build.0 = Debug|Any CPU - {CFCF90E5-91CF-44FD-819D-97F530AEF769}.Debug|x64.ActiveCfg = Debug|Any CPU - {CFCF90E5-91CF-44FD-819D-97F530AEF769}.Debug|x64.Build.0 = Debug|Any CPU - {CFCF90E5-91CF-44FD-819D-97F530AEF769}.Debug|x86.ActiveCfg = Debug|Any CPU - {CFCF90E5-91CF-44FD-819D-97F530AEF769}.Debug|x86.Build.0 = Debug|Any CPU - {CFCF90E5-91CF-44FD-819D-97F530AEF769}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CFCF90E5-91CF-44FD-819D-97F530AEF769}.Release|Any CPU.Build.0 = Release|Any CPU - {CFCF90E5-91CF-44FD-819D-97F530AEF769}.Release|ARM.ActiveCfg = Release|Any CPU - {CFCF90E5-91CF-44FD-819D-97F530AEF769}.Release|ARM.Build.0 = Release|Any CPU - {CFCF90E5-91CF-44FD-819D-97F530AEF769}.Release|ARM64.ActiveCfg = Release|Any CPU - {CFCF90E5-91CF-44FD-819D-97F530AEF769}.Release|ARM64.Build.0 = Release|Any CPU - {CFCF90E5-91CF-44FD-819D-97F530AEF769}.Release|x64.ActiveCfg = Release|Any CPU - {CFCF90E5-91CF-44FD-819D-97F530AEF769}.Release|x64.Build.0 = Release|Any CPU - {CFCF90E5-91CF-44FD-819D-97F530AEF769}.Release|x86.ActiveCfg = Release|Any CPU - {CFCF90E5-91CF-44FD-819D-97F530AEF769}.Release|x86.Build.0 = Release|Any CPU - {CFCF90E5-91CF-44FD-819D-97F530AEF769}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU - {CFCF90E5-91CF-44FD-819D-97F530AEF769}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU - {CFCF90E5-91CF-44FD-819D-97F530AEF769}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU - {CFCF90E5-91CF-44FD-819D-97F530AEF769}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU - {CFCF90E5-91CF-44FD-819D-97F530AEF769}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU - {CFCF90E5-91CF-44FD-819D-97F530AEF769}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU - {CFCF90E5-91CF-44FD-819D-97F530AEF769}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU - {CFCF90E5-91CF-44FD-819D-97F530AEF769}.RelWithDebInfo|x64.Build.0 = Release|Any CPU - {CFCF90E5-91CF-44FD-819D-97F530AEF769}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU - {CFCF90E5-91CF-44FD-819D-97F530AEF769}.RelWithDebInfo|x86.Build.0 = Release|Any CPU - {6419BA04-6F1A-4D2F-8DE4-5C359E0364A3}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {6419BA04-6F1A-4D2F-8DE4-5C359E0364A3}.Checked|Any CPU.Build.0 = Debug|Any CPU - {6419BA04-6F1A-4D2F-8DE4-5C359E0364A3}.Checked|ARM.ActiveCfg = Debug|Any CPU - {6419BA04-6F1A-4D2F-8DE4-5C359E0364A3}.Checked|ARM.Build.0 = Debug|Any CPU - {6419BA04-6F1A-4D2F-8DE4-5C359E0364A3}.Checked|ARM64.ActiveCfg = Debug|Any CPU - {6419BA04-6F1A-4D2F-8DE4-5C359E0364A3}.Checked|ARM64.Build.0 = Debug|Any CPU - {6419BA04-6F1A-4D2F-8DE4-5C359E0364A3}.Checked|x64.ActiveCfg = Debug|Any CPU - {6419BA04-6F1A-4D2F-8DE4-5C359E0364A3}.Checked|x64.Build.0 = Debug|Any CPU - {6419BA04-6F1A-4D2F-8DE4-5C359E0364A3}.Checked|x86.ActiveCfg = Debug|Any CPU - {6419BA04-6F1A-4D2F-8DE4-5C359E0364A3}.Checked|x86.Build.0 = Debug|Any CPU - {6419BA04-6F1A-4D2F-8DE4-5C359E0364A3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6419BA04-6F1A-4D2F-8DE4-5C359E0364A3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6419BA04-6F1A-4D2F-8DE4-5C359E0364A3}.Debug|ARM.ActiveCfg = Debug|Any CPU - {6419BA04-6F1A-4D2F-8DE4-5C359E0364A3}.Debug|ARM.Build.0 = Debug|Any CPU - {6419BA04-6F1A-4D2F-8DE4-5C359E0364A3}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {6419BA04-6F1A-4D2F-8DE4-5C359E0364A3}.Debug|ARM64.Build.0 = Debug|Any CPU - {6419BA04-6F1A-4D2F-8DE4-5C359E0364A3}.Debug|x64.ActiveCfg = Debug|Any CPU - {6419BA04-6F1A-4D2F-8DE4-5C359E0364A3}.Debug|x64.Build.0 = Debug|Any CPU - {6419BA04-6F1A-4D2F-8DE4-5C359E0364A3}.Debug|x86.ActiveCfg = Debug|Any CPU - {6419BA04-6F1A-4D2F-8DE4-5C359E0364A3}.Debug|x86.Build.0 = Debug|Any CPU - {6419BA04-6F1A-4D2F-8DE4-5C359E0364A3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6419BA04-6F1A-4D2F-8DE4-5C359E0364A3}.Release|Any CPU.Build.0 = Release|Any CPU - {6419BA04-6F1A-4D2F-8DE4-5C359E0364A3}.Release|ARM.ActiveCfg = Release|Any CPU - {6419BA04-6F1A-4D2F-8DE4-5C359E0364A3}.Release|ARM.Build.0 = Release|Any CPU - {6419BA04-6F1A-4D2F-8DE4-5C359E0364A3}.Release|ARM64.ActiveCfg = Release|Any CPU - {6419BA04-6F1A-4D2F-8DE4-5C359E0364A3}.Release|ARM64.Build.0 = Release|Any CPU - {6419BA04-6F1A-4D2F-8DE4-5C359E0364A3}.Release|x64.ActiveCfg = Release|Any CPU - {6419BA04-6F1A-4D2F-8DE4-5C359E0364A3}.Release|x64.Build.0 = Release|Any CPU - {6419BA04-6F1A-4D2F-8DE4-5C359E0364A3}.Release|x86.ActiveCfg = Release|Any CPU - {6419BA04-6F1A-4D2F-8DE4-5C359E0364A3}.Release|x86.Build.0 = Release|Any CPU - {6419BA04-6F1A-4D2F-8DE4-5C359E0364A3}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU - {6419BA04-6F1A-4D2F-8DE4-5C359E0364A3}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU - {6419BA04-6F1A-4D2F-8DE4-5C359E0364A3}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU - {6419BA04-6F1A-4D2F-8DE4-5C359E0364A3}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU - {6419BA04-6F1A-4D2F-8DE4-5C359E0364A3}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU - {6419BA04-6F1A-4D2F-8DE4-5C359E0364A3}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU - {6419BA04-6F1A-4D2F-8DE4-5C359E0364A3}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU - {6419BA04-6F1A-4D2F-8DE4-5C359E0364A3}.RelWithDebInfo|x64.Build.0 = Release|Any CPU - {6419BA04-6F1A-4D2F-8DE4-5C359E0364A3}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU - {6419BA04-6F1A-4D2F-8DE4-5C359E0364A3}.RelWithDebInfo|x86.Build.0 = Release|Any CPU - {870A7AD0-B808-491E-92F6-433BE990B374}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {870A7AD0-B808-491E-92F6-433BE990B374}.Checked|Any CPU.Build.0 = Debug|Any CPU - {870A7AD0-B808-491E-92F6-433BE990B374}.Checked|ARM.ActiveCfg = Debug|Any CPU - {870A7AD0-B808-491E-92F6-433BE990B374}.Checked|ARM.Build.0 = Debug|Any CPU - {870A7AD0-B808-491E-92F6-433BE990B374}.Checked|ARM64.ActiveCfg = Debug|Any CPU - {870A7AD0-B808-491E-92F6-433BE990B374}.Checked|ARM64.Build.0 = Debug|Any CPU - {870A7AD0-B808-491E-92F6-433BE990B374}.Checked|x64.ActiveCfg = Debug|Any CPU - {870A7AD0-B808-491E-92F6-433BE990B374}.Checked|x64.Build.0 = Debug|Any CPU - {870A7AD0-B808-491E-92F6-433BE990B374}.Checked|x86.ActiveCfg = Debug|Any CPU - {870A7AD0-B808-491E-92F6-433BE990B374}.Checked|x86.Build.0 = Debug|Any CPU - {870A7AD0-B808-491E-92F6-433BE990B374}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {870A7AD0-B808-491E-92F6-433BE990B374}.Debug|Any CPU.Build.0 = Debug|Any CPU - {870A7AD0-B808-491E-92F6-433BE990B374}.Debug|ARM.ActiveCfg = Debug|Any CPU - {870A7AD0-B808-491E-92F6-433BE990B374}.Debug|ARM.Build.0 = Debug|Any CPU - {870A7AD0-B808-491E-92F6-433BE990B374}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {870A7AD0-B808-491E-92F6-433BE990B374}.Debug|ARM64.Build.0 = Debug|Any CPU - {870A7AD0-B808-491E-92F6-433BE990B374}.Debug|x64.ActiveCfg = Debug|Any CPU - {870A7AD0-B808-491E-92F6-433BE990B374}.Debug|x64.Build.0 = Debug|Any CPU - {870A7AD0-B808-491E-92F6-433BE990B374}.Debug|x86.ActiveCfg = Debug|Any CPU - {870A7AD0-B808-491E-92F6-433BE990B374}.Debug|x86.Build.0 = Debug|Any CPU - {870A7AD0-B808-491E-92F6-433BE990B374}.Release|Any CPU.ActiveCfg = Release|Any CPU - {870A7AD0-B808-491E-92F6-433BE990B374}.Release|Any CPU.Build.0 = Release|Any CPU - {870A7AD0-B808-491E-92F6-433BE990B374}.Release|ARM.ActiveCfg = Release|Any CPU - {870A7AD0-B808-491E-92F6-433BE990B374}.Release|ARM.Build.0 = Release|Any CPU - {870A7AD0-B808-491E-92F6-433BE990B374}.Release|ARM64.ActiveCfg = Release|Any CPU - {870A7AD0-B808-491E-92F6-433BE990B374}.Release|ARM64.Build.0 = Release|Any CPU - {870A7AD0-B808-491E-92F6-433BE990B374}.Release|x64.ActiveCfg = Release|Any CPU - {870A7AD0-B808-491E-92F6-433BE990B374}.Release|x64.Build.0 = Release|Any CPU - {870A7AD0-B808-491E-92F6-433BE990B374}.Release|x86.ActiveCfg = Release|Any CPU - {870A7AD0-B808-491E-92F6-433BE990B374}.Release|x86.Build.0 = Release|Any CPU - {870A7AD0-B808-491E-92F6-433BE990B374}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU - {870A7AD0-B808-491E-92F6-433BE990B374}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU - {870A7AD0-B808-491E-92F6-433BE990B374}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU - {870A7AD0-B808-491E-92F6-433BE990B374}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU - {870A7AD0-B808-491E-92F6-433BE990B374}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU - {870A7AD0-B808-491E-92F6-433BE990B374}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU - {870A7AD0-B808-491E-92F6-433BE990B374}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU - {870A7AD0-B808-491E-92F6-433BE990B374}.RelWithDebInfo|x64.Build.0 = Release|Any CPU - {870A7AD0-B808-491E-92F6-433BE990B374}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU - {870A7AD0-B808-491E-92F6-433BE990B374}.RelWithDebInfo|x86.Build.0 = Release|Any CPU - {E1E2C698-E247-4D48-AE01-542B43744ACB}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {E1E2C698-E247-4D48-AE01-542B43744ACB}.Checked|Any CPU.Build.0 = Debug|Any CPU - {E1E2C698-E247-4D48-AE01-542B43744ACB}.Checked|ARM.ActiveCfg = Debug|Any CPU - {E1E2C698-E247-4D48-AE01-542B43744ACB}.Checked|ARM.Build.0 = Debug|Any CPU - {E1E2C698-E247-4D48-AE01-542B43744ACB}.Checked|ARM64.ActiveCfg = Debug|Any CPU - {E1E2C698-E247-4D48-AE01-542B43744ACB}.Checked|ARM64.Build.0 = Debug|Any CPU - {E1E2C698-E247-4D48-AE01-542B43744ACB}.Checked|x64.ActiveCfg = Debug|Any CPU - {E1E2C698-E247-4D48-AE01-542B43744ACB}.Checked|x64.Build.0 = Debug|Any CPU - {E1E2C698-E247-4D48-AE01-542B43744ACB}.Checked|x86.ActiveCfg = Debug|Any CPU - {E1E2C698-E247-4D48-AE01-542B43744ACB}.Checked|x86.Build.0 = Debug|Any CPU - {E1E2C698-E247-4D48-AE01-542B43744ACB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E1E2C698-E247-4D48-AE01-542B43744ACB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E1E2C698-E247-4D48-AE01-542B43744ACB}.Debug|ARM.ActiveCfg = Debug|Any CPU - {E1E2C698-E247-4D48-AE01-542B43744ACB}.Debug|ARM.Build.0 = Debug|Any CPU - {E1E2C698-E247-4D48-AE01-542B43744ACB}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {E1E2C698-E247-4D48-AE01-542B43744ACB}.Debug|ARM64.Build.0 = Debug|Any CPU - {E1E2C698-E247-4D48-AE01-542B43744ACB}.Debug|x64.ActiveCfg = Debug|Any CPU - {E1E2C698-E247-4D48-AE01-542B43744ACB}.Debug|x64.Build.0 = Debug|Any CPU - {E1E2C698-E247-4D48-AE01-542B43744ACB}.Debug|x86.ActiveCfg = Debug|Any CPU - {E1E2C698-E247-4D48-AE01-542B43744ACB}.Debug|x86.Build.0 = Debug|Any CPU - {E1E2C698-E247-4D48-AE01-542B43744ACB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E1E2C698-E247-4D48-AE01-542B43744ACB}.Release|Any CPU.Build.0 = Release|Any CPU - {E1E2C698-E247-4D48-AE01-542B43744ACB}.Release|ARM.ActiveCfg = Release|Any CPU - {E1E2C698-E247-4D48-AE01-542B43744ACB}.Release|ARM.Build.0 = Release|Any CPU - {E1E2C698-E247-4D48-AE01-542B43744ACB}.Release|ARM64.ActiveCfg = Release|Any CPU - {E1E2C698-E247-4D48-AE01-542B43744ACB}.Release|ARM64.Build.0 = Release|Any CPU - {E1E2C698-E247-4D48-AE01-542B43744ACB}.Release|x64.ActiveCfg = Release|Any CPU - {E1E2C698-E247-4D48-AE01-542B43744ACB}.Release|x64.Build.0 = Release|Any CPU - {E1E2C698-E247-4D48-AE01-542B43744ACB}.Release|x86.ActiveCfg = Release|Any CPU - {E1E2C698-E247-4D48-AE01-542B43744ACB}.Release|x86.Build.0 = Release|Any CPU - {E1E2C698-E247-4D48-AE01-542B43744ACB}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU - {E1E2C698-E247-4D48-AE01-542B43744ACB}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU - {E1E2C698-E247-4D48-AE01-542B43744ACB}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU - {E1E2C698-E247-4D48-AE01-542B43744ACB}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU - {E1E2C698-E247-4D48-AE01-542B43744ACB}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU - {E1E2C698-E247-4D48-AE01-542B43744ACB}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU - {E1E2C698-E247-4D48-AE01-542B43744ACB}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU - {E1E2C698-E247-4D48-AE01-542B43744ACB}.RelWithDebInfo|x64.Build.0 = Release|Any CPU - {E1E2C698-E247-4D48-AE01-542B43744ACB}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU - {E1E2C698-E247-4D48-AE01-542B43744ACB}.RelWithDebInfo|x86.Build.0 = Release|Any CPU - {A58B7F72-E9DF-4962-9E15-300EF4C53ABB}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {A58B7F72-E9DF-4962-9E15-300EF4C53ABB}.Checked|Any CPU.Build.0 = Debug|Any CPU - {A58B7F72-E9DF-4962-9E15-300EF4C53ABB}.Checked|ARM.ActiveCfg = Debug|Any CPU - {A58B7F72-E9DF-4962-9E15-300EF4C53ABB}.Checked|ARM.Build.0 = Debug|Any CPU - {A58B7F72-E9DF-4962-9E15-300EF4C53ABB}.Checked|ARM64.ActiveCfg = Debug|Any CPU - {A58B7F72-E9DF-4962-9E15-300EF4C53ABB}.Checked|ARM64.Build.0 = Debug|Any CPU - {A58B7F72-E9DF-4962-9E15-300EF4C53ABB}.Checked|x64.ActiveCfg = Debug|Any CPU - {A58B7F72-E9DF-4962-9E15-300EF4C53ABB}.Checked|x64.Build.0 = Debug|Any CPU - {A58B7F72-E9DF-4962-9E15-300EF4C53ABB}.Checked|x86.ActiveCfg = Debug|Any CPU - {A58B7F72-E9DF-4962-9E15-300EF4C53ABB}.Checked|x86.Build.0 = Debug|Any CPU - {A58B7F72-E9DF-4962-9E15-300EF4C53ABB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A58B7F72-E9DF-4962-9E15-300EF4C53ABB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A58B7F72-E9DF-4962-9E15-300EF4C53ABB}.Debug|ARM.ActiveCfg = Debug|Any CPU - {A58B7F72-E9DF-4962-9E15-300EF4C53ABB}.Debug|ARM.Build.0 = Debug|Any CPU - {A58B7F72-E9DF-4962-9E15-300EF4C53ABB}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {A58B7F72-E9DF-4962-9E15-300EF4C53ABB}.Debug|ARM64.Build.0 = Debug|Any CPU - {A58B7F72-E9DF-4962-9E15-300EF4C53ABB}.Debug|x64.ActiveCfg = Debug|Any CPU - {A58B7F72-E9DF-4962-9E15-300EF4C53ABB}.Debug|x64.Build.0 = Debug|Any CPU - {A58B7F72-E9DF-4962-9E15-300EF4C53ABB}.Debug|x86.ActiveCfg = Debug|Any CPU - {A58B7F72-E9DF-4962-9E15-300EF4C53ABB}.Debug|x86.Build.0 = Debug|Any CPU - {A58B7F72-E9DF-4962-9E15-300EF4C53ABB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A58B7F72-E9DF-4962-9E15-300EF4C53ABB}.Release|Any CPU.Build.0 = Release|Any CPU - {A58B7F72-E9DF-4962-9E15-300EF4C53ABB}.Release|ARM.ActiveCfg = Release|Any CPU - {A58B7F72-E9DF-4962-9E15-300EF4C53ABB}.Release|ARM.Build.0 = Release|Any CPU - {A58B7F72-E9DF-4962-9E15-300EF4C53ABB}.Release|ARM64.ActiveCfg = Release|Any CPU - {A58B7F72-E9DF-4962-9E15-300EF4C53ABB}.Release|ARM64.Build.0 = Release|Any CPU - {A58B7F72-E9DF-4962-9E15-300EF4C53ABB}.Release|x64.ActiveCfg = Release|Any CPU - {A58B7F72-E9DF-4962-9E15-300EF4C53ABB}.Release|x64.Build.0 = Release|Any CPU - {A58B7F72-E9DF-4962-9E15-300EF4C53ABB}.Release|x86.ActiveCfg = Release|Any CPU - {A58B7F72-E9DF-4962-9E15-300EF4C53ABB}.Release|x86.Build.0 = Release|Any CPU - {A58B7F72-E9DF-4962-9E15-300EF4C53ABB}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU - {A58B7F72-E9DF-4962-9E15-300EF4C53ABB}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU - {A58B7F72-E9DF-4962-9E15-300EF4C53ABB}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU - {A58B7F72-E9DF-4962-9E15-300EF4C53ABB}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU - {A58B7F72-E9DF-4962-9E15-300EF4C53ABB}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU - {A58B7F72-E9DF-4962-9E15-300EF4C53ABB}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU - {A58B7F72-E9DF-4962-9E15-300EF4C53ABB}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU - {A58B7F72-E9DF-4962-9E15-300EF4C53ABB}.RelWithDebInfo|x64.Build.0 = Release|Any CPU - {A58B7F72-E9DF-4962-9E15-300EF4C53ABB}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU - {A58B7F72-E9DF-4962-9E15-300EF4C53ABB}.RelWithDebInfo|x86.Build.0 = Release|Any CPU - {642E6E67-8A84-473D-9507-C302BF10989D}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {642E6E67-8A84-473D-9507-C302BF10989D}.Checked|Any CPU.Build.0 = Debug|Any CPU - {642E6E67-8A84-473D-9507-C302BF10989D}.Checked|ARM.ActiveCfg = Debug|Any CPU - {642E6E67-8A84-473D-9507-C302BF10989D}.Checked|ARM.Build.0 = Debug|Any CPU - {642E6E67-8A84-473D-9507-C302BF10989D}.Checked|ARM64.ActiveCfg = Debug|Any CPU - {642E6E67-8A84-473D-9507-C302BF10989D}.Checked|ARM64.Build.0 = Debug|Any CPU - {642E6E67-8A84-473D-9507-C302BF10989D}.Checked|x64.ActiveCfg = Debug|Any CPU - {642E6E67-8A84-473D-9507-C302BF10989D}.Checked|x64.Build.0 = Debug|Any CPU - {642E6E67-8A84-473D-9507-C302BF10989D}.Checked|x86.ActiveCfg = Debug|Any CPU - {642E6E67-8A84-473D-9507-C302BF10989D}.Checked|x86.Build.0 = Debug|Any CPU - {642E6E67-8A84-473D-9507-C302BF10989D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {642E6E67-8A84-473D-9507-C302BF10989D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {642E6E67-8A84-473D-9507-C302BF10989D}.Debug|ARM.ActiveCfg = Debug|Any CPU - {642E6E67-8A84-473D-9507-C302BF10989D}.Debug|ARM.Build.0 = Debug|Any CPU - {642E6E67-8A84-473D-9507-C302BF10989D}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {642E6E67-8A84-473D-9507-C302BF10989D}.Debug|ARM64.Build.0 = Debug|Any CPU - {642E6E67-8A84-473D-9507-C302BF10989D}.Debug|x64.ActiveCfg = Debug|Any CPU - {642E6E67-8A84-473D-9507-C302BF10989D}.Debug|x64.Build.0 = Debug|Any CPU - {642E6E67-8A84-473D-9507-C302BF10989D}.Debug|x86.ActiveCfg = Debug|Any CPU - {642E6E67-8A84-473D-9507-C302BF10989D}.Debug|x86.Build.0 = Debug|Any CPU - {642E6E67-8A84-473D-9507-C302BF10989D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {642E6E67-8A84-473D-9507-C302BF10989D}.Release|Any CPU.Build.0 = Release|Any CPU - {642E6E67-8A84-473D-9507-C302BF10989D}.Release|ARM.ActiveCfg = Release|Any CPU - {642E6E67-8A84-473D-9507-C302BF10989D}.Release|ARM.Build.0 = Release|Any CPU - {642E6E67-8A84-473D-9507-C302BF10989D}.Release|ARM64.ActiveCfg = Release|Any CPU - {642E6E67-8A84-473D-9507-C302BF10989D}.Release|ARM64.Build.0 = Release|Any CPU - {642E6E67-8A84-473D-9507-C302BF10989D}.Release|x64.ActiveCfg = Release|Any CPU - {642E6E67-8A84-473D-9507-C302BF10989D}.Release|x64.Build.0 = Release|Any CPU - {642E6E67-8A84-473D-9507-C302BF10989D}.Release|x86.ActiveCfg = Release|Any CPU - {642E6E67-8A84-473D-9507-C302BF10989D}.Release|x86.Build.0 = Release|Any CPU - {642E6E67-8A84-473D-9507-C302BF10989D}.RelWithDebInfo|Any CPU.ActiveCfg = Debug|Any CPU - {642E6E67-8A84-473D-9507-C302BF10989D}.RelWithDebInfo|Any CPU.Build.0 = Debug|Any CPU - {642E6E67-8A84-473D-9507-C302BF10989D}.RelWithDebInfo|ARM.ActiveCfg = Debug|Any CPU - {642E6E67-8A84-473D-9507-C302BF10989D}.RelWithDebInfo|ARM.Build.0 = Debug|Any CPU - {642E6E67-8A84-473D-9507-C302BF10989D}.RelWithDebInfo|ARM64.ActiveCfg = Debug|Any CPU - {642E6E67-8A84-473D-9507-C302BF10989D}.RelWithDebInfo|ARM64.Build.0 = Debug|Any CPU - {642E6E67-8A84-473D-9507-C302BF10989D}.RelWithDebInfo|x64.ActiveCfg = Debug|Any CPU - {642E6E67-8A84-473D-9507-C302BF10989D}.RelWithDebInfo|x64.Build.0 = Debug|Any CPU - {642E6E67-8A84-473D-9507-C302BF10989D}.RelWithDebInfo|x86.ActiveCfg = Debug|Any CPU - {642E6E67-8A84-473D-9507-C302BF10989D}.RelWithDebInfo|x86.Build.0 = Debug|Any CPU - {57EB54E7-521A-4CDE-9DAE-8D6AE90A20BB}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {57EB54E7-521A-4CDE-9DAE-8D6AE90A20BB}.Checked|Any CPU.Build.0 = Debug|Any CPU - {57EB54E7-521A-4CDE-9DAE-8D6AE90A20BB}.Checked|ARM.ActiveCfg = Debug|Any CPU - {57EB54E7-521A-4CDE-9DAE-8D6AE90A20BB}.Checked|ARM.Build.0 = Debug|Any CPU - {57EB54E7-521A-4CDE-9DAE-8D6AE90A20BB}.Checked|ARM64.ActiveCfg = Debug|Any CPU - {57EB54E7-521A-4CDE-9DAE-8D6AE90A20BB}.Checked|ARM64.Build.0 = Debug|Any CPU - {57EB54E7-521A-4CDE-9DAE-8D6AE90A20BB}.Checked|x64.ActiveCfg = Debug|Any CPU - {57EB54E7-521A-4CDE-9DAE-8D6AE90A20BB}.Checked|x64.Build.0 = Debug|Any CPU - {57EB54E7-521A-4CDE-9DAE-8D6AE90A20BB}.Checked|x86.ActiveCfg = Debug|Any CPU - {57EB54E7-521A-4CDE-9DAE-8D6AE90A20BB}.Checked|x86.Build.0 = Debug|Any CPU - {57EB54E7-521A-4CDE-9DAE-8D6AE90A20BB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {57EB54E7-521A-4CDE-9DAE-8D6AE90A20BB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {57EB54E7-521A-4CDE-9DAE-8D6AE90A20BB}.Debug|ARM.ActiveCfg = Debug|Any CPU - {57EB54E7-521A-4CDE-9DAE-8D6AE90A20BB}.Debug|ARM.Build.0 = Debug|Any CPU - {57EB54E7-521A-4CDE-9DAE-8D6AE90A20BB}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {57EB54E7-521A-4CDE-9DAE-8D6AE90A20BB}.Debug|ARM64.Build.0 = Debug|Any CPU - {57EB54E7-521A-4CDE-9DAE-8D6AE90A20BB}.Debug|x64.ActiveCfg = Debug|Any CPU - {57EB54E7-521A-4CDE-9DAE-8D6AE90A20BB}.Debug|x64.Build.0 = Debug|Any CPU - {57EB54E7-521A-4CDE-9DAE-8D6AE90A20BB}.Debug|x86.ActiveCfg = Debug|Any CPU - {57EB54E7-521A-4CDE-9DAE-8D6AE90A20BB}.Debug|x86.Build.0 = Debug|Any CPU - {57EB54E7-521A-4CDE-9DAE-8D6AE90A20BB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {57EB54E7-521A-4CDE-9DAE-8D6AE90A20BB}.Release|Any CPU.Build.0 = Release|Any CPU - {57EB54E7-521A-4CDE-9DAE-8D6AE90A20BB}.Release|ARM.ActiveCfg = Release|Any CPU - {57EB54E7-521A-4CDE-9DAE-8D6AE90A20BB}.Release|ARM.Build.0 = Release|Any CPU - {57EB54E7-521A-4CDE-9DAE-8D6AE90A20BB}.Release|ARM64.ActiveCfg = Release|Any CPU - {57EB54E7-521A-4CDE-9DAE-8D6AE90A20BB}.Release|ARM64.Build.0 = Release|Any CPU - {57EB54E7-521A-4CDE-9DAE-8D6AE90A20BB}.Release|x64.ActiveCfg = Release|Any CPU - {57EB54E7-521A-4CDE-9DAE-8D6AE90A20BB}.Release|x64.Build.0 = Release|Any CPU - {57EB54E7-521A-4CDE-9DAE-8D6AE90A20BB}.Release|x86.ActiveCfg = Release|Any CPU - {57EB54E7-521A-4CDE-9DAE-8D6AE90A20BB}.Release|x86.Build.0 = Release|Any CPU - {57EB54E7-521A-4CDE-9DAE-8D6AE90A20BB}.RelWithDebInfo|Any CPU.ActiveCfg = Debug|Any CPU - {57EB54E7-521A-4CDE-9DAE-8D6AE90A20BB}.RelWithDebInfo|Any CPU.Build.0 = Debug|Any CPU - {57EB54E7-521A-4CDE-9DAE-8D6AE90A20BB}.RelWithDebInfo|ARM.ActiveCfg = Debug|Any CPU - {57EB54E7-521A-4CDE-9DAE-8D6AE90A20BB}.RelWithDebInfo|ARM.Build.0 = Debug|Any CPU - {57EB54E7-521A-4CDE-9DAE-8D6AE90A20BB}.RelWithDebInfo|ARM64.ActiveCfg = Debug|Any CPU - {57EB54E7-521A-4CDE-9DAE-8D6AE90A20BB}.RelWithDebInfo|ARM64.Build.0 = Debug|Any CPU - {57EB54E7-521A-4CDE-9DAE-8D6AE90A20BB}.RelWithDebInfo|x64.ActiveCfg = Debug|Any CPU - {57EB54E7-521A-4CDE-9DAE-8D6AE90A20BB}.RelWithDebInfo|x64.Build.0 = Debug|Any CPU - {57EB54E7-521A-4CDE-9DAE-8D6AE90A20BB}.RelWithDebInfo|x86.ActiveCfg = Debug|Any CPU - {57EB54E7-521A-4CDE-9DAE-8D6AE90A20BB}.RelWithDebInfo|x86.Build.0 = Debug|Any CPU - {1F23F5DA-F766-445F-88FF-86137BDC2709}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {1F23F5DA-F766-445F-88FF-86137BDC2709}.Checked|Any CPU.Build.0 = Debug|Any CPU - {1F23F5DA-F766-445F-88FF-86137BDC2709}.Checked|ARM.ActiveCfg = Debug|Any CPU - {1F23F5DA-F766-445F-88FF-86137BDC2709}.Checked|ARM.Build.0 = Debug|Any CPU - {1F23F5DA-F766-445F-88FF-86137BDC2709}.Checked|ARM64.ActiveCfg = Debug|Any CPU - {1F23F5DA-F766-445F-88FF-86137BDC2709}.Checked|ARM64.Build.0 = Debug|Any CPU - {1F23F5DA-F766-445F-88FF-86137BDC2709}.Checked|x64.ActiveCfg = Debug|Any CPU - {1F23F5DA-F766-445F-88FF-86137BDC2709}.Checked|x64.Build.0 = Debug|Any CPU - {1F23F5DA-F766-445F-88FF-86137BDC2709}.Checked|x86.ActiveCfg = Debug|Any CPU - {1F23F5DA-F766-445F-88FF-86137BDC2709}.Checked|x86.Build.0 = Debug|Any CPU - {1F23F5DA-F766-445F-88FF-86137BDC2709}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1F23F5DA-F766-445F-88FF-86137BDC2709}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1F23F5DA-F766-445F-88FF-86137BDC2709}.Debug|ARM.ActiveCfg = Debug|Any CPU - {1F23F5DA-F766-445F-88FF-86137BDC2709}.Debug|ARM.Build.0 = Debug|Any CPU - {1F23F5DA-F766-445F-88FF-86137BDC2709}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {1F23F5DA-F766-445F-88FF-86137BDC2709}.Debug|ARM64.Build.0 = Debug|Any CPU - {1F23F5DA-F766-445F-88FF-86137BDC2709}.Debug|x64.ActiveCfg = Debug|Any CPU - {1F23F5DA-F766-445F-88FF-86137BDC2709}.Debug|x64.Build.0 = Debug|Any CPU - {1F23F5DA-F766-445F-88FF-86137BDC2709}.Debug|x86.ActiveCfg = Debug|Any CPU - {1F23F5DA-F766-445F-88FF-86137BDC2709}.Debug|x86.Build.0 = Debug|Any CPU - {1F23F5DA-F766-445F-88FF-86137BDC2709}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1F23F5DA-F766-445F-88FF-86137BDC2709}.Release|Any CPU.Build.0 = Release|Any CPU - {1F23F5DA-F766-445F-88FF-86137BDC2709}.Release|ARM.ActiveCfg = Release|Any CPU - {1F23F5DA-F766-445F-88FF-86137BDC2709}.Release|ARM.Build.0 = Release|Any CPU - {1F23F5DA-F766-445F-88FF-86137BDC2709}.Release|ARM64.ActiveCfg = Release|Any CPU - {1F23F5DA-F766-445F-88FF-86137BDC2709}.Release|ARM64.Build.0 = Release|Any CPU - {1F23F5DA-F766-445F-88FF-86137BDC2709}.Release|x64.ActiveCfg = Release|Any CPU - {1F23F5DA-F766-445F-88FF-86137BDC2709}.Release|x64.Build.0 = Release|Any CPU - {1F23F5DA-F766-445F-88FF-86137BDC2709}.Release|x86.ActiveCfg = Release|Any CPU - {1F23F5DA-F766-445F-88FF-86137BDC2709}.Release|x86.Build.0 = Release|Any CPU - {1F23F5DA-F766-445F-88FF-86137BDC2709}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU - {1F23F5DA-F766-445F-88FF-86137BDC2709}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU - {1F23F5DA-F766-445F-88FF-86137BDC2709}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU - {1F23F5DA-F766-445F-88FF-86137BDC2709}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU - {1F23F5DA-F766-445F-88FF-86137BDC2709}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU - {1F23F5DA-F766-445F-88FF-86137BDC2709}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU - {1F23F5DA-F766-445F-88FF-86137BDC2709}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU - {1F23F5DA-F766-445F-88FF-86137BDC2709}.RelWithDebInfo|x64.Build.0 = Release|Any CPU - {1F23F5DA-F766-445F-88FF-86137BDC2709}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU - {1F23F5DA-F766-445F-88FF-86137BDC2709}.RelWithDebInfo|x86.Build.0 = Release|Any CPU - {729ED9E8-C92F-4E0E-B8A7-CC2C1374C751}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {729ED9E8-C92F-4E0E-B8A7-CC2C1374C751}.Checked|Any CPU.Build.0 = Debug|Any CPU - {729ED9E8-C92F-4E0E-B8A7-CC2C1374C751}.Checked|ARM.ActiveCfg = Debug|Any CPU - {729ED9E8-C92F-4E0E-B8A7-CC2C1374C751}.Checked|ARM.Build.0 = Debug|Any CPU - {729ED9E8-C92F-4E0E-B8A7-CC2C1374C751}.Checked|ARM64.ActiveCfg = Debug|Any CPU - {729ED9E8-C92F-4E0E-B8A7-CC2C1374C751}.Checked|ARM64.Build.0 = Debug|Any CPU - {729ED9E8-C92F-4E0E-B8A7-CC2C1374C751}.Checked|x64.ActiveCfg = Debug|Any CPU - {729ED9E8-C92F-4E0E-B8A7-CC2C1374C751}.Checked|x64.Build.0 = Debug|Any CPU - {729ED9E8-C92F-4E0E-B8A7-CC2C1374C751}.Checked|x86.ActiveCfg = Debug|Any CPU - {729ED9E8-C92F-4E0E-B8A7-CC2C1374C751}.Checked|x86.Build.0 = Debug|Any CPU - {729ED9E8-C92F-4E0E-B8A7-CC2C1374C751}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {729ED9E8-C92F-4E0E-B8A7-CC2C1374C751}.Debug|Any CPU.Build.0 = Debug|Any CPU - {729ED9E8-C92F-4E0E-B8A7-CC2C1374C751}.Debug|ARM.ActiveCfg = Debug|Any CPU - {729ED9E8-C92F-4E0E-B8A7-CC2C1374C751}.Debug|ARM.Build.0 = Debug|Any CPU - {729ED9E8-C92F-4E0E-B8A7-CC2C1374C751}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {729ED9E8-C92F-4E0E-B8A7-CC2C1374C751}.Debug|ARM64.Build.0 = Debug|Any CPU - {729ED9E8-C92F-4E0E-B8A7-CC2C1374C751}.Debug|x64.ActiveCfg = Debug|Any CPU - {729ED9E8-C92F-4E0E-B8A7-CC2C1374C751}.Debug|x64.Build.0 = Debug|Any CPU - {729ED9E8-C92F-4E0E-B8A7-CC2C1374C751}.Debug|x86.ActiveCfg = Debug|Any CPU - {729ED9E8-C92F-4E0E-B8A7-CC2C1374C751}.Debug|x86.Build.0 = Debug|Any CPU - {729ED9E8-C92F-4E0E-B8A7-CC2C1374C751}.Release|Any CPU.ActiveCfg = Release|Any CPU - {729ED9E8-C92F-4E0E-B8A7-CC2C1374C751}.Release|Any CPU.Build.0 = Release|Any CPU - {729ED9E8-C92F-4E0E-B8A7-CC2C1374C751}.Release|ARM.ActiveCfg = Release|Any CPU - {729ED9E8-C92F-4E0E-B8A7-CC2C1374C751}.Release|ARM.Build.0 = Release|Any CPU - {729ED9E8-C92F-4E0E-B8A7-CC2C1374C751}.Release|ARM64.ActiveCfg = Release|Any CPU - {729ED9E8-C92F-4E0E-B8A7-CC2C1374C751}.Release|ARM64.Build.0 = Release|Any CPU - {729ED9E8-C92F-4E0E-B8A7-CC2C1374C751}.Release|x64.ActiveCfg = Release|Any CPU - {729ED9E8-C92F-4E0E-B8A7-CC2C1374C751}.Release|x64.Build.0 = Release|Any CPU - {729ED9E8-C92F-4E0E-B8A7-CC2C1374C751}.Release|x86.ActiveCfg = Release|Any CPU - {729ED9E8-C92F-4E0E-B8A7-CC2C1374C751}.Release|x86.Build.0 = Release|Any CPU - {729ED9E8-C92F-4E0E-B8A7-CC2C1374C751}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU - {729ED9E8-C92F-4E0E-B8A7-CC2C1374C751}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU - {729ED9E8-C92F-4E0E-B8A7-CC2C1374C751}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU - {729ED9E8-C92F-4E0E-B8A7-CC2C1374C751}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU - {729ED9E8-C92F-4E0E-B8A7-CC2C1374C751}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU - {729ED9E8-C92F-4E0E-B8A7-CC2C1374C751}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU - {729ED9E8-C92F-4E0E-B8A7-CC2C1374C751}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU - {729ED9E8-C92F-4E0E-B8A7-CC2C1374C751}.RelWithDebInfo|x64.Build.0 = Release|Any CPU - {729ED9E8-C92F-4E0E-B8A7-CC2C1374C751}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU - {729ED9E8-C92F-4E0E-B8A7-CC2C1374C751}.RelWithDebInfo|x86.Build.0 = Release|Any CPU - {EEC90A42-CDCD-4EE3-B47D-C109D604E7E2}.Checked|Any CPU.ActiveCfg = Checked|x64 - {EEC90A42-CDCD-4EE3-B47D-C109D604E7E2}.Checked|ARM.ActiveCfg = Checked|x64 - {EEC90A42-CDCD-4EE3-B47D-C109D604E7E2}.Checked|ARM64.ActiveCfg = Checked|x64 - {EEC90A42-CDCD-4EE3-B47D-C109D604E7E2}.Checked|x64.ActiveCfg = Checked|x64 - {EEC90A42-CDCD-4EE3-B47D-C109D604E7E2}.Checked|x64.Build.0 = Checked|x64 - {EEC90A42-CDCD-4EE3-B47D-C109D604E7E2}.Checked|x86.ActiveCfg = Checked|x64 - {EEC90A42-CDCD-4EE3-B47D-C109D604E7E2}.Debug|Any CPU.ActiveCfg = Debug|x64 - {EEC90A42-CDCD-4EE3-B47D-C109D604E7E2}.Debug|ARM.ActiveCfg = Debug|x64 - {EEC90A42-CDCD-4EE3-B47D-C109D604E7E2}.Debug|ARM64.ActiveCfg = Debug|x64 - {EEC90A42-CDCD-4EE3-B47D-C109D604E7E2}.Debug|x64.ActiveCfg = Debug|x64 - {EEC90A42-CDCD-4EE3-B47D-C109D604E7E2}.Debug|x64.Build.0 = Debug|x64 - {EEC90A42-CDCD-4EE3-B47D-C109D604E7E2}.Debug|x86.ActiveCfg = Debug|x64 - {EEC90A42-CDCD-4EE3-B47D-C109D604E7E2}.Release|Any CPU.ActiveCfg = Release|x64 - {EEC90A42-CDCD-4EE3-B47D-C109D604E7E2}.Release|ARM.ActiveCfg = Release|x64 - {EEC90A42-CDCD-4EE3-B47D-C109D604E7E2}.Release|ARM64.ActiveCfg = Release|x64 - {EEC90A42-CDCD-4EE3-B47D-C109D604E7E2}.Release|x64.ActiveCfg = Release|x64 - {EEC90A42-CDCD-4EE3-B47D-C109D604E7E2}.Release|x86.ActiveCfg = Release|x64 - {EEC90A42-CDCD-4EE3-B47D-C109D604E7E2}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|x64 - {EEC90A42-CDCD-4EE3-B47D-C109D604E7E2}.RelWithDebInfo|ARM.ActiveCfg = RelWithDebInfo|x64 - {EEC90A42-CDCD-4EE3-B47D-C109D604E7E2}.RelWithDebInfo|ARM64.ActiveCfg = RelWithDebInfo|x64 - {EEC90A42-CDCD-4EE3-B47D-C109D604E7E2}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 - {EEC90A42-CDCD-4EE3-B47D-C109D604E7E2}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 - {EEC90A42-CDCD-4EE3-B47D-C109D604E7E2}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|x64 - {5FC66A16-41E9-4D22-A44C-FEBB7DCCAAF8}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {5FC66A16-41E9-4D22-A44C-FEBB7DCCAAF8}.Checked|Any CPU.Build.0 = Debug|Any CPU - {5FC66A16-41E9-4D22-A44C-FEBB7DCCAAF8}.Checked|ARM.ActiveCfg = Debug|Any CPU - {5FC66A16-41E9-4D22-A44C-FEBB7DCCAAF8}.Checked|ARM.Build.0 = Debug|Any CPU - {5FC66A16-41E9-4D22-A44C-FEBB7DCCAAF8}.Checked|ARM64.ActiveCfg = Debug|Any CPU - {5FC66A16-41E9-4D22-A44C-FEBB7DCCAAF8}.Checked|ARM64.Build.0 = Debug|Any CPU - {5FC66A16-41E9-4D22-A44C-FEBB7DCCAAF8}.Checked|x64.ActiveCfg = Debug|Any CPU - {5FC66A16-41E9-4D22-A44C-FEBB7DCCAAF8}.Checked|x64.Build.0 = Debug|Any CPU - {5FC66A16-41E9-4D22-A44C-FEBB7DCCAAF8}.Checked|x86.ActiveCfg = Debug|Any CPU - {5FC66A16-41E9-4D22-A44C-FEBB7DCCAAF8}.Checked|x86.Build.0 = Debug|Any CPU - {5FC66A16-41E9-4D22-A44C-FEBB7DCCAAF8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5FC66A16-41E9-4D22-A44C-FEBB7DCCAAF8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5FC66A16-41E9-4D22-A44C-FEBB7DCCAAF8}.Debug|ARM.ActiveCfg = Debug|Any CPU - {5FC66A16-41E9-4D22-A44C-FEBB7DCCAAF8}.Debug|ARM.Build.0 = Debug|Any CPU - {5FC66A16-41E9-4D22-A44C-FEBB7DCCAAF8}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {5FC66A16-41E9-4D22-A44C-FEBB7DCCAAF8}.Debug|ARM64.Build.0 = Debug|Any CPU - {5FC66A16-41E9-4D22-A44C-FEBB7DCCAAF8}.Debug|x64.ActiveCfg = Debug|Any CPU - {5FC66A16-41E9-4D22-A44C-FEBB7DCCAAF8}.Debug|x64.Build.0 = Debug|Any CPU - {5FC66A16-41E9-4D22-A44C-FEBB7DCCAAF8}.Debug|x86.ActiveCfg = Debug|Any CPU - {5FC66A16-41E9-4D22-A44C-FEBB7DCCAAF8}.Debug|x86.Build.0 = Debug|Any CPU - {5FC66A16-41E9-4D22-A44C-FEBB7DCCAAF8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5FC66A16-41E9-4D22-A44C-FEBB7DCCAAF8}.Release|Any CPU.Build.0 = Release|Any CPU - {5FC66A16-41E9-4D22-A44C-FEBB7DCCAAF8}.Release|ARM.ActiveCfg = Release|Any CPU - {5FC66A16-41E9-4D22-A44C-FEBB7DCCAAF8}.Release|ARM.Build.0 = Release|Any CPU - {5FC66A16-41E9-4D22-A44C-FEBB7DCCAAF8}.Release|ARM64.ActiveCfg = Release|Any CPU - {5FC66A16-41E9-4D22-A44C-FEBB7DCCAAF8}.Release|ARM64.Build.0 = Release|Any CPU - {5FC66A16-41E9-4D22-A44C-FEBB7DCCAAF8}.Release|x64.ActiveCfg = Release|Any CPU - {5FC66A16-41E9-4D22-A44C-FEBB7DCCAAF8}.Release|x64.Build.0 = Release|Any CPU - {5FC66A16-41E9-4D22-A44C-FEBB7DCCAAF8}.Release|x86.ActiveCfg = Release|Any CPU - {5FC66A16-41E9-4D22-A44C-FEBB7DCCAAF8}.Release|x86.Build.0 = Release|Any CPU - {5FC66A16-41E9-4D22-A44C-FEBB7DCCAAF8}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU - {5FC66A16-41E9-4D22-A44C-FEBB7DCCAAF8}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU - {5FC66A16-41E9-4D22-A44C-FEBB7DCCAAF8}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU - {5FC66A16-41E9-4D22-A44C-FEBB7DCCAAF8}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU - {5FC66A16-41E9-4D22-A44C-FEBB7DCCAAF8}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU - {5FC66A16-41E9-4D22-A44C-FEBB7DCCAAF8}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU - {5FC66A16-41E9-4D22-A44C-FEBB7DCCAAF8}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU - {5FC66A16-41E9-4D22-A44C-FEBB7DCCAAF8}.RelWithDebInfo|x64.Build.0 = Release|Any CPU - {5FC66A16-41E9-4D22-A44C-FEBB7DCCAAF8}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU - {5FC66A16-41E9-4D22-A44C-FEBB7DCCAAF8}.RelWithDebInfo|x86.Build.0 = Release|Any CPU - {064BC7DD-D44C-400E-9215-7546E092AB98}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {064BC7DD-D44C-400E-9215-7546E092AB98}.Checked|Any CPU.Build.0 = Debug|Any CPU - {064BC7DD-D44C-400E-9215-7546E092AB98}.Checked|ARM.ActiveCfg = Debug|Any CPU - {064BC7DD-D44C-400E-9215-7546E092AB98}.Checked|ARM.Build.0 = Debug|Any CPU - {064BC7DD-D44C-400E-9215-7546E092AB98}.Checked|ARM64.ActiveCfg = Debug|Any CPU - {064BC7DD-D44C-400E-9215-7546E092AB98}.Checked|ARM64.Build.0 = Debug|Any CPU - {064BC7DD-D44C-400E-9215-7546E092AB98}.Checked|x64.ActiveCfg = Debug|Any CPU - {064BC7DD-D44C-400E-9215-7546E092AB98}.Checked|x64.Build.0 = Debug|Any CPU - {064BC7DD-D44C-400E-9215-7546E092AB98}.Checked|x86.ActiveCfg = Debug|Any CPU - {064BC7DD-D44C-400E-9215-7546E092AB98}.Checked|x86.Build.0 = Debug|Any CPU - {064BC7DD-D44C-400E-9215-7546E092AB98}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {064BC7DD-D44C-400E-9215-7546E092AB98}.Debug|Any CPU.Build.0 = Debug|Any CPU - {064BC7DD-D44C-400E-9215-7546E092AB98}.Debug|ARM.ActiveCfg = Debug|Any CPU - {064BC7DD-D44C-400E-9215-7546E092AB98}.Debug|ARM.Build.0 = Debug|Any CPU - {064BC7DD-D44C-400E-9215-7546E092AB98}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {064BC7DD-D44C-400E-9215-7546E092AB98}.Debug|ARM64.Build.0 = Debug|Any CPU - {064BC7DD-D44C-400E-9215-7546E092AB98}.Debug|x64.ActiveCfg = Debug|Any CPU - {064BC7DD-D44C-400E-9215-7546E092AB98}.Debug|x64.Build.0 = Debug|Any CPU - {064BC7DD-D44C-400E-9215-7546E092AB98}.Debug|x86.ActiveCfg = Debug|Any CPU - {064BC7DD-D44C-400E-9215-7546E092AB98}.Debug|x86.Build.0 = Debug|Any CPU - {064BC7DD-D44C-400E-9215-7546E092AB98}.Release|Any CPU.ActiveCfg = Release|Any CPU - {064BC7DD-D44C-400E-9215-7546E092AB98}.Release|Any CPU.Build.0 = Release|Any CPU - {064BC7DD-D44C-400E-9215-7546E092AB98}.Release|ARM.ActiveCfg = Release|Any CPU - {064BC7DD-D44C-400E-9215-7546E092AB98}.Release|ARM.Build.0 = Release|Any CPU - {064BC7DD-D44C-400E-9215-7546E092AB98}.Release|ARM64.ActiveCfg = Release|Any CPU - {064BC7DD-D44C-400E-9215-7546E092AB98}.Release|ARM64.Build.0 = Release|Any CPU - {064BC7DD-D44C-400E-9215-7546E092AB98}.Release|x64.ActiveCfg = Release|Any CPU - {064BC7DD-D44C-400E-9215-7546E092AB98}.Release|x64.Build.0 = Release|Any CPU - {064BC7DD-D44C-400E-9215-7546E092AB98}.Release|x86.ActiveCfg = Release|Any CPU - {064BC7DD-D44C-400E-9215-7546E092AB98}.Release|x86.Build.0 = Release|Any CPU - {064BC7DD-D44C-400E-9215-7546E092AB98}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU - {064BC7DD-D44C-400E-9215-7546E092AB98}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU - {064BC7DD-D44C-400E-9215-7546E092AB98}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU - {064BC7DD-D44C-400E-9215-7546E092AB98}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU - {064BC7DD-D44C-400E-9215-7546E092AB98}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU - {064BC7DD-D44C-400E-9215-7546E092AB98}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU - {064BC7DD-D44C-400E-9215-7546E092AB98}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU - {064BC7DD-D44C-400E-9215-7546E092AB98}.RelWithDebInfo|x64.Build.0 = Release|Any CPU - {064BC7DD-D44C-400E-9215-7546E092AB98}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU - {064BC7DD-D44C-400E-9215-7546E092AB98}.RelWithDebInfo|x86.Build.0 = Release|Any CPU - {61F73DD0-F346-4D7A-AB12-63415B4EEEE1}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {61F73DD0-F346-4D7A-AB12-63415B4EEEE1}.Checked|Any CPU.Build.0 = Debug|Any CPU - {61F73DD0-F346-4D7A-AB12-63415B4EEEE1}.Checked|ARM.ActiveCfg = Debug|Any CPU - {61F73DD0-F346-4D7A-AB12-63415B4EEEE1}.Checked|ARM.Build.0 = Debug|Any CPU - {61F73DD0-F346-4D7A-AB12-63415B4EEEE1}.Checked|ARM64.ActiveCfg = Debug|Any CPU - {61F73DD0-F346-4D7A-AB12-63415B4EEEE1}.Checked|ARM64.Build.0 = Debug|Any CPU - {61F73DD0-F346-4D7A-AB12-63415B4EEEE1}.Checked|x64.ActiveCfg = Debug|Any CPU - {61F73DD0-F346-4D7A-AB12-63415B4EEEE1}.Checked|x64.Build.0 = Debug|Any CPU - {61F73DD0-F346-4D7A-AB12-63415B4EEEE1}.Checked|x86.ActiveCfg = Debug|Any CPU - {61F73DD0-F346-4D7A-AB12-63415B4EEEE1}.Checked|x86.Build.0 = Debug|Any CPU - {61F73DD0-F346-4D7A-AB12-63415B4EEEE1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {61F73DD0-F346-4D7A-AB12-63415B4EEEE1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {61F73DD0-F346-4D7A-AB12-63415B4EEEE1}.Debug|ARM.ActiveCfg = Debug|Any CPU - {61F73DD0-F346-4D7A-AB12-63415B4EEEE1}.Debug|ARM.Build.0 = Debug|Any CPU - {61F73DD0-F346-4D7A-AB12-63415B4EEEE1}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {61F73DD0-F346-4D7A-AB12-63415B4EEEE1}.Debug|ARM64.Build.0 = Debug|Any CPU - {61F73DD0-F346-4D7A-AB12-63415B4EEEE1}.Debug|x64.ActiveCfg = Debug|Any CPU - {61F73DD0-F346-4D7A-AB12-63415B4EEEE1}.Debug|x64.Build.0 = Debug|Any CPU - {61F73DD0-F346-4D7A-AB12-63415B4EEEE1}.Debug|x86.ActiveCfg = Debug|Any CPU - {61F73DD0-F346-4D7A-AB12-63415B4EEEE1}.Debug|x86.Build.0 = Debug|Any CPU - {61F73DD0-F346-4D7A-AB12-63415B4EEEE1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {61F73DD0-F346-4D7A-AB12-63415B4EEEE1}.Release|Any CPU.Build.0 = Release|Any CPU - {61F73DD0-F346-4D7A-AB12-63415B4EEEE1}.Release|ARM.ActiveCfg = Release|Any CPU - {61F73DD0-F346-4D7A-AB12-63415B4EEEE1}.Release|ARM.Build.0 = Release|Any CPU - {61F73DD0-F346-4D7A-AB12-63415B4EEEE1}.Release|ARM64.ActiveCfg = Release|Any CPU - {61F73DD0-F346-4D7A-AB12-63415B4EEEE1}.Release|ARM64.Build.0 = Release|Any CPU - {61F73DD0-F346-4D7A-AB12-63415B4EEEE1}.Release|x64.ActiveCfg = Release|Any CPU - {61F73DD0-F346-4D7A-AB12-63415B4EEEE1}.Release|x64.Build.0 = Release|Any CPU - {61F73DD0-F346-4D7A-AB12-63415B4EEEE1}.Release|x86.ActiveCfg = Release|Any CPU - {61F73DD0-F346-4D7A-AB12-63415B4EEEE1}.Release|x86.Build.0 = Release|Any CPU - {61F73DD0-F346-4D7A-AB12-63415B4EEEE1}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU - {61F73DD0-F346-4D7A-AB12-63415B4EEEE1}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU - {61F73DD0-F346-4D7A-AB12-63415B4EEEE1}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU - {61F73DD0-F346-4D7A-AB12-63415B4EEEE1}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU - {61F73DD0-F346-4D7A-AB12-63415B4EEEE1}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU - {61F73DD0-F346-4D7A-AB12-63415B4EEEE1}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU - {61F73DD0-F346-4D7A-AB12-63415B4EEEE1}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU - {61F73DD0-F346-4D7A-AB12-63415B4EEEE1}.RelWithDebInfo|x64.Build.0 = Release|Any CPU - {61F73DD0-F346-4D7A-AB12-63415B4EEEE1}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU - {61F73DD0-F346-4D7A-AB12-63415B4EEEE1}.RelWithDebInfo|x86.Build.0 = Release|Any CPU - {2BD55143-B102-4FEC-84AD-DC3B330FA9AC}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {2BD55143-B102-4FEC-84AD-DC3B330FA9AC}.Checked|Any CPU.Build.0 = Debug|Any CPU - {2BD55143-B102-4FEC-84AD-DC3B330FA9AC}.Checked|ARM.ActiveCfg = Debug|Any CPU - {2BD55143-B102-4FEC-84AD-DC3B330FA9AC}.Checked|ARM.Build.0 = Debug|Any CPU - {2BD55143-B102-4FEC-84AD-DC3B330FA9AC}.Checked|ARM64.ActiveCfg = Debug|Any CPU - {2BD55143-B102-4FEC-84AD-DC3B330FA9AC}.Checked|ARM64.Build.0 = Debug|Any CPU - {2BD55143-B102-4FEC-84AD-DC3B330FA9AC}.Checked|x64.ActiveCfg = Debug|Any CPU - {2BD55143-B102-4FEC-84AD-DC3B330FA9AC}.Checked|x64.Build.0 = Debug|Any CPU - {2BD55143-B102-4FEC-84AD-DC3B330FA9AC}.Checked|x86.ActiveCfg = Debug|Any CPU - {2BD55143-B102-4FEC-84AD-DC3B330FA9AC}.Checked|x86.Build.0 = Debug|Any CPU - {2BD55143-B102-4FEC-84AD-DC3B330FA9AC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2BD55143-B102-4FEC-84AD-DC3B330FA9AC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2BD55143-B102-4FEC-84AD-DC3B330FA9AC}.Debug|ARM.ActiveCfg = Debug|Any CPU - {2BD55143-B102-4FEC-84AD-DC3B330FA9AC}.Debug|ARM.Build.0 = Debug|Any CPU - {2BD55143-B102-4FEC-84AD-DC3B330FA9AC}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {2BD55143-B102-4FEC-84AD-DC3B330FA9AC}.Debug|ARM64.Build.0 = Debug|Any CPU - {2BD55143-B102-4FEC-84AD-DC3B330FA9AC}.Debug|x64.ActiveCfg = Debug|Any CPU - {2BD55143-B102-4FEC-84AD-DC3B330FA9AC}.Debug|x64.Build.0 = Debug|Any CPU - {2BD55143-B102-4FEC-84AD-DC3B330FA9AC}.Debug|x86.ActiveCfg = Debug|Any CPU - {2BD55143-B102-4FEC-84AD-DC3B330FA9AC}.Debug|x86.Build.0 = Debug|Any CPU - {2BD55143-B102-4FEC-84AD-DC3B330FA9AC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2BD55143-B102-4FEC-84AD-DC3B330FA9AC}.Release|Any CPU.Build.0 = Release|Any CPU - {2BD55143-B102-4FEC-84AD-DC3B330FA9AC}.Release|ARM.ActiveCfg = Release|Any CPU - {2BD55143-B102-4FEC-84AD-DC3B330FA9AC}.Release|ARM.Build.0 = Release|Any CPU - {2BD55143-B102-4FEC-84AD-DC3B330FA9AC}.Release|ARM64.ActiveCfg = Release|Any CPU - {2BD55143-B102-4FEC-84AD-DC3B330FA9AC}.Release|ARM64.Build.0 = Release|Any CPU - {2BD55143-B102-4FEC-84AD-DC3B330FA9AC}.Release|x64.ActiveCfg = Release|Any CPU - {2BD55143-B102-4FEC-84AD-DC3B330FA9AC}.Release|x64.Build.0 = Release|Any CPU - {2BD55143-B102-4FEC-84AD-DC3B330FA9AC}.Release|x86.ActiveCfg = Release|Any CPU - {2BD55143-B102-4FEC-84AD-DC3B330FA9AC}.Release|x86.Build.0 = Release|Any CPU - {2BD55143-B102-4FEC-84AD-DC3B330FA9AC}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU - {2BD55143-B102-4FEC-84AD-DC3B330FA9AC}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU - {2BD55143-B102-4FEC-84AD-DC3B330FA9AC}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU - {2BD55143-B102-4FEC-84AD-DC3B330FA9AC}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU - {2BD55143-B102-4FEC-84AD-DC3B330FA9AC}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU - {2BD55143-B102-4FEC-84AD-DC3B330FA9AC}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU - {2BD55143-B102-4FEC-84AD-DC3B330FA9AC}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU - {2BD55143-B102-4FEC-84AD-DC3B330FA9AC}.RelWithDebInfo|x64.Build.0 = Release|Any CPU - {2BD55143-B102-4FEC-84AD-DC3B330FA9AC}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU - {2BD55143-B102-4FEC-84AD-DC3B330FA9AC}.RelWithDebInfo|x86.Build.0 = Release|Any CPU - {BD779298-8631-3F5D-AA59-82897E5454A7}.Checked|Any CPU.ActiveCfg = Checked|x64 - {BD779298-8631-3F5D-AA59-82897E5454A7}.Checked|ARM.ActiveCfg = Checked|x64 - {BD779298-8631-3F5D-AA59-82897E5454A7}.Checked|ARM64.ActiveCfg = Checked|x64 - {BD779298-8631-3F5D-AA59-82897E5454A7}.Checked|x64.ActiveCfg = Checked|x64 - {BD779298-8631-3F5D-AA59-82897E5454A7}.Checked|x64.Build.0 = Checked|x64 - {BD779298-8631-3F5D-AA59-82897E5454A7}.Checked|x86.ActiveCfg = Checked|x64 - {BD779298-8631-3F5D-AA59-82897E5454A7}.Debug|Any CPU.ActiveCfg = Debug|x64 - {BD779298-8631-3F5D-AA59-82897E5454A7}.Debug|ARM.ActiveCfg = Debug|x64 - {BD779298-8631-3F5D-AA59-82897E5454A7}.Debug|ARM64.ActiveCfg = Debug|x64 - {BD779298-8631-3F5D-AA59-82897E5454A7}.Debug|x64.ActiveCfg = Debug|x64 - {BD779298-8631-3F5D-AA59-82897E5454A7}.Debug|x64.Build.0 = Debug|x64 - {BD779298-8631-3F5D-AA59-82897E5454A7}.Debug|x86.ActiveCfg = Debug|x64 - {BD779298-8631-3F5D-AA59-82897E5454A7}.Release|Any CPU.ActiveCfg = Release|x64 - {BD779298-8631-3F5D-AA59-82897E5454A7}.Release|ARM.ActiveCfg = Release|x64 - {BD779298-8631-3F5D-AA59-82897E5454A7}.Release|ARM64.ActiveCfg = Release|x64 - {BD779298-8631-3F5D-AA59-82897E5454A7}.Release|x64.ActiveCfg = Release|x64 - {BD779298-8631-3F5D-AA59-82897E5454A7}.Release|x86.ActiveCfg = Release|x64 - {BD779298-8631-3F5D-AA59-82897E5454A7}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|x64 - {BD779298-8631-3F5D-AA59-82897E5454A7}.RelWithDebInfo|ARM.ActiveCfg = RelWithDebInfo|x64 - {BD779298-8631-3F5D-AA59-82897E5454A7}.RelWithDebInfo|ARM64.ActiveCfg = RelWithDebInfo|x64 - {BD779298-8631-3F5D-AA59-82897E5454A7}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 - {BD779298-8631-3F5D-AA59-82897E5454A7}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 - {BD779298-8631-3F5D-AA59-82897E5454A7}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|x64 - {20EBC3C4-917C-402D-B778-9A6E3742BF5A}.Checked|Any CPU.ActiveCfg = Checked|x64 - {20EBC3C4-917C-402D-B778-9A6E3742BF5A}.Checked|ARM.ActiveCfg = Checked|x64 - {20EBC3C4-917C-402D-B778-9A6E3742BF5A}.Checked|ARM64.ActiveCfg = Checked|x64 - {20EBC3C4-917C-402D-B778-9A6E3742BF5A}.Checked|x64.ActiveCfg = Checked|x64 - {20EBC3C4-917C-402D-B778-9A6E3742BF5A}.Checked|x64.Build.0 = Checked|x64 - {20EBC3C4-917C-402D-B778-9A6E3742BF5A}.Checked|x86.ActiveCfg = Checked|x64 - {20EBC3C4-917C-402D-B778-9A6E3742BF5A}.Debug|Any CPU.ActiveCfg = Debug|x64 - {20EBC3C4-917C-402D-B778-9A6E3742BF5A}.Debug|ARM.ActiveCfg = Debug|x64 - {20EBC3C4-917C-402D-B778-9A6E3742BF5A}.Debug|ARM64.ActiveCfg = Debug|x64 - {20EBC3C4-917C-402D-B778-9A6E3742BF5A}.Debug|x64.ActiveCfg = Debug|x64 - {20EBC3C4-917C-402D-B778-9A6E3742BF5A}.Debug|x64.Build.0 = Debug|x64 - {20EBC3C4-917C-402D-B778-9A6E3742BF5A}.Debug|x86.ActiveCfg = Debug|x64 - {20EBC3C4-917C-402D-B778-9A6E3742BF5A}.Release|Any CPU.ActiveCfg = Release|x64 - {20EBC3C4-917C-402D-B778-9A6E3742BF5A}.Release|ARM.ActiveCfg = Release|x64 - {20EBC3C4-917C-402D-B778-9A6E3742BF5A}.Release|ARM64.ActiveCfg = Release|x64 - {20EBC3C4-917C-402D-B778-9A6E3742BF5A}.Release|x64.ActiveCfg = Release|x64 - {20EBC3C4-917C-402D-B778-9A6E3742BF5A}.Release|x86.ActiveCfg = Release|x64 - {20EBC3C4-917C-402D-B778-9A6E3742BF5A}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|x64 - {20EBC3C4-917C-402D-B778-9A6E3742BF5A}.RelWithDebInfo|ARM.ActiveCfg = RelWithDebInfo|x64 - {20EBC3C4-917C-402D-B778-9A6E3742BF5A}.RelWithDebInfo|ARM64.ActiveCfg = RelWithDebInfo|x64 - {20EBC3C4-917C-402D-B778-9A6E3742BF5A}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 - {20EBC3C4-917C-402D-B778-9A6E3742BF5A}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 - {20EBC3C4-917C-402D-B778-9A6E3742BF5A}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|x64 - {8C35FEF8-1101-38F6-ACD0-462A1EA53A7D}.Checked|Any CPU.ActiveCfg = Checked|x64 - {8C35FEF8-1101-38F6-ACD0-462A1EA53A7D}.Checked|ARM.ActiveCfg = Checked|x64 - {8C35FEF8-1101-38F6-ACD0-462A1EA53A7D}.Checked|ARM64.ActiveCfg = Checked|x64 - {8C35FEF8-1101-38F6-ACD0-462A1EA53A7D}.Checked|x64.ActiveCfg = Checked|x64 - {8C35FEF8-1101-38F6-ACD0-462A1EA53A7D}.Checked|x64.Build.0 = Checked|x64 - {8C35FEF8-1101-38F6-ACD0-462A1EA53A7D}.Checked|x86.ActiveCfg = Checked|x64 - {8C35FEF8-1101-38F6-ACD0-462A1EA53A7D}.Debug|Any CPU.ActiveCfg = Debug|x64 - {8C35FEF8-1101-38F6-ACD0-462A1EA53A7D}.Debug|ARM.ActiveCfg = Debug|x64 - {8C35FEF8-1101-38F6-ACD0-462A1EA53A7D}.Debug|ARM64.ActiveCfg = Debug|x64 - {8C35FEF8-1101-38F6-ACD0-462A1EA53A7D}.Debug|x64.ActiveCfg = Debug|x64 - {8C35FEF8-1101-38F6-ACD0-462A1EA53A7D}.Debug|x64.Build.0 = Debug|x64 - {8C35FEF8-1101-38F6-ACD0-462A1EA53A7D}.Debug|x86.ActiveCfg = Debug|x64 - {8C35FEF8-1101-38F6-ACD0-462A1EA53A7D}.Release|Any CPU.ActiveCfg = Release|x64 - {8C35FEF8-1101-38F6-ACD0-462A1EA53A7D}.Release|ARM.ActiveCfg = Release|x64 - {8C35FEF8-1101-38F6-ACD0-462A1EA53A7D}.Release|ARM64.ActiveCfg = Release|x64 - {8C35FEF8-1101-38F6-ACD0-462A1EA53A7D}.Release|x64.ActiveCfg = Release|x64 - {8C35FEF8-1101-38F6-ACD0-462A1EA53A7D}.Release|x86.ActiveCfg = Release|x64 - {8C35FEF8-1101-38F6-ACD0-462A1EA53A7D}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|x64 - {8C35FEF8-1101-38F6-ACD0-462A1EA53A7D}.RelWithDebInfo|ARM.ActiveCfg = RelWithDebInfo|x64 - {8C35FEF8-1101-38F6-ACD0-462A1EA53A7D}.RelWithDebInfo|ARM64.ActiveCfg = RelWithDebInfo|x64 - {8C35FEF8-1101-38F6-ACD0-462A1EA53A7D}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 - {8C35FEF8-1101-38F6-ACD0-462A1EA53A7D}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 - {8C35FEF8-1101-38F6-ACD0-462A1EA53A7D}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|x64 - {DD60B7C4-BECC-4C7D-A53B-FCDD4C92B728}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {DD60B7C4-BECC-4C7D-A53B-FCDD4C92B728}.Checked|Any CPU.Build.0 = Debug|Any CPU - {DD60B7C4-BECC-4C7D-A53B-FCDD4C92B728}.Checked|ARM.ActiveCfg = Debug|Any CPU - {DD60B7C4-BECC-4C7D-A53B-FCDD4C92B728}.Checked|ARM.Build.0 = Debug|Any CPU - {DD60B7C4-BECC-4C7D-A53B-FCDD4C92B728}.Checked|ARM64.ActiveCfg = Debug|Any CPU - {DD60B7C4-BECC-4C7D-A53B-FCDD4C92B728}.Checked|ARM64.Build.0 = Debug|Any CPU - {DD60B7C4-BECC-4C7D-A53B-FCDD4C92B728}.Checked|x64.ActiveCfg = Debug|Any CPU - {DD60B7C4-BECC-4C7D-A53B-FCDD4C92B728}.Checked|x64.Build.0 = Debug|Any CPU - {DD60B7C4-BECC-4C7D-A53B-FCDD4C92B728}.Checked|x86.ActiveCfg = Debug|Any CPU - {DD60B7C4-BECC-4C7D-A53B-FCDD4C92B728}.Checked|x86.Build.0 = Debug|Any CPU - {DD60B7C4-BECC-4C7D-A53B-FCDD4C92B728}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DD60B7C4-BECC-4C7D-A53B-FCDD4C92B728}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DD60B7C4-BECC-4C7D-A53B-FCDD4C92B728}.Debug|ARM.ActiveCfg = Debug|Any CPU - {DD60B7C4-BECC-4C7D-A53B-FCDD4C92B728}.Debug|ARM.Build.0 = Debug|Any CPU - {DD60B7C4-BECC-4C7D-A53B-FCDD4C92B728}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {DD60B7C4-BECC-4C7D-A53B-FCDD4C92B728}.Debug|ARM64.Build.0 = Debug|Any CPU - {DD60B7C4-BECC-4C7D-A53B-FCDD4C92B728}.Debug|x64.ActiveCfg = Debug|Any CPU - {DD60B7C4-BECC-4C7D-A53B-FCDD4C92B728}.Debug|x64.Build.0 = Debug|Any CPU - {DD60B7C4-BECC-4C7D-A53B-FCDD4C92B728}.Debug|x86.ActiveCfg = Debug|Any CPU - {DD60B7C4-BECC-4C7D-A53B-FCDD4C92B728}.Debug|x86.Build.0 = Debug|Any CPU - {DD60B7C4-BECC-4C7D-A53B-FCDD4C92B728}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DD60B7C4-BECC-4C7D-A53B-FCDD4C92B728}.Release|Any CPU.Build.0 = Release|Any CPU - {DD60B7C4-BECC-4C7D-A53B-FCDD4C92B728}.Release|ARM.ActiveCfg = Release|Any CPU - {DD60B7C4-BECC-4C7D-A53B-FCDD4C92B728}.Release|ARM.Build.0 = Release|Any CPU - {DD60B7C4-BECC-4C7D-A53B-FCDD4C92B728}.Release|ARM64.ActiveCfg = Release|Any CPU - {DD60B7C4-BECC-4C7D-A53B-FCDD4C92B728}.Release|ARM64.Build.0 = Release|Any CPU - {DD60B7C4-BECC-4C7D-A53B-FCDD4C92B728}.Release|x64.ActiveCfg = Release|Any CPU - {DD60B7C4-BECC-4C7D-A53B-FCDD4C92B728}.Release|x64.Build.0 = Release|Any CPU - {DD60B7C4-BECC-4C7D-A53B-FCDD4C92B728}.Release|x86.ActiveCfg = Release|Any CPU - {DD60B7C4-BECC-4C7D-A53B-FCDD4C92B728}.Release|x86.Build.0 = Release|Any CPU - {DD60B7C4-BECC-4C7D-A53B-FCDD4C92B728}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU - {DD60B7C4-BECC-4C7D-A53B-FCDD4C92B728}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU - {DD60B7C4-BECC-4C7D-A53B-FCDD4C92B728}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU - {DD60B7C4-BECC-4C7D-A53B-FCDD4C92B728}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU - {DD60B7C4-BECC-4C7D-A53B-FCDD4C92B728}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU - {DD60B7C4-BECC-4C7D-A53B-FCDD4C92B728}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU - {DD60B7C4-BECC-4C7D-A53B-FCDD4C92B728}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU - {DD60B7C4-BECC-4C7D-A53B-FCDD4C92B728}.RelWithDebInfo|x64.Build.0 = Release|Any CPU - {DD60B7C4-BECC-4C7D-A53B-FCDD4C92B728}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU - {DD60B7C4-BECC-4C7D-A53B-FCDD4C92B728}.RelWithDebInfo|x86.Build.0 = Release|Any CPU - {DFF48CB6-4504-41C6-A8F1-F4A3D316D49F}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {DFF48CB6-4504-41C6-A8F1-F4A3D316D49F}.Checked|Any CPU.Build.0 = Debug|Any CPU - {DFF48CB6-4504-41C6-A8F1-F4A3D316D49F}.Checked|ARM.ActiveCfg = Debug|Any CPU - {DFF48CB6-4504-41C6-A8F1-F4A3D316D49F}.Checked|ARM.Build.0 = Debug|Any CPU - {DFF48CB6-4504-41C6-A8F1-F4A3D316D49F}.Checked|ARM64.ActiveCfg = Debug|Any CPU - {DFF48CB6-4504-41C6-A8F1-F4A3D316D49F}.Checked|ARM64.Build.0 = Debug|Any CPU - {DFF48CB6-4504-41C6-A8F1-F4A3D316D49F}.Checked|x64.ActiveCfg = Debug|Any CPU - {DFF48CB6-4504-41C6-A8F1-F4A3D316D49F}.Checked|x64.Build.0 = Debug|Any CPU - {DFF48CB6-4504-41C6-A8F1-F4A3D316D49F}.Checked|x86.ActiveCfg = Debug|Any CPU - {DFF48CB6-4504-41C6-A8F1-F4A3D316D49F}.Checked|x86.Build.0 = Debug|Any CPU - {DFF48CB6-4504-41C6-A8F1-F4A3D316D49F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DFF48CB6-4504-41C6-A8F1-F4A3D316D49F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DFF48CB6-4504-41C6-A8F1-F4A3D316D49F}.Debug|ARM.ActiveCfg = Debug|Any CPU - {DFF48CB6-4504-41C6-A8F1-F4A3D316D49F}.Debug|ARM.Build.0 = Debug|Any CPU - {DFF48CB6-4504-41C6-A8F1-F4A3D316D49F}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {DFF48CB6-4504-41C6-A8F1-F4A3D316D49F}.Debug|ARM64.Build.0 = Debug|Any CPU - {DFF48CB6-4504-41C6-A8F1-F4A3D316D49F}.Debug|x64.ActiveCfg = Debug|Any CPU - {DFF48CB6-4504-41C6-A8F1-F4A3D316D49F}.Debug|x64.Build.0 = Debug|Any CPU - {DFF48CB6-4504-41C6-A8F1-F4A3D316D49F}.Debug|x86.ActiveCfg = Debug|Any CPU - {DFF48CB6-4504-41C6-A8F1-F4A3D316D49F}.Debug|x86.Build.0 = Debug|Any CPU - {DFF48CB6-4504-41C6-A8F1-F4A3D316D49F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DFF48CB6-4504-41C6-A8F1-F4A3D316D49F}.Release|Any CPU.Build.0 = Release|Any CPU - {DFF48CB6-4504-41C6-A8F1-F4A3D316D49F}.Release|ARM.ActiveCfg = Release|Any CPU - {DFF48CB6-4504-41C6-A8F1-F4A3D316D49F}.Release|ARM.Build.0 = Release|Any CPU - {DFF48CB6-4504-41C6-A8F1-F4A3D316D49F}.Release|ARM64.ActiveCfg = Release|Any CPU - {DFF48CB6-4504-41C6-A8F1-F4A3D316D49F}.Release|ARM64.Build.0 = Release|Any CPU - {DFF48CB6-4504-41C6-A8F1-F4A3D316D49F}.Release|x64.ActiveCfg = Release|Any CPU - {DFF48CB6-4504-41C6-A8F1-F4A3D316D49F}.Release|x64.Build.0 = Release|Any CPU - {DFF48CB6-4504-41C6-A8F1-F4A3D316D49F}.Release|x86.ActiveCfg = Release|Any CPU - {DFF48CB6-4504-41C6-A8F1-F4A3D316D49F}.Release|x86.Build.0 = Release|Any CPU - {DFF48CB6-4504-41C6-A8F1-F4A3D316D49F}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU - {DFF48CB6-4504-41C6-A8F1-F4A3D316D49F}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU - {DFF48CB6-4504-41C6-A8F1-F4A3D316D49F}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU - {DFF48CB6-4504-41C6-A8F1-F4A3D316D49F}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU - {DFF48CB6-4504-41C6-A8F1-F4A3D316D49F}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU - {DFF48CB6-4504-41C6-A8F1-F4A3D316D49F}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU - {DFF48CB6-4504-41C6-A8F1-F4A3D316D49F}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU - {DFF48CB6-4504-41C6-A8F1-F4A3D316D49F}.RelWithDebInfo|x64.Build.0 = Release|Any CPU - {DFF48CB6-4504-41C6-A8F1-F4A3D316D49F}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU - {DFF48CB6-4504-41C6-A8F1-F4A3D316D49F}.RelWithDebInfo|x86.Build.0 = Release|Any CPU - {E8F133F8-4D20-475D-9D16-2BA236DAB65F}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {E8F133F8-4D20-475D-9D16-2BA236DAB65F}.Checked|Any CPU.Build.0 = Debug|Any CPU - {E8F133F8-4D20-475D-9D16-2BA236DAB65F}.Checked|ARM.ActiveCfg = Debug|Any CPU - {E8F133F8-4D20-475D-9D16-2BA236DAB65F}.Checked|ARM.Build.0 = Debug|Any CPU - {E8F133F8-4D20-475D-9D16-2BA236DAB65F}.Checked|ARM64.ActiveCfg = Debug|Any CPU - {E8F133F8-4D20-475D-9D16-2BA236DAB65F}.Checked|ARM64.Build.0 = Debug|Any CPU - {E8F133F8-4D20-475D-9D16-2BA236DAB65F}.Checked|x64.ActiveCfg = Debug|Any CPU - {E8F133F8-4D20-475D-9D16-2BA236DAB65F}.Checked|x64.Build.0 = Debug|Any CPU - {E8F133F8-4D20-475D-9D16-2BA236DAB65F}.Checked|x86.ActiveCfg = Debug|Any CPU - {E8F133F8-4D20-475D-9D16-2BA236DAB65F}.Checked|x86.Build.0 = Debug|Any CPU - {E8F133F8-4D20-475D-9D16-2BA236DAB65F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E8F133F8-4D20-475D-9D16-2BA236DAB65F}.Debug|ARM.ActiveCfg = Debug|Any CPU - {E8F133F8-4D20-475D-9D16-2BA236DAB65F}.Debug|ARM.Build.0 = Debug|Any CPU - {E8F133F8-4D20-475D-9D16-2BA236DAB65F}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {E8F133F8-4D20-475D-9D16-2BA236DAB65F}.Debug|ARM64.Build.0 = Debug|Any CPU - {E8F133F8-4D20-475D-9D16-2BA236DAB65F}.Debug|x64.ActiveCfg = Debug|Any CPU - {E8F133F8-4D20-475D-9D16-2BA236DAB65F}.Debug|x64.Build.0 = Debug|Any CPU - {E8F133F8-4D20-475D-9D16-2BA236DAB65F}.Debug|x86.ActiveCfg = Debug|Any CPU - {E8F133F8-4D20-475D-9D16-2BA236DAB65F}.Debug|x86.Build.0 = Debug|Any CPU - {E8F133F8-4D20-475D-9D16-2BA236DAB65F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E8F133F8-4D20-475D-9D16-2BA236DAB65F}.Release|ARM.ActiveCfg = Release|Any CPU - {E8F133F8-4D20-475D-9D16-2BA236DAB65F}.Release|ARM64.ActiveCfg = Release|Any CPU - {E8F133F8-4D20-475D-9D16-2BA236DAB65F}.Release|x64.ActiveCfg = Release|Any CPU - {E8F133F8-4D20-475D-9D16-2BA236DAB65F}.Release|x86.ActiveCfg = Release|Any CPU - {E8F133F8-4D20-475D-9D16-2BA236DAB65F}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU - {E8F133F8-4D20-475D-9D16-2BA236DAB65F}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU - {E8F133F8-4D20-475D-9D16-2BA236DAB65F}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU - {E8F133F8-4D20-475D-9D16-2BA236DAB65F}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU - {E8F133F8-4D20-475D-9D16-2BA236DAB65F}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU - {E8F133F8-4D20-475D-9D16-2BA236DAB65F}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU - {E8F133F8-4D20-475D-9D16-2BA236DAB65F}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU - {E8F133F8-4D20-475D-9D16-2BA236DAB65F}.RelWithDebInfo|x64.Build.0 = Release|Any CPU - {E8F133F8-4D20-475D-9D16-2BA236DAB65F}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU - {E8F133F8-4D20-475D-9D16-2BA236DAB65F}.RelWithDebInfo|x86.Build.0 = Release|Any CPU - {1043FA82-37CC-4809-80DC-C1EB06A55133}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {1043FA82-37CC-4809-80DC-C1EB06A55133}.Checked|Any CPU.Build.0 = Debug|Any CPU - {1043FA82-37CC-4809-80DC-C1EB06A55133}.Checked|ARM.ActiveCfg = Debug|Any CPU - {1043FA82-37CC-4809-80DC-C1EB06A55133}.Checked|ARM.Build.0 = Debug|Any CPU - {1043FA82-37CC-4809-80DC-C1EB06A55133}.Checked|ARM64.ActiveCfg = Debug|Any CPU - {1043FA82-37CC-4809-80DC-C1EB06A55133}.Checked|ARM64.Build.0 = Debug|Any CPU - {1043FA82-37CC-4809-80DC-C1EB06A55133}.Checked|x64.ActiveCfg = Debug|Any CPU - {1043FA82-37CC-4809-80DC-C1EB06A55133}.Checked|x64.Build.0 = Debug|Any CPU - {1043FA82-37CC-4809-80DC-C1EB06A55133}.Checked|x86.ActiveCfg = Debug|Any CPU - {1043FA82-37CC-4809-80DC-C1EB06A55133}.Checked|x86.Build.0 = Debug|Any CPU - {1043FA82-37CC-4809-80DC-C1EB06A55133}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1043FA82-37CC-4809-80DC-C1EB06A55133}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1043FA82-37CC-4809-80DC-C1EB06A55133}.Debug|ARM.ActiveCfg = Debug|Any CPU - {1043FA82-37CC-4809-80DC-C1EB06A55133}.Debug|ARM.Build.0 = Debug|Any CPU - {1043FA82-37CC-4809-80DC-C1EB06A55133}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {1043FA82-37CC-4809-80DC-C1EB06A55133}.Debug|ARM64.Build.0 = Debug|Any CPU - {1043FA82-37CC-4809-80DC-C1EB06A55133}.Debug|x64.ActiveCfg = Debug|Any CPU - {1043FA82-37CC-4809-80DC-C1EB06A55133}.Debug|x64.Build.0 = Debug|Any CPU - {1043FA82-37CC-4809-80DC-C1EB06A55133}.Debug|x86.ActiveCfg = Debug|Any CPU - {1043FA82-37CC-4809-80DC-C1EB06A55133}.Debug|x86.Build.0 = Debug|Any CPU - {1043FA82-37CC-4809-80DC-C1EB06A55133}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1043FA82-37CC-4809-80DC-C1EB06A55133}.Release|Any CPU.Build.0 = Release|Any CPU - {1043FA82-37CC-4809-80DC-C1EB06A55133}.Release|ARM.ActiveCfg = Release|Any CPU - {1043FA82-37CC-4809-80DC-C1EB06A55133}.Release|ARM.Build.0 = Release|Any CPU - {1043FA82-37CC-4809-80DC-C1EB06A55133}.Release|ARM64.ActiveCfg = Release|Any CPU - {1043FA82-37CC-4809-80DC-C1EB06A55133}.Release|ARM64.Build.0 = Release|Any CPU - {1043FA82-37CC-4809-80DC-C1EB06A55133}.Release|x64.ActiveCfg = Release|Any CPU - {1043FA82-37CC-4809-80DC-C1EB06A55133}.Release|x64.Build.0 = Release|Any CPU - {1043FA82-37CC-4809-80DC-C1EB06A55133}.Release|x86.ActiveCfg = Release|Any CPU - {1043FA82-37CC-4809-80DC-C1EB06A55133}.Release|x86.Build.0 = Release|Any CPU - {1043FA82-37CC-4809-80DC-C1EB06A55133}.RelWithDebInfo|Any CPU.ActiveCfg = Debug|Any CPU - {1043FA82-37CC-4809-80DC-C1EB06A55133}.RelWithDebInfo|Any CPU.Build.0 = Debug|Any CPU - {1043FA82-37CC-4809-80DC-C1EB06A55133}.RelWithDebInfo|ARM.ActiveCfg = Debug|Any CPU - {1043FA82-37CC-4809-80DC-C1EB06A55133}.RelWithDebInfo|ARM.Build.0 = Debug|Any CPU - {1043FA82-37CC-4809-80DC-C1EB06A55133}.RelWithDebInfo|ARM64.ActiveCfg = Debug|Any CPU - {1043FA82-37CC-4809-80DC-C1EB06A55133}.RelWithDebInfo|ARM64.Build.0 = Debug|Any CPU - {1043FA82-37CC-4809-80DC-C1EB06A55133}.RelWithDebInfo|x64.ActiveCfg = Debug|Any CPU - {1043FA82-37CC-4809-80DC-C1EB06A55133}.RelWithDebInfo|x64.Build.0 = Debug|Any CPU - {1043FA82-37CC-4809-80DC-C1EB06A55133}.RelWithDebInfo|x86.ActiveCfg = Debug|Any CPU - {1043FA82-37CC-4809-80DC-C1EB06A55133}.RelWithDebInfo|x86.Build.0 = Debug|Any CPU - {C6EB3C21-FDFF-4CF0-BE3A-3D1A3924408E}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {C6EB3C21-FDFF-4CF0-BE3A-3D1A3924408E}.Checked|Any CPU.Build.0 = Debug|Any CPU - {C6EB3C21-FDFF-4CF0-BE3A-3D1A3924408E}.Checked|ARM.ActiveCfg = Debug|Any CPU - {C6EB3C21-FDFF-4CF0-BE3A-3D1A3924408E}.Checked|ARM.Build.0 = Debug|Any CPU - {C6EB3C21-FDFF-4CF0-BE3A-3D1A3924408E}.Checked|ARM64.ActiveCfg = Debug|Any CPU - {C6EB3C21-FDFF-4CF0-BE3A-3D1A3924408E}.Checked|ARM64.Build.0 = Debug|Any CPU - {C6EB3C21-FDFF-4CF0-BE3A-3D1A3924408E}.Checked|x64.ActiveCfg = Debug|Any CPU - {C6EB3C21-FDFF-4CF0-BE3A-3D1A3924408E}.Checked|x64.Build.0 = Debug|Any CPU - {C6EB3C21-FDFF-4CF0-BE3A-3D1A3924408E}.Checked|x86.ActiveCfg = Debug|Any CPU - {C6EB3C21-FDFF-4CF0-BE3A-3D1A3924408E}.Checked|x86.Build.0 = Debug|Any CPU - {C6EB3C21-FDFF-4CF0-BE3A-3D1A3924408E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C6EB3C21-FDFF-4CF0-BE3A-3D1A3924408E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C6EB3C21-FDFF-4CF0-BE3A-3D1A3924408E}.Debug|ARM.ActiveCfg = Debug|Any CPU - {C6EB3C21-FDFF-4CF0-BE3A-3D1A3924408E}.Debug|ARM.Build.0 = Debug|Any CPU - {C6EB3C21-FDFF-4CF0-BE3A-3D1A3924408E}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {C6EB3C21-FDFF-4CF0-BE3A-3D1A3924408E}.Debug|ARM64.Build.0 = Debug|Any CPU - {C6EB3C21-FDFF-4CF0-BE3A-3D1A3924408E}.Debug|x64.ActiveCfg = Debug|Any CPU - {C6EB3C21-FDFF-4CF0-BE3A-3D1A3924408E}.Debug|x64.Build.0 = Debug|Any CPU - {C6EB3C21-FDFF-4CF0-BE3A-3D1A3924408E}.Debug|x86.ActiveCfg = Debug|Any CPU - {C6EB3C21-FDFF-4CF0-BE3A-3D1A3924408E}.Debug|x86.Build.0 = Debug|Any CPU - {C6EB3C21-FDFF-4CF0-BE3A-3D1A3924408E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C6EB3C21-FDFF-4CF0-BE3A-3D1A3924408E}.Release|Any CPU.Build.0 = Release|Any CPU - {C6EB3C21-FDFF-4CF0-BE3A-3D1A3924408E}.Release|ARM.ActiveCfg = Release|Any CPU - {C6EB3C21-FDFF-4CF0-BE3A-3D1A3924408E}.Release|ARM.Build.0 = Release|Any CPU - {C6EB3C21-FDFF-4CF0-BE3A-3D1A3924408E}.Release|ARM64.ActiveCfg = Release|Any CPU - {C6EB3C21-FDFF-4CF0-BE3A-3D1A3924408E}.Release|ARM64.Build.0 = Release|Any CPU - {C6EB3C21-FDFF-4CF0-BE3A-3D1A3924408E}.Release|x64.ActiveCfg = Release|Any CPU - {C6EB3C21-FDFF-4CF0-BE3A-3D1A3924408E}.Release|x64.Build.0 = Release|Any CPU - {C6EB3C21-FDFF-4CF0-BE3A-3D1A3924408E}.Release|x86.ActiveCfg = Release|Any CPU - {C6EB3C21-FDFF-4CF0-BE3A-3D1A3924408E}.Release|x86.Build.0 = Release|Any CPU - {C6EB3C21-FDFF-4CF0-BE3A-3D1A3924408E}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU - {C6EB3C21-FDFF-4CF0-BE3A-3D1A3924408E}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU - {C6EB3C21-FDFF-4CF0-BE3A-3D1A3924408E}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU - {C6EB3C21-FDFF-4CF0-BE3A-3D1A3924408E}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU - {C6EB3C21-FDFF-4CF0-BE3A-3D1A3924408E}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU - {C6EB3C21-FDFF-4CF0-BE3A-3D1A3924408E}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU - {C6EB3C21-FDFF-4CF0-BE3A-3D1A3924408E}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU - {C6EB3C21-FDFF-4CF0-BE3A-3D1A3924408E}.RelWithDebInfo|x64.Build.0 = Release|Any CPU - {C6EB3C21-FDFF-4CF0-BE3A-3D1A3924408E}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU - {C6EB3C21-FDFF-4CF0-BE3A-3D1A3924408E}.RelWithDebInfo|x86.Build.0 = Release|Any CPU - {830A70D3-E604-467A-9846-6C5DF5BD3976}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {830A70D3-E604-467A-9846-6C5DF5BD3976}.Checked|Any CPU.Build.0 = Debug|Any CPU - {830A70D3-E604-467A-9846-6C5DF5BD3976}.Checked|ARM.ActiveCfg = Debug|Any CPU - {830A70D3-E604-467A-9846-6C5DF5BD3976}.Checked|ARM.Build.0 = Debug|Any CPU - {830A70D3-E604-467A-9846-6C5DF5BD3976}.Checked|ARM64.ActiveCfg = Debug|Any CPU - {830A70D3-E604-467A-9846-6C5DF5BD3976}.Checked|ARM64.Build.0 = Debug|Any CPU - {830A70D3-E604-467A-9846-6C5DF5BD3976}.Checked|x64.ActiveCfg = Debug|Any CPU - {830A70D3-E604-467A-9846-6C5DF5BD3976}.Checked|x64.Build.0 = Debug|Any CPU - {830A70D3-E604-467A-9846-6C5DF5BD3976}.Checked|x86.ActiveCfg = Debug|Any CPU - {830A70D3-E604-467A-9846-6C5DF5BD3976}.Checked|x86.Build.0 = Debug|Any CPU - {830A70D3-E604-467A-9846-6C5DF5BD3976}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {830A70D3-E604-467A-9846-6C5DF5BD3976}.Debug|Any CPU.Build.0 = Debug|Any CPU - {830A70D3-E604-467A-9846-6C5DF5BD3976}.Debug|ARM.ActiveCfg = Debug|Any CPU - {830A70D3-E604-467A-9846-6C5DF5BD3976}.Debug|ARM.Build.0 = Debug|Any CPU - {830A70D3-E604-467A-9846-6C5DF5BD3976}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {830A70D3-E604-467A-9846-6C5DF5BD3976}.Debug|ARM64.Build.0 = Debug|Any CPU - {830A70D3-E604-467A-9846-6C5DF5BD3976}.Debug|x64.ActiveCfg = Debug|Any CPU - {830A70D3-E604-467A-9846-6C5DF5BD3976}.Debug|x64.Build.0 = Debug|Any CPU - {830A70D3-E604-467A-9846-6C5DF5BD3976}.Debug|x86.ActiveCfg = Debug|Any CPU - {830A70D3-E604-467A-9846-6C5DF5BD3976}.Debug|x86.Build.0 = Debug|Any CPU - {830A70D3-E604-467A-9846-6C5DF5BD3976}.Release|Any CPU.ActiveCfg = Release|Any CPU - {830A70D3-E604-467A-9846-6C5DF5BD3976}.Release|Any CPU.Build.0 = Release|Any CPU - {830A70D3-E604-467A-9846-6C5DF5BD3976}.Release|ARM.ActiveCfg = Release|Any CPU - {830A70D3-E604-467A-9846-6C5DF5BD3976}.Release|ARM.Build.0 = Release|Any CPU - {830A70D3-E604-467A-9846-6C5DF5BD3976}.Release|ARM64.ActiveCfg = Release|Any CPU - {830A70D3-E604-467A-9846-6C5DF5BD3976}.Release|ARM64.Build.0 = Release|Any CPU - {830A70D3-E604-467A-9846-6C5DF5BD3976}.Release|x64.ActiveCfg = Release|Any CPU - {830A70D3-E604-467A-9846-6C5DF5BD3976}.Release|x64.Build.0 = Release|Any CPU - {830A70D3-E604-467A-9846-6C5DF5BD3976}.Release|x86.ActiveCfg = Release|Any CPU - {830A70D3-E604-467A-9846-6C5DF5BD3976}.Release|x86.Build.0 = Release|Any CPU - {830A70D3-E604-467A-9846-6C5DF5BD3976}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU - {830A70D3-E604-467A-9846-6C5DF5BD3976}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU - {830A70D3-E604-467A-9846-6C5DF5BD3976}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU - {830A70D3-E604-467A-9846-6C5DF5BD3976}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU - {830A70D3-E604-467A-9846-6C5DF5BD3976}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU - {830A70D3-E604-467A-9846-6C5DF5BD3976}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU - {830A70D3-E604-467A-9846-6C5DF5BD3976}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU - {830A70D3-E604-467A-9846-6C5DF5BD3976}.RelWithDebInfo|x64.Build.0 = Release|Any CPU - {830A70D3-E604-467A-9846-6C5DF5BD3976}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU - {830A70D3-E604-467A-9846-6C5DF5BD3976}.RelWithDebInfo|x86.Build.0 = Release|Any CPU - {438A539E-6AF2-4402-BBA0-E2AAC71A28A1}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {438A539E-6AF2-4402-BBA0-E2AAC71A28A1}.Checked|Any CPU.Build.0 = Debug|Any CPU - {438A539E-6AF2-4402-BBA0-E2AAC71A28A1}.Checked|ARM.ActiveCfg = Debug|Any CPU - {438A539E-6AF2-4402-BBA0-E2AAC71A28A1}.Checked|ARM.Build.0 = Debug|Any CPU - {438A539E-6AF2-4402-BBA0-E2AAC71A28A1}.Checked|ARM64.ActiveCfg = Debug|Any CPU - {438A539E-6AF2-4402-BBA0-E2AAC71A28A1}.Checked|ARM64.Build.0 = Debug|Any CPU - {438A539E-6AF2-4402-BBA0-E2AAC71A28A1}.Checked|x64.ActiveCfg = Debug|Any CPU - {438A539E-6AF2-4402-BBA0-E2AAC71A28A1}.Checked|x64.Build.0 = Debug|Any CPU - {438A539E-6AF2-4402-BBA0-E2AAC71A28A1}.Checked|x86.ActiveCfg = Debug|Any CPU - {438A539E-6AF2-4402-BBA0-E2AAC71A28A1}.Checked|x86.Build.0 = Debug|Any CPU - {438A539E-6AF2-4402-BBA0-E2AAC71A28A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {438A539E-6AF2-4402-BBA0-E2AAC71A28A1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {438A539E-6AF2-4402-BBA0-E2AAC71A28A1}.Debug|ARM.ActiveCfg = Debug|Any CPU - {438A539E-6AF2-4402-BBA0-E2AAC71A28A1}.Debug|ARM.Build.0 = Debug|Any CPU - {438A539E-6AF2-4402-BBA0-E2AAC71A28A1}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {438A539E-6AF2-4402-BBA0-E2AAC71A28A1}.Debug|ARM64.Build.0 = Debug|Any CPU - {438A539E-6AF2-4402-BBA0-E2AAC71A28A1}.Debug|x64.ActiveCfg = Debug|Any CPU - {438A539E-6AF2-4402-BBA0-E2AAC71A28A1}.Debug|x64.Build.0 = Debug|Any CPU - {438A539E-6AF2-4402-BBA0-E2AAC71A28A1}.Debug|x86.ActiveCfg = Debug|Any CPU - {438A539E-6AF2-4402-BBA0-E2AAC71A28A1}.Debug|x86.Build.0 = Debug|Any CPU - {438A539E-6AF2-4402-BBA0-E2AAC71A28A1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {438A539E-6AF2-4402-BBA0-E2AAC71A28A1}.Release|Any CPU.Build.0 = Release|Any CPU - {438A539E-6AF2-4402-BBA0-E2AAC71A28A1}.Release|ARM.ActiveCfg = Release|Any CPU - {438A539E-6AF2-4402-BBA0-E2AAC71A28A1}.Release|ARM.Build.0 = Release|Any CPU - {438A539E-6AF2-4402-BBA0-E2AAC71A28A1}.Release|ARM64.ActiveCfg = Release|Any CPU - {438A539E-6AF2-4402-BBA0-E2AAC71A28A1}.Release|ARM64.Build.0 = Release|Any CPU - {438A539E-6AF2-4402-BBA0-E2AAC71A28A1}.Release|x64.ActiveCfg = Release|Any CPU - {438A539E-6AF2-4402-BBA0-E2AAC71A28A1}.Release|x64.Build.0 = Release|Any CPU - {438A539E-6AF2-4402-BBA0-E2AAC71A28A1}.Release|x86.ActiveCfg = Release|Any CPU - {438A539E-6AF2-4402-BBA0-E2AAC71A28A1}.Release|x86.Build.0 = Release|Any CPU - {438A539E-6AF2-4402-BBA0-E2AAC71A28A1}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU - {438A539E-6AF2-4402-BBA0-E2AAC71A28A1}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU - {438A539E-6AF2-4402-BBA0-E2AAC71A28A1}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU - {438A539E-6AF2-4402-BBA0-E2AAC71A28A1}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU - {438A539E-6AF2-4402-BBA0-E2AAC71A28A1}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU - {438A539E-6AF2-4402-BBA0-E2AAC71A28A1}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU - {438A539E-6AF2-4402-BBA0-E2AAC71A28A1}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU - {438A539E-6AF2-4402-BBA0-E2AAC71A28A1}.RelWithDebInfo|x64.Build.0 = Release|Any CPU - {438A539E-6AF2-4402-BBA0-E2AAC71A28A1}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU - {438A539E-6AF2-4402-BBA0-E2AAC71A28A1}.RelWithDebInfo|x86.Build.0 = Release|Any CPU - {B6C33C85-08A7-47D9-BEA8-36164BB3653B}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {B6C33C85-08A7-47D9-BEA8-36164BB3653B}.Checked|Any CPU.Build.0 = Debug|Any CPU - {B6C33C85-08A7-47D9-BEA8-36164BB3653B}.Checked|ARM.ActiveCfg = Debug|Any CPU - {B6C33C85-08A7-47D9-BEA8-36164BB3653B}.Checked|ARM.Build.0 = Debug|Any CPU - {B6C33C85-08A7-47D9-BEA8-36164BB3653B}.Checked|ARM64.ActiveCfg = Debug|Any CPU - {B6C33C85-08A7-47D9-BEA8-36164BB3653B}.Checked|ARM64.Build.0 = Debug|Any CPU - {B6C33C85-08A7-47D9-BEA8-36164BB3653B}.Checked|x64.ActiveCfg = Debug|Any CPU - {B6C33C85-08A7-47D9-BEA8-36164BB3653B}.Checked|x64.Build.0 = Debug|Any CPU - {B6C33C85-08A7-47D9-BEA8-36164BB3653B}.Checked|x86.ActiveCfg = Debug|Any CPU - {B6C33C85-08A7-47D9-BEA8-36164BB3653B}.Checked|x86.Build.0 = Debug|Any CPU - {B6C33C85-08A7-47D9-BEA8-36164BB3653B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B6C33C85-08A7-47D9-BEA8-36164BB3653B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B6C33C85-08A7-47D9-BEA8-36164BB3653B}.Debug|ARM.ActiveCfg = Debug|Any CPU - {B6C33C85-08A7-47D9-BEA8-36164BB3653B}.Debug|ARM.Build.0 = Debug|Any CPU - {B6C33C85-08A7-47D9-BEA8-36164BB3653B}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {B6C33C85-08A7-47D9-BEA8-36164BB3653B}.Debug|ARM64.Build.0 = Debug|Any CPU - {B6C33C85-08A7-47D9-BEA8-36164BB3653B}.Debug|x64.ActiveCfg = Debug|Any CPU - {B6C33C85-08A7-47D9-BEA8-36164BB3653B}.Debug|x64.Build.0 = Debug|Any CPU - {B6C33C85-08A7-47D9-BEA8-36164BB3653B}.Debug|x86.ActiveCfg = Debug|Any CPU - {B6C33C85-08A7-47D9-BEA8-36164BB3653B}.Debug|x86.Build.0 = Debug|Any CPU - {B6C33C85-08A7-47D9-BEA8-36164BB3653B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B6C33C85-08A7-47D9-BEA8-36164BB3653B}.Release|Any CPU.Build.0 = Release|Any CPU - {B6C33C85-08A7-47D9-BEA8-36164BB3653B}.Release|ARM.ActiveCfg = Release|Any CPU - {B6C33C85-08A7-47D9-BEA8-36164BB3653B}.Release|ARM.Build.0 = Release|Any CPU - {B6C33C85-08A7-47D9-BEA8-36164BB3653B}.Release|ARM64.ActiveCfg = Release|Any CPU - {B6C33C85-08A7-47D9-BEA8-36164BB3653B}.Release|ARM64.Build.0 = Release|Any CPU - {B6C33C85-08A7-47D9-BEA8-36164BB3653B}.Release|x64.ActiveCfg = Release|Any CPU - {B6C33C85-08A7-47D9-BEA8-36164BB3653B}.Release|x64.Build.0 = Release|Any CPU - {B6C33C85-08A7-47D9-BEA8-36164BB3653B}.Release|x86.ActiveCfg = Release|Any CPU - {B6C33C85-08A7-47D9-BEA8-36164BB3653B}.Release|x86.Build.0 = Release|Any CPU - {B6C33C85-08A7-47D9-BEA8-36164BB3653B}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU - {B6C33C85-08A7-47D9-BEA8-36164BB3653B}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU - {B6C33C85-08A7-47D9-BEA8-36164BB3653B}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU - {B6C33C85-08A7-47D9-BEA8-36164BB3653B}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU - {B6C33C85-08A7-47D9-BEA8-36164BB3653B}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU - {B6C33C85-08A7-47D9-BEA8-36164BB3653B}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU - {B6C33C85-08A7-47D9-BEA8-36164BB3653B}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU - {B6C33C85-08A7-47D9-BEA8-36164BB3653B}.RelWithDebInfo|x64.Build.0 = Release|Any CPU - {B6C33C85-08A7-47D9-BEA8-36164BB3653B}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU - {B6C33C85-08A7-47D9-BEA8-36164BB3653B}.RelWithDebInfo|x86.Build.0 = Release|Any CPU - {C32F2858-6B5F-4967-ABC4-852B6399C4AE}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {C32F2858-6B5F-4967-ABC4-852B6399C4AE}.Checked|Any CPU.Build.0 = Debug|Any CPU - {C32F2858-6B5F-4967-ABC4-852B6399C4AE}.Checked|ARM.ActiveCfg = Debug|Any CPU - {C32F2858-6B5F-4967-ABC4-852B6399C4AE}.Checked|ARM.Build.0 = Debug|Any CPU - {C32F2858-6B5F-4967-ABC4-852B6399C4AE}.Checked|ARM64.ActiveCfg = Debug|Any CPU - {C32F2858-6B5F-4967-ABC4-852B6399C4AE}.Checked|ARM64.Build.0 = Debug|Any CPU - {C32F2858-6B5F-4967-ABC4-852B6399C4AE}.Checked|x64.ActiveCfg = Debug|Any CPU - {C32F2858-6B5F-4967-ABC4-852B6399C4AE}.Checked|x64.Build.0 = Debug|Any CPU - {C32F2858-6B5F-4967-ABC4-852B6399C4AE}.Checked|x86.ActiveCfg = Debug|Any CPU - {C32F2858-6B5F-4967-ABC4-852B6399C4AE}.Checked|x86.Build.0 = Debug|Any CPU - {C32F2858-6B5F-4967-ABC4-852B6399C4AE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C32F2858-6B5F-4967-ABC4-852B6399C4AE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C32F2858-6B5F-4967-ABC4-852B6399C4AE}.Debug|ARM.ActiveCfg = Debug|Any CPU - {C32F2858-6B5F-4967-ABC4-852B6399C4AE}.Debug|ARM.Build.0 = Debug|Any CPU - {C32F2858-6B5F-4967-ABC4-852B6399C4AE}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {C32F2858-6B5F-4967-ABC4-852B6399C4AE}.Debug|ARM64.Build.0 = Debug|Any CPU - {C32F2858-6B5F-4967-ABC4-852B6399C4AE}.Debug|x64.ActiveCfg = Debug|Any CPU - {C32F2858-6B5F-4967-ABC4-852B6399C4AE}.Debug|x64.Build.0 = Debug|Any CPU - {C32F2858-6B5F-4967-ABC4-852B6399C4AE}.Debug|x86.ActiveCfg = Debug|Any CPU - {C32F2858-6B5F-4967-ABC4-852B6399C4AE}.Debug|x86.Build.0 = Debug|Any CPU - {C32F2858-6B5F-4967-ABC4-852B6399C4AE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C32F2858-6B5F-4967-ABC4-852B6399C4AE}.Release|Any CPU.Build.0 = Release|Any CPU - {C32F2858-6B5F-4967-ABC4-852B6399C4AE}.Release|ARM.ActiveCfg = Release|Any CPU - {C32F2858-6B5F-4967-ABC4-852B6399C4AE}.Release|ARM.Build.0 = Release|Any CPU - {C32F2858-6B5F-4967-ABC4-852B6399C4AE}.Release|ARM64.ActiveCfg = Release|Any CPU - {C32F2858-6B5F-4967-ABC4-852B6399C4AE}.Release|ARM64.Build.0 = Release|Any CPU - {C32F2858-6B5F-4967-ABC4-852B6399C4AE}.Release|x64.ActiveCfg = Release|Any CPU - {C32F2858-6B5F-4967-ABC4-852B6399C4AE}.Release|x64.Build.0 = Release|Any CPU - {C32F2858-6B5F-4967-ABC4-852B6399C4AE}.Release|x86.ActiveCfg = Release|Any CPU - {C32F2858-6B5F-4967-ABC4-852B6399C4AE}.Release|x86.Build.0 = Release|Any CPU - {C32F2858-6B5F-4967-ABC4-852B6399C4AE}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU - {C32F2858-6B5F-4967-ABC4-852B6399C4AE}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU - {C32F2858-6B5F-4967-ABC4-852B6399C4AE}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU - {C32F2858-6B5F-4967-ABC4-852B6399C4AE}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU - {C32F2858-6B5F-4967-ABC4-852B6399C4AE}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU - {C32F2858-6B5F-4967-ABC4-852B6399C4AE}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU - {C32F2858-6B5F-4967-ABC4-852B6399C4AE}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU - {C32F2858-6B5F-4967-ABC4-852B6399C4AE}.RelWithDebInfo|x64.Build.0 = Release|Any CPU - {C32F2858-6B5F-4967-ABC4-852B6399C4AE}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU - {C32F2858-6B5F-4967-ABC4-852B6399C4AE}.RelWithDebInfo|x86.Build.0 = Release|Any CPU - {44F93947-8FD4-4946-8AE5-EF6D25970CC7}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {44F93947-8FD4-4946-8AE5-EF6D25970CC7}.Checked|Any CPU.Build.0 = Debug|Any CPU - {44F93947-8FD4-4946-8AE5-EF6D25970CC7}.Checked|ARM.ActiveCfg = Debug|Any CPU - {44F93947-8FD4-4946-8AE5-EF6D25970CC7}.Checked|ARM.Build.0 = Debug|Any CPU - {44F93947-8FD4-4946-8AE5-EF6D25970CC7}.Checked|ARM64.ActiveCfg = Debug|Any CPU - {44F93947-8FD4-4946-8AE5-EF6D25970CC7}.Checked|ARM64.Build.0 = Debug|Any CPU - {44F93947-8FD4-4946-8AE5-EF6D25970CC7}.Checked|x64.ActiveCfg = Debug|Any CPU - {44F93947-8FD4-4946-8AE5-EF6D25970CC7}.Checked|x64.Build.0 = Debug|Any CPU - {44F93947-8FD4-4946-8AE5-EF6D25970CC7}.Checked|x86.ActiveCfg = Debug|Any CPU - {44F93947-8FD4-4946-8AE5-EF6D25970CC7}.Checked|x86.Build.0 = Debug|Any CPU - {44F93947-8FD4-4946-8AE5-EF6D25970CC7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {44F93947-8FD4-4946-8AE5-EF6D25970CC7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {44F93947-8FD4-4946-8AE5-EF6D25970CC7}.Debug|ARM.ActiveCfg = Debug|Any CPU - {44F93947-8FD4-4946-8AE5-EF6D25970CC7}.Debug|ARM.Build.0 = Debug|Any CPU - {44F93947-8FD4-4946-8AE5-EF6D25970CC7}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {44F93947-8FD4-4946-8AE5-EF6D25970CC7}.Debug|ARM64.Build.0 = Debug|Any CPU - {44F93947-8FD4-4946-8AE5-EF6D25970CC7}.Debug|x64.ActiveCfg = Debug|Any CPU - {44F93947-8FD4-4946-8AE5-EF6D25970CC7}.Debug|x64.Build.0 = Debug|Any CPU - {44F93947-8FD4-4946-8AE5-EF6D25970CC7}.Debug|x86.ActiveCfg = Debug|Any CPU - {44F93947-8FD4-4946-8AE5-EF6D25970CC7}.Debug|x86.Build.0 = Debug|Any CPU - {44F93947-8FD4-4946-8AE5-EF6D25970CC7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {44F93947-8FD4-4946-8AE5-EF6D25970CC7}.Release|Any CPU.Build.0 = Release|Any CPU - {44F93947-8FD4-4946-8AE5-EF6D25970CC7}.Release|ARM.ActiveCfg = Release|Any CPU - {44F93947-8FD4-4946-8AE5-EF6D25970CC7}.Release|ARM.Build.0 = Release|Any CPU - {44F93947-8FD4-4946-8AE5-EF6D25970CC7}.Release|ARM64.ActiveCfg = Release|Any CPU - {44F93947-8FD4-4946-8AE5-EF6D25970CC7}.Release|ARM64.Build.0 = Release|Any CPU - {44F93947-8FD4-4946-8AE5-EF6D25970CC7}.Release|x64.ActiveCfg = Release|Any CPU - {44F93947-8FD4-4946-8AE5-EF6D25970CC7}.Release|x64.Build.0 = Release|Any CPU - {44F93947-8FD4-4946-8AE5-EF6D25970CC7}.Release|x86.ActiveCfg = Release|Any CPU - {44F93947-8FD4-4946-8AE5-EF6D25970CC7}.Release|x86.Build.0 = Release|Any CPU - {44F93947-8FD4-4946-8AE5-EF6D25970CC7}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU - {44F93947-8FD4-4946-8AE5-EF6D25970CC7}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU - {44F93947-8FD4-4946-8AE5-EF6D25970CC7}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU - {44F93947-8FD4-4946-8AE5-EF6D25970CC7}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU - {44F93947-8FD4-4946-8AE5-EF6D25970CC7}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU - {44F93947-8FD4-4946-8AE5-EF6D25970CC7}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU - {44F93947-8FD4-4946-8AE5-EF6D25970CC7}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU - {44F93947-8FD4-4946-8AE5-EF6D25970CC7}.RelWithDebInfo|x64.Build.0 = Release|Any CPU - {44F93947-8FD4-4946-8AE5-EF6D25970CC7}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU - {44F93947-8FD4-4946-8AE5-EF6D25970CC7}.RelWithDebInfo|x86.Build.0 = Release|Any CPU - {C2422836-BA25-4751-9060-7C7890085869}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {C2422836-BA25-4751-9060-7C7890085869}.Checked|Any CPU.Build.0 = Debug|Any CPU - {C2422836-BA25-4751-9060-7C7890085869}.Checked|ARM.ActiveCfg = Debug|Any CPU - {C2422836-BA25-4751-9060-7C7890085869}.Checked|ARM.Build.0 = Debug|Any CPU - {C2422836-BA25-4751-9060-7C7890085869}.Checked|ARM64.ActiveCfg = Debug|Any CPU - {C2422836-BA25-4751-9060-7C7890085869}.Checked|ARM64.Build.0 = Debug|Any CPU - {C2422836-BA25-4751-9060-7C7890085869}.Checked|x64.ActiveCfg = Debug|Any CPU - {C2422836-BA25-4751-9060-7C7890085869}.Checked|x64.Build.0 = Debug|Any CPU - {C2422836-BA25-4751-9060-7C7890085869}.Checked|x86.ActiveCfg = Debug|Any CPU - {C2422836-BA25-4751-9060-7C7890085869}.Checked|x86.Build.0 = Debug|Any CPU - {C2422836-BA25-4751-9060-7C7890085869}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C2422836-BA25-4751-9060-7C7890085869}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C2422836-BA25-4751-9060-7C7890085869}.Debug|ARM.ActiveCfg = Debug|Any CPU - {C2422836-BA25-4751-9060-7C7890085869}.Debug|ARM.Build.0 = Debug|Any CPU - {C2422836-BA25-4751-9060-7C7890085869}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {C2422836-BA25-4751-9060-7C7890085869}.Debug|ARM64.Build.0 = Debug|Any CPU - {C2422836-BA25-4751-9060-7C7890085869}.Debug|x64.ActiveCfg = Debug|Any CPU - {C2422836-BA25-4751-9060-7C7890085869}.Debug|x64.Build.0 = Debug|Any CPU - {C2422836-BA25-4751-9060-7C7890085869}.Debug|x86.ActiveCfg = Debug|Any CPU - {C2422836-BA25-4751-9060-7C7890085869}.Debug|x86.Build.0 = Debug|Any CPU - {C2422836-BA25-4751-9060-7C7890085869}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C2422836-BA25-4751-9060-7C7890085869}.Release|Any CPU.Build.0 = Release|Any CPU - {C2422836-BA25-4751-9060-7C7890085869}.Release|ARM.ActiveCfg = Release|Any CPU - {C2422836-BA25-4751-9060-7C7890085869}.Release|ARM.Build.0 = Release|Any CPU - {C2422836-BA25-4751-9060-7C7890085869}.Release|ARM64.ActiveCfg = Release|Any CPU - {C2422836-BA25-4751-9060-7C7890085869}.Release|ARM64.Build.0 = Release|Any CPU - {C2422836-BA25-4751-9060-7C7890085869}.Release|x64.ActiveCfg = Release|Any CPU - {C2422836-BA25-4751-9060-7C7890085869}.Release|x64.Build.0 = Release|Any CPU - {C2422836-BA25-4751-9060-7C7890085869}.Release|x86.ActiveCfg = Release|Any CPU - {C2422836-BA25-4751-9060-7C7890085869}.Release|x86.Build.0 = Release|Any CPU - {C2422836-BA25-4751-9060-7C7890085869}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU - {C2422836-BA25-4751-9060-7C7890085869}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU - {C2422836-BA25-4751-9060-7C7890085869}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU - {C2422836-BA25-4751-9060-7C7890085869}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU - {C2422836-BA25-4751-9060-7C7890085869}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU - {C2422836-BA25-4751-9060-7C7890085869}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU - {C2422836-BA25-4751-9060-7C7890085869}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU - {C2422836-BA25-4751-9060-7C7890085869}.RelWithDebInfo|x64.Build.0 = Release|Any CPU - {C2422836-BA25-4751-9060-7C7890085869}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU - {C2422836-BA25-4751-9060-7C7890085869}.RelWithDebInfo|x86.Build.0 = Release|Any CPU - {28B55114-88C0-44B6-BBD8-50C14ED59EE2}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {28B55114-88C0-44B6-BBD8-50C14ED59EE2}.Checked|Any CPU.Build.0 = Debug|Any CPU - {28B55114-88C0-44B6-BBD8-50C14ED59EE2}.Checked|ARM.ActiveCfg = Debug|Any CPU - {28B55114-88C0-44B6-BBD8-50C14ED59EE2}.Checked|ARM.Build.0 = Debug|Any CPU - {28B55114-88C0-44B6-BBD8-50C14ED59EE2}.Checked|ARM64.ActiveCfg = Debug|Any CPU - {28B55114-88C0-44B6-BBD8-50C14ED59EE2}.Checked|ARM64.Build.0 = Debug|Any CPU - {28B55114-88C0-44B6-BBD8-50C14ED59EE2}.Checked|x64.ActiveCfg = Debug|Any CPU - {28B55114-88C0-44B6-BBD8-50C14ED59EE2}.Checked|x64.Build.0 = Debug|Any CPU - {28B55114-88C0-44B6-BBD8-50C14ED59EE2}.Checked|x86.ActiveCfg = Debug|Any CPU - {28B55114-88C0-44B6-BBD8-50C14ED59EE2}.Checked|x86.Build.0 = Debug|Any CPU - {28B55114-88C0-44B6-BBD8-50C14ED59EE2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {28B55114-88C0-44B6-BBD8-50C14ED59EE2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {28B55114-88C0-44B6-BBD8-50C14ED59EE2}.Debug|ARM.ActiveCfg = Debug|Any CPU - {28B55114-88C0-44B6-BBD8-50C14ED59EE2}.Debug|ARM.Build.0 = Debug|Any CPU - {28B55114-88C0-44B6-BBD8-50C14ED59EE2}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {28B55114-88C0-44B6-BBD8-50C14ED59EE2}.Debug|ARM64.Build.0 = Debug|Any CPU - {28B55114-88C0-44B6-BBD8-50C14ED59EE2}.Debug|x64.ActiveCfg = Debug|Any CPU - {28B55114-88C0-44B6-BBD8-50C14ED59EE2}.Debug|x64.Build.0 = Debug|Any CPU - {28B55114-88C0-44B6-BBD8-50C14ED59EE2}.Debug|x86.ActiveCfg = Debug|Any CPU - {28B55114-88C0-44B6-BBD8-50C14ED59EE2}.Debug|x86.Build.0 = Debug|Any CPU - {28B55114-88C0-44B6-BBD8-50C14ED59EE2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {28B55114-88C0-44B6-BBD8-50C14ED59EE2}.Release|Any CPU.Build.0 = Release|Any CPU - {28B55114-88C0-44B6-BBD8-50C14ED59EE2}.Release|ARM.ActiveCfg = Release|Any CPU - {28B55114-88C0-44B6-BBD8-50C14ED59EE2}.Release|ARM.Build.0 = Release|Any CPU - {28B55114-88C0-44B6-BBD8-50C14ED59EE2}.Release|ARM64.ActiveCfg = Release|Any CPU - {28B55114-88C0-44B6-BBD8-50C14ED59EE2}.Release|ARM64.Build.0 = Release|Any CPU - {28B55114-88C0-44B6-BBD8-50C14ED59EE2}.Release|x64.ActiveCfg = Release|Any CPU - {28B55114-88C0-44B6-BBD8-50C14ED59EE2}.Release|x64.Build.0 = Release|Any CPU - {28B55114-88C0-44B6-BBD8-50C14ED59EE2}.Release|x86.ActiveCfg = Release|Any CPU - {28B55114-88C0-44B6-BBD8-50C14ED59EE2}.Release|x86.Build.0 = Release|Any CPU - {28B55114-88C0-44B6-BBD8-50C14ED59EE2}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU - {28B55114-88C0-44B6-BBD8-50C14ED59EE2}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU - {28B55114-88C0-44B6-BBD8-50C14ED59EE2}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU - {28B55114-88C0-44B6-BBD8-50C14ED59EE2}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU - {28B55114-88C0-44B6-BBD8-50C14ED59EE2}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU - {28B55114-88C0-44B6-BBD8-50C14ED59EE2}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU - {28B55114-88C0-44B6-BBD8-50C14ED59EE2}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU - {28B55114-88C0-44B6-BBD8-50C14ED59EE2}.RelWithDebInfo|x64.Build.0 = Release|Any CPU - {28B55114-88C0-44B6-BBD8-50C14ED59EE2}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU - {28B55114-88C0-44B6-BBD8-50C14ED59EE2}.RelWithDebInfo|x86.Build.0 = Release|Any CPU - {A9A7C879-C320-3327-BB84-16E1322E17AE}.Checked|Any CPU.ActiveCfg = Checked|x64 - {A9A7C879-C320-3327-BB84-16E1322E17AE}.Checked|Any CPU.Build.0 = Checked|x64 - {A9A7C879-C320-3327-BB84-16E1322E17AE}.Checked|ARM.ActiveCfg = Checked|x64 - {A9A7C879-C320-3327-BB84-16E1322E17AE}.Checked|ARM.Build.0 = Checked|x64 - {A9A7C879-C320-3327-BB84-16E1322E17AE}.Checked|ARM64.ActiveCfg = Checked|x64 - {A9A7C879-C320-3327-BB84-16E1322E17AE}.Checked|ARM64.Build.0 = Checked|x64 - {A9A7C879-C320-3327-BB84-16E1322E17AE}.Checked|x64.ActiveCfg = Checked|x64 - {A9A7C879-C320-3327-BB84-16E1322E17AE}.Checked|x64.Build.0 = Checked|x64 - {A9A7C879-C320-3327-BB84-16E1322E17AE}.Checked|x86.ActiveCfg = Checked|x64 - {A9A7C879-C320-3327-BB84-16E1322E17AE}.Checked|x86.Build.0 = Checked|x64 - {A9A7C879-C320-3327-BB84-16E1322E17AE}.Debug|Any CPU.ActiveCfg = Debug|x64 - {A9A7C879-C320-3327-BB84-16E1322E17AE}.Debug|ARM.ActiveCfg = Debug|x64 - {A9A7C879-C320-3327-BB84-16E1322E17AE}.Debug|ARM.Build.0 = Debug|x64 - {A9A7C879-C320-3327-BB84-16E1322E17AE}.Debug|ARM64.ActiveCfg = Debug|x64 - {A9A7C879-C320-3327-BB84-16E1322E17AE}.Debug|ARM64.Build.0 = Debug|x64 - {A9A7C879-C320-3327-BB84-16E1322E17AE}.Debug|x64.ActiveCfg = Debug|x64 - {A9A7C879-C320-3327-BB84-16E1322E17AE}.Debug|x64.Build.0 = Debug|x64 - {A9A7C879-C320-3327-BB84-16E1322E17AE}.Debug|x86.ActiveCfg = Debug|x64 - {A9A7C879-C320-3327-BB84-16E1322E17AE}.Debug|x86.Build.0 = Debug|x64 - {A9A7C879-C320-3327-BB84-16E1322E17AE}.Release|Any CPU.ActiveCfg = Release|x64 - {A9A7C879-C320-3327-BB84-16E1322E17AE}.Release|ARM.ActiveCfg = Release|x64 - {A9A7C879-C320-3327-BB84-16E1322E17AE}.Release|ARM64.ActiveCfg = Release|x64 - {A9A7C879-C320-3327-BB84-16E1322E17AE}.Release|x64.ActiveCfg = Release|x64 - {A9A7C879-C320-3327-BB84-16E1322E17AE}.Release|x86.ActiveCfg = Release|x64 - {A9A7C879-C320-3327-BB84-16E1322E17AE}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|x64 - {A9A7C879-C320-3327-BB84-16E1322E17AE}.RelWithDebInfo|Any CPU.Build.0 = RelWithDebInfo|x64 - {A9A7C879-C320-3327-BB84-16E1322E17AE}.RelWithDebInfo|ARM.ActiveCfg = RelWithDebInfo|x64 - {A9A7C879-C320-3327-BB84-16E1322E17AE}.RelWithDebInfo|ARM.Build.0 = RelWithDebInfo|x64 - {A9A7C879-C320-3327-BB84-16E1322E17AE}.RelWithDebInfo|ARM64.ActiveCfg = RelWithDebInfo|x64 - {A9A7C879-C320-3327-BB84-16E1322E17AE}.RelWithDebInfo|ARM64.Build.0 = RelWithDebInfo|x64 - {A9A7C879-C320-3327-BB84-16E1322E17AE}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64 - {A9A7C879-C320-3327-BB84-16E1322E17AE}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64 - {A9A7C879-C320-3327-BB84-16E1322E17AE}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|x64 - {A9A7C879-C320-3327-BB84-16E1322E17AE}.RelWithDebInfo|x86.Build.0 = RelWithDebInfo|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {730C1201-1848-4F1E-8C1F-6316FB886C35} = {19FAB78C-3351-4911-8F0C-8C6056401740} - {41638A4C-0DAF-47ED-A774-ECBBAC0315D7} = {19FAB78C-3351-4911-8F0C-8C6056401740} - {1532DB3C-7DCD-45C6-B697-62B8378A16A2} = {41638A4C-0DAF-47ED-A774-ECBBAC0315D7} - {D52C65C4-2C7D-45E6-9F5C-6F3A96796018} = {41638A4C-0DAF-47ED-A774-ECBBAC0315D7} - {B62728C8-1267-4043-B46F-5537BBAEC692} = {19FAB78C-3351-4911-8F0C-8C6056401740} - {718350FA-2DD9-4950-BA41-D7A7F66DAC91} = {B62728C8-1267-4043-B46F-5537BBAEC692} - {43D41DE9-7CCC-4DCB-A68A-B9099E538125} = {B62728C8-1267-4043-B46F-5537BBAEC692} - {41F59D85-FC36-3015-861B-F177863252BC} = {41638A4C-0DAF-47ED-A774-ECBBAC0315D7} - {1F012743-941B-4915-8C55-02097894CF3F} = {41638A4C-0DAF-47ED-A774-ECBBAC0315D7} - {41351955-16D5-48D7-AF4C-AF25F5FB2E78} = {B62728C8-1267-4043-B46F-5537BBAEC692} - {ED27F39F-DF5C-4E22-87E0-EC5B5873B503} = {41638A4C-0DAF-47ED-A774-ECBBAC0315D7} - {90CF2633-58F0-44EE-943B-D70207455F20} = {19FAB78C-3351-4911-8F0C-8C6056401740} - {2A9B5988-982F-4E26-9E44-D38AC5978C30} = {B62728C8-1267-4043-B46F-5537BBAEC692} - {234416E9-EA5F-4018-AC34-67682C5D3E04} = {41638A4C-0DAF-47ED-A774-ECBBAC0315D7} - {A1CE682A-12C4-4FF9-B864-A9A15A8726D2} = {19FAB78C-3351-4911-8F0C-8C6056401740} - {410394E0-7F4F-42D5-B5FA-30956F44ACBC} = {41638A4C-0DAF-47ED-A774-ECBBAC0315D7} - {03479E19-3F18-49A6-910A-F5041E27E7C0} = {19FAB78C-3351-4911-8F0C-8C6056401740} - {AEDCCF5B-5AD0-4D64-BF73-5CF468E07D22} = {03479E19-3F18-49A6-910A-F5041E27E7C0} - {936678B3-3392-4F4F-943C-B6A4BFCBAADC} = {B62728C8-1267-4043-B46F-5537BBAEC692} - {E5A7DC6C-BF8D-418A-BCBD-094EB748FA82} = {03479E19-3F18-49A6-910A-F5041E27E7C0} - {D8BE9C81-194E-43E5-82CF-2080892FBDE7} = {19FAB78C-3351-4911-8F0C-8C6056401740} - {6F4DD2F8-1C7B-4A87-B7E5-1BEE9F5AC128} = {03479E19-3F18-49A6-910A-F5041E27E7C0} - {C79D6069-2C18-48CB-846E-71F7168C2F7D} = {03479E19-3F18-49A6-910A-F5041E27E7C0} - {CED9ABBA-861E-4C0A-9359-22351208EF27} = {03479E19-3F18-49A6-910A-F5041E27E7C0} - {298AE119-6625-4604-BDE5-0765DC34C856} = {B62728C8-1267-4043-B46F-5537BBAEC692} - {C457CBCD-3A8D-4402-9A2B-693A0390D3F9} = {298AE119-6625-4604-BDE5-0765DC34C856} - {CFCF90E5-91CF-44FD-819D-97F530AEF769} = {19FAB78C-3351-4911-8F0C-8C6056401740} - {41BDFD6D-D165-4D67-BEF6-4E539040D30A} = {7852EDE4-93DF-4DB1-8A86-C521703811AF} - {06730767-421B-465F-BB63-A3A07D72D7A2} = {41BDFD6D-D165-4D67-BEF6-4E539040D30A} - {6419BA04-6F1A-4D2F-8DE4-5C359E0364A3} = {03479E19-3F18-49A6-910A-F5041E27E7C0} - {870A7AD0-B808-491E-92F6-433BE990B374} = {03479E19-3F18-49A6-910A-F5041E27E7C0} - {E1E2C698-E247-4D48-AE01-542B43744ACB} = {19FAB78C-3351-4911-8F0C-8C6056401740} - {A58B7F72-E9DF-4962-9E15-300EF4C53ABB} = {03479E19-3F18-49A6-910A-F5041E27E7C0} - {642E6E67-8A84-473D-9507-C302BF10989D} = {B62728C8-1267-4043-B46F-5537BBAEC692} - {57EB54E7-521A-4CDE-9DAE-8D6AE90A20BB} = {03479E19-3F18-49A6-910A-F5041E27E7C0} - {1F23F5DA-F766-445F-88FF-86137BDC2709} = {19FAB78C-3351-4911-8F0C-8C6056401740} - {BE45F03E-D700-404F-A890-8ED7D8969958} = {41638A4C-0DAF-47ED-A774-ECBBAC0315D7} - {729ED9E8-C92F-4E0E-B8A7-CC2C1374C751} = {41638A4C-0DAF-47ED-A774-ECBBAC0315D7} - {EEC90A42-CDCD-4EE3-B47D-C109D604E7E2} = {41638A4C-0DAF-47ED-A774-ECBBAC0315D7} - {5FC66A16-41E9-4D22-A44C-FEBB7DCCAAF8} = {19FAB78C-3351-4911-8F0C-8C6056401740} - {064BC7DD-D44C-400E-9215-7546E092AB98} = {03479E19-3F18-49A6-910A-F5041E27E7C0} - {61F73DD0-F346-4D7A-AB12-63415B4EEEE1} = {03479E19-3F18-49A6-910A-F5041E27E7C0} - {2BD55143-B102-4FEC-84AD-DC3B330FA9AC} = {B62728C8-1267-4043-B46F-5537BBAEC692} - {BD779298-8631-3F5D-AA59-82897E5454A7} = {19FAB78C-3351-4911-8F0C-8C6056401740} - {7852EDE4-93DF-4DB1-8A86-C521703811AF} = {19FAB78C-3351-4911-8F0C-8C6056401740} - {20EBC3C4-917C-402D-B778-9A6E3742BF5A} = {7852EDE4-93DF-4DB1-8A86-C521703811AF} - {8C35FEF8-1101-38F6-ACD0-462A1EA53A7D} = {7852EDE4-93DF-4DB1-8A86-C521703811AF} - {795B7A50-1B1F-406E-94E0-F9B35104EF22} = {7852EDE4-93DF-4DB1-8A86-C521703811AF} - {DD60B7C4-BECC-4C7D-A53B-FCDD4C92B728} = {03479E19-3F18-49A6-910A-F5041E27E7C0} - {DFF48CB6-4504-41C6-A8F1-F4A3D316D49F} = {03479E19-3F18-49A6-910A-F5041E27E7C0} - {E8F133F8-4D20-475D-9D16-2BA236DAB65F} = {03479E19-3F18-49A6-910A-F5041E27E7C0} - {1043FA82-37CC-4809-80DC-C1EB06A55133} = {19FAB78C-3351-4911-8F0C-8C6056401740} - {C6EB3C21-FDFF-4CF0-BE3A-3D1A3924408E} = {03479E19-3F18-49A6-910A-F5041E27E7C0} - {830A70D3-E604-467A-9846-6C5DF5BD3976} = {19FAB78C-3351-4911-8F0C-8C6056401740} - {438A539E-6AF2-4402-BBA0-E2AAC71A28A1} = {19FAB78C-3351-4911-8F0C-8C6056401740} - {B6C33C85-08A7-47D9-BEA8-36164BB3653B} = {B62728C8-1267-4043-B46F-5537BBAEC692} - {C32F2858-6B5F-4967-ABC4-852B6399C4AE} = {03479E19-3F18-49A6-910A-F5041E27E7C0} - {44F93947-8FD4-4946-8AE5-EF6D25970CC7} = {03479E19-3F18-49A6-910A-F5041E27E7C0} - {C2422836-BA25-4751-9060-7C7890085869} = {03479E19-3F18-49A6-910A-F5041E27E7C0} - {28B55114-88C0-44B6-BBD8-50C14ED59EE2} = {19FAB78C-3351-4911-8F0C-8C6056401740} - {A9A7C879-C320-3327-BB84-16E1322E17AE} = {00D9021E-A202-4BCB-9A59-13D5BEEBF423} - {00D9021E-A202-4BCB-9A59-13D5BEEBF423} = {7852EDE4-93DF-4DB1-8A86-C521703811AF} - {19663AE5-3EEA-472E-B157-37C2C7C6BACB} = {00D9021E-A202-4BCB-9A59-13D5BEEBF423} - {3B26AB4F-8129-4DAF-8BB0-A6075663F6D2} = {19663AE5-3EEA-472E-B157-37C2C7C6BACB} - {8944D9BF-69ED-4798-B533-559CAB011B07} = {795B7A50-1B1F-406E-94E0-F9B35104EF22} - {06FB18BC-F4DD-4DB9-A566-551254CD1064} = {795B7A50-1B1F-406E-94E0-F9B35104EF22} - {641F00F0-2693-451B-A96A-13E4E115BF0F} = {7852EDE4-93DF-4DB1-8A86-C521703811AF} - {D9A91544-CDF8-4C68-BAD2-47F4968A8652} = {641F00F0-2693-451B-A96A-13E4E115BF0F} - {9E51C821-4095-4250-BD8A-2A29396DB1B4} = {19FAB78C-3351-4911-8F0C-8C6056401740} - {D2D76252-D225-4B79-9DDB-A36867A4720E} = {9E51C821-4095-4250-BD8A-2A29396DB1B4} - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {46465737-C938-44FC-BE1A-4CE139EBB5E0} - EndGlobalSection -EndGlobal diff --git a/diagnostics.slnx b/diagnostics.slnx new file mode 100644 index 0000000000..7ff2a2aee8 --- /dev/null +++ b/diagnostics.slnx @@ -0,0 +1,468 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/diagnostics.yml b/diagnostics.yml index daab98353a..a6c816ae85 100644 --- a/diagnostics.yml +++ b/diagnostics.yml @@ -32,6 +32,12 @@ pr: - LICENSE.TXT variables: +- ${{ if and(notin(variables['Build.Reason'], 'PullRequest'), eq(variables['Build.DefinitionName'], 'dotnet-diagnostics')) }}: + - name: isOfficialBuild + value: true +- ${{ else }}: + - name: isOfficialBuild + value: false - template : /eng/pipelines/global-variables.yml parameters: runtimeFeed: ${{ parameters.runtimeFeed }} @@ -354,3 +360,11 @@ extends: # This sets up the bits to do a Release. - template: /eng/pipelines/prepare-release.yml + parameters: + isOfficialBuild: ${{ variables['isOfficialBuild'] }} + repoAllowList: https://github.com/dotnet/diagnostics https://dev.azure.com/dnceng/internal/_git/dotnet-diagnostics + productAllowList: diagnostics dotnet-diagnostics + ${{ if eq(variables['isOfficialBuild'], 'true') }}: + dependsOn: [ publish_using_darc ] + ${{ else }}: + dependsOn: [ build ] diff --git a/documentation/FAQ.md b/documentation/FAQ.md index be5a0127a0..a8fa6a45cf 100644 --- a/documentation/FAQ.md +++ b/documentation/FAQ.md @@ -96,3 +96,17 @@ Frequently Asked Questions ``` You may need a different bitness of the Windows (windbg/cdb) debugger or dotnet-dump. If you are running an x64 (64 bit), try an x86 (32 bit) version. The easiest way to get an x86 version of dotnet-dump is installing the "single-file" version [here](https://aka.ms/dotnet-dump/win-x86). For more information on single-file tools see [here](https://github.com/dotnet/diagnostics/blob/main/documentation/single-file-tools.md#single-file-diagnostic-tools). + +* If you are using `dotnet-dump analyze` and see an error like: + + ``` + ERROR: No CLR runtime found + ``` + + This can happen if you are analyzing a dump on a different machine or OS than where the dump was created, specially when the dump comes from a .NET runtime provided by a non-Microsoft entity (such as a Linux distribution). + + A workaround is to run `dotnet-dump analyze` in the same environment (machine, container, or OS) where the dump was originally generated. That lets `dotnet-dump` use the DAC module included in the runtime and get going. + + For more details, see the vendor-specific documentation: + + - Red Hat: https://access.redhat.com/solutions/6989907 diff --git a/documentation/design-docs/ipc-protocol.md b/documentation/design-docs/ipc-protocol.md index 7e64348d86..2ee2a3440e 100644 --- a/documentation/design-docs/ipc-protocol.md +++ b/documentation/design-docs/ipc-protocol.md @@ -1080,7 +1080,7 @@ The `extension` field is an optional data blob that can provide additional infor **Details:** - The extension blob may be empty if no extra information is present. - Multiple extension blobs can be concatenated if more than one piece of information is needed. Each blob starts with its own label byte. -- For Event Metadata (`0x01`), the `metadata` array matches the NetTrace v5 PayloadBytes format. +- For Event Metadata (`0x01`), the `metadata` array models after the [NetTrace_v5 Metadata event encoding](https://github.com/microsoft/perfview/blob/main/src/TraceEvent/EventPipe/NetTraceFormat_v5.md#metadata-event-encoding) excluding the MetadataId field. - For ActivityId and RelatedActivityId (`0x02`, `0x03`), the `guid` is a 16-byte value representing the GUID. - The size of the entire extension blob can be inferred from the extension `__rel_loc` field. See the [__rel_loc documentation](https://lwn.net/Articles/876682/) for more details. @@ -1099,13 +1099,13 @@ For example, an extension blob containing both Event Metadata and ActivityId wou The `payload` points at a blob of data with the same format as an EventPipe payload – the concatenated encoded values for all the parameters. -The `metadata` either points at nothing if the event doesn’t have metadata, or it points at a metadata blob matching the NetTrace version 5 formatting convention. Specifically it is the data that would be stored inside the PayloadBytes area of an event blob within a MetadataBlock described [here](https://github.com/microsoft/perfview/blob/main/src/TraceEvent/EventPipe/NetTraceFormat_v5.md#metadata-event-encoding). +The `metadata` either points at nothing if the event doesn’t have metadata, or it points at a metadata blob matching the NetTrace version 5 formatting convention. Specifically it is the data that would be stored inside the PayloadBytes area of an event blob within a MetadataBlock described [here](https://github.com/microsoft/perfview/blob/main/src/TraceEvent/EventPipe/NetTraceFormat_v5.md#metadata-event-encoding) excluding the MetadataId field, which is not applicable to User_events-based events, as metadata will be inlined with the event instance itself. > NOTE: V5 and V6 metadata formats have the same info, but they aren’t formatted identically. Parsing and reserialization is required to convert between the two. ### Which events have metadata? -The runtime will keep track per-session whether it has sent a particular event before. The first time each event is sent during a session, metadata will be included, and otherwise, it will be left empty. As a special case, runtime events currently implemented in native code will never send metadata. +The runtime will keep track per-session whether it has sent a particular event before. The first time each event is sent during a session, metadata will be included. Should multiple threads race to write the same event to the same session, they may all emit metadata. Afterwards, all instances of that event will not emit metadata, and the responsibility is on the reader to cache and link events with their previously sent metadata. As a special case, runtime events currently implemented in native code will never send metadata. ## Dump Commands diff --git a/eng/Version.Details.props b/eng/Version.Details.props new file mode 100644 index 0000000000..0278cb4990 --- /dev/null +++ b/eng/Version.Details.props @@ -0,0 +1,66 @@ + + + + + 4.0.0-beta.25381.2 + 4.0.0-beta.25381.2 + + 2.0.0-beta5.25210.1 + + 1.0.105-preview.225 + + 10.0.0-rtm.25476.104 + 10.0.0-rtm.25476.104 + 5.0.0-2.25476.104 + 5.0.0-2.25476.104 + 5.0.0-2.25476.104 + 10.0.100-rtm.25476.104 + 10.0.0-beta.25476.104 + 10.0.0-beta.25476.104 + 10.0.100-rtm.25476.104 + 10.0.0-rtm.25476.104 + 10.0.0-rtm.25476.104 + 10.0.0-rtm.25476.104 + 10.0.0-rtm.25476.104 + 10.0.0-rtm.25476.104 + 10.0.0-rtm.25476.104 + 10.0.0-rtm.25476.104 + 10.0.0-rtm.25476.104 + + 7.0.0-beta.22316.2 + + + + + $(MicrosoftDiagnosticsRuntimePackageVersion) + $(MicrosoftDiagnosticsRuntimeUtilitiesPackageVersion) + + $(SystemCommandLinePackageVersion) + + $(XamarinAndroidToolsAndroidSdkPackageVersion) + + $(MicrosoftAspNetCoreAppRefPackageVersion) + $(MicrosoftAspNetCoreAppRefInternalPackageVersion) + $(MicrosoftCodeAnalysisPackageVersion) + $(MicrosoftCodeAnalysisAnalyzersPackageVersion) + $(MicrosoftCodeAnalysisCSharpPackageVersion) + $(MicrosoftCodeAnalysisNetAnalyzersPackageVersion) + $(MicrosoftDotNetArcadeSdkPackageVersion) + $(MicrosoftDotNetCodeAnalysisPackageVersion) + $(MicrosoftNETSdkPackageVersion) + $(MicrosoftNETCoreAppRefPackageVersion) + $(MicrosoftNETCorePlatformsPackageVersion) + $(runtimelinuxarm64MicrosoftDotNetCdacTransportPackageVersion) + $(runtimelinuxx64MicrosoftDotNetCdacTransportPackageVersion) + $(runtimeosxarm64MicrosoftDotNetCdacTransportPackageVersion) + $(runtimeosxx64MicrosoftDotNetCdacTransportPackageVersion) + $(runtimewinarm64MicrosoftDotNetCdacTransportPackageVersion) + $(runtimewinx64MicrosoftDotNetCdacTransportPackageVersion) + + $(MicrosoftDotNetRemoteExecutorPackageVersion) + + diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 260c35a22a..694524f573 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,87 +1,106 @@ - + - + https://github.com/microsoft/clrmd - d724947392626b66e39b525998a8817447d50380 + f11663fc2e71ddd0869deb528047f0f476a0e346 - + https://github.com/microsoft/clrmd - d724947392626b66e39b525998a8817447d50380 + f11663fc2e71ddd0869deb528047f0f476a0e346 + + + https://github.com/dotnet/command-line-api + e9b0511d7f1128e2bc3be7a658a2a4ea977e602d + + + https://github.com/dotnet/android + bf304cf475308547a2a1a342bb9f2e6825cc33cd - + https://github.com/dotnet/dotnet - eaa19c281d34580a8168cff9ce1e7337da8bfe4f + e1eaf1bbd9702e9b6ee9b10dbc94105732e07896 - + https://github.com/dotnet/dotnet - eaa19c281d34580a8168cff9ce1e7337da8bfe4f + e1eaf1bbd9702e9b6ee9b10dbc94105732e07896 https://github.com/dotnet/arcade ccfe6da198c5f05534863bbb1bff66e830e0c6ab - + + https://github.com/dotnet/dotnet - eaa19c281d34580a8168cff9ce1e7337da8bfe4f + e1eaf1bbd9702e9b6ee9b10dbc94105732e07896 - + + https://github.com/dotnet/dotnet - eaa19c281d34580a8168cff9ce1e7337da8bfe4f + e1eaf1bbd9702e9b6ee9b10dbc94105732e07896 - + https://github.com/dotnet/dotnet - eaa19c281d34580a8168cff9ce1e7337da8bfe4f + e1eaf1bbd9702e9b6ee9b10dbc94105732e07896 - + + + https://github.com/dotnet/dotnet - eaa19c281d34580a8168cff9ce1e7337da8bfe4f + e1eaf1bbd9702e9b6ee9b10dbc94105732e07896 - + https://github.com/dotnet/dotnet - eaa19c281d34580a8168cff9ce1e7337da8bfe4f + e1eaf1bbd9702e9b6ee9b10dbc94105732e07896 - + https://github.com/dotnet/dotnet - eaa19c281d34580a8168cff9ce1e7337da8bfe4f + e1eaf1bbd9702e9b6ee9b10dbc94105732e07896 - + https://github.com/dotnet/dotnet - eaa19c281d34580a8168cff9ce1e7337da8bfe4f + e1eaf1bbd9702e9b6ee9b10dbc94105732e07896 - + https://github.com/dotnet/dotnet - eaa19c281d34580a8168cff9ce1e7337da8bfe4f + e1eaf1bbd9702e9b6ee9b10dbc94105732e07896 - + https://github.com/dotnet/dotnet - eaa19c281d34580a8168cff9ce1e7337da8bfe4f + e1eaf1bbd9702e9b6ee9b10dbc94105732e07896 - + https://github.com/dotnet/dotnet - eaa19c281d34580a8168cff9ce1e7337da8bfe4f + e1eaf1bbd9702e9b6ee9b10dbc94105732e07896 - + https://github.com/dotnet/dotnet - eaa19c281d34580a8168cff9ce1e7337da8bfe4f + e1eaf1bbd9702e9b6ee9b10dbc94105732e07896 - + + https://github.com/dotnet/dotnet - eaa19c281d34580a8168cff9ce1e7337da8bfe4f + e1eaf1bbd9702e9b6ee9b10dbc94105732e07896 - + https://github.com/dotnet/dotnet - eaa19c281d34580a8168cff9ce1e7337da8bfe4f + e1eaf1bbd9702e9b6ee9b10dbc94105732e07896 - + https://github.com/dotnet/dotnet - eaa19c281d34580a8168cff9ce1e7337da8bfe4f + e1eaf1bbd9702e9b6ee9b10dbc94105732e07896 - + https://github.com/dotnet/dotnet - eaa19c281d34580a8168cff9ce1e7337da8bfe4f + e1eaf1bbd9702e9b6ee9b10dbc94105732e07896 diff --git a/eng/Versions.props b/eng/Versions.props index 8e96ea5ed8..81a563fb7c 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -1,4 +1,5 @@ + https://github.com/dotnet/diagnostics preview @@ -14,49 +15,29 @@ --> true - - - - 10.0.0-preview.7.25351.106 - 10.0.0-preview.7.25351.106 - - 10.0.0-preview.7.25351.106 - 10.0.0-preview.7.25351.106 - - 10.0.100-preview.7.25351.106 - - - 10.0.0-preview.7.25351.106 - 10.0.0-preview.7.25351.106 - 10.0.0-preview.7.25351.106 - 10.0.0-preview.7.25351.106 - 10.0.0-preview.7.25351.106 - 10.0.0-preview.7.25351.106 - false - 1.12.0 - 1.43.0 - 12.22.0 + 1.13.1 + 1.45.0 + 12.23.0 8.0.0 8.0.0 - 6.0.0 - 4.0.0-beta.25359.1 + 9.0.8 17.10.0-beta1.24272.1 3.1.23 - 6.0.0 - 6.0.4 - 6.0.0 + 9.0.8 + 9.0.8 + 9.0.8 + 9.0.8 + 9.0.8 + 9.0.8 5.0.1 - 2.0.0-beta5.25210.1 5.0.0 4.5.1 8.0.1 @@ -66,22 +47,16 @@ 8.0.0 8.0.5 2.0.3 - 10.0.0-beta.25351.106 1.2.0-beta.556 - 7.0.0-beta.22316.2 10.0.26100.1 13.0.1 - 10.0.622304 - 5.0.0-1.25351.106 - 5.0.0-1.25351.106 - 4.11.0-2.24271.11 3.11.0 @@ -94,8 +69,6 @@ 4.4.0 4.8.0 $(MicrosoftCodeAnalysisVersion) - 5.0.0-1.25351.106 - 10.0.0-preview.25351.106 diff --git a/eng/common/SetupNugetSources.ps1 b/eng/common/SetupNugetSources.ps1 index 5db4ad71ee..9445c31432 100644 --- a/eng/common/SetupNugetSources.ps1 +++ b/eng/common/SetupNugetSources.ps1 @@ -10,8 +10,8 @@ # displayName: Setup Private Feeds Credentials # condition: eq(variables['Agent.OS'], 'Windows_NT') # inputs: -# filePath: $(Build.SourcesDirectory)/eng/common/SetupNugetSources.ps1 -# arguments: -ConfigFile $(Build.SourcesDirectory)/NuGet.config -Password $Env:Token +# filePath: $(System.DefaultWorkingDirectory)/eng/common/SetupNugetSources.ps1 +# arguments: -ConfigFile $(System.DefaultWorkingDirectory)/NuGet.config -Password $Env:Token # env: # Token: $(dn-bot-dnceng-artifact-feeds-rw) # @@ -157,7 +157,7 @@ if ($dotnet31Source -ne $null) { AddPackageSource -Sources $sources -SourceName "dotnet3.1-internal-transport" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal-transport/nuget/v2" -Creds $creds -Username $userName -pwd $Password } -$dotnetVersions = @('5','6','7','8','9') +$dotnetVersions = @('5','6','7','8','9','10') foreach ($dotnetVersion in $dotnetVersions) { $feedPrefix = "dotnet" + $dotnetVersion; diff --git a/eng/common/SetupNugetSources.sh b/eng/common/SetupNugetSources.sh index 4604b61b03..ddf4efc81a 100755 --- a/eng/common/SetupNugetSources.sh +++ b/eng/common/SetupNugetSources.sh @@ -11,8 +11,8 @@ # - task: Bash@3 # displayName: Setup Internal Feeds # inputs: -# filePath: $(Build.SourcesDirectory)/eng/common/SetupNugetSources.sh -# arguments: $(Build.SourcesDirectory)/NuGet.config +# filePath: $(System.DefaultWorkingDirectory)/eng/common/SetupNugetSources.sh +# arguments: $(System.DefaultWorkingDirectory)/NuGet.config # condition: ne(variables['Agent.OS'], 'Windows_NT') # - task: NuGetAuthenticate@1 # @@ -99,7 +99,7 @@ if [ "$?" == "0" ]; then PackageSources+=('dotnet3.1-internal-transport') fi -DotNetVersions=('5' '6' '7' '8' '9') +DotNetVersions=('5' '6' '7' '8' '9' '10') for DotNetVersion in ${DotNetVersions[@]} ; do FeedPrefix="dotnet${DotNetVersion}"; diff --git a/eng/common/core-templates/job/job.yml b/eng/common/core-templates/job/job.yml index 6badecba7b..5ce5184061 100644 --- a/eng/common/core-templates/job/job.yml +++ b/eng/common/core-templates/job/job.yml @@ -20,6 +20,7 @@ parameters: artifacts: '' enableMicrobuild: false enableMicrobuildForMacAndLinux: false + microbuildUseESRP: true enablePublishBuildArtifacts: false enablePublishBuildAssets: false enablePublishTestResults: false @@ -128,6 +129,7 @@ jobs: parameters: enableMicrobuild: ${{ parameters.enableMicrobuild }} enableMicrobuildForMacAndLinux: ${{ parameters.enableMicrobuildForMacAndLinux }} + microbuildUseESRP: ${{ parameters.microbuildUseESRP }} continueOnError: ${{ parameters.continueOnError }} - ${{ if and(eq(parameters.runAsPublic, 'false'), eq(variables['System.TeamProject'], 'internal')) }}: @@ -161,7 +163,7 @@ jobs: inputs: testResultsFormat: 'xUnit' testResultsFiles: '*.xml' - searchFolder: '$(Build.SourcesDirectory)/artifacts/TestResults/$(_BuildConfig)' + searchFolder: '$(System.DefaultWorkingDirectory)/artifacts/TestResults/$(_BuildConfig)' testRunTitle: ${{ coalesce(parameters.testRunTitle, parameters.name, '$(System.JobName)') }}-xunit mergeTestResults: ${{ parameters.mergeTestResults }} continueOnError: true @@ -172,7 +174,7 @@ jobs: inputs: testResultsFormat: 'VSTest' testResultsFiles: '*.trx' - searchFolder: '$(Build.SourcesDirectory)/artifacts/TestResults/$(_BuildConfig)' + searchFolder: '$(System.DefaultWorkingDirectory)/artifacts/TestResults/$(_BuildConfig)' testRunTitle: ${{ coalesce(parameters.testRunTitle, parameters.name, '$(System.JobName)') }}-trx mergeTestResults: ${{ parameters.mergeTestResults }} continueOnError: true @@ -216,7 +218,7 @@ jobs: - task: CopyFiles@2 displayName: Gather buildconfiguration for build retry inputs: - SourceFolder: '$(Build.SourcesDirectory)/eng/common/BuildConfiguration' + SourceFolder: '$(System.DefaultWorkingDirectory)/eng/common/BuildConfiguration' Contents: '**' TargetFolder: '$(Build.ArtifactStagingDirectory)/eng/common/BuildConfiguration' continueOnError: true diff --git a/eng/common/core-templates/job/onelocbuild.yml b/eng/common/core-templates/job/onelocbuild.yml index 8034815f42..c5788829a8 100644 --- a/eng/common/core-templates/job/onelocbuild.yml +++ b/eng/common/core-templates/job/onelocbuild.yml @@ -4,11 +4,11 @@ parameters: # Optional: A defined YAML pool - https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema?view=vsts&tabs=schema#pool pool: '' - + CeapexPat: $(dn-bot-ceapex-package-r) # PAT for the loc AzDO instance https://dev.azure.com/ceapex GithubPat: $(BotAccount-dotnet-bot-repo-PAT) - SourcesDirectory: $(Build.SourcesDirectory) + SourcesDirectory: $(System.DefaultWorkingDirectory) CreatePr: true AutoCompletePr: false ReusePr: true @@ -27,7 +27,7 @@ parameters: is1ESPipeline: '' jobs: - job: OneLocBuild${{ parameters.JobNameSuffix }} - + dependsOn: ${{ parameters.dependsOn }} displayName: OneLocBuild${{ parameters.JobNameSuffix }} @@ -68,7 +68,7 @@ jobs: - ${{ if ne(parameters.SkipLocProjectJsonGeneration, 'true') }}: - task: Powershell@2 inputs: - filePath: $(Build.SourcesDirectory)/eng/common/generate-locproject.ps1 + filePath: $(System.DefaultWorkingDirectory)/eng/common/generate-locproject.ps1 arguments: $(_GenerateLocProjectArguments) displayName: Generate LocProject.json condition: ${{ parameters.condition }} @@ -99,22 +99,20 @@ jobs: mirrorBranch: ${{ parameters.MirrorBranch }} condition: ${{ parameters.condition }} - - template: /eng/common/core-templates/steps/publish-build-artifacts.yml - parameters: - is1ESPipeline: ${{ parameters.is1ESPipeline }} - args: - displayName: Publish Localization Files - pathToPublish: '$(Build.ArtifactStagingDirectory)/loc' - publishLocation: Container - artifactName: Loc - condition: ${{ parameters.condition }} + # Copy the locProject.json to the root of the Loc directory, then publish a pipeline artifact + - task: CopyFiles@2 + displayName: Copy LocProject.json + inputs: + SourceFolder: '$(System.DefaultWorkingDirectory)/eng/Localize/' + Contents: 'LocProject.json' + TargetFolder: '$(Build.ArtifactStagingDirectory)/loc' + condition: ${{ parameters.condition }} - - template: /eng/common/core-templates/steps/publish-build-artifacts.yml + - template: /eng/common/core-templates/steps/publish-pipeline-artifacts.yml parameters: is1ESPipeline: ${{ parameters.is1ESPipeline }} args: - displayName: Publish LocProject.json - pathToPublish: '$(Build.SourcesDirectory)/eng/Localize/' - publishLocation: Container - artifactName: Loc + targetPath: '$(Build.ArtifactStagingDirectory)/loc' + artifactName: 'Loc' + displayName: 'Publish Localization Files' condition: ${{ parameters.condition }} diff --git a/eng/common/core-templates/job/publish-build-assets.yml b/eng/common/core-templates/job/publish-build-assets.yml index d5303229c9..37dff559fc 100644 --- a/eng/common/core-templates/job/publish-build-assets.yml +++ b/eng/common/core-templates/job/publish-build-assets.yml @@ -38,6 +38,10 @@ parameters: # Optional: A minimatch pattern for the asset manifests to publish to BAR assetManifestsPattern: '*/manifests/**/*.xml' + repositoryAlias: self + + officialBuildId: '' + jobs: - job: Asset_Registry_Publish @@ -60,6 +64,11 @@ jobs: value: false # unconditional - needed for logs publishing (redactor tool version) - template: /eng/common/core-templates/post-build/common-variables.yml + - name: OfficialBuildId + ${{ if ne(parameters.officialBuildId, '') }}: + value: ${{ parameters.officialBuildId }} + ${{ else }}: + value: $(Build.BuildNumber) pool: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) @@ -78,7 +87,7 @@ jobs: - 'Illegal entry point, is1ESPipeline is not defined. Repository yaml should not directly reference templates in core-templates folder.': error - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - - checkout: self + - checkout: ${{ parameters.repositoryAlias }} fetchDepth: 3 clean: true @@ -117,12 +126,12 @@ jobs: azureSubscription: "Darc: Maestro Production" scriptType: ps scriptLocation: scriptPath - scriptPath: $(Build.SourcesDirectory)/eng/common/sdk-task.ps1 + scriptPath: $(System.DefaultWorkingDirectory)/eng/common/sdk-task.ps1 arguments: -task PublishBuildAssets -restore -msbuildEngine dotnet /p:ManifestsPath='$(Build.StagingDirectory)/AssetManifests' /p:IsAssetlessBuild=${{ parameters.isAssetlessBuild }} /p:MaestroApiEndpoint=https://maestro.dot.net - /p:OfficialBuildId=$(Build.BuildNumber) + /p:OfficialBuildId=$(OfficialBuildId) condition: ${{ parameters.condition }} continueOnError: ${{ parameters.continueOnError }} @@ -137,7 +146,7 @@ jobs: Add-Content -Path $filePath -Value "$(DefaultChannels)" Add-Content -Path $filePath -Value $(IsStableBuild) - $symbolExclusionfile = "$(Build.SourcesDirectory)/eng/SymbolPublishingExclusionsFile.txt" + $symbolExclusionfile = "$(System.DefaultWorkingDirectory)/eng/SymbolPublishingExclusionsFile.txt" if (Test-Path -Path $symbolExclusionfile) { Write-Host "SymbolExclusionFile exists" @@ -177,7 +186,7 @@ jobs: azureSubscription: "Darc: Maestro Production" scriptType: ps scriptLocation: scriptPath - scriptPath: $(Build.SourcesDirectory)/eng/common/post-build/publish-using-darc.ps1 + scriptPath: $(System.DefaultWorkingDirectory)/eng/common/post-build/publish-using-darc.ps1 arguments: > -BuildId $(BARBuildId) -PublishingInfraVersion 3 diff --git a/eng/common/core-templates/jobs/codeql-build.yml b/eng/common/core-templates/jobs/codeql-build.yml index 693b00b370..dbc14ac580 100644 --- a/eng/common/core-templates/jobs/codeql-build.yml +++ b/eng/common/core-templates/jobs/codeql-build.yml @@ -24,7 +24,7 @@ jobs: - name: DefaultGuardianVersion value: 0.109.0 - name: GuardianPackagesConfigFile - value: $(Build.SourcesDirectory)\eng\common\sdl\packages.config + value: $(System.DefaultWorkingDirectory)\eng\common\sdl\packages.config - name: GuardianVersion value: ${{ coalesce(parameters.overrideGuardianVersion, '$(DefaultGuardianVersion)') }} diff --git a/eng/common/core-templates/jobs/jobs.yml b/eng/common/core-templates/jobs/jobs.yml index bf35b78faa..01ada74766 100644 --- a/eng/common/core-templates/jobs/jobs.yml +++ b/eng/common/core-templates/jobs/jobs.yml @@ -43,6 +43,8 @@ parameters: artifacts: {} is1ESPipeline: '' + repositoryAlias: self + officialBuildId: '' # Internal resources (telemetry, microbuild) can only be accessed from non-public projects, # and some (Microbuild) should only be applied to non-PR cases for internal builds. @@ -83,7 +85,6 @@ jobs: - template: /eng/common/core-templates/jobs/source-build.yml parameters: is1ESPipeline: ${{ parameters.is1ESPipeline }} - allCompletedJobId: Source_Build_Complete ${{ each parameter in parameters.sourceBuildParameters }}: ${{ parameter.key }}: ${{ parameter.value }} @@ -108,8 +109,6 @@ jobs: - ${{ if eq(parameters.publishBuildAssetsDependsOn, '') }}: - ${{ each job in parameters.jobs }}: - ${{ job.job }} - - ${{ if eq(parameters.enableSourceBuild, true) }}: - - Source_Build_Complete runAsPublic: ${{ parameters.runAsPublic }} publishAssetsImmediately: ${{ or(parameters.publishAssetsImmediately, parameters.isAssetlessBuild) }} @@ -117,3 +116,5 @@ jobs: enablePublishBuildArtifacts: ${{ parameters.enablePublishBuildArtifacts }} artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} signingValidationAdditionalParameters: ${{ parameters.signingValidationAdditionalParameters }} + repositoryAlias: ${{ parameters.repositoryAlias }} + officialBuildId: ${{ parameters.officialBuildId }} diff --git a/eng/common/core-templates/jobs/source-build.yml b/eng/common/core-templates/jobs/source-build.yml index df24c948ba..d92860cba2 100644 --- a/eng/common/core-templates/jobs/source-build.yml +++ b/eng/common/core-templates/jobs/source-build.yml @@ -2,12 +2,6 @@ parameters: # This template adds arcade-powered source-build to CI. A job is created for each platform, as # well as an optional server job that completes when all platform jobs complete. - # The name of the "join" job for all source-build platforms. If set to empty string, the job is - # not included. Existing repo pipelines can use this job depend on all source-build jobs - # completing without maintaining a separate list of every single job ID: just depend on this one - # server job. By default, not included. Recommended name if used: 'Source_Build_Complete'. - allCompletedJobId: '' - # See /eng/common/core-templates/job/source-build.yml jobNamePrefix: 'Source_Build' @@ -31,16 +25,6 @@ parameters: jobs: -- ${{ if ne(parameters.allCompletedJobId, '') }}: - - job: ${{ parameters.allCompletedJobId }} - displayName: Source-Build Complete - pool: server - dependsOn: - - ${{ each platform in parameters.platforms }}: - - ${{ parameters.jobNamePrefix }}_${{ platform.name }} - - ${{ if eq(length(parameters.platforms), 0) }}: - - ${{ parameters.jobNamePrefix }}_${{ parameters.defaultManagedPlatform.name }} - - ${{ each platform in parameters.platforms }}: - template: /eng/common/core-templates/job/source-build.yml parameters: diff --git a/eng/common/core-templates/post-build/post-build.yml b/eng/common/core-templates/post-build/post-build.yml index a151fd811e..f6f87fe5c6 100644 --- a/eng/common/core-templates/post-build/post-build.yml +++ b/eng/common/core-templates/post-build/post-build.yml @@ -154,7 +154,7 @@ stages: - task: PowerShell@2 displayName: Validate inputs: - filePath: $(Build.SourcesDirectory)/eng/common/post-build/nuget-validation.ps1 + filePath: $(System.DefaultWorkingDirectory)/eng/common/post-build/nuget-validation.ps1 arguments: -PackagesPath $(Build.ArtifactStagingDirectory)/PackageArtifacts/ - job: @@ -208,7 +208,7 @@ stages: filePath: eng\common\sdk-task.ps1 arguments: -task SigningValidation -restore -msbuildEngine vs /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts' - /p:SignCheckExclusionsFile='$(Build.SourcesDirectory)/eng/SignCheckExclusionsFile.txt' + /p:SignCheckExclusionsFile='$(System.DefaultWorkingDirectory)/eng/SignCheckExclusionsFile.txt' ${{ parameters.signingValidationAdditionalParameters }} - template: /eng/common/core-templates/steps/publish-logs.yml @@ -258,7 +258,7 @@ stages: - task: PowerShell@2 displayName: Validate inputs: - filePath: $(Build.SourcesDirectory)/eng/common/post-build/sourcelink-validation.ps1 + filePath: $(System.DefaultWorkingDirectory)/eng/common/post-build/sourcelink-validation.ps1 arguments: -InputPath $(Build.ArtifactStagingDirectory)/BlobArtifacts/ -ExtractPath $(Agent.BuildDirectory)/Extract/ -GHRepoName $(Build.Repository.Name) @@ -313,7 +313,7 @@ stages: azureSubscription: "Darc: Maestro Production" scriptType: ps scriptLocation: scriptPath - scriptPath: $(Build.SourcesDirectory)/eng/common/post-build/publish-using-darc.ps1 + scriptPath: $(System.DefaultWorkingDirectory)/eng/common/post-build/publish-using-darc.ps1 arguments: > -BuildId $(BARBuildId) -PublishingInfraVersion ${{ parameters.publishingInfraVersion }} diff --git a/eng/common/core-templates/post-build/setup-maestro-vars.yml b/eng/common/core-templates/post-build/setup-maestro-vars.yml index f7602980db..a7abd58c4b 100644 --- a/eng/common/core-templates/post-build/setup-maestro-vars.yml +++ b/eng/common/core-templates/post-build/setup-maestro-vars.yml @@ -36,7 +36,7 @@ steps: $AzureDevOpsBuildId = $Env:Build_BuildId } else { - . $(Build.SourcesDirectory)\eng\common\tools.ps1 + . $(System.DefaultWorkingDirectory)\eng\common\tools.ps1 $darc = Get-Darc $buildInfo = & $darc get-build ` --id ${{ parameters.BARBuildId }} ` diff --git a/eng/common/core-templates/steps/enable-internal-sources.yml b/eng/common/core-templates/steps/enable-internal-sources.yml index 64f881bffc..4085512b69 100644 --- a/eng/common/core-templates/steps/enable-internal-sources.yml +++ b/eng/common/core-templates/steps/enable-internal-sources.yml @@ -17,8 +17,8 @@ steps: - task: PowerShell@2 displayName: Setup Internal Feeds inputs: - filePath: $(Build.SourcesDirectory)/eng/common/SetupNugetSources.ps1 - arguments: -ConfigFile $(Build.SourcesDirectory)/NuGet.config -Password $Env:Token + filePath: $(System.DefaultWorkingDirectory)/eng/common/SetupNugetSources.ps1 + arguments: -ConfigFile $(System.DefaultWorkingDirectory)/NuGet.config -Password $Env:Token env: Token: ${{ parameters.legacyCredential }} # If running on dnceng (internal project), just use the default behavior for NuGetAuthenticate. @@ -29,8 +29,8 @@ steps: - task: PowerShell@2 displayName: Setup Internal Feeds inputs: - filePath: $(Build.SourcesDirectory)/eng/common/SetupNugetSources.ps1 - arguments: -ConfigFile $(Build.SourcesDirectory)/NuGet.config + filePath: $(System.DefaultWorkingDirectory)/eng/common/SetupNugetSources.ps1 + arguments: -ConfigFile $(System.DefaultWorkingDirectory)/NuGet.config - ${{ else }}: - template: /eng/common/templates/steps/get-federated-access-token.yml parameters: @@ -39,8 +39,8 @@ steps: - task: PowerShell@2 displayName: Setup Internal Feeds inputs: - filePath: $(Build.SourcesDirectory)/eng/common/SetupNugetSources.ps1 - arguments: -ConfigFile $(Build.SourcesDirectory)/NuGet.config -Password $(dnceng-artifacts-feeds-read-access-token) + filePath: $(System.DefaultWorkingDirectory)/eng/common/SetupNugetSources.ps1 + arguments: -ConfigFile $(System.DefaultWorkingDirectory)/NuGet.config -Password $(dnceng-artifacts-feeds-read-access-token) # This is required in certain scenarios to install the ADO credential provider. # It installed by default in some msbuild invocations (e.g. VS msbuild), but needs to be installed for others # (e.g. dotnet msbuild). diff --git a/eng/common/core-templates/steps/generate-sbom.yml b/eng/common/core-templates/steps/generate-sbom.yml index 44a9636cdf..c05f650279 100644 --- a/eng/common/core-templates/steps/generate-sbom.yml +++ b/eng/common/core-templates/steps/generate-sbom.yml @@ -6,7 +6,7 @@ parameters: PackageVersion: 10.0.0 - BuildDropPath: '$(Build.SourcesDirectory)/artifacts' + BuildDropPath: '$(System.DefaultWorkingDirectory)/artifacts' PackageName: '.NET' ManifestDirPath: $(Build.ArtifactStagingDirectory)/sbom IgnoreDirectories: '' diff --git a/eng/common/core-templates/steps/install-microbuild.yml b/eng/common/core-templates/steps/install-microbuild.yml index f3064a7834..d6b9878f54 100644 --- a/eng/common/core-templates/steps/install-microbuild.yml +++ b/eng/common/core-templates/steps/install-microbuild.yml @@ -4,8 +4,17 @@ parameters: # Enable install tasks for MicroBuild on Mac and Linux # Will be ignored if 'enableMicrobuild' is false or 'Agent.Os' is 'Windows_NT' enableMicrobuildForMacAndLinux: false + # Determines whether the ESRP service connection information should be passed to the signing plugin. + # This overlaps with _SignType to some degree. We only need the service connection for real signing. + # It's important that the service connection not be passed to the MicroBuildSigningPlugin task in this place. + # Doing so will cause the service connection to be authorized for the pipeline, which isn't allowed and won't work for non-prod. + # Unfortunately, _SignType can't be used to exclude the use of the service connection in non-real sign scenarios. The + # variable is not available in template expression. _SignType has a very large proliferation across .NET, so replacing it is tough. + microbuildUseESRP: true # Location of the MicroBuild output folder + # NOTE: There's something that relies on this being in the "default" source directory for tasks such as Signing to work properly. microBuildOutputFolder: '$(Build.SourcesDirectory)' + continueOnError: false steps: @@ -21,34 +30,62 @@ steps: workingDirectory: ${{ parameters.microBuildOutputFolder }} condition: and(succeeded(), ne(variables['Agent.Os'], 'Windows_NT')) + - script: | + REM Check if ESRP is disabled while SignType is real + if /I "${{ parameters.microbuildUseESRP }}"=="false" if /I "$(_SignType)"=="real" ( + echo Error: ESRP must be enabled when SignType is real. + exit /b 1 + ) + displayName: 'Validate ESRP usage (Windows)' + condition: and(succeeded(), eq(variables['Agent.Os'], 'Windows_NT')) + - script: | + # Check if ESRP is disabled while SignType is real + if [ "${{ parameters.microbuildUseESRP }}" = "false" ] && [ "$(_SignType)" = "real" ]; then + echo "Error: ESRP must be enabled when SignType is real." + exit 1 + fi + displayName: 'Validate ESRP usage (Non-Windows)' + condition: and(succeeded(), ne(variables['Agent.Os'], 'Windows_NT')) + + # Two different MB install steps. This is due to not being able to use the agent OS during + # YAML expansion, and Windows vs. Linux/Mac uses different service connections. However, + # we can avoid including the MB install step if not enabled at all. This avoids a bunch of + # extra pipeline authorizations, since most pipelines do not sign on non-Windows. - task: MicroBuildSigningPlugin@4 - displayName: Install MicroBuild plugin + displayName: Install MicroBuild plugin (Windows) inputs: signType: $(_SignType) zipSources: false feedSource: https://dnceng.pkgs.visualstudio.com/_packaging/MicroBuildToolset/nuget/v3/index.json - ${{ if and(eq(parameters.enableMicrobuildForMacAndLinux, 'true'), ne(variables['Agent.Os'], 'Windows_NT')) }}: - azureSubscription: 'MicroBuild Signing Task (DevDiv)' - useEsrpCli: true - ${{ elseif eq(variables['System.TeamProject'], 'DevDiv') }}: - ConnectedPMEServiceName: 6cc74545-d7b9-4050-9dfa-ebefcc8961ea - ${{ else }}: - ConnectedPMEServiceName: 248d384a-b39b-46e3-8ad5-c2c210d5e7ca + ${{ if eq(parameters.microbuildUseESRP, true) }}: + ConnectedServiceName: 'MicroBuild Signing Task (DevDiv)' + ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: + ConnectedPMEServiceName: 6cc74545-d7b9-4050-9dfa-ebefcc8961ea + ${{ else }}: + ConnectedPMEServiceName: 248d384a-b39b-46e3-8ad5-c2c210d5e7ca env: TeamName: $(_TeamName) MicroBuildOutputFolderOverride: ${{ parameters.microBuildOutputFolder }} SYSTEM_ACCESSTOKEN: $(System.AccessToken) continueOnError: ${{ parameters.continueOnError }} - condition: and( - succeeded(), - or( - and( - eq(variables['Agent.Os'], 'Windows_NT'), - in(variables['_SignType'], 'real', 'test') - ), - and( - ${{ eq(parameters.enableMicrobuildForMacAndLinux, true) }}, - ne(variables['Agent.Os'], 'Windows_NT'), - eq(variables['_SignType'], 'real') - ) - )) + condition: and(succeeded(), eq(variables['Agent.Os'], 'Windows_NT'), in(variables['_SignType'], 'real', 'test')) + + - ${{ if eq(parameters.enableMicrobuildForMacAndLinux, true) }}: + - task: MicroBuildSigningPlugin@4 + displayName: Install MicroBuild plugin (non-Windows) + inputs: + signType: $(_SignType) + zipSources: false + feedSource: https://dnceng.pkgs.visualstudio.com/_packaging/MicroBuildToolset/nuget/v3/index.json + ${{ if eq(parameters.microbuildUseESRP, true) }}: + ConnectedServiceName: 'MicroBuild Signing Task (DevDiv)' + ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: + ConnectedPMEServiceName: beb8cb23-b303-4c95-ab26-9e44bc958d39 + ${{ else }}: + ConnectedPMEServiceName: c24de2a5-cc7a-493d-95e4-8e5ff5cad2bc + env: + TeamName: $(_TeamName) + MicroBuildOutputFolderOverride: ${{ parameters.microBuildOutputFolder }} + SYSTEM_ACCESSTOKEN: $(System.AccessToken) + continueOnError: ${{ parameters.continueOnError }} + condition: and(succeeded(), ne(variables['Agent.Os'], 'Windows_NT'), eq(variables['_SignType'], 'real')) diff --git a/eng/common/core-templates/steps/publish-logs.yml b/eng/common/core-templates/steps/publish-logs.yml index de24d0087c..10f825e270 100644 --- a/eng/common/core-templates/steps/publish-logs.yml +++ b/eng/common/core-templates/steps/publish-logs.yml @@ -12,22 +12,22 @@ steps: inputs: targetType: inline script: | - New-Item -ItemType Directory $(Build.SourcesDirectory)/PostBuildLogs/${{parameters.StageLabel}}/${{parameters.JobLabel}}/ - Move-Item -Path $(Build.SourcesDirectory)/artifacts/log/Debug/* $(Build.SourcesDirectory)/PostBuildLogs/${{parameters.StageLabel}}/${{parameters.JobLabel}}/ + New-Item -ItemType Directory $(System.DefaultWorkingDirectory)/PostBuildLogs/${{parameters.StageLabel}}/${{parameters.JobLabel}}/ + Move-Item -Path $(System.DefaultWorkingDirectory)/artifacts/log/Debug/* $(System.DefaultWorkingDirectory)/PostBuildLogs/${{parameters.StageLabel}}/${{parameters.JobLabel}}/ continueOnError: true condition: always() - task: PowerShell@2 displayName: Redact Logs inputs: - filePath: $(Build.SourcesDirectory)/eng/common/post-build/redact-logs.ps1 + filePath: $(System.DefaultWorkingDirectory)/eng/common/post-build/redact-logs.ps1 # For now this needs to have explicit list of all sensitive data. Taken from eng/publishing/v3/publish.yml - # Sensitive data can as well be added to $(Build.SourcesDirectory)/eng/BinlogSecretsRedactionFile.txt' + # Sensitive data can as well be added to $(System.DefaultWorkingDirectory)/eng/BinlogSecretsRedactionFile.txt' # If the file exists - sensitive data for redaction will be sourced from it # (single entry per line, lines starting with '# ' are considered comments and skipped) - arguments: -InputPath '$(Build.SourcesDirectory)/PostBuildLogs' + arguments: -InputPath '$(System.DefaultWorkingDirectory)/PostBuildLogs' -BinlogToolVersion ${{parameters.BinlogToolVersion}} - -TokensFilePath '$(Build.SourcesDirectory)/eng/BinlogSecretsRedactionFile.txt' + -TokensFilePath '$(System.DefaultWorkingDirectory)/eng/BinlogSecretsRedactionFile.txt' '$(publishing-dnceng-devdiv-code-r-build-re)' '$(MaestroAccessToken)' '$(dn-bot-all-orgs-artifact-feeds-rw)' @@ -44,7 +44,7 @@ steps: - task: CopyFiles@2 displayName: Gather post build logs inputs: - SourceFolder: '$(Build.SourcesDirectory)/PostBuildLogs' + SourceFolder: '$(System.DefaultWorkingDirectory)/PostBuildLogs' Contents: '**' TargetFolder: '$(Build.ArtifactStagingDirectory)/PostBuildLogs' condition: always() diff --git a/eng/common/core-templates/steps/source-index-stage1-publish.yml b/eng/common/core-templates/steps/source-index-stage1-publish.yml index c2917c1efc..e9a694afa5 100644 --- a/eng/common/core-templates/steps/source-index-stage1-publish.yml +++ b/eng/common/core-templates/steps/source-index-stage1-publish.yml @@ -1,6 +1,6 @@ parameters: - sourceIndexUploadPackageVersion: 2.0.0-20250425.2 - sourceIndexProcessBinlogPackageVersion: 1.0.1-20250515.1 + sourceIndexUploadPackageVersion: 2.0.0-20250818.1 + sourceIndexProcessBinlogPackageVersion: 1.0.1-20250818.1 sourceIndexPackageSource: https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json binlogPath: artifacts/log/Debug/Build.binlog @@ -20,7 +20,7 @@ steps: # Set working directory to temp directory so 'dotnet' doesn't try to use global.json and use the repo's sdk. workingDirectory: $(Agent.TempDirectory) -- script: $(Agent.TempDirectory)/.source-index/tools/BinLogToSln -i ${{parameters.BinlogPath}} -r $(Build.SourcesDirectory) -n $(Build.Repository.Name) -o .source-index/stage1output +- script: $(Agent.TempDirectory)/.source-index/tools/BinLogToSln -i ${{parameters.BinlogPath}} -r $(System.DefaultWorkingDirectory) -n $(Build.Repository.Name) -o .source-index/stage1output displayName: "Source Index: Process Binlog into indexable sln" - ${{ if and(ne(parameters.runAsPublic, 'true'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: diff --git a/eng/common/generate-locproject.ps1 b/eng/common/generate-locproject.ps1 index 524aaa57f2..fa1cdc2b30 100644 --- a/eng/common/generate-locproject.ps1 +++ b/eng/common/generate-locproject.ps1 @@ -33,15 +33,27 @@ $jsonTemplateFiles | ForEach-Object { $jsonWinformsTemplateFiles = Get-ChildItem -Recurse -Path "$SourcesDirectory" | Where-Object { $_.FullName -Match "en\\strings\.json" } # current winforms pattern +$wxlFilesV3 = @() +$wxlFilesV5 = @() $wxlFiles = Get-ChildItem -Recurse -Path "$SourcesDirectory" | Where-Object { $_.FullName -Match "\\.+\.wxl" -And -Not( $_.Directory.Name -Match "\d{4}" ) } # localized files live in four digit lang ID directories; this excludes them if (-not $wxlFiles) { $wxlEnFiles = Get-ChildItem -Recurse -Path "$SourcesDirectory" | Where-Object { $_.FullName -Match "\\1033\\.+\.wxl" } # pick up en files (1033 = en) specifically so we can copy them to use as the neutral xlf files if ($wxlEnFiles) { - $wxlFiles = @() - $wxlEnFiles | ForEach-Object { - $destinationFile = "$($_.Directory.Parent.FullName)\$($_.Name)" - $wxlFiles += Copy-Item "$($_.FullName)" -Destination $destinationFile -PassThru - } + $wxlFiles = @() + $wxlEnFiles | ForEach-Object { + $destinationFile = "$($_.Directory.Parent.FullName)\$($_.Name)" + $content = Get-Content $_.FullName -Raw + + # Split files on schema to select different parser settings in the generated project. + if ($content -like "*http://wixtoolset.org/schemas/v4/wxl*") + { + $wxlFilesV5 += Copy-Item $_.FullName -Destination $destinationFile -PassThru + } + elseif ($content -like "*http://schemas.microsoft.com/wix/2006/localization*") + { + $wxlFilesV3 += Copy-Item $_.FullName -Destination $destinationFile -PassThru + } + } } } @@ -114,7 +126,32 @@ $locJson = @{ CloneLanguageSet = "WiX_CloneLanguages" LssFiles = @( "wxl_loc.lss" ) LocItems = @( - $wxlFiles | ForEach-Object { + $wxlFilesV3 | ForEach-Object { + $outputPath = "$($_.Directory.FullName | Resolve-Path -Relative)\" + $continue = $true + foreach ($exclusion in $exclusions.Exclusions) { + if ($_.FullName.Contains($exclusion)) { + $continue = $false + } + } + $sourceFile = ($_.FullName | Resolve-Path -Relative) + if ($continue) + { + return @{ + SourceFile = $sourceFile + CopyOption = "LangIDOnPath" + OutputPath = $outputPath + } + } + } + ) + }, + @{ + LanguageSet = $LanguageSet + CloneLanguageSet = "WiX_CloneLanguages" + LssFiles = @( "P210WxlSchemaV4.lss" ) + LocItems = @( + $wxlFilesV5 | ForEach-Object { $outputPath = "$($_.Directory.FullName | Resolve-Path -Relative)\" $continue = $true foreach ($exclusion in $exclusions.Exclusions) { diff --git a/eng/common/sdk-task.ps1 b/eng/common/sdk-task.ps1 index a9d2a2d269..b62e132d32 100644 --- a/eng/common/sdk-task.ps1 +++ b/eng/common/sdk-task.ps1 @@ -7,13 +7,14 @@ Param( [switch] $restore, [switch] $prepareMachine, [switch][Alias('nobl')]$excludeCIBinaryLog, + [switch]$noWarnAsError, [switch] $help, [Parameter(ValueFromRemainingArguments=$true)][String[]]$properties ) $ci = $true $binaryLog = if ($excludeCIBinaryLog) { $false } else { $true } -$warnAsError = $true +$warnAsError = if ($noWarnAsError) { $false } else { $true } . $PSScriptRoot\tools.ps1 diff --git a/eng/common/sdk-task.sh b/eng/common/sdk-task.sh index 2f83adc026..3270f83fa9 100755 --- a/eng/common/sdk-task.sh +++ b/eng/common/sdk-task.sh @@ -10,6 +10,7 @@ show_usage() { echo "Advanced settings:" echo " --excludeCIBinarylog Don't output binary log (short: -nobl)" + echo " --noWarnAsError Do not warn as error" echo "" echo "Command line arguments not listed above are passed thru to msbuild." } @@ -52,6 +53,7 @@ exclude_ci_binary_log=false restore=false help=false properties='' +warnAsError=true while (($# > 0)); do lowerI="$(echo $1 | tr "[:upper:]" "[:lower:]")" @@ -73,6 +75,10 @@ while (($# > 0)); do exclude_ci_binary_log=true shift 1 ;; + --noWarnAsError) + warnAsError=false + shift 1 + ;; --help) help=true shift 1 @@ -85,7 +91,6 @@ while (($# > 0)); do done ci=true -warnAsError=true if $help; then show_usage diff --git a/eng/common/template-guidance.md b/eng/common/template-guidance.md index 98bbc1ded0..4bf4cf41bd 100644 --- a/eng/common/template-guidance.md +++ b/eng/common/template-guidance.md @@ -50,7 +50,7 @@ extends: - task: CopyFiles@2 displayName: Gather build output inputs: - SourceFolder: '$(Build.SourcesDirectory)/artifacts/marvel' + SourceFolder: '$(System.DefaultWorkingDirectory)/artifacts/marvel' Contents: '**' TargetFolder: '$(Build.ArtifactStagingDirectory)/artifacts/marvel' ``` diff --git a/eng/common/templates-official/job/job.yml b/eng/common/templates-official/job/job.yml index a8a9432874..92a0664f56 100644 --- a/eng/common/templates-official/job/job.yml +++ b/eng/common/templates-official/job/job.yml @@ -3,7 +3,7 @@ parameters: enableSbom: true runAsPublic: false PackageVersion: 9.0.0 - BuildDropPath: '$(Build.SourcesDirectory)/artifacts' + BuildDropPath: '$(System.DefaultWorkingDirectory)/artifacts' jobs: - template: /eng/common/core-templates/job/job.yml diff --git a/eng/common/templates-official/variables/sdl-variables.yml b/eng/common/templates-official/variables/sdl-variables.yml index dbdd66d4a4..f1311bbb1b 100644 --- a/eng/common/templates-official/variables/sdl-variables.yml +++ b/eng/common/templates-official/variables/sdl-variables.yml @@ -4,4 +4,4 @@ variables: - name: DefaultGuardianVersion value: 0.109.0 - name: GuardianPackagesConfigFile - value: $(Build.SourcesDirectory)\eng\common\sdl\packages.config \ No newline at end of file + value: $(System.DefaultWorkingDirectory)\eng\common\sdl\packages.config \ No newline at end of file diff --git a/eng/common/templates/job/job.yml b/eng/common/templates/job/job.yml index 7cbf668c22..238fa0818f 100644 --- a/eng/common/templates/job/job.yml +++ b/eng/common/templates/job/job.yml @@ -6,7 +6,7 @@ parameters: enableSbom: true runAsPublic: false PackageVersion: 9.0.0 - BuildDropPath: '$(Build.SourcesDirectory)/artifacts' + BuildDropPath: '$(System.DefaultWorkingDirectory)/artifacts' jobs: - template: /eng/common/core-templates/job/job.yml @@ -77,7 +77,7 @@ jobs: parameters: is1ESPipeline: false args: - targetPath: '$(Build.SourcesDirectory)\eng\common\BuildConfiguration' + targetPath: '$(System.DefaultWorkingDirectory)\eng\common\BuildConfiguration' artifactName: 'BuildConfiguration' displayName: 'Publish build retry configuration' continueOnError: true diff --git a/eng/common/tools.ps1 b/eng/common/tools.ps1 index 40f0aa8612..06b44de787 100644 --- a/eng/common/tools.ps1 +++ b/eng/common/tools.ps1 @@ -257,7 +257,20 @@ function Retry($downloadBlock, $maxRetries = 5) { function GetDotNetInstallScript([string] $dotnetRoot) { $installScript = Join-Path $dotnetRoot 'dotnet-install.ps1' + $shouldDownload = $false + if (!(Test-Path $installScript)) { + $shouldDownload = $true + } else { + # Check if the script is older than 30 days + $fileAge = (Get-Date) - (Get-Item $installScript).LastWriteTime + if ($fileAge.Days -gt 30) { + Write-Host "Existing install script is too old, re-downloading..." + $shouldDownload = $true + } + } + + if ($shouldDownload) { Create-Directory $dotnetRoot $ProgressPreference = 'SilentlyContinue' # Don't display the console progress UI - it's a huge perf hit $uri = "https://builds.dotnet.microsoft.com/dotnet/scripts/$dotnetInstallScriptVersion/dotnet-install.ps1" @@ -414,7 +427,7 @@ function InitializeVisualStudioMSBuild([bool]$install, [object]$vsRequirements = # Locate Visual Studio installation or download x-copy msbuild. $vsInfo = LocateVisualStudio $vsRequirements - if ($vsInfo -ne $null) { + if ($vsInfo -ne $null -and $env:ForceUseXCopyMSBuild -eq $null) { # Ensure vsInstallDir has a trailing slash $vsInstallDir = Join-Path $vsInfo.installationPath "\" $vsMajorVersion = $vsInfo.installationVersion.Split('.')[0] @@ -531,7 +544,8 @@ function LocateVisualStudio([object]$vsRequirements = $null){ if (Get-Member -InputObject $GlobalJson.tools -Name 'vswhere') { $vswhereVersion = $GlobalJson.tools.vswhere } else { - $vswhereVersion = '2.5.2' + # keep this in sync with the VSWhereVersion in DefaultVersions.props + $vswhereVersion = '3.1.7' } $vsWhereDir = Join-Path $ToolsDir "vswhere\$vswhereVersion" @@ -539,7 +553,8 @@ function LocateVisualStudio([object]$vsRequirements = $null){ if (!(Test-Path $vsWhereExe)) { Create-Directory $vsWhereDir - Write-Host 'Downloading vswhere' + Write-Host "Downloading vswhere $vswhereVersion" + $ProgressPreference = 'SilentlyContinue' # Don't display the console progress UI - it's a huge perf hit Retry({ Invoke-WebRequest "https://netcorenativeassets.blob.core.windows.net/resource-packages/external/windows/vswhere/$vswhereVersion/vswhere.exe" -OutFile $vswhereExe }) diff --git a/eng/common/tools.sh b/eng/common/tools.sh index 3def02a638..c1841c9dfd 100755 --- a/eng/common/tools.sh +++ b/eng/common/tools.sh @@ -300,8 +300,29 @@ function GetDotNetInstallScript { local root=$1 local install_script="$root/dotnet-install.sh" local install_script_url="https://builds.dotnet.microsoft.com/dotnet/scripts/$dotnetInstallScriptVersion/dotnet-install.sh" + local timestamp_file="$root/.dotnet-install.timestamp" + local should_download=false if [[ ! -a "$install_script" ]]; then + should_download=true + elif [[ -f "$timestamp_file" ]]; then + # Check if the script is older than 30 days using timestamp file + local download_time=$(cat "$timestamp_file" 2>/dev/null || echo "0") + local current_time=$(date +%s) + local age_seconds=$((current_time - download_time)) + + # 30 days = 30 * 24 * 60 * 60 = 2592000 seconds + if [[ $age_seconds -gt 2592000 ]]; then + echo "Existing install script is too old, re-downloading..." + should_download=true + fi + else + # No timestamp file exists, assume script is old and re-download + echo "No timestamp found for existing install script, re-downloading..." + should_download=true + fi + + if [[ "$should_download" == true ]]; then mkdir -p "$root" echo "Downloading '$install_script_url'" @@ -328,6 +349,9 @@ function GetDotNetInstallScript { ExitWithExitCode $exit_code } fi + + # Create timestamp file to track download time in seconds from epoch + date +%s > "$timestamp_file" fi # return value _GetDotNetInstallScript="$install_script" diff --git a/eng/pipelines/global-variables.yml b/eng/pipelines/global-variables.yml index 83c51fa583..92a3439d9f 100644 --- a/eng/pipelines/global-variables.yml +++ b/eng/pipelines/global-variables.yml @@ -1,7 +1,6 @@ parameters: runtimeFeed: default runtimeFeedToken: default - isCodeQLRun: false variables: - name: _TeamName @@ -17,26 +16,15 @@ variables: - name: BuildPool value: $(DncEngInternalBuildPool) - name: WindowsImage - value: 1es-windows-2022 + value: windows.vs2022.amd64 - name: LinuxImage - value: 1es-ubuntu-2204 + value: Build.Ubuntu.2204.Amd64 - name: macOSImage value: macOS-latest - name: sourceBuildTemplate value: /eng/common/templates-official/job/source-build.yml@self - name: jobTemplate value: /eng/common/templates-official/job/job.yml@self - - ${{ if eq(parameters.isCodeQLRun, 'true') }}: - - name: Codeql.Enabled - value: True - - name: Codeql.Cadence - value: 0 - - name: Codeql.TSAEnabled - value: True - - name: Codeql.BuildIdentifier - value: $(System.JobDisplayName) - - name: Codeql.Language - value: csharp,cpp - ${{ if notin(variables['Build.Reason'], 'PullRequest') }}: - name: _SignType value: real @@ -69,4 +57,3 @@ variables: - ${{ if eq(parameters.runtimeFeedToken, 'dotnetclimsrc-sas-token-base64') }}: - name: RuntimeFeedBase64SasToken value: $(dotnetclimsrc-read-sas-token-base64) - diff --git a/eng/pipelines/prepare-release.yml b/eng/pipelines/prepare-release.yml index 2bfbd57b3b..e5f2ce1194 100644 --- a/eng/pipelines/prepare-release.yml +++ b/eng/pipelines/prepare-release.yml @@ -1,6 +1,21 @@ +parameters: +- name: isOfficialBuild + type: boolean + default: false +- name: repoAllowList + type: string + default: '' +- name: productAllowList + type: string + default: '' +- name: dependsOn + type: object + default: [ publish_using_darc ] + stages: - stage: PrepareReleaseStage displayName: Release Preparation + dependsOn: ${{ parameters.dependsOn }} jobs: - job: PrepareReleaseJob displayName: Prepare Release @@ -8,7 +23,7 @@ stages: name: $(BuildPool) demands: ImageOverride -equals $(WindowsImage) os: windows - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest'), or(startsWith(variables['Build.SourceBranch'], 'refs/heads/release/'), startsWith(variables['Build.SourceBranch'], 'refs/heads/internal/release/'))) }}: + ${{ if and(eq(parameters.isOfficialBuild, true), or(startsWith(variables['Build.SourceBranch'], 'refs/heads/release/'), startsWith(variables['Build.SourceBranch'], 'refs/heads/internal/release/'))) }}: templateContext: outputs: - output: pipelineArtifact @@ -17,25 +32,24 @@ stages: displayName: 'Publish Release Drop' condition: succeeded() variables: - - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest'), or(startsWith(variables['Build.SourceBranch'], 'refs/heads/release/'), startsWith(variables['Build.SourceBranch'], 'refs/heads/internal/release/'))) }}: + - ${{ if and(eq(parameters.isOfficialBuild, true), or(startsWith(variables['Build.SourceBranch'], 'refs/heads/release/'), startsWith(variables['Build.SourceBranch'], 'refs/heads/internal/release/'))) }}: + - group: DotNet-Diagnostics-Storage - group: Release-Pipeline steps: - - ${{ if or(in(variables['Build.Reason'], 'PullRequest'), eq(variables['Build.SourceBranch'], 'refs/heads/main')) }}: + - ${{ if or(eq(parameters.isOfficialBuild, false), eq(variables['Build.SourceBranch'], 'refs/heads/main')) }}: - script: '$(Build.Repository.LocalPath)\dotnet.cmd build $(Build.Repository.LocalPath)\eng\release\DiagnosticsReleaseTool\DiagnosticsReleaseTool.csproj -c Release /bl' workingDirectory: '$(System.ArtifactsDirectory)' displayName: 'Build Manifest generation and asset publishing tool' - - ${{ elseif and(ne(variables['System.TeamProject'], 'public'), or(startsWith(variables['Build.SourceBranch'], 'refs/heads/release/'), startsWith(variables['Build.SourceBranch'], 'refs/heads/internal/release/'))) }}: + - ${{ elseif and(eq(parameters.isOfficialBuild, true), or(startsWith(variables['Build.SourceBranch'], 'refs/heads/release/'), startsWith(variables['Build.SourceBranch'], 'refs/heads/internal/release/'))) }}: - task: UseDotNet@2 displayName: 'Use .NET Core runtime 8.x' inputs: packageType: runtime version: 8.x installationPath: '$(Build.Repository.LocalPath)\.dotnet' - - template: /eng/common/templates/post-build/setup-maestro-vars.yml - + - template: /eng/common/templates/post-build/setup-maestro-vars.yml@self - task: NuGetAuthenticate@1 - - task: AzureCLI@2 displayName: 'DARC Gather build' inputs: @@ -44,7 +58,7 @@ stages: scriptPath: '$(Build.Repository.LocalPath)/eng/release/Scripts/AcquireBuild.ps1' arguments: >- -BarBuildId "$(BARBuildId)" - -ReleaseVersion "$(Build.BuildNumber)" + -ReleaseVersion "$(Build.Repository.Name)_$(Build.BuildNumber)" -DownloadTargetPath "$(System.ArtifactsDirectory)\ReleaseTarget" -AzdoToken "$(dn-bot-all-drop-rw-code-rw-release-all)" workingDirectory: '$(Build.Repository.LocalPath)' @@ -64,7 +78,9 @@ stages: --input-drop-path "$(System.ArtifactsDirectory)\ReleaseTarget" ` --tool-manifest "$(Build.Repository.LocalPath)\eng\release\tool-list.json" ` --staging-directory "$(System.ArtifactsDirectory)\ReleaseStaging" ` - --release-name "$(Build.BuildNumber)" ` + --release-name "$(Build.Repository.Name)_$(Build.BuildNumber)" ` + --product-allow-list ${{ parameters.productAllowList }} ` + --repo-allow-list ${{ parameters.repoAllowList }} ` --account-name "$(dotnet-diagnostics-storage-accountname)" ` --client-id "$env:servicePrincipalId" ` --container-name "$(dotnet-diagnostics-container-name)" ` diff --git a/eng/release/DiagnosticsReleaseTool/Config.cs b/eng/release/DiagnosticsReleaseTool/Config.cs index bb225340e4..22e791e190 100644 --- a/eng/release/DiagnosticsReleaseTool/Config.cs +++ b/eng/release/DiagnosticsReleaseTool/Config.cs @@ -15,6 +15,8 @@ internal sealed class Config public string AccountName { get; } public string ClientId { get; } public string ContainerName { get; } + public string[] ReleaseProductAllowList { get; } + public string[] ReleaseRepoAllowList { get; } public Config( FileInfo toolManifest, @@ -22,6 +24,8 @@ public Config( DirectoryInfo inputDropPath, DirectoryInfo stagingDirectory, string releaseName, + string[] releaseProductAllowList, + string[] releaseRepoAllowList, string accountName, string clientId, string containerName) @@ -34,6 +38,8 @@ public Config( AccountName = accountName; ClientId = clientId; ContainerName = containerName; + ReleaseProductAllowList = releaseProductAllowList; + ReleaseRepoAllowList = releaseRepoAllowList; } } } diff --git a/eng/release/DiagnosticsReleaseTool/Core/Release.cs b/eng/release/DiagnosticsReleaseTool/Core/Release.cs index ace860fab8..94663fd118 100644 --- a/eng/release/DiagnosticsReleaseTool/Core/Release.cs +++ b/eng/release/DiagnosticsReleaseTool/Core/Release.cs @@ -188,7 +188,7 @@ private async Task LayoutFilesAsync(CancellationToken ct) using IDisposable scope = _logger.BeginScope("Laying out files"); - _logger.LogInformation("Laying out files from {_productBuildPath}", _productBuildPath.Name); + _logger.LogInformation("Laying out files from {_productBuildPath}", _productBuildPath.FullName); // TODO: Make this parallel using Task.Run + semaphore to batch process files. Need to make collections concurrent or have single // queue to aggregate results. diff --git a/eng/release/DiagnosticsReleaseTool/DarcHelpers.cs b/eng/release/DiagnosticsReleaseTool/DarcHelpers.cs index eb1068a884..7fd8d54e23 100644 --- a/eng/release/DiagnosticsReleaseTool/DarcHelpers.cs +++ b/eng/release/DiagnosticsReleaseTool/DarcHelpers.cs @@ -58,7 +58,7 @@ internal ReleaseMetadata GetDropMetadataForSingleRepoVariants(IEnumerable ReleaseProductAllowListOption = + new("--product-allow-list") + { + AllowMultipleArgumentsPerToken = true, + Description = "List of allowed product names for this release.", + Required = true + }; + + private static Option ReleaseRepoAllowListOption = + new("--repo-allow-list") + { + AllowMultipleArgumentsPerToken = true, + Description = "List of allowed repository urls for this release.", + Required = true + }; private static readonly Option StagingPathOption = InitStagingPath(); diff --git a/eng/release/DiagnosticsReleaseTool/DiagnosticsReleaseRunner.cs b/eng/release/DiagnosticsReleaseTool/DiagnosticsReleaseRunner.cs index e83032b222..6f26284b71 100644 --- a/eng/release/DiagnosticsReleaseTool/DiagnosticsReleaseRunner.cs +++ b/eng/release/DiagnosticsReleaseTool/DiagnosticsReleaseRunner.cs @@ -47,8 +47,8 @@ internal static async Task PrepareRelease(Config releaseConfig, bool verbos } // TODO: Probably should use BAR ID instead as an identifier for the metadata to gather. - ReleaseMetadata releaseMetadata = darcLayoutHelper.GetDropMetadataForSingleRepoVariants(DiagnosticsRepoHelpers.RepositoryUrls); - DirectoryInfo basePublishDirectory = darcLayoutHelper.GetShippingDirectoryForSingleProjectVariants(DiagnosticsRepoHelpers.ProductNames); + ReleaseMetadata releaseMetadata = darcLayoutHelper.GetDropMetadataForSingleRepoVariants(releaseConfig.ReleaseRepoAllowList); + DirectoryInfo basePublishDirectory = darcLayoutHelper.GetShippingDirectoryForSingleProjectVariants(releaseConfig.ReleaseProductAllowList); string publishManifestPath = Path.Combine(releaseConfig.StagingDirectory.FullName, ManifestName); IPublisher releasePublisher = new AzureBlobBublisher(releaseConfig.AccountName, releaseConfig.ClientId, releaseConfig.ContainerName, releaseConfig.ReleaseName, logger); diff --git a/eng/release/DiagnosticsReleaseTool/DiagnosticsReleaseTool.csproj b/eng/release/DiagnosticsReleaseTool/DiagnosticsReleaseTool.csproj index d772108f05..4b4ebc75fd 100644 --- a/eng/release/DiagnosticsReleaseTool/DiagnosticsReleaseTool.csproj +++ b/eng/release/DiagnosticsReleaseTool/DiagnosticsReleaseTool.csproj @@ -1,6 +1,4 @@ - - Exe $(NetCoreAppMinTargetFramework) @@ -14,12 +12,12 @@ - - - - - - + + + + + + diff --git a/eng/release/DiagnosticsReleaseTool/DiagnosticsReleaseTool.sln b/eng/release/DiagnosticsReleaseTool/DiagnosticsReleaseTool.sln deleted file mode 100644 index 7b9295680f..0000000000 --- a/eng/release/DiagnosticsReleaseTool/DiagnosticsReleaseTool.sln +++ /dev/null @@ -1,24 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.5.2.0 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DiagnosticsReleaseTool", "DiagnosticsReleaseTool.csproj", "{67E77FB6-7C08-5D47-087C-10848A96123B}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {67E77FB6-7C08-5D47-087C-10848A96123B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {67E77FB6-7C08-5D47-087C-10848A96123B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {67E77FB6-7C08-5D47-087C-10848A96123B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {67E77FB6-7C08-5D47-087C-10848A96123B}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {A8543907-B0C4-4BBA-9F92-CE3D3FDA2F8D} - EndGlobalSection -EndGlobal diff --git a/eng/release/DiagnosticsReleaseTool/DiagnosticsReleaseTool.slnx b/eng/release/DiagnosticsReleaseTool/DiagnosticsReleaseTool.slnx new file mode 100644 index 0000000000..adbd801aa6 --- /dev/null +++ b/eng/release/DiagnosticsReleaseTool/DiagnosticsReleaseTool.slnx @@ -0,0 +1,3 @@ + + + diff --git a/eng/release/DiagnosticsReleaseTool/DiagnosticsRepoHelpers.cs b/eng/release/DiagnosticsReleaseTool/DiagnosticsRepoHelpers.cs index 81904f7aed..9541b4e73d 100644 --- a/eng/release/DiagnosticsReleaseTool/DiagnosticsRepoHelpers.cs +++ b/eng/release/DiagnosticsReleaseTool/DiagnosticsRepoHelpers.cs @@ -10,9 +10,8 @@ namespace DiagnosticsReleaseTool.Util { public static partial class DiagnosticsRepoHelpers { - public static readonly string[] ProductNames = ["diagnostics", "dotnet-diagnostics"]; - public static readonly string[] RepositoryUrls = ["https://github.com/dotnet/diagnostics", "https://dev.azure.com/dnceng/internal/_git/dotnet-diagnostics"]; - public static string BundleToolsPathInDrop => System.IO.Path.Combine("diagnostics", "bundledtools"); + public static readonly string PublicBundleToolsPathInDrop = System.IO.Path.Combine("diagnostics", "bundledtools"); + public static readonly string InternalBundleToolsPathInDrop = System.IO.Path.Combine("diagnostics-internal", "bundledtools"); public const string BundledToolsPrefix = "diagnostic-tools-"; public const string BundledToolsCategory = "ToolBundleAssets"; public const string PdbCategory = "PdbAssets"; @@ -68,7 +67,7 @@ public static string GetToolPublishRelativePath(FileInfo zipFile, FileInfo fileI public static bool IsBundledToolArchive(FileInfo file) { return file.Exists && file.Extension == ".zip" - && file.DirectoryName.Contains(BundleToolsPathInDrop) + && (file.DirectoryName.Contains(InternalBundleToolsPathInDrop) || file.DirectoryName.Contains(PublicBundleToolsPathInDrop)) && file.Name.StartsWith(BundledToolsPrefix); } diff --git a/es-metadata.yml b/es-metadata.yml new file mode 100644 index 0000000000..935623bbea --- /dev/null +++ b/es-metadata.yml @@ -0,0 +1,8 @@ +schemaVersion: 0.0.1 +isProduction: true +accountableOwners: + service: 1dc8dedc-8f5f-4b94-b182-ec3bdfb207b0 +routing: + defaultAreaPath: + org: devdiv + path: DevDiv\NET Runtime\Diagnostics\SDL diff --git a/global.json b/global.json index 9c3adfeb03..8662fee20c 100644 --- a/global.json +++ b/global.json @@ -1,11 +1,11 @@ { "sdk": { - "version": "10.0.100-preview.6.25315.102", + "version": "10.0.100-rc.1.25451.107", "allowPrerelease": true, "rollForward": "major" }, "tools": { - "dotnet": "10.0.100-preview.6.25315.102", + "dotnet": "10.0.100-rc.1.25451.107", "runtimes": { "dotnet": [ "$(MicrosoftNETCoreApp80Version)" @@ -17,6 +17,6 @@ }, "msbuild-sdks": { "Microsoft.Build.NoTargets": "3.5.0", - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.25351.106" + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.25476.104" } } diff --git a/src/Microsoft.Diagnostics.DebugServices.Implementation/CrashInfoService.cs b/src/Microsoft.Diagnostics.DebugServices.Implementation/CrashInfoService.cs index cee810569c..acc0c35369 100644 --- a/src/Microsoft.Diagnostics.DebugServices.Implementation/CrashInfoService.cs +++ b/src/Microsoft.Diagnostics.DebugServices.Implementation/CrashInfoService.cs @@ -5,6 +5,7 @@ using System.Collections.Generic; using System.Diagnostics; using System.IO; +using System.Runtime.InteropServices; using System.Linq; using System.Text; using System.Text.Json; @@ -12,6 +13,194 @@ namespace Microsoft.Diagnostics.DebugServices.Implementation { + public sealed class CrashInfoModuleService : ICrashInfoModuleService + { + private readonly IServiceProvider Services; + + public CrashInfoModuleService(IServiceProvider services) + { + Services = services ?? throw new ArgumentNullException(nameof(services)); + } + public ICrashInfoService Create(ModuleEnumerationScheme moduleEnumerationScheme) + { + return CreateCrashInfoServiceFromModule(Services, moduleEnumerationScheme); + } + + private static bool CreateCrashInfoServiceForModule(IModule module, out ICrashInfoService crashInfoService) + { + crashInfoService = null; + if (module == null || module.IsManaged) + { + return false; + } + if ((module as IExportSymbols)?.TryGetSymbolAddress(CrashInfoService.DOTNET_RUNTIME_DEBUG_HEADER_NAME, out ulong headerAddr) != true) + { + Trace.TraceInformation($"CrashInfoService: {CrashInfoService.DOTNET_RUNTIME_DEBUG_HEADER_NAME} export not found in module {module.FileName}"); + return false; + } + IMemoryService memoryService = module.Services.GetService(); + if (!memoryService.Read(ref headerAddr, out uint headerValue) || + headerValue != CrashInfoService.DOTNET_RUNTIME_DEBUG_HEADER_COOKIE || + !memoryService.Read(ref headerAddr, out ushort majorVersion) || majorVersion < 3 || // .NET 8 and later + !memoryService.Read(ref headerAddr, out ushort minorVersion)) + { + Trace.TraceInformation($"CrashInfoService: .NET 8+ {CrashInfoService.DOTNET_RUNTIME_DEBUG_HEADER_NAME} not found in module {module.FileName}"); + return false; + } + + Trace.TraceInformation($"CrashInfoService: Found {CrashInfoService.DOTNET_RUNTIME_DEBUG_HEADER_NAME} in module {module.FileName} with version {majorVersion}.{minorVersion}"); + + if (!memoryService.Read(ref headerAddr, out uint flags) || + memoryService.PointerSize != (flags == 0x1 ? 8 : 4) || + !memoryService.Read(ref headerAddr, out uint _)) // padding + { + Trace.TraceError($"CrashInfoService: Failed to read DotNetRuntimeDebugHeader flags or padding in module {module.FileName}"); + return false; + } + + Trace.TraceInformation($"CrashInfoService: Target is {memoryService.PointerSize * 8}-bit"); + + headerAddr += (uint)memoryService.PointerSize; // skip DebugEntries array + + // read GlobalEntries array + if (!memoryService.ReadPointer(ref headerAddr, out ulong globalEntryArrayAddress) || globalEntryArrayAddress == 0) + { + Trace.TraceError($"CrashInfoService: Unable to read GlobalEntry array"); + return false; + } + uint maxGlobalEntries = (majorVersion >= 4 /*.NET 9 or later*/) ? CrashInfoService.MAX_GLOBAL_ENTRIES_ARRAY_SIZE_NET9_PLUS : CrashInfoService.MAX_GLOBAL_ENTRIES_ARRAY_SIZE_NET8; + for (int i = 0; i < maxGlobalEntries; i++) + { + if (!memoryService.ReadPointer(ref globalEntryArrayAddress, out ulong globalNameAddress) || globalNameAddress == 0 || + !memoryService.ReadPointer(ref globalEntryArrayAddress, out ulong globalValueAddress) || globalValueAddress == 0 || + !memoryService.ReadAnsiString(CrashInfoService.MAX_GLOBAL_ENTRY_NAME_CHARS, globalNameAddress, out string globalName)) + { + break; // no more global entries + } + + if (!string.Equals(globalName, "g_CrashInfoBuffer", StringComparison.Ordinal)) + { + continue; // not the crash info buffer + } + + ulong triageBufferAddress = globalValueAddress; + Span buffer = new byte[CrashInfoService.MAX_CRASHINFOBUFFER_SIZE]; + if (memoryService.ReadMemory(triageBufferAddress, buffer, out int bytesRead) && bytesRead > 0 && bytesRead <= CrashInfoService.MAX_CRASHINFOBUFFER_SIZE) + { + // truncate the buffer to the null terminated string in the buffer + int nullTerminatorIndex = buffer.IndexOf((byte)0); + if (nullTerminatorIndex >= 0) + { + buffer = buffer.Slice(0, nullTerminatorIndex); + Trace.TraceInformation($"CrashInfoService: Found g_CrashInfoBuffer in module {module.FileName} with size {buffer.Length} bytes"); + if (buffer.Length > 0) + { + crashInfoService = CrashInfoService.Create(0, buffer, module.Services.GetService()); + return true; + } + else + { + Trace.TraceError($"CrashInfoService: g_CrashInfoBuffer is empty in module {module.FileName}"); + } + } + else + { + Trace.TraceError($"CrashInfoService: g_CrashInfoBuffer is not null terminated in module {module.FileName}"); + } + } + else + { + Trace.TraceError($"CrashInfoService: ReadMemory({triageBufferAddress}) failed in module {module.FileName}"); + } + break; + } + return false; + } + + private static unsafe ICrashInfoService CreateCrashInfoServiceFromModule(IServiceProvider services, ModuleEnumerationScheme moduleEnumerationScheme) + { + if (moduleEnumerationScheme == ModuleEnumerationScheme.None) + { + return null; + } + + if (moduleEnumerationScheme == ModuleEnumerationScheme.EntryPointModule || + moduleEnumerationScheme == ModuleEnumerationScheme.EntryPointAndEntryPointDllModule) + { + // if the above did not locate the crash info service, then look for the DotNetRuntimeDebugHeader + IModule entryPointModule = services.GetService().EntryPointModule; + if (entryPointModule == null) + { + Trace.TraceError("CrashInfoService: No entry point module found"); + return null; + } + if (CreateCrashInfoServiceForModule(entryPointModule, out ICrashInfoService crashInfoService)) + { + return crashInfoService; + } + if (moduleEnumerationScheme == ModuleEnumerationScheme.EntryPointAndEntryPointDllModule) + { + // if the entry point module did not have the crash info service, then look for a library with the same name as the entry point + string fileName = entryPointModule.FileName; + OSPlatform osPlatform = entryPointModule.Target.OperatingSystem; + if (fileName == null) + { + Trace.TraceError("CrashInfoService: Entry point module has no file name"); + return null; + } + if (osPlatform == OSPlatform.Windows) + { + if (fileName.EndsWith(".exe", StringComparison.OrdinalIgnoreCase)) + { + fileName = fileName.Substring(0, fileName.Length - 4) + ".dll"; // look for a dll with the same name + } + else + { + Trace.TraceError($"CrashInfoService: Unexpected entry point module file name {fileName}"); + } + } + else if (osPlatform == OSPlatform.Linux) + { + fileName += ".so"; // look for a .so with the same name + } + else if (osPlatform == OSPlatform.OSX) + { + fileName += ".dylib"; // look for a .dylib with the same name + } + else + { + Trace.TraceError($"CrashInfoService: Unsupported operating system {osPlatform}"); + return null; + } + foreach (IModule speculativeAppModule in services.GetService().GetModuleFromModuleName(fileName)) + { + if (CreateCrashInfoServiceForModule(speculativeAppModule, out crashInfoService)) + { + return crashInfoService; + } + } + } + } + else if (moduleEnumerationScheme == ModuleEnumerationScheme.All) + { + // enumerate all modules and look for the crash info service + foreach (IModule module in services.GetService().EnumerateModules()) + { + if (CreateCrashInfoServiceForModule(module, out ICrashInfoService crashInfoService)) + { + return crashInfoService; + } + } + } + else + { + Trace.TraceError($"CrashInfoService: Unknown module enumeration scheme {moduleEnumerationScheme}"); + } + + return null; + } + } + public class CrashInfoService : ICrashInfoService { /// @@ -24,6 +213,13 @@ public class CrashInfoService : ICrashInfoService /// public const uint FAST_FAIL_EXCEPTION_DOTNET_AOT = 0x48; + public const uint MAX_CRASHINFOBUFFER_SIZE = 8192; + public const uint MAX_GLOBAL_ENTRIES_ARRAY_SIZE_NET8 = 6; + public const uint MAX_GLOBAL_ENTRIES_ARRAY_SIZE_NET9_PLUS = 8; + public const uint MAX_GLOBAL_ENTRY_NAME_CHARS = 32; + public const uint DOTNET_RUNTIME_DEBUG_HEADER_COOKIE = 0x48444e44; // 'DNDH' + public const string DOTNET_RUNTIME_DEBUG_HEADER_NAME = "DotNetRuntimeDebugHeader"; + private sealed class CrashInfoJson { [JsonPropertyName("version")] diff --git a/src/Microsoft.Diagnostics.DebugServices.Implementation/ModuleService.cs b/src/Microsoft.Diagnostics.DebugServices.Implementation/ModuleService.cs index 75f9a087c3..cd2c8e2acd 100644 --- a/src/Microsoft.Diagnostics.DebugServices.Implementation/ModuleService.cs +++ b/src/Microsoft.Diagnostics.DebugServices.Implementation/ModuleService.cs @@ -194,6 +194,20 @@ public IModule CreateModule(int moduleIndex, ulong imageBase, ulong imageSize, s return new ModuleFromAddress(this, moduleIndex, imageBase, imageSize, imageName); } + /// + /// Gets the entrypoint module for the target. This is the first module in the sorted list of modules. + /// + public virtual IModule EntryPointModule + { + get + { + // The entry point module is the first module in the sorted list of modules. + // This is not necessarily the same as the entry point module in the target. + IModule[] modules = GetSortedModules(); + return modules.Length > 0 ? modules[0] : null; + } + } + #endregion /// diff --git a/src/Microsoft.Diagnostics.DebugServices.Implementation/SpecialDiagInfo.cs b/src/Microsoft.Diagnostics.DebugServices.Implementation/SpecialDiagInfo.cs index 65b3621825..7784a51736 100644 --- a/src/Microsoft.Diagnostics.DebugServices.Implementation/SpecialDiagInfo.cs +++ b/src/Microsoft.Diagnostics.DebugServices.Implementation/SpecialDiagInfo.cs @@ -84,7 +84,7 @@ private ulong SpecialDiagInfoAddress } } - public static ICrashInfoService CreateCrashInfoService(IServiceProvider services) + public static ICrashInfoService CreateCrashInfoServiceFromException(IServiceProvider services) { EXCEPTION_RECORD64 exceptionRecord; diff --git a/src/Microsoft.Diagnostics.DebugServices.Implementation/SymbolService.cs b/src/Microsoft.Diagnostics.DebugServices.Implementation/SymbolService.cs index 404e81e01f..a6024147a6 100644 --- a/src/Microsoft.Diagnostics.DebugServices.Implementation/SymbolService.cs +++ b/src/Microsoft.Diagnostics.DebugServices.Implementation/SymbolService.cs @@ -126,7 +126,7 @@ public bool ParseSymbolPath(string symbolPath) { string[] paths = symbolPath.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries); - foreach (string path in paths.Reverse()) + foreach (string path in paths.AsEnumerable().Reverse()) { string[] parts = path.Split(new char[] { '*' }, StringSplitOptions.None); if (parts.Length > 0) diff --git a/src/Microsoft.Diagnostics.DebugServices.Implementation/TargetFromDataReader.cs b/src/Microsoft.Diagnostics.DebugServices.Implementation/TargetFromDataReader.cs index 8f92d215a5..fa4c6ce835 100644 --- a/src/Microsoft.Diagnostics.DebugServices.Implementation/TargetFromDataReader.cs +++ b/src/Microsoft.Diagnostics.DebugServices.Implementation/TargetFromDataReader.cs @@ -74,9 +74,13 @@ public TargetFromDataReader(DataTarget dataTarget, OSPlatform targetOS, IHost ho }); // Add optional crash info service (currently only for Native AOT on Linux/MacOS). - _serviceContainerFactory.AddServiceFactory((services) => SpecialDiagInfo.CreateCrashInfoService(services)); + _serviceContainerFactory.AddServiceFactory((services) => SpecialDiagInfo.CreateCrashInfoServiceFromException(services)); OnFlushEvent.Register(() => FlushService()); + // Add the crash info service factory which lookup the DotNetRuntimeDebugHeader from modules + _serviceContainerFactory.AddServiceFactory((services) => new CrashInfoModuleService(services)); + OnFlushEvent.Register(() => FlushService()); + Finished(); } diff --git a/src/Microsoft.Diagnostics.DebugServices/ICrashInfoService.cs b/src/Microsoft.Diagnostics.DebugServices/ICrashInfoService.cs index 143532cdc3..f395fbaf04 100644 --- a/src/Microsoft.Diagnostics.DebugServices/ICrashInfoService.cs +++ b/src/Microsoft.Diagnostics.DebugServices/ICrashInfoService.cs @@ -17,6 +17,39 @@ public enum CrashReason InternalFailFast = 3, } + public enum ModuleEnumerationScheme + { + /// + /// Enumerate no modules + /// + None, + + /// + /// Enumerate only the entry point module + /// + EntryPointModule, + + /// + /// Enumerate only the entry point module and the entry point DLL module + /// + EntryPointAndEntryPointDllModule, + + /// + /// Enumerate all modules in the target + /// + All + } + + public interface ICrashInfoModuleService + { + /// + /// Create a crash info service + /// + /// module enumeration scheme + /// ICrashInfoService + ICrashInfoService Create(ModuleEnumerationScheme moduleEnumerationScheme); + } + /// /// Crash information service. Details about the unhandled exception or crash. /// diff --git a/src/Microsoft.Diagnostics.DebugServices/IModuleService.cs b/src/Microsoft.Diagnostics.DebugServices/IModuleService.cs index 7d65d8e796..0b3f7ca6c0 100644 --- a/src/Microsoft.Diagnostics.DebugServices/IModuleService.cs +++ b/src/Microsoft.Diagnostics.DebugServices/IModuleService.cs @@ -57,5 +57,13 @@ public interface IModuleService /// IModule /// thrown if imageBase or imageSize is 0 IModule CreateModule(int moduleIndex, ulong imageBase, ulong imageSize, string imageName); + + /// + /// Gets the entrypoint module for the target. + /// + IModule EntryPointModule + { + get; + } } } diff --git a/src/Microsoft.Diagnostics.DebugServices/MemoryServiceExtensions.cs b/src/Microsoft.Diagnostics.DebugServices/MemoryServiceExtensions.cs index 7cb5dbabc1..fd394f7bbd 100644 --- a/src/Microsoft.Diagnostics.DebugServices/MemoryServiceExtensions.cs +++ b/src/Microsoft.Diagnostics.DebugServices/MemoryServiceExtensions.cs @@ -2,9 +2,11 @@ // The .NET Foundation licenses this file to you under the MIT license. using System; +using System.Text; using System.Diagnostics; using System.IO; using System.Runtime.InteropServices; +using System.Runtime.CompilerServices; namespace Microsoft.Diagnostics.DebugServices { @@ -71,6 +73,22 @@ public static bool ReadDword(this IMemoryService memoryService, ulong address, o return false; } + public static bool Read(this IMemoryService memoryService, ref ulong address, out T value) where T : unmanaged + { + Span buffer = stackalloc byte[Unsafe.SizeOf()]; + if (memoryService.ReadMemory(address, buffer, out int bytesRead)) + { + if (bytesRead == Unsafe.SizeOf()) + { + value = MemoryMarshal.Read(buffer); + address += (ulong)Unsafe.SizeOf(); + return true; + } + } + value = default; + return false; + } + /// /// Return a pointer sized value from the address. /// @@ -98,6 +116,45 @@ public static bool ReadPointer(this IMemoryService memoryService, ulong address, return false; } + public static bool ReadPointer(this IMemoryService memoryService, ref ulong address, out ulong value) + { + bool ret = memoryService.ReadPointer(address, out value); + if (ret) + { + address += (ulong)memoryService.PointerSize; + } + return ret; + } + + public static bool ReadAnsiString(this IMemoryService memoryService, uint maxLength, ulong address, out string value) + { + StringBuilder sb = new(); + byte[] buffer = new byte[maxLength]; + value = null; + if (memoryService.ReadMemory(address, buffer, out int bytesRead) && bytesRead > 0) + { + // convert null terminated ANSI char array to a string + for (int i = 0; i < buffer.Length; i++) + { + // Read the string one character at a time + char c = (char)buffer[i]; + if (buffer[i] == 0) // Stop at null terminator + { + value = sb.ToString(); + break; // Stop reading at null terminator + } + if (c < 0x20 || c > 0x7E) // Unexpected characters + { + break; + } + // Append the character to the string + sb.Append(c); + } + } + return !string.IsNullOrEmpty(value); + } + + /// /// Create a stream for all of memory. /// diff --git a/src/Microsoft.Diagnostics.ExtensionCommands/CrashInfoCommand.cs b/src/Microsoft.Diagnostics.ExtensionCommands/CrashInfoCommand.cs index 41ad047e6c..ff2273b71c 100644 --- a/src/Microsoft.Diagnostics.ExtensionCommands/CrashInfoCommand.cs +++ b/src/Microsoft.Diagnostics.ExtensionCommands/CrashInfoCommand.cs @@ -16,24 +16,31 @@ public class CrashInfoCommand : CommandBase [ServiceImport(Optional = true)] public ICrashInfoService CrashInfo { get; set; } + [ServiceImport(Optional = true)] + public ICrashInfoModuleService CrashInfoFactory { get; set; } + + [Option(Name = "--moduleEnumerationScheme", Aliases = new string[] { "-e" }, Help = "Enables searching modules for the NativeAOT crashinfo data. Default is None")] + public ModuleEnumerationScheme ModuleEnumerationScheme { get; set; } = ModuleEnumerationScheme.None; + public override void Invoke() { - if (CrashInfo == null) + ICrashInfoService crashInfo = CrashInfo ?? CrashInfoFactory.Create(ModuleEnumerationScheme); + if (crashInfo == null) { throw new DiagnosticsException("No crash info to display"); } - WriteLine($"CrashReason: {CrashInfo.CrashReason}"); - WriteLine($"ThreadId: {CrashInfo.ThreadId:X4}"); - WriteLine($"HResult: {CrashInfo.HResult:X4}"); - WriteLine($"RuntimeType: {CrashInfo.RuntimeType}"); - WriteLine($"RuntimeBaseAddress: {CrashInfo.RuntimeBaseAddress:X16}"); - WriteLine($"RuntimeVersion: {CrashInfo.RuntimeVersion}"); - WriteLine($"Message: {CrashInfo.Message}"); + WriteLine($"CrashReason: {crashInfo.CrashReason}"); + WriteLine($"ThreadId: {crashInfo.ThreadId:X4}"); + WriteLine($"HResult: {crashInfo.HResult:X4}"); + WriteLine($"RuntimeType: {crashInfo.RuntimeType}"); + WriteLine($"RuntimeBaseAddress: {crashInfo.RuntimeBaseAddress:X16}"); + WriteLine($"RuntimeVersion: {crashInfo.RuntimeVersion}"); + WriteLine($"Message: {crashInfo.Message}"); WriteLine(); WriteLine("** Current Exception **"); WriteLine(); - IException exception = CrashInfo.GetException(0); + IException exception = crashInfo.GetException(0); if (exception != null) { WriteLine("-----------------------------------------------"); @@ -41,9 +48,9 @@ public override void Invoke() } WriteLine(); - WriteLine($"** Thread {CrashInfo.ThreadId} Exception **"); + WriteLine($"** Thread {crashInfo.ThreadId} Exception **"); WriteLine(); - exception = CrashInfo.GetThreadException(CrashInfo.ThreadId); + exception = crashInfo.GetThreadException(crashInfo.ThreadId); if (exception != null) { WriteLine("-----------------------------------------------"); @@ -53,7 +60,7 @@ public override void Invoke() WriteLine(); WriteLine("** Nested Exceptions **"); WriteLine(); - IEnumerable exceptions = CrashInfo.GetNestedExceptions(CrashInfo.ThreadId); + IEnumerable exceptions = crashInfo.GetNestedExceptions(crashInfo.ThreadId); foreach (IException ex in exceptions) { WriteLine("-----------------------------------------------"); diff --git a/src/Microsoft.Diagnostics.ExtensionCommands/RootCacheService.cs b/src/Microsoft.Diagnostics.ExtensionCommands/RootCacheService.cs index 4a8a860a55..f0b8226848 100644 --- a/src/Microsoft.Diagnostics.ExtensionCommands/RootCacheService.cs +++ b/src/Microsoft.Diagnostics.ExtensionCommands/RootCacheService.cs @@ -40,6 +40,8 @@ public class RootCacheService public bool IsDependentHandleLink(ulong source, ulong target) { + InitializeHandleRoots(); + int i = _dependentHandles.BinarySearch((source, target)); return i >= 0; } diff --git a/src/Microsoft.Diagnostics.ExtensionCommands/SimulateGCHeapCorruption.cs b/src/Microsoft.Diagnostics.ExtensionCommands/SimulateGCHeapCorruption.cs index e018cf218b..f517a40d85 100644 --- a/src/Microsoft.Diagnostics.ExtensionCommands/SimulateGCHeapCorruption.cs +++ b/src/Microsoft.Diagnostics.ExtensionCommands/SimulateGCHeapCorruption.cs @@ -62,7 +62,7 @@ private void List() foreach (Change change in _changes) { - output.WriteRow(change.Object, change.AddressModified, change.OriginalValue.Reverse(), change.NewValue.Reverse(), change.ExpectedFailure); + output.WriteRow(change.Object, change.AddressModified, change.OriginalValue.AsEnumerable().Reverse(), change.NewValue.AsEnumerable().Reverse(), change.ExpectedFailure); } } diff --git a/src/Microsoft.Diagnostics.Monitoring.EventPipe/Logs/TraceEventExtensions.cs b/src/Microsoft.Diagnostics.Monitoring.EventPipe/Logs/TraceEventExtensions.cs index 0397e842d2..78386b465a 100644 --- a/src/Microsoft.Diagnostics.Monitoring.EventPipe/Logs/TraceEventExtensions.cs +++ b/src/Microsoft.Diagnostics.Monitoring.EventPipe/Logs/TraceEventExtensions.cs @@ -26,22 +26,16 @@ public static void GetLogMessageJsonEventData( string argsJson = (string)traceEvent.PayloadValue(6); string formattedMessage = (string)traceEvent.PayloadValue(7); - string? activityTraceId; - string? activitySpanId; - string? activityTraceFlags; - if (traceEvent.Version >= 2) - { - // Note: Trace correlation fields added in .NET 9 - activityTraceId = (string)traceEvent.PayloadValue(8); - activitySpanId = (string)traceEvent.PayloadValue(9); - activityTraceFlags = (string)traceEvent.PayloadValue(10); - } - else - { - activityTraceId = null; - activitySpanId = null; - activityTraceFlags = null; - } + // NOTE: The Microsoft-Extensions-Logging EventSource is created with + // EventSourceSettings.EtwSelfDescribingEventFormat (TraceLogging). In TraceLogging, + // the ETW event header Version is always 0 even if the [Event] attribute declares + // Version=2. The three correlation fields (ActivityTraceId, ActivitySpanId, + // ActivityTraceFlags) were added in .NET 9, and with TraceLogging their presence + // is discoverable only via payload schema (field names), not header Version. + // Therefore we detect by payload name instead of checking traceEvent.Version. + string? activityTraceId = (string)traceEvent.PayloadByName("ActivityTraceId"); + string? activitySpanId = (string)traceEvent.PayloadByName("ActivitySpanId"); + string? activityTraceFlags = (string)traceEvent.PayloadByName("ActivityTraceFlags"); eventData = new( traceEvent.TimeStamp, diff --git a/src/Microsoft.Diagnostics.TestHelpers/DotNetBuildDebuggeeTestStep.cs b/src/Microsoft.Diagnostics.TestHelpers/DotNetBuildDebuggeeTestStep.cs index 6a97f1ae90..91c0d0d52f 100644 --- a/src/Microsoft.Diagnostics.TestHelpers/DotNetBuildDebuggeeTestStep.cs +++ b/src/Microsoft.Diagnostics.TestHelpers/DotNetBuildDebuggeeTestStep.cs @@ -200,6 +200,7 @@ protected async Task Restore(string extraArgs, ITestOutputHelper output) .WithEnvironmentVariable("DOTNET_CLI_DO_NOT_USE_MSBUILD_SERVER", "true") .WithEnvironmentVariable("DOTNET_MSBUILD_SDK_RESOLVER_CLI_DIR", Path.GetDirectoryName(DotNetToolPath)) .WithEnvironmentVariable("DOTNET_INSTALL_DIR", Path.GetDirectoryName(DotNetToolPath)) + .RemoveEnvironmentVariable("MSBuildExtensionsPath") .RemoveEnvironmentVariable("MSBuildSDKsPath") .WithWorkingDirectory(DebuggeeSolutionDirPath) .WithLog(output) @@ -247,6 +248,7 @@ protected async Task Build(string dotnetArgs, ITestOutputHelper output) .WithEnvironmentVariable("DOTNET_CLI_DO_NOT_USE_MSBUILD_SERVER", "true") .WithEnvironmentVariable("DOTNET_MSBUILD_SDK_RESOLVER_CLI_DIR", Path.GetDirectoryName(DotNetToolPath)) .WithEnvironmentVariable("DOTNET_INSTALL_DIR", Path.GetDirectoryName(DotNetToolPath)) + .RemoveEnvironmentVariable("MSBuildExtensionsPath") .RemoveEnvironmentVariable("MSBuildSDKsPath") .WithWorkingDirectory(DebuggeeProjectDirPath) .WithLog(output) diff --git a/src/Microsoft.Diagnostics.TestHelpers/RemoteExecutorHelper.cs b/src/Microsoft.Diagnostics.TestHelpers/RemoteExecutorHelper.cs index 1c6d7a71c0..1ba0c666e6 100644 --- a/src/Microsoft.Diagnostics.TestHelpers/RemoteExecutorHelper.cs +++ b/src/Microsoft.Diagnostics.TestHelpers/RemoteExecutorHelper.cs @@ -29,6 +29,9 @@ public static async Task RemoteInvoke(ITestOutputHelper output, TestConfigu // When RemoteExecutor is fixed the "using" can be added and the GC.SuppressFinalize be removed. RemoteInvokeHandle remoteInvokeHandle = RemoteExecutor.Invoke(method, config.Serialize(), options); GC.SuppressFinalize(remoteInvokeHandle); + + output.WriteLine($"RemoteExecutorHelper.RemoteInvoke: starting process {remoteInvokeHandle.Process.Id}"); + try { Task stdOutputTask = WriteStreamToOutput(remoteInvokeHandle.Process.StandardOutput, output); diff --git a/src/Microsoft.SymbolStore/KeyGenerators/ELFCoreKeyGenerator.cs b/src/Microsoft.SymbolStore/KeyGenerators/ELFCoreKeyGenerator.cs index 69250a93d9..31d5e21bb2 100644 --- a/src/Microsoft.SymbolStore/KeyGenerators/ELFCoreKeyGenerator.cs +++ b/src/Microsoft.SymbolStore/KeyGenerators/ELFCoreKeyGenerator.cs @@ -13,12 +13,14 @@ namespace Microsoft.SymbolStore.KeyGenerators public class ELFCoreKeyGenerator : KeyGenerator { private readonly ELFCoreFile _core; + private readonly string _path; public ELFCoreKeyGenerator(ITracer tracer, SymbolStoreFile file) : base(tracer) { StreamAddressSpace dataSource = new(file.Stream); _core = new ELFCoreFile(dataSource); + _path = file.FileName; } public override bool IsValid() @@ -35,10 +37,18 @@ public override IEnumerable GetKeys(KeyTypeFlags flags) { if (IsValid()) { - return _core.LoadedImages + KeyGenerator[] generators = _core.LoadedImages .Select((ELFLoadedImage loadedImage) => CreateGenerator(loadedImage)) .Where((KeyGenerator generator) => generator != null) - .SelectMany((KeyGenerator generator) => generator.GetKeys(flags)); + .ToArray(); + + if (generators.Length == 0) + { + Tracer.Verbose("ELFCore file `{0}`: missing valid loaded images. No keys will be generated.", _path); + return SymbolStoreKey.EmptyArray; + } + + return generators.SelectMany((KeyGenerator generator) => generator.GetKeys(flags)); } return SymbolStoreKey.EmptyArray; } diff --git a/src/Microsoft.SymbolStore/KeyGenerators/ELFFileKeyGenerator.cs b/src/Microsoft.SymbolStore/KeyGenerators/ELFFileKeyGenerator.cs index c7de8cc2c3..793c56aab9 100644 --- a/src/Microsoft.SymbolStore/KeyGenerators/ELFFileKeyGenerator.cs +++ b/src/Microsoft.SymbolStore/KeyGenerators/ELFFileKeyGenerator.cs @@ -77,7 +77,13 @@ ex is IndexOutOfRangeException || } string symbolFileName = GetSymbolFileName(); - foreach (SymbolStoreKey key in GetKeys(flags, _path, buildId, symbolFile, symbolFileName)) + SymbolStoreKey[] keys = GetKeys(flags, _path, buildId, symbolFile, symbolFileName).ToArray(); + if (keys.Length == 0 && (flags & (KeyTypeFlags.ClrKeys | KeyTypeFlags.DacDbiKeys)) != 0) + { + string keyType = (flags & KeyTypeFlags.ClrKeys) != 0 ? "CLR" : "DAC/DBI"; + Tracer.Verbose("ELF File `{0}`: file is not the coreclr module `{1}`. No {2} keys will be produced.", _path, CoreClrFileName, keyType); + } + foreach (SymbolStoreKey key in keys) { yield return key; } @@ -91,6 +97,10 @@ ex is IndexOutOfRangeException || // apphost downloaded as the host program name yield return BuildKey(_path, IdentityPrefix, buildId, "apphost"); } + else + { + Tracer.Verbose("ELFfile `{0}`: header type is not an Executable. No host keys will be generated.", _path); + } } } else diff --git a/src/Microsoft.SymbolStore/KeyGenerators/MachCoreKeyGenerator.cs b/src/Microsoft.SymbolStore/KeyGenerators/MachCoreKeyGenerator.cs index 0f088a0e61..1ceb8755b6 100644 --- a/src/Microsoft.SymbolStore/KeyGenerators/MachCoreKeyGenerator.cs +++ b/src/Microsoft.SymbolStore/KeyGenerators/MachCoreKeyGenerator.cs @@ -12,12 +12,14 @@ namespace Microsoft.SymbolStore.KeyGenerators public class MachCoreKeyGenerator : KeyGenerator { private readonly MachCore _core; + private readonly string _path; public MachCoreKeyGenerator(ITracer tracer, SymbolStoreFile file) : base(tracer) { StreamAddressSpace dataSource = new(file.Stream); _core = new MachCore(dataSource); + _path = file.FileName; } public override bool IsValid() @@ -34,10 +36,18 @@ public override IEnumerable GetKeys(KeyTypeFlags flags) { if (IsValid()) { - return _core.LoadedImages + KeyGenerator[] generators = _core.LoadedImages .Select((MachLoadedImage loadedImage) => CreateGenerator(loadedImage)) .Where((KeyGenerator generator) => generator != null) - .SelectMany((KeyGenerator generator) => generator.GetKeys(flags)); + .ToArray(); + + if (generators.Length == 0) + { + Tracer.Verbose("MachCore file `{0}`: missing valid loaded images. No keys will be generated.", _path); + return SymbolStoreKey.EmptyArray; + } + + return generators.SelectMany((KeyGenerator generator) => generator.GetKeys(flags)); } return SymbolStoreKey.EmptyArray; } diff --git a/src/Microsoft.SymbolStore/KeyGenerators/MachOFatHeaderKeyGenerator.cs b/src/Microsoft.SymbolStore/KeyGenerators/MachOFatHeaderKeyGenerator.cs index ba6ac92391..d35dab4a67 100644 --- a/src/Microsoft.SymbolStore/KeyGenerators/MachOFatHeaderKeyGenerator.cs +++ b/src/Microsoft.SymbolStore/KeyGenerators/MachOFatHeaderKeyGenerator.cs @@ -29,7 +29,17 @@ public override IEnumerable GetKeys(KeyTypeFlags flags) { if (IsValid()) { - return _machoFatFile.ArchSpecificFiles.Select((file) => new MachOFileKeyGenerator(Tracer, file, _path)).SelectMany((generator) => generator.GetKeys(flags)); + MachOFileKeyGenerator[] generators = _machoFatFile.ArchSpecificFiles + .Select((MachOFile file) => new MachOFileKeyGenerator(Tracer, file, _path)) + .ToArray(); + + if (generators.Length == 0) + { + Tracer.Verbose("Mach-O fat file `{0}`: missing arch-specific slices. No keys will be generated.", _path); + return SymbolStoreKey.EmptyArray; + } + + return generators.SelectMany((KeyGenerator generator) => generator.GetKeys(flags)); } return SymbolStoreKey.EmptyArray; } diff --git a/src/Microsoft.SymbolStore/KeyGenerators/MachOKeyGenerator.cs b/src/Microsoft.SymbolStore/KeyGenerators/MachOKeyGenerator.cs index ae4f9106d1..b4369ad6ef 100644 --- a/src/Microsoft.SymbolStore/KeyGenerators/MachOKeyGenerator.cs +++ b/src/Microsoft.SymbolStore/KeyGenerators/MachOKeyGenerator.cs @@ -61,7 +61,13 @@ public override IEnumerable GetKeys(KeyTypeFlags flags) { bool symbolFile = _machoFile.Header.FileType == MachHeaderFileType.Dsym; // TODO - mikem 1/23/18 - is there a way to get the name of the "linked" dwarf symbol file - foreach (SymbolStoreKey key in GetKeys(flags, _path, uuid, symbolFile, symbolFileName: null)) + SymbolStoreKey[] keys = GetKeys(flags, _path, uuid, symbolFile, symbolFileName: null).ToArray(); + if (keys.Length == 0 && (flags & (KeyTypeFlags.ClrKeys | KeyTypeFlags.DacDbiKeys)) != 0) + { + string keyType = (flags & KeyTypeFlags.ClrKeys) != 0 ? "CLR" : "DAC/DBI"; + Tracer.Verbose("Mach-O File `{0}`: file is not the coreclr module `{1}`. No {2} keys will be produced.", _path, CoreClrFileName, keyType); + } + foreach (SymbolStoreKey key in keys) { yield return key; } @@ -75,6 +81,10 @@ public override IEnumerable GetKeys(KeyTypeFlags flags) // apphost downloaded as the host program name yield return BuildKey(_path, IdentityPrefix, uuid, "apphost"); } + else + { + Tracer.Verbose("Mach-O file `{0}`: file type `{1}` is not an executable. No host keys will be generated.", _path, _machoFile.Header.FileType); + } } } else diff --git a/src/Microsoft.SymbolStore/KeyGenerators/MinidumpKeyGenerator.cs b/src/Microsoft.SymbolStore/KeyGenerators/MinidumpKeyGenerator.cs index 324bdfa656..e7e4d22e86 100644 --- a/src/Microsoft.SymbolStore/KeyGenerators/MinidumpKeyGenerator.cs +++ b/src/Microsoft.SymbolStore/KeyGenerators/MinidumpKeyGenerator.cs @@ -11,11 +11,13 @@ namespace Microsoft.SymbolStore.KeyGenerators public class MinidumpKeyGenerator : KeyGenerator { private readonly IAddressSpace _dataSource; + private readonly string _path; public MinidumpKeyGenerator(ITracer tracer, SymbolStoreFile file) : base(tracer) { _dataSource = new StreamAddressSpace(file.Stream); + _path = file.FileName; } public override bool IsValid() @@ -35,9 +37,18 @@ public override IEnumerable GetKeys(KeyTypeFlags flags) try { Minidump dump = new(_dataSource); - return dump.LoadedImages + KeyGenerator[] generators = dump.LoadedImages .Select((MinidumpLoadedImage loadedImage) => new PEFileKeyGenerator(Tracer, loadedImage.Image, loadedImage.ModuleName)) - .SelectMany((KeyGenerator generator) => generator.GetKeys(flags)); + .Where((KeyGenerator g) => g != null && g.IsValid()) + .ToArray(); + + if (generators.Length == 0) + { + Tracer.Verbose("Minidump file `{0}`: missing valid module images. No keys will be generated.", _path); + return SymbolStoreKey.EmptyArray; + } + + return generators.SelectMany((KeyGenerator generator) => generator.GetKeys(flags)); } catch (InvalidVirtualAddressException ex) { diff --git a/src/Microsoft.SymbolStore/KeyGenerators/PEFileKeyGenerator.cs b/src/Microsoft.SymbolStore/KeyGenerators/PEFileKeyGenerator.cs index 5ccfd355a3..d18650b888 100644 --- a/src/Microsoft.SymbolStore/KeyGenerators/PEFileKeyGenerator.cs +++ b/src/Microsoft.SymbolStore/KeyGenerators/PEFileKeyGenerator.cs @@ -67,6 +67,11 @@ public override IEnumerable GetKeys(KeyTypeFlags flags) Tracer.Error("Reading PDB records for {0}: {1}", _path, ex.Message); } + if (pdbs.Length == 0) + { + Tracer.Verbose("PEFile `{0}`: no PDB records found. No symbol keys will be produced.", _path); + } + foreach (PEPdbRecord pdb in pdbs) { if (((flags & KeyTypeFlags.ForceWindowsPdbs) == 0) && pdb.IsPortablePDB) @@ -82,6 +87,11 @@ public override IEnumerable GetKeys(KeyTypeFlags flags) if ((flags & KeyTypeFlags.PerfMapKeys) != 0) { + if (!_peFile.PerfMapsV1.Any()) + { + Tracer.Verbose("PEFile `{0}`: no perfmap records found. No perfmap keys will be produced.", _path); + } + foreach (PEPerfMapRecord perfmapRecord in _peFile.PerfMapsV1) { if (perfmapRecord.Version > FileFormats.PerfMap.PerfMapFile.MaxKnownPerfMapVersion) @@ -94,10 +104,15 @@ public override IEnumerable GetKeys(KeyTypeFlags flags) } // Return keys for SOS modules for a given runtime module - if ((flags & (KeyTypeFlags.ClrKeys)) != 0) + if ((flags & KeyTypeFlags.ClrKeys) != 0) { string coreclrId = BuildId(_peFile.Timestamp, _peFile.SizeOfImage); - foreach (string specialFileName in GetSOSFiles(GetFileName(_path))) + string[] sosFiles = GetSOSFiles(GetFileName(_path)).ToArray(); + if (sosFiles.Length == 0) + { + Tracer.Verbose("PEFile `{0}`: no SOS special files generated for runtime file {1}. No SOS keys will be produced.", _path, GetFileName(_path)); + } + foreach (string specialFileName in sosFiles) { yield return BuildKey(specialFileName, coreclrId); } @@ -107,7 +122,12 @@ public override IEnumerable GetKeys(KeyTypeFlags flags) if ((flags & (KeyTypeFlags.ClrKeys | KeyTypeFlags.DacDbiKeys)) != 0) { string coreclrId = BuildId(_peFile.Timestamp, _peFile.SizeOfImage); - foreach (string specialFileName in GetDACFiles(GetFileName(_path))) + string[] dacFiles = GetDACFiles(GetFileName(_path)).ToArray(); + if (dacFiles.Length == 0) + { + Tracer.Verbose("PEFile `{0}`: no DAC/DBI special files generated for runtime file {1}. No DAC/DBI keys will be produced.", _path, GetFileName(_path)); + } + foreach (string specialFileName in dacFiles) { yield return BuildKey(specialFileName, coreclrId); } @@ -125,6 +145,10 @@ public override IEnumerable GetKeys(KeyTypeFlags flags) // apphost.exe downloaded as the host program name yield return BuildKey(_path, prefix: null, id, "apphost.exe"); } + else + { + Tracer.Verbose("PEfile `{0}`: non-executable (DLL or IL image). No host keys will be generated.", _path); + } } } } diff --git a/src/SOS/SOS.Extensions/Clrma/ClrmaServiceWrapper.cs b/src/SOS/SOS.Extensions/Clrma/ClrmaServiceWrapper.cs index dc47872586..c8d57a2adf 100644 --- a/src/SOS/SOS.Extensions/Clrma/ClrmaServiceWrapper.cs +++ b/src/SOS/SOS.Extensions/Clrma/ClrmaServiceWrapper.cs @@ -13,6 +13,7 @@ namespace SOS.Extensions.Clrma { public sealed class ClrmaServiceWrapper : COMCallableIUnknown { + public const ModuleEnumerationScheme DefaultModuleEnumerationScheme = ModuleEnumerationScheme.EntryPointAndEntryPointDllModule; public static readonly Guid IID_ICLRMAService = new("1FCF4C14-60C1-44E6-84ED-20506EF3DC60"); public const int E_BOUNDS = unchecked((int)0x8000000B); @@ -34,10 +35,21 @@ public ClrmaServiceWrapper(ITarget target, IServiceProvider serviceProvider, Ser builder.AddMethod(new GetThreadDelegate(GetThread)); builder.AddMethod(new GetExceptionDelegate(GetException)); builder.AddMethod(new GetObjectInspectionDelegate(GetObjectInspection)); + builder.AddMethod(new SetModuleEnumerationPolicyDelegate((self, moduleEnumerationPolicy) => + { + if (moduleEnumerationPolicy < 0 || moduleEnumerationPolicy > (int)ModuleEnumerationScheme.All) + { + return HResult.E_INVALIDARG; + } + ModuleEnumerationScheme = (ModuleEnumerationScheme)moduleEnumerationPolicy; + return HResult.S_OK; + })); builder.Complete(); // Since this wrapper is only created through a ServiceWrapper factory, no AddRef() is needed. } + public ModuleEnumerationScheme ModuleEnumerationScheme { get; private set; } = ModuleEnumerationScheme.None; + protected override void Destroy() { Trace.TraceInformation("ClrmaServiceWrapper.Destroy"); @@ -104,7 +116,15 @@ private int GetObjectInspection( return HResult.E_NOTIMPL; } - private ICrashInfoService CrashInfoService => _crashInfoService ??= _serviceProvider.GetService(); + private ICrashInfoService CrashInfoService + { + get + { + _crashInfoService ??= _serviceProvider.GetService(); // Use the default exception-based mechanism for obtaining crash info service + _crashInfoService ??= _serviceProvider.GetService()?.Create(ModuleEnumerationScheme); // if the above fails, try to create a crash info service from the modules + return _crashInfoService; + } + } private IThreadService ThreadService => _serviceProvider.GetService(); @@ -132,6 +152,11 @@ private delegate int GetObjectInspectionDelegate( [In] IntPtr self, [Out] out IntPtr objectInspection); + [UnmanagedFunctionPointer(CallingConvention.Winapi)] + private delegate int SetModuleEnumerationPolicyDelegate( + [In] IntPtr self, + [In] uint moduleEnumerationPolicy); + #endregion } } diff --git a/src/SOS/SOS.Extensions/ModuleServiceFromDebuggerServices.cs b/src/SOS/SOS.Extensions/ModuleServiceFromDebuggerServices.cs index 4137ee1dfd..371de58dd3 100644 --- a/src/SOS/SOS.Extensions/ModuleServiceFromDebuggerServices.cs +++ b/src/SOS/SOS.Extensions/ModuleServiceFromDebuggerServices.cs @@ -5,6 +5,7 @@ using System.Collections.Generic; using System.Diagnostics; using System.IO; +using System.Runtime.InteropServices; using Microsoft.Diagnostics.DebugServices; using Microsoft.Diagnostics.DebugServices.Implementation; using Microsoft.Diagnostics.Runtime.Utilities; @@ -262,6 +263,30 @@ internal ModuleServiceFromDebuggerServices(IServiceProvider services, DebuggerSe _debuggerServices = debuggerServices; } + public override IModule EntryPointModule + { + get + { + foreach (IModule module in ((IModuleService)this).EnumerateModules()) + { + if (Target.OperatingSystem == OSPlatform.Windows) + { + // The entry point module is not necessarily the first module in the sorted list of modules. + if (module.FileName?.EndsWith(".exe", StringComparison.OrdinalIgnoreCase) == true) + { + return module; + } + } + else + { + // On non-Windows, assume the entry point module is the first module. + return module; + } + } + return null; + } + } + /// /// Get/create the modules dictionary. /// diff --git a/src/SOS/SOS.Extensions/TargetFromDebuggerServices.cs b/src/SOS/SOS.Extensions/TargetFromDebuggerServices.cs index aac3731ff1..72e9108bdd 100644 --- a/src/SOS/SOS.Extensions/TargetFromDebuggerServices.cs +++ b/src/SOS/SOS.Extensions/TargetFromDebuggerServices.cs @@ -100,9 +100,13 @@ internal TargetFromDebuggerServices(DebuggerServices debuggerServices, IHost hos }); // Add optional crash info service (currently only for Native AOT). - _serviceContainerFactory.AddServiceFactory((services) => CreateCrashInfoService(services, debuggerServices)); + _serviceContainerFactory.AddServiceFactory((services) => CreateCrashInfoServiceFromException(services, debuggerServices)); OnFlushEvent.Register(() => FlushService()); + // Add the crash info service factory which lookup the DotNetRuntimeDebugHeader from modules + _serviceContainerFactory.AddServiceFactory((services) => new CrashInfoModuleService(services)); + OnFlushEvent.Register(() => FlushService()); + if (Host.HostType == HostType.DbgEng) { _serviceContainerFactory.AddServiceFactory((services) => new MemoryRegionServiceFromDebuggerServices(debuggerServices)); @@ -114,12 +118,12 @@ internal TargetFromDebuggerServices(DebuggerServices debuggerServices, IHost hos targetWrapper?.ServiceWrapper.AddServiceWrapper(ClrmaServiceWrapper.IID_ICLRMAService, () => new ClrmaServiceWrapper(this, Services, targetWrapper.ServiceWrapper)); } - private unsafe ICrashInfoService CreateCrashInfoService(IServiceProvider services, DebuggerServices debuggerServices) + private unsafe ICrashInfoService CreateCrashInfoServiceFromException(IServiceProvider services, DebuggerServices debuggerServices) { // For Linux/OSX dumps loaded under dbgeng the GetLastException API doesn't return the necessary information if (Host.HostType == HostType.DbgEng && (OperatingSystem == OSPlatform.Linux || OperatingSystem == OSPlatform.OSX)) { - return SpecialDiagInfo.CreateCrashInfoService(services); + return SpecialDiagInfo.CreateCrashInfoServiceFromException(services); } HResult hr = debuggerServices.GetLastException(out uint processId, out int threadIndex, out EXCEPTION_RECORD64 exceptionRecord); if (hr.IsOK) @@ -143,7 +147,10 @@ private unsafe ICrashInfoService CreateCrashInfoService(IServiceProvider service } } } + return null; } + + } } diff --git a/src/SOS/SOS.Package/SOS.Package.csproj b/src/SOS/SOS.Package/SOS.Package.csproj index ed21920642..5607b1c05f 100644 --- a/src/SOS/SOS.Package/SOS.Package.csproj +++ b/src/SOS/SOS.Package/SOS.Package.csproj @@ -14,7 +14,7 @@ true false - + @@ -30,47 +30,54 @@ - + - SOS - $(FileVersion) - Debugging aid for .NET Core programs and runtimes - - - - - - - - - - - - - - - - - - - - - - - - - - !soshelp - Displays all available SOS commands or details about the command - - - - - + SOS + $(FileVersion) + Debugging aid for .NET Core programs and runtimes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + !soshelp + Displays all available SOS commands or details about the command + + + + + ]]> diff --git a/src/SOS/SOS.UnitTests/Debuggees/DumpGCData/DumpGCData.csproj b/src/SOS/SOS.UnitTests/Debuggees/DumpGCData/DumpGCData.csproj new file mode 100644 index 0000000000..644ea7fa32 --- /dev/null +++ b/src/SOS/SOS.UnitTests/Debuggees/DumpGCData/DumpGCData.csproj @@ -0,0 +1,7 @@ + + + Exe + $(BuildProjectFramework) + $(SupportedSubProcessTargetFrameworks) + + diff --git a/src/SOS/SOS.UnitTests/Debuggees/DumpGCData/Program.cs b/src/SOS/SOS.UnitTests/Debuggees/DumpGCData/Program.cs new file mode 100644 index 0000000000..7a74fe024d --- /dev/null +++ b/src/SOS/SOS.UnitTests/Debuggees/DumpGCData/Program.cs @@ -0,0 +1,23 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System; +using System.Diagnostics; +using System.Runtime.InteropServices; + +namespace DumpGCData; + +internal class Program +{ + private static void Main() + { + Debugger.Break(); + + byte[] data = new byte[1024 * 1024]; + + GCHandle handle = GCHandle.Alloc(data, GCHandleType.Pinned); + GC.Collect(); + Debugger.Break(); + Console.WriteLine(handle.ToString()); + } +} diff --git a/src/SOS/SOS.UnitTests/Debuggees/FindRootsOlderGeneration/FindRootsOlderGeneration.csproj b/src/SOS/SOS.UnitTests/Debuggees/FindRootsOlderGeneration/FindRootsOlderGeneration.csproj new file mode 100644 index 0000000000..644ea7fa32 --- /dev/null +++ b/src/SOS/SOS.UnitTests/Debuggees/FindRootsOlderGeneration/FindRootsOlderGeneration.csproj @@ -0,0 +1,7 @@ + + + Exe + $(BuildProjectFramework) + $(SupportedSubProcessTargetFrameworks) + + diff --git a/src/SOS/SOS.UnitTests/Debuggees/FindRootsOlderGeneration/Program.cs b/src/SOS/SOS.UnitTests/Debuggees/FindRootsOlderGeneration/Program.cs new file mode 100644 index 0000000000..e13750f9de --- /dev/null +++ b/src/SOS/SOS.UnitTests/Debuggees/FindRootsOlderGeneration/Program.cs @@ -0,0 +1,73 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System; +using System.Diagnostics; +using System.Runtime; + +namespace FindRootsOlderGeneration; + +internal class Program +{ + private static void Main() + { + // Allocate a large object to ensure it goes on the LOH + Thing[] things = new Thing[1024 * 100]; + + Debugger.Break(); + + // On CI runs, in server GC mode, these collects have sometimes triggered + // a gen 2 collection that is not expected and causes the test to fail. + // Adding "SustainedLowLatency" mode to try to prevent that. + GCSettings.LatencyMode = GCLatencyMode.SustainedLowLatency; + + PopulateArray(things); + Thing lastThing = things[things.Length - 1]; + + Console.WriteLine("Enable CLRN notifications: SXE CLRN"); + Debugger.Break(); + + int dataGen = GC.GetGeneration(things); + int thingGen = GC.GetGeneration(lastThing); + Console.WriteLine($"Before GC - Array Gen: {dataGen}, Thing Gen: {thingGen}"); + + Console.WriteLine("Forcing GC..."); + + GC.Collect(0, GCCollectionMode.Forced, blocking: true); + + Console.WriteLine("GC complete."); + Console.WriteLine("Disable CLRN notifications: SXN CLRN"); + + dataGen = GC.GetGeneration(things); + thingGen = GC.GetGeneration(lastThing); + Console.WriteLine($"After GC - Array Gen: {dataGen}, Thing Gen: {thingGen}"); + + Debugger.Break(); + + // Keep data alive + PrintSumArray(things); + } + + private static void PopulateArray(Thing[] things) + { + for (uint i = 0; i < things.Length; i++) + { + things[i] = new Thing() { Id = i }; + } + } + + private static void PrintSumArray(Thing[] things) + { + ulong acc = 0; + for (int i = 0; i < things.Length; i++) + { + acc += things[i].Id; + } + Console.WriteLine($"Thing Array sum: {acc}"); + } +} + +internal class Thing +{ + public uint Id { get; set; } +} diff --git a/src/SOS/SOS.UnitTests/Debuggees/SymbolTestApp/SymbolTestApp.sln b/src/SOS/SOS.UnitTests/Debuggees/SymbolTestApp/SymbolTestApp.sln deleted file mode 100644 index 7fe0b31211..0000000000 --- a/src/SOS/SOS.UnitTests/Debuggees/SymbolTestApp/SymbolTestApp.sln +++ /dev/null @@ -1,50 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.29613.14 -MinimumVisualStudioVersion = 15.0.26124.0 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SymbolTestApp", "SymbolTestApp\SymbolTestApp.csproj", "{EB291C94-C60E-4AE6-AEA0-B7EEF86F00AD}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SymbolTestDll", "SymbolTestDll\SymbolTestDll.csproj", "{53E66227-71BB-4300-9BE9-56CE570B28F8}" -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 - {EB291C94-C60E-4AE6-AEA0-B7EEF86F00AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EB291C94-C60E-4AE6-AEA0-B7EEF86F00AD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EB291C94-C60E-4AE6-AEA0-B7EEF86F00AD}.Debug|x64.ActiveCfg = Debug|Any CPU - {EB291C94-C60E-4AE6-AEA0-B7EEF86F00AD}.Debug|x64.Build.0 = Debug|Any CPU - {EB291C94-C60E-4AE6-AEA0-B7EEF86F00AD}.Debug|x86.ActiveCfg = Debug|Any CPU - {EB291C94-C60E-4AE6-AEA0-B7EEF86F00AD}.Debug|x86.Build.0 = Debug|Any CPU - {EB291C94-C60E-4AE6-AEA0-B7EEF86F00AD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EB291C94-C60E-4AE6-AEA0-B7EEF86F00AD}.Release|Any CPU.Build.0 = Release|Any CPU - {EB291C94-C60E-4AE6-AEA0-B7EEF86F00AD}.Release|x64.ActiveCfg = Release|Any CPU - {EB291C94-C60E-4AE6-AEA0-B7EEF86F00AD}.Release|x64.Build.0 = Release|Any CPU - {EB291C94-C60E-4AE6-AEA0-B7EEF86F00AD}.Release|x86.ActiveCfg = Release|Any CPU - {EB291C94-C60E-4AE6-AEA0-B7EEF86F00AD}.Release|x86.Build.0 = Release|Any CPU - {53E66227-71BB-4300-9BE9-56CE570B28F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {53E66227-71BB-4300-9BE9-56CE570B28F8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {53E66227-71BB-4300-9BE9-56CE570B28F8}.Debug|x64.ActiveCfg = Debug|Any CPU - {53E66227-71BB-4300-9BE9-56CE570B28F8}.Debug|x64.Build.0 = Debug|Any CPU - {53E66227-71BB-4300-9BE9-56CE570B28F8}.Debug|x86.ActiveCfg = Debug|Any CPU - {53E66227-71BB-4300-9BE9-56CE570B28F8}.Debug|x86.Build.0 = Debug|Any CPU - {53E66227-71BB-4300-9BE9-56CE570B28F8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {53E66227-71BB-4300-9BE9-56CE570B28F8}.Release|Any CPU.Build.0 = Release|Any CPU - {53E66227-71BB-4300-9BE9-56CE570B28F8}.Release|x64.ActiveCfg = Release|Any CPU - {53E66227-71BB-4300-9BE9-56CE570B28F8}.Release|x64.Build.0 = Release|Any CPU - {53E66227-71BB-4300-9BE9-56CE570B28F8}.Release|x86.ActiveCfg = Release|Any CPU - {53E66227-71BB-4300-9BE9-56CE570B28F8}.Release|x86.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {42F03860-BFB4-49ED-900B-0C32D06E0B53} - EndGlobalSection -EndGlobal diff --git a/src/SOS/SOS.UnitTests/Debuggees/SymbolTestApp/SymbolTestApp.slnx b/src/SOS/SOS.UnitTests/Debuggees/SymbolTestApp/SymbolTestApp.slnx new file mode 100644 index 0000000000..07e088a690 --- /dev/null +++ b/src/SOS/SOS.UnitTests/Debuggees/SymbolTestApp/SymbolTestApp.slnx @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/SOS/SOS.UnitTests/Debuggees/SymbolTestApp/SymbolTestApp/SymbolTestApp.csproj b/src/SOS/SOS.UnitTests/Debuggees/SymbolTestApp/SymbolTestApp/SymbolTestApp.csproj index f783e9c2ef..4a460a797e 100644 --- a/src/SOS/SOS.UnitTests/Debuggees/SymbolTestApp/SymbolTestApp/SymbolTestApp.csproj +++ b/src/SOS/SOS.UnitTests/Debuggees/SymbolTestApp/SymbolTestApp/SymbolTestApp.csproj @@ -7,7 +7,7 @@ - + diff --git a/src/SOS/SOS.UnitTests/Debuggees/TaskNestedException/TaskNestedException.sln b/src/SOS/SOS.UnitTests/Debuggees/TaskNestedException/TaskNestedException.sln deleted file mode 100644 index ecca0ea023..0000000000 --- a/src/SOS/SOS.UnitTests/Debuggees/TaskNestedException/TaskNestedException.sln +++ /dev/null @@ -1,50 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.29613.14 -MinimumVisualStudioVersion = 15.0.26124.0 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TaskNestedException", "TaskNestedException\TaskNestedException.csproj", "{B9B58649-CEA6-4EF5-A25E-916AE8E77917}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RandomUserLibrary", "RandomUserLibrary\RandomUserLibrary.csproj", "{FADE7D7D-107F-42B0-ABD5-36A101CD8675}" -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 - {B9B58649-CEA6-4EF5-A25E-916AE8E77917}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B9B58649-CEA6-4EF5-A25E-916AE8E77917}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B9B58649-CEA6-4EF5-A25E-916AE8E77917}.Debug|x64.ActiveCfg = Debug|Any CPU - {B9B58649-CEA6-4EF5-A25E-916AE8E77917}.Debug|x64.Build.0 = Debug|Any CPU - {B9B58649-CEA6-4EF5-A25E-916AE8E77917}.Debug|x86.ActiveCfg = Debug|Any CPU - {B9B58649-CEA6-4EF5-A25E-916AE8E77917}.Debug|x86.Build.0 = Debug|Any CPU - {B9B58649-CEA6-4EF5-A25E-916AE8E77917}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B9B58649-CEA6-4EF5-A25E-916AE8E77917}.Release|Any CPU.Build.0 = Release|Any CPU - {B9B58649-CEA6-4EF5-A25E-916AE8E77917}.Release|x64.ActiveCfg = Release|Any CPU - {B9B58649-CEA6-4EF5-A25E-916AE8E77917}.Release|x64.Build.0 = Release|Any CPU - {B9B58649-CEA6-4EF5-A25E-916AE8E77917}.Release|x86.ActiveCfg = Release|Any CPU - {B9B58649-CEA6-4EF5-A25E-916AE8E77917}.Release|x86.Build.0 = Release|Any CPU - {FADE7D7D-107F-42B0-ABD5-36A101CD8675}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FADE7D7D-107F-42B0-ABD5-36A101CD8675}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FADE7D7D-107F-42B0-ABD5-36A101CD8675}.Debug|x64.ActiveCfg = Debug|Any CPU - {FADE7D7D-107F-42B0-ABD5-36A101CD8675}.Debug|x64.Build.0 = Debug|Any CPU - {FADE7D7D-107F-42B0-ABD5-36A101CD8675}.Debug|x86.ActiveCfg = Debug|Any CPU - {FADE7D7D-107F-42B0-ABD5-36A101CD8675}.Debug|x86.Build.0 = Debug|Any CPU - {FADE7D7D-107F-42B0-ABD5-36A101CD8675}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FADE7D7D-107F-42B0-ABD5-36A101CD8675}.Release|Any CPU.Build.0 = Release|Any CPU - {FADE7D7D-107F-42B0-ABD5-36A101CD8675}.Release|x64.ActiveCfg = Release|Any CPU - {FADE7D7D-107F-42B0-ABD5-36A101CD8675}.Release|x64.Build.0 = Release|Any CPU - {FADE7D7D-107F-42B0-ABD5-36A101CD8675}.Release|x86.ActiveCfg = Release|Any CPU - {FADE7D7D-107F-42B0-ABD5-36A101CD8675}.Release|x86.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {53DA7C95-F7D2-4F8F-AD21-15CB94158C77} - EndGlobalSection -EndGlobal diff --git a/src/SOS/SOS.UnitTests/Debuggees/TaskNestedException/TaskNestedException.slnx b/src/SOS/SOS.UnitTests/Debuggees/TaskNestedException/TaskNestedException.slnx new file mode 100644 index 0000000000..badfcb13d2 --- /dev/null +++ b/src/SOS/SOS.UnitTests/Debuggees/TaskNestedException/TaskNestedException.slnx @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/SOS/SOS.UnitTests/Debuggees/VarargPInvokeInteropMD/Program.cs b/src/SOS/SOS.UnitTests/Debuggees/VarargPInvokeInteropMD/Program.cs new file mode 100644 index 0000000000..54cd367751 --- /dev/null +++ b/src/SOS/SOS.UnitTests/Debuggees/VarargPInvokeInteropMD/Program.cs @@ -0,0 +1,24 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System; +using System.Diagnostics; +using System.Runtime.InteropServices; + +namespace VarargPInvokeInteropMD; + +internal class Program +{ + private static void Main() + { + Debugger.Break(); + + Interop.printf("Number: %d, Float: %.2f\n", __arglist(42, 3.14159)); + } +} + +internal class Interop +{ + [DllImport("msvcrt")] + public static extern int printf(string format, __arglist); +} diff --git a/src/SOS/SOS.UnitTests/Debuggees/VarargPInvokeInteropMD/VarargPInvokeInteropMD.csproj b/src/SOS/SOS.UnitTests/Debuggees/VarargPInvokeInteropMD/VarargPInvokeInteropMD.csproj new file mode 100644 index 0000000000..644ea7fa32 --- /dev/null +++ b/src/SOS/SOS.UnitTests/Debuggees/VarargPInvokeInteropMD/VarargPInvokeInteropMD.csproj @@ -0,0 +1,7 @@ + + + Exe + $(BuildProjectFramework) + $(SupportedSubProcessTargetFrameworks) + + diff --git a/src/SOS/SOS.UnitTests/SOS.cs b/src/SOS/SOS.UnitTests/SOS.cs index 578e6f609b..3a66a4046f 100644 --- a/src/SOS/SOS.UnitTests/SOS.cs +++ b/src/SOS/SOS.UnitTests/SOS.cs @@ -24,6 +24,40 @@ public static IEnumerable GetConfigurations(string key, string value) return TestRunConfiguration.Instance.Configurations.Where((c) => key == null || c.AllSettings.GetValueOrDefault(key) == value).DefaultIfEmpty(TestConfiguration.Empty).Select(c => new[] { c }); } + // Configurations skipping desktop framework + public static IEnumerable GetNetCoreConfigurations() + { + return TestRunConfiguration.Instance.Configurations + // Filter out configurations for specific tests + .Where(c => c.AllSettings.GetValueOrDefault("TestName") == null) + // Filter for only .NET core configurations + .Where(c => c.IsNETCore) + .Select(c => new[] { c }); + } + + public static IEnumerable GetGCConfigurations() + { + IEnumerable inputConfigurations = TestRunConfiguration.Instance.Configurations + // Filter out configurations for specific tests + .Where(c => c.AllSettings.GetValueOrDefault("TestName") == null) + // Filter for only .NET core configurations + .Where(c => c.IsNETCore) + // Filter out single file scenarios + .Where(c => !c.PublishSingleFile); + + TestConfiguration AddSetting(TestConfiguration inputConfiguration, string key, string value) + { + Dictionary settings = new(inputConfiguration.AllSettings); + settings.Add(key, value); + return new TestConfiguration(settings); + } + + IEnumerable outputConfigurations = inputConfigurations.Select(c => AddSetting(c, "GCServer", "0")) + .Concat(inputConfigurations.Select(c => AddSetting(c, "GCServer", "1"))); + + return outputConfigurations.Select(c => new[] { c }); + } + internal static void SkipIfArm(TestConfiguration config) { if (config.TargetArchitecture is "arm" or "arm64") @@ -200,7 +234,64 @@ public SOS(ITestOutputHelper output) public static IEnumerable Configurations => SOSTestHelpers.GetConfigurations("TestName", value: null); - [SkippableTheory, MemberData(nameof(Configurations)), Trait("Category", "CDACCompatible")] + + [SkippableTheory, MemberData(nameof(SOSTestHelpers.GetNetCoreConfigurations), MemberType = typeof(SOSTestHelpers))] + public async Task VarargPInvokeInteropMD(TestConfiguration config) + { + if (OS.Kind != OSKind.Windows) + { + throw new SkipTestException("Test only supports CDB and therefore only runs on Windows"); + } + + await SOSTestHelpers.RunTest( + config, + debuggeeName: "VarargPInvokeInteropMD", + scriptName: "VarargPInvokeInteropMD.script", + Output, + testName: "SOS.VarargPInvokeInteropMD", + testDump: false); + } + + [SkippableTheory, MemberData(nameof(SOSTestHelpers.GetGCConfigurations), MemberType = typeof(SOSTestHelpers))] + public async Task FindRootsOlderGeneration(TestConfiguration config) + { + if (OS.Kind != OSKind.Windows) + { + throw new SkipTestException("Test only supports CDB and therefore only runs on Windows"); + } + + if (config.RuntimeFrameworkVersionMajor < 10) + { + throw new SkipTestException("This test validates a bug which was fixed in .NET 10"); + } + + await SOSTestHelpers.RunTest( + config, + debuggeeName: "FindRootsOlderGeneration", + scriptName: "FindRootsOlderGeneration.script", + Output, + testName: "SOS.FindRootsOlderGeneration", + testDump: false); + } + + [SkippableTheory, MemberData(nameof(SOSTestHelpers.GetGCConfigurations), MemberType = typeof(SOSTestHelpers))] + public async Task DumpGCData(TestConfiguration config) + { + if (config.RuntimeFrameworkVersionMajor < 10) + { + throw new SkipTestException("This test validates a bug which was fixed in .NET 10"); + } + + await SOSTestHelpers.RunTest( + config, + debuggeeName: "DumpGCData", + scriptName: "DumpGCData.script", + Output, + testName: "SOS.DumpGCData", + testDump: false); + } + + [SkippableTheory, MemberData(nameof(Configurations))] public async Task StackTraceSoftwareExceptionFrame(TestConfiguration config) { if (config.RuntimeFrameworkVersionMajor < 10) @@ -219,7 +310,7 @@ await SOSTestHelpers.RunTest( testTriage: true); } - [SkippableTheory, MemberData(nameof(Configurations)), Trait("Category", "CDACCompatible")] + [SkippableTheory, MemberData(nameof(Configurations))] public async Task StackTraceFaultingExceptionFrame(TestConfiguration config) { SOSTestHelpers.SkipIfWinX86(config); @@ -302,6 +393,13 @@ public async Task DynamicMethod(TestConfiguration config) { throw new SkipTestException("Single file and desktop framework not supported"); } + + if (config.RuntimeFrameworkVersionMajor == 10) + { + // The clrstack -i -a command regressed on .NET 10 win-x86, so skip this test for now. + SOSTestHelpers.SkipIfWinX86(config); + } + await SOSTestHelpers.RunTest(config, debuggeeName: "DynamicMethod", scriptName: "DynamicMethod.script", Output); } @@ -398,6 +496,12 @@ await SOSTestHelpers.RunTest( [SkippableTheory, MemberData(nameof(SOSTestHelpers.GetConfigurations), "TestName", "SOS.StackAndOtherTests", MemberType = typeof(SOSTestHelpers))] public async Task StackAndOtherTests(TestConfiguration config) { + if (config.RuntimeFrameworkVersionMajor == 10) + { + // The clrstack -i -a command regressed on .NET 10 win-x86, so skip this test for now. + SOSTestHelpers.SkipIfWinX86(config); + } + foreach (TestConfiguration currentConfig in TestRunner.EnumeratePdbTypeConfigs(config)) { // Assumes that SymbolTestDll.dll that is dynamically loaded is the parent directory of the single file app @@ -637,4 +741,18 @@ public async Task LLDBPluginTests(TestConfiguration config) outputHelper?.Dispose(); } } + [SkippableTheory, MemberData(nameof(Configurations))] + public async Task ClrStackWithNumberOfFrames(TestConfiguration config) + { + if (config.IsDesktop) + { + throw new SkipTestException("The behavior of ClrStack -i is not the same on Desktop"); + } + await SOSTestHelpers.RunTest( + config, + debuggeeName: "DivZero", + scriptName: "ClrStackWithNumberOfFrames.script", + Output, + testTriage: true); + } } diff --git a/src/SOS/SOS.UnitTests/SOSRunner.cs b/src/SOS/SOS.UnitTests/SOSRunner.cs index 647bb08fb7..382a66bfe9 100644 --- a/src/SOS/SOS.UnitTests/SOSRunner.cs +++ b/src/SOS/SOS.UnitTests/SOSRunner.cs @@ -719,6 +719,18 @@ public static async Task StartDebugger(TestInformation information, D processRunner.WithEnvironmentVariable("DOTNET_DIAGNOSTIC_EXTENSIONS", extensions); } + string gcServerMode = config.GetValue("GCServer"); + if (!string.IsNullOrEmpty(gcServerMode)) + { + processRunner.WithEnvironmentVariable("DOTNET_gcServer", gcServerMode); + } + + string gcName = config.GetValue("GCName"); + if (!string.IsNullOrEmpty(gcName)) + { + processRunner.WithEnvironmentVariable("DOTNET_gcName", gcName); + } + DumpType? dumpType = null; if (action is DebuggerAction.LoadDump or DebuggerAction.LoadDumpWithDotNetDump) { @@ -866,6 +878,14 @@ public async Task RunScript(string scriptRelativePath) { throw new Exception($"Debugger command FAILED: {input}"); } + + } + // Switching threads is debugger specific and can cause issues + // with the runcommand helper. + else if (line.StartsWith("SWITCH_THREAD:")) + { + string input = line.Substring("SWITCH_THREAD:".Length).TrimStart(); + await SwitchThread(input); } else if (line.StartsWith("COMMAND_FAIL:")) { @@ -1107,6 +1127,31 @@ public async Task ContinueExecution() } } + public async Task SwitchThread(string threadId) + { + string command = null; + bool addPrefix = true; + + switch (Debugger) + { + case NativeDebugger.Cdb: + command = $"~{threadId}s"; + // Don't add the !runcommand prefix because it gets printed when cdb stops at + // the new thread because the helper extension used .pcmd to set a stop command. + addPrefix = false; + break; + default: + throw new NotImplementedException("Switching threads is not implemented on other debuggers"); + } + if (command != null) + { + if (!await RunCommand(command, addPrefix)) + { + throw new Exception($"'{command}' FAILED"); + } + } + } + public async Task RunSosCommand(string command, bool extensionCommand = false) { switch (Debugger) diff --git a/src/SOS/SOS.UnitTests/Scripts/ClrStackWithNumberOfFrames.script b/src/SOS/SOS.UnitTests/Scripts/ClrStackWithNumberOfFrames.script new file mode 100644 index 0000000000..29fedbfa2e --- /dev/null +++ b/src/SOS/SOS.UnitTests/Scripts/ClrStackWithNumberOfFrames.script @@ -0,0 +1,57 @@ +# Divide By Zero debugging scenario +# 1) Load the executable +# 2) Run the executable and wait for it to crash +# 3) Take a dump of the executable. +# 4) Open the dump and compare the output + +CONTINUE + +LOADSOS + +# Verify that ClrStack with number of frames works +SOSCOMMAND:ClrStack -c 1 +VERIFY:.*OS Thread Id:\s+0x\s+.* +VERIFY:\s+Child\s+SP\s+IP\s+Call Site\s+ +VERIFY:(?:[^\r\n]*\r?\n){3}[ \t]*\r?\n +!VERIFY:(?:[^\r\n]*\r?\n){5}[ \t]*\r?\n + +# Verify that ClrStack with number of frames works +SOSCOMMAND:ClrStack -c 2 +VERIFY:.*OS Thread Id:\s+0x\s+.* +VERIFY:\s+Child\s+SP\s+IP\s+Call Site\s+ +VERIFY:(?:[^\r\n]*\r?\n){4}[ \t]*\r?\n +!VERIFY:(?:[^\r\n]*\r?\n){6}[ \t]*\r?\n + +# Verify that ClrStack with number of frames works +SOSCOMMAND:ClrStack -c 3 +VERIFY:.*OS Thread Id:\s+0x\s+.* +VERIFY:\s+Child\s+SP\s+IP\s+Call Site\s+ +VERIFY:(?:[^\r\n]*\r?\n){5}[ \t]*\r?\n +!VERIFY:(?:[^\r\n]*\r?\n){7}[ \t]*\r?\n + +# Verify that ClrStack with number of frames works +SOSCOMMAND:ClrStack -c 4 +VERIFY:.*OS Thread Id:\s+0x\s+.* +VERIFY:\s+Child\s+SP\s+IP\s+Call Site\s+ +VERIFY:(?:[^\r\n]*\r?\n){6}[ \t]*\r?\n +!VERIFY:(?:[^\r\n]*\r?\n){8}[ \t]*\r?\n + +# Verify that ClrStack with number of frames works using ICorDebug +SOSCOMMAND:ClrStack -i -c 1 +VERIFY:(?:[^\r\n]*\r?\n){8}[ \t]*\r?\n +!VERIFY:(?:[^\r\n]*\r?\n){10}[ \t]*\r?\n + +# Verify that ClrStack with number of frames works using ICorDebug +SOSCOMMAND:ClrStack -i -c 2 +VERIFY:(?:[^\r\n]*\r?\n){9}[ \t]*\r?\n +!VERIFY:(?:[^\r\n]*\r?\n){11}[ \t]*\r?\n + +# Verify that ClrStack with number of frames works using ICorDebug +SOSCOMMAND:ClrStack -i -c 3 +VERIFY:(?:[^\r\n]*\r?\n){10}[ \t]*\r?\n +!VERIFY:(?:[^\r\n]*\r?\n){12}[ \t]*\r?\n + +# Verify that ClrStack with number of frames works using ICorDebug +SOSCOMMAND:ClrStack -i -c 4 +VERIFY:(?:[^\r\n]*\r?\n){11}[ \t]*\r?\n +!VERIFY:(?:[^\r\n]*\r?\n){13}[ \t]*\r?\n diff --git a/src/SOS/SOS.UnitTests/Scripts/DumpGCData.script b/src/SOS/SOS.UnitTests/Scripts/DumpGCData.script new file mode 100644 index 0000000000..b70b0f917f --- /dev/null +++ b/src/SOS/SOS.UnitTests/Scripts/DumpGCData.script @@ -0,0 +1,21 @@ +# +# Verifies DumpGCData command +# + +# Continue to the DebugBreak +CONTINUE +IFDEF:CDB +VERIFY:Break instruction exception - code 80000003 +ENDIF:CDB + +LOADSOS + +# At start of main, there should be no pinned objects +SOSCOMMAND:DumpGCData +VERIFY: pre and post pin: 0 + +CONTINUE + +# At second break, there should be a single pinned object +SOSCOMMAND:DumpGCData +VERIFY: pre and post pin: 1 \ No newline at end of file diff --git a/src/SOS/SOS.UnitTests/Scripts/FindRootsOlderGeneration.script b/src/SOS/SOS.UnitTests/Scripts/FindRootsOlderGeneration.script new file mode 100644 index 0000000000..64eaea385a --- /dev/null +++ b/src/SOS/SOS.UnitTests/Scripts/FindRootsOlderGeneration.script @@ -0,0 +1,38 @@ +# +# Verifies that the !findroots command searches through older generations +# Test requires CDB for notifications +# Added for bug fixed in https://github.com/dotnet/runtime/pull/119396 +# + +# Continue to the DebugBreak +CONTINUE +VERIFY:Break instruction exception - code 80000003 + +LOADSOS + +CONTINUE + +# Call FindRoots to set up GCNotifications +SOSCOMMAND:FindRoots -gen any + +# Enable CLRN notifications +COMMAND:sxe CLRN + +# Should break on a GCNotification +CONTINUE + +# Print list of threads with their stacks +SOSCOMMAND:clrstack -all + +# Switch to main runtime thread +SWITCH_THREAD:0 + +SOSCOMMAND:DumpStackObjects +VERIFY:\s*\s+\s+FindRootsOlderGeneration.Thing\s+ + +SOSCOMMAND:FindRoots \w+\s+()\s+(FindRootsOlderGeneration.Thing)(?!\[\]) +VERIFY:Found 1 unique roots. + +COMMAND:sxn CLRN + +CONTINUE diff --git a/src/SOS/SOS.UnitTests/Scripts/StackTraceSoftwareExceptionFrame.script b/src/SOS/SOS.UnitTests/Scripts/StackTraceSoftwareExceptionFrame.script index de81ee7f15..200313b7e9 100644 --- a/src/SOS/SOS.UnitTests/Scripts/StackTraceSoftwareExceptionFrame.script +++ b/src/SOS/SOS.UnitTests/Scripts/StackTraceSoftwareExceptionFrame.script @@ -36,7 +36,6 @@ VERIFY:\s+\s+\s+\s+.*\s+ SOSCOMMAND:ClrStack VERIFY:.*OS Thread Id:\s+0x\s+.* VERIFY:\s+Child\s+SP\s+IP\s+Call Site\s+ -VERIFY:\s+\s+\s+\[InlinedCallFrame: \]\s+ VERIFY:\s+\s+\s+\[SoftwareExceptionFrame: \]\s+ VERIFY:\s+\s+\s+UserObject\.UseObject(\(.*\))?\s+ VERIFY:\s+\s+\s+Simple\.Main(\(.*\))?\s+ diff --git a/src/SOS/SOS.UnitTests/Scripts/VarargPInvokeInteropMD.script b/src/SOS/SOS.UnitTests/Scripts/VarargPInvokeInteropMD.script new file mode 100644 index 0000000000..4fe7583570 --- /dev/null +++ b/src/SOS/SOS.UnitTests/Scripts/VarargPInvokeInteropMD.script @@ -0,0 +1,24 @@ +# +# Verifies that the !clrstack command properly prints out the correct +# method name in vararg PInvoke scenarios. On some platforms this utilizes a special +# 'reportInteropMD' to find the correct MethodDesc. +# + +# Continue to the DebugBreak +CONTINUE +VERIFY:Break instruction exception - code 80000003 + +LOADSOS + +COMMAND:bm msvcrt!printf + +CONTINUE + +# Print the stack trace +SOSCOMMAND:clrstack + +# Verify InlinedCallFrame method is correct +VERIFY:\s*\s*\s*\[InlinedCallFrame.*\]\s*VarargPInvokeInteropMD.Interop.printf\(System.String, ...\) + +# Verify IL_STUB displays +VERIFY:\s*\s*\s*ILStubClass.IL_STUB_PInvoke\(System.String, Int32, Double, ...\) diff --git a/src/SOS/Strike/clrma/clrma.cpp b/src/SOS/Strike/clrma/clrma.cpp index c62aae06a1..aae001aba6 100644 --- a/src/SOS/Strike/clrma/clrma.cpp +++ b/src/SOS/Strike/clrma/clrma.cpp @@ -9,7 +9,7 @@ HRESULT CLRMAReleaseInstance(); ICLRManagedAnalysis* g_managedAnalysis = nullptr; -int g_clrmaGlobalFlags = ClrmaGlobalFlags::LoggingEnabled | ClrmaGlobalFlags::DacClrmaEnabled | ClrmaGlobalFlags::ManagedClrmaEnabled; +int g_clrmaGlobalFlags = ClrmaGlobalFlags::LoggingEnabled | ClrmaGlobalFlags::DacClrmaEnabled | ClrmaGlobalFlags::ManagedClrmaEnabled | ClrmaGlobalFlags::ModuleEnumeration_EntryPointAndDllModule; // // Exports @@ -63,6 +63,7 @@ DECLARE_API(clrmaconfig) BOOL bDacClrma = FALSE; BOOL bManagedClrma = FALSE; BOOL bLogging = FALSE; + SIZE_T moduleEnumerationScheme = -1; // None=0, EntryPointModule=1, EntryPointAndEntryPointDllModule=2, AllModules=3 CMDOption option[] = { // name, vptr, type, hasValue @@ -71,6 +72,7 @@ DECLARE_API(clrmaconfig) {"-dac", &bDacClrma, COBOOL, FALSE}, {"-managed", &bManagedClrma, COBOOL, FALSE}, {"-logging", &bLogging, COBOOL, FALSE}, + {"-enumScheme", &moduleEnumerationScheme, COSIZE_T, TRUE}, }; if (!GetCMDOption(args, option, ARRAY_SIZE(option), NULL, 0, NULL)) @@ -107,11 +109,32 @@ DECLARE_API(clrmaconfig) { g_clrmaGlobalFlags &= ~ClrmaGlobalFlags::LoggingEnabled; } + if (moduleEnumerationScheme != 0) + { + g_clrmaGlobalFlags &= ~(ClrmaGlobalFlags::ModuleEnumeration_EntryPointModule | + ClrmaGlobalFlags::ModuleEnumeration_EntryPointAndDllModule | + ClrmaGlobalFlags::ModuleEnumeration_AllModules); + } + } + + if (moduleEnumerationScheme != -1) + { + g_clrmaGlobalFlags &= ~(ClrmaGlobalFlags::ModuleEnumeration_EntryPointModule | + ClrmaGlobalFlags::ModuleEnumeration_EntryPointAndDllModule | + ClrmaGlobalFlags::ModuleEnumeration_AllModules); + g_clrmaGlobalFlags |= moduleEnumerationScheme == 1 ? ClrmaGlobalFlags::ModuleEnumeration_EntryPointModule : + moduleEnumerationScheme == 2 ? ClrmaGlobalFlags::ModuleEnumeration_EntryPointAndDllModule : + moduleEnumerationScheme == 3 ? ClrmaGlobalFlags::ModuleEnumeration_AllModules : + 0; } ExtOut("CLRMA logging: %s\n", (g_clrmaGlobalFlags & ClrmaGlobalFlags::LoggingEnabled) ? "enabled (disable with '-disable -logging')" : "disabled (enable with '-enable -logging')"); ExtOut("CLRMA direct DAC support: %s\n", (g_clrmaGlobalFlags & ClrmaGlobalFlags::DacClrmaEnabled) ? "enabled (disable with '-disable -dac')" : "disabled (enable with '-enable -dac')"); ExtOut("CLRMA managed support: %s\n", (g_clrmaGlobalFlags & ClrmaGlobalFlags::ManagedClrmaEnabled) ? "enabled (disable with '-disable -managed')" : "disabled (enable with '-enable -managed')"); + ExtOut("CLRMA module enumeration: %s\n", (g_clrmaGlobalFlags & ClrmaGlobalFlags::ModuleEnumeration_EntryPointModule) ? "Search for crashinfo on EntryPoint module (-enumScheme 1)" : + (g_clrmaGlobalFlags & ClrmaGlobalFlags::ModuleEnumeration_EntryPointAndDllModule) ? "Search for crash info on both EntryPoint and DLL with same name (-enumScheme 2)" : + (g_clrmaGlobalFlags & ClrmaGlobalFlags::ModuleEnumeration_AllModules) ? "Search for crash info on all modules (-enumScheme 3)" : + "Only read crashinfo from Exception if present (use -enumScheme 0)"); return Status; } diff --git a/src/SOS/Strike/clrma/managedanalysis.cpp b/src/SOS/Strike/clrma/managedanalysis.cpp index 24250b4de6..365cc39c4d 100644 --- a/src/SOS/Strike/clrma/managedanalysis.cpp +++ b/src/SOS/Strike/clrma/managedanalysis.cpp @@ -241,6 +241,10 @@ ClrmaManagedAnalysis::AssociateClient( ReleaseHolder clrmaService; if (SUCCEEDED(hr = target->GetService(__uuidof(ICLRMAService), (void**)&clrmaService))) { + TraceInformation("AssociateClient got managed CLRMA service\n"); + clrmaService->SetModuleEnumerationPolicy(g_clrmaGlobalFlags & ClrmaGlobalFlags::ModuleEnumeration_EntryPointModule ? 1 : + g_clrmaGlobalFlags & ClrmaGlobalFlags::ModuleEnumeration_EntryPointAndDllModule ? 2 : + g_clrmaGlobalFlags & ClrmaGlobalFlags::ModuleEnumeration_AllModules ? 3 : 0); if (SUCCEEDED(hr = clrmaService->AssociateClient(m_debugClient))) { m_clrmaService = clrmaService.Detach(); diff --git a/src/SOS/Strike/clrma/managedanalysis.h b/src/SOS/Strike/clrma/managedanalysis.h index 02a80a3304..f108452b29 100644 --- a/src/SOS/Strike/clrma/managedanalysis.h +++ b/src/SOS/Strike/clrma/managedanalysis.h @@ -27,6 +27,9 @@ enum ClrmaGlobalFlags LoggingEnabled = 0x01, // CLRMA logging enabled DacClrmaEnabled = 0x02, // Direct DAC CLRMA code enabled ManagedClrmaEnabled = 0x04, // Native AOT managed support enabled + ModuleEnumeration_EntryPointModule = 0x08, // Use entry point module enumeration scheme + ModuleEnumeration_EntryPointAndDllModule = 0x10, // Use entry point and DLL module enumeration scheme + ModuleEnumeration_AllModules = 0x20, // Use all modules enumeration scheme }; #define MAX_STACK_FRAMES 1000 // Max number of stack frames returned from thread stackwalk diff --git a/src/SOS/Strike/sosdocs.txt b/src/SOS/Strike/sosdocs.txt index af25301273..7196fb6804 100644 --- a/src/SOS/Strike/sosdocs.txt +++ b/src/SOS/Strike/sosdocs.txt @@ -547,7 +547,7 @@ exceptions by switching to the thread in question, and running \\ COMMAND: clrstack. -!ClrStack [-a] [-l] [-p] [-n] [-f] [-r] [-all] +!ClrStack [-a] [-l] [-p] [-n] [-f] [-r] [-all] [-c ] !ClrStack [-a] [-l] [-p] [-i] [variable name] [frame] ClrStack attempts to provide a true stack trace for managed code only. It is @@ -566,6 +566,8 @@ The -r option dumps the registers for each stack frame. The -all option dumps all the managed threads' stacks. +The -c option limits the number of the frames that will be printed. + If the debugger has the option SYMOPT_LOAD_LINES specified (either by the .lines or .symopt commands), SOS will look up the symbols for every managed frame and if successful will display the corresponding source file name and @@ -1647,6 +1649,9 @@ Paremeters: Variable AsyncPinned SizedRef + Dependent + WeakWinRT + WeakInteriorPointer Sometimes the source of a memory leak is a GCHandle leak. For example, code might keep a 50 Megabyte array alive because a strong GCHandle points to it, diff --git a/src/SOS/Strike/sosdocsunix.txt b/src/SOS/Strike/sosdocsunix.txt index 7c65ad761e..443a134a4e 100644 --- a/src/SOS/Strike/sosdocsunix.txt +++ b/src/SOS/Strike/sosdocsunix.txt @@ -1433,6 +1433,9 @@ Paremeters: Variable AsyncPinned SizedRef + Dependent + WeakWinRT + WeakInteriorPointer Sometimes the source of a memory leak is a GCHandle leak. For example, code might keep a 50 Megabyte array alive because a strong GCHandle points to it, diff --git a/src/SOS/Strike/strike.cpp b/src/SOS/Strike/strike.cpp index 2c86da4f21..4e3f74e9e5 100644 --- a/src/SOS/Strike/strike.cpp +++ b/src/SOS/Strike/strike.cpp @@ -10593,7 +10593,7 @@ class ClrStackImplWithICorDebug // * Consider interleaving this code back into the main body of !clrstack if it turns // out that there's a lot of duplication of code between these two functions. // (Still unclear how things will look once locals is implemented.) - static HRESULT ClrStackFromPublicInterface(BOOL bParams, BOOL bLocals, BOOL bSuppressLines, __in_z WCHAR* varToExpand = NULL, int onlyShowFrame = -1) + static HRESULT ClrStackFromPublicInterface(BOOL bParams, BOOL bLocals, BOOL bSuppressLines, __in_z WCHAR* varToExpand = NULL, int onlyShowFrame = -1, size_t nFrames = 0) { HRESULT Status; @@ -10627,11 +10627,14 @@ class ClrStackImplWithICorDebug #endif int currentFrame = -1; + size_t nPrintedFrames = 0; for (Status = S_OK; ; Status = pStackWalk->Next()) { + if (nPrintedFrames >= nFrames && nFrames != 0) + break; currentFrame++; - + nPrintedFrames++; if (Status == CORDBG_S_AT_END_OF_STACK) { ExtOut("Stack walk complete.\n"); @@ -10686,8 +10689,9 @@ class ClrStackImplWithICorDebug // appears leafier than the base-part of the range of the currently iterated // stack frame? I think I like that better. _ASSERTE(pFrame != NULL); - IfFailRet(internalFrameManager.PrintPrecedingInternalFrames(pFrame)); - + IfFailRet(internalFrameManager.PrintPrecedingInternalFrames(pFrame, nPrintedFrames, nFrames)); + if (nPrintedFrames > nFrames && nFrames != 0) + break; // Print the stack and instruction pointers. DMLOut("%p %s ", SOS_PTR(sp), DMLIP(ip)); @@ -10852,7 +10856,7 @@ void PrintRef(const SOSStackRefData &ref, TableOutput &out) class ClrStackImpl { public: - static void PrintThread(ULONG osID, BOOL bParams, BOOL bLocals, BOOL bSuppressLines, BOOL bGC, BOOL bFull, BOOL bDisplayRegVals) + static void PrintThread(ULONG osID, BOOL bParams, BOOL bLocals, BOOL bSuppressLines, BOOL bGC, BOOL bFull, BOOL bDisplayRegVals, size_t nFrames) { _ASSERTE(g_targetMachine != nullptr); @@ -10899,6 +10903,7 @@ class ClrStackImpl int frameNumber = 0; int internalFrames = 0; + size_t printedFrames = 0; do { if (IsInterrupt()) @@ -10987,11 +10992,13 @@ class ClrStackImpl if (bParams || bLocals) PrintArgsAndLocals(pStackWalk, bParams, bLocals); } + printedFrames++; } if (bDisplayRegVals) PrintManagedFrameContext(pStackWalk); - + if (printedFrames == nFrames && nFrames != 0) + break; hr = pStackWalk->Next(); } while (hr == S_OK); @@ -11008,9 +11015,10 @@ class ClrStackImpl #endif // FEATURE_PAL } - while (numNativeFrames > 0) + while (numNativeFrames > 0 && ((printedFrames < nFrames && nFrames != 0) || nFrames == 0)) { PrintNativeStackFrame(out, currentNativeFrame, bSuppressLines); + printedFrames++; currentNativeFrame++; numNativeFrames--; } @@ -11203,7 +11211,7 @@ class ClrStackImpl } } - static void PrintCurrentThread(BOOL bParams, BOOL bLocals, BOOL bSuppressLines, BOOL bGC, BOOL bNative, BOOL bDisplayRegVals) + static void PrintCurrentThread(BOOL bParams, BOOL bLocals, BOOL bSuppressLines, BOOL bGC, BOOL bNative, BOOL bDisplayRegVals, size_t nFrames) { ULONG id = 0; ULONG osid = 0; @@ -11213,10 +11221,10 @@ class ClrStackImpl g_ExtSystem->GetCurrentThreadId(&id); ExtOut("(%d)\n", id); - PrintThread(osid, bParams, bLocals, bSuppressLines, bGC, bNative, bDisplayRegVals); + PrintThread(osid, bParams, bLocals, bSuppressLines, bGC, bNative, bDisplayRegVals, nFrames); } - static void PrintAllThreads(BOOL bParams, BOOL bLocals, BOOL bSuppressLines, BOOL bGC, BOOL bNative, BOOL bDisplayRegVals) + static void PrintAllThreads(BOOL bParams, BOOL bLocals, BOOL bSuppressLines, BOOL bGC, BOOL bNative, BOOL bDisplayRegVals, size_t nFrames) { HRESULT Status; @@ -11242,7 +11250,7 @@ class ClrStackImpl if (Thread.osThreadId != 0) { ExtOut("OS Thread Id: 0x%x\n", Thread.osThreadId); - PrintThread(Thread.osThreadId, bParams, bLocals, bSuppressLines, bGC, bNative, bDisplayRegVals); + PrintThread(Thread.osThreadId, bParams, bLocals, bSuppressLines, bGC, bNative, bDisplayRegVals, nFrames); } CurThread = Thread.nextThread; } @@ -11653,6 +11661,7 @@ DECLARE_API(ClrStack) BOOL bDisplayRegVals = FALSE; BOOL bAllThreads = FALSE; DWORD frameToDumpVariablesFor = -1; + size_t nFrames = 0; StringHolder cvariableName; ArrayHolder wvariableName = new NOTHROW WCHAR[mdNameLen]; if (wvariableName == NULL) @@ -11676,6 +11685,7 @@ DECLARE_API(ClrStack) {"-f", &bFull, COBOOL, FALSE}, {"-r", &bDisplayRegVals, COBOOL, FALSE }, {"/d", &dml, COBOOL, FALSE}, + {"-c", &nFrames, COSIZE_T, TRUE} }; CMDValue arg[] = { // vptr, type @@ -11720,14 +11730,14 @@ DECLARE_API(ClrStack) bParams = bLocals = TRUE; EnableDMLHolder dmlHolder(TRUE); - return ClrStackImplWithICorDebug::ClrStackFromPublicInterface(bParams, bLocals, FALSE, wvariableName, frameToDumpVariablesFor); + return ClrStackImplWithICorDebug::ClrStackFromPublicInterface(bParams, bLocals, FALSE, wvariableName, frameToDumpVariablesFor, nFrames); } if (bAllThreads) { - ClrStackImpl::PrintAllThreads(bParams, bLocals, bSuppressLines, bGC, bFull, bDisplayRegVals); + ClrStackImpl::PrintAllThreads(bParams, bLocals, bSuppressLines, bGC, bFull, bDisplayRegVals, nFrames); } else { - ClrStackImpl::PrintCurrentThread(bParams, bLocals, bSuppressLines, bGC, bFull, bDisplayRegVals); + ClrStackImpl::PrintCurrentThread(bParams, bLocals, bSuppressLines, bGC, bFull, bDisplayRegVals, nFrames); } return S_OK; diff --git a/src/SOS/Strike/util.cpp b/src/SOS/Strike/util.cpp index c45a7ccc67..a4731d5cba 100644 --- a/src/SOS/Strike/util.cpp +++ b/src/SOS/Strike/util.cpp @@ -5588,12 +5588,17 @@ HRESULT InternalFrameManager::Init(ICorDebugThread3 * pThread3) &(m_rgpInternalFrame2[0])); } -HRESULT InternalFrameManager::PrintPrecedingInternalFrames(ICorDebugFrame * pFrame) +HRESULT InternalFrameManager::PrintPrecedingInternalFrames(ICorDebugFrame * pFrame, size_t &nPrintedFrames, size_t nNumberOfFrames) { HRESULT Status; for (; m_iInternalFrameCur < m_cInternalFramesActual; m_iInternalFrameCur++) { + if (nPrintedFrames > nNumberOfFrames && nNumberOfFrames != 0) + { + // We have printed enough frames, so we're done + return S_OK; + } BOOL bIsCloser = FALSE; IfFailRet(m_rgpInternalFrame2[m_iInternalFrameCur]->IsCloserToLeaf(pFrame, &bIsCloser)); @@ -5603,14 +5608,14 @@ HRESULT InternalFrameManager::PrintPrecedingInternalFrames(ICorDebugFrame * pFra return S_OK; } - IfFailRet(PrintCurrentInternalFrame()); + IfFailRet(PrintCurrentInternalFrame(nPrintedFrames)); } // Exhausted list of internal frames. Done! return S_OK; } -HRESULT InternalFrameManager::PrintCurrentInternalFrame() +HRESULT InternalFrameManager::PrintCurrentInternalFrame(size_t &nPrintedFrames) { _ASSERTE(m_iInternalFrameCur < m_cInternalFramesActual); @@ -5675,7 +5680,7 @@ HRESULT InternalFrameManager::PrintCurrentInternalFrame() DMLOut("%p %s ", SOS_PTR(address), SOS_PTR(0)); ExtOut("[%s: %p]\n", szFrameType, SOS_PTR(address)); - + nPrintedFrames++; return S_OK; } diff --git a/src/SOS/Strike/util.h b/src/SOS/Strike/util.h index c88f54a21f..3598ee7879 100644 --- a/src/SOS/Strike/util.h +++ b/src/SOS/Strike/util.h @@ -2290,10 +2290,10 @@ class InternalFrameManager public: InternalFrameManager(); HRESULT Init(ICorDebugThread3 * pThread3); - HRESULT PrintPrecedingInternalFrames(ICorDebugFrame * pFrame); + HRESULT PrintPrecedingInternalFrames(ICorDebugFrame * pFrame, size_t &nPrintedFrames, size_t nNumberOfFrames); private: - HRESULT PrintCurrentInternalFrame(); + HRESULT PrintCurrentInternalFrame(size_t &nPrintedFrames); }; #undef LIMITED_METHOD_DAC_CONTRACT diff --git a/src/SOS/extensions/hostcoreclr.cpp b/src/SOS/extensions/hostcoreclr.cpp index fa5d8f592c..e9e48eb6c7 100644 --- a/src/SOS/extensions/hostcoreclr.cpp +++ b/src/SOS/extensions/hostcoreclr.cpp @@ -475,11 +475,6 @@ static HRESULT GetHostRuntime(std::string& coreClrPath, std::string& hostRuntime // If the hosting runtime isn't already set, use the runtime we are debugging if (g_hostRuntimeDirectory == nullptr) { -#if defined(HOST_FREEBSD) - TraceHostingError("FreeBSD not supported\n"); - return E_FAIL; -#else - HRESULT Status = E_FAIL; std::vector strategyList = { { ProbeEnvVarInstallationHint, RuntimeHostingConstants::DotnetRootArchSpecificEnvVar } @@ -545,7 +540,6 @@ static HRESULT GetHostRuntime(std::string& coreClrPath, std::string& hostRuntime coreClrPath.append(DIRECTORY_SEPARATOR_STR_A); coreClrPath.append(MAKEDLLNAME_A("coreclr")); return S_OK; -#endif } /**********************************************************************\ diff --git a/src/SOS/inc/clrmaservice.h b/src/SOS/inc/clrmaservice.h index 4887d035f0..8236ad548e 100644 --- a/src/SOS/inc/clrmaservice.h +++ b/src/SOS/inc/clrmaservice.h @@ -31,6 +31,9 @@ ICLRMAService : public IUnknown virtual HRESULT STDMETHODCALLTYPE GetObjectInspection( ICLRMAObjectInspection **ppObjectInspection) = 0; + + virtual HRESULT STDMETHODCALLTYPE SetModuleEnumerationPolicy( + ULONG moduleEnumerationPolicy) = 0; }; #ifdef __cplusplus diff --git a/src/Tools/Common/Commands/Utils.cs b/src/Tools/Common/Commands/Utils.cs index 0b28a7ff2e..68d2f8241e 100644 --- a/src/Tools/Common/Commands/Utils.cs +++ b/src/Tools/Common/Commands/Utils.cs @@ -5,6 +5,7 @@ using System.Diagnostics; using System.Collections.Generic; using Microsoft.Diagnostics.NETCore.Client; +using Microsoft.Diagnostics.Tools.Common; namespace Microsoft.Internal.Common.Utils { @@ -147,7 +148,12 @@ internal sealed class LineRewriter { public int LineToClear { get; set; } - public LineRewriter() { } + private IConsole Console { get; } + + public LineRewriter(IConsole console) + { + Console = console; + } // ANSI escape codes: // [2K => clear current line diff --git a/src/Tools/dotnet-counters/Exporters/DefaultConsole.cs b/src/Tools/Common/DefaultConsole.cs similarity index 73% rename from src/Tools/dotnet-counters/Exporters/DefaultConsole.cs rename to src/Tools/Common/DefaultConsole.cs index 64d19b72ab..974c80a21c 100644 --- a/src/Tools/dotnet-counters/Exporters/DefaultConsole.cs +++ b/src/Tools/Common/DefaultConsole.cs @@ -2,8 +2,10 @@ // The .NET Foundation licenses this file to you under the MIT license. using System; +using System.IO; +using Microsoft.Diagnostics.Tools.Common; -namespace Microsoft.Diagnostics.Tools.Counters.Exporters +namespace Microsoft.Diagnostics.Tools.Common { /// /// The default implementation of IConsole maps everything to System.Console. In the future @@ -27,10 +29,24 @@ public DefaultConsole(bool useAnsi) public bool CursorVisible { get => Console.CursorVisible; set { Console.CursorVisible = value; } } #pragma warning restore CA1416 + public int CursorLeft => Console.CursorLeft; + public int CursorTop => Console.CursorTop; public int BufferWidth => Console.BufferWidth; + public int BufferHeight => Console.BufferHeight; + + public bool IsOutputRedirected => Console.IsOutputRedirected; + + public bool IsInputRedirected => Console.IsInputRedirected; + + public bool KeyAvailable => Console.KeyAvailable; + + public TextWriter Out => Console.Out; + + public TextWriter Error => Console.Error; + public void Clear() { if (_useAnsi) @@ -57,5 +73,7 @@ public void SetCursorPosition(int col, int row) public void Write(string text) => Console.Write(text); public void WriteLine(string text) => Console.WriteLine(text); public void WriteLine() => Console.WriteLine(); + public ConsoleKeyInfo ReadKey() => Console.ReadKey(); + public ConsoleKeyInfo ReadKey(bool intercept) => Console.ReadKey(intercept); } } diff --git a/src/Tools/Common/DsRouterProcessLauncher.cs b/src/Tools/Common/DsRouterProcessLauncher.cs index 626c333227..e4c93efa30 100644 --- a/src/Tools/Common/DsRouterProcessLauncher.cs +++ b/src/Tools/Common/DsRouterProcessLauncher.cs @@ -127,8 +127,10 @@ public int Start(string dsrouterCommand, CancellationToken ct) dotnetDsrouterTool = Path.Combine(toolsRoot, dotnetDsrouterTool); } + using Process currentProcess = Process.GetCurrentProcess(); + // Block SIGINT and SIGQUIT in child process. - dsrouterCommand += " --block-signals SIGINT;SIGQUIT"; + dsrouterCommand += $" --block-signals SIGINT;SIGQUIT --parentprocess \"{currentProcess.Id}:{currentProcess.ProcessName}\""; _childProc = new Process(); diff --git a/src/Tools/Common/IConsole.cs b/src/Tools/Common/IConsole.cs new file mode 100644 index 0000000000..2e2dca9465 --- /dev/null +++ b/src/Tools/Common/IConsole.cs @@ -0,0 +1,36 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System; +using System.IO; + +namespace Microsoft.Diagnostics.Tools.Common +{ + /// + /// Abstraction over console operations so tools can render to custom consoles in tests. + /// Mirrors the APIs dotnet-counters and dotnet-trace need for their renderers. + /// + internal interface IConsole + { + int WindowHeight { get; } + int WindowWidth { get; } + bool CursorVisible { get; set; } + int CursorLeft { get; } + int CursorTop { get; } + int BufferWidth { get; } + int BufferHeight { get; } + bool IsOutputRedirected { get; } + bool IsInputRedirected { get; } + bool KeyAvailable { get; } + TextWriter Out { get; } + TextWriter Error { get; } + + void Clear(); + void SetCursorPosition(int col, int row); + void Write(string text); + void WriteLine(); + void WriteLine(string text); + ConsoleKeyInfo ReadKey(); + ConsoleKeyInfo ReadKey(bool intercept); + } +} diff --git a/src/Tools/dotnet-counters/CounterMonitor.cs b/src/Tools/dotnet-counters/CounterMonitor.cs index 9a6e476aae..9235c65a26 100644 --- a/src/Tools/dotnet-counters/CounterMonitor.cs +++ b/src/Tools/dotnet-counters/CounterMonitor.cs @@ -14,6 +14,7 @@ using Microsoft.Diagnostics.Monitoring; using Microsoft.Diagnostics.Monitoring.EventPipe; using Microsoft.Diagnostics.NETCore.Client; +using Microsoft.Diagnostics.Tools.Common; using Microsoft.Diagnostics.Tools.Counters.Exporters; using Microsoft.Internal.Common.Utils; @@ -247,6 +248,10 @@ public async Task Monitor( _stdError.WriteLine(e.Message); return ReturnCode.ArgumentError; } + finally + { + DsRouterProcessLauncher.Launcher.Cleanup(); + } } public async Task Collect( CancellationToken ct, @@ -350,6 +355,10 @@ public async Task Collect( _stdError.WriteLine(e.Message); return ReturnCode.ArgumentError; } + finally + { + DsRouterProcessLauncher.Launcher.Cleanup(); + } } private static void ValidateNonNegative(int value, string argName) diff --git a/src/Tools/dotnet-counters/Exporters/ConsoleWriter.cs b/src/Tools/dotnet-counters/Exporters/ConsoleWriter.cs index 0acab08869..ff92bf39a9 100644 --- a/src/Tools/dotnet-counters/Exporters/ConsoleWriter.cs +++ b/src/Tools/dotnet-counters/Exporters/ConsoleWriter.cs @@ -6,6 +6,7 @@ using System.Globalization; using System.Linq; using Microsoft.Diagnostics.Monitoring.EventPipe; +using Microsoft.Diagnostics.Tools.Common; namespace Microsoft.Diagnostics.Tools.Counters.Exporters { @@ -208,17 +209,23 @@ private bool RenderTagSetsInColumnMode(ref int row, ObservedCounter counter) AdjustColumnsLength(columnHeaderLen, maxValueColumnLen); //print the header string headerRow = ""; + string headerDelimiter = ""; for (int i = 0; i < observedTags.Count; i++) { (string header, string[] values) observedTag = observedTags[i]; string headerWithSpaces = MakeFixedWidth(observedTag.header, Math.Max(maxValueColumnLen[i], columnHeaderLen[i]), truncateLeft: true); headerWithSpaces += " "; headerRow += headerWithSpaces; + headerDelimiter += new string('-', Math.Max(maxValueColumnLen[i], columnHeaderLen[i])) + " "; } if (!RenderCounterNameRow(ref row, headerRow, indentLevel: 2)) { return false; } + if (!RenderCounterNameRow(ref row, headerDelimiter, indentLevel: 2)) + { + return false; + } //print each line int linePos = 0; foreach (ObservedTagSet tagSet in counter.TagSets.Values.OrderBy(t => t.Tags)) diff --git a/src/Tools/dotnet-counters/Exporters/IConsole.cs b/src/Tools/dotnet-counters/Exporters/IConsole.cs deleted file mode 100644 index 6691bcb6d9..0000000000 --- a/src/Tools/dotnet-counters/Exporters/IConsole.cs +++ /dev/null @@ -1,32 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Microsoft.Diagnostics.Tools.Counters.Exporters -{ - /// - /// This interface abstracts the console writing code from the physical console - /// and allows us to do unit testing. It is similar to the IConsole interface from System.CommandLine - /// but unfortunately that one doesn't support all the APIs we use such as the size and positioning of - /// the cursor. - /// - internal interface IConsole - { - int WindowHeight { get; } - int WindowWidth { get; } - bool CursorVisible { get; set; } - int CursorTop { get; } - int BufferWidth { get; } - - void Clear(); - void SetCursorPosition(int col, int row); - void Write(string text); - void WriteLine(string text); - void WriteLine(); - } -} diff --git a/src/Tools/dotnet-counters/Program.cs b/src/Tools/dotnet-counters/Program.cs index b15dca5412..2be10faea4 100644 --- a/src/Tools/dotnet-counters/Program.cs +++ b/src/Tools/dotnet-counters/Program.cs @@ -33,7 +33,8 @@ private static Command MonitorCommand() MaxHistogramOption, MaxTimeSeriesOption, DurationOption, - ShowDeltasOption + ShowDeltasOption, + DSRouterOption }; monitorCommand.TreatUnmatchedTokensAsErrors = false; // see the logic in Main @@ -50,7 +51,7 @@ private static Command MonitorCommand() maxTimeSeries: parseResult.GetValue(MaxTimeSeriesOption), duration: parseResult.GetValue(DurationOption), showDeltas: parseResult.GetValue(ShowDeltasOption), - dsrouter: string.Empty + dsrouter: parseResult.GetValue(DSRouterOption) )); return monitorCommand; @@ -72,7 +73,8 @@ private static Command CollectCommand() ResumeRuntimeOption, MaxHistogramOption, MaxTimeSeriesOption, - DurationOption + DurationOption, + DSRouterOption }; collectCommand.TreatUnmatchedTokensAsErrors = false; // see the logic in Main @@ -90,7 +92,7 @@ private static Command CollectCommand() maxHistograms: parseResult.GetValue(MaxHistogramOption), maxTimeSeries: parseResult.GetValue(MaxTimeSeriesOption), duration: parseResult.GetValue(DurationOption), - dsrouter: string.Empty)); + dsrouter: parseResult.GetValue(DSRouterOption))); return collectCommand; } @@ -139,6 +141,12 @@ private static Command CollectCommand() " To discover well-known provider and counter names, please visit https://learn.microsoft.com/dotnet/core/diagnostics/built-in-metrics." }; + private static readonly Option DSRouterOption = + new("--dsrouter") + { + Description = @"The dsrouter command to start. Value should be one of ios, ios-sim, android, android-emu. Run `dotnet-dsrouter -h` for more information." + }; + private static Command ListCommand() { Command listCommand = new( diff --git a/src/Tools/dotnet-counters/dotnet-counters.csproj b/src/Tools/dotnet-counters/dotnet-counters.csproj index 95bf4c4060..1702d0213c 100644 --- a/src/Tools/dotnet-counters/dotnet-counters.csproj +++ b/src/Tools/dotnet-counters/dotnet-counters.csproj @@ -22,7 +22,9 @@ - + + + diff --git a/src/Tools/dotnet-dsrouter/ADBTcpRouterFactory.cs b/src/Tools/dotnet-dsrouter/ADBTcpRouterFactory.cs index c96ddcc257..218064ae38 100644 --- a/src/Tools/dotnet-dsrouter/ADBTcpRouterFactory.cs +++ b/src/Tools/dotnet-dsrouter/ADBTcpRouterFactory.cs @@ -8,6 +8,7 @@ using System.Threading.Tasks; using Microsoft.Diagnostics.NETCore.Client; using Microsoft.Extensions.Logging; +using Xamarin.Android.Tools; namespace Microsoft.Diagnostics.Tools.DiagnosticsServerRouter { @@ -65,7 +66,7 @@ public static void AdbRemovePortReverse(int localPort, int remotePort, bool owns public static bool RunAdbCommandInternal(string command, string expectedOutput, int expectedExitCode, bool rethrow, ILogger logger) { - string sdkRoot = Environment.GetEnvironmentVariable("ANDROID_SDK_ROOT"); + string sdkRoot = GetAndroidSdkPath(logger); string adbTool = "adb"; if (!string.IsNullOrEmpty(sdkRoot)) @@ -127,6 +128,38 @@ public static bool RunAdbCommandInternal(string command, string expectedOutput, return processStartedResult && expectedOutputResult && expectedExitCodeResult; } + + private static string AndroidSdkPath; + + private static string GetAndroidSdkPath(ILogger logger) + { + if (AndroidSdkPath is not null) + { + return AndroidSdkPath; + } + + void sdklogger(TraceLevel level, string message) + { + switch (level) + { + case TraceLevel.Error: + logger?.LogError(message); + break; + case TraceLevel.Warning: + logger?.LogWarning(message); + break; + case TraceLevel.Info: + logger?.LogInformation(message); + break; + case TraceLevel.Verbose: + logger?.LogDebug(message); + break; + } + } + + // AndroidSdkInfo checks $ANDROID_SDK_ROOT, $ANDROID_HOME, and default locations. + return AndroidSdkPath = new AndroidSdkInfo(logger: sdklogger).AndroidSdkPath; + } } internal sealed class ADBTcpServerRouterFactory : TcpServerRouterFactory @@ -166,7 +199,7 @@ public override void Start() _ownsPortReverse = false; Logger.LogError("Failed setting up adb port reverse." + " This might lead to problems communicating with Android application." + - " Make sure env variable ANDROID_SDK_ROOT is set and points to an Android SDK." + + " Make sure env variable $ANDROID_HOME is set and points to an Android SDK." + $" Executing with unknown adb status for port {_localPort}."); base.Start(); return; @@ -245,7 +278,7 @@ public override void Start() _ownsPortForward = false; Logger.LogError("Failed setting up adb port forward." + " This might lead to problems communicating with Android application." + - " Make sure env variable ANDROID_SDK_ROOT is set and points to an Android SDK." + + " Make sure env variable $ANDROID_HOME is set and points to an Android SDK." + $" Executing with unknown adb status for port {_localPort}."); return; } diff --git a/src/Tools/dotnet-dsrouter/DiagnosticsServerRouterCommands.cs b/src/Tools/dotnet-dsrouter/DiagnosticsServerRouterCommands.cs index f7f64a122f..bc0b0a3473 100644 --- a/src/Tools/dotnet-dsrouter/DiagnosticsServerRouterCommands.cs +++ b/src/Tools/dotnet-dsrouter/DiagnosticsServerRouterCommands.cs @@ -357,41 +357,41 @@ public async Task RunIpcClientWebSocketServerRouter(CancellationToken token } } - public async Task RunIpcServerIOSSimulatorRouter(CancellationToken token, int runtimeTimeout, string verbose, bool info) + public async Task RunIpcServerIOSSimulatorRouter(CancellationToken token, int runtimeTimeout, string verbose, bool info, string parentProcess) { if (info || ParseLogLevel(verbose) <= LogLevel.Information) { - logRouterUsageInfo("ios simulator", "127.0.0.1:9000", true); + logRouterUsageInfo("ios simulator", "127.0.0.1", "9000", true, parentProcess); } return await RunIpcServerTcpClientRouter(token, "", "127.0.0.1:9000", runtimeTimeout, verbose, "").ConfigureAwait(false); } - public async Task RunIpcServerIOSRouter(CancellationToken token, int runtimeTimeout, string verbose, bool info) + public async Task RunIpcServerIOSRouter(CancellationToken token, int runtimeTimeout, string verbose, bool info, string parentProcess) { if (info || ParseLogLevel(verbose) <= LogLevel.Information) { - logRouterUsageInfo("ios device", "127.0.0.1:9000", true); + logRouterUsageInfo("ios device", "127.0.0.1", "9000", true, parentProcess); } return await RunIpcServerTcpClientRouter(token, "", "127.0.0.1:9000", runtimeTimeout, verbose, "iOS").ConfigureAwait(false); } - public async Task RunIpcServerAndroidEmulatorRouter(CancellationToken token, int runtimeTimeout, string verbose, bool info) + public async Task RunIpcServerAndroidEmulatorRouter(CancellationToken token, int runtimeTimeout, string verbose, bool info, string parentProcess) { if (info || ParseLogLevel(verbose) <= LogLevel.Information) { - logRouterUsageInfo("android emulator", "10.0.2.2:9000", false); + logRouterUsageInfo("android emulator", "10.0.2.2", "9000", false, parentProcess); } return await RunIpcServerTcpServerRouter(token, "", "127.0.0.1:9000", runtimeTimeout, verbose, "").ConfigureAwait(false); } - public async Task RunIpcServerAndroidRouter(CancellationToken token, int runtimeTimeout, string verbose, bool info) + public async Task RunIpcServerAndroidRouter(CancellationToken token, int runtimeTimeout, string verbose, bool info, string parentProcess) { if (info || ParseLogLevel(verbose) <= LogLevel.Information) { - logRouterUsageInfo("android device", "127.0.0.1:9000", false); + logRouterUsageInfo("android device", "127.0.0.1", "9000", false, parentProcess); } return await RunIpcServerTcpServerRouter(token, "", "127.0.0.1:9001", runtimeTimeout, verbose, "Android").ConfigureAwait(false); @@ -501,7 +501,7 @@ private static LogLevel ParseLogLevel(string verbose) return logLevel; } - private static void logRouterUsageInfo(string deviceName, string deviceTcpIpAddress, bool deviceListenMode) + private static void logRouterUsageInfo(string deviceName, string deviceTcpIpAddress, string deviceTcpIpPort, bool deviceListenMode, string parentProcess) { StringBuilder message = new(); @@ -509,13 +509,16 @@ private static void logRouterUsageInfo(string deviceName, string deviceTcpIpAddr int pid = Process.GetCurrentProcess().Id; message.AppendLine($"How to connect current dotnet-dsrouter pid={pid} with {deviceName} and diagnostics tooling."); - message.AppendLine($"Start an application on {deviceName} with ONE of the following environment variables set:"); + message.AppendLine($"Build and run your application on {deviceName} such as:"); message.AppendLine("[Default Tracing]"); - message.AppendLine($"DOTNET_DiagnosticPorts={deviceTcpIpAddress},nosuspend,{listenMode}"); + message.AppendLine($"dotnet build -t:Run -c Release -p:DiagnosticAddress={deviceTcpIpAddress} -p:DiagnosticPort={deviceTcpIpPort} -p:DiagnosticSuspend=false -p:DiagnosticListenMode={listenMode}"); message.AppendLine("[Startup Tracing]"); - message.AppendLine($"DOTNET_DiagnosticPorts={deviceTcpIpAddress},suspend,{listenMode}"); - message.AppendLine($"Run diagnotic tool connecting application on {deviceName} through dotnet-dsrouter pid={pid}:"); - message.AppendLine($"dotnet-trace collect -p {pid}"); + message.AppendLine($"dotnet build -t:Run -c Release -p:DiagnosticAddress={deviceTcpIpAddress} -p:DiagnosticPort={deviceTcpIpPort} -p:DiagnosticSuspend=true -p:DiagnosticListenMode={listenMode}"); + if (string.IsNullOrEmpty(parentProcess)) + { + message.AppendLine($"Run diagnotic tool connecting application on {deviceName} through dotnet-dsrouter pid={pid}:"); + message.AppendLine($"dotnet-trace collect -p {pid}"); + } message.AppendLine($"See https://learn.microsoft.com/en-us/dotnet/core/diagnostics/dotnet-dsrouter for additional details and examples."); ConsoleColor currentColor = Console.ForegroundColor; diff --git a/src/Tools/dotnet-dsrouter/Program.cs b/src/Tools/dotnet-dsrouter/Program.cs index 3738e1b876..bfd3deecfd 100644 --- a/src/Tools/dotnet-dsrouter/Program.cs +++ b/src/Tools/dotnet-dsrouter/Program.cs @@ -156,14 +156,15 @@ private static Command IOSSimulatorRouterCommand() "Router is configured using an IPC server (connecting to by diagnostic tools) " + "and a TCP/IP server (accepting runtime TCP client).") { - RuntimeTimeoutOption, VerboseOption, InfoOption, BlockedSignalsOption + RuntimeTimeoutOption, VerboseOption, InfoOption, BlockedSignalsOption, ParentProcessOption }; command.SetAction((parseResult, ct) => new DiagnosticsServerRouterCommands().RunIpcServerIOSSimulatorRouter( ct, runtimeTimeout: parseResult.GetValue(RuntimeTimeoutOption), verbose: parseResult.GetValue(VerboseOption), - info: parseResult.GetValue(InfoOption) + info: parseResult.GetValue(InfoOption), + parentProcess: parseResult.GetValue(ParentProcessOption) )); return command; @@ -177,14 +178,15 @@ private static Command IOSRouterCommand() "Router is configured using an IPC server (connecting to by diagnostic tools) " + "and a TCP/IP client (connecting runtime TCP server over usbmux).") { - RuntimeTimeoutOption, VerboseOption, InfoOption, BlockedSignalsOption + RuntimeTimeoutOption, VerboseOption, InfoOption, BlockedSignalsOption, ParentProcessOption }; command.SetAction((parseResult, ct) => new DiagnosticsServerRouterCommands().RunIpcServerIOSRouter( ct, runtimeTimeout: parseResult.GetValue(RuntimeTimeoutOption), verbose: parseResult.GetValue(VerboseOption), - info: parseResult.GetValue(InfoOption) + info: parseResult.GetValue(InfoOption), + parentProcess: parseResult.GetValue(ParentProcessOption) )); return command; @@ -198,14 +200,16 @@ private static Command AndroidEmulatorRouterCommand() "Router is configured using an IPC server (connecting to by diagnostic tools) " + "and a TCP/IP server (accepting runtime TCP client).") { - RuntimeTimeoutOption, VerboseOption, InfoOption, BlockedSignalsOption + RuntimeTimeoutOption, VerboseOption, InfoOption, BlockedSignalsOption, ParentProcessOption }; command.SetAction((parseResult, ct) => new DiagnosticsServerRouterCommands().RunIpcServerAndroidEmulatorRouter( ct, runtimeTimeout: parseResult.GetValue(RuntimeTimeoutOption), verbose: parseResult.GetValue(VerboseOption), - info: parseResult.GetValue(InfoOption))); + info: parseResult.GetValue(InfoOption), + parentProcess: parseResult.GetValue(ParentProcessOption) + )); return command; } @@ -218,14 +222,16 @@ private static Command AndroidRouterCommand() "Router is configured using an IPC server (connecting to by diagnostic tools) " + "and a TCP/IP server (accepting runtime TCP client).") { - RuntimeTimeoutOption, VerboseOption, InfoOption, BlockedSignalsOption + RuntimeTimeoutOption, VerboseOption, InfoOption, BlockedSignalsOption, ParentProcessOption }; command.SetAction((parseResult, ct) => new DiagnosticsServerRouterCommands().RunIpcServerAndroidRouter( ct, runtimeTimeout: parseResult.GetValue(RuntimeTimeoutOption), verbose: parseResult.GetValue(VerboseOption), - info: parseResult.GetValue(InfoOption))); + info: parseResult.GetValue(InfoOption), + parentProcess: parseResult.GetValue(ParentProcessOption) + )); return command; } @@ -289,7 +295,7 @@ private static Command AndroidRouterCommand() private static readonly Option ForwardPortOption = new("--forward-port", "-fp") { - Description = "Enable port forwarding, values Android|iOS for TcpClient and only Android for TcpServer. Make sure to set ANDROID_SDK_ROOT before using this option on Android." + Description = "Enable port forwarding, values Android|iOS for TcpClient and only Android for TcpServer. For Android, optionally set $ANDROID_HOME to a valid Android SDK path." }; private static readonly Option BlockedSignalsOption = @@ -304,6 +310,14 @@ private static Command AndroidRouterCommand() Description = "Print info on how to use current dotnet-dsrouter instance with application and diagnostic tooling." }; + private static readonly Option ParentProcessOption = + new("--parentprocess") + { + Description = "If dsrouter was launched from dotnet-trace or another .NET diagnostic tool, contains the parent process ID and name: --parentprocess pid:name", + DefaultValueFactory = _ => "", + Hidden = true + }; + private static Task Main(string[] args) { RootCommand rootCommand = new() diff --git a/src/Tools/dotnet-dsrouter/dotnet-dsrouter.csproj b/src/Tools/dotnet-dsrouter/dotnet-dsrouter.csproj index a84ad77b2c..ebed4febb6 100644 --- a/src/Tools/dotnet-dsrouter/dotnet-dsrouter.csproj +++ b/src/Tools/dotnet-dsrouter/dotnet-dsrouter.csproj @@ -27,6 +27,7 @@ + diff --git a/src/Tools/dotnet-dump/dotnet-dump.csproj b/src/Tools/dotnet-dump/dotnet-dump.csproj index 354c4aad45..53e283c64d 100644 --- a/src/Tools/dotnet-dump/dotnet-dump.csproj +++ b/src/Tools/dotnet-dump/dotnet-dump.csproj @@ -22,7 +22,8 @@ - + + diff --git a/src/Tools/dotnet-gcdump/dotnet-gcdump.csproj b/src/Tools/dotnet-gcdump/dotnet-gcdump.csproj index 4ed980c456..4586ecfc20 100644 --- a/src/Tools/dotnet-gcdump/dotnet-gcdump.csproj +++ b/src/Tools/dotnet-gcdump/dotnet-gcdump.csproj @@ -27,6 +27,7 @@ + diff --git a/src/Tools/dotnet-stack/dotnet-stack.csproj b/src/Tools/dotnet-stack/dotnet-stack.csproj index f58adf089f..beacb323f4 100644 --- a/src/Tools/dotnet-stack/dotnet-stack.csproj +++ b/src/Tools/dotnet-stack/dotnet-stack.csproj @@ -26,6 +26,7 @@ + diff --git a/src/Tools/dotnet-symbol/Program.cs b/src/Tools/dotnet-symbol/Program.cs index 8aa07ddeb7..dc7d330eb8 100644 --- a/src/Tools/dotnet-symbol/Program.cs +++ b/src/Tools/dotnet-symbol/Program.cs @@ -343,6 +343,8 @@ private IEnumerable GetKeys() foreach (string inputFile in inputFiles) { + Tracer.Verbose($"Generating SymbolStore lookup keys for `{inputFile}`..."); + int count = 0; foreach (KeyGenerator generator in GetKeyGenerators(inputFile)) { KeyTypeFlags flags = KeyTypeFlags.None; @@ -381,9 +383,18 @@ private IEnumerable GetKeys() } foreach (SymbolStoreKeyWrapper wrapper in generator.GetKeys(flags).Select((key) => new SymbolStoreKeyWrapper(key, inputFile))) { + count++; yield return wrapper; } } + if (count > 0) + { + Tracer.Verbose($"Generated {count} SymbolStoreKeys for `{inputFile}`."); + } + else + { + Tracer.Verbose($"Could not generate SymbolStoreKeys for `{inputFile}`."); + } } } diff --git a/src/Tools/dotnet-trace/CommandLine/Commands/CollectCommand.cs b/src/Tools/dotnet-trace/CommandLine/Commands/CollectCommand.cs index 054a6e83a7..7376b72ca0 100644 --- a/src/Tools/dotnet-trace/CommandLine/Commands/CollectCommand.cs +++ b/src/Tools/dotnet-trace/CommandLine/Commands/CollectCommand.cs @@ -13,16 +13,25 @@ using System.Threading.Tasks; using Microsoft.Diagnostics.Monitoring.EventPipe; using Microsoft.Diagnostics.NETCore.Client; +using Microsoft.Diagnostics.Tools.Common; using Microsoft.Internal.Common; using Microsoft.Internal.Common.Utils; namespace Microsoft.Diagnostics.Tools.Trace { - internal static class CollectCommandHandler + internal class CollectCommandHandler { - internal static bool IsQuiet { get; set; } + internal bool IsQuiet { get; set; } - private static void ConsoleWriteLine(string str) + public CollectCommandHandler() + { + Console = new DefaultConsole(false); + StartTraceSessionAsync = async (client, config, ct) => new CollectSession(await client.StartEventPipeSessionAsync(config, ct).ConfigureAwait(false)); + ResumeRuntimeAsync = (client, ct) => client.ResumeRuntimeAsync(ct); + CollectSessionEventStream = (name) => new FileStream(name, FileMode.Create, FileAccess.Write); + } + + private void ConsoleWriteLine(string str = "") { if (!IsQuiet) { @@ -54,7 +63,7 @@ private static void ConsoleWriteLine(string str) /// A string, parsed as [payload_field_name]:[payload_field_value] pairs separated by commas, that will stop the trace upon hitting an event with a matching payload. Requires `--stopping-event-provider-name` and `--stopping-event-event-name` to be set. /// Collect rundown events. /// - private static async Task Collect(CancellationToken ct, CommandLineConfiguration cliConfig, int processId, FileInfo output, uint buffersize, string providers, string profile, TraceFileFormat format, TimeSpan duration, string clrevents, string clreventlevel, string name, string diagnosticPort, bool showchildio, bool resumeRuntime, string stoppingEventProviderName, string stoppingEventEventName, string stoppingEventPayloadFilter, bool? rundown, string dsrouter) + internal async Task Collect(CancellationToken ct, CommandLineConfiguration cliConfig, int processId, FileInfo output, uint buffersize, string providers, string profile, TraceFileFormat format, TimeSpan duration, string clrevents, string clreventlevel, string name, string diagnosticPort, bool showchildio, bool resumeRuntime, string stoppingEventProviderName, string stoppingEventEventName, string stoppingEventPayloadFilter, bool? rundown, string dsrouter) { bool collectionStopped = false; bool cancelOnEnter = true; @@ -276,11 +285,11 @@ private static async Task Collect(CancellationToken ct, CommandLineConfigur using (VirtualTerminalMode vTermMode = printStatusOverTime ? VirtualTerminalMode.TryEnable() : null) { - EventPipeSession session = null; + ICollectSession session = null; try { EventPipeSessionConfiguration config = new(providerCollection, (int)buffersize, rundownKeyword: rundownKeyword, requestStackwalk: true); - session = await diagnosticsClient.StartEventPipeSessionAsync(config, ct).ConfigureAwait(false); + session = await StartTraceSessionAsync(diagnosticsClient, config, ct).ConfigureAwait(false); } catch (UnsupportedCommandException e) { @@ -298,7 +307,7 @@ private static async Task Collect(CancellationToken ct, CommandLineConfigur // Debug.Assert(rundownKeyword != EventPipeSession.DefaultRundownKeyword); // EventPipeSessionConfiguration config = new(providerCollection, (int)buffersize, rundownKeyword: EventPipeSession.DefaultRundownKeyword, requestStackwalk: true); - session = await diagnosticsClient.StartEventPipeSessionAsync(config, ct).ConfigureAwait(false); + session = await StartTraceSessionAsync(diagnosticsClient, config, ct).ConfigureAwait(false); } else if (retryStrategy == RetryStrategy.DropKeywordDropRundown) { @@ -314,7 +323,7 @@ private static async Task Collect(CancellationToken ct, CommandLineConfigur // Debug.Assert(rundownKeyword != EventPipeSession.DefaultRundownKeyword); // EventPipeSessionConfiguration config = new(providerCollection, (int)buffersize, rundownKeyword: 0, requestStackwalk: true); - session = await diagnosticsClient.StartEventPipeSessionAsync(config, ct).ConfigureAwait(false); + session = await StartTraceSessionAsync(diagnosticsClient, config, ct).ConfigureAwait(false); } else { @@ -331,7 +340,7 @@ private static async Task Collect(CancellationToken ct, CommandLineConfigur { try { - await diagnosticsClient.ResumeRuntimeAsync(ct).ConfigureAwait(false); + await ResumeRuntimeAsync(diagnosticsClient, ct).ConfigureAwait(false); } catch (UnsupportedCommandException) { @@ -357,18 +366,18 @@ private static async Task Collect(CancellationToken ct, CommandLineConfigur LineRewriter rewriter = null; - using (FileStream fs = new(output.FullName, FileMode.Create, FileAccess.Write)) + using (Stream eventStream = CollectSessionEventStream(output.FullName)) { ConsoleWriteLine($"Process : {processMainModuleFileName}"); - ConsoleWriteLine($"Output File : {fs.Name}"); + ConsoleWriteLine($"Output File : {output.FullName}"); if (shouldStopAfterDuration) { ConsoleWriteLine($"Trace Duration : {duration:dd\\:hh\\:mm\\:ss}"); } - ConsoleWriteLine("\n\n"); + ConsoleWriteLine(); + ConsoleWriteLine(); - FileInfo fileInfo = new(output.FullName); EventMonitor eventMonitor = null; Task copyTask = null; if (hasStoppingEventProviderName) @@ -383,14 +392,14 @@ private static async Task Collect(CancellationToken ct, CommandLineConfigur onPayloadFilterMismatch: (traceEvent) => { ConsoleWriteLine($"One or more field names specified in the payload filter for event '{traceEvent.ProviderName}/{traceEvent.EventName}' do not match any of the known field names: '{string.Join(' ', traceEvent.PayloadNames)}'. As a result the requested stopping event is unreachable; will continue to collect the trace for the remaining specified duration."); }, - eventStream: new PassthroughStream(session.EventStream, fs, (int)buffersize, leaveDestinationStreamOpen: true), + eventStream: new PassthroughStream(session.EventStream, eventStream, (int)buffersize, leaveDestinationStreamOpen: true), callOnEventOnlyOnce: true); copyTask = eventMonitor.ProcessAsync(CancellationToken.None); } else { - copyTask = session.EventStream.CopyToAsync(fs); + copyTask = session.EventStream.CopyToAsync(eventStream); } Task shouldExitTask = copyTask.ContinueWith( (task) => shouldExit.Set(), @@ -400,7 +409,7 @@ private static async Task Collect(CancellationToken ct, CommandLineConfigur if (printStatusOverTime) { - rewriter = new LineRewriter { LineToClear = Console.CursorTop - 1 }; + rewriter = new LineRewriter(Console) { LineToClear = Console.CursorTop - 1 }; Console.CursorVisible = false; if (!rewriter.IsRewriteConsoleLineSupported) { @@ -408,6 +417,7 @@ private static async Task Collect(CancellationToken ct, CommandLineConfigur } } + FileInfo fileInfo = new(output.FullName); Action printStatus = () => { if (printStatusOverTime && rewriter.IsRewriteConsoleLineSupported) { @@ -460,7 +470,8 @@ private static async Task Collect(CancellationToken ct, CommandLineConfigur shouldExitTask.Wait(); } - ConsoleWriteLine($"\nTrace completed."); + ConsoleWriteLine(); + ConsoleWriteLine("Trace completed."); if (format != TraceFileFormat.NetTrace) { @@ -491,7 +502,8 @@ private static async Task Collect(CancellationToken ct, CommandLineConfigur } catch (OperationCanceledException) { - ConsoleWriteLine("\nTrace collection canceled."); + ConsoleWriteLine(); + ConsoleWriteLine("Trace collection canceled."); collectionStopped = true; ret = (int)ReturnCode.TracingError; } @@ -524,7 +536,7 @@ private static async Task Collect(CancellationToken ct, CommandLineConfigur return ret; } - private static void PrintProviders(IReadOnlyList providers, Dictionary enabledBy) + private void PrintProviders(IReadOnlyList providers, Dictionary enabledBy) { ConsoleWriteLine(""); ConsoleWriteLine(string.Format("{0, -40}", "Provider Name") + string.Format("{0, -20}", "Keywords") + @@ -585,27 +597,30 @@ public static Command CollectCommand() collectCommand.TreatUnmatchedTokensAsErrors = false; // see the logic in Program.Main that handles UnmatchedTokens collectCommand.Description = "Collects a diagnostic trace from a currently running process or launch a child process and trace it. Append -- to the collect command to instruct the tool to run a command and trace it immediately. When tracing a child process, the exit code of dotnet-trace shall be that of the traced process unless the trace process encounters an error."; - collectCommand.SetAction((parseResult, ct) => Collect( - ct, - cliConfig: parseResult.Configuration, - processId: parseResult.GetValue(CommonOptions.ProcessIdOption), - output: parseResult.GetValue(OutputPathOption), - buffersize: parseResult.GetValue(CircularBufferOption), - providers: parseResult.GetValue(ProvidersOption) ?? string.Empty, - profile: parseResult.GetValue(ProfileOption) ?? string.Empty, - format: parseResult.GetValue(CommonOptions.FormatOption), - duration: parseResult.GetValue(DurationOption), - clrevents: parseResult.GetValue(CLREventsOption) ?? string.Empty, - clreventlevel: parseResult.GetValue(CLREventLevelOption) ?? string.Empty, - name: parseResult.GetValue(CommonOptions.NameOption), - diagnosticPort: parseResult.GetValue(DiagnosticPortOption) ?? string.Empty, - showchildio: parseResult.GetValue(ShowChildIOOption), - resumeRuntime: parseResult.GetValue(ResumeRuntimeOption), - stoppingEventProviderName: parseResult.GetValue(StoppingEventProviderNameOption), - stoppingEventEventName: parseResult.GetValue(StoppingEventEventNameOption), - stoppingEventPayloadFilter: parseResult.GetValue(StoppingEventPayloadFilterOption), - rundown: parseResult.GetValue(RundownOption), - dsrouter: parseResult.GetValue(DSRouterOption))); + collectCommand.SetAction((parseResult, ct) => + { + CollectCommandHandler handler = new(); + return handler.Collect(ct, + cliConfig: parseResult.Configuration, + processId: parseResult.GetValue(CommonOptions.ProcessIdOption), + output: parseResult.GetValue(OutputPathOption), + buffersize: parseResult.GetValue(CircularBufferOption), + providers: parseResult.GetValue(ProvidersOption) ?? string.Empty, + profile: parseResult.GetValue(ProfileOption) ?? string.Empty, + format: parseResult.GetValue(CommonOptions.FormatOption), + duration: parseResult.GetValue(DurationOption), + clrevents: parseResult.GetValue(CLREventsOption) ?? string.Empty, + clreventlevel: parseResult.GetValue(CLREventLevelOption) ?? string.Empty, + name: parseResult.GetValue(CommonOptions.NameOption), + diagnosticPort: parseResult.GetValue(DiagnosticPortOption) ?? string.Empty, + showchildio: parseResult.GetValue(ShowChildIOOption), + resumeRuntime: parseResult.GetValue(ResumeRuntimeOption), + stoppingEventProviderName: parseResult.GetValue(StoppingEventProviderNameOption), + stoppingEventEventName: parseResult.GetValue(StoppingEventEventNameOption), + stoppingEventPayloadFilter: parseResult.GetValue(StoppingEventPayloadFilterOption), + rundown: parseResult.GetValue(RundownOption), + dsrouter: parseResult.GetValue(DSRouterOption)); + }); return collectCommand; } @@ -714,5 +729,28 @@ public static Command CollectCommand() { Description = @"The dsrouter command to start. Value should be one of ios, ios-sim, android, android-emu. Run `dotnet-dsrouter -h` for more information." }; + +#region testing seams + // Abstraction for Collect's usage of EventPipeSession to facilitate testing. + internal interface ICollectSession : IDisposable + { + Stream EventStream { get; } + void Stop(); + } + + private sealed class CollectSession : ICollectSession + { + private readonly EventPipeSession _session; + public CollectSession(EventPipeSession session) => _session = session; + public Stream EventStream => _session.EventStream; + public void Stop() => _session.Stop(); + public void Dispose() => _session.Dispose(); + } + + internal Func> StartTraceSessionAsync { get; set; } + internal Func ResumeRuntimeAsync { get; set; } + internal Func CollectSessionEventStream { get; set; } + internal IConsole Console { get; set; } +#endregion } } diff --git a/src/shared/debug/dbgutil/elfreader.cpp b/src/shared/debug/dbgutil/elfreader.cpp index b537b4e283..2346e8e828 100644 --- a/src/shared/debug/dbgutil/elfreader.cpp +++ b/src/shared/debug/dbgutil/elfreader.cpp @@ -97,7 +97,7 @@ class ElfReaderFromFile : public ElfReader } } - virtual bool ReadMemory(void* address, void* buffer, size_t size) + virtual bool ReadMemory(const void* address, void* buffer, size_t size) { if (m_file == NULL) { @@ -163,7 +163,7 @@ TryGetBuildIdFromFile(const WCHAR* modulePath, BYTE* buffer, ULONG bufferSize, P #endif // HOST_UNIX -typedef bool (*ReadMemoryCallback)(void* address, void* buffer, size_t size); +typedef bool (*ReadMemoryCallback)(const void* address, void* buffer, size_t size); class ElfReaderWithCallback : public ElfReader { @@ -181,7 +181,7 @@ class ElfReaderWithCallback : public ElfReader } private: - virtual bool ReadMemory(void* address, void* buffer, size_t size) + virtual bool ReadMemory(const void* address, void* buffer, size_t size) { return m_readMemory(address, buffer, size); } @@ -225,7 +225,7 @@ class ElfReaderExport : public ElfReader } private: - virtual bool ReadMemory(void* address, void* buffer, size_t size) + virtual bool ReadMemory(const void* address, void* buffer, size_t size) { uint32_t read = 0; return SUCCEEDED(m_dataTarget->ReadVirtual(reinterpret_cast(address), reinterpret_cast(buffer), (uint32_t)size, &read)); diff --git a/src/shared/debug/dbgutil/elfreader.h b/src/shared/debug/dbgutil/elfreader.h index 73daa53d05..7235fa6128 100644 --- a/src/shared/debug/dbgutil/elfreader.h +++ b/src/shared/debug/dbgutil/elfreader.h @@ -75,7 +75,7 @@ class ElfReader virtual void VisitModule(uint64_t baseAddress, std::string& moduleName) { }; #endif virtual void VisitProgramHeader(uint64_t loadbias, uint64_t baseAddress, ElfW(Phdr)* phdr) { }; - virtual bool ReadMemory(void* address, void* buffer, size_t size) = 0; + virtual bool ReadMemory(const void* address, void* buffer, size_t size) = 0; virtual void Trace(const char* format, ...) { }; virtual void TraceVerbose(const char* format, ...) { }; }; diff --git a/src/shared/pal/src/init/pal.cpp b/src/shared/pal/src/init/pal.cpp index f6ea18445d..54e2259223 100644 --- a/src/shared/pal/src/init/pal.cpp +++ b/src/shared/pal/src/init/pal.cpp @@ -81,6 +81,7 @@ int CacheLineSize; #ifdef __FreeBSD__ #include +#include #endif #include diff --git a/src/shared/pal/src/thread/process.cpp b/src/shared/pal/src/thread/process.cpp index a8dcc09414..e25dbcf908 100644 --- a/src/shared/pal/src/thread/process.cpp +++ b/src/shared/pal/src/thread/process.cpp @@ -79,6 +79,10 @@ SET_DEFAULT_DEBUG_CHANNEL(PROCESS); // some headers have code with asserts, so d # endif #endif +#if HAVE_KQUEUE +#include +#endif + #ifdef __APPLE__ #include #include @@ -90,6 +94,10 @@ extern "C" { # include } + +// On macOS 26, sem_open fails if debugger and debugee are signed with different team ids. +// Use fifos instead of semaphores to avoid this issue, https://github.com/dotnet/runtime/issues/116545 +#define ENABLE_RUNTIME_EVENTS_OVER_PIPES #endif // __APPLE__ #ifdef __NetBSD__ @@ -259,6 +267,13 @@ DWORD StartupHelperThread( LPVOID p); +#ifdef ENABLE_RUNTIME_EVENTS_OVER_PIPES +static +DWORD +StartupHelperRuntimeEventsThread( + LPVOID p); +#endif + static BOOL GetProcessIdDisambiguationKey( @@ -1222,18 +1237,22 @@ static uint64_t HashSemaphoreName(uint64_t a, uint64_t b) static const char *const TwoWayNamedPipePrefix = "clr-debug-pipe"; static const char* IpcNameFormat = "%s-%d-%llu-%s"; +#ifdef ENABLE_RUNTIME_EVENTS_OVER_PIPES +static const char* RuntimeStartupPipeName = "st"; +static const char* RuntimeContinuePipeName = "co"; +#define PIPE_OPEN_RETRY_DELAY_NS 500000000 // 500 ms +#endif // ENABLE_RUNTIME_EVENTS_OVER_PIPES + class PAL_RuntimeStartupHelper { LONG m_ref; - bool m_canceled; + volatile bool m_canceled; + volatile PAL_ERROR m_error; PPAL_STARTUP_CALLBACK m_callback; PVOID m_parameter; DWORD m_threadId; HANDLE m_threadHandle; DWORD m_processId; -#ifdef __APPLE__ - char m_applicationGroupId[MAX_APPLICATION_GROUP_ID_LENGTH+1]; -#endif // __APPLE__ char m_startupSemName[CLR_SEM_MAX_NAMELEN]; char m_continueSemName[CLR_SEM_MAX_NAMELEN]; @@ -1248,19 +1267,336 @@ class PAL_RuntimeStartupHelper // registered (m_callback) returns. sem_t *m_continueSem; - LPCSTR GetApplicationGroupId() const +#ifdef __APPLE__ + char m_applicationGroupId[MAX_APPLICATION_GROUP_ID_LENGTH+1]; +#endif // __APPLE__ + +#ifdef ENABLE_RUNTIME_EVENTS_OVER_PIPES + char m_startupPipeName[MAX_DEBUGGER_TRANSPORT_PIPE_NAME_LENGTH]; + char m_continuePipeName[MAX_DEBUGGER_TRANSPORT_PIPE_NAME_LENGTH]; + DWORD m_runtimeEventsThreadId; + HANDLE m_runtimeEventsThreadHandle; + + typedef enum + { + RuntimeEvent_Unknown = 0, + RuntimeEvent_Started = 1, + RuntimeEvent_Continue = 2, + } RuntimeEvent; + + static void CloseFd(int fd) + { + if (fd != -1) + { + while (close(fd) < 0 && errno == EINTR); + } + } + + static ssize_t ReadIOFunc(int fd, void *buf, size_t count) + { + return read(fd, buf, count); + } + + static ssize_t WriteIOFunc(int fd, void *buf, size_t count) + { + return write(fd, buf, count); + } + + static BOOL CreatePipe(const char* name) + { + int result = -1; + while ((result = mkfifo(name, S_IRWXU)) < 0 && errno == EINTR); + if (result == -1) + { + if (errno == EEXIST) + { + unlink(name); + while ((result = mkfifo(name, S_IRWXU)) < 0 && errno == EINTR); + } + } + + if (result == -1) + { + TRACE("mkfifo failed: errno is %d (%s)\n", errno, strerror(errno)); + return FALSE; + } + + return TRUE; + } + + static int OpenNonBlockingPipe(int kq, const char* name, int mode, volatile bool *canceled) + { + int fd = -1; + int retries = 0; + int flags = mode | O_NONBLOCK; + +#if defined(FD_CLOEXEC) + flags |= O_CLOEXEC; +#endif + + while (!*canceled && fd == -1) + { + fd = open(name, flags); + if (fd == -1) + { + if (mode == O_WRONLY && errno == ENXIO) + { + PAL_nanosleep(PIPE_OPEN_RETRY_DELAY_NS); + continue; + } + else if (errno == EINTR) + { + continue; + } + else + { + break; + } + } + } + + if (fd == -1) + { + if (!*canceled) + { + TRACE("open failed: errno is %d (%s)\n", errno, strerror(errno)); + } + else + { + TRACE("open canceled\n"); + } + return -1; + } + +#if HAVE_KQUEUE && !HAVE_BROKEN_FIFO_KEVENT + struct kevent change; + EV_SET(&change, fd, (mode & O_ACCMODE) == O_RDONLY ? EVFILT_READ : EVFILT_WRITE, EV_ADD | EV_DISABLE, 0, 0, NULL); + if (kevent(kq, &change, 1, NULL, 0, NULL) == -1) + { + TRACE("kevent failed: errno is %d (%s)\n", errno, strerror(errno)); + CloseFd(fd); + return -1; + } +#endif // HAVE_KQUEUE && !HAVE_BROKEN_FIFO_KEVENT + + return fd; + } + +#if HAVE_KQUEUE && !HAVE_BROKEN_FIFO_KEVENT + static int DoNonBlockingPipeIO(int kq, int fd, void *buf, size_t count, int timeout, ssize_t (*io_func)(int fd, void *buf, size_t count), short filter) + { + int result = -1; + struct timespec timeout_spec; + struct timespec *timeout_ptr = NULL; + if (timeout > 0) + { + timeout_spec.tv_sec = timeout / 1000; + timeout_spec.tv_nsec = (timeout % 1000) * 1000000L; + timeout_ptr = &timeout_spec; + } + + struct kevent change; + EV_SET(&change, fd, filter, EV_ENABLE, 0, 0, NULL); + if (kevent(kq, &change, 1, NULL, 0, NULL) == -1) + { + return -1; + } + + while (1) + { + struct kevent event; + int nev = kevent(kq, NULL, 0, &event, 1, timeout_ptr); + if (nev == -1 && errno == EINTR) + { + continue; + } + else if (nev == 0) + { + // Check for timeout or EOF. + int n = io_func(fd, buf, count); + if (n > 0) + { + result = n; + break; + } + else if (n == 0) + { + // EOF - pipe closed + result = -2; + break; + } + else if (errno == EINTR || errno == EAGAIN || errno == EWOULDBLOCK) + { + // Timeout. + result = 0; + break; + } + else + { + break; + } + } + else if (nev > 0) + { + if (event.filter == filter && event.ident == fd) + { + if (event.flags & EV_EOF) + { + result = -2; + break; + } + + int n = io_func(fd, buf, count); + if (n > 0) + { + result = n; + break; + } + else if (n == 0) + { + // EOF - pipe closed + result = -2; + break; + } + else if (errno == EINTR || errno == EAGAIN || errno == EWOULDBLOCK) + { + continue; + } + else + { + break; + } + } + } + else + { + break; + } + } + + EV_SET(&change, fd, filter, EV_DISABLE, 0, 0, NULL); + kevent(kq, &change, 1, NULL, 0, NULL); + + return result; + } + + static int ReadNonBlockingPipe(int kq, int fd, void *buf, size_t count, int timeout) + { + return DoNonBlockingPipeIO(kq, fd, buf, count, timeout, ReadIOFunc, EVFILT_READ); + } + + static int WriteNonBlockingPipe(int kq, int fd, const void *buf, size_t count, int timeout) + { + return DoNonBlockingPipeIO(kq, fd, (void *)buf, count, timeout, WriteIOFunc, EVFILT_WRITE); + } +#else + static int DoNonBlockingPipeIO(int fd, void *buf, size_t count, int timeout, ssize_t (*io_func)(int fd, void *buf, size_t count), short filter) + { + struct pollfd pfd; + pfd.fd = fd; + pfd.events = filter; + + while (1) + { + int poll_ret = poll(&pfd, 1, timeout); + if (poll_ret > 0) + { + if (pfd.revents & filter) + { + int n = io_func(fd, buf, count); + if (n > 0) + { + return n; + } + else if (n == 0) + { + // EOF - pipe closed + return -2; + } + else if (errno == EAGAIN || errno == EWOULDBLOCK) + { + continue; + } + else if (errno == EINTR) + { + continue; + } + else + { + return -1; + } + } + else if (pfd.revents & (POLLERR | POLLHUP | POLLNVAL)) + { + return -1; + } + } + else if (poll_ret == 0) + { + // Check for timeout or EOF. + int n = io_func(fd, buf, count); + if (n > 0) + { + return n; + } + else if (n == 0) + { + // EOF - pipe closed + return -2; + } + else if (errno == EINTR || errno == EAGAIN || errno == EWOULDBLOCK) + { + // Timeout. + return 0; + } + else + { + return -1; + } + } + else if (errno == EINTR) + { + continue; + } + else + { + return -1; + } + } + + return -1; + } + + static int ReadNonBlockingPipe(int kq, int fd, void *buf, size_t count, int timeout) + { + return DoNonBlockingPipeIO(fd, buf, count, timeout, ReadIOFunc, POLLIN); + } + + static int + WriteNonBlockingPipe(int kq, int fd, const void *buf, size_t count, int timeout) { + return DoNonBlockingPipeIO(fd, (void *)buf, count, timeout, WriteIOFunc, POLLOUT); + } +#endif // HAVE_KQUEUE && !HAVE_BROKEN_FIFO_KEVENT +#endif // ENABLE_RUNTIME_EVENTS_OVER_PIPES + #ifdef __APPLE__ + LPCSTR GetApplicationGroupId() const + { return m_applicationGroupId[0] == '\0' ? nullptr : m_applicationGroupId; -#else // __APPLE__ + } +#else + LPCSTR GetApplicationGroupId() const + { return nullptr; -#endif // __APPLE__ } +#endif // __APPLE__ public: PAL_RuntimeStartupHelper(DWORD dwProcessId, PPAL_STARTUP_CALLBACK pfnCallback, PVOID parameter) : m_ref(1), m_canceled(false), + m_error(NO_ERROR), m_callback(pfnCallback), m_parameter(parameter), m_threadId(0), @@ -1268,6 +1604,10 @@ class PAL_RuntimeStartupHelper m_processId(dwProcessId), m_startupSem(SEM_FAILED), m_continueSem(SEM_FAILED) +#ifdef ENABLE_RUNTIME_EVENTS_OVER_PIPES + , m_runtimeEventsThreadId(0) + , m_runtimeEventsThreadHandle(NULL) +#endif // ENABLE_RUNTIME_EVENTS_OVER_PIPES { } @@ -1289,6 +1629,16 @@ class PAL_RuntimeStartupHelper { CloseHandle(m_threadHandle); } + +#ifdef ENABLE_RUNTIME_EVENTS_OVER_PIPES + unlink(m_startupPipeName); + unlink(m_continuePipeName); + + if (m_runtimeEventsThreadHandle != NULL) + { + CloseHandle(m_runtimeEventsThreadHandle); + } +#endif // ENABLE_RUNTIME_EVENTS_OVER_PIPES } LONG AddRef() @@ -1369,6 +1719,16 @@ class PAL_RuntimeStartupHelper } #endif // __APPLE__ +#ifdef ENABLE_RUNTIME_EVENTS_OVER_PIPES + PAL_GetTransportPipeName(m_startupPipeName, m_processId, GetApplicationGroupId(), RuntimeStartupPipeName); + PAL_GetTransportPipeName(m_continuePipeName, m_processId, GetApplicationGroupId(), RuntimeContinuePipeName); + + TRACE("PAL_RuntimeStartupHelper.Register creating startup '%s' continue '%s' pipes\n", m_startupPipeName, m_continuePipeName); + + CreatePipe(m_continuePipeName); + CreatePipe(m_startupPipeName); +#endif // ENABLE_RUNTIME_EVENTS_OVER_PIPES + // See semaphore name format for details about this value. We store it so that // it can be used by the cleanup code that removes the semaphore with sem_unlink. ret = GetProcessIdDisambiguationKey(m_processId, &m_processIdDisambiguationKey); @@ -1382,7 +1742,7 @@ class PAL_RuntimeStartupHelper CreateSemaphoreName(m_startupSemName, RuntimeStartupSemaphoreName, unambiguousProcessDescriptor, GetApplicationGroupId()); CreateSemaphoreName(m_continueSemName, RuntimeContinueSemaphoreName, unambiguousProcessDescriptor, GetApplicationGroupId()); - TRACE("PAL_RuntimeStartupHelper.Register creating startup '%s' continue '%s'\n", m_startupSemName, m_continueSemName); + TRACE("PAL_RuntimeStartupHelper.Register creating startup '%s' continue '%s' semaphores\n", m_startupSemName, m_continueSemName); // Create the continue semaphore first so we don't race with PAL_NotifyRuntimeStarted. This open will fail if another // debugger is trying to attach to this process because the name will already exist. @@ -1403,6 +1763,30 @@ class PAL_RuntimeStartupHelper goto exit; } +#ifdef ENABLE_RUNTIME_EVENTS_OVER_PIPES + // Add a reference for the thread handler + AddRef(); + pe = InternalCreateThread( + pThread, + NULL, + 0, + ::StartupHelperRuntimeEventsThread, + this, + 0, + UserCreatedThread, + &osThreadId, + &m_runtimeEventsThreadHandle); + + if (NO_ERROR != pe) + { + TRACE("InternalCreateThread failed %d\n", pe); + Release(); + goto exit; + } + + m_runtimeEventsThreadId = (DWORD)osThreadId; +#endif // ENABLE_RUNTIME_EVENTS_OVER_PIPES + // Add a reference for the thread handler AddRef(); pe = InternalCreateThread( @@ -1443,12 +1827,20 @@ class PAL_RuntimeStartupHelper ASSERT("sem_post(startupSem) failed: errno is %d (%s)\n", errno, strerror(errno)); } - // Don't need to wait for the worker thread if unregister called on it + // Don't need to wait for the worker threads if unregister called on it if (m_threadId != (DWORD)THREADSilentGetCurrentThreadId()) { // Wait for work thread to exit for 60 seconds WaitForSingleObject(m_threadHandle, 60 * 1000); } + +#ifdef ENABLE_RUNTIME_EVENTS_OVER_PIPES + if (m_runtimeEventsThreadId != (DWORD)THREADSilentGetCurrentThreadId()) + { + // Wait for runtime events thread to exit for 60 seconds + WaitForSingleObject(m_runtimeEventsThreadHandle, 60 * 1000); + } +#endif // ENABLE_RUNTIME_EVENTS_OVER_PIPES } // @@ -1536,6 +1928,163 @@ class PAL_RuntimeStartupHelper return pe; } +#ifdef ENABLE_RUNTIME_EVENTS_OVER_PIPES + void StartupHelperRuntimeEventsThread() + { + PAL_ERROR pe = NO_ERROR; + int offset = 0; + int kq = -1; + int continuePipeFd = -1; + int startupPipeFd = -1; + +#if HAVE_KQUEUE && !HAVE_BROKEN_FIFO_KEVENT + kq = kqueue(); + if (kq == -1) + { + TRACE("StartupHelperRuntimeEventsThread: kqueue() failed: %d (%s)\n", errno, strerror(errno)); + goto exit; + } +#endif // HAVE_KQUEUE && !HAVE_BROKEN_FIFO_KEVENT + + TRACE("StartupHelperRuntimeEventsThread: opening continue '%s' pipe\n", m_continuePipeName); + + continuePipeFd = OpenNonBlockingPipe(kq, m_continuePipeName, O_WRONLY, &m_canceled); + if (continuePipeFd == -1) + { + if (m_canceled) + { + TRACE("StartupHelperRuntimeEventsThread: canceled opening continue pipe\n"); + } + else + { + TRACE("StartupHelperRuntimeEventsThread: failed opening continue pipe\n"); + } + goto exit; + } + + TRACE("StartupHelperRuntimeEventsThread: opening startup '%s' pipe\n", m_startupPipeName); + + startupPipeFd = OpenNonBlockingPipe(kq, m_startupPipeName, O_RDONLY, &m_canceled); + if (startupPipeFd == -1) + { + if (m_canceled) + { + TRACE("StartupHelperRuntimeEventsThread: canceled opening startup pipe\n"); + } + else + { + TRACE("StartupHelperRuntimeEventsThread: failed opening startup pipe\n"); + } + goto exit; + } + + TRACE("StartupHelperRuntimeEventsThread: waiting on started event\n"); + + { + unsigned char event = (unsigned char)RuntimeEvent_Unknown; + unsigned char *buffer = &event; + int bytesToRead = sizeof(event); + int bytesRead = 0; + + do + { + bytesRead = ReadNonBlockingPipe(kq, startupPipeFd, buffer + offset, bytesToRead - offset, 1000); + if (bytesRead > 0) + { + offset += bytesRead; + } + else if (bytesRead == 0) + { + // Timeout. + continue; + } + else if (bytesRead == -2 && offset == 0) + { + // Not connected yet, retry. + continue; + } + else + { + // Error or EOF + break; + } + } + while (!m_canceled && offset < bytesToRead); + + if (offset == bytesToRead && event == (unsigned char)RuntimeEvent_Started) + { + TRACE("StartupHelperRuntimeEventsThread: received started event\n"); + } + else if (m_canceled) + { + TRACE("StartupHelperRuntimeEventsThread: canceled waiting for started event\n"); + } + else + { + TRACE("StartupHelperRuntimeEventsThread: received invalid event\n"); + m_error = ERROR_INVALID_PARAMETER; + } + + sem_post(m_startupSem); + } + + TRACE("StartupHelperRuntimeEventsThread: waiting on debugger\n"); + + while (sem_wait(m_continueSem) != 0) + { + if (EINTR == errno) + { + TRACE("StartupHelperRuntimeEventsThread: sem_wait() failed with EINTR; re-waiting\n"); + continue; + } + TRACE("StartupHelperRuntimeEventsThread: sem_wait(contniue) failed: errno is %d (%s)\n", errno, strerror(errno)); + } + + TRACE("StartupHelperRuntimeEventsThread: sending continue event\n"); + + { + unsigned char event = (unsigned char)RuntimeEvent_Continue; + unsigned char *buffer = &event; + int bytesToWrite = sizeof(event); + int bytesWritten = 0; + + offset = 0; + do + { + bytesWritten = WriteNonBlockingPipe(kq, continuePipeFd, buffer + offset, bytesToWrite - offset, 1000); + if (bytesWritten > 0) + { + offset += bytesWritten; + } + } + while (bytesWritten > 0 && offset < bytesToWrite); + + if (offset != bytesToWrite) + { + TRACE("StartupHelperRuntimeEventsThread: failed sending continue event\n"); + } + } + + exit: + + if (startupPipeFd != -1) + { + CloseFd(startupPipeFd); + } + + if (continuePipeFd != -1) + { + CloseFd(continuePipeFd); + } + + if (kq != -1) + { + CloseFd(kq); + } + } + +#endif // ENABLE_RUNTIME_EVENTS_OVER_PIPES + void StartupHelperThread() { PAL_ERROR pe = NO_ERROR; @@ -1559,6 +2108,11 @@ class PAL_RuntimeStartupHelper pe = GetSemError(); } + if (pe == NO_ERROR && m_error != NO_ERROR) + { + pe = m_error; + } + if (pe == NO_ERROR) { pe = InvokeStartupCallback(); @@ -1574,6 +2128,23 @@ class PAL_RuntimeStartupHelper } }; +#ifdef ENABLE_RUNTIME_EVENTS_OVER_PIPES +static +DWORD +StartupHelperRuntimeEventsThread(LPVOID p) +{ + TRACE("StartupHelperRuntimeEventsThread: starting\n"); + + PAL_RuntimeStartupHelper *helper = (PAL_RuntimeStartupHelper *)p; + helper->StartupHelperRuntimeEventsThread(); + helper->Release(); + + TRACE("StartupHelperRuntimeEventsThread: finished\n"); + + return 0; +} +#endif // ENABLE_RUNTIME_EVENTS_OVER_PIPES + static DWORD StartupHelperThread(LPVOID p) diff --git a/src/singlefile-tools.proj b/src/singlefile-tools.proj index 9ce59796e1..36a5e67050 100644 --- a/src/singlefile-tools.proj +++ b/src/singlefile-tools.proj @@ -2,7 +2,7 @@ $(NetCoreAppMinTargetFramework) - win-x64;win-x86;win-arm64;linux-x64;linux-musl-arm64;linux-arm64;linux-musl-x64;linux-arm + win-x64;win-x86;win-arm64;linux-x64;linux-musl-x64;linux-musl-arm64;linux-arm64;linux-arm;linux-musl-arm $([System.IO.Path]::GetDirectoryName('$(ArcadeSdkBuildTasksAssembly)'))\..\ $(ArcadeSdkMSBuildProjectDir)Sign.proj $(BundledToolsPath)$(Configuration)/zips/ @@ -22,14 +22,15 @@ - + + Targets="Restore" + ContinueOnError="false" + Properties="MSBuildRestoreSessionId=$([System.Guid]::NewGuid())"/> @@ -39,7 +40,7 @@ SkipNonexistentProjects="false" SkipNonexistentTargets="false" StopOnFirstFailure="true" - Targets="CollectBundleFilesToSign" + Targets="Build;CollectBundleFilesToSign" ContinueOnError="false"> diff --git a/src/sos-packaging.props b/src/sos-packaging.props index d182b2e29f..9312fea0bb 100644 --- a/src/sos-packaging.props +++ b/src/sos-packaging.props @@ -7,12 +7,6 @@ $(ArtifactsBinDir)\SOS.Extensions\$(Configuration)\netstandard2.0\publish\*.dll - - - - - - @@ -56,11 +50,25 @@ + + <_SosBinariesToPack Include="@(SosRequiredBinaries)" /> + + + + <_winSosRequiredBinaries Include="$(ArtifactsBinDir)\Windows_NT.x64.$(Configuration)\sos.dll" TargetRid="win-x64" /> + <_winSosRequiredBinaries Include="$(ArtifactsBinDir)\Windows_NT.x64.$(Configuration)\Microsoft.DiaSymReader.Native.amd64.dll" TargetRid="win-x64" /> + <_winSosRequiredBinaries Condition="'$(PackageWithCDac)' == 'true'" Include="$(ArtifactsBinDir)\Windows_NT.x64.$(Configuration)\mscordaccore_universal.dll" TargetRid="win-x64" /> + + + <_SosBinariesToPack Condition="'$(BuildX64Package)' == 'true'" + Include="@(_winSosRequiredBinaries)" /> + + - + false true $(SOSPackagePathPrefix)/%(TargetRid) diff --git a/src/tests/dotnet-counters/MockConsole.cs b/src/tests/Common/MockConsole.cs similarity index 66% rename from src/tests/dotnet-counters/MockConsole.cs rename to src/tests/Common/MockConsole.cs index 57d41fc13f..f21858dddc 100644 --- a/src/tests/dotnet-counters/MockConsole.cs +++ b/src/tests/Common/MockConsole.cs @@ -1,14 +1,16 @@ -// Licensed to the .NET Foundation under one or more agreements. +// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System; using System.Diagnostics; -using Microsoft.Diagnostics.Tools.Counters.Exporters; +using System.IO; +using System.Text; +using Microsoft.Diagnostics.Tools.Common; using Xunit; -namespace DotnetCounters.UnitTests +namespace Microsoft.Diagnostics.Tests.Common { - internal class MockConsole : IConsole + internal class MockConsole : TextWriter, IConsole { char[][] _chars; @@ -20,16 +22,33 @@ public MockConsole(int width, int height) WindowHeight = height; Clear(); } + + public override Encoding Encoding => Encoding.UTF8; + public int WindowHeight { get; init; } public int WindowWidth { get; init; } - public bool CursorVisible { get => throw new NotSupportedException(); set => throw new NotImplementedException(); } + public bool CursorVisible { get; set; } + + public int CursorLeft { get; private set; } public int CursorTop { get; private set; } public int BufferWidth { get; private set; } + public int BufferHeight { get; private set; } + + public bool IsOutputRedirected { get; set; } + + public bool IsInputRedirected { get; private set; } + + public bool KeyAvailable { get; private set; } + + public TextWriter Out => this; + + public TextWriter Error => this; + public void Clear() { _chars = new char[WindowHeight][]; @@ -49,7 +68,7 @@ public void SetCursorPosition(int col, int row) CursorTop = row; _cursorLeft = col; } - public void Write(string text) + public override void Write(string text) { for(int textPos = 0; textPos < text.Length; ) { @@ -88,15 +107,19 @@ public void Write(string text) } } } - public void WriteLine(string text) + public override void WriteLine(string text) { Write(text); Write(Environment.NewLine); } - public void WriteLine() => Write(Environment.NewLine); + public override void WriteLine() => Write(Environment.NewLine); public string GetLineText(int row) => new string(_chars[row]).TrimEnd(); + public ConsoleKeyInfo ReadKey() => Console.ReadKey(); + + public ConsoleKeyInfo ReadKey(bool intercept) => Console.ReadKey(intercept); + public string[] Lines { get @@ -134,5 +157,31 @@ public void AssertLinesEqual(int startLine, params string[] expectedLines) } } + + public void AssertSanitizedLinesEqual(Func sanitizer, params string[] expectedLines) + { + string[] actualLines = Lines; + if (sanitizer is not null) + { + actualLines = sanitizer(actualLines); + } + Assert.True(actualLines.Length >= expectedLines.Length, "Sanitized console output had fewer lines than expected." + Environment.NewLine + + $"Expected line count: {expectedLines.Length}" + Environment.NewLine + + $"Actual line count: {actualLines.Length}"); + + for (int i = 0; i < expectedLines.Length; i++) + { + if (!string.Equals(expectedLines[i], actualLines[i], StringComparison.Ordinal)) + { + Assert.Fail("Sanitized console output mismatch." + Environment.NewLine + + $"Line {i,2} Expected: {expectedLines[i]}" + Environment.NewLine + + $"Line {i,2} Actual : {actualLines[i]}"); + } + } + for (int i = expectedLines.Length; i < actualLines.Length; i++) + { + Assert.True(string.IsNullOrEmpty(actualLines[i]), $"Actual line #{i} beyond expected lines is not empty: {actualLines[i]}"); + } + } } } diff --git a/src/tests/dotnet-counters/ConsoleExporterTests.cs b/src/tests/dotnet-counters/ConsoleExporterTests.cs index 412b5fcffe..53e1ca1706 100644 --- a/src/tests/dotnet-counters/ConsoleExporterTests.cs +++ b/src/tests/dotnet-counters/ConsoleExporterTests.cs @@ -7,6 +7,7 @@ using System.Text; using System.Threading.Tasks; using Microsoft.Diagnostics.Monitoring.EventPipe; +using Microsoft.Diagnostics.Tests.Common; using Microsoft.Diagnostics.Tools.Counters.Exporters; using Xunit; @@ -241,10 +242,12 @@ public void MultiDimensionalCountersAreListed() "[Provider1]", " Counter1 ({widget} / 1 sec)", " color", + " -----", " blue 87", " red 0.1", " Counter2 ({widget} / 1 sec)", " size temp", + " ---- ----", " 1 14", " hot 160"); } @@ -267,10 +270,12 @@ public void LongMultidimensionalTagsAreTruncated() "[Provider1]", " Counter1 ({widget} / 1 sec)", " color LongNameTag herOne", + " ----- ------------- ------", " blue ThisDoesNotFi Hi 87", " red 0.1", " Counter2 ({widget} / 1 sec)", " size temp", + " ---- ----", " 1 14", " hot 160"); } @@ -315,10 +320,12 @@ public void ErrorStatusIsDisplayed() "[Provider1]", " Counter1 ({widget} / 1 sec)", " color", + " -----", " blue 87", " red 0.1", " Counter2 ({widget} / 1 sec)", " size temp", + " ---- ----", " 1 14", " hot 160"); } @@ -343,10 +350,12 @@ public void DeltaColumnDisplaysInitiallyEmpty() "[Provider1]", " Counter1 ({widget} / 1 sec)", " color", + " -----", " blue 87", " red 0.1", " Counter2 ({widget} / 1 sec)", " size temp", + " ---- ----", " 1 14", " hot 160", "[System.Runtime]", @@ -372,10 +381,12 @@ public void DeltaColumnDisplaysNumbersAfterUpdate() "[Provider1]", " Counter1 ({widget} / 1 sec)", " color", + " -----", " blue 87", " red 0.1", " Counter2 ({widget} / 1 sec)", " size temp", + " ---- ----", " 1 14", " hot 160", "[System.Runtime]", @@ -392,10 +403,12 @@ public void DeltaColumnDisplaysNumbersAfterUpdate() "[Provider1]", " Counter1 ({widget} / 1 sec)", " color", + " -----", " blue 87 0", " red 0.2 0.1", " Counter2 ({widget} / 1 sec)", " size temp", + " ---- ----", " 1 10 -4", " hot 160", "[System.Runtime]", @@ -424,6 +437,7 @@ public void MeterCounterIsAbsoluteInNet8() "[Provider1]", " Counter1 ({widget})", // There is no longer (unit / 1 sec) here " color", + " -----", " blue 87", " red 0.1", " Counter2 ({widget}) 14"); @@ -439,6 +453,7 @@ public void MeterCounterIsAbsoluteInNet8() "[Provider1]", " Counter1 ({widget})", // There is no longer (unit / 1 sec) here " color", + " -----", " blue 87 0", " red 0.2 0.1", " Counter2 ({widget}) 10 -4"); diff --git a/src/tests/dotnet-counters/DotnetCounters.UnitTests.csproj b/src/tests/dotnet-counters/DotnetCounters.UnitTests.csproj index 435bf3a738..70eb65bb61 100644 --- a/src/tests/dotnet-counters/DotnetCounters.UnitTests.csproj +++ b/src/tests/dotnet-counters/DotnetCounters.UnitTests.csproj @@ -10,6 +10,10 @@ + + + + diff --git a/src/tests/dotnet-trace/CollectCommandFunctionalTests.cs b/src/tests/dotnet-trace/CollectCommandFunctionalTests.cs new file mode 100644 index 0000000000..f6de43dfed --- /dev/null +++ b/src/tests/dotnet-trace/CollectCommandFunctionalTests.cs @@ -0,0 +1,242 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System; +using System.Collections.Generic; +using System.CommandLine; +using System.IO; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Diagnostics.Tests.Common; +using Microsoft.Diagnostics.Tools.Trace; +using Xunit; + +namespace Microsoft.Diagnostics.Tools.Trace +{ + public class CollectCommandFunctionalTests + { + private const string ExpectedPayload = "CollectCommandFunctionalTestsTraceData"; + + public sealed record CollectArgs( + CancellationToken ct = default, + CommandLineConfiguration cliConfig = null, + int processId = -1, + uint buffersize = 1, + string providers = "", + string profile = "", + int formatValue = (int)TraceFileFormat.NetTrace, + TimeSpan duration = default, + string clrevents = "", + string clreventlevel = "", + string name = "", + string diagnosticPort = "", + bool showchildio = false, + bool resumeRuntime = false, + string stoppingEventProviderName = "", + string stoppingEventEventName = "", + string stoppingEventPayloadFilter = "", + bool? rundown = false, + string dsrouter = "") + { + internal TraceFileFormat Format => (TraceFileFormat)formatValue; + public int ProcessId => processId == -1 ? Environment.ProcessId : processId; + public FileInfo Output => new FileInfo("trace.nettrace"); + private MemoryStream _eventStream = new(); + public MemoryStream EventStream => _eventStream; + } + + [Theory] + [MemberData(nameof(BasicCases))] + public async Task CollectCommandProviderConfigurationConsolidation(CollectArgs args, string[] expectedSubset) + { + MockConsole console = new(200, 30); + string[] rawLines = await RunAsync(args, console).ConfigureAwait(true); + console.AssertSanitizedLinesEqual(CollectSanitizer, expectedSubset); + + byte[] expected = Encoding.UTF8.GetBytes(ExpectedPayload); + Assert.Equal(expected, args.EventStream.ToArray()); + } + + private static async Task RunAsync(CollectArgs config, MockConsole console) + { + var handler = new CollectCommandHandler(); + handler.StartTraceSessionAsync = (client, cfg, ct) => Task.FromResult(new TestCollectSession()); + handler.ResumeRuntimeAsync = (client, ct) => Task.CompletedTask; + handler.CollectSessionEventStream = (name) => config.EventStream; + handler.Console = console; + + int exit = await handler.Collect( + config.ct, + config.cliConfig, + config.ProcessId, + config.Output, + config.buffersize, + config.providers, + config.profile, + config.Format, + config.duration, + config.clrevents, + config.clreventlevel, + config.name, + config.diagnosticPort, + config.showchildio, + config.resumeRuntime, + config.stoppingEventProviderName, + config.stoppingEventEventName, + config.stoppingEventPayloadFilter, + config.rundown, + config.dsrouter + ).ConfigureAwait(true); + if (exit != 0) + { + throw new InvalidOperationException($"Collect exited with return code {exit}."); + } + return console.Lines; + } + + private static string[] CollectSanitizer(string[] lines) + { + List result = new(); + foreach (string line in lines) + { + if (line.StartsWith("Process :", StringComparison.Ordinal)) + { + result.Add("Process : "); + } + else + { + result.Add(line); + } + } + return result.ToArray(); + } + + private sealed class TestCollectSession : CollectCommandHandler.ICollectSession + { + private static readonly byte[] _testBytes = Encoding.UTF8.GetBytes(ExpectedPayload); + private readonly MemoryStream _stream = new(_testBytes); + public Stream EventStream => _stream; + public void Stop() {} + public void Dispose() => _stream.Dispose(); + } + + public static IEnumerable BasicCases() + { + FileInfo fi = new("trace.nettrace"); + yield return new object[] + { + new CollectArgs(), + ExpectProvidersWithMessages( + new[] + { + "No profile or providers specified, defaulting to trace profile 'cpu-sampling'" + }, + FormatProvider("Microsoft-DotNETCore-SampleProfiler", "0000F00000000000", "Informational", 4, "--profile"), + FormatProvider("Microsoft-Windows-DotNETRuntime", "00000014C14FCCBD", "Informational", 4, "--profile")) + }; + + yield return new object[] + { + new CollectArgs(providers: "Foo:0x1:4"), + ExpectProviders( + FormatProvider("Foo", "0000000000000001", "Informational", 4, "--providers")) + }; + + yield return new object[] + { + new CollectArgs(providers: "Foo:0x1:4,Bar:0x2:4"), + ExpectProviders( + FormatProvider("Foo", "0000000000000001", "Informational", 4, "--providers"), + FormatProvider("Bar", "0000000000000002", "Informational", 4, "--providers")) + }; + + yield return new object[] + { + new CollectArgs(profile: "cpu-sampling"), + ExpectProviders( + FormatProvider("Microsoft-DotNETCore-SampleProfiler", "0000F00000000000", "Informational", 4, "--profile"), + FormatProvider("Microsoft-Windows-DotNETRuntime", "00000014C14FCCBD", "Informational", 4, "--profile")) + }; + + yield return new object[] + { + new CollectArgs(profile: "cpu-sampling", providers: "Foo:0x1:4"), + ExpectProviders( + FormatProvider("Foo", "0000000000000001", "Informational", 4, "--providers"), + FormatProvider("Microsoft-DotNETCore-SampleProfiler", "0000F00000000000", "Informational", 4, "--profile"), + FormatProvider("Microsoft-Windows-DotNETRuntime", "00000014C14FCCBD", "Informational", 4, "--profile")) + }; + + yield return new object[] + { + new CollectArgs(profile: "cpu-sampling", clrevents: "gc"), + ExpectProvidersWithMessages( + new[] + { + "The argument --clrevents gc will be ignored because the CLR provider was configured via either --profile or --providers command." + }, + FormatProvider("Microsoft-DotNETCore-SampleProfiler", "0000F00000000000", "Informational", 4, "--profile"), + FormatProvider("Microsoft-Windows-DotNETRuntime", "00000014C14FCCBD", "Informational", 4, "--profile")) + }; + + yield return new object[] + { + new CollectArgs(profile: "cpu-sampling", providers: "Microsoft-Windows-DotNETRuntime:0x1:4"), + ExpectProviders( + FormatProvider("Microsoft-Windows-DotNETRuntime", "0000000000000001", "Informational", 4, "--providers"), + FormatProvider("Microsoft-DotNETCore-SampleProfiler", "0000F00000000000", "Informational", 4, "--profile")) + }; + + yield return new object[] + { + new CollectArgs(providers: "Microsoft-Windows-DotNETRuntime:0x1:4", clrevents: "gc"), + ExpectProvidersWithMessages( + new[] + { + "The argument --clrevents gc will be ignored because the CLR provider was configured via either --profile or --providers command." + }, + FormatProvider("Microsoft-Windows-DotNETRuntime", "0000000000000001", "Informational", 4, "--providers")) + }; + + yield return new object[] + { + new CollectArgs(clrevents: "gc+jit"), + ExpectProviders( + FormatProvider("Microsoft-Windows-DotNETRuntime", "0000000000000011", "Informational", 4, "--clrevents")) + }; + + yield return new object[] + { + new CollectArgs(clrevents: "gc+jit", clreventlevel: "5"), + ExpectProviders( + FormatProvider("Microsoft-Windows-DotNETRuntime", "0000000000000011", "Verbose", 5, "--clrevents")) + }; + } + + private static string outputFile = $"Output File : {Directory.GetCurrentDirectory() + Path.DirectorySeparatorChar}trace.nettrace"; + private const string ProviderHeader = "Provider Name Keywords Level Enabled By"; + private static readonly string[] CommonTail = [ + "Process : ", + outputFile, + "", + "", + "", + "Trace completed." + ]; + + private static string[] ExpectProviders(params string[] providerLines) + => ExpectProvidersWithMessages(new string[0], providerLines); + + private static string[] ExpectProvidersWithMessages(string[] messages, params string[] providerLines) + => [.. messages, "", ProviderHeader, .. providerLines, "", .. CommonTail]; + + private static string FormatProvider(string name, string keywordsHex, string levelName, int levelValue, string enabledBy) + { + string display = string.Format("{0, -40}", name) + + string.Format("0x{0, -18}", keywordsHex) + + string.Format("{0, -8}", $"{levelName}({levelValue})"); + return string.Format("{0, -80}", display) + enabledBy; + } + } +} diff --git a/src/tests/dotnet-trace/DotnetTrace.UnitTests.csproj b/src/tests/dotnet-trace/DotnetTrace.UnitTests.csproj index 2ec652b315..d1518411ff 100644 --- a/src/tests/dotnet-trace/DotnetTrace.UnitTests.csproj +++ b/src/tests/dotnet-trace/DotnetTrace.UnitTests.csproj @@ -9,4 +9,8 @@ + + + + diff --git a/start-vs.cmd b/start-vs.cmd index 79d2ba80e9..cd08940d0e 100644 --- a/start-vs.cmd +++ b/start-vs.cmd @@ -4,7 +4,7 @@ setlocal enabledelayedexpansion set "SDK_LOC=%~dp0.dotnet" if "%1" == "" ( - set "SLN_OR_PROJ=%~dp0diagnostics.sln" + set "SLN_OR_PROJ=%~dp0diagnostics.slnx" ) else ( set "SLN_OR_PROJ=%1" )