diff --git a/.gitmodules b/.gitmodules index e065467a10..484ac2d87b 100644 --- a/.gitmodules +++ b/.gitmodules @@ -8,3 +8,6 @@ path = modules/Carthage url = https://github.com/Carthage/Carthage branch = xcframework-catalyst +[submodule "modules/perfview"] + path = modules/perfview + url = https://github.com/getsentry/perfview.git diff --git a/Sentry-CI-Pack.slnf b/Sentry-CI-Pack.slnf index 4a4ff2364d..b520ff1854 100644 --- a/Sentry-CI-Pack.slnf +++ b/Sentry-CI-Pack.slnf @@ -17,8 +17,9 @@ "src\\Sentry.Maui\\Sentry.Maui.csproj", "src\\Sentry.NLog\\Sentry.NLog.csproj", "src\\Sentry.OpenTelemetry\\Sentry.OpenTelemetry.csproj", + "src\\Sentry.Profiling\\Sentry.Profiling.csproj", "src\\Sentry.Serilog\\Sentry.Serilog.csproj", "src\\Sentry\\Sentry.csproj" ] } -} +} \ No newline at end of file diff --git a/Sentry-CI-Test.slnf b/Sentry-CI-Test.slnf index 6efcf87d90..00b493e4dd 100644 --- a/Sentry-CI-Test.slnf +++ b/Sentry-CI-Test.slnf @@ -20,6 +20,7 @@ "test\\Sentry.Serilog.Tests\\Sentry.Serilog.Tests.csproj", "test\\Sentry.Testing.CrashableApp\\Sentry.Testing.CrashableApp.csproj", "test\\Sentry.Testing\\Sentry.Testing.csproj", + "test\\Sentry.Profiling.Tests\\Sentry.Profiling.Tests.csproj", "test\\Sentry.Tests\\Sentry.Tests.csproj" ] } diff --git a/Sentry.Full.sln b/Sentry.Full.sln index c790a18611..cbc8f69886 100644 --- a/Sentry.Full.sln +++ b/Sentry.Full.sln @@ -1,558 +1,526 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 -VisualStudioVersion = 17.1.31903.286 +VisualStudioVersion = 17.0.31903.59 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry", "src\Sentry\Sentry.csproj", "{F2486CC8-FAB7-4775-976F-C5A4CF97867F}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "benchmarks", "benchmarks", "{7D4D7A6A-3F5C-4B4C-A198-AC51F9220231}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{AF6AF4C7-8AA2-4D59-8064-2D79560904EB}" - ProjectSection(SolutionItems) = preProject - src\Directory.Build.props = src\Directory.Build.props - EndProjectSection +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Benchmarks", "benchmarks\Sentry.Benchmarks\Sentry.Benchmarks.csproj", "{8328B70C-B808-4ED1-BB16-8555B2752CB6}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{83263231-1A2A-4733-B759-EEFF14E8C5D5}" - ProjectSection(SolutionItems) = preProject - test\Directory.Build.props = test\Directory.Build.props - EndProjectSection +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{21B42F60-5802-404E-90F0-AEBCC56760C0}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Tests", "test\Sentry.Tests\Sentry.Tests.csproj", "{1E0F969B-67F9-4FCC-BCBF-596DB6460C7C}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Samples.Android", "samples\Sentry.Samples.Android\Sentry.Samples.Android.csproj", "{1368AFBF-BCB7-4585-B8A9-C0E767792BC1}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".root", ".root", "{9D7E2F87-D6F4-4BBB-8980-87D0A8344C74}" - ProjectSection(SolutionItems) = preProject - .editorconfig = .editorconfig - .gitattributes = .gitattributes - .gitignore = .gitignore - build.ps1 = build.ps1 - build.sh = build.sh - CHANGELOG.md = CHANGELOG.md - CONTRIBUTING.md = CONTRIBUTING.md - Directory.Build.props = Directory.Build.props - Directory.Build.targets = Directory.Build.targets - global.json = global.json - GlobalUsings.cs = GlobalUsings.cs - README.md = README.md - EndProjectSection +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Samples.AspNetCore.Basic", "samples\Sentry.Samples.AspNetCore.Basic\Sentry.Samples.AspNetCore.Basic.csproj", "{3E5E5AAD-4563-4428-8577-2A2A46137BFC}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{77454495-55EE-4B40-A089-71B9E8F82E89}" - ProjectSection(SolutionItems) = preProject - samples\Directory.Build.props = samples\Directory.Build.props - EndProjectSection +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Samples.AspNetCore.Blazor.Server", "samples\Sentry.Samples.AspNetCore.Blazor.Server\Sentry.Samples.AspNetCore.Blazor.Server.csproj", "{789A9F8A-08A9-4211-A4AB-F45633960D94}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Samples.Console.Basic", "samples\Sentry.Samples.Console.Basic\Sentry.Samples.Console.Basic.csproj", "{65F5A969-B386-48F5-8B7E-6C90D6C720BC}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Samples.AspNetCore.Blazor.Wasm", "samples\Sentry.Samples.AspNetCore.Blazor.Wasm\Sentry.Samples.AspNetCore.Blazor.Wasm.csproj", "{E683FB73-A305-462A-8F76-880E7A2F7F74}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Samples.ME.Logging", "samples\Sentry.Samples.ME.Logging\Sentry.Samples.ME.Logging.csproj", "{DE536383-4A18-4057-A7F0-639BDEF6E1BB}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Samples.AspNetCore.Grpc", "samples\Sentry.Samples.AspNetCore.Grpc\Sentry.Samples.AspNetCore.Grpc.csproj", "{E53C49EE-FC70-4B26-A62A-63CAD51DB399}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Extensions.Logging", "src\Sentry.Extensions.Logging\Sentry.Extensions.Logging.csproj", "{2718BBA4-F080-4924-BA50-B63F756FB097}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Samples.AspNetCore.Mvc", "samples\Sentry.Samples.AspNetCore.Mvc\Sentry.Samples.AspNetCore.Mvc.csproj", "{F749CC16-C32B-441D-9ACE-E8F748E977E0}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Samples.Console.Customized", "samples\Sentry.Samples.Console.Customized\Sentry.Samples.Console.Customized.csproj", "{6CAE75C2-9DED-44F4-8E14-2D4F9159D55F}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Samples.AspNetCore.Serilog", "samples\Sentry.Samples.AspNetCore.Serilog\Sentry.Samples.AspNetCore.Serilog.csproj", "{609D99ED-3E50-49DF-A3CC-2371FD02520A}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Benchmarks", "benchmarks\Sentry.Benchmarks\Sentry.Benchmarks.csproj", "{BD43F598-5B20-477D-88C9-55B186542179}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Samples.Aws.Lambda.AspNetCoreServer", "samples\Sentry.Samples.Aws.Lambda.AspNetCoreServer\Sentry.Samples.Aws.Lambda.AspNetCoreServer.csproj", "{50116F9A-646D-4BF7-9760-66E37CB9C459}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "benchmarks", "benchmarks", "{97EF834D-6BEB-45E8-B69A-1F9B7815B8B4}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Samples.AzureFunctions.Worker", "samples\Sentry.Samples.AzureFunctions.Worker\Sentry.Samples.AzureFunctions.Worker.csproj", "{1F44075F-ABD6-49A4-8EA1-DBB70304AD24}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.AspNetCore", "src\Sentry.AspNetCore\Sentry.AspNetCore.csproj", "{EBD057E5-771A-47EC-90E3-3C2625426A05}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Samples.Console.Basic", "samples\Sentry.Samples.Console.Basic\Sentry.Samples.Console.Basic.csproj", "{B793249D-3E52-4B0D-964F-BC022CD8A753}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Samples.AspNetCore.Basic", "samples\Sentry.Samples.AspNetCore.Basic\Sentry.Samples.AspNetCore.Basic.csproj", "{E061684E-0777-4C38-A90B-C53DAF260029}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Samples.Console.Customized", "samples\Sentry.Samples.Console.Customized\Sentry.Samples.Console.Customized.csproj", "{8FA2FE59-9333-47B8-A226-E2B0CDBB5847}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Samples.AspNetCore.Mvc", "samples\Sentry.Samples.AspNetCore.Mvc\Sentry.Samples.AspNetCore.Mvc.csproj", "{3D7754D1-CBA9-4693-80E9-B44F20423B51}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Samples.Console.Profiling", "samples\Sentry.Samples.Console.Profiling\Sentry.Samples.Console.Profiling.csproj", "{0D9861C5-D081-40F7-9DFC-7032840471AB}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.AspNetCore.Tests", "test\Sentry.AspNetCore.Tests\Sentry.AspNetCore.Tests.csproj", "{C100F0D2-3743-48F5-BA05-81E40F6C72FD}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Samples.EntityFramework", "samples\Sentry.Samples.EntityFramework\Sentry.Samples.EntityFramework.csproj", "{EEBE64CF-B1B5-4C54-B9B4-47ED7E5E760A}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Extensions.Logging.Tests", "test\Sentry.Extensions.Logging.Tests\Sentry.Extensions.Logging.Tests.csproj", "{32B17E4A-8C30-44CC-B1D3-093CF284B1C3}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Samples.GenericHost", "samples\Sentry.Samples.GenericHost\Sentry.Samples.GenericHost.csproj", "{9658457F-075C-4C44-A7AD-947365938B6C}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Testing", "test\Sentry.Testing\Sentry.Testing.csproj", "{20602A5A-B413-4E48-9AC9-00A7155774BD}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Samples.Google.Cloud.Functions", "samples\Sentry.Samples.Google.Cloud.Functions\Sentry.Samples.Google.Cloud.Functions.csproj", "{AB93DF75-C53F-43F7-B1EB-B679240D112B}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Samples.Log4Net", "samples\Sentry.Samples.Log4Net\Sentry.Samples.Log4Net.csproj", "{6B2A49CC-6992-47A7-8CF5-5EEA3216C8BC}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Samples.GraphQL.Client.Http", "samples\Sentry.Samples.GraphQL.Client.Http\Sentry.Samples.GraphQL.Client.Http.csproj", "{1E5E7A45-9826-4F06-8C68-B9F1DB05C4F2}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Log4Net", "src\Sentry.Log4Net\Sentry.Log4Net.csproj", "{D1D3BD5F-0C3A-4DA4-BAA2-2E725E74176F}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Samples.GraphQL.Server", "samples\Sentry.Samples.GraphQL.Server\Sentry.Samples.GraphQL.Server.csproj", "{D58B814E-1F19-43AE-89D1-769BC7681A56}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Log4Net.Tests", "test\Sentry.Log4Net.Tests\Sentry.Log4Net.Tests.csproj", "{F275C86B-8F62-4070-9544-83CC5B68B751}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Samples.Ios", "samples\Sentry.Samples.Ios\Sentry.Samples.Ios.csproj", "{C181C7D4-CA45-4FAE-8315-A9825F034D53}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Samples.GenericHost", "samples\Sentry.Samples.GenericHost\Sentry.Samples.GenericHost.csproj", "{5CBEFF17-71BF-407B-868F-C784E6385DC8}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Samples.Log4Net", "samples\Sentry.Samples.Log4Net\Sentry.Samples.Log4Net.csproj", "{4056B8FD-F355-41A3-A34F-60B350598B33}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Serilog", "src\Sentry.Serilog\Sentry.Serilog.csproj", "{2CF1FBEF-93C4-404E-94F6-543D08842633}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Samples.ME.Logging", "samples\Sentry.Samples.ME.Logging\Sentry.Samples.ME.Logging.csproj", "{6D383054-4712-4D03-A0B1-B9D4E1CC6F95}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Serilog.Tests", "test\Sentry.Serilog.Tests\Sentry.Serilog.Tests.csproj", "{EBABB411-4481-478B-BEAD-009D1EE6D259}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Samples.MacCatalyst", "samples\Sentry.Samples.MacCatalyst\Sentry.Samples.MacCatalyst.csproj", "{4E0DC405-C372-4396-A5DF-F6AA108DA01C}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Samples.Serilog", "samples\Sentry.Samples.Serilog\Sentry.Samples.Serilog.csproj", "{B7EDB922-4024-4546-B6E4-E5AB9016369F}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Samples.Maui", "samples\Sentry.Samples.Maui\Sentry.Samples.Maui.csproj", "{9B175EC8-6B64-4345-A158-091CB8876077}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Samples.AspNetCore.Serilog", "samples\Sentry.Samples.AspNetCore.Serilog\Sentry.Samples.AspNetCore.Serilog.csproj", "{1930A5D5-356B-43F9-AEDF-CB76254C5933}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Samples.NLog", "samples\Sentry.Samples.NLog\Sentry.Samples.NLog.csproj", "{EE0DC846-52F3-46AF-BC0D-DEF81150CEC0}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.NLog", "src\Sentry.NLog\Sentry.NLog.csproj", "{998AC5A8-8D13-46EA-B889-8A733CA152F7}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Samples.OpenTelemetry.AspNetCore", "samples\Sentry.Samples.OpenTelemetry.AspNetCore\Sentry.Samples.OpenTelemetry.AspNetCore.csproj", "{E37818EC-03D2-4B97-BE46-4C3F61465004}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.NLog.Tests", "test\Sentry.NLog.Tests\Sentry.NLog.Tests.csproj", "{21A360C7-338F-4A9D-A9A3-83152D0C9303}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Samples.OpenTelemetry.Console", "samples\Sentry.Samples.OpenTelemetry.Console\Sentry.Samples.OpenTelemetry.Console.csproj", "{E5141EAC-9420-48EA-995F-848CBBF0BD4B}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Samples.NLog", "samples\Sentry.Samples.NLog\Sentry.Samples.NLog.csproj", "{DC90D63E-E4F3-40CB-AF6D-2EAEE5F619B7}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Samples.Serilog", "samples\Sentry.Samples.Serilog\Sentry.Samples.Serilog.csproj", "{AA98FD8D-1254-4B34-840C-06BB263933DE}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.AspNet", "src\Sentry.AspNet\Sentry.AspNet.csproj", "{22AA261A-F8B4-41E2-95DD-82632EED0AA5}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{230B9384-90FD-4551-A5DE-1A5C197F25B6}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.AspNet.Tests", "test\Sentry.AspNet.Tests\Sentry.AspNet.Tests.csproj", "{0885DDFE-2FC7-4241-AEB1-8D6BDA627C0A}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Android.AssemblyReader", "src\Sentry.Android.AssemblyReader\Sentry.Android.AssemblyReader.csproj", "{20386BBE-1F55-4503-9F5F-F2C6B29DE865}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "scripts", "scripts", "{3454831A-397C-4039-AAFC-9152A4E0B682}" - ProjectSection(SolutionItems) = preProject - scripts\bump-version.sh = scripts\bump-version.sh - EndProjectSection +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.AspNet", "src\Sentry.AspNet\Sentry.AspNet.csproj", "{A7F651AD-51D3-4473-9641-7C76D2A0E3B7}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".github", ".github", "{F267BFB9-C5D5-4018-9D3F-B55443702AEC}" - ProjectSection(SolutionItems) = preProject - .github\CODEOWNERS = .github\CODEOWNERS - .github\ISSUE_TEMPLATE.md = .github\ISSUE_TEMPLATE.md - EndProjectSection +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.AspNetCore.Grpc", "src\Sentry.AspNetCore.Grpc\Sentry.AspNetCore.Grpc.csproj", "{DF785142-3E65-4176-8A6E-CAAD6BBF771F}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "workflows", "workflows", "{E1800E08-72E6-45AE-91EC-69B4FDBA7555}" - ProjectSection(SolutionItems) = preProject - .github\workflows\build.yml = .github\workflows\build.yml - .github\workflows\codeql-analysis.yml = .github\workflows\codeql-analysis.yml - .github\workflows\danger.yml = .github\workflows\danger.yml - .github\workflows\docs.yml = .github\workflows\docs.yml - .github\workflows\vulnerabilities.yml = .github\workflows\vulnerabilities.yml - EndProjectSection +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.AspNetCore", "src\Sentry.AspNetCore\Sentry.AspNetCore.csproj", "{4B323BCC-0E8D-43CE-9AC2-4B708278C7C2}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.AspNetCore.Grpc", "src\Sentry.AspNetCore.Grpc\Sentry.AspNetCore.Grpc.csproj", "{720811C8-29C7-4368-86F2-D61DF415AC2A}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.AzureFunctions.Worker", "src\Sentry.AzureFunctions.Worker\Sentry.AzureFunctions.Worker.csproj", "{52262FBB-40D0-4F08-B00F-B298185FF6BD}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.AspNetCore.Grpc.Tests", "test\Sentry.AspNetCore.Grpc.Tests\Sentry.AspNetCore.Grpc.Tests.csproj", "{3818FA5C-8649-427D-8E68-0C44558CA0DD}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Bindings.Android", "src\Sentry.Bindings.Android\Sentry.Bindings.Android.csproj", "{759D9E53-4717-491D-9970-B3A3367C65E7}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Samples.AspNetCore.Grpc", "samples\Sentry.Samples.AspNetCore.Grpc\Sentry.Samples.AspNetCore.Grpc.csproj", "{21599C29-C3D4-4DAC-A2D6-6C194600478F}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Bindings.Cocoa", "src\Sentry.Bindings.Cocoa\Sentry.Bindings.Cocoa.csproj", "{33336B98-A69E-4F28-A71A-1D8753F3BA24}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Samples.AspNetCore.Blazor.Wasm", "samples\Sentry.Samples.AspNetCore.Blazor.Wasm\Sentry.Samples.AspNetCore.Blazor.Wasm.csproj", "{73FDCE53-75D1-4DCC-933A-8AB93A0E86EA}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.DiagnosticSource", "src\Sentry.DiagnosticSource\Sentry.DiagnosticSource.csproj", "{22E4E3F5-8D6E-433D-9456-F60DFB1EFC82}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Samples.Aws.Lambda.AspNetCoreServer", "samples\Sentry.Samples.Aws.Lambda.AspNetCoreServer\Sentry.Samples.Aws.Lambda.AspNetCoreServer.csproj", "{274CEDC2-2129-469D-B269-649EFA2EF5E0}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.EntityFramework", "src\Sentry.EntityFramework\Sentry.EntityFramework.csproj", "{2AEC3A6E-886F-43DA-8EA6-82EBF916E89A}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.EntityFramework", "src\Sentry.EntityFramework\Sentry.EntityFramework.csproj", "{8B38F62E-0DD5-486F-96F5-2025AFB9B491}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Extensions.Logging", "src\Sentry.Extensions.Logging\Sentry.Extensions.Logging.csproj", "{F97EE360-3733-4993-823A-A81D004D417E}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.EntityFramework.Tests", "test\Sentry.EntityFramework.Tests\Sentry.EntityFramework.Tests.csproj", "{840B220E-68EC-4ECB-AEA1-67B0151F17FC}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Google.Cloud.Functions", "src\Sentry.Google.Cloud.Functions\Sentry.Google.Cloud.Functions.csproj", "{1D66CB6F-6268-4595-AD49-09DFD1784DDB}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Samples.EntityFramework", "samples\Sentry.Samples.EntityFramework\Sentry.Samples.EntityFramework.csproj", "{8E4BA4C7-413C-4668-8F41-32F484FFB7AA}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Log4Net", "src\Sentry.Log4Net\Sentry.Log4Net.csproj", "{EA4BB6FE-57B5-4A2B-88AD-FCCD96ECE19F}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Samples.Google.Cloud.Functions", "samples\Sentry.Samples.Google.Cloud.Functions\Sentry.Samples.Google.Cloud.Functions.csproj", "{88269A52-A0BA-41B2-8DF3-505B66B17243}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Maui", "src\Sentry.Maui\Sentry.Maui.csproj", "{DC89F322-155F-488B-8B80-3824B433F046}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Google.Cloud.Functions", "src\Sentry.Google.Cloud.Functions\Sentry.Google.Cloud.Functions.csproj", "{D1DB7B31-EC6B-430B-B6B0-2849BAE41AC1}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.NLog", "src\Sentry.NLog\Sentry.NLog.csproj", "{4E74CAAD-062F-4AF9-8B29-2ED4B2CC0E77}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Google.Cloud.Functions.Tests", "test\Sentry.Google.Cloud.Functions.Tests\Sentry.Google.Cloud.Functions.Tests.csproj", "{066522A4-8380-4D29-8DD0-973B1EDF0B39}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.OpenTelemetry", "src\Sentry.OpenTelemetry\Sentry.OpenTelemetry.csproj", "{957DFFC0-0FA3-48CC-AEDD-F9BBC3F0FADC}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.DiagnosticSource", "src\Sentry.DiagnosticSource\Sentry.DiagnosticSource.csproj", "{0BE821AB-88D4-4EB5-B012-C964FF58087A}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Profiling", "src\Sentry.Profiling\Sentry.Profiling.csproj", "{2E239FE2-F3B2-41B6-AE9E-561F6ACE5BA6}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.DiagnosticSource.Tests", "test\Sentry.DiagnosticSource.Tests\Sentry.DiagnosticSource.Tests.csproj", "{D870B028-16ED-4551-8B0F-5529479D04C9}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Serilog", "src\Sentry.Serilog\Sentry.Serilog.csproj", "{854EBD1B-73EE-4B93-89DF-E70436FF14CB}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Samples.Android", "samples\Sentry.Samples.Android\Sentry.Samples.Android.csproj", "{5CB9167E-ED23-4A67-8D3A-B66B0C5196C8}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry", "src\Sentry\Sentry.csproj", "{5F253D7F-BF27-46F5-9382-73A66EC247BF}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.DiagnosticSource.IntegrationTests", "test\Sentry.DiagnosticSource.IntegrationTests\Sentry.DiagnosticSource.IntegrationTests.csproj", "{F8120B9C-D4CA-43DA-B5E1-1CFBA7C36E3B}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{6987A1CC-608E-4868-A02C-09D30C8B7B2D}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Samples.Maui", "samples\Sentry.Samples.Maui\Sentry.Samples.Maui.csproj", "{EBCCABF9-F670-4C8D-AABC-4EB132961929}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AndroidTestApp", "test\AndroidTestApp\AndroidTestApp.csproj", "{99E2D1A4-1853-49F9-96B6-59C70FA3DE3A}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Maui", "src\Sentry.Maui\Sentry.Maui.csproj", "{FFFC74C5-680B-43E3-9C42-A7A23B589CB6}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MauiTestUtils", "MauiTestUtils", "{A11512A4-26BD-4936-B7A6-6FCE2E78FA80}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Maui.Tests", "test\Sentry.Maui.Tests\Sentry.Maui.Tests.csproj", "{143076C0-8D6B-4054-9F45-06B21655F417}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestUtils.DeviceTests.Runners.SourceGen", "test\MauiTestUtils\DeviceTests.Runners.SourceGen\TestUtils.DeviceTests.Runners.SourceGen.csproj", "{7C1A1318-137E-4E1E-ADB3-C0CE2B10F779}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Maui.Device.TestApp", "test\Sentry.Maui.Device.TestApp\Sentry.Maui.Device.TestApp.csproj", "{74221000-29E8-45E6-80D1-977862A3702C}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestUtils.DeviceTests.Runners", "test\MauiTestUtils\DeviceTests.Runners\TestUtils.DeviceTests.Runners.csproj", "{1C6F1CB1-2339-4E8B-9941-80998B940DCC}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestUtils.DeviceTests", "test\MauiTestUtils\DeviceTests\TestUtils.DeviceTests.csproj", "{9FCD773C-3309-482F-A63F-C95B2FFFCDD6}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestUtils.DeviceTests", "test\MauiTestUtils\DeviceTests\TestUtils.DeviceTests.csproj", "{E92F0A4E-2653-4341-8732-2AC9CF766739}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestUtils.DeviceTests.Runners.SourceGen", "test\MauiTestUtils\DeviceTests.Runners.SourceGen\TestUtils.DeviceTests.Runners.SourceGen.csproj", "{CCF39E27-1318-4912-B684-91927592ABB9}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Android.AssemblyReader.Tests", "test\Sentry.Android.AssemblyReader.Tests\Sentry.Android.AssemblyReader.Tests.csproj", "{3C543CED-F801-4843-BA48-76142843E1B9}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestUtils.DeviceTests.Runners", "test\MauiTestUtils\DeviceTests.Runners\TestUtils.DeviceTests.Runners.csproj", "{6E3BB0B6-3792-47E5-95FB-B410C788507F}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.AspNet.Tests", "test\Sentry.AspNet.Tests\Sentry.AspNet.Tests.csproj", "{7ABAA536-7BEC-46D7-9C61-82440DDC9AA8}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MauiTestUtils", "MauiTestUtils", "{3945EBC3-DDF3-4EBB-9401-B3027E87F855}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.AspNetCore.Grpc.Tests", "test\Sentry.AspNetCore.Grpc.Tests\Sentry.AspNetCore.Grpc.Tests.csproj", "{D7D1EA68-ACE3-4DF3-A33C-EBB5B74701F5}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Samples.Ios", "samples\Sentry.Samples.Ios\Sentry.Samples.Ios.csproj", "{C2876321-A612-4E66-AF33-D3928FA6366F}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.AspNetCore.TestUtils", "test\Sentry.AspNetCore.TestUtils\Sentry.AspNetCore.TestUtils.csproj", "{563FEA1C-FDAE-4EDE-9ABF-22D76F2DA048}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Testing.CrashableApp", "test\Sentry.Testing.CrashableApp\Sentry.Testing.CrashableApp.csproj", "{DA3CECBB-83BE-441A-852C-077809C48307}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.AspNetCore.Tests", "test\Sentry.AspNetCore.Tests\Sentry.AspNetCore.Tests.csproj", "{6D9EB590-CED1-47C2-87B1-E65EE0EEBB9E}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Samples.MacCatalyst", "samples\Sentry.Samples.MacCatalyst\Sentry.Samples.MacCatalyst.csproj", "{3506539B-983C-44FD-BD95-1931562E7919}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.AzureFunctions.Worker.Tests", "test\Sentry.AzureFunctions.Worker.Tests\Sentry.AzureFunctions.Worker.Tests.csproj", "{39F7BB08-908B-49F9-A96B-E14C16B69090}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Samples.AspNetCore.Blazor.Server", "samples\Sentry.Samples.AspNetCore.Blazor.Server\Sentry.Samples.AspNetCore.Blazor.Server.csproj", "{70066C6C-0A18-4322-A02A-9A0DFE59C02B}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.DiagnosticSource.IntegrationTests", "test\Sentry.DiagnosticSource.IntegrationTests\Sentry.DiagnosticSource.IntegrationTests.csproj", "{59742E7E-4380-4B40-BCC8-5AB314290198}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Bindings.Android", "src\Sentry.Bindings.Android\Sentry.Bindings.Android.csproj", "{9A23DA57-3F0B-4646-A37A-71A4CE7C94CB}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.DiagnosticSource.Tests", "test\Sentry.DiagnosticSource.Tests\Sentry.DiagnosticSource.Tests.csproj", "{6222BF96-2F1F-42DA-AF43-388B20151A5A}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Bindings.Cocoa", "src\Sentry.Bindings.Cocoa\Sentry.Bindings.Cocoa.csproj", "{F533FD6D-1E10-4F06-BE3A-3B3C713A75A6}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.EntityFramework.Tests", "test\Sentry.EntityFramework.Tests\Sentry.EntityFramework.Tests.csproj", "{18FDE2B5-6023-487C-A349-E492F3F34B4A}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Android.AssemblyReader.Tests", "test\Sentry.Android.AssemblyReader.Tests\Sentry.Android.AssemblyReader.Tests.csproj", "{5E12E053-22AF-4184-8581-3FCFD225617D}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Extensions.Logging.Tests", "test\Sentry.Extensions.Logging.Tests\Sentry.Extensions.Logging.Tests.csproj", "{357D2522-4481-4135-8379-C228C743DD69}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.AspNetCore.TestUtils", "test\Sentry.AspNetCore.TestUtils\Sentry.AspNetCore.TestUtils.csproj", "{C96CB65D-3D2D-404E-85C0-69A3FC03B48F}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Google.Cloud.Functions.Tests", "test\Sentry.Google.Cloud.Functions.Tests\Sentry.Google.Cloud.Functions.Tests.csproj", "{321A2E5D-6A3E-44B6-BECE-D1FFA94D58B9}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Android.AssemblyReader", "src\Sentry.Android.AssemblyReader\Sentry.Android.AssemblyReader.csproj", "{ED5E4F7E-8267-4F3C-BD2A-779AC9BF3D7C}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Log4Net.Tests", "test\Sentry.Log4Net.Tests\Sentry.Log4Net.Tests.csproj", "{A454B861-62B4-4F4D-8E31-725C4592D169}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Profiling", "src\Sentry.Profiling\Sentry.Profiling.csproj", "{BD6CEF44-E05E-4C22-8D2F-0558A93DD2D6}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Maui.Device.TestApp", "test\Sentry.Maui.Device.TestApp\Sentry.Maui.Device.TestApp.csproj", "{F89C3981-6D5A-4D63-8CD0-FB35E55C5835}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Profiling.Tests", "test\Sentry.Profiling.Tests\Sentry.Profiling.Tests.csproj", "{2E750A7C-561D-4959-B967-042755139D84}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Maui.Tests", "test\Sentry.Maui.Tests\Sentry.Maui.Tests.csproj", "{A8FFC45B-7FC3-44B3-B8AF-CA9642E66546}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Samples.Console.Profiling", "samples\Sentry.Samples.Console.Profiling\Sentry.Samples.Console.Profiling.csproj", "{0F84C0BB-FDD4-43A9-B594-923EB10C8E3F}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.NLog.Tests", "test\Sentry.NLog.Tests\Sentry.NLog.Tests.csproj", "{9D3631D0-C7DA-4283-BA24-A14424B0F7BE}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.AzureFunctions.Worker", "src\Sentry.AzureFunctions.Worker\Sentry.AzureFunctions.Worker.csproj", "{DDDF66BE-EC0E-4488-8A35-3D8BEB63F2DB}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.OpenTelemetry.Tests", "test\Sentry.OpenTelemetry.Tests\Sentry.OpenTelemetry.Tests.csproj", "{CDB5B2C4-4CD6-4AE0-9C4B-451B3170FB55}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Samples.AzureFunctions.Worker", "samples\Sentry.Samples.AzureFunctions.Worker\Sentry.Samples.AzureFunctions.Worker.csproj", "{C38B2A7A-0B21-41BA-8AE4-5D0A2AB6B029}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Profiling.Tests", "test\Sentry.Profiling.Tests\Sentry.Profiling.Tests.csproj", "{CC0FE166-E649-4CA4-AACD-C0205ECDF896}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.AzureFunctions.Worker.Tests", "test\Sentry.AzureFunctions.Worker.Tests\Sentry.AzureFunctions.Worker.Tests.csproj", "{CCABBDB9-CDEF-4DE6-9264-69797E8831DF}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Serilog.Tests", "test\Sentry.Serilog.Tests\Sentry.Serilog.Tests.csproj", "{C97D62CF-A541-4393-A49A-92F53F1E1983}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.OpenTelemetry", "src\Sentry.OpenTelemetry\Sentry.OpenTelemetry.csproj", "{94C5E990-50EE-462F-B83F-B4357F549500}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Testing.CrashableApp", "test\Sentry.Testing.CrashableApp\Sentry.Testing.CrashableApp.csproj", "{36ADA62A-0AD5-461A-B28C-A5DBAF718B59}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.OpenTelemetry.Tests", "test\Sentry.OpenTelemetry.Tests\Sentry.OpenTelemetry.Tests.csproj", "{C51A781A-C568-4E1A-834C-8E4EFA3C5B54}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Testing", "test\Sentry.Testing\Sentry.Testing.csproj", "{A2AD0EF1-6943-46E0-BEED-0704D362FA48}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Samples.OpenTelemetry.AspNetCore", "samples\Sentry.Samples.OpenTelemetry.AspNetCore\Sentry.Samples.OpenTelemetry.AspNetCore.csproj", "{2502D3A0-7628-4768-A430-0854BEB1E7A5}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Tests", "test\Sentry.Tests\Sentry.Tests.csproj", "{9272A135-C1F7-4317-8AEA-1BFDEE2DC683}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Samples.OpenTelemetry.Console", "samples\Sentry.Samples.OpenTelemetry.Console\Sentry.Samples.OpenTelemetry.Console.csproj", "{A9176F5B-0CA6-4479-BE64-A3C3CEA632D4}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SingleFileTestApp", "test\SingleFileTestApp\SingleFileTestApp.csproj", "{162A1CAE-ACEE-45CA-A6D0-7702ADE4D3DE}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {F2486CC8-FAB7-4775-976F-C5A4CF97867F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F2486CC8-FAB7-4775-976F-C5A4CF97867F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F2486CC8-FAB7-4775-976F-C5A4CF97867F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F2486CC8-FAB7-4775-976F-C5A4CF97867F}.Release|Any CPU.Build.0 = Release|Any CPU - {1E0F969B-67F9-4FCC-BCBF-596DB6460C7C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1E0F969B-67F9-4FCC-BCBF-596DB6460C7C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1E0F969B-67F9-4FCC-BCBF-596DB6460C7C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1E0F969B-67F9-4FCC-BCBF-596DB6460C7C}.Release|Any CPU.Build.0 = Release|Any CPU - {65F5A969-B386-48F5-8B7E-6C90D6C720BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {65F5A969-B386-48F5-8B7E-6C90D6C720BC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {65F5A969-B386-48F5-8B7E-6C90D6C720BC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {65F5A969-B386-48F5-8B7E-6C90D6C720BC}.Release|Any CPU.Build.0 = Release|Any CPU - {DE536383-4A18-4057-A7F0-639BDEF6E1BB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DE536383-4A18-4057-A7F0-639BDEF6E1BB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DE536383-4A18-4057-A7F0-639BDEF6E1BB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DE536383-4A18-4057-A7F0-639BDEF6E1BB}.Release|Any CPU.Build.0 = Release|Any CPU - {2718BBA4-F080-4924-BA50-B63F756FB097}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2718BBA4-F080-4924-BA50-B63F756FB097}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2718BBA4-F080-4924-BA50-B63F756FB097}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2718BBA4-F080-4924-BA50-B63F756FB097}.Release|Any CPU.Build.0 = Release|Any CPU - {6CAE75C2-9DED-44F4-8E14-2D4F9159D55F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6CAE75C2-9DED-44F4-8E14-2D4F9159D55F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6CAE75C2-9DED-44F4-8E14-2D4F9159D55F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6CAE75C2-9DED-44F4-8E14-2D4F9159D55F}.Release|Any CPU.Build.0 = Release|Any CPU - {BD43F598-5B20-477D-88C9-55B186542179}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BD43F598-5B20-477D-88C9-55B186542179}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BD43F598-5B20-477D-88C9-55B186542179}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BD43F598-5B20-477D-88C9-55B186542179}.Release|Any CPU.Build.0 = Release|Any CPU - {EBD057E5-771A-47EC-90E3-3C2625426A05}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EBD057E5-771A-47EC-90E3-3C2625426A05}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EBD057E5-771A-47EC-90E3-3C2625426A05}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EBD057E5-771A-47EC-90E3-3C2625426A05}.Release|Any CPU.Build.0 = Release|Any CPU - {E061684E-0777-4C38-A90B-C53DAF260029}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E061684E-0777-4C38-A90B-C53DAF260029}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E061684E-0777-4C38-A90B-C53DAF260029}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E061684E-0777-4C38-A90B-C53DAF260029}.Release|Any CPU.Build.0 = Release|Any CPU - {3D7754D1-CBA9-4693-80E9-B44F20423B51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3D7754D1-CBA9-4693-80E9-B44F20423B51}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3D7754D1-CBA9-4693-80E9-B44F20423B51}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3D7754D1-CBA9-4693-80E9-B44F20423B51}.Release|Any CPU.Build.0 = Release|Any CPU - {C100F0D2-3743-48F5-BA05-81E40F6C72FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C100F0D2-3743-48F5-BA05-81E40F6C72FD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C100F0D2-3743-48F5-BA05-81E40F6C72FD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C100F0D2-3743-48F5-BA05-81E40F6C72FD}.Release|Any CPU.Build.0 = Release|Any CPU - {32B17E4A-8C30-44CC-B1D3-093CF284B1C3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {32B17E4A-8C30-44CC-B1D3-093CF284B1C3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {32B17E4A-8C30-44CC-B1D3-093CF284B1C3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {32B17E4A-8C30-44CC-B1D3-093CF284B1C3}.Release|Any CPU.Build.0 = Release|Any CPU - {20602A5A-B413-4E48-9AC9-00A7155774BD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {20602A5A-B413-4E48-9AC9-00A7155774BD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {20602A5A-B413-4E48-9AC9-00A7155774BD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {20602A5A-B413-4E48-9AC9-00A7155774BD}.Release|Any CPU.Build.0 = Release|Any CPU - {6B2A49CC-6992-47A7-8CF5-5EEA3216C8BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6B2A49CC-6992-47A7-8CF5-5EEA3216C8BC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6B2A49CC-6992-47A7-8CF5-5EEA3216C8BC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6B2A49CC-6992-47A7-8CF5-5EEA3216C8BC}.Release|Any CPU.Build.0 = Release|Any CPU - {D1D3BD5F-0C3A-4DA4-BAA2-2E725E74176F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D1D3BD5F-0C3A-4DA4-BAA2-2E725E74176F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D1D3BD5F-0C3A-4DA4-BAA2-2E725E74176F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D1D3BD5F-0C3A-4DA4-BAA2-2E725E74176F}.Release|Any CPU.Build.0 = Release|Any CPU - {F275C86B-8F62-4070-9544-83CC5B68B751}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F275C86B-8F62-4070-9544-83CC5B68B751}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F275C86B-8F62-4070-9544-83CC5B68B751}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F275C86B-8F62-4070-9544-83CC5B68B751}.Release|Any CPU.Build.0 = Release|Any CPU - {5CBEFF17-71BF-407B-868F-C784E6385DC8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5CBEFF17-71BF-407B-868F-C784E6385DC8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5CBEFF17-71BF-407B-868F-C784E6385DC8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5CBEFF17-71BF-407B-868F-C784E6385DC8}.Release|Any CPU.Build.0 = Release|Any CPU - {2CF1FBEF-93C4-404E-94F6-543D08842633}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2CF1FBEF-93C4-404E-94F6-543D08842633}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2CF1FBEF-93C4-404E-94F6-543D08842633}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2CF1FBEF-93C4-404E-94F6-543D08842633}.Release|Any CPU.Build.0 = Release|Any CPU - {EBABB411-4481-478B-BEAD-009D1EE6D259}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EBABB411-4481-478B-BEAD-009D1EE6D259}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EBABB411-4481-478B-BEAD-009D1EE6D259}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EBABB411-4481-478B-BEAD-009D1EE6D259}.Release|Any CPU.Build.0 = Release|Any CPU - {B7EDB922-4024-4546-B6E4-E5AB9016369F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B7EDB922-4024-4546-B6E4-E5AB9016369F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B7EDB922-4024-4546-B6E4-E5AB9016369F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B7EDB922-4024-4546-B6E4-E5AB9016369F}.Release|Any CPU.Build.0 = Release|Any CPU - {1930A5D5-356B-43F9-AEDF-CB76254C5933}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1930A5D5-356B-43F9-AEDF-CB76254C5933}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1930A5D5-356B-43F9-AEDF-CB76254C5933}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1930A5D5-356B-43F9-AEDF-CB76254C5933}.Release|Any CPU.Build.0 = Release|Any CPU - {998AC5A8-8D13-46EA-B889-8A733CA152F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {998AC5A8-8D13-46EA-B889-8A733CA152F7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {998AC5A8-8D13-46EA-B889-8A733CA152F7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {998AC5A8-8D13-46EA-B889-8A733CA152F7}.Release|Any CPU.Build.0 = Release|Any CPU - {21A360C7-338F-4A9D-A9A3-83152D0C9303}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {21A360C7-338F-4A9D-A9A3-83152D0C9303}.Debug|Any CPU.Build.0 = Debug|Any CPU - {21A360C7-338F-4A9D-A9A3-83152D0C9303}.Release|Any CPU.ActiveCfg = Release|Any CPU - {21A360C7-338F-4A9D-A9A3-83152D0C9303}.Release|Any CPU.Build.0 = Release|Any CPU - {DC90D63E-E4F3-40CB-AF6D-2EAEE5F619B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DC90D63E-E4F3-40CB-AF6D-2EAEE5F619B7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DC90D63E-E4F3-40CB-AF6D-2EAEE5F619B7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DC90D63E-E4F3-40CB-AF6D-2EAEE5F619B7}.Release|Any CPU.Build.0 = Release|Any CPU - {22AA261A-F8B4-41E2-95DD-82632EED0AA5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {22AA261A-F8B4-41E2-95DD-82632EED0AA5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {22AA261A-F8B4-41E2-95DD-82632EED0AA5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {22AA261A-F8B4-41E2-95DD-82632EED0AA5}.Release|Any CPU.Build.0 = Release|Any CPU - {0885DDFE-2FC7-4241-AEB1-8D6BDA627C0A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0885DDFE-2FC7-4241-AEB1-8D6BDA627C0A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0885DDFE-2FC7-4241-AEB1-8D6BDA627C0A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0885DDFE-2FC7-4241-AEB1-8D6BDA627C0A}.Release|Any CPU.Build.0 = Release|Any CPU - {720811C8-29C7-4368-86F2-D61DF415AC2A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {720811C8-29C7-4368-86F2-D61DF415AC2A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {720811C8-29C7-4368-86F2-D61DF415AC2A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {720811C8-29C7-4368-86F2-D61DF415AC2A}.Release|Any CPU.Build.0 = Release|Any CPU - {3818FA5C-8649-427D-8E68-0C44558CA0DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3818FA5C-8649-427D-8E68-0C44558CA0DD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3818FA5C-8649-427D-8E68-0C44558CA0DD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3818FA5C-8649-427D-8E68-0C44558CA0DD}.Release|Any CPU.Build.0 = Release|Any CPU - {21599C29-C3D4-4DAC-A2D6-6C194600478F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {21599C29-C3D4-4DAC-A2D6-6C194600478F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {21599C29-C3D4-4DAC-A2D6-6C194600478F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {21599C29-C3D4-4DAC-A2D6-6C194600478F}.Release|Any CPU.Build.0 = Release|Any CPU - {73FDCE53-75D1-4DCC-933A-8AB93A0E86EA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {73FDCE53-75D1-4DCC-933A-8AB93A0E86EA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {73FDCE53-75D1-4DCC-933A-8AB93A0E86EA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {73FDCE53-75D1-4DCC-933A-8AB93A0E86EA}.Release|Any CPU.Build.0 = Release|Any CPU - {274CEDC2-2129-469D-B269-649EFA2EF5E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {274CEDC2-2129-469D-B269-649EFA2EF5E0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {274CEDC2-2129-469D-B269-649EFA2EF5E0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {274CEDC2-2129-469D-B269-649EFA2EF5E0}.Release|Any CPU.Build.0 = Release|Any CPU - {8B38F62E-0DD5-486F-96F5-2025AFB9B491}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8B38F62E-0DD5-486F-96F5-2025AFB9B491}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8B38F62E-0DD5-486F-96F5-2025AFB9B491}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8B38F62E-0DD5-486F-96F5-2025AFB9B491}.Release|Any CPU.Build.0 = Release|Any CPU - {840B220E-68EC-4ECB-AEA1-67B0151F17FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {840B220E-68EC-4ECB-AEA1-67B0151F17FC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {840B220E-68EC-4ECB-AEA1-67B0151F17FC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {840B220E-68EC-4ECB-AEA1-67B0151F17FC}.Release|Any CPU.Build.0 = Release|Any CPU - {8E4BA4C7-413C-4668-8F41-32F484FFB7AA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8E4BA4C7-413C-4668-8F41-32F484FFB7AA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8E4BA4C7-413C-4668-8F41-32F484FFB7AA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8E4BA4C7-413C-4668-8F41-32F484FFB7AA}.Release|Any CPU.Build.0 = Release|Any CPU - {88269A52-A0BA-41B2-8DF3-505B66B17243}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {88269A52-A0BA-41B2-8DF3-505B66B17243}.Debug|Any CPU.Build.0 = Debug|Any CPU - {88269A52-A0BA-41B2-8DF3-505B66B17243}.Release|Any CPU.ActiveCfg = Release|Any CPU - {88269A52-A0BA-41B2-8DF3-505B66B17243}.Release|Any CPU.Build.0 = Release|Any CPU - {D1DB7B31-EC6B-430B-B6B0-2849BAE41AC1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D1DB7B31-EC6B-430B-B6B0-2849BAE41AC1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D1DB7B31-EC6B-430B-B6B0-2849BAE41AC1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D1DB7B31-EC6B-430B-B6B0-2849BAE41AC1}.Release|Any CPU.Build.0 = Release|Any CPU - {066522A4-8380-4D29-8DD0-973B1EDF0B39}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {066522A4-8380-4D29-8DD0-973B1EDF0B39}.Debug|Any CPU.Build.0 = Debug|Any CPU - {066522A4-8380-4D29-8DD0-973B1EDF0B39}.Release|Any CPU.ActiveCfg = Release|Any CPU - {066522A4-8380-4D29-8DD0-973B1EDF0B39}.Release|Any CPU.Build.0 = Release|Any CPU - {0BE821AB-88D4-4EB5-B012-C964FF58087A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0BE821AB-88D4-4EB5-B012-C964FF58087A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0BE821AB-88D4-4EB5-B012-C964FF58087A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0BE821AB-88D4-4EB5-B012-C964FF58087A}.Release|Any CPU.Build.0 = Release|Any CPU - {D870B028-16ED-4551-8B0F-5529479D04C9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D870B028-16ED-4551-8B0F-5529479D04C9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D870B028-16ED-4551-8B0F-5529479D04C9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D870B028-16ED-4551-8B0F-5529479D04C9}.Release|Any CPU.Build.0 = Release|Any CPU - {5CB9167E-ED23-4A67-8D3A-B66B0C5196C8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5CB9167E-ED23-4A67-8D3A-B66B0C5196C8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5CB9167E-ED23-4A67-8D3A-B66B0C5196C8}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {5CB9167E-ED23-4A67-8D3A-B66B0C5196C8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5CB9167E-ED23-4A67-8D3A-B66B0C5196C8}.Release|Any CPU.Build.0 = Release|Any CPU - {5CB9167E-ED23-4A67-8D3A-B66B0C5196C8}.Release|Any CPU.Deploy.0 = Release|Any CPU - {F8120B9C-D4CA-43DA-B5E1-1CFBA7C36E3B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F8120B9C-D4CA-43DA-B5E1-1CFBA7C36E3B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F8120B9C-D4CA-43DA-B5E1-1CFBA7C36E3B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F8120B9C-D4CA-43DA-B5E1-1CFBA7C36E3B}.Release|Any CPU.Build.0 = Release|Any CPU - {EBCCABF9-F670-4C8D-AABC-4EB132961929}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EBCCABF9-F670-4C8D-AABC-4EB132961929}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EBCCABF9-F670-4C8D-AABC-4EB132961929}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {EBCCABF9-F670-4C8D-AABC-4EB132961929}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EBCCABF9-F670-4C8D-AABC-4EB132961929}.Release|Any CPU.Build.0 = Release|Any CPU - {EBCCABF9-F670-4C8D-AABC-4EB132961929}.Release|Any CPU.Deploy.0 = Release|Any CPU - {FFFC74C5-680B-43E3-9C42-A7A23B589CB6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FFFC74C5-680B-43E3-9C42-A7A23B589CB6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FFFC74C5-680B-43E3-9C42-A7A23B589CB6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FFFC74C5-680B-43E3-9C42-A7A23B589CB6}.Release|Any CPU.Build.0 = Release|Any CPU - {143076C0-8D6B-4054-9F45-06B21655F417}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {143076C0-8D6B-4054-9F45-06B21655F417}.Debug|Any CPU.Build.0 = Debug|Any CPU - {143076C0-8D6B-4054-9F45-06B21655F417}.Release|Any CPU.ActiveCfg = Release|Any CPU - {143076C0-8D6B-4054-9F45-06B21655F417}.Release|Any CPU.Build.0 = Release|Any CPU - {74221000-29E8-45E6-80D1-977862A3702C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {74221000-29E8-45E6-80D1-977862A3702C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {74221000-29E8-45E6-80D1-977862A3702C}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {74221000-29E8-45E6-80D1-977862A3702C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {74221000-29E8-45E6-80D1-977862A3702C}.Release|Any CPU.Build.0 = Release|Any CPU - {74221000-29E8-45E6-80D1-977862A3702C}.Release|Any CPU.Deploy.0 = Release|Any CPU - {9FCD773C-3309-482F-A63F-C95B2FFFCDD6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9FCD773C-3309-482F-A63F-C95B2FFFCDD6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9FCD773C-3309-482F-A63F-C95B2FFFCDD6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9FCD773C-3309-482F-A63F-C95B2FFFCDD6}.Release|Any CPU.Build.0 = Release|Any CPU - {CCF39E27-1318-4912-B684-91927592ABB9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CCF39E27-1318-4912-B684-91927592ABB9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CCF39E27-1318-4912-B684-91927592ABB9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CCF39E27-1318-4912-B684-91927592ABB9}.Release|Any CPU.Build.0 = Release|Any CPU - {6E3BB0B6-3792-47E5-95FB-B410C788507F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6E3BB0B6-3792-47E5-95FB-B410C788507F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6E3BB0B6-3792-47E5-95FB-B410C788507F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6E3BB0B6-3792-47E5-95FB-B410C788507F}.Release|Any CPU.Build.0 = Release|Any CPU - {C2876321-A612-4E66-AF33-D3928FA6366F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C2876321-A612-4E66-AF33-D3928FA6366F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C2876321-A612-4E66-AF33-D3928FA6366F}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {C2876321-A612-4E66-AF33-D3928FA6366F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C2876321-A612-4E66-AF33-D3928FA6366F}.Release|Any CPU.Build.0 = Release|Any CPU - {C2876321-A612-4E66-AF33-D3928FA6366F}.Release|Any CPU.Deploy.0 = Release|Any CPU - {DA3CECBB-83BE-441A-852C-077809C48307}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DA3CECBB-83BE-441A-852C-077809C48307}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DA3CECBB-83BE-441A-852C-077809C48307}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DA3CECBB-83BE-441A-852C-077809C48307}.Release|Any CPU.Build.0 = Release|Any CPU - {3506539B-983C-44FD-BD95-1931562E7919}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3506539B-983C-44FD-BD95-1931562E7919}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3506539B-983C-44FD-BD95-1931562E7919}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {3506539B-983C-44FD-BD95-1931562E7919}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3506539B-983C-44FD-BD95-1931562E7919}.Release|Any CPU.Build.0 = Release|Any CPU - {70066C6C-0A18-4322-A02A-9A0DFE59C02B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {70066C6C-0A18-4322-A02A-9A0DFE59C02B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {70066C6C-0A18-4322-A02A-9A0DFE59C02B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {70066C6C-0A18-4322-A02A-9A0DFE59C02B}.Release|Any CPU.Build.0 = Release|Any CPU - {9A23DA57-3F0B-4646-A37A-71A4CE7C94CB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9A23DA57-3F0B-4646-A37A-71A4CE7C94CB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9A23DA57-3F0B-4646-A37A-71A4CE7C94CB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9A23DA57-3F0B-4646-A37A-71A4CE7C94CB}.Release|Any CPU.Build.0 = Release|Any CPU - {F533FD6D-1E10-4F06-BE3A-3B3C713A75A6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F533FD6D-1E10-4F06-BE3A-3B3C713A75A6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F533FD6D-1E10-4F06-BE3A-3B3C713A75A6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F533FD6D-1E10-4F06-BE3A-3B3C713A75A6}.Release|Any CPU.Build.0 = Release|Any CPU - {5E12E053-22AF-4184-8581-3FCFD225617D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5E12E053-22AF-4184-8581-3FCFD225617D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5E12E053-22AF-4184-8581-3FCFD225617D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5E12E053-22AF-4184-8581-3FCFD225617D}.Release|Any CPU.Build.0 = Release|Any CPU - {C96CB65D-3D2D-404E-85C0-69A3FC03B48F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C96CB65D-3D2D-404E-85C0-69A3FC03B48F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C96CB65D-3D2D-404E-85C0-69A3FC03B48F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C96CB65D-3D2D-404E-85C0-69A3FC03B48F}.Release|Any CPU.Build.0 = Release|Any CPU - {ED5E4F7E-8267-4F3C-BD2A-779AC9BF3D7C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {ED5E4F7E-8267-4F3C-BD2A-779AC9BF3D7C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {ED5E4F7E-8267-4F3C-BD2A-779AC9BF3D7C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {ED5E4F7E-8267-4F3C-BD2A-779AC9BF3D7C}.Release|Any CPU.Build.0 = Release|Any CPU - {BD6CEF44-E05E-4C22-8D2F-0558A93DD2D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BD6CEF44-E05E-4C22-8D2F-0558A93DD2D6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BD6CEF44-E05E-4C22-8D2F-0558A93DD2D6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BD6CEF44-E05E-4C22-8D2F-0558A93DD2D6}.Release|Any CPU.Build.0 = Release|Any CPU - {2E750A7C-561D-4959-B967-042755139D84}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2E750A7C-561D-4959-B967-042755139D84}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2E750A7C-561D-4959-B967-042755139D84}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2E750A7C-561D-4959-B967-042755139D84}.Release|Any CPU.Build.0 = Release|Any CPU - {0F84C0BB-FDD4-43A9-B594-923EB10C8E3F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0F84C0BB-FDD4-43A9-B594-923EB10C8E3F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0F84C0BB-FDD4-43A9-B594-923EB10C8E3F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0F84C0BB-FDD4-43A9-B594-923EB10C8E3F}.Release|Any CPU.Build.0 = Release|Any CPU - {DDDF66BE-EC0E-4488-8A35-3D8BEB63F2DB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DDDF66BE-EC0E-4488-8A35-3D8BEB63F2DB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DDDF66BE-EC0E-4488-8A35-3D8BEB63F2DB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DDDF66BE-EC0E-4488-8A35-3D8BEB63F2DB}.Release|Any CPU.Build.0 = Release|Any CPU - {C38B2A7A-0B21-41BA-8AE4-5D0A2AB6B029}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C38B2A7A-0B21-41BA-8AE4-5D0A2AB6B029}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C38B2A7A-0B21-41BA-8AE4-5D0A2AB6B029}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C38B2A7A-0B21-41BA-8AE4-5D0A2AB6B029}.Release|Any CPU.Build.0 = Release|Any CPU - {CCABBDB9-CDEF-4DE6-9264-69797E8831DF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CCABBDB9-CDEF-4DE6-9264-69797E8831DF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CCABBDB9-CDEF-4DE6-9264-69797E8831DF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CCABBDB9-CDEF-4DE6-9264-69797E8831DF}.Release|Any CPU.Build.0 = Release|Any CPU - {94C5E990-50EE-462F-B83F-B4357F549500}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {94C5E990-50EE-462F-B83F-B4357F549500}.Debug|Any CPU.Build.0 = Debug|Any CPU - {94C5E990-50EE-462F-B83F-B4357F549500}.Release|Any CPU.ActiveCfg = Release|Any CPU - {94C5E990-50EE-462F-B83F-B4357F549500}.Release|Any CPU.Build.0 = Release|Any CPU - {C51A781A-C568-4E1A-834C-8E4EFA3C5B54}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C51A781A-C568-4E1A-834C-8E4EFA3C5B54}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C51A781A-C568-4E1A-834C-8E4EFA3C5B54}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C51A781A-C568-4E1A-834C-8E4EFA3C5B54}.Release|Any CPU.Build.0 = Release|Any CPU - {2502D3A0-7628-4768-A430-0854BEB1E7A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2502D3A0-7628-4768-A430-0854BEB1E7A5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2502D3A0-7628-4768-A430-0854BEB1E7A5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2502D3A0-7628-4768-A430-0854BEB1E7A5}.Release|Any CPU.Build.0 = Release|Any CPU - {A9176F5B-0CA6-4479-BE64-A3C3CEA632D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A9176F5B-0CA6-4479-BE64-A3C3CEA632D4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A9176F5B-0CA6-4479-BE64-A3C3CEA632D4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A9176F5B-0CA6-4479-BE64-A3C3CEA632D4}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {F2486CC8-FAB7-4775-976F-C5A4CF97867F} = {AF6AF4C7-8AA2-4D59-8064-2D79560904EB} - {1E0F969B-67F9-4FCC-BCBF-596DB6460C7C} = {83263231-1A2A-4733-B759-EEFF14E8C5D5} - {65F5A969-B386-48F5-8B7E-6C90D6C720BC} = {77454495-55EE-4B40-A089-71B9E8F82E89} - {DE536383-4A18-4057-A7F0-639BDEF6E1BB} = {77454495-55EE-4B40-A089-71B9E8F82E89} - {2718BBA4-F080-4924-BA50-B63F756FB097} = {AF6AF4C7-8AA2-4D59-8064-2D79560904EB} - {6CAE75C2-9DED-44F4-8E14-2D4F9159D55F} = {77454495-55EE-4B40-A089-71B9E8F82E89} - {BD43F598-5B20-477D-88C9-55B186542179} = {97EF834D-6BEB-45E8-B69A-1F9B7815B8B4} - {EBD057E5-771A-47EC-90E3-3C2625426A05} = {AF6AF4C7-8AA2-4D59-8064-2D79560904EB} - {E061684E-0777-4C38-A90B-C53DAF260029} = {77454495-55EE-4B40-A089-71B9E8F82E89} - {3D7754D1-CBA9-4693-80E9-B44F20423B51} = {77454495-55EE-4B40-A089-71B9E8F82E89} - {C100F0D2-3743-48F5-BA05-81E40F6C72FD} = {83263231-1A2A-4733-B759-EEFF14E8C5D5} - {32B17E4A-8C30-44CC-B1D3-093CF284B1C3} = {83263231-1A2A-4733-B759-EEFF14E8C5D5} - {20602A5A-B413-4E48-9AC9-00A7155774BD} = {83263231-1A2A-4733-B759-EEFF14E8C5D5} - {6B2A49CC-6992-47A7-8CF5-5EEA3216C8BC} = {77454495-55EE-4B40-A089-71B9E8F82E89} - {D1D3BD5F-0C3A-4DA4-BAA2-2E725E74176F} = {AF6AF4C7-8AA2-4D59-8064-2D79560904EB} - {F275C86B-8F62-4070-9544-83CC5B68B751} = {83263231-1A2A-4733-B759-EEFF14E8C5D5} - {5CBEFF17-71BF-407B-868F-C784E6385DC8} = {77454495-55EE-4B40-A089-71B9E8F82E89} - {2CF1FBEF-93C4-404E-94F6-543D08842633} = {AF6AF4C7-8AA2-4D59-8064-2D79560904EB} - {EBABB411-4481-478B-BEAD-009D1EE6D259} = {83263231-1A2A-4733-B759-EEFF14E8C5D5} - {B7EDB922-4024-4546-B6E4-E5AB9016369F} = {77454495-55EE-4B40-A089-71B9E8F82E89} - {1930A5D5-356B-43F9-AEDF-CB76254C5933} = {77454495-55EE-4B40-A089-71B9E8F82E89} - {998AC5A8-8D13-46EA-B889-8A733CA152F7} = {AF6AF4C7-8AA2-4D59-8064-2D79560904EB} - {21A360C7-338F-4A9D-A9A3-83152D0C9303} = {83263231-1A2A-4733-B759-EEFF14E8C5D5} - {DC90D63E-E4F3-40CB-AF6D-2EAEE5F619B7} = {77454495-55EE-4B40-A089-71B9E8F82E89} - {22AA261A-F8B4-41E2-95DD-82632EED0AA5} = {AF6AF4C7-8AA2-4D59-8064-2D79560904EB} - {0885DDFE-2FC7-4241-AEB1-8D6BDA627C0A} = {83263231-1A2A-4733-B759-EEFF14E8C5D5} - {3454831A-397C-4039-AAFC-9152A4E0B682} = {9D7E2F87-D6F4-4BBB-8980-87D0A8344C74} - {F267BFB9-C5D5-4018-9D3F-B55443702AEC} = {9D7E2F87-D6F4-4BBB-8980-87D0A8344C74} - {E1800E08-72E6-45AE-91EC-69B4FDBA7555} = {F267BFB9-C5D5-4018-9D3F-B55443702AEC} - {720811C8-29C7-4368-86F2-D61DF415AC2A} = {AF6AF4C7-8AA2-4D59-8064-2D79560904EB} - {3818FA5C-8649-427D-8E68-0C44558CA0DD} = {83263231-1A2A-4733-B759-EEFF14E8C5D5} - {21599C29-C3D4-4DAC-A2D6-6C194600478F} = {77454495-55EE-4B40-A089-71B9E8F82E89} - {73FDCE53-75D1-4DCC-933A-8AB93A0E86EA} = {77454495-55EE-4B40-A089-71B9E8F82E89} - {274CEDC2-2129-469D-B269-649EFA2EF5E0} = {77454495-55EE-4B40-A089-71B9E8F82E89} - {8B38F62E-0DD5-486F-96F5-2025AFB9B491} = {AF6AF4C7-8AA2-4D59-8064-2D79560904EB} - {840B220E-68EC-4ECB-AEA1-67B0151F17FC} = {83263231-1A2A-4733-B759-EEFF14E8C5D5} - {8E4BA4C7-413C-4668-8F41-32F484FFB7AA} = {77454495-55EE-4B40-A089-71B9E8F82E89} - {88269A52-A0BA-41B2-8DF3-505B66B17243} = {77454495-55EE-4B40-A089-71B9E8F82E89} - {D1DB7B31-EC6B-430B-B6B0-2849BAE41AC1} = {AF6AF4C7-8AA2-4D59-8064-2D79560904EB} - {066522A4-8380-4D29-8DD0-973B1EDF0B39} = {83263231-1A2A-4733-B759-EEFF14E8C5D5} - {0BE821AB-88D4-4EB5-B012-C964FF58087A} = {AF6AF4C7-8AA2-4D59-8064-2D79560904EB} - {D870B028-16ED-4551-8B0F-5529479D04C9} = {83263231-1A2A-4733-B759-EEFF14E8C5D5} - {5CB9167E-ED23-4A67-8D3A-B66B0C5196C8} = {77454495-55EE-4B40-A089-71B9E8F82E89} - {F8120B9C-D4CA-43DA-B5E1-1CFBA7C36E3B} = {83263231-1A2A-4733-B759-EEFF14E8C5D5} - {EBCCABF9-F670-4C8D-AABC-4EB132961929} = {77454495-55EE-4B40-A089-71B9E8F82E89} - {FFFC74C5-680B-43E3-9C42-A7A23B589CB6} = {AF6AF4C7-8AA2-4D59-8064-2D79560904EB} - {143076C0-8D6B-4054-9F45-06B21655F417} = {83263231-1A2A-4733-B759-EEFF14E8C5D5} - {74221000-29E8-45E6-80D1-977862A3702C} = {83263231-1A2A-4733-B759-EEFF14E8C5D5} - {9FCD773C-3309-482F-A63F-C95B2FFFCDD6} = {3945EBC3-DDF3-4EBB-9401-B3027E87F855} - {CCF39E27-1318-4912-B684-91927592ABB9} = {3945EBC3-DDF3-4EBB-9401-B3027E87F855} - {6E3BB0B6-3792-47E5-95FB-B410C788507F} = {3945EBC3-DDF3-4EBB-9401-B3027E87F855} - {3945EBC3-DDF3-4EBB-9401-B3027E87F855} = {83263231-1A2A-4733-B759-EEFF14E8C5D5} - {C2876321-A612-4E66-AF33-D3928FA6366F} = {77454495-55EE-4B40-A089-71B9E8F82E89} - {DA3CECBB-83BE-441A-852C-077809C48307} = {83263231-1A2A-4733-B759-EEFF14E8C5D5} - {3506539B-983C-44FD-BD95-1931562E7919} = {77454495-55EE-4B40-A089-71B9E8F82E89} - {70066C6C-0A18-4322-A02A-9A0DFE59C02B} = {77454495-55EE-4B40-A089-71B9E8F82E89} - {9A23DA57-3F0B-4646-A37A-71A4CE7C94CB} = {AF6AF4C7-8AA2-4D59-8064-2D79560904EB} - {F533FD6D-1E10-4F06-BE3A-3B3C713A75A6} = {AF6AF4C7-8AA2-4D59-8064-2D79560904EB} - {5E12E053-22AF-4184-8581-3FCFD225617D} = {83263231-1A2A-4733-B759-EEFF14E8C5D5} - {C96CB65D-3D2D-404E-85C0-69A3FC03B48F} = {83263231-1A2A-4733-B759-EEFF14E8C5D5} - {ED5E4F7E-8267-4F3C-BD2A-779AC9BF3D7C} = {AF6AF4C7-8AA2-4D59-8064-2D79560904EB} - {BD6CEF44-E05E-4C22-8D2F-0558A93DD2D6} = {AF6AF4C7-8AA2-4D59-8064-2D79560904EB} - {2E750A7C-561D-4959-B967-042755139D84} = {83263231-1A2A-4733-B759-EEFF14E8C5D5} - {0F84C0BB-FDD4-43A9-B594-923EB10C8E3F} = {77454495-55EE-4B40-A089-71B9E8F82E89} - {DDDF66BE-EC0E-4488-8A35-3D8BEB63F2DB} = {AF6AF4C7-8AA2-4D59-8064-2D79560904EB} - {C38B2A7A-0B21-41BA-8AE4-5D0A2AB6B029} = {77454495-55EE-4B40-A089-71B9E8F82E89} - {CCABBDB9-CDEF-4DE6-9264-69797E8831DF} = {83263231-1A2A-4733-B759-EEFF14E8C5D5} - {94C5E990-50EE-462F-B83F-B4357F549500} = {AF6AF4C7-8AA2-4D59-8064-2D79560904EB} - {C51A781A-C568-4E1A-834C-8E4EFA3C5B54} = {83263231-1A2A-4733-B759-EEFF14E8C5D5} - {2502D3A0-7628-4768-A430-0854BEB1E7A5} = {77454495-55EE-4B40-A089-71B9E8F82E89} - {A9176F5B-0CA6-4479-BE64-A3C3CEA632D4} = {77454495-55EE-4B40-A089-71B9E8F82E89} + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {8328B70C-B808-4ED1-BB16-8555B2752CB6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8328B70C-B808-4ED1-BB16-8555B2752CB6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8328B70C-B808-4ED1-BB16-8555B2752CB6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8328B70C-B808-4ED1-BB16-8555B2752CB6}.Release|Any CPU.Build.0 = Release|Any CPU + {1368AFBF-BCB7-4585-B8A9-C0E767792BC1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1368AFBF-BCB7-4585-B8A9-C0E767792BC1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1368AFBF-BCB7-4585-B8A9-C0E767792BC1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1368AFBF-BCB7-4585-B8A9-C0E767792BC1}.Release|Any CPU.Build.0 = Release|Any CPU + {3E5E5AAD-4563-4428-8577-2A2A46137BFC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3E5E5AAD-4563-4428-8577-2A2A46137BFC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3E5E5AAD-4563-4428-8577-2A2A46137BFC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3E5E5AAD-4563-4428-8577-2A2A46137BFC}.Release|Any CPU.Build.0 = Release|Any CPU + {789A9F8A-08A9-4211-A4AB-F45633960D94}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {789A9F8A-08A9-4211-A4AB-F45633960D94}.Debug|Any CPU.Build.0 = Debug|Any CPU + {789A9F8A-08A9-4211-A4AB-F45633960D94}.Release|Any CPU.ActiveCfg = Release|Any CPU + {789A9F8A-08A9-4211-A4AB-F45633960D94}.Release|Any CPU.Build.0 = Release|Any CPU + {E683FB73-A305-462A-8F76-880E7A2F7F74}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E683FB73-A305-462A-8F76-880E7A2F7F74}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E683FB73-A305-462A-8F76-880E7A2F7F74}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E683FB73-A305-462A-8F76-880E7A2F7F74}.Release|Any CPU.Build.0 = Release|Any CPU + {E53C49EE-FC70-4B26-A62A-63CAD51DB399}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E53C49EE-FC70-4B26-A62A-63CAD51DB399}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E53C49EE-FC70-4B26-A62A-63CAD51DB399}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E53C49EE-FC70-4B26-A62A-63CAD51DB399}.Release|Any CPU.Build.0 = Release|Any CPU + {F749CC16-C32B-441D-9ACE-E8F748E977E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F749CC16-C32B-441D-9ACE-E8F748E977E0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F749CC16-C32B-441D-9ACE-E8F748E977E0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F749CC16-C32B-441D-9ACE-E8F748E977E0}.Release|Any CPU.Build.0 = Release|Any CPU + {609D99ED-3E50-49DF-A3CC-2371FD02520A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {609D99ED-3E50-49DF-A3CC-2371FD02520A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {609D99ED-3E50-49DF-A3CC-2371FD02520A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {609D99ED-3E50-49DF-A3CC-2371FD02520A}.Release|Any CPU.Build.0 = Release|Any CPU + {50116F9A-646D-4BF7-9760-66E37CB9C459}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {50116F9A-646D-4BF7-9760-66E37CB9C459}.Debug|Any CPU.Build.0 = Debug|Any CPU + {50116F9A-646D-4BF7-9760-66E37CB9C459}.Release|Any CPU.ActiveCfg = Release|Any CPU + {50116F9A-646D-4BF7-9760-66E37CB9C459}.Release|Any CPU.Build.0 = Release|Any CPU + {1F44075F-ABD6-49A4-8EA1-DBB70304AD24}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1F44075F-ABD6-49A4-8EA1-DBB70304AD24}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1F44075F-ABD6-49A4-8EA1-DBB70304AD24}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1F44075F-ABD6-49A4-8EA1-DBB70304AD24}.Release|Any CPU.Build.0 = Release|Any CPU + {B793249D-3E52-4B0D-964F-BC022CD8A753}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B793249D-3E52-4B0D-964F-BC022CD8A753}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B793249D-3E52-4B0D-964F-BC022CD8A753}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B793249D-3E52-4B0D-964F-BC022CD8A753}.Release|Any CPU.Build.0 = Release|Any CPU + {8FA2FE59-9333-47B8-A226-E2B0CDBB5847}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8FA2FE59-9333-47B8-A226-E2B0CDBB5847}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8FA2FE59-9333-47B8-A226-E2B0CDBB5847}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8FA2FE59-9333-47B8-A226-E2B0CDBB5847}.Release|Any CPU.Build.0 = Release|Any CPU + {0D9861C5-D081-40F7-9DFC-7032840471AB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0D9861C5-D081-40F7-9DFC-7032840471AB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0D9861C5-D081-40F7-9DFC-7032840471AB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0D9861C5-D081-40F7-9DFC-7032840471AB}.Release|Any CPU.Build.0 = Release|Any CPU + {EEBE64CF-B1B5-4C54-B9B4-47ED7E5E760A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EEBE64CF-B1B5-4C54-B9B4-47ED7E5E760A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EEBE64CF-B1B5-4C54-B9B4-47ED7E5E760A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EEBE64CF-B1B5-4C54-B9B4-47ED7E5E760A}.Release|Any CPU.Build.0 = Release|Any CPU + {9658457F-075C-4C44-A7AD-947365938B6C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9658457F-075C-4C44-A7AD-947365938B6C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9658457F-075C-4C44-A7AD-947365938B6C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9658457F-075C-4C44-A7AD-947365938B6C}.Release|Any CPU.Build.0 = Release|Any CPU + {AB93DF75-C53F-43F7-B1EB-B679240D112B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AB93DF75-C53F-43F7-B1EB-B679240D112B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AB93DF75-C53F-43F7-B1EB-B679240D112B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AB93DF75-C53F-43F7-B1EB-B679240D112B}.Release|Any CPU.Build.0 = Release|Any CPU + {1E5E7A45-9826-4F06-8C68-B9F1DB05C4F2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1E5E7A45-9826-4F06-8C68-B9F1DB05C4F2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1E5E7A45-9826-4F06-8C68-B9F1DB05C4F2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1E5E7A45-9826-4F06-8C68-B9F1DB05C4F2}.Release|Any CPU.Build.0 = Release|Any CPU + {D58B814E-1F19-43AE-89D1-769BC7681A56}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D58B814E-1F19-43AE-89D1-769BC7681A56}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D58B814E-1F19-43AE-89D1-769BC7681A56}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D58B814E-1F19-43AE-89D1-769BC7681A56}.Release|Any CPU.Build.0 = Release|Any CPU + {C181C7D4-CA45-4FAE-8315-A9825F034D53}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C181C7D4-CA45-4FAE-8315-A9825F034D53}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C181C7D4-CA45-4FAE-8315-A9825F034D53}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C181C7D4-CA45-4FAE-8315-A9825F034D53}.Release|Any CPU.Build.0 = Release|Any CPU + {4056B8FD-F355-41A3-A34F-60B350598B33}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4056B8FD-F355-41A3-A34F-60B350598B33}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4056B8FD-F355-41A3-A34F-60B350598B33}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4056B8FD-F355-41A3-A34F-60B350598B33}.Release|Any CPU.Build.0 = Release|Any CPU + {6D383054-4712-4D03-A0B1-B9D4E1CC6F95}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6D383054-4712-4D03-A0B1-B9D4E1CC6F95}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6D383054-4712-4D03-A0B1-B9D4E1CC6F95}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6D383054-4712-4D03-A0B1-B9D4E1CC6F95}.Release|Any CPU.Build.0 = Release|Any CPU + {4E0DC405-C372-4396-A5DF-F6AA108DA01C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4E0DC405-C372-4396-A5DF-F6AA108DA01C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4E0DC405-C372-4396-A5DF-F6AA108DA01C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4E0DC405-C372-4396-A5DF-F6AA108DA01C}.Release|Any CPU.Build.0 = Release|Any CPU + {9B175EC8-6B64-4345-A158-091CB8876077}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9B175EC8-6B64-4345-A158-091CB8876077}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9B175EC8-6B64-4345-A158-091CB8876077}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9B175EC8-6B64-4345-A158-091CB8876077}.Release|Any CPU.Build.0 = Release|Any CPU + {EE0DC846-52F3-46AF-BC0D-DEF81150CEC0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EE0DC846-52F3-46AF-BC0D-DEF81150CEC0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EE0DC846-52F3-46AF-BC0D-DEF81150CEC0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EE0DC846-52F3-46AF-BC0D-DEF81150CEC0}.Release|Any CPU.Build.0 = Release|Any CPU + {E37818EC-03D2-4B97-BE46-4C3F61465004}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E37818EC-03D2-4B97-BE46-4C3F61465004}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E37818EC-03D2-4B97-BE46-4C3F61465004}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E37818EC-03D2-4B97-BE46-4C3F61465004}.Release|Any CPU.Build.0 = Release|Any CPU + {E5141EAC-9420-48EA-995F-848CBBF0BD4B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E5141EAC-9420-48EA-995F-848CBBF0BD4B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E5141EAC-9420-48EA-995F-848CBBF0BD4B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E5141EAC-9420-48EA-995F-848CBBF0BD4B}.Release|Any CPU.Build.0 = Release|Any CPU + {AA98FD8D-1254-4B34-840C-06BB263933DE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AA98FD8D-1254-4B34-840C-06BB263933DE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AA98FD8D-1254-4B34-840C-06BB263933DE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AA98FD8D-1254-4B34-840C-06BB263933DE}.Release|Any CPU.Build.0 = Release|Any CPU + {20386BBE-1F55-4503-9F5F-F2C6B29DE865}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {20386BBE-1F55-4503-9F5F-F2C6B29DE865}.Debug|Any CPU.Build.0 = Debug|Any CPU + {20386BBE-1F55-4503-9F5F-F2C6B29DE865}.Release|Any CPU.ActiveCfg = Release|Any CPU + {20386BBE-1F55-4503-9F5F-F2C6B29DE865}.Release|Any CPU.Build.0 = Release|Any CPU + {A7F651AD-51D3-4473-9641-7C76D2A0E3B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A7F651AD-51D3-4473-9641-7C76D2A0E3B7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A7F651AD-51D3-4473-9641-7C76D2A0E3B7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A7F651AD-51D3-4473-9641-7C76D2A0E3B7}.Release|Any CPU.Build.0 = Release|Any CPU + {DF785142-3E65-4176-8A6E-CAAD6BBF771F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DF785142-3E65-4176-8A6E-CAAD6BBF771F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DF785142-3E65-4176-8A6E-CAAD6BBF771F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DF785142-3E65-4176-8A6E-CAAD6BBF771F}.Release|Any CPU.Build.0 = Release|Any CPU + {4B323BCC-0E8D-43CE-9AC2-4B708278C7C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4B323BCC-0E8D-43CE-9AC2-4B708278C7C2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4B323BCC-0E8D-43CE-9AC2-4B708278C7C2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4B323BCC-0E8D-43CE-9AC2-4B708278C7C2}.Release|Any CPU.Build.0 = Release|Any CPU + {52262FBB-40D0-4F08-B00F-B298185FF6BD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {52262FBB-40D0-4F08-B00F-B298185FF6BD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {52262FBB-40D0-4F08-B00F-B298185FF6BD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {52262FBB-40D0-4F08-B00F-B298185FF6BD}.Release|Any CPU.Build.0 = Release|Any CPU + {759D9E53-4717-491D-9970-B3A3367C65E7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {759D9E53-4717-491D-9970-B3A3367C65E7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {759D9E53-4717-491D-9970-B3A3367C65E7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {759D9E53-4717-491D-9970-B3A3367C65E7}.Release|Any CPU.Build.0 = Release|Any CPU + {33336B98-A69E-4F28-A71A-1D8753F3BA24}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {33336B98-A69E-4F28-A71A-1D8753F3BA24}.Debug|Any CPU.Build.0 = Debug|Any CPU + {33336B98-A69E-4F28-A71A-1D8753F3BA24}.Release|Any CPU.ActiveCfg = Release|Any CPU + {33336B98-A69E-4F28-A71A-1D8753F3BA24}.Release|Any CPU.Build.0 = Release|Any CPU + {22E4E3F5-8D6E-433D-9456-F60DFB1EFC82}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {22E4E3F5-8D6E-433D-9456-F60DFB1EFC82}.Debug|Any CPU.Build.0 = Debug|Any CPU + {22E4E3F5-8D6E-433D-9456-F60DFB1EFC82}.Release|Any CPU.ActiveCfg = Release|Any CPU + {22E4E3F5-8D6E-433D-9456-F60DFB1EFC82}.Release|Any CPU.Build.0 = Release|Any CPU + {2AEC3A6E-886F-43DA-8EA6-82EBF916E89A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2AEC3A6E-886F-43DA-8EA6-82EBF916E89A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2AEC3A6E-886F-43DA-8EA6-82EBF916E89A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2AEC3A6E-886F-43DA-8EA6-82EBF916E89A}.Release|Any CPU.Build.0 = Release|Any CPU + {F97EE360-3733-4993-823A-A81D004D417E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F97EE360-3733-4993-823A-A81D004D417E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F97EE360-3733-4993-823A-A81D004D417E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F97EE360-3733-4993-823A-A81D004D417E}.Release|Any CPU.Build.0 = Release|Any CPU + {1D66CB6F-6268-4595-AD49-09DFD1784DDB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1D66CB6F-6268-4595-AD49-09DFD1784DDB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1D66CB6F-6268-4595-AD49-09DFD1784DDB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1D66CB6F-6268-4595-AD49-09DFD1784DDB}.Release|Any CPU.Build.0 = Release|Any CPU + {EA4BB6FE-57B5-4A2B-88AD-FCCD96ECE19F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EA4BB6FE-57B5-4A2B-88AD-FCCD96ECE19F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EA4BB6FE-57B5-4A2B-88AD-FCCD96ECE19F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EA4BB6FE-57B5-4A2B-88AD-FCCD96ECE19F}.Release|Any CPU.Build.0 = Release|Any CPU + {DC89F322-155F-488B-8B80-3824B433F046}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DC89F322-155F-488B-8B80-3824B433F046}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DC89F322-155F-488B-8B80-3824B433F046}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DC89F322-155F-488B-8B80-3824B433F046}.Release|Any CPU.Build.0 = Release|Any CPU + {4E74CAAD-062F-4AF9-8B29-2ED4B2CC0E77}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4E74CAAD-062F-4AF9-8B29-2ED4B2CC0E77}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4E74CAAD-062F-4AF9-8B29-2ED4B2CC0E77}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4E74CAAD-062F-4AF9-8B29-2ED4B2CC0E77}.Release|Any CPU.Build.0 = Release|Any CPU + {957DFFC0-0FA3-48CC-AEDD-F9BBC3F0FADC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {957DFFC0-0FA3-48CC-AEDD-F9BBC3F0FADC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {957DFFC0-0FA3-48CC-AEDD-F9BBC3F0FADC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {957DFFC0-0FA3-48CC-AEDD-F9BBC3F0FADC}.Release|Any CPU.Build.0 = Release|Any CPU + {2E239FE2-F3B2-41B6-AE9E-561F6ACE5BA6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2E239FE2-F3B2-41B6-AE9E-561F6ACE5BA6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2E239FE2-F3B2-41B6-AE9E-561F6ACE5BA6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2E239FE2-F3B2-41B6-AE9E-561F6ACE5BA6}.Release|Any CPU.Build.0 = Release|Any CPU + {854EBD1B-73EE-4B93-89DF-E70436FF14CB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {854EBD1B-73EE-4B93-89DF-E70436FF14CB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {854EBD1B-73EE-4B93-89DF-E70436FF14CB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {854EBD1B-73EE-4B93-89DF-E70436FF14CB}.Release|Any CPU.Build.0 = Release|Any CPU + {5F253D7F-BF27-46F5-9382-73A66EC247BF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5F253D7F-BF27-46F5-9382-73A66EC247BF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5F253D7F-BF27-46F5-9382-73A66EC247BF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5F253D7F-BF27-46F5-9382-73A66EC247BF}.Release|Any CPU.Build.0 = Release|Any CPU + {99E2D1A4-1853-49F9-96B6-59C70FA3DE3A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {99E2D1A4-1853-49F9-96B6-59C70FA3DE3A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {99E2D1A4-1853-49F9-96B6-59C70FA3DE3A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {99E2D1A4-1853-49F9-96B6-59C70FA3DE3A}.Release|Any CPU.Build.0 = Release|Any CPU + {7C1A1318-137E-4E1E-ADB3-C0CE2B10F779}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7C1A1318-137E-4E1E-ADB3-C0CE2B10F779}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7C1A1318-137E-4E1E-ADB3-C0CE2B10F779}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7C1A1318-137E-4E1E-ADB3-C0CE2B10F779}.Release|Any CPU.Build.0 = Release|Any CPU + {1C6F1CB1-2339-4E8B-9941-80998B940DCC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1C6F1CB1-2339-4E8B-9941-80998B940DCC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1C6F1CB1-2339-4E8B-9941-80998B940DCC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1C6F1CB1-2339-4E8B-9941-80998B940DCC}.Release|Any CPU.Build.0 = Release|Any CPU + {E92F0A4E-2653-4341-8732-2AC9CF766739}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E92F0A4E-2653-4341-8732-2AC9CF766739}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E92F0A4E-2653-4341-8732-2AC9CF766739}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E92F0A4E-2653-4341-8732-2AC9CF766739}.Release|Any CPU.Build.0 = Release|Any CPU + {3C543CED-F801-4843-BA48-76142843E1B9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3C543CED-F801-4843-BA48-76142843E1B9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3C543CED-F801-4843-BA48-76142843E1B9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3C543CED-F801-4843-BA48-76142843E1B9}.Release|Any CPU.Build.0 = Release|Any CPU + {7ABAA536-7BEC-46D7-9C61-82440DDC9AA8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7ABAA536-7BEC-46D7-9C61-82440DDC9AA8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7ABAA536-7BEC-46D7-9C61-82440DDC9AA8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7ABAA536-7BEC-46D7-9C61-82440DDC9AA8}.Release|Any CPU.Build.0 = Release|Any CPU + {D7D1EA68-ACE3-4DF3-A33C-EBB5B74701F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D7D1EA68-ACE3-4DF3-A33C-EBB5B74701F5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D7D1EA68-ACE3-4DF3-A33C-EBB5B74701F5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D7D1EA68-ACE3-4DF3-A33C-EBB5B74701F5}.Release|Any CPU.Build.0 = Release|Any CPU + {563FEA1C-FDAE-4EDE-9ABF-22D76F2DA048}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {563FEA1C-FDAE-4EDE-9ABF-22D76F2DA048}.Debug|Any CPU.Build.0 = Debug|Any CPU + {563FEA1C-FDAE-4EDE-9ABF-22D76F2DA048}.Release|Any CPU.ActiveCfg = Release|Any CPU + {563FEA1C-FDAE-4EDE-9ABF-22D76F2DA048}.Release|Any CPU.Build.0 = Release|Any CPU + {6D9EB590-CED1-47C2-87B1-E65EE0EEBB9E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6D9EB590-CED1-47C2-87B1-E65EE0EEBB9E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6D9EB590-CED1-47C2-87B1-E65EE0EEBB9E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6D9EB590-CED1-47C2-87B1-E65EE0EEBB9E}.Release|Any CPU.Build.0 = Release|Any CPU + {39F7BB08-908B-49F9-A96B-E14C16B69090}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {39F7BB08-908B-49F9-A96B-E14C16B69090}.Debug|Any CPU.Build.0 = Debug|Any CPU + {39F7BB08-908B-49F9-A96B-E14C16B69090}.Release|Any CPU.ActiveCfg = Release|Any CPU + {39F7BB08-908B-49F9-A96B-E14C16B69090}.Release|Any CPU.Build.0 = Release|Any CPU + {59742E7E-4380-4B40-BCC8-5AB314290198}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {59742E7E-4380-4B40-BCC8-5AB314290198}.Debug|Any CPU.Build.0 = Debug|Any CPU + {59742E7E-4380-4B40-BCC8-5AB314290198}.Release|Any CPU.ActiveCfg = Release|Any CPU + {59742E7E-4380-4B40-BCC8-5AB314290198}.Release|Any CPU.Build.0 = Release|Any CPU + {6222BF96-2F1F-42DA-AF43-388B20151A5A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6222BF96-2F1F-42DA-AF43-388B20151A5A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6222BF96-2F1F-42DA-AF43-388B20151A5A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6222BF96-2F1F-42DA-AF43-388B20151A5A}.Release|Any CPU.Build.0 = Release|Any CPU + {18FDE2B5-6023-487C-A349-E492F3F34B4A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {18FDE2B5-6023-487C-A349-E492F3F34B4A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {18FDE2B5-6023-487C-A349-E492F3F34B4A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {18FDE2B5-6023-487C-A349-E492F3F34B4A}.Release|Any CPU.Build.0 = Release|Any CPU + {357D2522-4481-4135-8379-C228C743DD69}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {357D2522-4481-4135-8379-C228C743DD69}.Debug|Any CPU.Build.0 = Debug|Any CPU + {357D2522-4481-4135-8379-C228C743DD69}.Release|Any CPU.ActiveCfg = Release|Any CPU + {357D2522-4481-4135-8379-C228C743DD69}.Release|Any CPU.Build.0 = Release|Any CPU + {321A2E5D-6A3E-44B6-BECE-D1FFA94D58B9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {321A2E5D-6A3E-44B6-BECE-D1FFA94D58B9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {321A2E5D-6A3E-44B6-BECE-D1FFA94D58B9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {321A2E5D-6A3E-44B6-BECE-D1FFA94D58B9}.Release|Any CPU.Build.0 = Release|Any CPU + {A454B861-62B4-4F4D-8E31-725C4592D169}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A454B861-62B4-4F4D-8E31-725C4592D169}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A454B861-62B4-4F4D-8E31-725C4592D169}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A454B861-62B4-4F4D-8E31-725C4592D169}.Release|Any CPU.Build.0 = Release|Any CPU + {F89C3981-6D5A-4D63-8CD0-FB35E55C5835}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F89C3981-6D5A-4D63-8CD0-FB35E55C5835}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F89C3981-6D5A-4D63-8CD0-FB35E55C5835}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F89C3981-6D5A-4D63-8CD0-FB35E55C5835}.Release|Any CPU.Build.0 = Release|Any CPU + {A8FFC45B-7FC3-44B3-B8AF-CA9642E66546}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A8FFC45B-7FC3-44B3-B8AF-CA9642E66546}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A8FFC45B-7FC3-44B3-B8AF-CA9642E66546}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A8FFC45B-7FC3-44B3-B8AF-CA9642E66546}.Release|Any CPU.Build.0 = Release|Any CPU + {9D3631D0-C7DA-4283-BA24-A14424B0F7BE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9D3631D0-C7DA-4283-BA24-A14424B0F7BE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9D3631D0-C7DA-4283-BA24-A14424B0F7BE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9D3631D0-C7DA-4283-BA24-A14424B0F7BE}.Release|Any CPU.Build.0 = Release|Any CPU + {CDB5B2C4-4CD6-4AE0-9C4B-451B3170FB55}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CDB5B2C4-4CD6-4AE0-9C4B-451B3170FB55}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CDB5B2C4-4CD6-4AE0-9C4B-451B3170FB55}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CDB5B2C4-4CD6-4AE0-9C4B-451B3170FB55}.Release|Any CPU.Build.0 = Release|Any CPU + {CC0FE166-E649-4CA4-AACD-C0205ECDF896}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CC0FE166-E649-4CA4-AACD-C0205ECDF896}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CC0FE166-E649-4CA4-AACD-C0205ECDF896}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CC0FE166-E649-4CA4-AACD-C0205ECDF896}.Release|Any CPU.Build.0 = Release|Any CPU + {C97D62CF-A541-4393-A49A-92F53F1E1983}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C97D62CF-A541-4393-A49A-92F53F1E1983}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C97D62CF-A541-4393-A49A-92F53F1E1983}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C97D62CF-A541-4393-A49A-92F53F1E1983}.Release|Any CPU.Build.0 = Release|Any CPU + {36ADA62A-0AD5-461A-B28C-A5DBAF718B59}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {36ADA62A-0AD5-461A-B28C-A5DBAF718B59}.Debug|Any CPU.Build.0 = Debug|Any CPU + {36ADA62A-0AD5-461A-B28C-A5DBAF718B59}.Release|Any CPU.ActiveCfg = Release|Any CPU + {36ADA62A-0AD5-461A-B28C-A5DBAF718B59}.Release|Any CPU.Build.0 = Release|Any CPU + {A2AD0EF1-6943-46E0-BEED-0704D362FA48}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A2AD0EF1-6943-46E0-BEED-0704D362FA48}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A2AD0EF1-6943-46E0-BEED-0704D362FA48}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A2AD0EF1-6943-46E0-BEED-0704D362FA48}.Release|Any CPU.Build.0 = Release|Any CPU + {9272A135-C1F7-4317-8AEA-1BFDEE2DC683}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9272A135-C1F7-4317-8AEA-1BFDEE2DC683}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9272A135-C1F7-4317-8AEA-1BFDEE2DC683}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9272A135-C1F7-4317-8AEA-1BFDEE2DC683}.Release|Any CPU.Build.0 = Release|Any CPU + {162A1CAE-ACEE-45CA-A6D0-7702ADE4D3DE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {162A1CAE-ACEE-45CA-A6D0-7702ADE4D3DE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {162A1CAE-ACEE-45CA-A6D0-7702ADE4D3DE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {162A1CAE-ACEE-45CA-A6D0-7702ADE4D3DE}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {0C652B1A-DF72-4EE5-A98B-194FE2C054F6} + GlobalSection(NestedProjects) = preSolution + {8328B70C-B808-4ED1-BB16-8555B2752CB6} = {7D4D7A6A-3F5C-4B4C-A198-AC51F9220231} + {1368AFBF-BCB7-4585-B8A9-C0E767792BC1} = {21B42F60-5802-404E-90F0-AEBCC56760C0} + {3E5E5AAD-4563-4428-8577-2A2A46137BFC} = {21B42F60-5802-404E-90F0-AEBCC56760C0} + {789A9F8A-08A9-4211-A4AB-F45633960D94} = {21B42F60-5802-404E-90F0-AEBCC56760C0} + {E683FB73-A305-462A-8F76-880E7A2F7F74} = {21B42F60-5802-404E-90F0-AEBCC56760C0} + {E53C49EE-FC70-4B26-A62A-63CAD51DB399} = {21B42F60-5802-404E-90F0-AEBCC56760C0} + {F749CC16-C32B-441D-9ACE-E8F748E977E0} = {21B42F60-5802-404E-90F0-AEBCC56760C0} + {609D99ED-3E50-49DF-A3CC-2371FD02520A} = {21B42F60-5802-404E-90F0-AEBCC56760C0} + {50116F9A-646D-4BF7-9760-66E37CB9C459} = {21B42F60-5802-404E-90F0-AEBCC56760C0} + {1F44075F-ABD6-49A4-8EA1-DBB70304AD24} = {21B42F60-5802-404E-90F0-AEBCC56760C0} + {B793249D-3E52-4B0D-964F-BC022CD8A753} = {21B42F60-5802-404E-90F0-AEBCC56760C0} + {8FA2FE59-9333-47B8-A226-E2B0CDBB5847} = {21B42F60-5802-404E-90F0-AEBCC56760C0} + {0D9861C5-D081-40F7-9DFC-7032840471AB} = {21B42F60-5802-404E-90F0-AEBCC56760C0} + {EEBE64CF-B1B5-4C54-B9B4-47ED7E5E760A} = {21B42F60-5802-404E-90F0-AEBCC56760C0} + {9658457F-075C-4C44-A7AD-947365938B6C} = {21B42F60-5802-404E-90F0-AEBCC56760C0} + {AB93DF75-C53F-43F7-B1EB-B679240D112B} = {21B42F60-5802-404E-90F0-AEBCC56760C0} + {1E5E7A45-9826-4F06-8C68-B9F1DB05C4F2} = {21B42F60-5802-404E-90F0-AEBCC56760C0} + {D58B814E-1F19-43AE-89D1-769BC7681A56} = {21B42F60-5802-404E-90F0-AEBCC56760C0} + {C181C7D4-CA45-4FAE-8315-A9825F034D53} = {21B42F60-5802-404E-90F0-AEBCC56760C0} + {4056B8FD-F355-41A3-A34F-60B350598B33} = {21B42F60-5802-404E-90F0-AEBCC56760C0} + {6D383054-4712-4D03-A0B1-B9D4E1CC6F95} = {21B42F60-5802-404E-90F0-AEBCC56760C0} + {4E0DC405-C372-4396-A5DF-F6AA108DA01C} = {21B42F60-5802-404E-90F0-AEBCC56760C0} + {9B175EC8-6B64-4345-A158-091CB8876077} = {21B42F60-5802-404E-90F0-AEBCC56760C0} + {EE0DC846-52F3-46AF-BC0D-DEF81150CEC0} = {21B42F60-5802-404E-90F0-AEBCC56760C0} + {E37818EC-03D2-4B97-BE46-4C3F61465004} = {21B42F60-5802-404E-90F0-AEBCC56760C0} + {E5141EAC-9420-48EA-995F-848CBBF0BD4B} = {21B42F60-5802-404E-90F0-AEBCC56760C0} + {AA98FD8D-1254-4B34-840C-06BB263933DE} = {21B42F60-5802-404E-90F0-AEBCC56760C0} + {20386BBE-1F55-4503-9F5F-F2C6B29DE865} = {230B9384-90FD-4551-A5DE-1A5C197F25B6} + {A7F651AD-51D3-4473-9641-7C76D2A0E3B7} = {230B9384-90FD-4551-A5DE-1A5C197F25B6} + {DF785142-3E65-4176-8A6E-CAAD6BBF771F} = {230B9384-90FD-4551-A5DE-1A5C197F25B6} + {4B323BCC-0E8D-43CE-9AC2-4B708278C7C2} = {230B9384-90FD-4551-A5DE-1A5C197F25B6} + {52262FBB-40D0-4F08-B00F-B298185FF6BD} = {230B9384-90FD-4551-A5DE-1A5C197F25B6} + {759D9E53-4717-491D-9970-B3A3367C65E7} = {230B9384-90FD-4551-A5DE-1A5C197F25B6} + {33336B98-A69E-4F28-A71A-1D8753F3BA24} = {230B9384-90FD-4551-A5DE-1A5C197F25B6} + {22E4E3F5-8D6E-433D-9456-F60DFB1EFC82} = {230B9384-90FD-4551-A5DE-1A5C197F25B6} + {2AEC3A6E-886F-43DA-8EA6-82EBF916E89A} = {230B9384-90FD-4551-A5DE-1A5C197F25B6} + {F97EE360-3733-4993-823A-A81D004D417E} = {230B9384-90FD-4551-A5DE-1A5C197F25B6} + {1D66CB6F-6268-4595-AD49-09DFD1784DDB} = {230B9384-90FD-4551-A5DE-1A5C197F25B6} + {EA4BB6FE-57B5-4A2B-88AD-FCCD96ECE19F} = {230B9384-90FD-4551-A5DE-1A5C197F25B6} + {DC89F322-155F-488B-8B80-3824B433F046} = {230B9384-90FD-4551-A5DE-1A5C197F25B6} + {4E74CAAD-062F-4AF9-8B29-2ED4B2CC0E77} = {230B9384-90FD-4551-A5DE-1A5C197F25B6} + {957DFFC0-0FA3-48CC-AEDD-F9BBC3F0FADC} = {230B9384-90FD-4551-A5DE-1A5C197F25B6} + {2E239FE2-F3B2-41B6-AE9E-561F6ACE5BA6} = {230B9384-90FD-4551-A5DE-1A5C197F25B6} + {854EBD1B-73EE-4B93-89DF-E70436FF14CB} = {230B9384-90FD-4551-A5DE-1A5C197F25B6} + {5F253D7F-BF27-46F5-9382-73A66EC247BF} = {230B9384-90FD-4551-A5DE-1A5C197F25B6} + {99E2D1A4-1853-49F9-96B6-59C70FA3DE3A} = {6987A1CC-608E-4868-A02C-09D30C8B7B2D} + {A11512A4-26BD-4936-B7A6-6FCE2E78FA80} = {6987A1CC-608E-4868-A02C-09D30C8B7B2D} + {7C1A1318-137E-4E1E-ADB3-C0CE2B10F779} = {A11512A4-26BD-4936-B7A6-6FCE2E78FA80} + {1C6F1CB1-2339-4E8B-9941-80998B940DCC} = {A11512A4-26BD-4936-B7A6-6FCE2E78FA80} + {E92F0A4E-2653-4341-8732-2AC9CF766739} = {A11512A4-26BD-4936-B7A6-6FCE2E78FA80} + {3C543CED-F801-4843-BA48-76142843E1B9} = {6987A1CC-608E-4868-A02C-09D30C8B7B2D} + {7ABAA536-7BEC-46D7-9C61-82440DDC9AA8} = {6987A1CC-608E-4868-A02C-09D30C8B7B2D} + {D7D1EA68-ACE3-4DF3-A33C-EBB5B74701F5} = {6987A1CC-608E-4868-A02C-09D30C8B7B2D} + {563FEA1C-FDAE-4EDE-9ABF-22D76F2DA048} = {6987A1CC-608E-4868-A02C-09D30C8B7B2D} + {6D9EB590-CED1-47C2-87B1-E65EE0EEBB9E} = {6987A1CC-608E-4868-A02C-09D30C8B7B2D} + {39F7BB08-908B-49F9-A96B-E14C16B69090} = {6987A1CC-608E-4868-A02C-09D30C8B7B2D} + {59742E7E-4380-4B40-BCC8-5AB314290198} = {6987A1CC-608E-4868-A02C-09D30C8B7B2D} + {6222BF96-2F1F-42DA-AF43-388B20151A5A} = {6987A1CC-608E-4868-A02C-09D30C8B7B2D} + {18FDE2B5-6023-487C-A349-E492F3F34B4A} = {6987A1CC-608E-4868-A02C-09D30C8B7B2D} + {357D2522-4481-4135-8379-C228C743DD69} = {6987A1CC-608E-4868-A02C-09D30C8B7B2D} + {321A2E5D-6A3E-44B6-BECE-D1FFA94D58B9} = {6987A1CC-608E-4868-A02C-09D30C8B7B2D} + {A454B861-62B4-4F4D-8E31-725C4592D169} = {6987A1CC-608E-4868-A02C-09D30C8B7B2D} + {F89C3981-6D5A-4D63-8CD0-FB35E55C5835} = {6987A1CC-608E-4868-A02C-09D30C8B7B2D} + {A8FFC45B-7FC3-44B3-B8AF-CA9642E66546} = {6987A1CC-608E-4868-A02C-09D30C8B7B2D} + {9D3631D0-C7DA-4283-BA24-A14424B0F7BE} = {6987A1CC-608E-4868-A02C-09D30C8B7B2D} + {CDB5B2C4-4CD6-4AE0-9C4B-451B3170FB55} = {6987A1CC-608E-4868-A02C-09D30C8B7B2D} + {CC0FE166-E649-4CA4-AACD-C0205ECDF896} = {6987A1CC-608E-4868-A02C-09D30C8B7B2D} + {C97D62CF-A541-4393-A49A-92F53F1E1983} = {6987A1CC-608E-4868-A02C-09D30C8B7B2D} + {36ADA62A-0AD5-461A-B28C-A5DBAF718B59} = {6987A1CC-608E-4868-A02C-09D30C8B7B2D} + {A2AD0EF1-6943-46E0-BEED-0704D362FA48} = {6987A1CC-608E-4868-A02C-09D30C8B7B2D} + {9272A135-C1F7-4317-8AEA-1BFDEE2DC683} = {6987A1CC-608E-4868-A02C-09D30C8B7B2D} + {162A1CAE-ACEE-45CA-A6D0-7702ADE4D3DE} = {6987A1CC-608E-4868-A02C-09D30C8B7B2D} EndGlobalSection EndGlobal diff --git a/Sentry.sln b/Sentry.sln index 38d753d9b4..a30b33aab5 100644 --- a/Sentry.sln +++ b/Sentry.sln @@ -1,490 +1,441 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 -VisualStudioVersion = 17.1.31903.286 +VisualStudioVersion = 17.0.31903.59 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry", "src\Sentry\Sentry.csproj", "{F2486CC8-FAB7-4775-976F-C5A4CF97867F}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "benchmarks", "benchmarks", "{FBB2D033-AF2B-4706-B39E-2C29A7737B61}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{AF6AF4C7-8AA2-4D59-8064-2D79560904EB}" - ProjectSection(SolutionItems) = preProject - src\Directory.Build.props = src\Directory.Build.props - EndProjectSection +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Benchmarks", "benchmarks\Sentry.Benchmarks\Sentry.Benchmarks.csproj", "{D4D189F5-016D-4DA5-866B-7BAA3484907C}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{83263231-1A2A-4733-B759-EEFF14E8C5D5}" - ProjectSection(SolutionItems) = preProject - test\Directory.Build.props = test\Directory.Build.props - EndProjectSection +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{D1EDFAC8-DFEC-430E-B052-A819F8F55125}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Tests", "test\Sentry.Tests\Sentry.Tests.csproj", "{1E0F969B-67F9-4FCC-BCBF-596DB6460C7C}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Samples.AspNetCore.Basic", "samples\Sentry.Samples.AspNetCore.Basic\Sentry.Samples.AspNetCore.Basic.csproj", "{61FAEE19-F92B-466D-8C56-5806809F391F}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".root", ".root", "{9D7E2F87-D6F4-4BBB-8980-87D0A8344C74}" - ProjectSection(SolutionItems) = preProject - .editorconfig = .editorconfig - .gitattributes = .gitattributes - .gitignore = .gitignore - build.ps1 = build.ps1 - build.sh = build.sh - CHANGELOG.md = CHANGELOG.md - CONTRIBUTING.md = CONTRIBUTING.md - Directory.Build.props = Directory.Build.props - Directory.Build.targets = Directory.Build.targets - global.json = global.json - GlobalUsings.cs = GlobalUsings.cs - README.md = README.md - EndProjectSection +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Samples.AspNetCore.Blazor.Server", "samples\Sentry.Samples.AspNetCore.Blazor.Server\Sentry.Samples.AspNetCore.Blazor.Server.csproj", "{FB2A5107-2870-4BE9-B80C-6E3BC70C4C8C}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{77454495-55EE-4B40-A089-71B9E8F82E89}" - ProjectSection(SolutionItems) = preProject - samples\Directory.Build.props = samples\Directory.Build.props - EndProjectSection +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Samples.AspNetCore.Blazor.Wasm", "samples\Sentry.Samples.AspNetCore.Blazor.Wasm\Sentry.Samples.AspNetCore.Blazor.Wasm.csproj", "{661E1511-C95A-40D5-BF28-8C85B2237916}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Samples.Console.Basic", "samples\Sentry.Samples.Console.Basic\Sentry.Samples.Console.Basic.csproj", "{65F5A969-B386-48F5-8B7E-6C90D6C720BC}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Samples.AspNetCore.Grpc", "samples\Sentry.Samples.AspNetCore.Grpc\Sentry.Samples.AspNetCore.Grpc.csproj", "{E6195E90-0A95-4DE4-B628-4479B12FEC83}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Samples.ME.Logging", "samples\Sentry.Samples.ME.Logging\Sentry.Samples.ME.Logging.csproj", "{DE536383-4A18-4057-A7F0-639BDEF6E1BB}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Samples.AspNetCore.Mvc", "samples\Sentry.Samples.AspNetCore.Mvc\Sentry.Samples.AspNetCore.Mvc.csproj", "{1396BBCA-4EB6-4387-80FD-C37F9ECF14D5}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Extensions.Logging", "src\Sentry.Extensions.Logging\Sentry.Extensions.Logging.csproj", "{2718BBA4-F080-4924-BA50-B63F756FB097}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Samples.AspNetCore.Serilog", "samples\Sentry.Samples.AspNetCore.Serilog\Sentry.Samples.AspNetCore.Serilog.csproj", "{A780CE04-5E9C-4283-ACC8-7D6625C86200}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Samples.Console.Customized", "samples\Sentry.Samples.Console.Customized\Sentry.Samples.Console.Customized.csproj", "{6CAE75C2-9DED-44F4-8E14-2D4F9159D55F}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Samples.Aws.Lambda.AspNetCoreServer", "samples\Sentry.Samples.Aws.Lambda.AspNetCoreServer\Sentry.Samples.Aws.Lambda.AspNetCoreServer.csproj", "{54AF7863-1AE6-491B-932E-E379C95CF6C2}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Benchmarks", "benchmarks\Sentry.Benchmarks\Sentry.Benchmarks.csproj", "{BD43F598-5B20-477D-88C9-55B186542179}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Samples.AzureFunctions.Worker", "samples\Sentry.Samples.AzureFunctions.Worker\Sentry.Samples.AzureFunctions.Worker.csproj", "{7EBA3150-6998-45E8-B0BE-BAB5C147D20F}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "benchmarks", "benchmarks", "{97EF834D-6BEB-45E8-B69A-1F9B7815B8B4}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Samples.Console.Basic", "samples\Sentry.Samples.Console.Basic\Sentry.Samples.Console.Basic.csproj", "{225837EE-7305-4B67-88FA-BD2431501C78}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.AspNetCore", "src\Sentry.AspNetCore\Sentry.AspNetCore.csproj", "{EBD057E5-771A-47EC-90E3-3C2625426A05}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Samples.Console.Customized", "samples\Sentry.Samples.Console.Customized\Sentry.Samples.Console.Customized.csproj", "{3440C9C0-1710-4608-A1A4-13862BDEE21C}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Samples.AspNetCore.Basic", "samples\Sentry.Samples.AspNetCore.Basic\Sentry.Samples.AspNetCore.Basic.csproj", "{E061684E-0777-4C38-A90B-C53DAF260029}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Samples.Console.Profiling", "samples\Sentry.Samples.Console.Profiling\Sentry.Samples.Console.Profiling.csproj", "{8F787C2D-5E31-440E-9EED-24F83726F616}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Samples.AspNetCore.Mvc", "samples\Sentry.Samples.AspNetCore.Mvc\Sentry.Samples.AspNetCore.Mvc.csproj", "{3D7754D1-CBA9-4693-80E9-B44F20423B51}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Samples.EntityFramework", "samples\Sentry.Samples.EntityFramework\Sentry.Samples.EntityFramework.csproj", "{E4121374-45BC-44CA-B5EC-CE1FF0E083CB}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.AspNetCore.Tests", "test\Sentry.AspNetCore.Tests\Sentry.AspNetCore.Tests.csproj", "{C100F0D2-3743-48F5-BA05-81E40F6C72FD}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Samples.GenericHost", "samples\Sentry.Samples.GenericHost\Sentry.Samples.GenericHost.csproj", "{BB12D722-93DE-44A1-9247-0DED366F5A29}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Extensions.Logging.Tests", "test\Sentry.Extensions.Logging.Tests\Sentry.Extensions.Logging.Tests.csproj", "{32B17E4A-8C30-44CC-B1D3-093CF284B1C3}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Samples.Google.Cloud.Functions", "samples\Sentry.Samples.Google.Cloud.Functions\Sentry.Samples.Google.Cloud.Functions.csproj", "{353FA91A-CE91-4FE5-95AB-EC2C9455A51C}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Testing", "test\Sentry.Testing\Sentry.Testing.csproj", "{20602A5A-B413-4E48-9AC9-00A7155774BD}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Samples.GraphQL.Client.Http", "samples\Sentry.Samples.GraphQL.Client.Http\Sentry.Samples.GraphQL.Client.Http.csproj", "{547AB39D-80FD-45B5-8B59-2B1F562F001B}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Samples.Log4Net", "samples\Sentry.Samples.Log4Net\Sentry.Samples.Log4Net.csproj", "{6B2A49CC-6992-47A7-8CF5-5EEA3216C8BC}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Samples.GraphQL.Server", "samples\Sentry.Samples.GraphQL.Server\Sentry.Samples.GraphQL.Server.csproj", "{ACC7A6B9-2FBE-4997-BB6F-8B9E10E170E0}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Log4Net", "src\Sentry.Log4Net\Sentry.Log4Net.csproj", "{D1D3BD5F-0C3A-4DA4-BAA2-2E725E74176F}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Samples.Log4Net", "samples\Sentry.Samples.Log4Net\Sentry.Samples.Log4Net.csproj", "{57EFCBA2-3346-4F4B-992A-4A6187AE1912}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Log4Net.Tests", "test\Sentry.Log4Net.Tests\Sentry.Log4Net.Tests.csproj", "{F275C86B-8F62-4070-9544-83CC5B68B751}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Samples.ME.Logging", "samples\Sentry.Samples.ME.Logging\Sentry.Samples.ME.Logging.csproj", "{BCD7519A-992D-4F1D-9EC9-BF3A21076EBD}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Samples.GenericHost", "samples\Sentry.Samples.GenericHost\Sentry.Samples.GenericHost.csproj", "{5CBEFF17-71BF-407B-868F-C784E6385DC8}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Samples.MacCatalyst", "samples\Sentry.Samples.MacCatalyst\Sentry.Samples.MacCatalyst.csproj", "{62605A8B-1906-4A57-926A-E598CE80D7A0}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Serilog", "src\Sentry.Serilog\Sentry.Serilog.csproj", "{2CF1FBEF-93C4-404E-94F6-543D08842633}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Samples.NLog", "samples\Sentry.Samples.NLog\Sentry.Samples.NLog.csproj", "{CECFF6CB-5B1B-4B60-AD64-F8847274929D}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Serilog.Tests", "test\Sentry.Serilog.Tests\Sentry.Serilog.Tests.csproj", "{EBABB411-4481-478B-BEAD-009D1EE6D259}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Samples.OpenTelemetry.AspNetCore", "samples\Sentry.Samples.OpenTelemetry.AspNetCore\Sentry.Samples.OpenTelemetry.AspNetCore.csproj", "{3E8E3D0F-8BD2-4DBF-B3CA-49F01B1202D2}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Samples.Serilog", "samples\Sentry.Samples.Serilog\Sentry.Samples.Serilog.csproj", "{B7EDB922-4024-4546-B6E4-E5AB9016369F}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Samples.OpenTelemetry.Console", "samples\Sentry.Samples.OpenTelemetry.Console\Sentry.Samples.OpenTelemetry.Console.csproj", "{C489FC5C-1BB0-49AA-81F0-B9FBB8F9005A}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Samples.AspNetCore.Serilog", "samples\Sentry.Samples.AspNetCore.Serilog\Sentry.Samples.AspNetCore.Serilog.csproj", "{1930A5D5-356B-43F9-AEDF-CB76254C5933}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Samples.Serilog", "samples\Sentry.Samples.Serilog\Sentry.Samples.Serilog.csproj", "{DF23BEA8-25E6-4685-8B6F-8E7CA373D0C7}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.NLog", "src\Sentry.NLog\Sentry.NLog.csproj", "{998AC5A8-8D13-46EA-B889-8A733CA152F7}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{B6AC91E2-03A9-4E59-AA41-8D9D2F53CD84}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.NLog.Tests", "test\Sentry.NLog.Tests\Sentry.NLog.Tests.csproj", "{21A360C7-338F-4A9D-A9A3-83152D0C9303}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.AspNet", "src\Sentry.AspNet\Sentry.AspNet.csproj", "{03868F4C-EFC3-4844-BBEA-DB2F0405458C}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Samples.NLog", "samples\Sentry.Samples.NLog\Sentry.Samples.NLog.csproj", "{DC90D63E-E4F3-40CB-AF6D-2EAEE5F619B7}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.AspNetCore.Grpc", "src\Sentry.AspNetCore.Grpc\Sentry.AspNetCore.Grpc.csproj", "{0CB683D1-4150-4400-B47D-4338A143288F}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.AspNet", "src\Sentry.AspNet\Sentry.AspNet.csproj", "{22AA261A-F8B4-41E2-95DD-82632EED0AA5}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.AspNetCore", "src\Sentry.AspNetCore\Sentry.AspNetCore.csproj", "{2F53E324-14C0-4599-A762-5ECDAAFAE56B}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.AspNet.Tests", "test\Sentry.AspNet.Tests\Sentry.AspNet.Tests.csproj", "{0885DDFE-2FC7-4241-AEB1-8D6BDA627C0A}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.AzureFunctions.Worker", "src\Sentry.AzureFunctions.Worker\Sentry.AzureFunctions.Worker.csproj", "{FEC13C99-BF78-4619-946B-4439859FC431}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "scripts", "scripts", "{3454831A-397C-4039-AAFC-9152A4E0B682}" - ProjectSection(SolutionItems) = preProject - scripts\bump-version.sh = scripts\bump-version.sh - EndProjectSection +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.DiagnosticSource", "src\Sentry.DiagnosticSource\Sentry.DiagnosticSource.csproj", "{2BBD568F-F785-4F71-99AC-F241303E0603}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".github", ".github", "{F267BFB9-C5D5-4018-9D3F-B55443702AEC}" - ProjectSection(SolutionItems) = preProject - .github\CODEOWNERS = .github\CODEOWNERS - .github\ISSUE_TEMPLATE.md = .github\ISSUE_TEMPLATE.md - EndProjectSection +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.EntityFramework", "src\Sentry.EntityFramework\Sentry.EntityFramework.csproj", "{D96BDA21-5907-4055-BF79-0FD3A5449B6C}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "workflows", "workflows", "{E1800E08-72E6-45AE-91EC-69B4FDBA7555}" - ProjectSection(SolutionItems) = preProject - .github\workflows\build.yml = .github\workflows\build.yml - .github\workflows\codeql-analysis.yml = .github\workflows\codeql-analysis.yml - .github\workflows\danger.yml = .github\workflows\danger.yml - .github\workflows\docs.yml = .github\workflows\docs.yml - .github\workflows\vulnerabilities.yml = .github\workflows\vulnerabilities.yml - EndProjectSection +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Extensions.Logging", "src\Sentry.Extensions.Logging\Sentry.Extensions.Logging.csproj", "{3920B073-C89D-4847-895F-84EE1817E8E6}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.AspNetCore.Grpc", "src\Sentry.AspNetCore.Grpc\Sentry.AspNetCore.Grpc.csproj", "{720811C8-29C7-4368-86F2-D61DF415AC2A}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Google.Cloud.Functions", "src\Sentry.Google.Cloud.Functions\Sentry.Google.Cloud.Functions.csproj", "{3B5313B8-3274-416E-B68F-EF44FA479821}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.AspNetCore.Grpc.Tests", "test\Sentry.AspNetCore.Grpc.Tests\Sentry.AspNetCore.Grpc.Tests.csproj", "{3818FA5C-8649-427D-8E68-0C44558CA0DD}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Log4Net", "src\Sentry.Log4Net\Sentry.Log4Net.csproj", "{2EB79D34-B5E8-4763-AC91-EAE179A47D3F}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Samples.AspNetCore.Grpc", "samples\Sentry.Samples.AspNetCore.Grpc\Sentry.Samples.AspNetCore.Grpc.csproj", "{21599C29-C3D4-4DAC-A2D6-6C194600478F}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Maui", "src\Sentry.Maui\Sentry.Maui.csproj", "{DACA084A-CFA8-4D48-8594-573E68E39F93}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Samples.AspNetCore.Blazor.Wasm", "samples\Sentry.Samples.AspNetCore.Blazor.Wasm\Sentry.Samples.AspNetCore.Blazor.Wasm.csproj", "{73FDCE53-75D1-4DCC-933A-8AB93A0E86EA}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.NLog", "src\Sentry.NLog\Sentry.NLog.csproj", "{A9B724E5-AF58-46B9-8122-FD77BD895A73}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Samples.Aws.Lambda.AspNetCoreServer", "samples\Sentry.Samples.Aws.Lambda.AspNetCoreServer\Sentry.Samples.Aws.Lambda.AspNetCoreServer.csproj", "{274CEDC2-2129-469D-B269-649EFA2EF5E0}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.OpenTelemetry", "src\Sentry.OpenTelemetry\Sentry.OpenTelemetry.csproj", "{18C4836B-28CA-48F8-9D77-5F50EFB585A7}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.EntityFramework", "src\Sentry.EntityFramework\Sentry.EntityFramework.csproj", "{8B38F62E-0DD5-486F-96F5-2025AFB9B491}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Profiling", "src\Sentry.Profiling\Sentry.Profiling.csproj", "{2CF32AF0-EA0B-468A-A8E8-850AC4B6A0E9}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.EntityFramework.Tests", "test\Sentry.EntityFramework.Tests\Sentry.EntityFramework.Tests.csproj", "{840B220E-68EC-4ECB-AEA1-67B0151F17FC}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Serilog", "src\Sentry.Serilog\Sentry.Serilog.csproj", "{44F9E846-0114-4D11-BC04-55CFA47A6799}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Samples.EntityFramework", "samples\Sentry.Samples.EntityFramework\Sentry.Samples.EntityFramework.csproj", "{8E4BA4C7-413C-4668-8F41-32F484FFB7AA}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry", "src\Sentry\Sentry.csproj", "{9837DF3C-31B9-44CC-819B-379B23989961}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Samples.Google.Cloud.Functions", "samples\Sentry.Samples.Google.Cloud.Functions\Sentry.Samples.Google.Cloud.Functions.csproj", "{88269A52-A0BA-41B2-8DF3-505B66B17243}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{6757ED91-C289-481B-A405-1BFFBCD61AD6}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Google.Cloud.Functions", "src\Sentry.Google.Cloud.Functions\Sentry.Google.Cloud.Functions.csproj", "{D1DB7B31-EC6B-430B-B6B0-2849BAE41AC1}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.AspNet.Tests", "test\Sentry.AspNet.Tests\Sentry.AspNet.Tests.csproj", "{A3AB602B-FD0C-4F3F-A558-99191AAF37FD}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Google.Cloud.Functions.Tests", "test\Sentry.Google.Cloud.Functions.Tests\Sentry.Google.Cloud.Functions.Tests.csproj", "{066522A4-8380-4D29-8DD0-973B1EDF0B39}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.AspNetCore.Grpc.Tests", "test\Sentry.AspNetCore.Grpc.Tests\Sentry.AspNetCore.Grpc.Tests.csproj", "{3F09B08C-1AE3-4E70-B959-4A9AA1E043FE}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.DiagnosticSource", "src\Sentry.DiagnosticSource\Sentry.DiagnosticSource.csproj", "{0BE821AB-88D4-4EB5-B012-C964FF58087A}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.AspNetCore.TestUtils", "test\Sentry.AspNetCore.TestUtils\Sentry.AspNetCore.TestUtils.csproj", "{987EB5CC-DB1D-44DD-A722-8CEC8F8DDEA9}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.DiagnosticSource.Tests", "test\Sentry.DiagnosticSource.Tests\Sentry.DiagnosticSource.Tests.csproj", "{D870B028-16ED-4551-8B0F-5529479D04C9}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.AspNetCore.Tests", "test\Sentry.AspNetCore.Tests\Sentry.AspNetCore.Tests.csproj", "{3F636604-0F63-4222-8D76-E10E12AA42EF}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.DiagnosticSource.IntegrationTests", "test\Sentry.DiagnosticSource.IntegrationTests\Sentry.DiagnosticSource.IntegrationTests.csproj", "{F8120B9C-D4CA-43DA-B5E1-1CFBA7C36E3B}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.AzureFunctions.Worker.Tests", "test\Sentry.AzureFunctions.Worker.Tests\Sentry.AzureFunctions.Worker.Tests.csproj", "{573C15F7-A1DC-4226-9237-301B986EC04A}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Maui", "src\Sentry.Maui\Sentry.Maui.csproj", "{FFFC74C5-680B-43E3-9C42-A7A23B589CB6}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.DiagnosticSource.IntegrationTests", "test\Sentry.DiagnosticSource.IntegrationTests\Sentry.DiagnosticSource.IntegrationTests.csproj", "{C43DEF1D-36A9-4884-98AC-EEF7D6A07087}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Maui.Tests", "test\Sentry.Maui.Tests\Sentry.Maui.Tests.csproj", "{143076C0-8D6B-4054-9F45-06B21655F417}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.DiagnosticSource.Tests", "test\Sentry.DiagnosticSource.Tests\Sentry.DiagnosticSource.Tests.csproj", "{F8B75222-5D8F-4E7A-AA7F-9F6C93FF77A2}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Testing.CrashableApp", "test\Sentry.Testing.CrashableApp\Sentry.Testing.CrashableApp.csproj", "{DA3CECBB-83BE-441A-852C-077809C48307}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.EntityFramework.Tests", "test\Sentry.EntityFramework.Tests\Sentry.EntityFramework.Tests.csproj", "{B8DCAF5D-CA2B-4BCD-94F6-D12B593ACAA6}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Samples.AspNetCore.Blazor.Server", "samples\Sentry.Samples.AspNetCore.Blazor.Server\Sentry.Samples.AspNetCore.Blazor.Server.csproj", "{70066C6C-0A18-4322-A02A-9A0DFE59C02B}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Extensions.Logging.Tests", "test\Sentry.Extensions.Logging.Tests\Sentry.Extensions.Logging.Tests.csproj", "{400AB583-D98B-4222-A7C0-EF1B94B1C76D}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.AspNetCore.TestUtils", "test\Sentry.AspNetCore.TestUtils\Sentry.AspNetCore.TestUtils.csproj", "{C96CB65D-3D2D-404E-85C0-69A3FC03B48F}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Google.Cloud.Functions.Tests", "test\Sentry.Google.Cloud.Functions.Tests\Sentry.Google.Cloud.Functions.Tests.csproj", "{E5A43FBE-1E52-4B65-9F40-D1F000732077}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Android.AssemblyReader", "src\Sentry.Android.AssemblyReader\Sentry.Android.AssemblyReader.csproj", "{ED5E4F7E-8267-4F3C-BD2A-779AC9BF3D7C}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Log4Net.Tests", "test\Sentry.Log4Net.Tests\Sentry.Log4Net.Tests.csproj", "{870A49BA-9C4A-4A2C-A6A9-4C8863D62BDB}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Profiling", "src\Sentry.Profiling\Sentry.Profiling.csproj", "{BD6CEF44-E05E-4C22-8D2F-0558A93DD2D6}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.NLog.Tests", "test\Sentry.NLog.Tests\Sentry.NLog.Tests.csproj", "{28ECD48F-6266-4D53-991C-6713E28E6C25}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Profiling.Tests", "test\Sentry.Profiling.Tests\Sentry.Profiling.Tests.csproj", "{2E750A7C-561D-4959-B967-042755139D84}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.OpenTelemetry.Tests", "test\Sentry.OpenTelemetry.Tests\Sentry.OpenTelemetry.Tests.csproj", "{8163EE59-0E93-4113-9096-F7760419CF78}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Samples.Console.Profiling", "samples\Sentry.Samples.Console.Profiling\Sentry.Samples.Console.Profiling.csproj", "{0F84C0BB-FDD4-43A9-B594-923EB10C8E3F}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Profiling.Tests", "test\Sentry.Profiling.Tests\Sentry.Profiling.Tests.csproj", "{39BE9CA8-8F72-4E8C-AE18-9AE8DC8AF170}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.AzureFunctions.Worker", "src\Sentry.AzureFunctions.Worker\Sentry.AzureFunctions.Worker.csproj", "{203C4556-16DE-46CE-9FAF-C93D8B30D04A}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Serilog.Tests", "test\Sentry.Serilog.Tests\Sentry.Serilog.Tests.csproj", "{B97C5563-22DE-46EF-A53C-E9EF55B36771}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Samples.AzureFunctions.Worker", "samples\Sentry.Samples.AzureFunctions.Worker\Sentry.Samples.AzureFunctions.Worker.csproj", "{243B75FF-1501-4DB7-B933-EE43D960EB90}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Testing.CrashableApp", "test\Sentry.Testing.CrashableApp\Sentry.Testing.CrashableApp.csproj", "{DF12DA3D-6B0D-4CED-9AD4-5EE6B225D837}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.AzureFunctions.Worker.Tests", "test\Sentry.AzureFunctions.Worker.Tests\Sentry.AzureFunctions.Worker.Tests.csproj", "{8639DB06-1F74-4890-8974-613305C1B6C5}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Testing", "test\Sentry.Testing\Sentry.Testing.csproj", "{11CBFB12-9DE7-4642-991F-967A37D7BFCB}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SingleFileTestApp", "test\SingleFileTestApp\SingleFileTestApp.csproj", "{08C99C2F-08D8-44A3-981F-768DC84DCEC7}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Tests", "test\Sentry.Tests\Sentry.Tests.csproj", "{1AF1D33A-8FE2-4CC5-A9D7-88E3FC26822B}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.OpenTelemetry", "src\Sentry.OpenTelemetry\Sentry.OpenTelemetry.csproj", "{D4B29F85-5029-462E-A67E-8B7183A0406D}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SingleFileTestApp", "test\SingleFileTestApp\SingleFileTestApp.csproj", "{F057B297-1F4B-4CC5-ABB9-CEBB2A6859B9}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.OpenTelemetry.Tests", "test\Sentry.OpenTelemetry.Tests\Sentry.OpenTelemetry.Tests.csproj", "{A58DE854-6576-4E07-98BF-03B9DCCDBF9A}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Benchmarks", "benchmarks\Sentry.Benchmarks\Sentry.Benchmarks.csproj", "{66429333-BF14-4277-B180-62DF7D56255C}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Samples.OpenTelemetry.AspNetCore", "samples\Sentry.Samples.OpenTelemetry.AspNetCore\Sentry.Samples.OpenTelemetry.AspNetCore.csproj", "{6F791E40-49A8-4A67-81DB-6913E519310A}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Samples.OpenTelemetry.Console", "samples\Sentry.Samples.OpenTelemetry.Console\Sentry.Samples.OpenTelemetry.Console.csproj", "{D62E79F4-FC3C-4D75-ABFE-CDE76EF46DDE}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Samples.GraphQL.Server", "samples\Sentry.Samples.GraphQL.Server\Sentry.Samples.GraphQL.Server.csproj", "{B3BFB7BA-1A5E-468F-8C47-F0841AA75848}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Samples.GraphQL.Client.Http", "samples\Sentry.Samples.GraphQL.Client.Http\Sentry.Samples.GraphQL.Client.Http.csproj", "{B01C5D8F-62EE-4E63-AE96-745BA1D2E175}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "benchmarks", "benchmarks", "{4676B96D-0310-4766-9AD0-FF2A7DEDA7E8}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {F2486CC8-FAB7-4775-976F-C5A4CF97867F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F2486CC8-FAB7-4775-976F-C5A4CF97867F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F2486CC8-FAB7-4775-976F-C5A4CF97867F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F2486CC8-FAB7-4775-976F-C5A4CF97867F}.Release|Any CPU.Build.0 = Release|Any CPU - {1E0F969B-67F9-4FCC-BCBF-596DB6460C7C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1E0F969B-67F9-4FCC-BCBF-596DB6460C7C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1E0F969B-67F9-4FCC-BCBF-596DB6460C7C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1E0F969B-67F9-4FCC-BCBF-596DB6460C7C}.Release|Any CPU.Build.0 = Release|Any CPU - {65F5A969-B386-48F5-8B7E-6C90D6C720BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {65F5A969-B386-48F5-8B7E-6C90D6C720BC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {65F5A969-B386-48F5-8B7E-6C90D6C720BC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {65F5A969-B386-48F5-8B7E-6C90D6C720BC}.Release|Any CPU.Build.0 = Release|Any CPU - {DE536383-4A18-4057-A7F0-639BDEF6E1BB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DE536383-4A18-4057-A7F0-639BDEF6E1BB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DE536383-4A18-4057-A7F0-639BDEF6E1BB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DE536383-4A18-4057-A7F0-639BDEF6E1BB}.Release|Any CPU.Build.0 = Release|Any CPU - {2718BBA4-F080-4924-BA50-B63F756FB097}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2718BBA4-F080-4924-BA50-B63F756FB097}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2718BBA4-F080-4924-BA50-B63F756FB097}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2718BBA4-F080-4924-BA50-B63F756FB097}.Release|Any CPU.Build.0 = Release|Any CPU - {6CAE75C2-9DED-44F4-8E14-2D4F9159D55F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6CAE75C2-9DED-44F4-8E14-2D4F9159D55F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6CAE75C2-9DED-44F4-8E14-2D4F9159D55F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6CAE75C2-9DED-44F4-8E14-2D4F9159D55F}.Release|Any CPU.Build.0 = Release|Any CPU - {BD43F598-5B20-477D-88C9-55B186542179}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BD43F598-5B20-477D-88C9-55B186542179}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BD43F598-5B20-477D-88C9-55B186542179}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BD43F598-5B20-477D-88C9-55B186542179}.Release|Any CPU.Build.0 = Release|Any CPU - {EBD057E5-771A-47EC-90E3-3C2625426A05}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EBD057E5-771A-47EC-90E3-3C2625426A05}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EBD057E5-771A-47EC-90E3-3C2625426A05}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EBD057E5-771A-47EC-90E3-3C2625426A05}.Release|Any CPU.Build.0 = Release|Any CPU - {E061684E-0777-4C38-A90B-C53DAF260029}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E061684E-0777-4C38-A90B-C53DAF260029}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E061684E-0777-4C38-A90B-C53DAF260029}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E061684E-0777-4C38-A90B-C53DAF260029}.Release|Any CPU.Build.0 = Release|Any CPU - {3D7754D1-CBA9-4693-80E9-B44F20423B51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3D7754D1-CBA9-4693-80E9-B44F20423B51}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3D7754D1-CBA9-4693-80E9-B44F20423B51}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3D7754D1-CBA9-4693-80E9-B44F20423B51}.Release|Any CPU.Build.0 = Release|Any CPU - {C100F0D2-3743-48F5-BA05-81E40F6C72FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C100F0D2-3743-48F5-BA05-81E40F6C72FD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C100F0D2-3743-48F5-BA05-81E40F6C72FD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C100F0D2-3743-48F5-BA05-81E40F6C72FD}.Release|Any CPU.Build.0 = Release|Any CPU - {32B17E4A-8C30-44CC-B1D3-093CF284B1C3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {32B17E4A-8C30-44CC-B1D3-093CF284B1C3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {32B17E4A-8C30-44CC-B1D3-093CF284B1C3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {32B17E4A-8C30-44CC-B1D3-093CF284B1C3}.Release|Any CPU.Build.0 = Release|Any CPU - {20602A5A-B413-4E48-9AC9-00A7155774BD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {20602A5A-B413-4E48-9AC9-00A7155774BD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {20602A5A-B413-4E48-9AC9-00A7155774BD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {20602A5A-B413-4E48-9AC9-00A7155774BD}.Release|Any CPU.Build.0 = Release|Any CPU - {6B2A49CC-6992-47A7-8CF5-5EEA3216C8BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6B2A49CC-6992-47A7-8CF5-5EEA3216C8BC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6B2A49CC-6992-47A7-8CF5-5EEA3216C8BC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6B2A49CC-6992-47A7-8CF5-5EEA3216C8BC}.Release|Any CPU.Build.0 = Release|Any CPU - {D1D3BD5F-0C3A-4DA4-BAA2-2E725E74176F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D1D3BD5F-0C3A-4DA4-BAA2-2E725E74176F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D1D3BD5F-0C3A-4DA4-BAA2-2E725E74176F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D1D3BD5F-0C3A-4DA4-BAA2-2E725E74176F}.Release|Any CPU.Build.0 = Release|Any CPU - {F275C86B-8F62-4070-9544-83CC5B68B751}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F275C86B-8F62-4070-9544-83CC5B68B751}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F275C86B-8F62-4070-9544-83CC5B68B751}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F275C86B-8F62-4070-9544-83CC5B68B751}.Release|Any CPU.Build.0 = Release|Any CPU - {5CBEFF17-71BF-407B-868F-C784E6385DC8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5CBEFF17-71BF-407B-868F-C784E6385DC8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5CBEFF17-71BF-407B-868F-C784E6385DC8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5CBEFF17-71BF-407B-868F-C784E6385DC8}.Release|Any CPU.Build.0 = Release|Any CPU - {2CF1FBEF-93C4-404E-94F6-543D08842633}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2CF1FBEF-93C4-404E-94F6-543D08842633}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2CF1FBEF-93C4-404E-94F6-543D08842633}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2CF1FBEF-93C4-404E-94F6-543D08842633}.Release|Any CPU.Build.0 = Release|Any CPU - {EBABB411-4481-478B-BEAD-009D1EE6D259}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EBABB411-4481-478B-BEAD-009D1EE6D259}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EBABB411-4481-478B-BEAD-009D1EE6D259}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EBABB411-4481-478B-BEAD-009D1EE6D259}.Release|Any CPU.Build.0 = Release|Any CPU - {B7EDB922-4024-4546-B6E4-E5AB9016369F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B7EDB922-4024-4546-B6E4-E5AB9016369F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B7EDB922-4024-4546-B6E4-E5AB9016369F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B7EDB922-4024-4546-B6E4-E5AB9016369F}.Release|Any CPU.Build.0 = Release|Any CPU - {1930A5D5-356B-43F9-AEDF-CB76254C5933}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1930A5D5-356B-43F9-AEDF-CB76254C5933}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1930A5D5-356B-43F9-AEDF-CB76254C5933}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1930A5D5-356B-43F9-AEDF-CB76254C5933}.Release|Any CPU.Build.0 = Release|Any CPU - {998AC5A8-8D13-46EA-B889-8A733CA152F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {998AC5A8-8D13-46EA-B889-8A733CA152F7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {998AC5A8-8D13-46EA-B889-8A733CA152F7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {998AC5A8-8D13-46EA-B889-8A733CA152F7}.Release|Any CPU.Build.0 = Release|Any CPU - {21A360C7-338F-4A9D-A9A3-83152D0C9303}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {21A360C7-338F-4A9D-A9A3-83152D0C9303}.Debug|Any CPU.Build.0 = Debug|Any CPU - {21A360C7-338F-4A9D-A9A3-83152D0C9303}.Release|Any CPU.ActiveCfg = Release|Any CPU - {21A360C7-338F-4A9D-A9A3-83152D0C9303}.Release|Any CPU.Build.0 = Release|Any CPU - {DC90D63E-E4F3-40CB-AF6D-2EAEE5F619B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DC90D63E-E4F3-40CB-AF6D-2EAEE5F619B7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DC90D63E-E4F3-40CB-AF6D-2EAEE5F619B7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DC90D63E-E4F3-40CB-AF6D-2EAEE5F619B7}.Release|Any CPU.Build.0 = Release|Any CPU - {22AA261A-F8B4-41E2-95DD-82632EED0AA5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {22AA261A-F8B4-41E2-95DD-82632EED0AA5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {22AA261A-F8B4-41E2-95DD-82632EED0AA5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {22AA261A-F8B4-41E2-95DD-82632EED0AA5}.Release|Any CPU.Build.0 = Release|Any CPU - {0885DDFE-2FC7-4241-AEB1-8D6BDA627C0A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0885DDFE-2FC7-4241-AEB1-8D6BDA627C0A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0885DDFE-2FC7-4241-AEB1-8D6BDA627C0A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0885DDFE-2FC7-4241-AEB1-8D6BDA627C0A}.Release|Any CPU.Build.0 = Release|Any CPU - {720811C8-29C7-4368-86F2-D61DF415AC2A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {720811C8-29C7-4368-86F2-D61DF415AC2A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {720811C8-29C7-4368-86F2-D61DF415AC2A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {720811C8-29C7-4368-86F2-D61DF415AC2A}.Release|Any CPU.Build.0 = Release|Any CPU - {3818FA5C-8649-427D-8E68-0C44558CA0DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3818FA5C-8649-427D-8E68-0C44558CA0DD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3818FA5C-8649-427D-8E68-0C44558CA0DD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3818FA5C-8649-427D-8E68-0C44558CA0DD}.Release|Any CPU.Build.0 = Release|Any CPU - {21599C29-C3D4-4DAC-A2D6-6C194600478F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {21599C29-C3D4-4DAC-A2D6-6C194600478F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {21599C29-C3D4-4DAC-A2D6-6C194600478F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {21599C29-C3D4-4DAC-A2D6-6C194600478F}.Release|Any CPU.Build.0 = Release|Any CPU - {73FDCE53-75D1-4DCC-933A-8AB93A0E86EA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {73FDCE53-75D1-4DCC-933A-8AB93A0E86EA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {73FDCE53-75D1-4DCC-933A-8AB93A0E86EA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {73FDCE53-75D1-4DCC-933A-8AB93A0E86EA}.Release|Any CPU.Build.0 = Release|Any CPU - {274CEDC2-2129-469D-B269-649EFA2EF5E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {274CEDC2-2129-469D-B269-649EFA2EF5E0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {274CEDC2-2129-469D-B269-649EFA2EF5E0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {274CEDC2-2129-469D-B269-649EFA2EF5E0}.Release|Any CPU.Build.0 = Release|Any CPU - {8B38F62E-0DD5-486F-96F5-2025AFB9B491}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8B38F62E-0DD5-486F-96F5-2025AFB9B491}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8B38F62E-0DD5-486F-96F5-2025AFB9B491}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8B38F62E-0DD5-486F-96F5-2025AFB9B491}.Release|Any CPU.Build.0 = Release|Any CPU - {840B220E-68EC-4ECB-AEA1-67B0151F17FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {840B220E-68EC-4ECB-AEA1-67B0151F17FC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {840B220E-68EC-4ECB-AEA1-67B0151F17FC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {840B220E-68EC-4ECB-AEA1-67B0151F17FC}.Release|Any CPU.Build.0 = Release|Any CPU - {8E4BA4C7-413C-4668-8F41-32F484FFB7AA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8E4BA4C7-413C-4668-8F41-32F484FFB7AA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8E4BA4C7-413C-4668-8F41-32F484FFB7AA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8E4BA4C7-413C-4668-8F41-32F484FFB7AA}.Release|Any CPU.Build.0 = Release|Any CPU - {88269A52-A0BA-41B2-8DF3-505B66B17243}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {88269A52-A0BA-41B2-8DF3-505B66B17243}.Debug|Any CPU.Build.0 = Debug|Any CPU - {88269A52-A0BA-41B2-8DF3-505B66B17243}.Release|Any CPU.ActiveCfg = Release|Any CPU - {88269A52-A0BA-41B2-8DF3-505B66B17243}.Release|Any CPU.Build.0 = Release|Any CPU - {D1DB7B31-EC6B-430B-B6B0-2849BAE41AC1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D1DB7B31-EC6B-430B-B6B0-2849BAE41AC1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D1DB7B31-EC6B-430B-B6B0-2849BAE41AC1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D1DB7B31-EC6B-430B-B6B0-2849BAE41AC1}.Release|Any CPU.Build.0 = Release|Any CPU - {066522A4-8380-4D29-8DD0-973B1EDF0B39}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {066522A4-8380-4D29-8DD0-973B1EDF0B39}.Debug|Any CPU.Build.0 = Debug|Any CPU - {066522A4-8380-4D29-8DD0-973B1EDF0B39}.Release|Any CPU.ActiveCfg = Release|Any CPU - {066522A4-8380-4D29-8DD0-973B1EDF0B39}.Release|Any CPU.Build.0 = Release|Any CPU - {0BE821AB-88D4-4EB5-B012-C964FF58087A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0BE821AB-88D4-4EB5-B012-C964FF58087A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0BE821AB-88D4-4EB5-B012-C964FF58087A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0BE821AB-88D4-4EB5-B012-C964FF58087A}.Release|Any CPU.Build.0 = Release|Any CPU - {D870B028-16ED-4551-8B0F-5529479D04C9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D870B028-16ED-4551-8B0F-5529479D04C9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D870B028-16ED-4551-8B0F-5529479D04C9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D870B028-16ED-4551-8B0F-5529479D04C9}.Release|Any CPU.Build.0 = Release|Any CPU - {F8120B9C-D4CA-43DA-B5E1-1CFBA7C36E3B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F8120B9C-D4CA-43DA-B5E1-1CFBA7C36E3B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F8120B9C-D4CA-43DA-B5E1-1CFBA7C36E3B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F8120B9C-D4CA-43DA-B5E1-1CFBA7C36E3B}.Release|Any CPU.Build.0 = Release|Any CPU - {FFFC74C5-680B-43E3-9C42-A7A23B589CB6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FFFC74C5-680B-43E3-9C42-A7A23B589CB6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FFFC74C5-680B-43E3-9C42-A7A23B589CB6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FFFC74C5-680B-43E3-9C42-A7A23B589CB6}.Release|Any CPU.Build.0 = Release|Any CPU - {143076C0-8D6B-4054-9F45-06B21655F417}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {143076C0-8D6B-4054-9F45-06B21655F417}.Debug|Any CPU.Build.0 = Debug|Any CPU - {143076C0-8D6B-4054-9F45-06B21655F417}.Release|Any CPU.ActiveCfg = Release|Any CPU - {143076C0-8D6B-4054-9F45-06B21655F417}.Release|Any CPU.Build.0 = Release|Any CPU - {DA3CECBB-83BE-441A-852C-077809C48307}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DA3CECBB-83BE-441A-852C-077809C48307}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DA3CECBB-83BE-441A-852C-077809C48307}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DA3CECBB-83BE-441A-852C-077809C48307}.Release|Any CPU.Build.0 = Release|Any CPU - {70066C6C-0A18-4322-A02A-9A0DFE59C02B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {70066C6C-0A18-4322-A02A-9A0DFE59C02B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {70066C6C-0A18-4322-A02A-9A0DFE59C02B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {70066C6C-0A18-4322-A02A-9A0DFE59C02B}.Release|Any CPU.Build.0 = Release|Any CPU - {C96CB65D-3D2D-404E-85C0-69A3FC03B48F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C96CB65D-3D2D-404E-85C0-69A3FC03B48F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C96CB65D-3D2D-404E-85C0-69A3FC03B48F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C96CB65D-3D2D-404E-85C0-69A3FC03B48F}.Release|Any CPU.Build.0 = Release|Any CPU - {ED5E4F7E-8267-4F3C-BD2A-779AC9BF3D7C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {ED5E4F7E-8267-4F3C-BD2A-779AC9BF3D7C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {ED5E4F7E-8267-4F3C-BD2A-779AC9BF3D7C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {ED5E4F7E-8267-4F3C-BD2A-779AC9BF3D7C}.Release|Any CPU.Build.0 = Release|Any CPU - {BD6CEF44-E05E-4C22-8D2F-0558A93DD2D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BD6CEF44-E05E-4C22-8D2F-0558A93DD2D6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BD6CEF44-E05E-4C22-8D2F-0558A93DD2D6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BD6CEF44-E05E-4C22-8D2F-0558A93DD2D6}.Release|Any CPU.Build.0 = Release|Any CPU - {2E750A7C-561D-4959-B967-042755139D84}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2E750A7C-561D-4959-B967-042755139D84}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2E750A7C-561D-4959-B967-042755139D84}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2E750A7C-561D-4959-B967-042755139D84}.Release|Any CPU.Build.0 = Release|Any CPU - {0F84C0BB-FDD4-43A9-B594-923EB10C8E3F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0F84C0BB-FDD4-43A9-B594-923EB10C8E3F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0F84C0BB-FDD4-43A9-B594-923EB10C8E3F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0F84C0BB-FDD4-43A9-B594-923EB10C8E3F}.Release|Any CPU.Build.0 = Release|Any CPU - {203C4556-16DE-46CE-9FAF-C93D8B30D04A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {203C4556-16DE-46CE-9FAF-C93D8B30D04A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {203C4556-16DE-46CE-9FAF-C93D8B30D04A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {203C4556-16DE-46CE-9FAF-C93D8B30D04A}.Release|Any CPU.Build.0 = Release|Any CPU - {243B75FF-1501-4DB7-B933-EE43D960EB90}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {243B75FF-1501-4DB7-B933-EE43D960EB90}.Debug|Any CPU.Build.0 = Debug|Any CPU - {243B75FF-1501-4DB7-B933-EE43D960EB90}.Release|Any CPU.ActiveCfg = Release|Any CPU - {243B75FF-1501-4DB7-B933-EE43D960EB90}.Release|Any CPU.Build.0 = Release|Any CPU - {8639DB06-1F74-4890-8974-613305C1B6C5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8639DB06-1F74-4890-8974-613305C1B6C5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8639DB06-1F74-4890-8974-613305C1B6C5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8639DB06-1F74-4890-8974-613305C1B6C5}.Release|Any CPU.Build.0 = Release|Any CPU - {08C99C2F-08D8-44A3-981F-768DC84DCEC7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {08C99C2F-08D8-44A3-981F-768DC84DCEC7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {08C99C2F-08D8-44A3-981F-768DC84DCEC7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {08C99C2F-08D8-44A3-981F-768DC84DCEC7}.Release|Any CPU.Build.0 = Release|Any CPU - {D4B29F85-5029-462E-A67E-8B7183A0406D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D4B29F85-5029-462E-A67E-8B7183A0406D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D4B29F85-5029-462E-A67E-8B7183A0406D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D4B29F85-5029-462E-A67E-8B7183A0406D}.Release|Any CPU.Build.0 = Release|Any CPU - {A58DE854-6576-4E07-98BF-03B9DCCDBF9A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A58DE854-6576-4E07-98BF-03B9DCCDBF9A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A58DE854-6576-4E07-98BF-03B9DCCDBF9A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A58DE854-6576-4E07-98BF-03B9DCCDBF9A}.Release|Any CPU.Build.0 = Release|Any CPU - {6F791E40-49A8-4A67-81DB-6913E519310A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6F791E40-49A8-4A67-81DB-6913E519310A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6F791E40-49A8-4A67-81DB-6913E519310A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6F791E40-49A8-4A67-81DB-6913E519310A}.Release|Any CPU.Build.0 = Release|Any CPU - {D62E79F4-FC3C-4D75-ABFE-CDE76EF46DDE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D62E79F4-FC3C-4D75-ABFE-CDE76EF46DDE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D62E79F4-FC3C-4D75-ABFE-CDE76EF46DDE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D62E79F4-FC3C-4D75-ABFE-CDE76EF46DDE}.Release|Any CPU.Build.0 = Release|Any CPU - {B3BFB7BA-1A5E-468F-8C47-F0841AA75848}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B3BFB7BA-1A5E-468F-8C47-F0841AA75848}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B3BFB7BA-1A5E-468F-8C47-F0841AA75848}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B3BFB7BA-1A5E-468F-8C47-F0841AA75848}.Release|Any CPU.Build.0 = Release|Any CPU - {B01C5D8F-62EE-4E63-AE96-745BA1D2E175}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B01C5D8F-62EE-4E63-AE96-745BA1D2E175}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B01C5D8F-62EE-4E63-AE96-745BA1D2E175}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B01C5D8F-62EE-4E63-AE96-745BA1D2E175}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {F2486CC8-FAB7-4775-976F-C5A4CF97867F} = {AF6AF4C7-8AA2-4D59-8064-2D79560904EB} - {1E0F969B-67F9-4FCC-BCBF-596DB6460C7C} = {83263231-1A2A-4733-B759-EEFF14E8C5D5} - {65F5A969-B386-48F5-8B7E-6C90D6C720BC} = {77454495-55EE-4B40-A089-71B9E8F82E89} - {DE536383-4A18-4057-A7F0-639BDEF6E1BB} = {77454495-55EE-4B40-A089-71B9E8F82E89} - {2718BBA4-F080-4924-BA50-B63F756FB097} = {AF6AF4C7-8AA2-4D59-8064-2D79560904EB} - {6CAE75C2-9DED-44F4-8E14-2D4F9159D55F} = {77454495-55EE-4B40-A089-71B9E8F82E89} - {BD43F598-5B20-477D-88C9-55B186542179} = {97EF834D-6BEB-45E8-B69A-1F9B7815B8B4} - {EBD057E5-771A-47EC-90E3-3C2625426A05} = {AF6AF4C7-8AA2-4D59-8064-2D79560904EB} - {E061684E-0777-4C38-A90B-C53DAF260029} = {77454495-55EE-4B40-A089-71B9E8F82E89} - {3D7754D1-CBA9-4693-80E9-B44F20423B51} = {77454495-55EE-4B40-A089-71B9E8F82E89} - {C100F0D2-3743-48F5-BA05-81E40F6C72FD} = {83263231-1A2A-4733-B759-EEFF14E8C5D5} - {32B17E4A-8C30-44CC-B1D3-093CF284B1C3} = {83263231-1A2A-4733-B759-EEFF14E8C5D5} - {20602A5A-B413-4E48-9AC9-00A7155774BD} = {83263231-1A2A-4733-B759-EEFF14E8C5D5} - {6B2A49CC-6992-47A7-8CF5-5EEA3216C8BC} = {77454495-55EE-4B40-A089-71B9E8F82E89} - {D1D3BD5F-0C3A-4DA4-BAA2-2E725E74176F} = {AF6AF4C7-8AA2-4D59-8064-2D79560904EB} - {F275C86B-8F62-4070-9544-83CC5B68B751} = {83263231-1A2A-4733-B759-EEFF14E8C5D5} - {5CBEFF17-71BF-407B-868F-C784E6385DC8} = {77454495-55EE-4B40-A089-71B9E8F82E89} - {2CF1FBEF-93C4-404E-94F6-543D08842633} = {AF6AF4C7-8AA2-4D59-8064-2D79560904EB} - {EBABB411-4481-478B-BEAD-009D1EE6D259} = {83263231-1A2A-4733-B759-EEFF14E8C5D5} - {B7EDB922-4024-4546-B6E4-E5AB9016369F} = {77454495-55EE-4B40-A089-71B9E8F82E89} - {1930A5D5-356B-43F9-AEDF-CB76254C5933} = {77454495-55EE-4B40-A089-71B9E8F82E89} - {998AC5A8-8D13-46EA-B889-8A733CA152F7} = {AF6AF4C7-8AA2-4D59-8064-2D79560904EB} - {21A360C7-338F-4A9D-A9A3-83152D0C9303} = {83263231-1A2A-4733-B759-EEFF14E8C5D5} - {DC90D63E-E4F3-40CB-AF6D-2EAEE5F619B7} = {77454495-55EE-4B40-A089-71B9E8F82E89} - {22AA261A-F8B4-41E2-95DD-82632EED0AA5} = {AF6AF4C7-8AA2-4D59-8064-2D79560904EB} - {0885DDFE-2FC7-4241-AEB1-8D6BDA627C0A} = {83263231-1A2A-4733-B759-EEFF14E8C5D5} - {3454831A-397C-4039-AAFC-9152A4E0B682} = {9D7E2F87-D6F4-4BBB-8980-87D0A8344C74} - {F267BFB9-C5D5-4018-9D3F-B55443702AEC} = {9D7E2F87-D6F4-4BBB-8980-87D0A8344C74} - {E1800E08-72E6-45AE-91EC-69B4FDBA7555} = {F267BFB9-C5D5-4018-9D3F-B55443702AEC} - {720811C8-29C7-4368-86F2-D61DF415AC2A} = {AF6AF4C7-8AA2-4D59-8064-2D79560904EB} - {3818FA5C-8649-427D-8E68-0C44558CA0DD} = {83263231-1A2A-4733-B759-EEFF14E8C5D5} - {21599C29-C3D4-4DAC-A2D6-6C194600478F} = {77454495-55EE-4B40-A089-71B9E8F82E89} - {73FDCE53-75D1-4DCC-933A-8AB93A0E86EA} = {77454495-55EE-4B40-A089-71B9E8F82E89} - {274CEDC2-2129-469D-B269-649EFA2EF5E0} = {77454495-55EE-4B40-A089-71B9E8F82E89} - {8B38F62E-0DD5-486F-96F5-2025AFB9B491} = {AF6AF4C7-8AA2-4D59-8064-2D79560904EB} - {840B220E-68EC-4ECB-AEA1-67B0151F17FC} = {83263231-1A2A-4733-B759-EEFF14E8C5D5} - {8E4BA4C7-413C-4668-8F41-32F484FFB7AA} = {77454495-55EE-4B40-A089-71B9E8F82E89} - {88269A52-A0BA-41B2-8DF3-505B66B17243} = {77454495-55EE-4B40-A089-71B9E8F82E89} - {D1DB7B31-EC6B-430B-B6B0-2849BAE41AC1} = {AF6AF4C7-8AA2-4D59-8064-2D79560904EB} - {066522A4-8380-4D29-8DD0-973B1EDF0B39} = {83263231-1A2A-4733-B759-EEFF14E8C5D5} - {0BE821AB-88D4-4EB5-B012-C964FF58087A} = {AF6AF4C7-8AA2-4D59-8064-2D79560904EB} - {D870B028-16ED-4551-8B0F-5529479D04C9} = {83263231-1A2A-4733-B759-EEFF14E8C5D5} - {F8120B9C-D4CA-43DA-B5E1-1CFBA7C36E3B} = {83263231-1A2A-4733-B759-EEFF14E8C5D5} - {FFFC74C5-680B-43E3-9C42-A7A23B589CB6} = {AF6AF4C7-8AA2-4D59-8064-2D79560904EB} - {143076C0-8D6B-4054-9F45-06B21655F417} = {83263231-1A2A-4733-B759-EEFF14E8C5D5} - {DA3CECBB-83BE-441A-852C-077809C48307} = {83263231-1A2A-4733-B759-EEFF14E8C5D5} - {70066C6C-0A18-4322-A02A-9A0DFE59C02B} = {77454495-55EE-4B40-A089-71B9E8F82E89} - {C96CB65D-3D2D-404E-85C0-69A3FC03B48F} = {83263231-1A2A-4733-B759-EEFF14E8C5D5} - {ED5E4F7E-8267-4F3C-BD2A-779AC9BF3D7C} = {AF6AF4C7-8AA2-4D59-8064-2D79560904EB} - {BD6CEF44-E05E-4C22-8D2F-0558A93DD2D6} = {AF6AF4C7-8AA2-4D59-8064-2D79560904EB} - {2E750A7C-561D-4959-B967-042755139D84} = {83263231-1A2A-4733-B759-EEFF14E8C5D5} - {0F84C0BB-FDD4-43A9-B594-923EB10C8E3F} = {77454495-55EE-4B40-A089-71B9E8F82E89} - {203C4556-16DE-46CE-9FAF-C93D8B30D04A} = {AF6AF4C7-8AA2-4D59-8064-2D79560904EB} - {243B75FF-1501-4DB7-B933-EE43D960EB90} = {77454495-55EE-4B40-A089-71B9E8F82E89} - {8639DB06-1F74-4890-8974-613305C1B6C5} = {83263231-1A2A-4733-B759-EEFF14E8C5D5} - {08C99C2F-08D8-44A3-981F-768DC84DCEC7} = {83263231-1A2A-4733-B759-EEFF14E8C5D5} - {D4B29F85-5029-462E-A67E-8B7183A0406D} = {AF6AF4C7-8AA2-4D59-8064-2D79560904EB} - {A58DE854-6576-4E07-98BF-03B9DCCDBF9A} = {83263231-1A2A-4733-B759-EEFF14E8C5D5} - {6F791E40-49A8-4A67-81DB-6913E519310A} = {77454495-55EE-4B40-A089-71B9E8F82E89} - {D62E79F4-FC3C-4D75-ABFE-CDE76EF46DDE} = {77454495-55EE-4B40-A089-71B9E8F82E89} - {B3BFB7BA-1A5E-468F-8C47-F0841AA75848} = {77454495-55EE-4B40-A089-71B9E8F82E89} - {B01C5D8F-62EE-4E63-AE96-745BA1D2E175} = {77454495-55EE-4B40-A089-71B9E8F82E89} + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D4D189F5-016D-4DA5-866B-7BAA3484907C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D4D189F5-016D-4DA5-866B-7BAA3484907C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D4D189F5-016D-4DA5-866B-7BAA3484907C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D4D189F5-016D-4DA5-866B-7BAA3484907C}.Release|Any CPU.Build.0 = Release|Any CPU + {61FAEE19-F92B-466D-8C56-5806809F391F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {61FAEE19-F92B-466D-8C56-5806809F391F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {61FAEE19-F92B-466D-8C56-5806809F391F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {61FAEE19-F92B-466D-8C56-5806809F391F}.Release|Any CPU.Build.0 = Release|Any CPU + {FB2A5107-2870-4BE9-B80C-6E3BC70C4C8C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FB2A5107-2870-4BE9-B80C-6E3BC70C4C8C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FB2A5107-2870-4BE9-B80C-6E3BC70C4C8C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FB2A5107-2870-4BE9-B80C-6E3BC70C4C8C}.Release|Any CPU.Build.0 = Release|Any CPU + {661E1511-C95A-40D5-BF28-8C85B2237916}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {661E1511-C95A-40D5-BF28-8C85B2237916}.Debug|Any CPU.Build.0 = Debug|Any CPU + {661E1511-C95A-40D5-BF28-8C85B2237916}.Release|Any CPU.ActiveCfg = Release|Any CPU + {661E1511-C95A-40D5-BF28-8C85B2237916}.Release|Any CPU.Build.0 = Release|Any CPU + {E6195E90-0A95-4DE4-B628-4479B12FEC83}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E6195E90-0A95-4DE4-B628-4479B12FEC83}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E6195E90-0A95-4DE4-B628-4479B12FEC83}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E6195E90-0A95-4DE4-B628-4479B12FEC83}.Release|Any CPU.Build.0 = Release|Any CPU + {1396BBCA-4EB6-4387-80FD-C37F9ECF14D5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1396BBCA-4EB6-4387-80FD-C37F9ECF14D5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1396BBCA-4EB6-4387-80FD-C37F9ECF14D5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1396BBCA-4EB6-4387-80FD-C37F9ECF14D5}.Release|Any CPU.Build.0 = Release|Any CPU + {A780CE04-5E9C-4283-ACC8-7D6625C86200}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A780CE04-5E9C-4283-ACC8-7D6625C86200}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A780CE04-5E9C-4283-ACC8-7D6625C86200}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A780CE04-5E9C-4283-ACC8-7D6625C86200}.Release|Any CPU.Build.0 = Release|Any CPU + {54AF7863-1AE6-491B-932E-E379C95CF6C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {54AF7863-1AE6-491B-932E-E379C95CF6C2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {54AF7863-1AE6-491B-932E-E379C95CF6C2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {54AF7863-1AE6-491B-932E-E379C95CF6C2}.Release|Any CPU.Build.0 = Release|Any CPU + {7EBA3150-6998-45E8-B0BE-BAB5C147D20F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7EBA3150-6998-45E8-B0BE-BAB5C147D20F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7EBA3150-6998-45E8-B0BE-BAB5C147D20F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7EBA3150-6998-45E8-B0BE-BAB5C147D20F}.Release|Any CPU.Build.0 = Release|Any CPU + {225837EE-7305-4B67-88FA-BD2431501C78}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {225837EE-7305-4B67-88FA-BD2431501C78}.Debug|Any CPU.Build.0 = Debug|Any CPU + {225837EE-7305-4B67-88FA-BD2431501C78}.Release|Any CPU.ActiveCfg = Release|Any CPU + {225837EE-7305-4B67-88FA-BD2431501C78}.Release|Any CPU.Build.0 = Release|Any CPU + {3440C9C0-1710-4608-A1A4-13862BDEE21C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3440C9C0-1710-4608-A1A4-13862BDEE21C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3440C9C0-1710-4608-A1A4-13862BDEE21C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3440C9C0-1710-4608-A1A4-13862BDEE21C}.Release|Any CPU.Build.0 = Release|Any CPU + {8F787C2D-5E31-440E-9EED-24F83726F616}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8F787C2D-5E31-440E-9EED-24F83726F616}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8F787C2D-5E31-440E-9EED-24F83726F616}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8F787C2D-5E31-440E-9EED-24F83726F616}.Release|Any CPU.Build.0 = Release|Any CPU + {E4121374-45BC-44CA-B5EC-CE1FF0E083CB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E4121374-45BC-44CA-B5EC-CE1FF0E083CB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E4121374-45BC-44CA-B5EC-CE1FF0E083CB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E4121374-45BC-44CA-B5EC-CE1FF0E083CB}.Release|Any CPU.Build.0 = Release|Any CPU + {BB12D722-93DE-44A1-9247-0DED366F5A29}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BB12D722-93DE-44A1-9247-0DED366F5A29}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BB12D722-93DE-44A1-9247-0DED366F5A29}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BB12D722-93DE-44A1-9247-0DED366F5A29}.Release|Any CPU.Build.0 = Release|Any CPU + {353FA91A-CE91-4FE5-95AB-EC2C9455A51C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {353FA91A-CE91-4FE5-95AB-EC2C9455A51C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {353FA91A-CE91-4FE5-95AB-EC2C9455A51C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {353FA91A-CE91-4FE5-95AB-EC2C9455A51C}.Release|Any CPU.Build.0 = Release|Any CPU + {547AB39D-80FD-45B5-8B59-2B1F562F001B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {547AB39D-80FD-45B5-8B59-2B1F562F001B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {547AB39D-80FD-45B5-8B59-2B1F562F001B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {547AB39D-80FD-45B5-8B59-2B1F562F001B}.Release|Any CPU.Build.0 = Release|Any CPU + {ACC7A6B9-2FBE-4997-BB6F-8B9E10E170E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {ACC7A6B9-2FBE-4997-BB6F-8B9E10E170E0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {ACC7A6B9-2FBE-4997-BB6F-8B9E10E170E0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {ACC7A6B9-2FBE-4997-BB6F-8B9E10E170E0}.Release|Any CPU.Build.0 = Release|Any CPU + {57EFCBA2-3346-4F4B-992A-4A6187AE1912}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {57EFCBA2-3346-4F4B-992A-4A6187AE1912}.Debug|Any CPU.Build.0 = Debug|Any CPU + {57EFCBA2-3346-4F4B-992A-4A6187AE1912}.Release|Any CPU.ActiveCfg = Release|Any CPU + {57EFCBA2-3346-4F4B-992A-4A6187AE1912}.Release|Any CPU.Build.0 = Release|Any CPU + {BCD7519A-992D-4F1D-9EC9-BF3A21076EBD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BCD7519A-992D-4F1D-9EC9-BF3A21076EBD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BCD7519A-992D-4F1D-9EC9-BF3A21076EBD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BCD7519A-992D-4F1D-9EC9-BF3A21076EBD}.Release|Any CPU.Build.0 = Release|Any CPU + {62605A8B-1906-4A57-926A-E598CE80D7A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {62605A8B-1906-4A57-926A-E598CE80D7A0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {62605A8B-1906-4A57-926A-E598CE80D7A0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {62605A8B-1906-4A57-926A-E598CE80D7A0}.Release|Any CPU.Build.0 = Release|Any CPU + {CECFF6CB-5B1B-4B60-AD64-F8847274929D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CECFF6CB-5B1B-4B60-AD64-F8847274929D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CECFF6CB-5B1B-4B60-AD64-F8847274929D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CECFF6CB-5B1B-4B60-AD64-F8847274929D}.Release|Any CPU.Build.0 = Release|Any CPU + {3E8E3D0F-8BD2-4DBF-B3CA-49F01B1202D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3E8E3D0F-8BD2-4DBF-B3CA-49F01B1202D2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3E8E3D0F-8BD2-4DBF-B3CA-49F01B1202D2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3E8E3D0F-8BD2-4DBF-B3CA-49F01B1202D2}.Release|Any CPU.Build.0 = Release|Any CPU + {C489FC5C-1BB0-49AA-81F0-B9FBB8F9005A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C489FC5C-1BB0-49AA-81F0-B9FBB8F9005A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C489FC5C-1BB0-49AA-81F0-B9FBB8F9005A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C489FC5C-1BB0-49AA-81F0-B9FBB8F9005A}.Release|Any CPU.Build.0 = Release|Any CPU + {DF23BEA8-25E6-4685-8B6F-8E7CA373D0C7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DF23BEA8-25E6-4685-8B6F-8E7CA373D0C7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DF23BEA8-25E6-4685-8B6F-8E7CA373D0C7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DF23BEA8-25E6-4685-8B6F-8E7CA373D0C7}.Release|Any CPU.Build.0 = Release|Any CPU + {03868F4C-EFC3-4844-BBEA-DB2F0405458C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {03868F4C-EFC3-4844-BBEA-DB2F0405458C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {03868F4C-EFC3-4844-BBEA-DB2F0405458C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {03868F4C-EFC3-4844-BBEA-DB2F0405458C}.Release|Any CPU.Build.0 = Release|Any CPU + {0CB683D1-4150-4400-B47D-4338A143288F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0CB683D1-4150-4400-B47D-4338A143288F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0CB683D1-4150-4400-B47D-4338A143288F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0CB683D1-4150-4400-B47D-4338A143288F}.Release|Any CPU.Build.0 = Release|Any CPU + {2F53E324-14C0-4599-A762-5ECDAAFAE56B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2F53E324-14C0-4599-A762-5ECDAAFAE56B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2F53E324-14C0-4599-A762-5ECDAAFAE56B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2F53E324-14C0-4599-A762-5ECDAAFAE56B}.Release|Any CPU.Build.0 = Release|Any CPU + {FEC13C99-BF78-4619-946B-4439859FC431}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FEC13C99-BF78-4619-946B-4439859FC431}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FEC13C99-BF78-4619-946B-4439859FC431}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FEC13C99-BF78-4619-946B-4439859FC431}.Release|Any CPU.Build.0 = Release|Any CPU + {2BBD568F-F785-4F71-99AC-F241303E0603}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2BBD568F-F785-4F71-99AC-F241303E0603}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2BBD568F-F785-4F71-99AC-F241303E0603}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2BBD568F-F785-4F71-99AC-F241303E0603}.Release|Any CPU.Build.0 = Release|Any CPU + {D96BDA21-5907-4055-BF79-0FD3A5449B6C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D96BDA21-5907-4055-BF79-0FD3A5449B6C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D96BDA21-5907-4055-BF79-0FD3A5449B6C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D96BDA21-5907-4055-BF79-0FD3A5449B6C}.Release|Any CPU.Build.0 = Release|Any CPU + {3920B073-C89D-4847-895F-84EE1817E8E6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3920B073-C89D-4847-895F-84EE1817E8E6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3920B073-C89D-4847-895F-84EE1817E8E6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3920B073-C89D-4847-895F-84EE1817E8E6}.Release|Any CPU.Build.0 = Release|Any CPU + {3B5313B8-3274-416E-B68F-EF44FA479821}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3B5313B8-3274-416E-B68F-EF44FA479821}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3B5313B8-3274-416E-B68F-EF44FA479821}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3B5313B8-3274-416E-B68F-EF44FA479821}.Release|Any CPU.Build.0 = Release|Any CPU + {2EB79D34-B5E8-4763-AC91-EAE179A47D3F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2EB79D34-B5E8-4763-AC91-EAE179A47D3F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2EB79D34-B5E8-4763-AC91-EAE179A47D3F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2EB79D34-B5E8-4763-AC91-EAE179A47D3F}.Release|Any CPU.Build.0 = Release|Any CPU + {DACA084A-CFA8-4D48-8594-573E68E39F93}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DACA084A-CFA8-4D48-8594-573E68E39F93}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DACA084A-CFA8-4D48-8594-573E68E39F93}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DACA084A-CFA8-4D48-8594-573E68E39F93}.Release|Any CPU.Build.0 = Release|Any CPU + {A9B724E5-AF58-46B9-8122-FD77BD895A73}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A9B724E5-AF58-46B9-8122-FD77BD895A73}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A9B724E5-AF58-46B9-8122-FD77BD895A73}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A9B724E5-AF58-46B9-8122-FD77BD895A73}.Release|Any CPU.Build.0 = Release|Any CPU + {18C4836B-28CA-48F8-9D77-5F50EFB585A7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {18C4836B-28CA-48F8-9D77-5F50EFB585A7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {18C4836B-28CA-48F8-9D77-5F50EFB585A7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {18C4836B-28CA-48F8-9D77-5F50EFB585A7}.Release|Any CPU.Build.0 = Release|Any CPU + {2CF32AF0-EA0B-468A-A8E8-850AC4B6A0E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2CF32AF0-EA0B-468A-A8E8-850AC4B6A0E9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2CF32AF0-EA0B-468A-A8E8-850AC4B6A0E9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2CF32AF0-EA0B-468A-A8E8-850AC4B6A0E9}.Release|Any CPU.Build.0 = Release|Any CPU + {44F9E846-0114-4D11-BC04-55CFA47A6799}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {44F9E846-0114-4D11-BC04-55CFA47A6799}.Debug|Any CPU.Build.0 = Debug|Any CPU + {44F9E846-0114-4D11-BC04-55CFA47A6799}.Release|Any CPU.ActiveCfg = Release|Any CPU + {44F9E846-0114-4D11-BC04-55CFA47A6799}.Release|Any CPU.Build.0 = Release|Any CPU + {9837DF3C-31B9-44CC-819B-379B23989961}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9837DF3C-31B9-44CC-819B-379B23989961}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9837DF3C-31B9-44CC-819B-379B23989961}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9837DF3C-31B9-44CC-819B-379B23989961}.Release|Any CPU.Build.0 = Release|Any CPU + {A3AB602B-FD0C-4F3F-A558-99191AAF37FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A3AB602B-FD0C-4F3F-A558-99191AAF37FD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A3AB602B-FD0C-4F3F-A558-99191AAF37FD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A3AB602B-FD0C-4F3F-A558-99191AAF37FD}.Release|Any CPU.Build.0 = Release|Any CPU + {3F09B08C-1AE3-4E70-B959-4A9AA1E043FE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3F09B08C-1AE3-4E70-B959-4A9AA1E043FE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3F09B08C-1AE3-4E70-B959-4A9AA1E043FE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3F09B08C-1AE3-4E70-B959-4A9AA1E043FE}.Release|Any CPU.Build.0 = Release|Any CPU + {987EB5CC-DB1D-44DD-A722-8CEC8F8DDEA9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {987EB5CC-DB1D-44DD-A722-8CEC8F8DDEA9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {987EB5CC-DB1D-44DD-A722-8CEC8F8DDEA9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {987EB5CC-DB1D-44DD-A722-8CEC8F8DDEA9}.Release|Any CPU.Build.0 = Release|Any CPU + {3F636604-0F63-4222-8D76-E10E12AA42EF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3F636604-0F63-4222-8D76-E10E12AA42EF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3F636604-0F63-4222-8D76-E10E12AA42EF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3F636604-0F63-4222-8D76-E10E12AA42EF}.Release|Any CPU.Build.0 = Release|Any CPU + {573C15F7-A1DC-4226-9237-301B986EC04A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {573C15F7-A1DC-4226-9237-301B986EC04A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {573C15F7-A1DC-4226-9237-301B986EC04A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {573C15F7-A1DC-4226-9237-301B986EC04A}.Release|Any CPU.Build.0 = Release|Any CPU + {C43DEF1D-36A9-4884-98AC-EEF7D6A07087}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C43DEF1D-36A9-4884-98AC-EEF7D6A07087}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C43DEF1D-36A9-4884-98AC-EEF7D6A07087}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C43DEF1D-36A9-4884-98AC-EEF7D6A07087}.Release|Any CPU.Build.0 = Release|Any CPU + {F8B75222-5D8F-4E7A-AA7F-9F6C93FF77A2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F8B75222-5D8F-4E7A-AA7F-9F6C93FF77A2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F8B75222-5D8F-4E7A-AA7F-9F6C93FF77A2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F8B75222-5D8F-4E7A-AA7F-9F6C93FF77A2}.Release|Any CPU.Build.0 = Release|Any CPU + {B8DCAF5D-CA2B-4BCD-94F6-D12B593ACAA6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B8DCAF5D-CA2B-4BCD-94F6-D12B593ACAA6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B8DCAF5D-CA2B-4BCD-94F6-D12B593ACAA6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B8DCAF5D-CA2B-4BCD-94F6-D12B593ACAA6}.Release|Any CPU.Build.0 = Release|Any CPU + {400AB583-D98B-4222-A7C0-EF1B94B1C76D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {400AB583-D98B-4222-A7C0-EF1B94B1C76D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {400AB583-D98B-4222-A7C0-EF1B94B1C76D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {400AB583-D98B-4222-A7C0-EF1B94B1C76D}.Release|Any CPU.Build.0 = Release|Any CPU + {E5A43FBE-1E52-4B65-9F40-D1F000732077}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E5A43FBE-1E52-4B65-9F40-D1F000732077}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E5A43FBE-1E52-4B65-9F40-D1F000732077}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E5A43FBE-1E52-4B65-9F40-D1F000732077}.Release|Any CPU.Build.0 = Release|Any CPU + {870A49BA-9C4A-4A2C-A6A9-4C8863D62BDB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {870A49BA-9C4A-4A2C-A6A9-4C8863D62BDB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {870A49BA-9C4A-4A2C-A6A9-4C8863D62BDB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {870A49BA-9C4A-4A2C-A6A9-4C8863D62BDB}.Release|Any CPU.Build.0 = Release|Any CPU + {28ECD48F-6266-4D53-991C-6713E28E6C25}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {28ECD48F-6266-4D53-991C-6713E28E6C25}.Debug|Any CPU.Build.0 = Debug|Any CPU + {28ECD48F-6266-4D53-991C-6713E28E6C25}.Release|Any CPU.ActiveCfg = Release|Any CPU + {28ECD48F-6266-4D53-991C-6713E28E6C25}.Release|Any CPU.Build.0 = Release|Any CPU + {8163EE59-0E93-4113-9096-F7760419CF78}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8163EE59-0E93-4113-9096-F7760419CF78}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8163EE59-0E93-4113-9096-F7760419CF78}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8163EE59-0E93-4113-9096-F7760419CF78}.Release|Any CPU.Build.0 = Release|Any CPU + {39BE9CA8-8F72-4E8C-AE18-9AE8DC8AF170}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {39BE9CA8-8F72-4E8C-AE18-9AE8DC8AF170}.Debug|Any CPU.Build.0 = Debug|Any CPU + {39BE9CA8-8F72-4E8C-AE18-9AE8DC8AF170}.Release|Any CPU.ActiveCfg = Release|Any CPU + {39BE9CA8-8F72-4E8C-AE18-9AE8DC8AF170}.Release|Any CPU.Build.0 = Release|Any CPU + {B97C5563-22DE-46EF-A53C-E9EF55B36771}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B97C5563-22DE-46EF-A53C-E9EF55B36771}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B97C5563-22DE-46EF-A53C-E9EF55B36771}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B97C5563-22DE-46EF-A53C-E9EF55B36771}.Release|Any CPU.Build.0 = Release|Any CPU + {DF12DA3D-6B0D-4CED-9AD4-5EE6B225D837}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DF12DA3D-6B0D-4CED-9AD4-5EE6B225D837}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DF12DA3D-6B0D-4CED-9AD4-5EE6B225D837}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DF12DA3D-6B0D-4CED-9AD4-5EE6B225D837}.Release|Any CPU.Build.0 = Release|Any CPU + {11CBFB12-9DE7-4642-991F-967A37D7BFCB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {11CBFB12-9DE7-4642-991F-967A37D7BFCB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {11CBFB12-9DE7-4642-991F-967A37D7BFCB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {11CBFB12-9DE7-4642-991F-967A37D7BFCB}.Release|Any CPU.Build.0 = Release|Any CPU + {1AF1D33A-8FE2-4CC5-A9D7-88E3FC26822B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1AF1D33A-8FE2-4CC5-A9D7-88E3FC26822B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1AF1D33A-8FE2-4CC5-A9D7-88E3FC26822B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1AF1D33A-8FE2-4CC5-A9D7-88E3FC26822B}.Release|Any CPU.Build.0 = Release|Any CPU + {F057B297-1F4B-4CC5-ABB9-CEBB2A6859B9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F057B297-1F4B-4CC5-ABB9-CEBB2A6859B9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F057B297-1F4B-4CC5-ABB9-CEBB2A6859B9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F057B297-1F4B-4CC5-ABB9-CEBB2A6859B9}.Release|Any CPU.Build.0 = Release|Any CPU + {66429333-BF14-4277-B180-62DF7D56255C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {66429333-BF14-4277-B180-62DF7D56255C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {66429333-BF14-4277-B180-62DF7D56255C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {66429333-BF14-4277-B180-62DF7D56255C}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {0C652B1A-DF72-4EE5-A98B-194FE2C054F6} + GlobalSection(NestedProjects) = preSolution + {D4D189F5-016D-4DA5-866B-7BAA3484907C} = {FBB2D033-AF2B-4706-B39E-2C29A7737B61} + {61FAEE19-F92B-466D-8C56-5806809F391F} = {D1EDFAC8-DFEC-430E-B052-A819F8F55125} + {FB2A5107-2870-4BE9-B80C-6E3BC70C4C8C} = {D1EDFAC8-DFEC-430E-B052-A819F8F55125} + {661E1511-C95A-40D5-BF28-8C85B2237916} = {D1EDFAC8-DFEC-430E-B052-A819F8F55125} + {E6195E90-0A95-4DE4-B628-4479B12FEC83} = {D1EDFAC8-DFEC-430E-B052-A819F8F55125} + {1396BBCA-4EB6-4387-80FD-C37F9ECF14D5} = {D1EDFAC8-DFEC-430E-B052-A819F8F55125} + {A780CE04-5E9C-4283-ACC8-7D6625C86200} = {D1EDFAC8-DFEC-430E-B052-A819F8F55125} + {54AF7863-1AE6-491B-932E-E379C95CF6C2} = {D1EDFAC8-DFEC-430E-B052-A819F8F55125} + {7EBA3150-6998-45E8-B0BE-BAB5C147D20F} = {D1EDFAC8-DFEC-430E-B052-A819F8F55125} + {225837EE-7305-4B67-88FA-BD2431501C78} = {D1EDFAC8-DFEC-430E-B052-A819F8F55125} + {3440C9C0-1710-4608-A1A4-13862BDEE21C} = {D1EDFAC8-DFEC-430E-B052-A819F8F55125} + {8F787C2D-5E31-440E-9EED-24F83726F616} = {D1EDFAC8-DFEC-430E-B052-A819F8F55125} + {E4121374-45BC-44CA-B5EC-CE1FF0E083CB} = {D1EDFAC8-DFEC-430E-B052-A819F8F55125} + {BB12D722-93DE-44A1-9247-0DED366F5A29} = {D1EDFAC8-DFEC-430E-B052-A819F8F55125} + {353FA91A-CE91-4FE5-95AB-EC2C9455A51C} = {D1EDFAC8-DFEC-430E-B052-A819F8F55125} + {547AB39D-80FD-45B5-8B59-2B1F562F001B} = {D1EDFAC8-DFEC-430E-B052-A819F8F55125} + {ACC7A6B9-2FBE-4997-BB6F-8B9E10E170E0} = {D1EDFAC8-DFEC-430E-B052-A819F8F55125} + {57EFCBA2-3346-4F4B-992A-4A6187AE1912} = {D1EDFAC8-DFEC-430E-B052-A819F8F55125} + {BCD7519A-992D-4F1D-9EC9-BF3A21076EBD} = {D1EDFAC8-DFEC-430E-B052-A819F8F55125} + {62605A8B-1906-4A57-926A-E598CE80D7A0} = {D1EDFAC8-DFEC-430E-B052-A819F8F55125} + {CECFF6CB-5B1B-4B60-AD64-F8847274929D} = {D1EDFAC8-DFEC-430E-B052-A819F8F55125} + {3E8E3D0F-8BD2-4DBF-B3CA-49F01B1202D2} = {D1EDFAC8-DFEC-430E-B052-A819F8F55125} + {C489FC5C-1BB0-49AA-81F0-B9FBB8F9005A} = {D1EDFAC8-DFEC-430E-B052-A819F8F55125} + {DF23BEA8-25E6-4685-8B6F-8E7CA373D0C7} = {D1EDFAC8-DFEC-430E-B052-A819F8F55125} + {03868F4C-EFC3-4844-BBEA-DB2F0405458C} = {B6AC91E2-03A9-4E59-AA41-8D9D2F53CD84} + {0CB683D1-4150-4400-B47D-4338A143288F} = {B6AC91E2-03A9-4E59-AA41-8D9D2F53CD84} + {2F53E324-14C0-4599-A762-5ECDAAFAE56B} = {B6AC91E2-03A9-4E59-AA41-8D9D2F53CD84} + {FEC13C99-BF78-4619-946B-4439859FC431} = {B6AC91E2-03A9-4E59-AA41-8D9D2F53CD84} + {2BBD568F-F785-4F71-99AC-F241303E0603} = {B6AC91E2-03A9-4E59-AA41-8D9D2F53CD84} + {D96BDA21-5907-4055-BF79-0FD3A5449B6C} = {B6AC91E2-03A9-4E59-AA41-8D9D2F53CD84} + {3920B073-C89D-4847-895F-84EE1817E8E6} = {B6AC91E2-03A9-4E59-AA41-8D9D2F53CD84} + {3B5313B8-3274-416E-B68F-EF44FA479821} = {B6AC91E2-03A9-4E59-AA41-8D9D2F53CD84} + {2EB79D34-B5E8-4763-AC91-EAE179A47D3F} = {B6AC91E2-03A9-4E59-AA41-8D9D2F53CD84} + {DACA084A-CFA8-4D48-8594-573E68E39F93} = {B6AC91E2-03A9-4E59-AA41-8D9D2F53CD84} + {A9B724E5-AF58-46B9-8122-FD77BD895A73} = {B6AC91E2-03A9-4E59-AA41-8D9D2F53CD84} + {18C4836B-28CA-48F8-9D77-5F50EFB585A7} = {B6AC91E2-03A9-4E59-AA41-8D9D2F53CD84} + {2CF32AF0-EA0B-468A-A8E8-850AC4B6A0E9} = {B6AC91E2-03A9-4E59-AA41-8D9D2F53CD84} + {44F9E846-0114-4D11-BC04-55CFA47A6799} = {B6AC91E2-03A9-4E59-AA41-8D9D2F53CD84} + {9837DF3C-31B9-44CC-819B-379B23989961} = {B6AC91E2-03A9-4E59-AA41-8D9D2F53CD84} + {A3AB602B-FD0C-4F3F-A558-99191AAF37FD} = {6757ED91-C289-481B-A405-1BFFBCD61AD6} + {3F09B08C-1AE3-4E70-B959-4A9AA1E043FE} = {6757ED91-C289-481B-A405-1BFFBCD61AD6} + {987EB5CC-DB1D-44DD-A722-8CEC8F8DDEA9} = {6757ED91-C289-481B-A405-1BFFBCD61AD6} + {3F636604-0F63-4222-8D76-E10E12AA42EF} = {6757ED91-C289-481B-A405-1BFFBCD61AD6} + {573C15F7-A1DC-4226-9237-301B986EC04A} = {6757ED91-C289-481B-A405-1BFFBCD61AD6} + {C43DEF1D-36A9-4884-98AC-EEF7D6A07087} = {6757ED91-C289-481B-A405-1BFFBCD61AD6} + {F8B75222-5D8F-4E7A-AA7F-9F6C93FF77A2} = {6757ED91-C289-481B-A405-1BFFBCD61AD6} + {B8DCAF5D-CA2B-4BCD-94F6-D12B593ACAA6} = {6757ED91-C289-481B-A405-1BFFBCD61AD6} + {400AB583-D98B-4222-A7C0-EF1B94B1C76D} = {6757ED91-C289-481B-A405-1BFFBCD61AD6} + {E5A43FBE-1E52-4B65-9F40-D1F000732077} = {6757ED91-C289-481B-A405-1BFFBCD61AD6} + {870A49BA-9C4A-4A2C-A6A9-4C8863D62BDB} = {6757ED91-C289-481B-A405-1BFFBCD61AD6} + {28ECD48F-6266-4D53-991C-6713E28E6C25} = {6757ED91-C289-481B-A405-1BFFBCD61AD6} + {8163EE59-0E93-4113-9096-F7760419CF78} = {6757ED91-C289-481B-A405-1BFFBCD61AD6} + {39BE9CA8-8F72-4E8C-AE18-9AE8DC8AF170} = {6757ED91-C289-481B-A405-1BFFBCD61AD6} + {B97C5563-22DE-46EF-A53C-E9EF55B36771} = {6757ED91-C289-481B-A405-1BFFBCD61AD6} + {DF12DA3D-6B0D-4CED-9AD4-5EE6B225D837} = {6757ED91-C289-481B-A405-1BFFBCD61AD6} + {11CBFB12-9DE7-4642-991F-967A37D7BFCB} = {6757ED91-C289-481B-A405-1BFFBCD61AD6} + {1AF1D33A-8FE2-4CC5-A9D7-88E3FC26822B} = {6757ED91-C289-481B-A405-1BFFBCD61AD6} + {F057B297-1F4B-4CC5-ABB9-CEBB2A6859B9} = {6757ED91-C289-481B-A405-1BFFBCD61AD6} + {66429333-BF14-4277-B180-62DF7D56255C} = {4676B96D-0310-4766-9AD0-FF2A7DEDA7E8} EndGlobalSection EndGlobal diff --git a/SentryCore.slnf b/SentryCore.slnf index 18b42fe295..e1e369a60c 100644 --- a/SentryCore.slnf +++ b/SentryCore.slnf @@ -2,11 +2,15 @@ "solution": { "path": "Sentry.sln", "projects": [ + "benchmarks\\Sentry.Benchmarks\\Sentry.Benchmarks.csproj", "samples\\Sentry.Samples.Console.Basic\\Sentry.Samples.Console.Basic.csproj", + "samples\\Sentry.Samples.Console.Profiling\\Sentry.Samples.Console.Profiling.csproj", + "src\\Sentry.Profiling\\Sentry.Profiling.csproj", "src\\Sentry\\Sentry.csproj", + "test\\Sentry.Profiling.Tests\\Sentry.Profiling.Tests.csproj", "test\\Sentry.Testing.CrashableApp\\Sentry.Testing.CrashableApp.csproj", "test\\Sentry.Testing\\Sentry.Testing.csproj", "test\\Sentry.Tests\\Sentry.Tests.csproj" ] } -} +} \ No newline at end of file diff --git a/before.Sentry.sln.targets b/before.Sentry.sln.targets index a574a849ba..6bfd70d883 100644 --- a/before.Sentry.sln.targets +++ b/before.Sentry.sln.targets @@ -1,8 +1,7 @@ - - - + + + diff --git a/benchmarks/Sentry.Benchmarks/BenchmarkDotNet.Artifacts/results/Sentry.Benchmarks.ProfilingBenchmarks-report-github.md b/benchmarks/Sentry.Benchmarks/BenchmarkDotNet.Artifacts/results/Sentry.Benchmarks.ProfilingBenchmarks-report-github.md index 723000f439..5f57df1070 100644 --- a/benchmarks/Sentry.Benchmarks/BenchmarkDotNet.Artifacts/results/Sentry.Benchmarks.ProfilingBenchmarks-report-github.md +++ b/benchmarks/Sentry.Benchmarks/BenchmarkDotNet.Artifacts/results/Sentry.Benchmarks.ProfilingBenchmarks-report-github.md @@ -1,54 +1,53 @@ ``` ini -BenchmarkDotNet=v0.13.5, OS=Windows 11 (10.0.22621.1555/22H2/2022Update/SunValley2) +BenchmarkDotNet=v0.13.5, OS=Windows 11 (10.0.22621.1702/22H2/2022Update/SunValley2) 12th Gen Intel Core i7-12700K, 1 CPU, 20 logical and 12 physical cores -.NET SDK=7.0.203 - [Host] : .NET 6.0.16 (6.0.1623.17311), X64 RyuJIT AVX2 - Job-HRXEOC : .NET 6.0.16 (6.0.1623.17311), X64 RyuJIT AVX2 +.NET SDK=7.0.302 + [Host] : .NET 6.0.16 (6.0.1623.17311), X64 RyuJIT AVX2 DEBUG + Job-XAKHAH : .NET 6.0.16 (6.0.1623.17311), X64 RyuJIT AVX2 Runtime=.NET 6.0 ``` -| Method | runtimeMs | processing | rundown | provider | n | Mean | Error | StdDev | Median | Ratio | RatioSD | Gen0 | Gen1 | Gen2 | Allocated | Alloc Ratio | -|----------------------------------------- |---------- |----------- |-------- |--------- |------- |--------------:|-----------:|-----------:|--------------:|------:|--------:|----------:|----------:|---------:|-----------:|------------:| -| **DiagnosticsSessionStartStop** | **?** | **?** | **?** | **?** | **?** | **11.002 ms** | **0.2181 ms** | **0.2142 ms** | **11.002 ms** | **?** | **?** | **-** | **-** | **-** | **9587 B** | **?** | -| SampleProfilerSessionStartStopFinishWait | ? | ? | ? | ? | ? | 118.284 ms | 4.0881 ms | 12.0539 ms | 123.832 ms | ? | ? | - | - | - | 3508694 B | ? | -| SampleProfilerSessionStartStop | ? | ? | ? | ? | ? | 115.846 ms | 4.5379 ms | 13.3802 ms | 121.593 ms | ? | ? | - | - | - | 3501074 B | ? | -| | | | | | | | | | | | | | | | | | -| **Transaction** | **25** | **False** | **?** | **?** | **?** | **121.313 ms** | **1.6881 ms** | **1.5790 ms** | **120.924 ms** | **?** | **?** | **-** | **-** | **-** | **3826061 B** | **?** | -| | | | | | | | | | | | | | | | | | -| **Transaction** | **25** | **True** | **?** | **?** | **?** | **148.345 ms** | **2.2705 ms** | **2.1238 ms** | **148.186 ms** | **?** | **?** | **750.0000** | **250.0000** | **-** | **31036228 B** | **?** | -| | | | | | | | | | | | | | | | | | -| **Transaction** | **100** | **False** | **?** | **?** | **?** | **219.679 ms** | **2.8684 ms** | **2.5428 ms** | **218.968 ms** | **?** | **?** | **-** | **-** | **-** | **4447075 B** | **?** | -| | | | | | | | | | | | | | | | | | -| **Transaction** | **100** | **True** | **?** | **?** | **?** | **244.955 ms** | **2.0558 ms** | **1.7167 ms** | **245.007 ms** | **?** | **?** | **500.0000** | **-** | **-** | **25737928 B** | **?** | -| | | | | | | | | | | | | | | | | | -| **Transaction** | **1000** | **False** | **?** | **?** | **?** | **1,035.830 ms** | **3.3787 ms** | **2.9952 ms** | **1,036.068 ms** | **?** | **?** | **-** | **-** | **-** | **4043360 B** | **?** | -| | | | | | | | | | | | | | | | | | -| **Transaction** | **1000** | **True** | **?** | **?** | **?** | **1,071.220 ms** | **3.8655 ms** | **3.0180 ms** | **1,070.841 ms** | **?** | **?** | **1000.0000** | **-** | **-** | **35168504 B** | **?** | -| | | | | | | | | | | | | | | | | | -| **Transaction** | **10000** | **False** | **?** | **?** | **?** | **10,171.186 ms** | **26.7803 ms** | **25.0503 ms** | **10,180.066 ms** | **?** | **?** | **-** | **-** | **-** | **10177136 B** | **?** | -| | | | | | | | | | | | | | | | | | -| **Transaction** | **10000** | **True** | **?** | **?** | **?** | **10,200.367 ms** | **9.7616 ms** | **9.1310 ms** | **10,199.573 ms** | **?** | **?** | **3000.0000** | **1000.0000** | **-** | **71216048 B** | **?** | -| | | | | | | | | | | | | | | | | | -| **DiagnosticsSessionStartCopyStop** | **?** | **?** | **False** | **all** | **?** | **110.255 ms** | **2.1973 ms** | **2.2565 ms** | **109.539 ms** | **?** | **?** | **-** | **-** | **-** | **35720 B** | **?** | -| | | | | | | | | | | | | | | | | | -| **DiagnosticsSessionStartCopyStop** | **?** | **?** | **False** | **runtime** | **?** | **9.025 ms** | **1.2790 ms** | **3.6491 ms** | **8.711 ms** | **?** | **?** | **-** | **-** | **-** | **14612 B** | **?** | -| | | | | | | | | | | | | | | | | | -| **DiagnosticsSessionStartCopyStop** | **?** | **?** | **False** | **sample** | **?** | **105.218 ms** | **3.3185 ms** | **9.7846 ms** | **109.640 ms** | **?** | **?** | **-** | **-** | **-** | **19185 B** | **?** | -| | | | | | | | | | | | | | | | | | -| **DiagnosticsSessionStartCopyStop** | **?** | **?** | **False** | **tpl** | **?** | **9.023 ms** | **1.4060 ms** | **4.0790 ms** | **10.077 ms** | **?** | **?** | **-** | **-** | **-** | **26514 B** | **?** | -| | | | | | | | | | | | | | | | | | -| **DiagnosticsSessionStartCopyStop** | **?** | **?** | **True** | **all** | **?** | **120.379 ms** | **3.1807 ms** | **9.3783 ms** | **123.728 ms** | **?** | **?** | **-** | **-** | **-** | **3492258 B** | **?** | -| | | | | | | | | | | | | | | | | | -| **DiagnosticsSessionStartCopyStop** | **?** | **?** | **True** | **runtime** | **?** | **12.597 ms** | **0.4213 ms** | **1.2021 ms** | **12.038 ms** | **?** | **?** | **500.0000** | **500.0000** | **500.0000** | **3266302 B** | **?** | -| | | | | | | | | | | | | | | | | | -| **DiagnosticsSessionStartCopyStop** | **?** | **?** | **True** | **sample** | **?** | **121.085 ms** | **2.4076 ms** | **6.9463 ms** | **122.342 ms** | **?** | **?** | **200.0000** | **200.0000** | **200.0000** | **3275838 B** | **?** | -| | | | | | | | | | | | | | | | | | -| **DiagnosticsSessionStartCopyStop** | **?** | **?** | **True** | **tpl** | **?** | **26.265 ms** | **4.1051 ms** | **11.8442 ms** | **23.362 ms** | **?** | **?** | **181.8182** | **181.8182** | **181.8182** | **3394838 B** | **?** | -| | | | | | | | | | | | | | | | | | -| **DoHardWork** | **?** | **?** | **?** | **?** | **10000** | **6.030 ms** | **0.0293 ms** | **0.0259 ms** | **6.031 ms** | **1.00** | **0.00** | **-** | **-** | **-** | **4 B** | **1.00** | -| DoHardWorkWhileProfiling | ? | ? | ? | ? | 10000 | 6.284 ms | 0.0201 ms | 0.0188 ms | 6.284 ms | 1.04 | 0.00 | - | - | - | 107 B | 26.75 | -| | | | | | | | | | | | | | | | | | -| **DoHardWork** | **?** | **?** | **?** | **?** | **100000** | **199.135 ms** | **1.4575 ms** | **1.3633 ms** | **199.928 ms** | **1.00** | **0.00** | **-** | **-** | **-** | **1739 B** | **1.00** | -| DoHardWorkWhileProfiling | ? | ? | ? | ? | 100000 | 206.346 ms | 0.3495 ms | 0.3269 ms | 206.320 ms | 1.04 | 0.01 | - | - | - | 2685 B | 1.54 | +| Method | runtimeMs | collect | rundown | provider | n | Mean | Error | StdDev | Median | Ratio | RatioSD | Gen0 | Gen1 | Gen2 | Allocated | Alloc Ratio | +|-------------------------------- |---------- |-------- |-------- |--------- |------- |--------------:|------------:|------------:|--------------:|------:|--------:|----------:|---------:|---------:|-----------:|------------:| +| **DiagnosticsSessionStartStop** | **?** | **?** | **?** | **?** | **?** | **12.764 ms** | **0.2544 ms** | **0.6289 ms** | **12.750 ms** | **?** | **?** | **-** | **-** | **-** | **8080 B** | **?** | +| SampleProfilerSessionStartStop | ? | ? | ? | ? | ? | 202.801 ms | 0.2305 ms | 0.2156 ms | 202.759 ms | ? | ? | 666.6667 | 333.3333 | 333.3333 | 10294405 B | ? | +| | | | | | | | | | | | | | | | | | +| **Transaction** | **25** | **False** | **?** | **?** | **?** | **26.836 ms** | **0.0554 ms** | **0.0518 ms** | **26.836 ms** | **?** | **?** | **-** | **-** | **-** | **209695 B** | **?** | +| | | | | | | | | | | | | | | | | | +| **Transaction** | **25** | **True** | **?** | **?** | **?** | **1,869.938 ms** | **110.4774 ms** | **325.7451 ms** | **1,988.836 ms** | **?** | **?** | **-** | **-** | **-** | **2300928 B** | **?** | +| | | | | | | | | | | | | | | | | | +| **Transaction** | **100** | **False** | **?** | **?** | **?** | **109.096 ms** | **0.2472 ms** | **0.2313 ms** | **109.037 ms** | **?** | **?** | **-** | **-** | **-** | **285309 B** | **?** | +| | | | | | | | | | | | | | | | | | +| **Transaction** | **100** | **True** | **?** | **?** | **?** | **1,849.174 ms** | **118.8488 ms** | **348.5630 ms** | **1,989.864 ms** | **?** | **?** | **-** | **-** | **-** | **4384000 B** | **?** | +| | | | | | | | | | | | | | | | | | +| **Transaction** | **1000** | **False** | **?** | **?** | **?** | **1,006.442 ms** | **0.7579 ms** | **0.7089 ms** | **1,006.476 ms** | **?** | **?** | **-** | **-** | **-** | **1841000 B** | **?** | +| | | | | | | | | | | | | | | | | | +| **Transaction** | **1000** | **True** | **?** | **?** | **?** | **2,740.554 ms** | **147.6695 ms** | **435.4070 ms** | **2,989.115 ms** | **?** | **?** | **-** | **-** | **-** | **7482952 B** | **?** | +| | | | | | | | | | | | | | | | | | +| **Transaction** | **10000** | **False** | **?** | **?** | **?** | **10,067.206 ms** | **1.5642 ms** | **1.4631 ms** | **10,066.989 ms** | **?** | **?** | **1000.0000** | **-** | **-** | **21200216 B** | **?** | +| | | | | | | | | | | | | | | | | | +| **Transaction** | **10000** | **True** | **?** | **?** | **?** | **11,874.396 ms** | **236.6765 ms** | **323.9655 ms** | **11,989.353 ms** | **?** | **?** | **1000.0000** | **-** | **-** | **24871080 B** | **?** | +| | | | | | | | | | | | | | | | | | +| **DiagnosticsSessionStartCopyStop** | **?** | **?** | **False** | **all** | **?** | **98.983 ms** | **4.0416 ms** | **11.9167 ms** | **106.218 ms** | **?** | **?** | **-** | **-** | **-** | **18041 B** | **?** | +| | | | | | | | | | | | | | | | | | +| **DiagnosticsSessionStartCopyStop** | **?** | **?** | **False** | **runtime** | **?** | **12.333 ms** | **1.9275 ms** | **5.6225 ms** | **11.957 ms** | **?** | **?** | **-** | **-** | **-** | **14052 B** | **?** | +| | | | | | | | | | | | | | | | | | +| **DiagnosticsSessionStartCopyStop** | **?** | **?** | **False** | **sample** | **?** | **98.474 ms** | **3.4511 ms** | **10.1755 ms** | **103.118 ms** | **?** | **?** | **-** | **-** | **-** | **12977 B** | **?** | +| | | | | | | | | | | | | | | | | | +| **DiagnosticsSessionStartCopyStop** | **?** | **?** | **False** | **tpl** | **?** | **9.190 ms** | **2.8708 ms** | **8.2828 ms** | **11.774 ms** | **?** | **?** | **-** | **-** | **-** | **26449 B** | **?** | +| | | | | | | | | | | | | | | | | | +| **DiagnosticsSessionStartCopyStop** | **?** | **?** | **True** | **all** | **?** | **112.681 ms** | **4.1611 ms** | **12.2690 ms** | **119.549 ms** | **?** | **?** | **166.6667** | **166.6667** | **166.6667** | **3296852 B** | **?** | +| | | | | | | | | | | | | | | | | | +| **DiagnosticsSessionStartCopyStop** | **?** | **?** | **True** | **runtime** | **?** | **12.433 ms** | **0.4167 ms** | **1.2088 ms** | **11.861 ms** | **?** | **?** | **500.0000** | **500.0000** | **500.0000** | **3269935 B** | **?** | +| | | | | | | | | | | | | | | | | | +| **DiagnosticsSessionStartCopyStop** | **?** | **?** | **True** | **sample** | **?** | **107.295 ms** | **4.8091 ms** | **14.1797 ms** | **110.104 ms** | **?** | **?** | **166.6667** | **166.6667** | **166.6667** | **3263068 B** | **?** | +| | | | | | | | | | | | | | | | | | +| **DiagnosticsSessionStartCopyStop** | **?** | **?** | **True** | **tpl** | **?** | **27.430 ms** | **2.6175 ms** | **7.6768 ms** | **27.496 ms** | **?** | **?** | **133.3333** | **133.3333** | **133.3333** | **3369689 B** | **?** | +| | | | | | | | | | | | | | | | | | +| **DoHardWork** | **?** | **?** | **?** | **?** | **10000** | **6.077 ms** | **0.0235 ms** | **0.0220 ms** | **6.080 ms** | **1.00** | **0.00** | **-** | **-** | **-** | **4 B** | **1.00** | +| DoHardWorkWhileProfiling | ? | ? | ? | ? | 10000 | 6.313 ms | 0.0245 ms | 0.0205 ms | 6.308 ms | 1.04 | 0.00 | - | - | - | 51446 B | 12,861.50 | +| | | | | | | | | | | | | | | | | | +| **DoHardWork** | **?** | **?** | **?** | **?** | **100000** | **199.804 ms** | **0.2485 ms** | **0.2325 ms** | **199.814 ms** | **1.00** | **0.00** | **-** | **-** | **-** | **1747 B** | **1.00** | +| DoHardWorkWhileProfiling | ? | ? | ? | ? | 100000 | 210.870 ms | 4.0807 ms | 4.5357 ms | 209.802 ms | 1.06 | 0.02 | - | - | - | 2221048 B | 1,271.35 | diff --git a/benchmarks/Sentry.Benchmarks/ProfilingBenchmarks.cs b/benchmarks/Sentry.Benchmarks/ProfilingBenchmarks.cs index 60ae5b22d7..1afe9c7413 100644 --- a/benchmarks/Sentry.Benchmarks/ProfilingBenchmarks.cs +++ b/benchmarks/Sentry.Benchmarks/ProfilingBenchmarks.cs @@ -11,31 +11,48 @@ namespace Sentry.Benchmarks; public class ProfilingBenchmarks { private IHub _hub = Substitute.For(); - private ITransactionProfilerFactory _factory = new SamplingTransactionProfilerFactory(Path.GetTempPath(), new()); + private SamplingTransactionProfilerFactory _factory; + private ITransactionProfiler _profiler; + + [GlobalSetup(Targets = new string[] { nameof(Transaction), nameof(DoHardWorkWhileProfiling) })] + public void StartProfiler() + { + _factory = SamplingTransactionProfilerFactory.Create(new()); + } + + [GlobalCleanup(Targets = new string[] { nameof(Transaction), nameof(DoHardWorkWhileProfiling) })] + public void StopProfiler() + { + _profiler?.Finish(); + _profiler?.CollectAsync(new Transaction("", "")).Wait(); + _profiler = null; + _factory.Dispose(); + _factory = null; + } #region full transaction profiling - public IEnumerable ProfilerArguments() + public IEnumerable TransactionBenchmarkArguments() { foreach (var runtimeMs in new[] { 25, 100, 1000, 10000 }) { - foreach (var processing in new[] { true, false }) + foreach (var collect in new[] { true, false }) { - yield return new object[] { runtimeMs, processing }; + yield return new object[] { runtimeMs, collect }; } } } // Run a profiled transaction. Profiler starts and stops for each transaction separately. [Benchmark] - [ArgumentsSource(nameof(ProfilerArguments))] - public long Transaction(int runtimeMs, bool processing) + [ArgumentsSource(nameof(TransactionBenchmarkArguments))] + public long Transaction(int runtimeMs, bool collect) { var tt = new TransactionTracer(_hub, "test", ""); tt.TransactionProfiler = _factory.Start(tt, CancellationToken.None); var result = RunForMs(runtimeMs); - tt.TransactionProfiler?.Finish(); + tt.TransactionProfiler.Finish(); var transaction = new Transaction(tt); - if (processing) + if (collect) { var collectTask = tt.TransactionProfiler.CollectAsync(transaction); collectTask.Wait(); @@ -97,11 +114,7 @@ public DiagnosticsClient DiagnosticsClientNew() [Benchmark] public void DiagnosticsSessionStartStop() { - var session = DiagnosticsClientNew().StartEventPipeSession( - SampleProfilerSession.Providers, - SampleProfilerSession.RequestRundown, - SampleProfilerSession.CircularBufferMB - ); + var session = DiagnosticsClientNew().StartEventPipeSession(SampleProfilerSession.Providers, true, SampleProfilerSession.CircularBufferMB); session.EventStream.Dispose(); session.Dispose(); } @@ -139,19 +152,10 @@ public void DiagnosticsSessionStartCopyStop(bool rundown, string provider) session.Dispose(); } - // Same as DiagnosticsSessionStartCopyStop(rundown: true, provider: 'all') - [Benchmark] - public void SampleProfilerSessionStartStopFinishWait() - { - var session = SampleProfilerSession.StartNew(CancellationToken.None); - session.Stop(); - session.FinishAsync().Wait(); - } - [Benchmark] public void SampleProfilerSessionStartStop() { - var session = SampleProfilerSession.StartNew(CancellationToken.None); + using var session = SampleProfilerSession.StartNew(); session.Stop(); } #endregion @@ -163,30 +167,15 @@ public void SampleProfilerSessionStartStop() [ArgumentsSource(nameof(OverheadRunArguments))] public long DoHardWork(int n) { - return ProfilingBenchmarks.FindPrimeNumber(n); + return FindPrimeNumber(n); } [BenchmarkCategory("overhead"), Benchmark] [ArgumentsSource(nameof(OverheadRunArguments))] public long DoHardWorkWhileProfiling(int n) { - return ProfilingBenchmarks.FindPrimeNumber(n); - } - - private ITransactionProfiler _profiler; - - [GlobalSetup(Target = nameof(DoHardWorkWhileProfiling))] - public void StartProfiler() - { - _profiler = _factory.Start(new TransactionTracer(_hub, "", ""), CancellationToken.None); - } - - [GlobalCleanup(Target = nameof(DoHardWorkWhileProfiling))] - public void StopProfiler() - { - _profiler?.Finish(); - _profiler?.CollectAsync(new Transaction("", "")).Wait(); - _profiler = null; + _profiler ??= _factory.Start(new TransactionTracer(_hub, "", ""), CancellationToken.None); + return FindPrimeNumber(n); } #endregion } diff --git a/benchmarks/Sentry.Benchmarks/Sentry.Benchmarks.csproj b/benchmarks/Sentry.Benchmarks/Sentry.Benchmarks.csproj index 0e41142686..cafffce00d 100644 --- a/benchmarks/Sentry.Benchmarks/Sentry.Benchmarks.csproj +++ b/benchmarks/Sentry.Benchmarks/Sentry.Benchmarks.csproj @@ -11,6 +11,15 @@ + + + + + BenchmarkDotNetTransientTraceEvent + + + + diff --git a/benchmarks/Sentry.Benchmarks/run.cmd b/benchmarks/Sentry.Benchmarks/run.cmd index 597cd776e9..4ded1aefd5 100644 --- a/benchmarks/Sentry.Benchmarks/run.cmd +++ b/benchmarks/Sentry.Benchmarks/run.cmd @@ -1,4 +1,4 @@ -set framework=netcoreapp2.1 +set framework=net6.0 dotnet build -c Release -f %framework% if not errorlevel 0 exit /b -1 diff --git a/benchmarks/Sentry.Benchmarks/run.sh b/benchmarks/Sentry.Benchmarks/run.sh index 8626b8eb03..df4b01437a 100755 --- a/benchmarks/Sentry.Benchmarks/run.sh +++ b/benchmarks/Sentry.Benchmarks/run.sh @@ -1,6 +1,6 @@ #!/bin/bash set -e errexit -framework=netcoreapp2.1 +framework=net6.0 dotnet build -c Release -f $framework dotnet bin/Release/$framework/Sentry.Benchmarks.dll diff --git a/modules/make-internal-perfview.ps1 b/modules/make-internal-perfview.ps1 new file mode 100644 index 0000000000..5db3db9e81 --- /dev/null +++ b/modules/make-internal-perfview.ps1 @@ -0,0 +1,33 @@ +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' + +function UpdateSourceFiles([string]$Path) +{ + $files = Get-ChildItem -Recurse "$PSScriptRoot/perfview/$Path" -Filter '*.cs' + foreach ($file in $files) + { + $oldText = Get-Content $file.FullName -Raw + $text = $oldText + + # Make types internal. + $text = $text -replace 'public( +([a-z ]+)?(class|struct|enum|interface|delegate) +)', 'internal$1' + $text = $text -creplace "(`n +)(class | struct | enum | interface) ", '$1internal $2 ' + + # Allow nullable types. + $text = "#nullable disable`n`n" + ($text -replace "#nullable disable[`n`r]+", '') + + # Don't error out on obsolete code usage. + $text = $text -replace '(? - { - // Never executed: - // This could be any async I/O operation, like a DB query - await Task.Yield(); - scope.SetExtra("Key", "Value"); - }); - // Enable the SDK - using (SentrySdk.Init(o => + using (SentrySdk.Init(options => { - // A Sentry Data Source Name (DSN) is required. - // See https://docs.sentry.io/product/sentry-basics/dsn-explainer/ - // You can set it in the SENTRY_DSN environment variable, or you can set it in code here. - // o.Dsn = "... Your DSN ..."; - - // Send stack trace for events that were not created from an exception - // e.g: CaptureMessage, log.LogDebug, log.LogInformation ... - o.AttachStacktrace = true; - - // Sentry won't consider code from namespace LibraryX.* as part of the app code and will hide it from the stacktrace by default - // To see the lines from non `AppCode`, select `Full`. Will include non App code like System.*, Microsoft.* and LibraryX.* - o.AddInAppExclude("LibraryX."); - - // Before excluding all prefixed 'LibraryX.', any stack trace from a type namespaced 'LibraryX.Core' will be considered InApp. - o.AddInAppInclude("LibraryX.Core"); - - // Send personal identifiable information like the username logged on to the computer and machine name - o.SendDefaultPii = true; - - // To enable event sampling, uncomment: - // o.SampleRate = 0.5f; // Randomly drop (don't send to Sentry) half of events - - // Modifications to event before it goes out. Could replace the event altogether - o.SetBeforeSend((@event, _) => - { - // Drop an event altogether: - if (@event.Tags.ContainsKey("SomeTag")) - { - return null; - } - - return @event; - } - ); - - // Allows inspecting and modifying, returning a new or simply rejecting (returning null) - o.SetBeforeBreadcrumb((crumb, _) => - { - // Don't add breadcrumbs with message containing: - if (crumb.Message?.Contains("bad breadcrumb") == true) - { - return null; - } - - return crumb; - }); - - // Ignore exception by its type: - o.AddExceptionFilterForType(); - - // Configure the background worker which sends events to sentry: - // Wait up to 5 seconds before shutdown while there are events to send. - o.ShutdownTimeout = TimeSpan.FromSeconds(5); - - // Enable SDK logging with Debug level - o.Debug = true; - // To change the verbosity, use: - // o.DiagnosticLevel = SentryLevel.Info; - // To use a custom logger: - // o.DiagnosticLogger = ... - - // Using a proxy: - o.HttpProxy = null; //new WebProxy("https://localhost:3128"); - - // Example customizing the HttpClientHandlers created - o.CreateHttpMessageHandler = () => new HttpClientHandler - { - ServerCertificateCustomValidationCallback = (_, certificate, _, _) => - !certificate.Archived - }; - - // Access to the HttpClient created to serve the SentryClint - o.ConfigureClient = client => client.DefaultRequestHeaders.TryAddWithoutValidation("CustomHeader", new[] { "my value" }); + options.Dsn = + // NOTE: ADD YOUR OWN DSN BELOW so you can see the events in your own Sentry account + "https://eb18e953812b41c3aeb042e666fd3b5c@o447951.ingest.sentry.io/5428537"; - // Control/override how to apply the State object into the scope - o.SentryScopeStateProcessor = new MyCustomerScopeStateProcessor(); + options.Debug = true; + // options.AutoSessionTracking = true; + options.IsGlobalModeEnabled = true; + options.EnableTracing = true; - o.TracesSampleRate = 1.0; + // Debugging + options.ShutdownTimeout = TimeSpan.FromMinutes(5); - o.AddIntegration(new ProfilingIntegration(Path.GetTempPath())); + options.AddIntegration(new ProfilingIntegration()); })) { var tx = SentrySdk.StartTransaction("app", "run"); - // Ignored by its type due to the setting above - SentrySdk.CaptureException(new XsltCompileException()); - - SentrySdk.AddBreadcrumb( - "A 'bad breadcrumb' that will be rejected because of 'BeforeBreadcrumb callback above.'"); - - // Data added to the root scope (no PushScope called up to this point) - // The modifications done here will affect all events sent and will propagate to child scopes. - await SentrySdk.ConfigureScopeAsync(async scope => - { - scope.AddEventProcessor(new SomeEventProcessor()); - scope.AddExceptionProcessor(new ArgumentExceptionProcessor()); - - // This could be any async I/O operation, like a DB query - await Task.Yield(); - scope.SetExtra("SomeExtraInfo", - new - { - Data = "Value fetched asynchronously", - ManaLevel = 199 - }); - }); - - // Configures a scope which is only valid within the callback - SentrySdk.CaptureMessage("Fatal message!", s => - { - s.Level = SentryLevel.Fatal; - s.TransactionName = "main"; - s.Environment = "SpecialEnvironment"; - - // Add a file attachment for upload - s.AddAttachment(typeof(Program).Assembly.Location); - }); - - FindPrimeNumber(100000); - var eventId = SentrySdk.CaptureMessage("Some warning!", SentryLevel.Warning); - - // Send an user feedback linked to the warning. - var timestamp = DateTime.Now.Ticks; - var user = $"user{timestamp}"; - var email = $"user{timestamp}@user{timestamp}.com"; - - SentrySdk.CaptureUserFeedback(new UserFeedback(eventId, user, email, "this is a sample user feedback")); - - var error = new Exception("Attempting to send this multiple times"); - - // Only the first capture will be sent to Sentry - for (var i = 0; i < 3; i++) - { - // The SDK is able to detect duplicate events: - // This is useful, for example, when multiple loggers log the same exception. Or exception is re-thrown and recaptured. - SentrySdk.CaptureException(error); - } - var count = 10; for (var i = 0; i < count; i++) { - const string msg = "{0} of {1} items we'll wait to flush to Sentry!"; - SentrySdk.CaptureEvent(new SentryEvent - { - Message = new SentryMessage - { - Message = msg, - Formatted = string.Format(msg, i, count) - }, - Level = SentryLevel.Debug - }); - FindPrimeNumber(100000); } - // Console output will show queue being flushed. - await SentrySdk.FlushAsync(); - // ------------------------- - - // A custom made client, that could be registered with DI, - // would get disposed by the container on app shutdown + tx.Finish(); + var sw = Stopwatch.StartNew(); - var evt = new SentryEvent - { - Message = "Starting new client" - }; - evt.AddBreadcrumb("Breadcrumb directly to the event"); - evt.User.Username = "some@user"; - // Group all events with the following fingerprint: - evt.SetFingerprint("NewClientDebug"); - evt.Level = SentryLevel.Debug; - SentrySdk.CaptureEvent(evt); + // Flushing takes 10 seconds consistently? + SentrySdk.Flush(TimeSpan.FromMinutes(5)); + Console.WriteLine("Flushed in " + sw.Elapsed); - // Using a different DSN for a section of the app (i.e: admin) - const string AdminDsn = "https://f670c444cca14cf2bb4bfc403525b6a3@sentry.io/259314"; - using (var adminClient = new SentryClient(new SentryOptions { Dsn = AdminDsn })) + // is the second profile faster? + tx = SentrySdk.StartTransaction("app", "run"); + count = 10; + for (var i = 0; i < count; i++) { - // Make believe web framework middleware - var middleware = new AdminPartMiddleware(adminClient, null); - var request = new { Path = "/admin" }; // made up request - middleware.Invoke(request); - } // Dispose the client which flushes any queued events - - SentrySdk.CaptureException( - new Exception("Error outside of the admin section: Goes to the default DSN")); + FindPrimeNumber(100000); + } tx.Finish(); + sw = Stopwatch.StartNew(); + + // Flushing takes 10 seconds consistently? + SentrySdk.Flush(TimeSpan.FromMinutes(5)); + Console.WriteLine("Flushed in " + sw.Elapsed); } // On Dispose: SDK closed, events queued are flushed/sent to Sentry } @@ -234,83 +80,4 @@ private static long FindPrimeNumber(int n) } return (--a); } - - private class AdminPartMiddleware - { - private readonly ISentryClient _adminClient; - private readonly dynamic _middleware; - - public AdminPartMiddleware(ISentryClient adminClient, dynamic middleware) - { - _adminClient = adminClient; - _middleware = middleware; - } - - public void Invoke(dynamic request) - { - using (SentrySdk.PushScope(new SpecialContextObject())) - { - SentrySdk.AddBreadcrumb(request.Path, "request-path"); - - // Change the SentryClient in case the request is to the admin part: - if (request.Path.StartsWith("/admin")) - { - // Within this scope, the _adminClient will be used instead of whatever - // client was defined before this point: - SentrySdk.BindClient(_adminClient); - } - - SentrySdk.CaptureException(new Exception("Error at the admin section")); - // Else it uses the default client - - _middleware?.Invoke(request); - } // Scope is disposed. - } - } - - private class SomeEventProcessor : ISentryEventProcessor - { - public SentryEvent Process(SentryEvent @event) - { - // Here you can modify the event as you need - if (@event.Level > SentryLevel.Info) - { - @event.AddBreadcrumb("Processed by " + nameof(SomeEventProcessor)); - } - - return @event; - } - } - - private class ArgumentExceptionProcessor : SentryEventExceptionProcessor - { - protected override void ProcessException(ArgumentException exception, SentryEvent sentryEvent) - { - // Handle specific types of exceptions and add more data to the event - sentryEvent.SetTag("parameter-name", exception.ParamName); - } - } - - private class MyCustomerScopeStateProcessor : ISentryScopeStateProcessor - { - private readonly ISentryScopeStateProcessor _fallback = new DefaultSentryScopeStateProcessor(); - - public void Apply(Scope scope, object state) - { - if (state is SpecialContextObject specialState) - { - scope.SetTag("SpecialContextObject", specialState.A + specialState.B); - } - else - { - _fallback.Apply(scope, state); - } - } - } - - private class SpecialContextObject - { - public string A { get; } = "hello"; - public string B { get; } = "world"; - } } diff --git a/src/Sentry.Profiling/Downsampler.cs b/src/Sentry.Profiling/Downsampler.cs index 1b75d6d959..c343b6e93a 100644 --- a/src/Sentry.Profiling/Downsampler.cs +++ b/src/Sentry.Profiling/Downsampler.cs @@ -6,46 +6,29 @@ /// internal class Downsampler { - public double SamplingRateMs { get; set; } = (double)1_000 / 101; // 101 Hz - private double NextSampleCounter = 0; - private double NextSampleLow = 0; - private double NextSampleHigh = -1; + private static double _samplingRateMs = (double)1_000 / 101; // 101 Hz + private double _samplingGapMs = _samplingRateMs * 0.9; - public void AttachTo(EventPipeEventSource source) + // Maps from ThreadIndex to the last sample timestamp for that thread. + private GrowableArray _prevThreadSamples = new(10); + + public void NewThreadAdded(int threadIndex) { - source.AddDispatchHook(DispatchHook); + if (threadIndex >= _prevThreadSamples.Count) + { + _prevThreadSamples.Count = threadIndex + 1; + _prevThreadSamples[threadIndex] = Double.MinValue; + } } - // Downsamples to the configured SamplingRateMs by keeping a shifting window of where the timestamp must fall. - // Alternatively, we could keep a map of the previous sample for each thread and check that instead but that would - // be a bit less performant (albeit more precise). - private void DispatchHook(TraceEvent traceEvent, Action realDispatch) + public bool ShouldSample(int threadIndex, double timestampMs) { - if (traceEvent.ProviderGuid.Equals(SampleProfilerTraceEventParser.ProviderGuid)) + Debug.Assert(threadIndex < _prevThreadSamples.Count, "ThreadIndex too large - you must call NewThreadAdded() if a new thread is added."); + if (_prevThreadSamples[threadIndex] + _samplingRateMs <= timestampMs) { - var timestampMs = traceEvent.TimeStampRelativeMSec; - // Don't sample until the NextSampleLow is reached. - if (NextSampleLow >= timestampMs) - { - NextSampleHigh = -1; - return; // skip the event - } - - // This is the first sample after reaching the lower bound - configure the Upper bound to some reasonable value. - if (NextSampleHigh < 0) - { - NextSampleHigh = timestampMs + 0.9; - } - // After the upper bound is breached, advance the lower bound to the next window we care about. - else if (NextSampleHigh < timestampMs) - { - NextSampleCounter += 1; - NextSampleLow = SamplingRateMs * NextSampleCounter - 0.5; - return; // skip the event - } + _prevThreadSamples[threadIndex] = timestampMs; + return true; } - - // Process the event. - realDispatch(traceEvent); + return false; } } diff --git a/src/Sentry.Profiling/SampleProfileBuilder.cs b/src/Sentry.Profiling/SampleProfileBuilder.cs new file mode 100644 index 0000000000..9e9b86f71a --- /dev/null +++ b/src/Sentry.Profiling/SampleProfileBuilder.cs @@ -0,0 +1,192 @@ +using Microsoft.Diagnostics.Tracing; +using Microsoft.Diagnostics.Tracing.Etlx; +using Sentry.Extensibility; +using Sentry.Internal; +using Sentry.Protocol; + +namespace Sentry.Profiling; + +/// +/// Build a SampleProfile from TraceEvent data. +/// +internal class SampleProfileBuilder +{ + private readonly SentryOptions _options; + private readonly TraceLog _traceLog; + + // Output profile being built. + public readonly SampleProfile Profile = new(); + + // TODO reevaluate the use of SparseArray after setting up continous profiling. Dictionary might be better. + // A sparse array that maps from StackSourceFrameIndex to an index in the output Profile.frames. + private readonly SparseScalarArray _frameIndexes = new(-1, 1000); + + // A dictionary from a CallStackIndex to an index in the output Profile.stacks. + private readonly SparseScalarArray _stackIndexes = new(100); + + // A sparse array mapping from a ThreadIndex to an index in Profile.Threads. + private readonly SparseScalarArray _threadIndexes = new(-1, 10); + + // TODO make downsampling conditional once this is available: https://github.com/dotnet/runtime/issues/82939 + private readonly Downsampler _downsampler = new(); + + public SampleProfileBuilder(SentryOptions options, TraceLog traceLog) + { + _options = options; + _traceLog = traceLog; + } + + internal void AddSample(TraceEvent data, double timestampMs) + { + var thread = data.Thread(); + if (thread.ThreadIndex == ThreadIndex.Invalid) + { + _options.DiagnosticLogger?.LogDebug("Encountered a Profiler Sample without a correct thread. Skipping."); + return; + } + + var callStackIndex = data.CallStackIndex(); + if (callStackIndex == CallStackIndex.Invalid) + { + _options.DiagnosticLogger?.LogDebug("Encountered a Profiler Sample without an associated call stack. Skipping."); + return; + } + + var threadIndex = AddThread(thread); + if (threadIndex < 0) + { + return; + } + + if (!_downsampler.ShouldSample(threadIndex, timestampMs)) + { + return; + } + + var stackIndex = AddStackTrace(callStackIndex); + if (stackIndex < 0) + { + return; + } + + Profile.Samples.Add(new() + { + Timestamp = (ulong)(timestampMs * 1_000_000), + StackId = stackIndex, + ThreadId = threadIndex + }); + } + + /// + /// Adds stack trace and frames, if missing. + /// + /// The index into the Profile's stacks list + private int AddStackTrace(CallStackIndex callstackIndex) + { + var key = (int)callstackIndex; + + if (!_stackIndexes.ContainsKey(key)) + { + Profile.Stacks.Add(CreateStackTrace(callstackIndex)); + _stackIndexes[key] = Profile.Stacks.Count - 1; + } + + return _stackIndexes[key]; + } + + private Internal.GrowableArray CreateStackTrace(CallStackIndex callstackIndex) + { + var stackTrace = new Internal.GrowableArray(10); + while (callstackIndex != CallStackIndex.Invalid) + { + var codeAddressIndex = _traceLog.CallStacks.CodeAddressIndex(callstackIndex); + if (codeAddressIndex != CodeAddressIndex.Invalid) + { + stackTrace.Add(AddStackFrame(codeAddressIndex)); + callstackIndex = _traceLog.CallStacks.Caller(callstackIndex); + } + else + { + // No need to traverse further up the stack when we're on the thread/process. + break; + } + } + + stackTrace.Trim(10); + return stackTrace; + } + + /// + /// Check if the frame is already stored in the output Profile, or adds it. + /// + /// The index to the output Profile frames array. + private int AddStackFrame(CodeAddressIndex codeAddressIndex) + { + var key = (int)codeAddressIndex; + + if (!_frameIndexes.ContainsKey(key)) + { + Profile.Frames.Add(CreateStackFrame(codeAddressIndex)); + _frameIndexes[key] = Profile.Frames.Count - 1; + } + + return _frameIndexes[key]; + } + + /// + /// Check if the thread is already stored in the output Profile, or adds it. + /// + /// The index to the output Profile frames array. + private int AddThread(TraceThread thread) + { + var key = (int)thread.ThreadIndex; + + if (!_threadIndexes.ContainsKey(key)) + { + Profile.Threads.Add(new() + { + Name = thread.ThreadInfo ?? $"Thread {thread.ThreadID}", + }); + _threadIndexes[key] = Profile.Threads.Count - 1; + _downsampler.NewThreadAdded(_threadIndexes[key]); + } + + return _threadIndexes[key]; + } + + private SentryStackFrame CreateStackFrame(CodeAddressIndex codeAddressIndex) + { + var frame = new SentryStackFrame(); + + var methodIndex = _traceLog.CodeAddresses.MethodIndex(codeAddressIndex); + if (_traceLog.CodeAddresses.Methods[methodIndex] is { } method) + { + frame.Function = method.FullMethodName; + + TraceModuleFile moduleFile = method.MethodModuleFile; + if (moduleFile is not null) + { + frame.Module = moduleFile.Name; + } + + frame.ConfigureAppFrame(_options); + } + else + { + // native frame + frame.InApp = false; + } + + // TODO enable this once we implement symbolication (we will need to send debug_meta too), see StackTraceFactory. + // if (_traceLog.CodeAddresses.ILOffset(codeAddressIndex) is { } ilOffset && ilOffset >= 0) + // { + // frame.InstructionOffset = ilOffset; + // } + // else if (_traceLog.CodeAddresses.Address(codeAddressIndex) is { } address) + // { + // frame.InstructionAddress = $"0x{address:x}"; + // } + + return frame; + } +} diff --git a/src/Sentry.Profiling/SampleProfilerSession.cs b/src/Sentry.Profiling/SampleProfilerSession.cs index f8811de3fd..009b3ff03e 100644 --- a/src/Sentry.Profiling/SampleProfilerSession.cs +++ b/src/Sentry.Profiling/SampleProfilerSession.cs @@ -1,24 +1,29 @@ using System.Diagnostics.Tracing; using Microsoft.Diagnostics.NETCore.Client; +using Microsoft.Diagnostics.Tracing.Etlx; +using Microsoft.Diagnostics.Tracing.EventPipe; using Microsoft.Diagnostics.Tracing.Parsers; +using Sentry.Extensibility; +using Sentry.Internal; namespace Sentry.Profiling; -internal class SampleProfilerSession +internal class SampleProfilerSession : IDisposable { private readonly EventPipeSession _session; - private readonly MemoryStream _stream; - private readonly Task _copyTask; + private readonly TraceLogEventSource _eventSource; + private readonly SampleProfilerTraceEventParser _sampleEventParser; + private readonly IDiagnosticLogger? _logger; + private readonly SentryStopwatch _stopwatch; + private bool _stopped = false; - private readonly CancellationTokenRegistration _stopRegistration; - private bool _stopped; - - private SampleProfilerSession(EventPipeSession session, MemoryStream stream, Task copyTask, CancellationTokenRegistration stopRegistration) + private SampleProfilerSession(SentryStopwatch stopwatch, EventPipeSession session, TraceLogEventSource eventSource, IDiagnosticLogger? logger) { _session = session; - _stream = stream; - _copyTask = copyTask; - _stopRegistration = stopRegistration; + _logger = logger; + _eventSource = eventSource; + _sampleEventParser = new SampleProfilerTraceEventParser(_eventSource); + _stopwatch = stopwatch; } // Exposed only for benchmarks. @@ -26,45 +31,55 @@ private SampleProfilerSession(EventPipeSession session, MemoryStream stream, Tas { // Note: all events we need issued by "DotNETRuntime" provider are at "EventLevel.Informational" // see https://learn.microsoft.com/en-us/dotnet/fundamentals/diagnostics/runtime-events - new EventPipeProvider("Microsoft-Windows-DotNETRuntime", EventLevel.Informational, (long) ClrTraceEventParser.Keywords.Default), - new EventPipeProvider("Microsoft-DotNETCore-SampleProfiler", EventLevel.Informational), - new EventPipeProvider("System.Threading.Tasks.TplEventSource", EventLevel.Informational, (long) TplEtwProviderTraceEventParser.Keywords.Default) + // TODO replace Keywords.Default with a subset. Currently it is: + // Default = GC | Type | GCHeapSurvivalAndMovement | Binder | Loader | Jit | NGen | SupressNGen + // | StopEnumeration | Security | AppDomainResourceManagement | Exception | Threading | Contention | Stack | JittedMethodILToNativeMap + // | ThreadTransfer | GCHeapAndTypeNames | Codesymbols | Compilation, + new EventPipeProvider(ClrTraceEventParser.ProviderName, EventLevel.Informational, (long) ClrTraceEventParser.Keywords.Default), + new EventPipeProvider(SampleProfilerTraceEventParser.ProviderName, EventLevel.Informational), + // new EventPipeProvider(TplEtwProviderTraceEventParser.ProviderName, EventLevel.Informational, (long) TplEtwProviderTraceEventParser.Keywords.Default) }; - // Exposed only for benchmarks. - internal static bool RequestRundown = true; - // Exposed only for benchmarks. // The size of the runtime's buffer for collecting events in MB, same as the current default in StartEventPipeSession(). internal static int CircularBufferMB = 256; - public static SampleProfilerSession StartNew(CancellationToken cancellationToken) + public SampleProfilerTraceEventParser SampleEventParser => _sampleEventParser; + + public TimeSpan Elapsed => _stopwatch.Elapsed; + + public TraceLog TraceLog => _eventSource.TraceLog; + + public static SampleProfilerSession StartNew(IDiagnosticLogger? logger = null) { var client = new DiagnosticsClient(Process.GetCurrentProcess().Id); - var session = client.StartEventPipeSession(Providers, RequestRundown, CircularBufferMB); - var stopRegistration = cancellationToken.Register(() => session.Stop(), false); - var stream = new MemoryStream(); - var copyTask = session.EventStream.CopyToAsync(stream, cancellationToken); + var session = client.StartEventPipeSession(Providers, requestRundown: false, CircularBufferMB); + var stopWatch = SentryStopwatch.StartNew(); + var eventSource = TraceLog.CreateFromEventPipeSession(session, TraceLog.EventPipeRundownConfiguration.Enable(client)); + + // Process() blocks until the session is stopped so we need to run it on a separate thread. + Task.Factory.StartNew(eventSource.Process, TaskCreationOptions.LongRunning); - return new SampleProfilerSession(session, stream, copyTask, stopRegistration); + return new SampleProfilerSession(stopWatch, session, eventSource, logger); } public void Stop() { if (!_stopped) { - _stopRegistration.Unregister(); - _session.Stop(); - _stopped = true; + try + { + _stopped = true; + _session.Stop(); + _session.Dispose(); + _eventSource.Dispose(); + } + catch (Exception ex) + { + _logger?.LogWarning("Error during sampler profiler session shutdown.", ex); + } } } - public async Task FinishAsync() - { - Stop(); - await _copyTask.ConfigureAwait(false); - _session.Dispose(); - _stream.Position = 0; - return _stream; - } + public void Dispose() => Stop(); } diff --git a/src/Sentry.Profiling/SamplingTransactionProfiler.cs b/src/Sentry.Profiling/SamplingTransactionProfiler.cs index b340916ca3..22267ed269 100644 --- a/src/Sentry.Profiling/SamplingTransactionProfiler.cs +++ b/src/Sentry.Profiling/SamplingTransactionProfiler.cs @@ -1,6 +1,4 @@ -using FastSerialization; using Microsoft.Diagnostics.Tracing; -using Microsoft.Diagnostics.Tracing.Etlx; using Sentry.Extensibility; using Sentry.Internal; using Sentry.Protocol; @@ -10,62 +8,52 @@ namespace Sentry.Profiling; internal class SamplingTransactionProfiler : ITransactionProfiler { public Action? OnFinish; - private SampleProfilerSession? _session; private readonly CancellationToken _cancellationToken; - private readonly SentryStopwatch _stopwatch = SentryStopwatch.StartNew(); - private TimeSpan? _duration; - private Task? _data; - private readonly string _tempDirectoryPath; - private Transaction? _transaction; + private bool _stopped = false; private readonly SentryOptions _options; + private SampleProfileBuilder _processor; + private SampleProfilerSession _session; + private readonly double _startTimeMs; + private double _endTimeMs; + private TaskCompletionSource _completionSource = new(); - public SamplingTransactionProfiler(string tempDirectoryPath, SentryOptions options, CancellationToken cancellationToken) + public SamplingTransactionProfiler(SentryOptions options, SampleProfilerSession session, int timeoutMs, CancellationToken cancellationToken) { _options = options; - _tempDirectoryPath = tempDirectoryPath; + _session = session; _cancellationToken = cancellationToken; - } - - public void Start(int timeoutMs) - { - _session = SampleProfilerSession.StartNew(_cancellationToken); - _cancellationToken.Register(() => + _startTimeMs = session.Elapsed.TotalMilliseconds; + _endTimeMs = double.MaxValue; + _processor = new SampleProfileBuilder(options, session.TraceLog); + session.SampleEventParser.ThreadSample += OnThreadSample; + cancellationToken.Register(() => { if (Stop()) { - _options.LogDebug("Profiling cancelled."); + options.LogDebug("Profiling cancelled."); } }); - Task.Delay(timeoutMs, _cancellationToken).ContinueWith(_ => + Task.Delay(timeoutMs, cancellationToken).ContinueWith(_ => { - if (Stop(TimeSpan.FromMilliseconds(timeoutMs))) + if (Stop(_startTimeMs + timeoutMs)) { - _options.LogDebug("Profiling is being cut-of after {0} ms because the transaction takes longer than that.", timeoutMs); + options.LogDebug("Profiling is being cut-of after {0} ms because the transaction takes longer than that.", timeoutMs); } }, CancellationToken.None); } - private bool Stop(TimeSpan? duration = null) + private bool Stop(double? endTimeMs = null) { - if (_duration is null && _session is not null) + endTimeMs ??= _session.Elapsed.TotalMilliseconds; + if (!_stopped) { lock (_session) { - if (_duration is null) + if (!_stopped) { - _duration = duration ?? _stopwatch.Elapsed; - try - { - // Stop the session synchronously so we can let the factory know it can start a new one. - _session.Stop(); - OnFinish?.Invoke(); - // Then finish collecting the data asynchronously. - _data = _session.FinishAsync(); - } - catch (Exception e) - { - _options.LogWarning("Exception while stopping a profiler session.", e); - } + _stopped = true; + _endTimeMs = endTimeMs.Value; + OnFinish?.Invoke(); return true; } } @@ -73,6 +61,34 @@ private bool Stop(TimeSpan? duration = null) return false; } + // We need custom sampling because the TraceLog dispatches events from a queue with a delay of about 2 seconds. + private void OnThreadSample(TraceEvent data) + { +#if DEBUG + _options.LogDebug("OnThreadSample: {0}", data); +#endif + var timestampMs = data.TimeStampRelativeMSec; + if (timestampMs >= _startTimeMs) + { + if (timestampMs <= _endTimeMs) + { + try + { + _processor.AddSample(data, timestampMs - _startTimeMs); + } + catch (Exception e) + { + _options.LogWarning("Failed to process a profile sample.", e); + } + } + else + { + _session.SampleEventParser.ThreadSample -= OnThreadSample; + _completionSource.TrySetResult(); + } + } + } + /// public void Finish() { @@ -85,38 +101,20 @@ public void Finish() /// public async Task CollectAsync(Transaction transaction) { - if (_data is null || _duration is null) + if (!_stopped) { throw new InvalidOperationException("Profiler.CollectAsync() called before Finish()"); } - _options.LogDebug("Starting profile processing."); - - _transaction = transaction; - using var traceLog = await CreateTraceLogAsync().ConfigureAwait(false); - - try - { - _options.LogDebug("Converting profile to Sentry format."); - - _cancellationToken.ThrowIfCancellationRequested(); - var processor = new TraceLogProcessor(_options, traceLog) - { - MaxTimestampMs = _duration.Value.TotalMilliseconds - }; - var profile = processor.Process(_cancellationToken); - _options.LogDebug("Profiling finished successfully."); - return CreateProfileInfo(transaction, profile); - } - finally + // Wait for the last sample (<= _endTimeMs), or at most 1 second. The timeout shouldn't happen because + // TraceLog should dispatch events immediately. But if it does, send at least what we have already got. + var completedTask = await Task.WhenAny(_completionSource.Task, Task.Delay(1_000, _cancellationToken)).ConfigureAwait(false); + if (!completedTask.Equals(_completionSource.Task)) { - traceLog.Dispose(); - if (File.Exists(traceLog.FilePath)) - { - _options.LogDebug("Removing temporarily file '{0}'.", traceLog.FilePath); - File.Delete(traceLog.FilePath); - } + _options.LogWarning("CollectAsync timed out after 1 second. Were there any samples collected?"); } + + return CreateProfileInfo(transaction, _processor.Profile); } internal static ProfileInfo CreateProfileInfo(Transaction transaction, SampleProfile profile) @@ -126,78 +124,10 @@ internal static ProfileInfo CreateProfileInfo(Transaction transaction, SamplePro Contexts = transaction.Contexts, Environment = transaction.Environment, Transaction = transaction, - // TODO FIXME - see https://github.com/getsentry/relay/pull/1902 - // Platform = transaction.Platform, - Platform = "dotnet", + Platform = transaction.Platform, Release = transaction.Release, StartTimestamp = transaction.StartTimestamp, Profile = profile }; } - - // We need the TraceLog for all the stack processing it does. - private async Task CreateTraceLogAsync() - { - _cancellationToken.ThrowIfCancellationRequested(); - Debug.Assert(_data is not null); - using var nettraceStream = await _data.ConfigureAwait(false); - using var eventSource = CreateEventPipeEventSource(nettraceStream); - return ConvertToETLX(eventSource); - } - - // EventPipeEventSource(Stream stream) sets isStreaming = true even though the stream is pre-collected. This - // causes read issues when converting to ETLX. It works fine if we use the private constructor, setting false. - // TODO make a PR to change this - private EventPipeEventSource CreateEventPipeEventSource(MemoryStream nettraceStream) - { - var privateNewEventPipeEventSource = typeof(EventPipeEventSource).GetConstructor( - _commonBindingFlags, - new Type[] { typeof(PinnedStreamReader), typeof(string), typeof(bool) }); - - var eventSource = privateNewEventPipeEventSource?.Invoke(new object[] { - new PinnedStreamReader(nettraceStream, 16384, new SerializationConfiguration{ StreamLabelWidth = StreamLabelWidth.FourBytes }, StreamReaderAlignment.OneByte), - "stream", - false - }) as EventPipeEventSource; - - if (eventSource is null) - { - throw new InvalidOperationException("Couldn't initialize EventPipeEventSource"); - } - - // TODO make downsampling conditional once this is available: https://github.com/dotnet/runtime/issues/82939 - // _options.LogDebug("Profile will be downsampled before processing."); - new Downsampler().AttachTo(eventSource); - - return eventSource; - } - - private TraceLog ConvertToETLX(EventPipeEventSource source) - { - Debug.Assert(_transaction is not null); - var etlxPath = Path.Combine(_tempDirectoryPath, $"{_transaction.EventId}.etlx"); - _options.LogDebug("Writing profile temporarily to '{0}'.", etlxPath); - if (File.Exists(etlxPath)) - { - _options.LogDebug("Temporary file '{0}' already exists, deleting first.", etlxPath); - File.Delete(etlxPath); - } - - _cancellationToken.ThrowIfCancellationRequested(); - typeof(TraceLog) - .GetMethod( - "CreateFromEventPipeEventSources", - BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static, - new Type[] { typeof(TraceEventDispatcher), typeof(string), typeof(TraceLogOptions) })? - .Invoke(null, new object[] { source, etlxPath, new TraceLogOptions() { ContinueOnError = true } }); - - if (!File.Exists(etlxPath)) - { - throw new FileNotFoundException($"Profiler failed at CreateFromEventPipeEventSources() - temporary file doesn't exist", etlxPath); - } - - return new TraceLog(etlxPath); - } - - private readonly BindingFlags _commonBindingFlags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance; } diff --git a/src/Sentry.Profiling/SamplingTransactionProfilerFactory.cs b/src/Sentry.Profiling/SamplingTransactionProfilerFactory.cs index 91dac242cb..c2fa66cd92 100644 --- a/src/Sentry.Profiling/SamplingTransactionProfilerFactory.cs +++ b/src/Sentry.Profiling/SamplingTransactionProfilerFactory.cs @@ -3,7 +3,7 @@ namespace Sentry.Profiling; -internal class SamplingTransactionProfilerFactory : ITransactionProfilerFactory +internal class SamplingTransactionProfilerFactory : IDisposable, ITransactionProfilerFactory { // We only allow a single profile so let's keep track of the current status. internal int _inProgress = FALSE; @@ -14,14 +14,25 @@ internal class SamplingTransactionProfilerFactory : ITransactionProfilerFactory // Stop profiling after the given number of milliseconds. private const int TIME_LIMIT_MS = 30_000; - private readonly string _tempDirectoryPath; - private readonly SentryOptions _options; + private SampleProfilerSession _session; + + public static SamplingTransactionProfilerFactory Create(SentryOptions options) + { + var session = SampleProfilerSession.StartNew(options.DiagnosticLogger); + return new SamplingTransactionProfilerFactory(options, session); + } + + public static async Task CreateAsync(SentryOptions options) + { + var session = await Task.Run(() => SampleProfilerSession.StartNew(options.DiagnosticLogger)).ConfigureAwait(false); + return new SamplingTransactionProfilerFactory(options, session); + } - public SamplingTransactionProfilerFactory(string tempDirectoryPath, SentryOptions options) + private SamplingTransactionProfilerFactory(SentryOptions options, SampleProfilerSession session) { - _tempDirectoryPath = tempDirectoryPath; _options = options; + _session = session; } /// @@ -30,22 +41,25 @@ public SamplingTransactionProfilerFactory(string tempDirectoryPath, SentryOption // Start a profiler if one wasn't running yet. if (Interlocked.Exchange(ref _inProgress, TRUE) == FALSE) { - _options.LogDebug("Starting a sampling profiler session."); + _options.LogDebug("Starting a sampling profiler."); try { - var profiler = new SamplingTransactionProfiler(_tempDirectoryPath, _options, cancellationToken) + return new SamplingTransactionProfiler(_options, _session, TIME_LIMIT_MS, cancellationToken) { OnFinish = () => _inProgress = FALSE }; - profiler.Start(TIME_LIMIT_MS); - return profiler; } catch (Exception e) { - _options.LogWarning("Failed to start a profiler session.", e); + _options.LogError("Failed to start a profiler session.", e); _inProgress = FALSE; } } return null; } + + public void Dispose() + { + _session.Dispose(); + } } diff --git a/src/Sentry.Profiling/Sentry.Profiling.csproj b/src/Sentry.Profiling/Sentry.Profiling.csproj index 59703ed9df..a782c0dfe5 100644 --- a/src/Sentry.Profiling/Sentry.Profiling.csproj +++ b/src/Sentry.Profiling/Sentry.Profiling.csproj @@ -5,14 +5,10 @@ net6.0 $(PackageTags);Profiling;Diagnostic Performance profiling support for Sentry - Open-source error tracking that helps developers monitor and fix crashes in real time. - false - - - diff --git a/src/Sentry.Profiling/SentryProfiling.cs b/src/Sentry.Profiling/SentryProfiling.cs index 717f746903..db9798749b 100644 --- a/src/Sentry.Profiling/SentryProfiling.cs +++ b/src/Sentry.Profiling/SentryProfiling.cs @@ -1,4 +1,3 @@ -using Sentry.Extensibility; using Sentry.Integrations; namespace Sentry.Profiling; @@ -8,19 +7,9 @@ namespace Sentry.Profiling; /// public class ProfilingIntegration : ISdkIntegration { - private string _tempDirectoryPath { get; set; } - - /// - /// Initializes the the profiling integration. - /// - public ProfilingIntegration(string tempDirectoryPath) - { - _tempDirectoryPath = tempDirectoryPath; - } - /// public void Register(IHub hub, SentryOptions options) { - options.TransactionProfilerFactory = new SamplingTransactionProfilerFactory(_tempDirectoryPath, options); + options.TransactionProfilerFactory = SamplingTransactionProfilerFactory.Create(options); } } diff --git a/src/Sentry.Profiling/TraceEvent/ATTRIBUTION.txt b/src/Sentry.Profiling/TraceEvent/ATTRIBUTION.txt deleted file mode 100644 index 46afb105ec..0000000000 --- a/src/Sentry.Profiling/TraceEvent/ATTRIBUTION.txt +++ /dev/null @@ -1,29 +0,0 @@ -Parts of the code in this subdirectory have been adapted from -https://github.com/microsoft/perfview/blob/ff6e8e6c4118a26521515f41ae77f15981d68c53/src/TraceEvent/Computers/SampleProfilerThreadTimeComputer.cs - -The original license is as follows: - - -The MIT License (MIT) - -Copyright (c) .NET Foundation and Contributors - -All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file diff --git a/src/Sentry.Profiling/TraceEvent/TraceLogProcessor.cs b/src/Sentry.Profiling/TraceEvent/TraceLogProcessor.cs deleted file mode 100644 index 3b0b5ff6b4..0000000000 --- a/src/Sentry.Profiling/TraceEvent/TraceLogProcessor.cs +++ /dev/null @@ -1,679 +0,0 @@ -using Microsoft.Diagnostics.Symbols; -using Microsoft.Diagnostics.Tracing; -using Microsoft.Diagnostics.Tracing.Etlx; -using Microsoft.Diagnostics.Tracing.EventPipe; -using Microsoft.Diagnostics.Tracing.Parsers; -using Microsoft.Diagnostics.Tracing.Stacks; -using Sentry.Internal; -using Sentry.Protocol; - -namespace Sentry.Profiling; - -// A list of frame indexes. -using SentryProfileStackTrace = HashableGrowableArray; - -/// -/// Processes TraceLog to produce a SampleProfile. -/// Based on https://github.com/microsoft/perfview/blob/ff6e8e6c4118a26521515f41ae77f15981d68c53/src/TraceEvent/Computers/SampleProfilerThreadTimeComputer.cs -/// Note that several parts of the code below are commented out as we intend to use this in follow up PRs -/// -internal class TraceLogProcessor -{ - private readonly SentryOptions _options; - // /// - // /// If set we compute thread time using Tasks - // /// - // private bool UseTasks = true; - - ///// - ///// Use start-stop activities as the grouping construct. - ///// - //private bool GroupByStartStopActivity = true; - - // /// - // /// Reduce nested application insights requests by using related activity id. - // /// - // /// - // private bool IgnoreApplicationInsightsRequestsWithRelatedActivityId { get; set; } = true; - - private readonly TraceLog _traceLog; - private readonly TraceLogEventSource _eventSource; - - /// - /// Output profile being built. - /// - private readonly SampleProfile _profile = new(); - - // A sparse array that maps from StackSourceFrameIndex to an index in the output Profile.frames. - private readonly SparseScalarArray _frameIndexes = new(-1, 1000); - - // A dictionary from a StackTrace sealed array to an index in the output Profile.stacks. - private readonly Dictionary _stackIndexes = new(100); - - // A sparse array mapping from a ThreadIndex to an index in Profile.Threads. - private readonly SparseScalarArray _threadIndexes; - - // A sparse array mapping from an ActivityIndex to an index in Profile.Threads. - private readonly SparseScalarArray _activityIndexes = new(-1, 100); - - // private readonly StartStopActivityComputer _startStopActivities; // Tracks start-stop activities so we can add them to the top above thread in the stack. - - // // UNKNOWN_ASYNC support - // /// - // /// Used to create UNKNOWN frames for start-stop activities. This is indexed by StartStopActivityIndex. - // /// and for each start-stop activity indicates when unknown time starts. However if that activity still - // /// has known activities associated with it then the number will be negative, and its value is the - // /// ref-count of known activities (thus when it falls to 0, it we set it to the start of unknown time. - // /// This is indexed by the TOP-MOST start-stop activity. - // /// - // private Internal.GrowableArray _unknownTimeStartMsec; - - // /// - // /// maps thread ID to the current TOP-MOST start-stop activity running on that thread. Used to updated _unknownTimeStartMsec - // /// to figure out when to put in UNKNOWN_ASYNC nodes. - // /// - // private readonly StartStopActivity[] _threadToStartStopActivity; - - // /// - // /// Sadly, with AWAIT nodes might come into existence AFTER we would have normally identified - // /// a region as having no thread/await working on it. Thus you have to be able to 'undo' ASYNC_UNKONWN - // /// nodes. We solve this by remembering all of our ASYNC_UNKNOWN nodes on a list (basically provisional) - // /// and only add them when the start-stop activity dies (when we know there can't be another AWAIT. - // /// Note that we only care about TOP-MOST activities. - // /// - // private Internal.GrowableArray> _startStopActivityToAsyncUnknownSamples; - - // End UNKNOWN_ASYNC support - - //private ThreadState[] _threadState; // This maps thread (indexes) to what we know about the thread - - //private StackSourceSample _sample; // Reusable scratch space - private readonly MutableTraceEventStackSource _stackSource; // The output source we are generating. - // private TraceEventStackSource _stackSource; - - private readonly ActivityComputer _activityComputer; // Used to compute stacks for Tasks - - public double MaxTimestampMs { get; set; } = double.MaxValue; - - public TraceLogProcessor(SentryOptions options, TraceLog traceLog) - { - _threadIndexes = new(-1, traceLog.Threads.Count); - _options = options; - _traceLog = traceLog; - _eventSource = _traceLog.Events.GetSource(); - _stackSource = new MutableTraceEventStackSource(_traceLog) - { - //_stackSource = new TraceEventStackSource(_eventLog.Events) { - OnlyManagedCodeStacks = true // EventPipe currently only has managed code stacks. - }; - // var _sample = new StackSourceSample(_stackSource); - - //if (GroupByStartStopActivity) { - // UseTasks = true; - //} - - if (true)//UseTasks) - { - // TODO replace SymbolReader's http handler so that it doesn't do any actual requests. - _activityComputer = new ActivityComputer(_eventSource, new SymbolReader(TextWriter.Null)) - { - NoCache = true, // Safer option, see its docs. Evaluate later if we can enable caching. - }; - // _activityComputer.AwaitUnblocks += delegate (TraceActivity activity, TraceEvent data) - // { - // var sample = _sample; - // sample.Metric = (float)(activity.StartTimeRelativeMSec - activity.CreationTimeRelativeMSec); - // sample.TimeRelativeMSec = activity.CreationTimeRelativeMSec; - - // // The stack at the Unblock, is the stack at the time the task was created (when blocking started). - // sample.StackIndex = _activityComputer.GetCallStackForActivity(_stackSource, activity, GetTopFramesForActivityComputerCase(data, data.Thread(), true)); - - // StackSourceFrameIndex awaitFrame = _stackSource.Interner.FrameIntern("AWAIT_TIME"); - // sample.StackIndex = _stackSource.Interner.CallStackIntern(awaitFrame, sample.StackIndex); - - // _stackSource.AddSample(sample); - - // // if (_threadToStartStopActivity != null) - // // { - // // UpdateStartStopActivityOnAwaitComplete(activity, data); - // // } - // }; - - // We can provide a bit of extra value (and it is useful for debugging) if we immediately log a CPU - // sample when we schedule or start a task. That we we get the very instant it starts. - // TODO does this make sense without "System.Threading.Tasks.TplEventSource" being enabled? - // see https://learn.microsoft.com/en-us/dotnet/core/diagnostics/well-known-event-providers#systemthreadingtaskstpleventsource-provider - // var tplProvider = new TplEtwProviderTraceEventParser(_eventSource); - // tplProvider.AwaitTaskContinuationScheduledSend += OnSampledProfile; - // tplProvider.TaskScheduledSend += OnSampledProfile; - // tplProvider.TaskExecuteStart += OnSampledProfile; - // tplProvider.TaskWaitSend += OnSampledProfile; - // tplProvider.TaskWaitStop += OnSampledProfile; // Log the activity stack even if you don't have a stack. - } - - // if (true) // GroupByStartStopActivity - // { - // _startStopActivities = new StartStopActivityComputer(_eventSource, _activityComputer, IgnoreApplicationInsightsRequestsWithRelatedActivityId); - - // // Maps thread Indexes to the start-stop activity that they are executing. - // _threadToStartStopActivity = new StartStopActivity[_traceLog.Threads.Count]; - - // /********* Start Unknown Async State machine for StartStop activities ******/ - // // The delegates below along with the AddUnkownAsyncDurationIfNeeded have one purpose: - // // To inject UNKNOWN_ASYNC stacks when there is an active start-stop activity that is - // // 'missing' time. It has the effect of ensuring that Start-Stop tasks always have - // // a metric that is not unrealistically small. - // _activityComputer.Start += delegate (TraceActivity activity, TraceEvent data) - // { - // StartStopActivity newStartStopActivityForThread = _startStopActivities.GetCurrentStartStopActivity(activity.Thread, data); - // UpdateThreadToWorkOnStartStopActivity(activity.Thread, newStartStopActivityForThread, data); - // }; - - // _activityComputer.AfterStop += delegate (TraceActivity activity, TraceEvent data, TraceThread thread) - // { - // StartStopActivity newStartStopActivityForThread = _startStopActivities.GetCurrentStartStopActivity(thread, data); - // UpdateThreadToWorkOnStartStopActivity(thread, newStartStopActivityForThread, data); - // }; - - // _startStopActivities.Start += delegate (StartStopActivity startStopActivity, TraceEvent data) - // { - // // We only care about the top-most activities since unknown async time is defined as time - // // where a top most activity is running but no thread (or await time) is associated with it - // // fast out otherwise (we just ensure that we mark the thread as doing this activity) - // if (startStopActivity.Creator != null) - // { - // UpdateThreadToWorkOnStartStopActivity(data.Thread(), startStopActivity, data); - // return; - // } - - // // Then we have a refcount of exactly one - // Debug.Assert(_unknownTimeStartMsec.Get((int)startStopActivity.Index) >= 0); // There was nothing running before. - - // _unknownTimeStartMsec.Set((int)startStopActivity.Index, -1); // Set it so just we are running. - // _threadToStartStopActivity[(int)data.Thread().ThreadIndex] = startStopActivity; - // }; - - // _startStopActivities.Stop += delegate (StartStopActivity startStopActivity, TraceEvent data) - // { - // // We only care about the top-most activities since unknown async time is defined as time - // // where a top most activity is running but no thread (or await time) is associated with it - // // fast out otherwise - // if (startStopActivity.Creator != null) - // { - // return; - // } - - // double unknownStartTime = _unknownTimeStartMsec.Get((int)startStopActivity.Index); - // if (0 < unknownStartTime) - // { - // AddUnkownAsyncDurationIfNeeded(startStopActivity, unknownStartTime, data); - // } - - // // Actually emit all the async unknown events. - // List samples = _startStopActivityToAsyncUnknownSamples.Get((int)startStopActivity.Index); - // if (samples != null) - // { - // foreach (var sample in samples) - // { - // _stackSource.AddSample(sample); // Adding Unknown ASync - // } - - // _startStopActivityToAsyncUnknownSamples.Set((int)startStopActivity.Index, null); - // } - - // _unknownTimeStartMsec.Set((int)startStopActivity.Index, 0); - // Debug.Assert(_threadToStartStopActivity[(int)data.Thread().ThreadIndex] == startStopActivity || - // _threadToStartStopActivity[(int)data.Thread().ThreadIndex] == null); - // _threadToStartStopActivity[(int)data.Thread().ThreadIndex] = null; - // }; - // } - - // _eventSource.Clr.GCAllocationTick += OnSampledProfile; - // _eventSource.Clr.GCSampledObjectAllocation += OnSampledProfile; - - var sampleEventParser = new SampleProfilerTraceEventParser(_eventSource); - sampleEventParser.ThreadSample += OnSampledProfile; - } - - public SampleProfile Process(CancellationToken cancellationToken) - { - var registration = cancellationToken.Register(_eventSource.StopProcessing); - _eventSource.Process(); - registration.Unregister(); - return _profile; - } - - //private void UpdateStartStopActivityOnAwaitComplete(TraceActivity activity, TraceEvent data) { - // // If we are createing 'UNKNOWN_ASYNC nodes, make sure that AWAIT_TIME does not overlap with UNKNOWN_ASYNC time - - // var startStopActivity = _startStopActivities.GetStartStopActivityForActivity(activity); - // if (startStopActivity == null) { - // return; - // } - - // while (startStopActivity.Creator != null) { - // startStopActivity = startStopActivity.Creator; - // } - - // // If the await finishes before the ASYNC_UNKNOWN, simply adust the time. - // if (0 <= _unknownTimeStartMsec.Get((int)startStopActivity.Index)) { - // _unknownTimeStartMsec.Set((int)startStopActivity.Index, data.TimeStampRelativeMSec); - // } - - // // It is possible that the ASYNC_UNKOWN has already completed. In that case, remove overlapping ones - // List async_unknownSamples = _startStopActivityToAsyncUnknownSamples.Get((int)startStopActivity.Index); - // if (async_unknownSamples != null) { - // int removeStart = async_unknownSamples.Count; - // while (0 < removeStart) { - // int probe = removeStart - 1; - // var sample = async_unknownSamples[probe]; - // if (activity.CreationTimeRelativeMSec <= sample.TimeRelativeMSec + sample.Metric) // There is overlap - // { - // removeStart = probe; - // } - // else { - // break; - // } - // } - // int removeCount = async_unknownSamples.Count - removeStart; - // if (removeCount > 0) { - // async_unknownSamples.RemoveRange(removeStart, removeCount); - // } - // } - //} - - ///// - ///// Updates it so that 'thread' is now working on newStartStop, which can be null which means that it is not working on any - ///// start-stop task. - ///// - //private void UpdateThreadToWorkOnStartStopActivity(TraceThread thread, StartStopActivity newStartStop, TraceEvent data) { - // // Make the new-start stop activity be the top most one. This is all we need and is more robust in the case - // // of unusual state transitions (e.g. lost events non-nested start-stops ...). Ref-counting is very fragile - // // after all... - // if (newStartStop != null) { - // while (newStartStop.Creator != null) { - // newStartStop = newStartStop.Creator; - // } - // } - - // StartStopActivity oldStartStop = _threadToStartStopActivity[(int)thread.ThreadIndex]; - // Debug.Assert(oldStartStop == null || oldStartStop.Creator == null); - // if (oldStartStop == newStartStop) // No change, nothing to do, quick exit. - // { - // return; - // } - - // // Decrement the start-stop which lost its thread. - // if (oldStartStop != null) { - // double unknownStartTimeMSec = _unknownTimeStartMsec.Get((int)oldStartStop.Index); - // Debug.Assert(unknownStartTimeMSec < 0); - // if (unknownStartTimeMSec < 0) { - // unknownStartTimeMSec++; //We represent the ref count as a negative number, here we are decrementing the ref count - // if (unknownStartTimeMSec == 0) { - // unknownStartTimeMSec = data.TimeStampRelativeMSec; // Remember when we dropped to zero. - // } - - // _unknownTimeStartMsec.Set((int)oldStartStop.Index, unknownStartTimeMSec); - // } - // } - // _threadToStartStopActivity[(int)thread.ThreadIndex] = newStartStop; - - // // Increment refcount on the new startStop activity - // if (newStartStop != null) { - // double unknownStartTimeMSec = _unknownTimeStartMsec.Get((int)newStartStop.Index); - // // If we were off before (a positive number) then log the unknown time. - // if (0 < unknownStartTimeMSec) { - // AddUnkownAsyncDurationIfNeeded(newStartStop, unknownStartTimeMSec, data); - // unknownStartTimeMSec = 0; - // } - // --unknownStartTimeMSec; //We represent the ref count as a negative number, here we are incrementing the ref count - // _unknownTimeStartMsec.Set((int)newStartStop.Index, unknownStartTimeMSec); - // } - //} - - //private void AddUnkownAsyncDurationIfNeeded(StartStopActivity startStopActivity, double unknownStartTimeMSec, TraceEvent data) { - // Debug.Assert(0 < unknownStartTimeMSec); - // Debug.Assert(unknownStartTimeMSec <= data.TimeStampRelativeMSec); - - // if (startStopActivity.IsStopped) { - // return; - // } - - // // We dont bother with times that are too small, we consider 1msec the threshold - // double delta = data.TimeStampRelativeMSec - unknownStartTimeMSec; - // if (delta < 1) { - // return; - // } - - // // Add a sample with the amount of unknown duration. - // var sample = new StackSourceSample(_stackSource); - // sample.Metric = (float)delta; - // sample.TimeRelativeMSec = unknownStartTimeMSec; - - // StackSourceCallStackIndex stackIndex = _startStopActivities.GetStartStopActivityStack(_stackSource, startStopActivity, data.Process()); - // StackSourceFrameIndex unknownAsyncFrame = _stackSource.Interner.FrameIntern("UNKNOWN_ASYNC"); - // stackIndex = _stackSource.Interner.CallStackIntern(unknownAsyncFrame, stackIndex); - // sample.StackIndex = stackIndex; - - // // We can't add the samples right now because AWAIT nodes might overlap and we have to take these back. - // // The add the to this list so that they can be trimmed at that time if needed. - - // List list = _startStopActivityToAsyncUnknownSamples.Get((int)startStopActivity.Index); - // if (list == null) { - // list = new List(); - // _startStopActivityToAsyncUnknownSamples.Set((int)startStopActivity.Index, list); - // } - // list.Add(sample); - //} - - private void AddSample(TraceThread thread, TraceActivity activity, StackSourceCallStackIndex callstackIndex, double timestampMs) - { - if (thread.ThreadIndex == ThreadIndex.Invalid || callstackIndex == StackSourceCallStackIndex.Invalid) - { - return; - } - - // Trim samples coming after the profiling has been stopped (i.e. after the Stop() IPC request has been sent). - if (timestampMs > MaxTimestampMs) - { - // We can completely stop processing after the first sample that is after the timeout. Samples are - // ordered (I've checked this manually so I hope that assumption holds...) so no need to go through the rest. - _eventSource.StopProcessing(); - return; - } - - var stackIndex = AddStackTrace(callstackIndex); - if (stackIndex < 0) - { - return; - } - - var threadIndex = AddThreadOrActivity(thread, activity); - if (threadIndex < 0) - { - return; - } - - _profile.Samples.Add(new() - { - Timestamp = (ulong)(timestampMs * 1_000_000), - StackId = stackIndex, - ThreadId = threadIndex - }); - } - - /// - /// Adds stack trace and frames, if missing. - /// - /// The index into the Profile's stacks list - private int AddStackTrace(StackSourceCallStackIndex callstackIndex) - { - SentryProfileStackTrace stackTrace = new(10); - StackSourceFrameIndex tlFrameIndex; - while (callstackIndex != StackSourceCallStackIndex.Invalid) - { - tlFrameIndex = _stackSource.GetFrameIndex(callstackIndex); - - if (tlFrameIndex == StackSourceFrameIndex.Invalid) - { - break; - } - - // "tlFrameIndex" may point to "CodeAddresses" or "Threads" or "Processes" - // See TraceEventStackSource.GetFrameName() code for details. - // We only care about the CodeAddresses bit because we don't want to show Threads and Processes in the stack trace. - CodeAddressIndex codeAddressIndex = _stackSource.GetFrameCodeAddress(tlFrameIndex); - if (codeAddressIndex != CodeAddressIndex.Invalid) - { - stackTrace.Add(AddStackFrame(codeAddressIndex)); - callstackIndex = _stackSource.GetCallerIndex(callstackIndex); - } - else - { - // No need to traverse further up the stack when we're on the thread/process. - break; - } - } - - int result = -1; - if (stackTrace.Count > 0) - { - stackTrace.Seal(); - if (!_stackIndexes.TryGetValue(stackTrace, out result)) - { - stackTrace.Trim(10); - _profile.Stacks.Add(stackTrace); - result = _profile.Stacks.Count - 1; - _stackIndexes[stackTrace] = result; - } - } - - return result; - } - - /// - /// Check if the frame is already stored in the output Profile, or adds it. - /// - /// The index to the output Profile frames array. - private int AddStackFrame(CodeAddressIndex codeAddressIndex) - { - var key = (int)codeAddressIndex; - - if (!_frameIndexes.ContainsKey(key)) - { - _profile.Frames.Add(CreateStackFrame(codeAddressIndex)); - _frameIndexes[key] = _profile.Frames.Count - 1; - } - - return _frameIndexes[key]; - } - - /// - /// Check if the thread is already stored in the output Profile, or adds it. - /// - /// The index to the output Profile frames array. - private int AddThreadOrActivity(TraceThread thread, TraceActivity activity) - { - if (activity.IsThreadActivity) - { - var key = (int)thread.ThreadIndex; - - if (!_threadIndexes.ContainsKey(key)) - { - _profile.Threads.Add(new() - { - Name = thread.ThreadInfo ?? $"Thread {thread.ThreadID}", - }); - _threadIndexes[key] = _profile.Threads.Count - 1; - } - - return _threadIndexes[key]; - } - else - { - var key = (int)activity.Index; - - if (!_activityIndexes.ContainsKey(key)) - { - _profile.Threads.Add(new() - { - Name = $"Activity {ActivityPath(activity)}", - }); - _activityIndexes[key] = _profile.Threads.Count - 1; - } - - return _activityIndexes[key]; - } - } - - private static string ActivityPath(TraceActivity activity) - { - var creator = activity.Creator; - if (creator is null || creator.IsThreadActivity) - { - return activity.Index.ToString(); - } - else - { - return $"{ActivityPath(creator)}/{activity.Index.ToString()}"; - } - } - - private SentryStackFrame CreateStackFrame(CodeAddressIndex codeAddressIndex) - { - var frame = new SentryStackFrame(); - - var methodIndex = _traceLog.CodeAddresses.MethodIndex(codeAddressIndex); - if (_traceLog.CodeAddresses.Methods[methodIndex] is { } method) - { - frame.Function = method.FullMethodName; - - TraceModuleFile moduleFile = method.MethodModuleFile; - if (moduleFile is not null) - { - frame.Module = moduleFile.Name; - } - - // Displays the optimization tier of each code version executed for the method. E.g. "QuickJitted" - // Doesn't seem very useful (not much users can do with this information) so disabling for now. - // if (frame.Function is not null) - // { - // var optimizationTier = _traceLog.CodeAddresses.OptimizationTier(codeAddressIndex); - // if (optimizationTier != Microsoft.Diagnostics.Tracing.Parsers.Clr.OptimizationTier.Unknown) - // { - // frame.Function = $"{frame.Function} {{{optimizationTier}}}"; - // } - // } - - frame.ConfigureAppFrame(_options); - } - else - { - // native frame - frame.InApp = false; - } - - // TODO enable this once we implement symbolication (we will need to send debug_meta too), see StackTraceFactory. - // if (_traceLog.CodeAddresses.ILOffset(codeAddressIndex) is { } ilOffset && ilOffset >= 0) - // { - // frame.InstructionOffset = ilOffset; - // } - // else if (_traceLog.CodeAddresses.Address(codeAddressIndex) is { } address) - // { - // frame.InstructionAddress = $"0x{address:x}"; - // } - - return frame; - } - - private void OnSampledProfile(TraceEvent data) - { - TraceThread thread = data.Thread(); - if (thread != null) - { - TraceActivity activity = _activityComputer.GetCurrentActivity(thread); - // TODO expose ActivityComputer.GetCallStackWithActivityFrames() and use it - it's a bit faster because we also need to fetch thread & activity for AddSample(). - StackSourceCallStackIndex stackFrameIndex = _activityComputer.GetCallStack(_stackSource, data, GetTopFramesForActivityComputerCase(data, thread)); - AddSample(thread, activity, stackFrameIndex, data.TimeStampRelativeMSec); - } - else - { - Debug.WriteLine("Warning, no thread at " + data.TimeStampRelativeMSec.ToString("f3")); - } - } - - /// - /// Returns a function that figures out the top (closest to stack root) frames for an event. Often - /// this returns null which means 'use the normal thread-process frames'. - /// Normally this stack is for the current time, but if 'getAtCreationTime' is true, it will compute the - /// stack at the time that the current activity was CREATED rather than the current time. This works - /// better for await time. - /// - private Func? GetTopFramesForActivityComputerCase(TraceEvent data, TraceThread thread, bool getAtCreationTime = false) - { - return null; - // return (topThread => _startStopActivities.GetCurrentStartStopActivityStack(_stackSource, thread, topThread, getAtCreationTime)); - } - - ///// - ///// Represents all the information that we need to track for each thread. - ///// - //private struct ThreadState { - // public void LogThreadStack(double timeRelativeMSec, StackSourceCallStackIndex stackIndex, TraceThread thread, SampleProfiler computer, bool onCPU) { - // if (onCPU) { - // if (ThreadUninitialized) // First event is onCPU - // { - // AddCPUSample(timeRelativeMSec, thread, computer); - // LastBlockStackRelativeMSec = -1; // make ThreadRunning true - // } - // else if (ThreadRunning) // continue running - // { - // AddCPUSample(timeRelativeMSec, thread, computer); - // } - // else if (ThreadBlocked) // unblocked - // { - // AddBlockTimeSample(timeRelativeMSec, thread, computer); - // LastBlockStackRelativeMSec = -timeRelativeMSec; - // } - - // LastCPUStackRelativeMSec = timeRelativeMSec; - // LastCPUCallStack = stackIndex; - // } - // else { - // if (ThreadBlocked || ThreadUninitialized) // continue blocking or assume we started blocked - // { - // AddBlockTimeSample(timeRelativeMSec, thread, computer); - // } - // else if (ThreadRunning) // blocked - // { - // AddCPUSample(timeRelativeMSec, thread, computer); - // } - - // LastBlockStackRelativeMSec = timeRelativeMSec; - // LastBlockCallStack = stackIndex; - // } - // } - - // public void AddCPUSample(double timeRelativeMSec, TraceThread thread, SampleProfiler computer) { - // // Log the last sample if it was present - // if (LastCPUStackRelativeMSec > 0) { - // var sample = computer._sample; - // sample.Metric = (float)(timeRelativeMSec - LastCPUStackRelativeMSec); - // sample.TimeRelativeMSec = LastCPUStackRelativeMSec; - - // var nodeIndex = computer._cpuFrameIndex; - // sample.StackIndex = LastCPUCallStack; - - // sample.StackIndex = computer._stackSource.Interner.CallStackIntern(nodeIndex, sample.StackIndex); - // computer._stackSource.AddSample(sample); // CPU - // } - // } - - // public void AddBlockTimeSample(double timeRelativeMSec, TraceThread thread, SampleProfiler computer) { - // // Log the last sample if it was present - // if (LastBlockStackRelativeMSec > 0) { - // var sample = computer._sample; - // sample.Metric = (float)(timeRelativeMSec - LastBlockStackRelativeMSec); - // sample.TimeRelativeMSec = LastBlockStackRelativeMSec; - - // var nodeIndex = computer._ExternalFrameIndex; // BLOCKED_TIME - // sample.StackIndex = LastBlockCallStack; - - // sample.StackIndex = computer._stackSource.Interner.CallStackIntern(nodeIndex, sample.StackIndex); - // computer._stackSource.AddSample(sample); - // } - // } - - // public bool ThreadDead { get { return double.IsNegativeInfinity(LastBlockStackRelativeMSec); } } - // public bool ThreadRunning { get { return LastBlockStackRelativeMSec < 0 && !ThreadDead; } } - // public bool ThreadBlocked { get { return 0 < LastBlockStackRelativeMSec; } } - // public bool ThreadUninitialized { get { return LastBlockStackRelativeMSec == 0; } } - - // /* State */ - // internal double LastBlockStackRelativeMSec; // Negative means not blocked, NegativeInfinity means dead. 0 means uninitialized. - // internal StackSourceCallStackIndex LastBlockCallStack; - - // internal double LastCPUStackRelativeMSec; - // private StackSourceCallStackIndex LastCPUCallStack; - //} -} diff --git a/src/Sentry/Internal/DataCategory.cs b/src/Sentry/Internal/DataCategory.cs index fdff065438..300c8e374c 100644 --- a/src/Sentry/Internal/DataCategory.cs +++ b/src/Sentry/Internal/DataCategory.cs @@ -10,6 +10,7 @@ namespace Sentry.Internal; public static DataCategory Security = new("security"); public static DataCategory Session = new("session"); public static DataCategory Transaction = new("transaction"); + public static DataCategory Profile = new("profile"); private readonly string _value; diff --git a/src/Sentry/Internal/FastSerialization/GrowableArray.cs b/src/Sentry/Internal/FastSerialization/GrowableArray.cs index 5c606afeef..fdae90dd8f 100644 --- a/src/Sentry/Internal/FastSerialization/GrowableArray.cs +++ b/src/Sentry/Internal/FastSerialization/GrowableArray.cs @@ -347,11 +347,6 @@ private void Realloc(int minSize) // Implementation of IEnumerable. public IEnumerator GetEnumerator() => new GrowableArrayEnumerator(this); - internal void Add(object value) - { - throw new NotImplementedException(); - } - /// /// IEnumerator implementation. /// diff --git a/src/Sentry/Internal/SparseArray.cs b/src/Sentry/Internal/SparseArray.cs index 4441ce85f7..4cf654b86b 100644 --- a/src/Sentry/Internal/SparseArray.cs +++ b/src/Sentry/Internal/SparseArray.cs @@ -19,11 +19,13 @@ public T this[int index] { get { + Debug.Assert(index < _items.Count, "Index out of range."); return _items[index]; } set { // Increase the capacity of the sparse array so that the key can fit. + _items.Reserve(index + 1); while (_items.Count <= index) { _items.Add(_uninitializedValue); @@ -34,6 +36,6 @@ public T this[int index] public bool ContainsKey(int key) { - return key > 0 && key < _items.Count && !_uninitializedValue.Equals(_items[key]); + return key >= 0 && key < _items.Count && !_uninitializedValue.Equals(_items[key]); } } diff --git a/src/Sentry/Protocol/Envelopes/EnvelopeItem.cs b/src/Sentry/Protocol/Envelopes/EnvelopeItem.cs index e8204f06d1..47e0884d09 100644 --- a/src/Sentry/Protocol/Envelopes/EnvelopeItem.cs +++ b/src/Sentry/Protocol/Envelopes/EnvelopeItem.cs @@ -41,6 +41,7 @@ public sealed class EnvelopeItem : ISerializable, IDisposable TypeValueTransaction => DataCategory.Transaction, TypeValueSession => DataCategory.Session, TypeValueAttachment => DataCategory.Attachment, + TypeValueProfile => DataCategory.Profile, // Not all envelope item types equate to data categories // Specifically, user_report and client_report just use "default" diff --git a/src/Sentry/Protocol/SampleProfile.cs b/src/Sentry/Protocol/SampleProfile.cs index 8d70e22415..9836e6d893 100644 --- a/src/Sentry/Protocol/SampleProfile.cs +++ b/src/Sentry/Protocol/SampleProfile.cs @@ -8,18 +8,15 @@ namespace Sentry.Protocol; -// A list of frame indexes. -using SentryProfileStackTrace = HashableGrowableArray; - /// /// Sentry sampling profiler output profile /// internal sealed class SampleProfile : IJsonSerializable { // Note: changing these to properties would break because GrowableArray is a struct. - internal GrowableArray Samples = new(10000); - internal GrowableArray Frames = new(100); - internal GrowableArray Stacks = new(100); + internal Internal.GrowableArray Samples = new(10000); + internal Internal.GrowableArray Frames = new(100); + internal Internal.GrowableArray> Stacks = new(100); internal List Threads = new(10); public void WriteTo(Utf8JsonWriter writer, IDiagnosticLogger? logger) diff --git a/src/Sentry/Sentry.csproj b/src/Sentry/Sentry.csproj index d0a4ccdbb3..97548ef0f1 100644 --- a/src/Sentry/Sentry.csproj +++ b/src/Sentry/Sentry.csproj @@ -48,6 +48,51 @@ + + + <_ProfilingSupported>true + true + + + + + + + $(NoWarn);RCS1075;CA2014;CS0649;RCS1102;RCS1139;RCS1138 + + false + + + + + + + + + + + + + + + Profiling\PerfView\TraceEvent\%(RecursiveDir)\%(Filename)%(Extension) + + + Profiling\PerfView\FastSerialization\%(RecursiveDir)\%(Filename)%(Extension) + + + Profiling\PerfView\Utilities\%(RecursiveDir)\%(Filename)%(Extension) + + + + + + + + + + +