Merge pull request #73 from GwynethLlewelyn/gwyn-fix-item-same-key

Fixing Dictionary.Add(key, value) giving the error that a duplicate key exists and exits
This commit is contained in:
¡Cinder! ㊝
2022-04-18 16:09:01 -05:00
committed by GitHub
32 changed files with 713 additions and 118 deletions

26
.editorconfig Normal file
View File

@@ -0,0 +1,26 @@
# top-most EditorConfig file
root = true
# Unix-style newlines with a newline ending every file
[*]
end_of_line = lf
charset = utf-8
indent_style = tab
indent_size = tab
tab_width = 2
trim_trailing_whitespace = true
# The property below is not yet universally supported
[*.md]
max_line_length = 108
word_wrap = true
# Markdown sometimes uses two spaces at the end to
# mark soft line breaks
trim_trailing_whitespace = false
[*.yml]
end_of_line = lf
charset = utf-8
indent_style = space
indent_size = 2
trim_trailing_whitespace = true

View File

@@ -52,8 +52,8 @@ jobs:
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v1
# - name: Autobuild
# uses: github/codeql-action/autobuild@v1
# Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
@@ -62,9 +62,41 @@ jobs:
# and modify them (or add more) to build your code if your project
# uses a compiled language
#- run: |
# make bootstrap
# make release
- name: Build cross-platform projects
run: |
dotnet build PrimMesher/LibreMetaverse.PrimMesher.csproj
dotnet build LibreMetaverse.LslTools/LibreMetaverse.LslTools.csproj
dotnet build LibreMetaverse.Types/LibreMetaverse.Types.csproj
dotnet build LibreMetaverse.StructuredData/LibreMetaverse.StructuredData.csproj
dotnet build LibreMetaverse/LibreMetaverse.csproj
dotnet build LibreMetaverse.Rendering.Simple/LibreMetaverse.Rendering.Simple.csproj
dotnet build LibreMetaverse.Rendering.Meshmerizer/LibreMetaverse.Rendering.Meshmerizer.csproj
dotnet build LibreMetaverse.Voice/LibreMetaverse.Voice.csproj
dotnet build LibreMetaverse.Utilities/LibreMetaverse.Utilities.csproj
- name: Build cross-platform example projects
run: |
dotnet build Programs/examples/IRCGateway/IRCGateway.csproj
dotnet build Programs/examples/PacketDump/PacketDump.csproj
dotnet build Programs/examples/TestClient/TestClient.csproj
dotnet build Programs/mapgenerator/mapgenerator.csproj
dotnet build Programs/VoiceTest/VoiceTest.csproj
# These GUI projects fail to build. Disabled for now.
# - name: Build GUI projects
# run: |
# dotnet build LibreMetaverse.GUI/LibreMetaverse.GUI.csproj
# dotnet build Programs/Baker/Baker.csproj
# dotnet build Programs/examples/Dashboard/Dashboard.csproj
# dotnet build Programs/examples/GridAccountant/GridAccountant.csproj
# dotnet build Programs/examples/groupmanager/groupmanager.csproj
# dotnet build Programs/examples/Heightmap/Heightmap.csproj
# These projects also have issues.
# - name: Build GridProxy projects
# run: |
# dotnet build Programs/GridProxy/GridProxy.csproj
# dotnet build Programs/GridProxy/GridProxyApp.csproj
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v1

42
.github/workflows/dotnet.yml vendored Normal file
View File

@@ -0,0 +1,42 @@
# A test workflow, which seems to get good results sometimes.
# (gwyneth 20220418)
# See https://docs.microsoft.com/en-us/dotnet/devops/dotnet-test-github-action
name: .NET
on:
push:
pull_request:
branches: [ master ]
paths:
- '**.cs'
- '**.csproj'
env:
# We'll stick to net6.0, as 5.0 seems not to work as well as it should
# - at least for testing purposes (gwyneth 20220418)
DOTNET_VERSION: '6.0.4'
jobs:
build:
name: dotnet-${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest]
steps:
- uses: actions/checkout@v2
- name: Setup .NET
uses: actions/setup-dotnet@v1
with:
dotnet-version: 6.0.x
- name: Restore dependencies
run: dotnet restore LibreMetaverse.ReleaseNoGui.sln
- name: Build
run: dotnet build --no-restore LibreMetaverse.ReleaseNoGui.sln
# I have no idea how to pass the avatar password for the GridClientTests, so I'll have to skip this
# or, alternatively, set up a different account for testing purposes (gwyneth 20220418)
# - name: Test
# run: dotnet test --no-build --verbosity normal LibreMetaverse.ReleaseNoGui.sln

42
.gitignore vendored
View File

@@ -1,3 +1,45 @@
~*
# Stupid macOS temporary files
# General
.DS_Store
.AppleDouble
.LSOverride
# Icon must end with two \r
Icon
Icon?
# Thumbnails
._*
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
# Stuff from the Nova editor
.nova
node_modules
package.json
package-lock.json
.eslintrc.yml
.prettierrc.json
# Original LibreMetaverse .gitignore follows
compile.bat
*.user
*.userprefs

View File

@@ -1,22 +1,22 @@
<Project>
<PropertyGroup>
<Version>0.10.0.0</Version>
<Product>LibreMetaverse</Product>
<Authors>Sjofn LLC, OpenMetaverse Developers</Authors>
<Copyright>Copyright © OpenMetaverse Developers 2008, 2017. Copyright © Sjofn LLC 2018-2022. All rights reserved.</Copyright>
<Trademark>LibreMetaverse is a trademark of Sjofn LLC.</Trademark>
<Company>Sjofn LLC</Company>
</PropertyGroup>
<PropertyGroup>
<PackageVersion>0.10.0.0</PackageVersion>
<PackageIcon>logo.png</PackageIcon>
<PackageReadmeFile>README.md</PackageReadmeFile>
<PackageLicenseExpression>BSD-3-Clause</PackageLicenseExpression>
<PackageProjectUrl>https://github.com/cinderblocks/libremetaverse</PackageProjectUrl>
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
<PackageTags>LMV OMV OpenMetaverse OpenSim Halcyon OpenMetaverseFoundation VirtualWorld VirtualReality 3D Radegast MEGAbolt SecondLife</PackageTags>
<RepositoryUrl>https://github.com/cinderblocks/libremetaverse</RepositoryUrl>
<RepositoryType>git</RepositoryType>
<RepositoryBranch>master</RepositoryBranch>
</PropertyGroup>
</Project>
<Project>
<PropertyGroup>
<Version>1.9.20.453-gwyn</Version>
<Product>LibreMetaverse</Product>
<Authors>Sjofn LLC, OpenMetaverse Developers</Authors>
<Copyright>Copyright © OpenMetaverse Developers 2008, 2017. Copyright © Sjofn LLC 2018-2022. All rights reserved.</Copyright>
<Trademark>LibreMetaverse is a trademark of Sjofn LLC.</Trademark>
<Company>Sjofn LLC</Company>
</PropertyGroup>
<PropertyGroup>
<PackageVersion>1.9.20.453-gwyn</PackageVersion>
<PackageIcon>logo.png</PackageIcon>
<PackageReadmeFile>README.md</PackageReadmeFile>
<PackageLicenseExpression>BSD-3-Clause</PackageLicenseExpression>
<PackageProjectUrl>https://github.com/cinderblocks/libremetaverse</PackageProjectUrl>
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
<PackageTags>LMV OMV OpenMetaverse OpenSim Halcyon OpenMetaverseFoundation VirtualWorld VirtualReality 3D Radegast MEGAbolt SecondLife</PackageTags>
<RepositoryUrl>https://github.com/cinderblocks/libremetaverse</RepositoryUrl>
<RepositoryType>git</RepositoryType>
<RepositoryBranch>master</RepositoryBranch>
</PropertyGroup>
</Project>

View File

@@ -1,12 +1,12 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup Condition=" '$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Windows)))' ">
<TargetFrameworks>net471;net48;netcoreapp3.1;net5.0-windows</TargetFrameworks>
<TargetFrameworks>net471;net48;netcoreapp3.1;net5.0-windows;net6.0-windows</TargetFrameworks>
</PropertyGroup>
<PropertyGroup Condition=" '$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' ">
<TargetFrameworks>net471;netcoreapp3.1</TargetFrameworks>
<TargetFrameworks>net471;netcoreapp3.1;net5.0-linux;net6.0-linux</TargetFrameworks>
</PropertyGroup>
<PropertyGroup Condition=" '$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::OSX)))' ">
<TargetFrameworks>net471;netcoreapp3.1</TargetFrameworks>
<TargetFrameworks>net471;netcoreapp3.1;net5.0-linux;net6.0-linux</TargetFrameworks>
</PropertyGroup>
<PropertyGroup>
<AssemblyName>LibreMetaverse.GUI</AssemblyName>

View File

@@ -1,6 +1,6 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>netstandard2.0;netstandard2.1;net5.0</TargetFrameworks>
<TargetFrameworks>netstandard2.0;netstandard2.1;net5.0;net6.0</TargetFrameworks>
<AssemblyName>LibreMetaverse.LslTools</AssemblyName>
<PackageId>LibreMetaverse.LslTools</PackageId>
<Description>Lexer for LSL scrripting language</Description>

View File

@@ -73,7 +73,9 @@ namespace LibreMetaverse.LslTools
Console.WriteLine("about to pop {0} count is {1}", (object) this.m_depth, (object) yyps.m_stack.Count);
yyps.Pop(ref top, this.m_depth, ns);
if (ns.pos == 0)
{
ns.pos = top.m_value.pos;
}
top.m_value = ns;
}

View File

@@ -0,0 +1,360 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.32002.261
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GridProxy", "Programs\GridProxy\GridProxy.csproj", "{79B51DAA-0000-0000-0000-000000000000}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IRCGateway", "Programs\examples\IRCGateway\IRCGateway.csproj", "{89049BBC-0000-0000-0000-000000000000}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LibreMetaverse", "LibreMetaverse\LibreMetaverse.csproj", "{27C70F3A-0000-0000-0000-000000000000}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LibreMetaverse.Rendering.Meshmerizer", "LibreMetaverse.Rendering.Meshmerizer\LibreMetaverse.Rendering.Meshmerizer.csproj", "{95479B1D-0000-0000-0000-000000000000}"
ProjectSection(ProjectDependencies) = postProject
{2E2B643F-F18B-4791-BA4B-6E82D0E794B6} = {2E2B643F-F18B-4791-BA4B-6E82D0E794B6}
EndProjectSection
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LibreMetaverse.Rendering.Simple", "LibreMetaverse.Rendering.Simple\LibreMetaverse.Rendering.Simple.csproj", "{29E206AC-0000-0000-0000-000000000000}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LibreMetaverse.StructuredData", "LibreMetaverse.StructuredData\LibreMetaverse.StructuredData.csproj", "{89D7A3E5-0000-0000-0000-000000000000}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LibreMetaverse.Tests", "LibreMetaverse.Tests\LibreMetaverse.Tests.csproj", "{0CCC2C3D-0000-0000-0000-000000000000}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LibreMetaverse.Utilities", "LibreMetaverse.Utilities\LibreMetaverse.Utilities.csproj", "{1266CE08-0000-0000-0000-000000000000}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LibreMetaverse.Types", "LibreMetaverse.Types\LibreMetaverse.Types.csproj", "{B37B02AD-0000-0000-0000-000000000000}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PacketDump", "Programs\examples\PacketDump\PacketDump.csproj", "{58443010-0000-0000-0000-000000000000}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestClient", "Programs\examples\TestClient\TestClient.csproj", "{9F71FDB3-0000-0000-0000-000000000000}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VoiceTest", "Programs\VoiceTest\VoiceTest.csproj", "{EE4EA934-0000-0000-0000-000000000000}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LibreMetaverse.PrimMesher", "PrimMesher\LibreMetaverse.PrimMesher.csproj", "{2E2B643F-F18B-4791-BA4B-6E82D0E794B6}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "mapgenerator", "Programs\mapgenerator\mapgenerator.csproj", "{2867B4B3-0000-0000-0000-000000000000}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{F8CE4DE6-82E5-49D1-BCDF-BB3E63A52867}"
ProjectSection(SolutionItems) = preProject
Directory.Build.props = Directory.Build.props
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "utilities", "utilities", "{6EF29E7F-FC69-4269-BDCF-4780D54E299D}"
ProjectSection(SolutionItems) = preProject
.appveyor.yml = .appveyor.yml
util\InstallRemotePfx.ps1 = util\InstallRemotePfx.ps1
util\SignPackages.ps1 = util\SignPackages.ps1
EndProjectSection
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LibreMetaverse.LslTools", "LibreMetaverse.LslTools\LibreMetaverse.LslTools.csproj", "{989E5E15-D99B-4CF1-AF64-90C568FC979A}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LibreMetaverse.Voice", "LibreMetaverse.Voice\LibreMetaverse.Voice.csproj", "{FB07C6DE-F791-4336-B6E2-B32EEAC34792}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
Release|x64 = Release|x64
Release|x86 = Release|x86
ReleaseNoGui|Any CPU = ReleaseNoGui|Any CPU
ReleaseNoGui|x64 = ReleaseNoGui|x64
ReleaseNoGui|x86 = ReleaseNoGui|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{79B51DAA-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|x64
{79B51DAA-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|x64
{79B51DAA-0000-0000-0000-000000000000}.Debug|x64.ActiveCfg = Debug|x64
{79B51DAA-0000-0000-0000-000000000000}.Debug|x64.Build.0 = Debug|x64
{79B51DAA-0000-0000-0000-000000000000}.Debug|x86.ActiveCfg = Debug|x86
{79B51DAA-0000-0000-0000-000000000000}.Debug|x86.Build.0 = Debug|x86
{79B51DAA-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|x64
{79B51DAA-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|x64
{79B51DAA-0000-0000-0000-000000000000}.Release|x64.ActiveCfg = Release|x64
{79B51DAA-0000-0000-0000-000000000000}.Release|x64.Build.0 = Release|x64
{79B51DAA-0000-0000-0000-000000000000}.Release|x86.ActiveCfg = Release|x86
{79B51DAA-0000-0000-0000-000000000000}.Release|x86.Build.0 = Release|x86
{79B51DAA-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.ActiveCfg = Release|x64
{79B51DAA-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.Build.0 = Release|x64
{79B51DAA-0000-0000-0000-000000000000}.ReleaseNoGui|x64.ActiveCfg = Release|x64
{79B51DAA-0000-0000-0000-000000000000}.ReleaseNoGui|x64.Build.0 = Release|x64
{79B51DAA-0000-0000-0000-000000000000}.ReleaseNoGui|x86.ActiveCfg = Release|x86
{79B51DAA-0000-0000-0000-000000000000}.ReleaseNoGui|x86.Build.0 = Release|x86
{89049BBC-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|x64
{89049BBC-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|x64
{89049BBC-0000-0000-0000-000000000000}.Debug|x64.ActiveCfg = Debug|x64
{89049BBC-0000-0000-0000-000000000000}.Debug|x64.Build.0 = Debug|x64
{89049BBC-0000-0000-0000-000000000000}.Debug|x86.ActiveCfg = Debug|x86
{89049BBC-0000-0000-0000-000000000000}.Debug|x86.Build.0 = Debug|x86
{89049BBC-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|x64
{89049BBC-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|x64
{89049BBC-0000-0000-0000-000000000000}.Release|x64.ActiveCfg = Release|x64
{89049BBC-0000-0000-0000-000000000000}.Release|x64.Build.0 = Release|x64
{89049BBC-0000-0000-0000-000000000000}.Release|x86.ActiveCfg = Release|x86
{89049BBC-0000-0000-0000-000000000000}.Release|x86.Build.0 = Release|x86
{89049BBC-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.ActiveCfg = Release|x64
{89049BBC-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.Build.0 = Release|x64
{89049BBC-0000-0000-0000-000000000000}.ReleaseNoGui|x64.ActiveCfg = Release|x64
{89049BBC-0000-0000-0000-000000000000}.ReleaseNoGui|x64.Build.0 = Release|x64
{89049BBC-0000-0000-0000-000000000000}.ReleaseNoGui|x86.ActiveCfg = Release|x86
{89049BBC-0000-0000-0000-000000000000}.ReleaseNoGui|x86.Build.0 = Release|x86
{27C70F3A-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{27C70F3A-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
{27C70F3A-0000-0000-0000-000000000000}.Debug|x64.ActiveCfg = Debug|Any CPU
{27C70F3A-0000-0000-0000-000000000000}.Debug|x64.Build.0 = Debug|Any CPU
{27C70F3A-0000-0000-0000-000000000000}.Debug|x86.ActiveCfg = Debug|x86
{27C70F3A-0000-0000-0000-000000000000}.Debug|x86.Build.0 = Debug|x86
{27C70F3A-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
{27C70F3A-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
{27C70F3A-0000-0000-0000-000000000000}.Release|x64.ActiveCfg = Release|Any CPU
{27C70F3A-0000-0000-0000-000000000000}.Release|x64.Build.0 = Release|Any CPU
{27C70F3A-0000-0000-0000-000000000000}.Release|x86.ActiveCfg = Release|Any CPU
{27C70F3A-0000-0000-0000-000000000000}.Release|x86.Build.0 = Release|Any CPU
{27C70F3A-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.ActiveCfg = Release|Any CPU
{27C70F3A-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.Build.0 = Release|Any CPU
{27C70F3A-0000-0000-0000-000000000000}.ReleaseNoGui|x64.ActiveCfg = Release|Any CPU
{27C70F3A-0000-0000-0000-000000000000}.ReleaseNoGui|x64.Build.0 = Release|Any CPU
{27C70F3A-0000-0000-0000-000000000000}.ReleaseNoGui|x86.ActiveCfg = Release|Any CPU
{27C70F3A-0000-0000-0000-000000000000}.ReleaseNoGui|x86.Build.0 = Release|Any CPU
{95479B1D-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{95479B1D-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
{95479B1D-0000-0000-0000-000000000000}.Debug|x64.ActiveCfg = Debug|Any CPU
{95479B1D-0000-0000-0000-000000000000}.Debug|x64.Build.0 = Debug|Any CPU
{95479B1D-0000-0000-0000-000000000000}.Debug|x86.ActiveCfg = Debug|x86
{95479B1D-0000-0000-0000-000000000000}.Debug|x86.Build.0 = Debug|x86
{95479B1D-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
{95479B1D-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
{95479B1D-0000-0000-0000-000000000000}.Release|x64.ActiveCfg = Release|Any CPU
{95479B1D-0000-0000-0000-000000000000}.Release|x64.Build.0 = Release|Any CPU
{95479B1D-0000-0000-0000-000000000000}.Release|x86.ActiveCfg = Release|Any CPU
{95479B1D-0000-0000-0000-000000000000}.Release|x86.Build.0 = Release|Any CPU
{95479B1D-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.ActiveCfg = Release|Any CPU
{95479B1D-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.Build.0 = Release|Any CPU
{95479B1D-0000-0000-0000-000000000000}.ReleaseNoGui|x64.ActiveCfg = Release|Any CPU
{95479B1D-0000-0000-0000-000000000000}.ReleaseNoGui|x64.Build.0 = Release|Any CPU
{95479B1D-0000-0000-0000-000000000000}.ReleaseNoGui|x86.ActiveCfg = Release|Any CPU
{95479B1D-0000-0000-0000-000000000000}.ReleaseNoGui|x86.Build.0 = Release|Any CPU
{29E206AC-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{29E206AC-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
{29E206AC-0000-0000-0000-000000000000}.Debug|x64.ActiveCfg = Debug|Any CPU
{29E206AC-0000-0000-0000-000000000000}.Debug|x64.Build.0 = Debug|Any CPU
{29E206AC-0000-0000-0000-000000000000}.Debug|x86.ActiveCfg = Debug|x86
{29E206AC-0000-0000-0000-000000000000}.Debug|x86.Build.0 = Debug|x86
{29E206AC-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
{29E206AC-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
{29E206AC-0000-0000-0000-000000000000}.Release|x64.ActiveCfg = Release|Any CPU
{29E206AC-0000-0000-0000-000000000000}.Release|x64.Build.0 = Release|Any CPU
{29E206AC-0000-0000-0000-000000000000}.Release|x86.ActiveCfg = Release|Any CPU
{29E206AC-0000-0000-0000-000000000000}.Release|x86.Build.0 = Release|Any CPU
{29E206AC-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.ActiveCfg = Release|Any CPU
{29E206AC-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.Build.0 = Release|Any CPU
{29E206AC-0000-0000-0000-000000000000}.ReleaseNoGui|x64.ActiveCfg = Release|Any CPU
{29E206AC-0000-0000-0000-000000000000}.ReleaseNoGui|x64.Build.0 = Release|Any CPU
{29E206AC-0000-0000-0000-000000000000}.ReleaseNoGui|x86.ActiveCfg = Release|Any CPU
{29E206AC-0000-0000-0000-000000000000}.ReleaseNoGui|x86.Build.0 = Release|Any CPU
{89D7A3E5-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{89D7A3E5-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
{89D7A3E5-0000-0000-0000-000000000000}.Debug|x64.ActiveCfg = Debug|Any CPU
{89D7A3E5-0000-0000-0000-000000000000}.Debug|x64.Build.0 = Debug|Any CPU
{89D7A3E5-0000-0000-0000-000000000000}.Debug|x86.ActiveCfg = Debug|x86
{89D7A3E5-0000-0000-0000-000000000000}.Debug|x86.Build.0 = Debug|x86
{89D7A3E5-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
{89D7A3E5-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
{89D7A3E5-0000-0000-0000-000000000000}.Release|x64.ActiveCfg = Release|Any CPU
{89D7A3E5-0000-0000-0000-000000000000}.Release|x64.Build.0 = Release|Any CPU
{89D7A3E5-0000-0000-0000-000000000000}.Release|x86.ActiveCfg = Release|Any CPU
{89D7A3E5-0000-0000-0000-000000000000}.Release|x86.Build.0 = Release|Any CPU
{89D7A3E5-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.ActiveCfg = Release|Any CPU
{89D7A3E5-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.Build.0 = Release|Any CPU
{89D7A3E5-0000-0000-0000-000000000000}.ReleaseNoGui|x64.ActiveCfg = Release|Any CPU
{89D7A3E5-0000-0000-0000-000000000000}.ReleaseNoGui|x64.Build.0 = Release|Any CPU
{89D7A3E5-0000-0000-0000-000000000000}.ReleaseNoGui|x86.ActiveCfg = Release|Any CPU
{89D7A3E5-0000-0000-0000-000000000000}.ReleaseNoGui|x86.Build.0 = Release|Any CPU
{0CCC2C3D-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0CCC2C3D-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0CCC2C3D-0000-0000-0000-000000000000}.Debug|x64.ActiveCfg = Debug|x64
{0CCC2C3D-0000-0000-0000-000000000000}.Debug|x64.Build.0 = Debug|x64
{0CCC2C3D-0000-0000-0000-000000000000}.Debug|x86.ActiveCfg = Debug|x86
{0CCC2C3D-0000-0000-0000-000000000000}.Debug|x86.Build.0 = Debug|x86
{0CCC2C3D-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0CCC2C3D-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
{0CCC2C3D-0000-0000-0000-000000000000}.Release|x64.ActiveCfg = Release|x64
{0CCC2C3D-0000-0000-0000-000000000000}.Release|x64.Build.0 = Release|x64
{0CCC2C3D-0000-0000-0000-000000000000}.Release|x86.ActiveCfg = Release|x86
{0CCC2C3D-0000-0000-0000-000000000000}.Release|x86.Build.0 = Release|x86
{0CCC2C3D-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.ActiveCfg = Release|Any CPU
{0CCC2C3D-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.Build.0 = Release|Any CPU
{0CCC2C3D-0000-0000-0000-000000000000}.ReleaseNoGui|x64.ActiveCfg = Release|x64
{0CCC2C3D-0000-0000-0000-000000000000}.ReleaseNoGui|x64.Build.0 = Release|x64
{0CCC2C3D-0000-0000-0000-000000000000}.ReleaseNoGui|x86.ActiveCfg = Release|x86
{0CCC2C3D-0000-0000-0000-000000000000}.ReleaseNoGui|x86.Build.0 = Release|x86
{1266CE08-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1266CE08-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1266CE08-0000-0000-0000-000000000000}.Debug|x64.ActiveCfg = Debug|Any CPU
{1266CE08-0000-0000-0000-000000000000}.Debug|x64.Build.0 = Debug|Any CPU
{1266CE08-0000-0000-0000-000000000000}.Debug|x86.ActiveCfg = Debug|x86
{1266CE08-0000-0000-0000-000000000000}.Debug|x86.Build.0 = Debug|x86
{1266CE08-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1266CE08-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
{1266CE08-0000-0000-0000-000000000000}.Release|x64.ActiveCfg = Release|Any CPU
{1266CE08-0000-0000-0000-000000000000}.Release|x64.Build.0 = Release|Any CPU
{1266CE08-0000-0000-0000-000000000000}.Release|x86.ActiveCfg = Release|Any CPU
{1266CE08-0000-0000-0000-000000000000}.Release|x86.Build.0 = Release|Any CPU
{1266CE08-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.ActiveCfg = Release|Any CPU
{1266CE08-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.Build.0 = Release|Any CPU
{1266CE08-0000-0000-0000-000000000000}.ReleaseNoGui|x64.ActiveCfg = Release|Any CPU
{1266CE08-0000-0000-0000-000000000000}.ReleaseNoGui|x64.Build.0 = Release|Any CPU
{1266CE08-0000-0000-0000-000000000000}.ReleaseNoGui|x86.ActiveCfg = Release|Any CPU
{1266CE08-0000-0000-0000-000000000000}.ReleaseNoGui|x86.Build.0 = Release|Any CPU
{B37B02AD-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B37B02AD-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B37B02AD-0000-0000-0000-000000000000}.Debug|x64.ActiveCfg = Debug|Any CPU
{B37B02AD-0000-0000-0000-000000000000}.Debug|x64.Build.0 = Debug|Any CPU
{B37B02AD-0000-0000-0000-000000000000}.Debug|x86.ActiveCfg = Debug|x86
{B37B02AD-0000-0000-0000-000000000000}.Debug|x86.Build.0 = Debug|x86
{B37B02AD-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B37B02AD-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
{B37B02AD-0000-0000-0000-000000000000}.Release|x64.ActiveCfg = Release|Any CPU
{B37B02AD-0000-0000-0000-000000000000}.Release|x64.Build.0 = Release|Any CPU
{B37B02AD-0000-0000-0000-000000000000}.Release|x86.ActiveCfg = Release|Any CPU
{B37B02AD-0000-0000-0000-000000000000}.Release|x86.Build.0 = Release|Any CPU
{B37B02AD-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.ActiveCfg = Release|Any CPU
{B37B02AD-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.Build.0 = Release|Any CPU
{B37B02AD-0000-0000-0000-000000000000}.ReleaseNoGui|x64.ActiveCfg = Release|Any CPU
{B37B02AD-0000-0000-0000-000000000000}.ReleaseNoGui|x64.Build.0 = Release|Any CPU
{B37B02AD-0000-0000-0000-000000000000}.ReleaseNoGui|x86.ActiveCfg = Release|Any CPU
{B37B02AD-0000-0000-0000-000000000000}.ReleaseNoGui|x86.Build.0 = Release|Any CPU
{58443010-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{58443010-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
{58443010-0000-0000-0000-000000000000}.Debug|x64.ActiveCfg = Debug|Any CPU
{58443010-0000-0000-0000-000000000000}.Debug|x64.Build.0 = Debug|Any CPU
{58443010-0000-0000-0000-000000000000}.Debug|x86.ActiveCfg = Debug|x86
{58443010-0000-0000-0000-000000000000}.Debug|x86.Build.0 = Debug|x86
{58443010-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
{58443010-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
{58443010-0000-0000-0000-000000000000}.Release|x64.ActiveCfg = Release|Any CPU
{58443010-0000-0000-0000-000000000000}.Release|x64.Build.0 = Release|Any CPU
{58443010-0000-0000-0000-000000000000}.Release|x86.ActiveCfg = Release|Any CPU
{58443010-0000-0000-0000-000000000000}.Release|x86.Build.0 = Release|Any CPU
{58443010-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.ActiveCfg = Release|Any CPU
{58443010-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.Build.0 = Release|Any CPU
{58443010-0000-0000-0000-000000000000}.ReleaseNoGui|x64.ActiveCfg = Release|x64
{58443010-0000-0000-0000-000000000000}.ReleaseNoGui|x64.Build.0 = Release|x64
{58443010-0000-0000-0000-000000000000}.ReleaseNoGui|x86.ActiveCfg = Release|Any CPU
{58443010-0000-0000-0000-000000000000}.ReleaseNoGui|x86.Build.0 = Release|Any CPU
{9F71FDB3-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|x64
{9F71FDB3-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|x64
{9F71FDB3-0000-0000-0000-000000000000}.Debug|x64.ActiveCfg = Debug|x64
{9F71FDB3-0000-0000-0000-000000000000}.Debug|x64.Build.0 = Debug|x64
{9F71FDB3-0000-0000-0000-000000000000}.Debug|x86.ActiveCfg = Debug|x86
{9F71FDB3-0000-0000-0000-000000000000}.Debug|x86.Build.0 = Debug|x86
{9F71FDB3-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|x64
{9F71FDB3-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|x64
{9F71FDB3-0000-0000-0000-000000000000}.Release|x64.ActiveCfg = Release|x64
{9F71FDB3-0000-0000-0000-000000000000}.Release|x64.Build.0 = Release|x64
{9F71FDB3-0000-0000-0000-000000000000}.Release|x86.ActiveCfg = Release|x86
{9F71FDB3-0000-0000-0000-000000000000}.Release|x86.Build.0 = Release|x86
{9F71FDB3-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.ActiveCfg = Release|x64
{9F71FDB3-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.Build.0 = Release|x64
{9F71FDB3-0000-0000-0000-000000000000}.ReleaseNoGui|x64.ActiveCfg = Release|x64
{9F71FDB3-0000-0000-0000-000000000000}.ReleaseNoGui|x64.Build.0 = Release|x64
{9F71FDB3-0000-0000-0000-000000000000}.ReleaseNoGui|x86.ActiveCfg = Release|x86
{9F71FDB3-0000-0000-0000-000000000000}.ReleaseNoGui|x86.Build.0 = Release|x86
{EE4EA934-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EE4EA934-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EE4EA934-0000-0000-0000-000000000000}.Debug|x64.ActiveCfg = Debug|x64
{EE4EA934-0000-0000-0000-000000000000}.Debug|x64.Build.0 = Debug|x64
{EE4EA934-0000-0000-0000-000000000000}.Debug|x86.ActiveCfg = Debug|x86
{EE4EA934-0000-0000-0000-000000000000}.Debug|x86.Build.0 = Debug|x86
{EE4EA934-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EE4EA934-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
{EE4EA934-0000-0000-0000-000000000000}.Release|x64.ActiveCfg = Release|x64
{EE4EA934-0000-0000-0000-000000000000}.Release|x64.Build.0 = Release|x64
{EE4EA934-0000-0000-0000-000000000000}.Release|x86.ActiveCfg = Release|x86
{EE4EA934-0000-0000-0000-000000000000}.Release|x86.Build.0 = Release|x86
{EE4EA934-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.ActiveCfg = Release|Any CPU
{EE4EA934-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.Build.0 = Release|Any CPU
{EE4EA934-0000-0000-0000-000000000000}.ReleaseNoGui|x64.ActiveCfg = Release|x64
{EE4EA934-0000-0000-0000-000000000000}.ReleaseNoGui|x64.Build.0 = Release|x64
{EE4EA934-0000-0000-0000-000000000000}.ReleaseNoGui|x86.ActiveCfg = Release|x86
{EE4EA934-0000-0000-0000-000000000000}.ReleaseNoGui|x86.Build.0 = Release|x86
{2E2B643F-F18B-4791-BA4B-6E82D0E794B6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2E2B643F-F18B-4791-BA4B-6E82D0E794B6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2E2B643F-F18B-4791-BA4B-6E82D0E794B6}.Debug|x64.ActiveCfg = Debug|Any CPU
{2E2B643F-F18B-4791-BA4B-6E82D0E794B6}.Debug|x64.Build.0 = Debug|Any CPU
{2E2B643F-F18B-4791-BA4B-6E82D0E794B6}.Debug|x86.ActiveCfg = Debug|x86
{2E2B643F-F18B-4791-BA4B-6E82D0E794B6}.Debug|x86.Build.0 = Debug|x86
{2E2B643F-F18B-4791-BA4B-6E82D0E794B6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2E2B643F-F18B-4791-BA4B-6E82D0E794B6}.Release|Any CPU.Build.0 = Release|Any CPU
{2E2B643F-F18B-4791-BA4B-6E82D0E794B6}.Release|x64.ActiveCfg = Release|Any CPU
{2E2B643F-F18B-4791-BA4B-6E82D0E794B6}.Release|x64.Build.0 = Release|Any CPU
{2E2B643F-F18B-4791-BA4B-6E82D0E794B6}.Release|x86.ActiveCfg = Release|Any CPU
{2E2B643F-F18B-4791-BA4B-6E82D0E794B6}.Release|x86.Build.0 = Release|Any CPU
{2E2B643F-F18B-4791-BA4B-6E82D0E794B6}.ReleaseNoGui|Any CPU.ActiveCfg = Release|Any CPU
{2E2B643F-F18B-4791-BA4B-6E82D0E794B6}.ReleaseNoGui|Any CPU.Build.0 = Release|Any CPU
{2E2B643F-F18B-4791-BA4B-6E82D0E794B6}.ReleaseNoGui|x64.ActiveCfg = Release|Any CPU
{2E2B643F-F18B-4791-BA4B-6E82D0E794B6}.ReleaseNoGui|x64.Build.0 = Release|Any CPU
{2E2B643F-F18B-4791-BA4B-6E82D0E794B6}.ReleaseNoGui|x86.ActiveCfg = Release|Any CPU
{2E2B643F-F18B-4791-BA4B-6E82D0E794B6}.ReleaseNoGui|x86.Build.0 = Release|Any CPU
{2867B4B3-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2867B4B3-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2867B4B3-0000-0000-0000-000000000000}.Debug|x64.ActiveCfg = Debug|Any CPU
{2867B4B3-0000-0000-0000-000000000000}.Debug|x64.Build.0 = Debug|Any CPU
{2867B4B3-0000-0000-0000-000000000000}.Debug|x86.ActiveCfg = Debug|x86
{2867B4B3-0000-0000-0000-000000000000}.Debug|x86.Build.0 = Debug|x86
{2867B4B3-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2867B4B3-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
{2867B4B3-0000-0000-0000-000000000000}.Release|x64.ActiveCfg = Release|Any CPU
{2867B4B3-0000-0000-0000-000000000000}.Release|x64.Build.0 = Release|Any CPU
{2867B4B3-0000-0000-0000-000000000000}.Release|x86.ActiveCfg = Release|Any CPU
{2867B4B3-0000-0000-0000-000000000000}.Release|x86.Build.0 = Release|Any CPU
{2867B4B3-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.ActiveCfg = Release|Any CPU
{2867B4B3-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.Build.0 = Release|Any CPU
{2867B4B3-0000-0000-0000-000000000000}.ReleaseNoGui|x64.ActiveCfg = Release|x64
{2867B4B3-0000-0000-0000-000000000000}.ReleaseNoGui|x64.Build.0 = Release|x64
{2867B4B3-0000-0000-0000-000000000000}.ReleaseNoGui|x86.ActiveCfg = Release|Any CPU
{2867B4B3-0000-0000-0000-000000000000}.ReleaseNoGui|x86.Build.0 = Release|Any CPU
{989E5E15-D99B-4CF1-AF64-90C568FC979A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{989E5E15-D99B-4CF1-AF64-90C568FC979A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{989E5E15-D99B-4CF1-AF64-90C568FC979A}.Debug|x64.ActiveCfg = Debug|Any CPU
{989E5E15-D99B-4CF1-AF64-90C568FC979A}.Debug|x64.Build.0 = Debug|Any CPU
{989E5E15-D99B-4CF1-AF64-90C568FC979A}.Debug|x86.ActiveCfg = Debug|x86
{989E5E15-D99B-4CF1-AF64-90C568FC979A}.Debug|x86.Build.0 = Debug|x86
{989E5E15-D99B-4CF1-AF64-90C568FC979A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{989E5E15-D99B-4CF1-AF64-90C568FC979A}.Release|Any CPU.Build.0 = Release|Any CPU
{989E5E15-D99B-4CF1-AF64-90C568FC979A}.Release|x64.ActiveCfg = Release|Any CPU
{989E5E15-D99B-4CF1-AF64-90C568FC979A}.Release|x64.Build.0 = Release|Any CPU
{989E5E15-D99B-4CF1-AF64-90C568FC979A}.Release|x86.ActiveCfg = Release|Any CPU
{989E5E15-D99B-4CF1-AF64-90C568FC979A}.Release|x86.Build.0 = Release|Any CPU
{989E5E15-D99B-4CF1-AF64-90C568FC979A}.ReleaseNoGui|Any CPU.ActiveCfg = Release|Any CPU
{989E5E15-D99B-4CF1-AF64-90C568FC979A}.ReleaseNoGui|Any CPU.Build.0 = Release|Any CPU
{989E5E15-D99B-4CF1-AF64-90C568FC979A}.ReleaseNoGui|x64.ActiveCfg = Release|Any CPU
{989E5E15-D99B-4CF1-AF64-90C568FC979A}.ReleaseNoGui|x64.Build.0 = Release|Any CPU
{989E5E15-D99B-4CF1-AF64-90C568FC979A}.ReleaseNoGui|x86.ActiveCfg = Release|Any CPU
{989E5E15-D99B-4CF1-AF64-90C568FC979A}.ReleaseNoGui|x86.Build.0 = Release|Any CPU
{FB07C6DE-F791-4336-B6E2-B32EEAC34792}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FB07C6DE-F791-4336-B6E2-B32EEAC34792}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FB07C6DE-F791-4336-B6E2-B32EEAC34792}.Debug|x64.ActiveCfg = Debug|Any CPU
{FB07C6DE-F791-4336-B6E2-B32EEAC34792}.Debug|x64.Build.0 = Debug|Any CPU
{FB07C6DE-F791-4336-B6E2-B32EEAC34792}.Debug|x86.ActiveCfg = Debug|Any CPU
{FB07C6DE-F791-4336-B6E2-B32EEAC34792}.Debug|x86.Build.0 = Debug|Any CPU
{FB07C6DE-F791-4336-B6E2-B32EEAC34792}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FB07C6DE-F791-4336-B6E2-B32EEAC34792}.Release|Any CPU.Build.0 = Release|Any CPU
{FB07C6DE-F791-4336-B6E2-B32EEAC34792}.Release|x64.ActiveCfg = Release|Any CPU
{FB07C6DE-F791-4336-B6E2-B32EEAC34792}.Release|x64.Build.0 = Release|Any CPU
{FB07C6DE-F791-4336-B6E2-B32EEAC34792}.Release|x86.ActiveCfg = Release|Any CPU
{FB07C6DE-F791-4336-B6E2-B32EEAC34792}.Release|x86.Build.0 = Release|Any CPU
{FB07C6DE-F791-4336-B6E2-B32EEAC34792}.ReleaseNoGui|Any CPU.ActiveCfg = Release|Any CPU
{FB07C6DE-F791-4336-B6E2-B32EEAC34792}.ReleaseNoGui|Any CPU.Build.0 = Release|Any CPU
{FB07C6DE-F791-4336-B6E2-B32EEAC34792}.ReleaseNoGui|x64.ActiveCfg = Release|Any CPU
{FB07C6DE-F791-4336-B6E2-B32EEAC34792}.ReleaseNoGui|x64.Build.0 = Release|Any CPU
{FB07C6DE-F791-4336-B6E2-B32EEAC34792}.ReleaseNoGui|x86.ActiveCfg = Release|Any CPU
{FB07C6DE-F791-4336-B6E2-B32EEAC34792}.ReleaseNoGui|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {39A7E333-AFC1-4BA8-9EBC-9298791FDC78}
EndGlobalSection
EndGlobal

View File

@@ -1,10 +1,10 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<AssemblyName>LibreMetaverse.Rendering.Meshmerizer</AssemblyName>
<PackageId>LibreMetaverse.Rendering.Meshmerizer</PackageId>
<Description>Meshmerizer library for rendering mesh assets in LibreMetaverse</Description>
<RootNamespace>LibreMetaverse.Rendering.Meshmerizer</RootNamespace>
<TargetFrameworks>netstandard2.0;netstandard2.1;net5.0</TargetFrameworks>
<TargetFrameworks>netstandard2.0;netstandard2.1;net5.0;net6.0</TargetFrameworks>
<OutputType>Library</OutputType>
<GenerateAssemblyInfo>true</GenerateAssemblyInfo>
<IncludeSymbols>true</IncludeSymbols>

View File

@@ -1,9 +1,9 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<AssemblyName>LibreMetaverse.Rendering.Simple</AssemblyName>
<Description>Simple library for rendering mesh assets in LibreMetaverse</Description>
<PackageId>LibreMetaverse.Rendering.Simple</PackageId>
<TargetFrameworks>netstandard2.0;netstandard2.1;net5.0</TargetFrameworks>
<TargetFrameworks>netstandard2.0;netstandard2.1;net5.0;net6.0</TargetFrameworks>
<OutputType>Library</OutputType>
<RootNamespace>LibreMetaverse.Rendering.Simple</RootNamespace>
<GenerateAssemblyInfo>true</GenerateAssemblyInfo>

View File

@@ -1,9 +1,9 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<AssemblyName>LibreMetaverse.StructuredData</AssemblyName>
<Description>LibreMetaverse structured data library</Description>
<PackageId>LibreMetaverse.StructuredData</PackageId>
<TargetFrameworks>netstandard2.0;netstandard2.1;net5.0</TargetFrameworks>
<TargetFrameworks>netstandard2.0;netstandard2.1;net5.0;net6.0</TargetFrameworks>
<OutputType>Library</OutputType>
<RootNamespace>LibreMetaverse.StructuredData</RootNamespace>
<GenerateAssemblyInfo>true</GenerateAssemblyInfo>

View File

@@ -1,7 +1,8 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<AssemblyName>LibreMetaverse.Tests</AssemblyName>
<TargetFrameworks>netcoreapp3.1;net5.0</TargetFrameworks>
<TargetFrameworks>netcoreapp3.1;net5.0;net6.0</TargetFrameworks>
<!-- <TargetFramework>net6.0</TargetFramework> -->
<OutputType>Library</OutputType>
<RootNamespace>LibreMetaverse.Tests</RootNamespace>
<GenerateAssemblyInfo>true</GenerateAssemblyInfo>

View File

@@ -1,9 +1,9 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<AssemblyName>LibreMetaverse.Types</AssemblyName>
<PackageId>LibreMetaverse.Types</PackageId>
<Description>LibreMetaverse type library</Description>
<TargetFrameworks>netstandard2.0;netstandard2.1;net5.0</TargetFrameworks>
<TargetFrameworks>netstandard2.0;netstandard2.1;net5.0;net6.0</TargetFrameworks>
<OutputType>Library</OutputType>
<RootNamespace>LibreMetaverse</RootNamespace>
<GenerateAssemblyInfo>true</GenerateAssemblyInfo>

View File

@@ -212,13 +212,19 @@ namespace OpenMetaverse
double sSquared = s * s;
if (amount == 0f)
{
result = value1;
}
else if (amount == 1f)
{
result = value2;
}
else
{
result = (2d * v1 - 2d * v2 + t2 + t1) * sCubed +
(3d * v2 - 3d * v1 - 2d * t1 - t2) * sSquared +
t1 * s + v1;
}
return (float)result;
}
@@ -431,7 +437,7 @@ namespace OpenMetaverse
{
return Platform.Windows;
}
return System.IO.File.Exists(OSX_CHECK_FILE)
return System.IO.File.Exists(OSX_CHECK_FILE)
? Platform.OSX : Platform.Linux;
}

View File

@@ -1,9 +1,9 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<AssemblyName>LibreMetaverse.Utilities</AssemblyName>
<PackageId>LibreMetaverse.Utilities</PackageId>
<Description>LibreMetaverse utility library</Description>
<TargetFrameworks>netstandard2.0;netstandard2.1;net5.0</TargetFrameworks>
<TargetFrameworks>netstandard2.0;netstandard2.1;net5.0;net6.0</TargetFrameworks>
<OutputType>Library</OutputType>
<RootNamespace>LibreMetaverse.Utilities</RootNamespace>
<GenerateAssemblyInfo>true</GenerateAssemblyInfo>

View File

@@ -1,4 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<AssemblyName>LibreMetaverse.Voice</AssemblyName>
<PackageId>LibreMetaverse.Voice</PackageId>
@@ -9,7 +9,7 @@
<IncludeSymbols>true</IncludeSymbols>
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
<NoWarn>0419,1574,1591</NoWarn>
<TargetFrameworks>netstandard2.0;netstandard2.1;net5.0</TargetFrameworks>
<TargetFrameworks>netstandard2.0;netstandard2.1;net5.0;net6.0</TargetFrameworks>
<Platforms>x64;x86;AnyCPU</Platforms>
<OutputPath>..\bin\</OutputPath>
</PropertyGroup>

View File

@@ -25,6 +25,7 @@
*/
using System;
using System.Collections;
using System.Net;
using System.Threading;
using OpenMetaverse.StructuredData;
@@ -132,7 +133,7 @@ namespace OpenMetaverse.Http
if (error is WebException webException)
{
// Filter out some of the status requests to skip handling
// Filter out some of the status requests to skip handling
switch (webException.Status)
{
case WebExceptionStatus.RequestCanceled:
@@ -154,12 +155,52 @@ namespace OpenMetaverse.Http
_Dead = true;
break;
case (HttpStatusCode)499: // weird error returned occasionally, ignore for now
// I believe this is the timeout error invented by LL for LSL HTTP-out requests (gwyneth 20220413)
Logger.Log($"Possible HTTP-out timeout error from {_Address}, no need to continue", Helpers.LogLevel.Debug);
_Running = false;
_Dead = true;
break;
case HttpStatusCode.InternalServerError:
// As per LL's instructions, we ought to consider this a
// 'request to close client' (gwyneth 20220413)
Logger.Log($"Grid sent a {code} at {_Address}, closing connection", Helpers.LogLevel.Debug);
// ... but do we happen to have an InnerException? Log it!
if (error.InnerException != null)
{
// unravel the whole inner error message, so we finally figure out what it is!
// (gwyneth 20220414)
Logger.Log($"Unrecognized internal caps exception from {_Address}: '{error.InnerException.Message}'", Helpers.LogLevel.Warning);
Logger.Log("\nMessage ---\n{error.Message}", Helpers.LogLevel.Warning);
Logger.Log("\nHelpLink ---\n{ex.HelpLink}", Helpers.LogLevel.Warning);
Logger.Log("\nSource ---\n{error.Source}", Helpers.LogLevel.Warning);
Logger.Log("\nStackTrace ---\n{error.StackTrace}", Helpers.LogLevel.Warning);
Logger.Log("\nTargetSite ---\n{error.TargetSite}", Helpers.LogLevel.Warning);
if (error.Data.Count > 0)
{
Logger.Log(" Extra details:", Helpers.LogLevel.Warning);
foreach (DictionaryEntry de in error.Data)
Logger.Log(String.Format(" Key: {0,-20} Value: '{1}'",
de.Key, de.Value),
Helpers.LogLevel.Warning);
}
// but we'll nevertheless close this connection (gwyneth 20220414)
}
_Running = false;
_Dead = true;
break;
case HttpStatusCode.BadGateway:
// This is not good (server) protocol design, but it's normal.
// The EventQueue server is a proxy that connects to a Squid
// cache which will time out periodically. The EventQueue server
// interprets this as a generic error and returns a 502 to us
// that we ignore
//
// Note: if this condition persists, it _might_ be the grid trying to request
// that the client closes the connection, as per LL's specs (gwyneth 20220414)
Logger.Log($"Grid sent a Bad Gateway Error at {_Address}; probably a time-out from the grid's EventQueue server (normal) -- ignoring and continuing", Helpers.LogLevel.Debug);
break;
default:
++_errorCount;
@@ -167,14 +208,26 @@ namespace OpenMetaverse.Http
// Try to log a meaningful error message
if (code != HttpStatusCode.OK)
{
Logger.Log($"Unrecognized caps connection problem from {_Address}: {code}",
Logger.Log($"Unrecognized caps connection problem from {_Address}: {code}",
Helpers.LogLevel.Warning);
}
else if (error.InnerException != null)
{
Logger.Log(
$"Unrecognized internal caps exception from {_Address}: {error.InnerException.Message}",
Helpers.LogLevel.Warning);
// see comment above (gwyneth 20220414)
Logger.Log($"Unrecognized internal caps exception from {_Address}: '{error.InnerException.Message}'", Helpers.LogLevel.Warning);
Logger.Log("\nMessage ---\n{error.Message}", Helpers.LogLevel.Warning);
Logger.Log("\nHelpLink ---\n{ex.HelpLink}", Helpers.LogLevel.Warning);
Logger.Log("\nSource ---\n{error.Source}", Helpers.LogLevel.Warning);
Logger.Log("\nStackTrace ---\n{error.StackTrace}", Helpers.LogLevel.Warning);
Logger.Log("\nTargetSite ---\n{error.TargetSite}", Helpers.LogLevel.Warning);
if (error.Data.Count > 0)
{
Logger.Log(" Extra details:", Helpers.LogLevel.Warning);
foreach (DictionaryEntry de in error.Data)
Logger.Log(String.Format(" Key: {0,-20} Value: {1}",
"'" + de.Key + "'", de.Value),
Helpers.LogLevel.Warning);
}
}
else
{
@@ -182,7 +235,7 @@ namespace OpenMetaverse.Http
Helpers.LogLevel.Warning);
}
break;
}
} // end switch
#endregion Error handling
}

View File

@@ -31,10 +31,10 @@ namespace OpenMetaverse
{
/// <summary>
/// The InternalDictionary class is used through the library for storing key/value pairs.
/// It is intended to be a replacement for the generic Dictionary class and should
/// It is intended to be a replacement for the generic Dictionary class and should
/// be used in its place. It contains several methods for allowing access to the data from
/// outside the library that are read only and thread safe.
///
///
/// </summary>
/// <typeparam name="TKey">Key <see langword="Tkey"/></typeparam>
/// <typeparam name="TValue">Value <see langword="TValue"/></typeparam>
@@ -57,7 +57,7 @@ namespace OpenMetaverse
public int Count { get { lock (Dictionary) return Dictionary.Count; } }
/// <summary>
/// Initializes a new instance of the <seealso cref="T:InternalDictionary"/> Class
/// Initializes a new instance of the <seealso cref="T:InternalDictionary"/> Class
/// with the specified key/value, has the default initial capacity.
/// </summary>
/// <example>
@@ -72,8 +72,8 @@ namespace OpenMetaverse
}
/// <summary>
/// Initializes a new instance of the <seealso cref="T:InternalDictionary"/> Class
/// with the specified key/value, has its initial valies copied from the specified
/// Initializes a new instance of the <seealso cref="T:InternalDictionary"/> Class
/// with the specified key/value, has its initial valies copied from the specified
/// <seealso cref="T:System.Collections.Generic.Dictionary"/>
/// </summary>
/// <param name="dictionary"><seealso cref="T:System.Collections.Generic.Dictionary"/>
@@ -82,12 +82,12 @@ namespace OpenMetaverse
/// <code>
/// // initialize a new InternalDictionary named testAvName with a UUID as the key and an string as the value.
/// // populates with copied values from example KeyNameCache Dictionary.
///
///
/// // create source dictionary
/// Dictionary&lt;UUID, string&gt; KeyNameCache = new Dictionary&lt;UUID, string&gt;();
/// KeyNameCache.Add("8300f94a-7970-7810-cf2c-fc9aa6cdda24", "Jack Avatar");
/// KeyNameCache.Add("27ba1e40-13f7-0708-3e98-5819d780bd62", "Jill Avatar");
///
///
/// // Initialize new dictionary.
/// public InternalDictionary&lt;UUID, string&gt; testAvName = new InternalDictionary&lt;UUID, string&gt;(KeyNameCache);
/// </code>
@@ -98,13 +98,13 @@ namespace OpenMetaverse
}
/// <summary>
/// Initializes a new instance of the <seealso cref="T:OpenMetaverse.InternalDictionary"/> Class
/// Initializes a new instance of the <seealso cref="T:OpenMetaverse.InternalDictionary"/> Class
/// with the specified key/value, With its initial capacity specified.
/// </summary>
/// <param name="capacity">Initial size of dictionary</param>
/// <example>
/// <code>
/// // initialize a new InternalDictionary named testDict with a string as the key and an int as the value,
/// // initialize a new InternalDictionary named testDict with a string as the key and an int as the value,
/// // initially allocated room for 10 entries.
/// public InternalDictionary&lt;string, int&gt; testDict = new InternalDictionary&lt;string, int&gt;(10);
/// </code>
@@ -115,7 +115,7 @@ namespace OpenMetaverse
}
/// <summary>
/// Try to get entry from <seealso cref="T:OpenMetaverse.InternalDictionary"/> with specified key
/// Try to get entry from <seealso cref="T:OpenMetaverse.InternalDictionary"/> with specified key
/// </summary>
/// <param name="key">Key to use for lookup</param>
/// <param name="value">Value returned</param>
@@ -176,7 +176,7 @@ namespace OpenMetaverse
/// Vector3 pos = prim.Position;
/// return ((prim.ParentID == 0) &amp;&amp; (pos != Vector3.Zero) &amp;&amp; (Vector3.Distance(pos, location) &lt; radius));
/// }
/// );
/// );
///</code>
///</example>
public List<TValue> FindAll(Predicate<TValue> match)
@@ -203,7 +203,7 @@ namespace OpenMetaverse
/// delegate(UUID id) {
/// return myOtherDict.ContainsKey(id);
/// }
/// );
/// );
///</code>
///</example>
public List<TKey> FindAll(Predicate<TKey> match)
@@ -230,7 +230,7 @@ namespace OpenMetaverse
/// {
/// if (prim.Text != null)
/// {
/// Console.WriteLine("NAME={0} ID = {1} TEXT = '{2}'",
/// Console.WriteLine("NAME={0} ID = {1} TEXT = '{2}'",
/// prim.PropertiesFamily.Name, prim.ID, prim.Text);
/// }
/// });
@@ -292,7 +292,7 @@ namespace OpenMetaverse
}
/// <summary>
/// Adds the specified key to the dictionary, dictionary locking is not performed,
/// Adds the specified key to the dictionary, dictionary locking is not performed,
/// <see cref="SafeAdd"/>
/// </summary>
/// <param name="key">The key</param>
@@ -300,7 +300,7 @@ namespace OpenMetaverse
internal void Add(TKey key, TValue value)
{
lock (Dictionary)
Dictionary.Add(key, value);
Dictionary[key] = value;
}
/// <summary>

View File

@@ -11,7 +11,7 @@
<IncludeSymbols>true</IncludeSymbols>
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
<NoWarn>0419,1574,1591</NoWarn>
<TargetFrameworks>netstandard2.0;netstandard2.1;net5.0</TargetFrameworks>
<TargetFrameworks>netstandard2.0;netstandard2.1;net5.0;net6.0</TargetFrameworks>
<Platforms>x64;x86;AnyCPU</Platforms>
<OutputPath>..\bin\</OutputPath>
</PropertyGroup>

View File

@@ -32,26 +32,26 @@ namespace OpenMetaverse
{
/// <summary>
///
///
/// </summary>
public enum DictionaryEventAction
{
/// <summary>
///
///
/// </summary>
Add,
/// <summary>
///
///
/// </summary>
Remove,
/// <summary>
///
///
/// </summary>
Change
}
/// <summary>
///
///
/// </summary>
/// <param name="action"></param>
/// <param name="entry"></param>
@@ -80,7 +80,7 @@ namespace OpenMetaverse
{
if (Delegates.ContainsKey(action))
{
Delegates[action].Add(callback);
Delegates[action].Add(callback);
}
else
{
@@ -105,13 +105,13 @@ namespace OpenMetaverse
}
/// <summary>
///
///
/// </summary>
/// <param name="action"></param>
/// <param name="entry"></param>
private void FireChangeEvent(DictionaryEventAction action, DictionaryEntry entry)
{
if(Delegates.ContainsKey(action))
{
foreach(DictionaryChangeCallback handler in Delegates[action])
@@ -133,7 +133,7 @@ namespace OpenMetaverse
public int Count { get { return Dictionary.Count; } }
/// <summary>
/// Initializes a new instance of the <seealso cref="T:ObservableDictionary"/> Class
/// Initializes a new instance of the <seealso cref="T:ObservableDictionary"/> Class
/// with the specified key/value, has the default initial capacity.
/// </summary>
/// <example>
@@ -149,13 +149,13 @@ namespace OpenMetaverse
}
/// <summary>
/// Initializes a new instance of the <seealso cref="T:OpenMetaverse.ObservableDictionary"/> Class
/// Initializes a new instance of the <seealso cref="T:OpenMetaverse.ObservableDictionary"/> Class
/// with the specified key/value, With its initial capacity specified.
/// </summary>
/// <param name="capacity">Initial size of dictionary</param>
/// <example>
/// <code>
/// // initialize a new ObservableDictionary named testDict with a string as the key and an int as the value,
/// // initialize a new ObservableDictionary named testDict with a string as the key and an int as the value,
/// // initially allocated room for 10 entries.
/// public ObservableDictionary&lt;string, int&gt; testDict = new ObservableDictionary&lt;string, int&gt;(10);
/// </code>
@@ -167,7 +167,7 @@ namespace OpenMetaverse
}
/// <summary>
/// Try to get entry from the <seealso cref="ObservableDictionary"/> with specified key
/// Try to get entry from the <seealso cref="ObservableDictionary"/> with specified key
/// </summary>
/// <param name="key">Key to use for lookup</param>
/// <param name="value">Value returned</param>
@@ -222,13 +222,13 @@ namespace OpenMetaverse
/// Vector3 pos = prim.Position;
/// return ((prim.ParentID == 0) &amp;&amp; (pos != Vector3.Zero) &amp;&amp; (Vector3.Distance(pos, location) &lt; radius));
/// }
/// );
/// );
///</code>
///</example>
public List<TValue> FindAll(Predicate<TValue> match)
{
List<TValue> found = new List<TValue>();
foreach (KeyValuePair<TKey, TValue> kvp in Dictionary)
{
if (match(kvp.Value))
@@ -247,19 +247,19 @@ namespace OpenMetaverse
/// delegate(UUID id) {
/// return myOtherDict.ContainsKey(id);
/// }
/// );
/// );
///</code>
///</example>
public List<TKey> FindAll(Predicate<TKey> match)
{
List<TKey> found = new List<TKey>();
foreach (KeyValuePair<TKey, TValue> kvp in Dictionary)
{
if (match(kvp.Key))
found.Add(kvp.Key);
}
return found;
}
@@ -268,7 +268,7 @@ namespace OpenMetaverse
/// <returns><see langword="true"/> if found, <see langword="false"/> otherwise</returns>
public bool ContainsKey(TKey key)
{
return Dictionary.ContainsKey(key);
return Dictionary.ContainsKey(key);
}
/// <summary>Check if Value exists in Dictionary</summary>
@@ -276,18 +276,18 @@ namespace OpenMetaverse
/// <returns><see langword="true"/> if found, <see langword="false"/> otherwise</returns>
public bool ContainsValue(TValue value)
{
return Dictionary.ContainsValue(value);
return Dictionary.ContainsValue(value);
}
/// <summary>
/// Adds the specified key to the dictionary, dictionary locking is not performed,
/// Adds the specified key to the dictionary, dictionary locking is not performed,
/// <see cref="SafeAdd"/>
/// </summary>
/// <param name="key">The key</param>
/// <param name="value">The value</param>
public void Add(TKey key, TValue value)
{
Dictionary.Add(key, value);
Dictionary[key] = value;
FireChangeEvent(DictionaryEventAction.Add, new DictionaryEntry(key, value));
}

View File

@@ -1,10 +1,10 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<RootNamespace>LibreMetaverse.PrimMesher</RootNamespace>
<AssemblyName>LibreMetaverse.PrimMesher</AssemblyName>
<PackageId>LibreMetaverse.PrimMesher</PackageId>
<OutputType>Library</OutputType>
<TargetFrameworks>netstandard2.0;netstandard2.1;net5.0</TargetFrameworks>
<TargetFrameworks>netstandard2.0;netstandard2.1;net5.0;net6.0</TargetFrameworks>
<Authors>Dhalia Trimble, Sjofn LLC, OpenMetaverse Developers</Authors>
<GenerateAssemblyInfo>true</GenerateAssemblyInfo>
<IncludeSymbols>true</IncludeSymbols>

View File

@@ -1,12 +1,12 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup Condition=" '$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Windows)))' ">
<TargetFrameworks>net471;net48;netcoreapp3.1;net5.0-windows</TargetFrameworks>
<TargetFrameworks>net471;net48;netcoreapp3.1;net5.0-windows;net6.0-windows</TargetFrameworks>
</PropertyGroup>
<PropertyGroup Condition=" '$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' ">
<TargetFrameworks>netcoreapp3.1</TargetFrameworks>
<TargetFrameworks>net471;netcoreapp3.1;net5.0-linux;net6.0-linux</TargetFrameworks>
</PropertyGroup>
<PropertyGroup Condition=" '$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::OSX)))' ">
<TargetFrameworks>netcoreapp3.1</TargetFrameworks>
<TargetFrameworks>net471;netcoreapp3.1;net5.0-osx;net6.0-osx</TargetFrameworks>
</PropertyGroup>
<PropertyGroup>
<PackageId>Baker</PackageId>

View File

@@ -1,11 +1,11 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<AssemblyName>GridProxy</AssemblyName>
<PackageId>GridProxy</PackageId>
<OutputType>Library</OutputType>
<RootNamespace>GridProxy</RootNamespace>
<GenerateAssemblyInfo>true</GenerateAssemblyInfo>
<TargetFrameworks>netcoreapp3.1;net5.0</TargetFrameworks>
<TargetFrameworks>netcoreapp3.1;net5.0;net6.0</TargetFrameworks>
<Platforms>x64;x86</Platforms>
<OutputPath>..\..\bin\</OutputPath>
<IsPackable>false</IsPackable>

View File

@@ -1,10 +1,10 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<AssemblyName>VoiceTest</AssemblyName>
<OutputType>Exe</OutputType>
<GenerateAssemblyInfo>true</GenerateAssemblyInfo>
<OutputPath>..\..\bin\</OutputPath>
<TargetFrameworks>netcoreapp3.1;net5.0</TargetFrameworks>
<TargetFrameworks>netcoreapp3.1;net5.0;net6.0</TargetFrameworks>
<Platforms>x64;x86;AnyCPU</Platforms>
<IsPackable>false</IsPackable>
</PropertyGroup>

View File

@@ -1,12 +1,12 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup Condition=" '$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Windows)))' ">
<TargetFrameworks>net471;net48;netcoreapp3.1;net5.0-windows</TargetFrameworks>
<TargetFrameworks>net471;netcoreapp3.1;net5.0-windows;net6.0-windows</TargetFrameworks>
</PropertyGroup>
<PropertyGroup Condition=" '$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' ">
<TargetFrameworks>netcoreapp3.1</TargetFrameworks>
<TargetFrameworks>net471;netcoreapp3.1;net5.0-linux;net6.0-linux</TargetFrameworks>
</PropertyGroup>
<PropertyGroup Condition=" '$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::OSX)))' ">
<TargetFrameworks>netcoreapp3.1</TargetFrameworks>
<TargetFrameworks>net471;netcoreapp3.1;net5.0-osx;net6.0-osx</TargetFrameworks>
</PropertyGroup>
<PropertyGroup>
<PackageId>GridAccountant</PackageId>

View File

@@ -1,11 +1,11 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<AssemblyName>IrcGateway</AssemblyName>
<PackageId>IrcGateway</PackageId>
<GenerateAssemblyInfo>true</GenerateAssemblyInfo>
<OutputType>Exe</OutputType>
<OutputPath>..\..\..\bin\</OutputPath>
<TargetFrameworks>netcoreapp3.1;net5.0</TargetFrameworks>
<TargetFrameworks>netcoreapp3.1;net5.0;net6.0</TargetFrameworks>
<Platforms>x64;x86</Platforms>
<IsPackable>false</IsPackable>
</PropertyGroup>

View File

@@ -1,11 +1,11 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<AssemblyName>PacketDump</AssemblyName>
<PackageId>PacketDump</PackageId>
<OutputType>Exe</OutputType>
<GenerateAssemblyInfo>true</GenerateAssemblyInfo>
<OutputPath>..\..\..\bin\</OutputPath>
<TargetFrameworks>netcoreapp3.1;net5.0</TargetFrameworks>
<TargetFrameworks>netcoreapp3.1;net5.0;net6.0</TargetFrameworks>
<Platforms>AnyCPU</Platforms>
<IncludeSymbols>true</IncludeSymbols>
<SymbolPackageFormat>snupkg</SymbolPackageFormat>

View File

@@ -4,7 +4,7 @@
<OutputType>Exe</OutputType>
<GenerateAssemblyInfo>true</GenerateAssemblyInfo>
<OutputPath>..\..\..\bin\</OutputPath>
<TargetFrameworks>netcoreapp3.1;net5.0</TargetFrameworks>
<TargetFrameworks>netcoreapp3.1;net5.0;net6.0</TargetFrameworks>
<Platforms>x64;x86</Platforms>
<IncludeSymbols>true</IncludeSymbols>
<SymbolPackageFormat>snupkg</SymbolPackageFormat>

View File

@@ -1,11 +1,11 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<AssemblyName>MapGenerator</AssemblyName>
<OutputType>Exe</OutputType>
<GenerateAssemblyInfo>true</GenerateAssemblyInfo>
<OutputPath>..\..\bin\</OutputPath>
<PackageId>LibreMetaverse.MapGenerator</PackageId>
<TargetFrameworks>netcoreapp3.1;net5.0</TargetFrameworks>
<TargetFrameworks>netcoreapp3.1;net5.0;net6.0</TargetFrameworks>
<Platforms>AnyCPU</Platforms>
<IncludeSymbols>true</IncludeSymbols>
<SymbolPackageFormat>snupkg</SymbolPackageFormat>

View File

@@ -4,21 +4,52 @@
| | | '_ \ '_/ -_) |\/| | _| | |/ _ \ V /| _|| /\__ \ _|
|_|_|_.__/_| \___|_| |_|___| |_/_/ \_\_/ |___|_|_\|___/___|
```
LibreMetaverse
===============================================================================
# LibreMetaverse
LibreMetaverse is a fork of libOpenMetaverse which in turn was a fork of
libSecondLife, a library for developing Second Life-compatible virtual world
clients. LibreMetavrse returns the focus to up-to-date Second Life and OpenSim
clients. LibreMetaverse returns the focus to up-to-date Second Life and OpenSim
compatibility with an eye to performance, multi-threading, and memory management.
The canonical source for LibreMetaverse can be found at:
https://github.com/cinderblocks/libremetaverse
## Simple installation procedure
### Linux/macOS
- Make sure you have at least `dotnet` installed, with a valid net5.0/net6.0 SDK _and_ runtime available!
- This update includes a solution file to skip the GUI applications (which will run only under Windows anyway). Use `LibreMetaverse.ReleaseNoGUI.sln` instead
- From the root, run `dotnet restore LibreMetaverse.ReleaseNoGUI.sln`. You should get some errors regarding missing Windows libraries; that's ok, you can ignore those, they're to be expected since Linux/macOS do _not_ include such libraries. Some test applications are Windows-only.
If all goes well, you should now have all dependent packages properly installed.
- From the root, run `dotnet msbuild LibreMetaverse.ReleaseNoGUI.sln`, and enjoy the superfast Roslyn compiler at work 😄 It should finish after a few minutes, depending on the speed of your machine.
- Your binaries will be under `../bin/net5.0` or `../bin/net6.0` (there might be a few more directories under `../bin`), depending on what runtimes you have installed on your system. Make sure you `cd` to the correct directory depending on the runtime you have, and then search for all your binaries there: they should be normal-looking executable files (with the `x` attribute set) and having the name of the appropriate test application (e.g. `TestClient` for the interactive testing tool).
- Unlike OpenSimulator, you don't need to launch the binaries with Mono, they're _directly_ executable; the `dotnet` chain already embeds the small runtime that allows .NET apps to run natively on whatever operating system you've got.
### Windows
For Windows, you should use the default `LibreMetaverse.sln`, just as before (untested). For command-line compilation under Windows, if you wish to skip the GUI applications, the instructions are the same as above. Use the default `LibreMetaverse.sln` if you wish to install those as well.
### GUI support under Linux/macOS
Currently unavailable, although there are some reports that this might be possible using a Windows emulator, such as Mono itself, or possibly Wine. This will require some project configuration changes, and was _not_ tested!
## Note: end-of-life support for .NET 5.0
Microsoft is [dropping support for .NET 5.0](https://devblogs.microsoft.com/dotnet/dotnet-5-end-of-support-update/) as of May 2022, so you should consider using .NET 6.0 instead (or, if you're wild, you can test the prerelease of .NET 7.0). The code runs flawlessly on .NET 6.0 as well (Windows GUI version untested)
[![LibreMetaverse NuGet-Release](https://img.shields.io/nuget/v/libremetaverse.svg?label=LibreMetaverse)](https://www.nuget.org/packages/LibreMetaverse/)
[![NuGet Downloads](https://img.shields.io/nuget/dt/LibreMetaverse?label=NuGet%20downloads)](https://www.nuget.org/packages/LibreMetaverse/)
[![Build status](https://ci.appveyor.com/api/projects/status/pga5w0qken2k2nnl?svg=true)](https://ci.appveyor.com/project/cinderblocks57647/libremetaverse-ksbcr)
[![Test status](https://img.shields.io/appveyor/tests/cinderblocks57647/libremetaverse-ksbcr?compact_message&svg=true)](https://ci.appveyor.com/project/cinderblocks57647/libremetaverse-ksbcr)
[![Codacy Badge](https://app.codacy.com/project/badge/Grade/1cb97cd799c64ba49e2721f2ddda56ab)](https://www.codacy.com/gh/cinderblocks/libremetaverse/dashboard?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=cinderblocks/libremetaverse&amp;utm_campaign=Badge_Grade)
[![.NET](https://github.com/cinderblocks/libremetaverse/actions/workflows/dotnet.yml/badge.svg)](https://github.com/cinderblocks/libremetaverse/actions/workflows/dotnet.yml)
[![CodeQL](https://github.com/cinderblocks/libremetaverse/actions/workflows/codeql-analysis.yml/badge.svg)](https://github.com/cinderblocks/libremetaverse/actions/workflows/codeql-analysis.yml)
[![BSD Licensed](https://img.shields.io/github/license/cinderblocks/libremetaverse)](https://github.com/cinderblocks/libremetaverse/blob/master/LICENSE.txt)
[![Commits per month](https://img.shields.io/github/commit-activity/m/cinderblocks/libremetaverse/master)](https://www.github.com/cinderblocks/libremetaverse/)
[![ZEC](https://img.shields.io/keybase/zec/cinder)](https://keybase.io/cinder) [![BTC](https://img.shields.io/keybase/btc/cinder)](https://keybase.io/cinder)

View File

@@ -1,6 +1,6 @@
{
"sdk": {
"version": "5.0.101",
"rollForward": "latestMajor"
"version": "6.0.100",
"rollForward": "latestMinor"
}
}
}