diff --git a/.editorconfig b/.editorconfig index ed3ef24af9..83d18dd356 100644 --- a/.editorconfig +++ b/.editorconfig @@ -199,3 +199,51 @@ dotnet_naming_style.begins_with_i.required_prefix = I dotnet_naming_style.begins_with_i.required_suffix = dotnet_naming_style.begins_with_i.word_separator = dotnet_naming_style.begins_with_i.capitalization = pascal_case +csharp_style_namespace_declarations = block_scoped:silent +csharp_style_prefer_method_group_conversion = true:silent +csharp_style_prefer_top_level_statements = true:silent +csharp_style_prefer_readonly_struct = true:suggestion +csharp_style_prefer_readonly_struct_member = true:suggestion +csharp_style_allow_blank_line_after_token_in_arrow_expression_clause_experimental = true:silent +csharp_style_allow_blank_line_after_token_in_conditional_expression_experimental = true:silent +csharp_style_allow_blank_line_after_colon_in_constructor_initializer_experimental = true:silent +csharp_style_allow_blank_lines_between_consecutive_braces_experimental = true:silent +csharp_style_allow_embedded_statements_on_same_line_experimental = true:silent +csharp_style_prefer_utf8_string_literals = true:suggestion +csharp_style_prefer_tuple_swap = true:suggestion +csharp_style_implicit_object_creation_when_type_is_apparent = true:suggestion +csharp_style_prefer_local_over_anonymous_function = true:suggestion +csharp_style_prefer_null_check_over_type_check = true:suggestion +csharp_style_prefer_pattern_matching = true:silent + +[*.{cs,vb}] +dotnet_style_operator_placement_when_wrapping = beginning_of_line +tab_width = 4 +indent_size = 4 +end_of_line = crlf +dotnet_style_coalesce_expression = true:suggestion +dotnet_style_null_propagation = true:suggestion +dotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion +dotnet_style_readonly_field = true:suggestion +dotnet_style_allow_statement_immediately_after_block_experimental = true:silent +dotnet_style_allow_multiple_blank_lines_experimental = true:silent +dotnet_style_require_accessibility_modifiers = for_non_interface_members:silent +dotnet_style_predefined_type_for_member_access = true:silent +dotnet_style_predefined_type_for_locals_parameters_members = true:silent +dotnet_style_namespace_match_folder = true:suggestion +dotnet_style_prefer_compound_assignment = true:suggestion +dotnet_style_prefer_simplified_interpolation = true:suggestion +dotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion +dotnet_style_prefer_inferred_tuple_names = true:suggestion +dotnet_style_explicit_tuple_names = true:suggestion +dotnet_style_prefer_conditional_expression_over_return = true:silent +dotnet_style_prefer_conditional_expression_over_assignment = true:silent +dotnet_style_prefer_simplified_boolean_expressions = true:suggestion +dotnet_style_object_initializer = true:suggestion +dotnet_style_collection_initializer = true:suggestion +dotnet_style_prefer_auto_properties = true:silent +dotnet_code_quality_unused_parameters = all:suggestion +dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:silent +dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:silent +dotnet_style_parentheses_in_other_operators = never_if_unnecessary:silent +dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:silent \ No newline at end of file diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2132e7e0a8..930a31c82e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,15 +21,15 @@ jobs: DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true DOTNET_NOLOGO: true steps: - - uses: actions/checkout@v3 - - name: Setup .NET 7.0 - uses: actions/setup-dotnet@v3 + - uses: actions/checkout@v4 + - name: Setup .NET 8.0 + uses: actions/setup-dotnet@v4 with: - dotnet-version: 7.0.x + dotnet-version: 8.0.x - name: dotnet restore solution run: dotnet restore Fusee.sln - name: dotnet format solution - run: dotnet format Fusee.sln + run: dotnet format style Fusee.sln - name: Commiting changes uses: stefanzweifel/git-auto-commit-action@v4 with: @@ -48,11 +48,11 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Checkout - uses: actions/checkout@v3 - - name: Setup .NET 7.0 - uses: actions/setup-dotnet@v3 + uses: actions/checkout@v4 + - name: Setup .NET 8.0 + uses: actions/setup-dotnet@v4 with: - dotnet-version: 7.0.x + dotnet-version: 8.0.x - name: AssetStorage run: dotnet test -c Release src/Tests/AssetStorage/Desktop/Fusee.Tests.AssetStorage.Desktop.csproj - name: Math @@ -81,21 +81,21 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Checkout - uses: actions/checkout@v3 - - name: Setup .NET 7.0 - uses: actions/setup-dotnet@v3 + uses: actions/checkout@v4 + - name: Setup .NET 8.0 + uses: actions/setup-dotnet@v4 with: - dotnet-version: 7.0.x + dotnet-version: 8.0.x - name: Render image compare run: dotnet run -c Release --project src/Tests/Render/Desktop/Fusee.Tests.Render.Desktop.csproj - name: Upload artifact - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 if: always() with: name: Rendertests path: | - bin/Release/Tests/Render/Desktop/net7.0/*.png - bin/Release/Tests/Render/Desktop/net7.0/References/*.png + bin/Release/Tests/Render/Desktop/net8.0/*.png + bin/Release/Tests/Render/Desktop/net8.0/References/*.png builddesktop: needs: [tests, rendertests] @@ -110,25 +110,25 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Checkout - uses: actions/checkout@v3 - - name: Setup .NET 7.0 - uses: actions/setup-dotnet@v3 + uses: actions/checkout@v4 + - name: Setup .NET 8.0 + uses: actions/setup-dotnet@v4 with: - dotnet-version: 7.0.x + dotnet-version: 8.0.x - name: Build Release-Desktop run: dotnet build -c Release-Desktop Fusee.sln - name: Upload Player-Artifact - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: fusee-desktop-${{ matrix.os }}-player path: bin/Release/Player/Desktop/ - name: Upload Tool-Artifacts - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: fusee-desktop-${{ matrix.os }}-tools path: bin/Release/Tools/ # - name: Upload Example-Artifacts -# uses: actions/upload-artifact@v3 +# uses: actions/upload-artifact@v4 # with: # name: fusee-desktop-${{ matrix.os }}-examples # path: bin/Release/Examples/**/Desktop/ @@ -147,15 +147,15 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Checkout - uses: actions/checkout@v3 - - name: Setup .NET 7.0 - uses: actions/setup-dotnet@v3 + uses: actions/checkout@v4 + - name: Setup .NET 8.0 + uses: actions/setup-dotnet@v4 with: - dotnet-version: 7.0.x + dotnet-version: 8.0.x - name: Add msbuild to PATH uses: microsoft/setup-msbuild@v1.1 with: - vs-version: '[17.4,]' + vs-version: '[17.9,]' msbuild-architecture: x64 # - name: Setup dotnet macos workload # run: dotnet workload install macos @@ -168,7 +168,7 @@ jobs: # - name: Build F.T.B.Blazorpatch # run: dotnet build -c Release src/Tools/Build/Blazorpatch/Fusee.Tools.Build.Blazorpatch.csproj # - name: Patch Blazor -# run: dotnet bin/Release/Tools/Build/Blazorpatch/net7.0/Fusee.Tools.Build.Blazorpatch.dll -p bin/Release/Player/Blazor/net7.0/publish/wwwroot -t All +# run: dotnet bin/Release/Tools/Build/Blazorpatch/net8.0/Fusee.Tools.Build.Blazorpatch.dll -p bin/Release/Player/Blazor/net8.0/publish/wwwroot -t All - name: Build F.E.Player.Desktop run: dotnet publish -c Release -p:PublishProfile=win-x64-release src\Engine\Player\Desktop\Fusee.Engine.Player.Desktop.csproj - name: Pack Fusee.sln NuGet @@ -188,9 +188,9 @@ jobs: - name: Pack VSTemplate run: msbuild dis\VSTemplate\VSTemplate.sln -t:restore,build -p:Configuration=Release - name: Pack Blender Addon - run: tar -c -a -f bin\Release\nuget\io_export_fus.zip -C bin\Release\Tools\CmdLine\net7.0\BlenderScripts\addons * + run: tar -c -a -f bin\Release\nuget\io_export_fus.zip -C bin\Release\Tools\CmdLine\net8.0\BlenderScripts\addons * - name: Upload NuGet-Atrifacts - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: fusee-nuget-${{ matrix.os }} path: | @@ -211,30 +211,32 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Checkout - uses: actions/checkout@v3 - - name: Setup .NET 7.0 - uses: actions/setup-dotnet@v3 + uses: actions/checkout@v4 + - name: Setup .NET 8.0 + uses: actions/setup-dotnet@v4 with: - dotnet-version: 7.0.x + dotnet-version: 8.0.x - name: Setup dotnet macos workload run: dotnet workload install macos - name: Build Release-Blazor run: dotnet build -c Release-Blazor Fusee.sln - - name: Setup workloads - run: | - dotnet workload install wasm-tools - dotnet workload install wasm-tools-net6 + - name: Setup workloads for Ubuntu + if: matrix.os == 'ubuntu-latest' + run: dotnet workload install wasm-tools + - name: Setup workloads for macOS + if: matrix.os == 'macos-latest' + run: dotnet workload install wasm-tools-net8 - name: Publish F.E.Player.Blazor run: dotnet publish -c Release -p:PublishProfile=FolderProfileRelease src/Engine/Player/Blazor/Fusee.Engine.Player.Blazor.csproj - - name: Build F.T.B.Blazorpatch - run: dotnet build -c Release src/Tools/Build/Blazorpatch/Fusee.Tools.Build.Blazorpatch.csproj - - name: Patch Blazor - run: dotnet bin/Release/Tools/Build/Blazorpatch/net7.0/Fusee.Tools.Build.Blazorpatch.dll -p bin/Release/Player/Blazor/net7.0/publish/wwwroot -t All +# - name: Build F.T.B.Blazorpatch +# run: dotnet build -c Release src/Tools/Build/Blazorpatch/Fusee.Tools.Build.Blazorpatch.csproj +# - name: Patch Blazor +# run: dotnet bin/Release/Tools/Build/Blazorpatch/net8.0/Fusee.Tools.Build.Blazorpatch.dll -p bin/Release/Player/Blazor/net8.0/publish/wwwroot -t All - name: Upload Player-Artifact - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: fusee-blazor-${{ matrix.os }}-player - path: bin/Release/Player/Blazor/net7.0/publish/ + path: bin/Release/Player/Blazor/net8.0/publish/ buildandroid: name: Build Android @@ -245,15 +247,20 @@ jobs: runs-on: windows-latest steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 + - name: Setup-Java + uses: actions/setup-java@v4 + with: + distribution: 'temurin' + java-version: '11' - name: Add msbuild to PATH uses: microsoft/setup-msbuild@v1.1 with: - vs-version: '[17.4,]' - - name: Setup .NET 7.0 - uses: actions/setup-dotnet@v3 + vs-version: '[17.9,]' + - name: Setup .NET 8.0 + uses: actions/setup-dotnet@v4 with: - dotnet-version: 7.0.x + dotnet-version: 8.0.x - name: Build with MSBuild run: msbuild Fusee.sln -r -p:Configuration=Release-Android @@ -270,16 +277,16 @@ jobs: language: [ 'csharp', 'python' ] steps: - name: Checkout repository - uses: actions/checkout@v3 - - name: Setup .NET 7.0 - uses: actions/setup-dotnet@v3 + uses: actions/checkout@v4 + - name: Setup .NET 8.0 + uses: actions/setup-dotnet@v4 with: - dotnet-version: 7.0.x + dotnet-version: 8.0.x - name: Initialize CodeQL - uses: github/codeql-action/init@v2 + uses: github/codeql-action/init@v3 with: languages: ${{ matrix.language }} - name: Build Release-Desktop run: dotnet build -c Release-Desktop Fusee.sln - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v2 + uses: github/codeql-action/analyze@v3 diff --git a/BuildNuget.cmd b/BuildNuget.cmd index c996e2de57..cef9bf5327 100644 --- a/BuildNuget.cmd +++ b/BuildNuget.cmd @@ -41,7 +41,7 @@ dotnet pack dis\DnTemplate\DnTemplate.csproj -c Release -o bin\Release\nuget msbuild dis\VSTemplate\VSTemplate.sln -t:restore,build -p:Configuration=Release copy /Y dis\VSTemplate\VSTemplate\bin\Release\ProjectTemplates\CSharp\1033\Fusee.Template.VS.zip bin\Release\nuget\ >nul copy /Y dis\VSTemplate\VSIX\bin\Release\Fusee.Template.VS.vsix bin\Release\nuget\ >nul -tar -c -a -f bin\Release\nuget\io_export_fus.zip -C bin\Release\Tools\CmdLine\net7.0\BlenderScripts\addons * +tar -c -a -f bin\Release\nuget\io_export_fus.zip -C bin\Release\Tools\CmdLine\net8.0\BlenderScripts\addons * goto END :ERRORDOTNET diff --git a/Directory.Build.props b/Directory.Build.props index 7748f48f0d..72373c91b2 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -13,7 +13,7 @@ 0.13.0 0.13.0 0.13.0 - Copyright 2013-2022 + Copyright 2013-2023 MIT https://fusee3d.org/ true @@ -27,12 +27,14 @@ $(FuseeEngineRoot)\art\Deliverables\FuseeLogo.ico false - 10 + latest true false $(FuseeEngineRoot)\bin\Release\nuget + $(FuseeEngineRoot)\Fusee.ruleset + - - - - - - - - - {5906ABE0-1D62-4F9A-9ABA-B7D301615BB0} - Fusee.Base.Common - - - {7E0C9336-7A38-4C87-97E2-A8D2A90AA29D} - Fusee.Base.Core - - - {19A46A28-9369-4AF2-A8A5-0303D3A0A8C0} - Fusee.Base.Imp.Android - - - {B7FAC89A-4E75-4EAC-BBC3-BBDB89C94B8A} - Fusee.Serialization - - - {10DA02FC-109F-4D71-864A-9F5B1E9A0D70} - Fusee.Xene - - - {DFD770F6-4222-4255-AAE0-DCACDC7B21EB} - Fusee.Engine.Common - - - {1228EB3F-8BCC-453F-8A2E-D9246495A118} - Fusee.Engine.Core - - - {B3CE4F39-FCC4-4388-8130-9D0B9D65D034} - Fusee.Engine.Imp.Graphics.Android - - - {ac71d89c-a7d4-4b2d-b402-e5c6586a5dc9} - Fusee.Examples.AdvancedUI.Core - - - - - - - - - Designer - - - - - Designer - - - - - - - - - - - - - - - - <_FuseeAndroidAssets1 Include="$(OutputPath)\Assets\**\*" /> - - - + + + net8.0-android + 31 + Exe + enable + enable + Fusee.Examples.AdvancedUI.Android + 1 + 1.0 + $(BaseOutputPath)\Examples\AdvancedUI\Android\ + + + + + + + + + + + + + \ No newline at end of file diff --git a/Examples/Complete/AdvancedUI/Android/MainActivity.cs b/Examples/Complete/AdvancedUI/Android/MainActivity.cs index 5de650b53b..afa0727308 100644 --- a/Examples/Complete/AdvancedUI/Android/MainActivity.cs +++ b/Examples/Complete/AdvancedUI/Android/MainActivity.cs @@ -1,9 +1,6 @@ -using Android.App; using Android.Content.PM; -using Android.OS; using Android.Util; using Android.Views; -using Android.Widget; using Fusee.Base.Common; using Fusee.Base.Core; using Fusee.Base.Imp.Android; @@ -11,7 +8,6 @@ using Fusee.Engine.Core.Scene; using Fusee.Engine.Imp.Graphics.Android; using Fusee.Serialization; -using System.IO; using Font = Fusee.Base.Core.Font; namespace Fusee.Examples.AdvancedUI.Android diff --git a/Examples/Complete/AdvancedUI/Android/Properties/AndroidManifest.xml b/Examples/Complete/AdvancedUI/Android/Properties/AndroidManifest.xml index 760b68c264..1f0edcac6e 100644 --- a/Examples/Complete/AdvancedUI/Android/Properties/AndroidManifest.xml +++ b/Examples/Complete/AdvancedUI/Android/Properties/AndroidManifest.xml @@ -2,5 +2,5 @@ - + \ No newline at end of file diff --git a/Examples/Complete/AdvancedUI/Android/Properties/AssemblyInfo.cs b/Examples/Complete/AdvancedUI/Android/Properties/AssemblyInfo.cs deleted file mode 100644 index b0cec547dd..0000000000 --- a/Examples/Complete/AdvancedUI/Android/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,22 +0,0 @@ -using Android.App; -using System.Reflection; -using System.Runtime.CompilerServices; - -// Information about this assembly is defined by the following attributes. -// Change them to the values specific to your project. -[assembly: AssemblyTitle("GLTriangle30")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("")] -[assembly: AssemblyCopyright("mak")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] -// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}". -// The form "{Major}.{Minor}.*" will automatically update the build and revision, -// and "{Major}.{Minor}.{Build}.*" will update just the revision. -[assembly: AssemblyVersion("1.0.0")] -// The following attributes are used to specify the signing key for the assembly, -// if desired. See the Mono documentation for more information about signing. -//[assembly: AssemblyDelaySign(false)] -//[assembly: AssemblyKeyFile("")] \ No newline at end of file diff --git a/Examples/Complete/AdvancedUI/Core/AdvancedUI.cs b/Examples/Complete/AdvancedUI/Core/AdvancedUI.cs index 89d2a33326..e386ee9ad5 100644 --- a/Examples/Complete/AdvancedUI/Core/AdvancedUI.cs +++ b/Examples/Complete/AdvancedUI/Core/AdvancedUI.cs @@ -1,4 +1,4 @@ -using Fusee.Base.Common; +using Fusee.Base.Common; using Fusee.Base.Core; using Fusee.Engine.Common; using Fusee.Engine.Core; @@ -36,7 +36,7 @@ public class AdvancedUI : RenderCanvas private SceneInteractionHandler _sih; private SceneNode _camNode; private Transform _mainCamPivot; - private Camera _mainCam = new(ProjectionMethod.Perspective, 0.1f, 1000, M.PiOver4) + private readonly Camera _mainCam = new(ProjectionMethod.Perspective, 0.1f, 1000, M.PiOver4) { BackgroundColor = new float4(0.1f, 0.1f, 0.1f, 1) }; @@ -156,15 +156,15 @@ public override void Init() _gui = CreateGui(); - // Create the interaction handler - _sih = new SceneInteractionHandler(_gui); - - //Create a scene picker for performing visibility tests - _scenePicker = new ScenePicker(_scene); - // Wrap a SceneRenderer around the model. _sceneRenderer = new SceneRendererForward(_scene); _guiRenderer = new SceneRendererForward(_gui); + + //Create a scene picker for performing visibility tests + _scenePicker = new ScenePicker(_scene, _sceneRenderer.PrePassVisitor.CameraPrepassResults); + + // Create the interaction handler + _sih = new SceneInteractionHandler(_gui, _guiRenderer.PrePassVisitor.CameraPrepassResults); } public override void Update() @@ -235,6 +235,11 @@ public override void RenderAFrame() float4x4 mvpMonkey = projection * view * model; float3 clipPos = float4x4.TransformPerspective(mvpMonkey, uiInput.Position); + // go from clip pos to pixel coordinates + var pixelPos = clipPos * 0.5f + 0.5f; // shift from [-1,1] to [0,1] + pixelPos.y = 1f - pixelPos.y; // invert y + pixelPos.x = pixelPos.x * Width; + pixelPos.y = pixelPos.y * Height; float2 canvasPosCircle = new float2(clipPos.x, clipPos.y) * 0.5f + 0.5f; canvasPosCircle.x *= _canvasWidth; @@ -247,7 +252,8 @@ public override void RenderAFrame() circle.GetComponent().Offsets = GuiElementPosition.CalcOffsets(AnchorPos.Middle, pos, _canvasHeight, _canvasWidth, uiInput.Size); //1.1 Check if circle is visible - PickResult newPick = _scenePicker.Pick(RC, new float2(clipPos.x, clipPos.y)).ToList().OrderBy(pr => pr.ClipPos.z).FirstOrDefault(); + MeshPickResult newPick = (MeshPickResult)_scenePicker.Pick(pixelPos.xy, Width, Height).ToList().OrderBy(pr => pr.ClipPos.z).FirstOrDefault(); + if (newPick != null && uiInput.AffectedTriangles[0] == newPick.Triangle) //VISIBLE { @@ -336,11 +342,11 @@ public override void RenderAFrame() // Constantly check for interactive objects. if (!Mouse.Desc.Contains("Android")) - _sih.CheckForInteractiveObjects(RC, Mouse.Position, Width, Height); + _sih.CheckForInteractiveObjects(Mouse.Position, Width, Height); if (Touch.GetTouchActive(TouchPoints.Touchpoint_0) && !Touch.TwoPoint) { - _sih.CheckForInteractiveObjects(RC, Touch.GetPosition(TouchPoints.Touchpoint_0), Width, Height); + _sih.CheckForInteractiveObjects(Touch.GetPosition(TouchPoints.Touchpoint_0), Width, Height); } Present(); diff --git a/Examples/Complete/AdvancedUI/Core/Fusee.Examples.AdvancedUI.Core.csproj b/Examples/Complete/AdvancedUI/Core/Fusee.Examples.AdvancedUI.Core.csproj index bb45aef9b9..ad4b43cfa2 100644 --- a/Examples/Complete/AdvancedUI/Core/Fusee.Examples.AdvancedUI.Core.csproj +++ b/Examples/Complete/AdvancedUI/Core/Fusee.Examples.AdvancedUI.Core.csproj @@ -1,7 +1,7 @@ - netstandard2.1;net7.0 + net8.0 $(BaseOutputPath)\Examples\AdvancedUI\Core\ diff --git a/Examples/Complete/AdvancedUI/Desktop/Fusee.Examples.AdvancedUI.Desktop.csproj b/Examples/Complete/AdvancedUI/Desktop/Fusee.Examples.AdvancedUI.Desktop.csproj index ae69e3e13a..07f4f461ea 100644 --- a/Examples/Complete/AdvancedUI/Desktop/Fusee.Examples.AdvancedUI.Desktop.csproj +++ b/Examples/Complete/AdvancedUI/Desktop/Fusee.Examples.AdvancedUI.Desktop.csproj @@ -1,7 +1,7 @@  - net7.0 + net8.0 $(BaseOutputPath)\Examples\AdvancedUI\Desktop\ Exe diff --git a/Examples/Complete/Camera/Android/Fusee.Examples.Camera.Android.csproj b/Examples/Complete/Camera/Android/Fusee.Examples.Camera.Android.csproj index 0646d5f7f1..a3c1b0f6a7 100644 --- a/Examples/Complete/Camera/Android/Fusee.Examples.Camera.Android.csproj +++ b/Examples/Complete/Camera/Android/Fusee.Examples.Camera.Android.csproj @@ -1,134 +1,25 @@ - - - - Fusee.Examples.Camera.Android - Fusee.Examples.Camera.Android - Debug - AnyCPU - - $(FuseeEngineRoot)\bin\$(Configuration) - - - ..\..\..\..\bin\$(Configuration) - $(BaseOutputPath)\Examples\Camera\Android - 8.0.30703 - 2.0 - {9D8EE545-4AFA-4164-8235-7FF7F4CA6E5B} - {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Library - Properties - 512 - Properties\AndroidManifest.xml - Resources\Resource.Designer.cs - true - v11.0 - - - True - portable - False - DEBUG;TRACE;PLATFORM_ANDROID - prompt - 4 - None - None - true - True - - False - False - False - armeabi-v7a;x86_64 - - - Xamarin - False - True - - - pdbonly - True - TRACE;PLATFORM_ANDROID - prompt - 4 - False - Full - true - - - - - - - - - - - {5906ABE0-1D62-4F9A-9ABA-B7D301615BB0} - Fusee.Base.Common - - - {7E0C9336-7A38-4C87-97E2-A8D2A90AA29D} - Fusee.Base.Core - - - {19A46A28-9369-4AF2-A8A5-0303D3A0A8C0} - Fusee.Base.Imp.Android - - - {B7FAC89A-4E75-4EAC-BBC3-BBDB89C94B8A} - Fusee.Serialization - - - {10DA02FC-109F-4D71-864A-9F5B1E9A0D70} - Fusee.Xene - - - {DFD770F6-4222-4255-AAE0-DCACDC7B21EB} - Fusee.Engine.Common - - - {1228EB3F-8BCC-453F-8A2E-D9246495A118} - Fusee.Engine.Core - - - {B3CE4F39-FCC4-4388-8130-9D0B9D65D034} - Fusee.Engine.Imp.Graphics.Android - - - {e23994a2-8da9-408a-877a-71e7168fe25d} - Fusee.Examples.Simple.Core - - - - - - - - - Designer - - - - - Designer - - - - - - - - - - - - - - - - <_FuseeAndroidAssets1 Include="$(OutputPath)\Assets\**\*" /> - - - + + + net8.0-android + 31 + Exe + enable + enable + Fusee.Examples.Camera.Android + 1 + 1.0 + $(BaseOutputPath)\Examples\Camera\Android\ + + + + + + + + + + + + + \ No newline at end of file diff --git a/Examples/Complete/Camera/Android/MainActivity.cs b/Examples/Complete/Camera/Android/MainActivity.cs index 19ffe45e1b..ebd071d35b 100644 --- a/Examples/Complete/Camera/Android/MainActivity.cs +++ b/Examples/Complete/Camera/Android/MainActivity.cs @@ -1,9 +1,6 @@ -using Android.App; using Android.Content.PM; -using Android.OS; using Android.Util; using Android.Views; -using Android.Widget; using Fusee.Base.Common; using Fusee.Base.Core; using Fusee.Base.Imp.Android; @@ -11,7 +8,6 @@ using Fusee.Engine.Core.Scene; using Fusee.Engine.Imp.Graphics.Android; using Fusee.Serialization; -using System.IO; using Font = Fusee.Base.Core.Font; namespace Fusee.Examples.Camera.Android diff --git a/Examples/Complete/Camera/Android/Properties/AndroidManifest.xml b/Examples/Complete/Camera/Android/Properties/AndroidManifest.xml index 87f7791a60..82438d0926 100644 --- a/Examples/Complete/Camera/Android/Properties/AndroidManifest.xml +++ b/Examples/Complete/Camera/Android/Properties/AndroidManifest.xml @@ -1,8 +1,6 @@  - - - + \ No newline at end of file diff --git a/Examples/Complete/Camera/Android/Properties/AssemblyInfo.cs b/Examples/Complete/Camera/Android/Properties/AssemblyInfo.cs deleted file mode 100644 index b0cec547dd..0000000000 --- a/Examples/Complete/Camera/Android/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,22 +0,0 @@ -using Android.App; -using System.Reflection; -using System.Runtime.CompilerServices; - -// Information about this assembly is defined by the following attributes. -// Change them to the values specific to your project. -[assembly: AssemblyTitle("GLTriangle30")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("")] -[assembly: AssemblyCopyright("mak")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] -// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}". -// The form "{Major}.{Minor}.*" will automatically update the build and revision, -// and "{Major}.{Minor}.{Build}.*" will update just the revision. -[assembly: AssemblyVersion("1.0.0")] -// The following attributes are used to specify the signing key for the assembly, -// if desired. See the Mono documentation for more information about signing. -//[assembly: AssemblyDelaySign(false)] -//[assembly: AssemblyKeyFile("")] \ No newline at end of file diff --git a/Examples/Complete/Camera/Blazor/App.razor b/Examples/Complete/Camera/Blazor/App.razor index 6f67a6ea61..6fd3ed1b5a 100644 --- a/Examples/Complete/Camera/Blazor/App.razor +++ b/Examples/Complete/Camera/Blazor/App.razor @@ -1,10 +1,12 @@ - + + + Not found -

Sorry, there's nothing at this address.

+

Sorry, there's nothing at this address.

diff --git a/Examples/Complete/Camera/Blazor/Fusee.Examples.Camera.Blazor.csproj b/Examples/Complete/Camera/Blazor/Fusee.Examples.Camera.Blazor.csproj index 339c3470f9..c9afdd2b65 100644 --- a/Examples/Complete/Camera/Blazor/Fusee.Examples.Camera.Blazor.csproj +++ b/Examples/Complete/Camera/Blazor/Fusee.Examples.Camera.Blazor.csproj @@ -1,41 +1,37 @@ - - net7.0 - service-worker-assets.js - false - false - false - disable - AnyCPU - - - $(BaseOutputPath)\Examples\Camera\Blazor\ - + + net8.0 + enable + enable + - - - - - + + $(BaseOutputPath)\Examples\Camera\Blazor\ + - + + + + + + - - + + - - - + + + - - - - - - - - + + + + + + + + - +
\ No newline at end of file diff --git a/Examples/Complete/Camera/Blazor/Layout/MainLayout.razor b/Examples/Complete/Camera/Blazor/Layout/MainLayout.razor new file mode 100644 index 0000000000..08bcd45df2 --- /dev/null +++ b/Examples/Complete/Camera/Blazor/Layout/MainLayout.razor @@ -0,0 +1,8 @@ +@inherits LayoutComponentBase +
+
+
+ @Body +
+
+
diff --git a/Examples/Complete/Picking/Blazor/Shared/MainLayout.razor.css b/Examples/Complete/Camera/Blazor/Layout/MainLayout.razor.css similarity index 69% rename from Examples/Complete/Picking/Blazor/Shared/MainLayout.razor.css rename to Examples/Complete/Camera/Blazor/Layout/MainLayout.razor.css index 43c355a47a..ecf25e5b2e 100644 --- a/Examples/Complete/Picking/Blazor/Shared/MainLayout.razor.css +++ b/Examples/Complete/Camera/Blazor/Layout/MainLayout.razor.css @@ -4,7 +4,7 @@ flex-direction: column; } -.main { +main { flex: 1; } @@ -21,26 +21,27 @@ align-items: center; } - .top-row ::deep a, .top-row .btn-link { + .top-row ::deep a, .top-row ::deep .btn-link { white-space: nowrap; margin-left: 1.5rem; + text-decoration: none; } - .top-row a:first-child { + .top-row ::deep a:hover, .top-row ::deep .btn-link:hover { + text-decoration: underline; + } + + .top-row ::deep a:first-child { overflow: hidden; text-overflow: ellipsis; } @media (max-width: 640.98px) { - .top-row:not(.auth) { - display: none; - } - - .top-row.auth { + .top-row { justify-content: space-between; } - .top-row a, .top-row .btn-link { + .top-row ::deep a, .top-row ::deep .btn-link { margin-left: 0; } } @@ -63,7 +64,13 @@ z-index: 1; } - .main > div { + .top-row.auth ::deep a:first-child { + flex: 1; + text-align: right; + width: 0; + } + + .top-row, article { padding-left: 2rem !important; padding-right: 1.5rem !important; } diff --git a/Examples/Complete/Camera/Blazor/Main.cs b/Examples/Complete/Camera/Blazor/Main.cs index e291921838..83e1059a8b 100644 --- a/Examples/Complete/Camera/Blazor/Main.cs +++ b/Examples/Complete/Camera/Blazor/Main.cs @@ -7,8 +7,6 @@ using Fusee.Serialization; using Microsoft.JSInterop; using ProtoBuf; -using System; -using System.Threading.Tasks; using Path = System.IO.Path; using Stream = System.IO.Stream; @@ -27,7 +25,6 @@ public override void Run() Diagnostics.UseConsoleColor(false); Diagnostics.SetMinDebugOutputLoggingSeverityLevel(Diagnostics.SeverityLevel.Verbose); - base.Run(); // Inject Fusee.Engine.Base InjectMe dependencies @@ -122,7 +119,7 @@ public override void Draw(double elapsedMilliseconds) public override void Resize(int width, int height) { base.Resize(width, height); - _canvasImp.DoResize(width, height); + _canvasImp?.DoResize(width, height); } } } \ No newline at end of file diff --git a/Examples/Complete/Camera/Blazor/Pages/Index.razor b/Examples/Complete/Camera/Blazor/Pages/Index.razor index 8b4e8d2535..5744395bd8 100644 --- a/Examples/Complete/Camera/Blazor/Pages/Index.razor +++ b/Examples/Complete/Camera/Blazor/Pages/Index.razor @@ -1,20 +1,43 @@ @page "/" -@using System.Runtime.CompilerServices @using System.Diagnostics.CodeAnalysis @inject IJSRuntime JS - +@inject ILogger Logger @code { + private string message = "Initial assigned message."; + + protected override void OnInitialized() + { + Logger.LogInformation("OnInitialized(): was called!"); + } protected override async Task OnAfterRenderAsync(bool firstRender) { + Logger.LogInformation("OnAfterRender(1): firstRender: " + + "{FirstRender}, message: {Message}", firstRender, message); + if (firstRender) { var program = new Fusee.Base.Imp.Blazor.BlazorProgramm(); var main = new Main(); program.Start(main, (IJSInProcessRuntime)JS); + + message = "Executed for the first render."; } + else + { + message = "Executed after the first render."; + } + + Logger.LogInformation("OnAfterRender(2): firstRender: " + + "{FirstRender}, message: {Message}", firstRender, message); + await base.OnAfterRenderAsync(firstRender); } + + private void LogInformation() + { + Logger.LogInformation("LogInformation called"); + } } \ No newline at end of file diff --git a/Examples/Complete/Camera/Blazor/Program.cs b/Examples/Complete/Camera/Blazor/Program.cs index a651cd37d5..03bc3e9789 100644 --- a/Examples/Complete/Camera/Blazor/Program.cs +++ b/Examples/Complete/Camera/Blazor/Program.cs @@ -1,21 +1,11 @@ +using Fusee.Examples.Camera.Blazor; +using Microsoft.AspNetCore.Components.Web; using Microsoft.AspNetCore.Components.WebAssembly.Hosting; -using Microsoft.Extensions.DependencyInjection; -using System; -using System.Net.Http; -using System.Threading.Tasks; -namespace Fusee.Examples.Camera.Blazor -{ - public class Program - { - public static async Task Main(string[] args) - { - var builder = WebAssemblyHostBuilder.CreateDefault(args); - builder.RootComponents.Add("#app"); +var builder = WebAssemblyHostBuilder.CreateDefault(args); +builder.RootComponents.Add("#app"); +builder.RootComponents.Add("head::after"); - builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) }); +builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) }); - await builder.Build().RunAsync(); - } - } -} \ No newline at end of file +await builder.Build().RunAsync(); diff --git a/Examples/Complete/Camera/Blazor/Properties/launchSettings.json b/Examples/Complete/Camera/Blazor/Properties/launchSettings.json index c116128b10..9431f241b8 100644 --- a/Examples/Complete/Camera/Blazor/Properties/launchSettings.json +++ b/Examples/Complete/Camera/Blazor/Properties/launchSettings.json @@ -1,20 +1,41 @@ { + "$schema": "http://json.schemastore.org/launchsettings.json", "iisSettings": { "windowsAuthentication": false, "anonymousAuthentication": true, "iisExpress": { - "applicationUrl": "http://localhost:49678", - "sslPort": 44374 + "applicationUrl": "http://localhost:57682", + "sslPort": 44369 } }, "profiles": { - "Fusee.Examples.Camera.Blazor": { + "http": { "commandName": "Project", + "dotnetRunMessages": true, "launchBrowser": true, + "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", + "applicationUrl": "http://localhost:5223", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" - }, - "applicationUrl": "https://localhost:5001;http://localhost:5000" + } + }, + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", + "applicationUrl": "https://localhost:7023;http://localhost:5223", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } } } -} \ No newline at end of file +} diff --git a/Examples/Complete/Camera/Blazor/Shared/MainLayout.razor b/Examples/Complete/Camera/Blazor/Shared/MainLayout.razor deleted file mode 100644 index 3b9976749b..0000000000 --- a/Examples/Complete/Camera/Blazor/Shared/MainLayout.razor +++ /dev/null @@ -1,5 +0,0 @@ -@inherits LayoutComponentBase - -
- @Body -
diff --git a/Examples/Complete/Camera/Blazor/_Imports.razor b/Examples/Complete/Camera/Blazor/_Imports.razor index f760fd3419..09c1aa8ac8 100644 --- a/Examples/Complete/Camera/Blazor/_Imports.razor +++ b/Examples/Complete/Camera/Blazor/_Imports.razor @@ -3,11 +3,8 @@ @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web - @using Microsoft.AspNetCore.Components.Web.Virtualization @using Microsoft.AspNetCore.Components.WebAssembly.Http @using Microsoft.JSInterop @using Fusee.Examples.Camera.Blazor -@using Fusee.Examples.Camera.Blazor.Shared -@using Fusee.Base.Imp.Blazor -@using Fusee.Engine.Imp.Graphics.Blazor \ No newline at end of file +@using Fusee.Examples.Camera.Blazor.Layout diff --git a/Examples/Complete/ThreeDFont/Core/Assets/FuseeIconTop32.png b/Examples/Complete/Camera/Blazor/wwwroot/Assets/FuseeIconTop32.png similarity index 100% rename from Examples/Complete/ThreeDFont/Core/Assets/FuseeIconTop32.png rename to Examples/Complete/Camera/Blazor/wwwroot/Assets/FuseeIconTop32.png diff --git a/Examples/Complete/Camera/Blazor/wwwroot/Assets/Shader/PixelShader.frag b/Examples/Complete/Camera/Blazor/wwwroot/Assets/Shader/PixelShader.frag deleted file mode 100644 index 8b0610e539..0000000000 --- a/Examples/Complete/Camera/Blazor/wwwroot/Assets/Shader/PixelShader.frag +++ /dev/null @@ -1,8 +0,0 @@ -#include "Blinn/Blinn_CalculatePixelColor.frag" - -out vec4 oColor; - -void main(void) -{ - oColor = CalculatePixelColor(); -} \ No newline at end of file diff --git a/Examples/Complete/Camera/Blazor/wwwroot/Assets/Shader/VertexShader.vert b/Examples/Complete/Camera/Blazor/wwwroot/Assets/Shader/VertexShader.vert deleted file mode 100644 index d9e524c785..0000000000 --- a/Examples/Complete/Camera/Blazor/wwwroot/Assets/Shader/VertexShader.vert +++ /dev/null @@ -1,6 +0,0 @@ -#include "Blinn/Blinn_CalculateVertexPosition.vert" - -void main(void) -{ - gl_Position = CalculateVertexPosition(); -} \ No newline at end of file diff --git a/Examples/Complete/Camera/Blazor/wwwroot/Assets/line.frag b/Examples/Complete/Camera/Blazor/wwwroot/Assets/line.frag new file mode 100644 index 0000000000..61dadfad1f --- /dev/null +++ b/Examples/Complete/Camera/Blazor/wwwroot/Assets/line.frag @@ -0,0 +1,11 @@ +#version 460 core + +uniform vec4 Albedo = vec4(1, 0, 1, 1); +uniform bool EnableVertexColors = false; + +in vec4 gColor; +out vec4 fragColor; + +void main() { + fragColor = EnableVertexColors ? gColor : Albedo; +} \ No newline at end of file diff --git a/Examples/Complete/Camera/Blazor/wwwroot/Assets/line.geom b/Examples/Complete/Camera/Blazor/wwwroot/Assets/line.geom new file mode 100644 index 0000000000..95a0748233 --- /dev/null +++ b/Examples/Complete/Camera/Blazor/wwwroot/Assets/line.geom @@ -0,0 +1,55 @@ +#version 460 core + +layout (lines) in;// now we can access 2 vertices +layout (triangle_strip, max_vertices = 4) out;// always (for now) producing 2 triangles (so 4 vertices) + +in vec4 vColor0[]; +out vec4 gColor; + +uniform float Thickness = 4;// just a test default +uniform ivec2 FUSEE_ViewportPx; +uniform mat4 FUSEE_MVP; +uniform bool EnableVertexColors = false; + +void main() +{ + float u_width = float(FUSEE_ViewportPx.x); + float u_height = float(FUSEE_ViewportPx.y); + float u_aspect_ratio = u_height / u_width; + + vec2 ndc_a = gl_in[0].gl_Position.xy / gl_in[0].gl_Position.w; + vec2 ndc_b = gl_in[1].gl_Position.xy / gl_in[1].gl_Position.w; + + vec2 line_vector = ndc_b - ndc_a; + vec2 viewport_line_vector = line_vector * vec2(u_width, u_height); + vec2 dir = normalize(vec2(line_vector.x, line_vector.y * u_aspect_ratio)); + + float line_width = max(1.0, Thickness); + float line_length = length(viewport_line_vector); + + vec2 normal = vec2(-dir.y, dir.x); + vec2 normal_a = vec2(line_width/u_width, line_width/u_height) * normal; + vec2 normal_b = vec2(line_width/u_width, line_width/u_height) * normal; + + if(EnableVertexColors) + gColor = vColor0[0]; + gl_Position = vec4((ndc_a + normal_a) * gl_in[0].gl_Position.w, gl_in[0].gl_Position.zw); + EmitVertex(); + + if(EnableVertexColors) + gColor = vColor0[0]; + gl_Position = vec4((ndc_a - normal_a) * gl_in[0].gl_Position.w, gl_in[0].gl_Position.zw); + EmitVertex(); + + if(EnableVertexColors) + gColor = vColor0[1]; + gl_Position = vec4((ndc_b + normal_b) * gl_in[1].gl_Position.w, gl_in[1].gl_Position.zw); + EmitVertex(); + + if(EnableVertexColors) + gColor = vColor0[1]; + gl_Position = vec4((ndc_b - normal_b) * gl_in[1].gl_Position.w, gl_in[1].gl_Position.zw); + EmitVertex(); + + EndPrimitive(); +} \ No newline at end of file diff --git a/Examples/Complete/Camera/Blazor/wwwroot/Assets/line.vert b/Examples/Complete/Camera/Blazor/wwwroot/Assets/line.vert new file mode 100644 index 0000000000..47f914fe86 --- /dev/null +++ b/Examples/Complete/Camera/Blazor/wwwroot/Assets/line.vert @@ -0,0 +1,24 @@ +#version 460 core + +in vec3 fuVertex; +in vec4 fuColor; + +uniform mat4 FUSEE_MV; +uniform mat4 FUSEE_P; +uniform bool EnableVertexColors = false; + +out vec4 vColor0; + +void main() { + vec4 viewPos = FUSEE_MV * vec4(fuVertex, 1.0); + + //prevent clipping + if (viewPos.z <= 0.0) + { + viewPos.z = 0.001; + } + + if(EnableVertexColors) + vColor0 = fuColor; + gl_Position = FUSEE_P * viewPos; +} \ No newline at end of file diff --git a/Examples/Complete/Camera/Blazor/wwwroot/Assets/lineAdjacency.geom b/Examples/Complete/Camera/Blazor/wwwroot/Assets/lineAdjacency.geom new file mode 100644 index 0000000000..f134918abe --- /dev/null +++ b/Examples/Complete/Camera/Blazor/wwwroot/Assets/lineAdjacency.geom @@ -0,0 +1,95 @@ +#version 460 core + +layout (lines_adjacency) in;// enables access to four vertices (line segment vertices, predecessor, successor) +layout (triangle_strip, max_vertices = 256) out; + +in vec4 vColor0[]; +out vec4 gColor; + +uniform float Thickness = 4;// just a test default +uniform ivec2 FUSEE_ViewportPx; +uniform mat4 FUSEE_MVP; +uniform bool EnableVertexColors = false; + +void main() +{ + float u_width = float(FUSEE_ViewportPx.x); + float u_height = float(FUSEE_ViewportPx.y); + float u_aspect_ratio = u_height / u_width; + vec2 Viewport = vec2(u_width, u_height); + float line_width = max(1.0, Thickness); + vec4 pos0 = gl_in[0].gl_Position; + vec4 pos1 = gl_in[1].gl_Position; + vec4 pos2 = gl_in[2].gl_Position; + vec4 pos3 = gl_in[3].gl_Position; + + //ndc + vec2 ndc0 = gl_in[0].gl_Position.xy / gl_in[0].gl_Position.w; + vec2 ndc1 = gl_in[1].gl_Position.xy / gl_in[1].gl_Position.w; + vec2 ndc2 = gl_in[2].gl_Position.xy / gl_in[2].gl_Position.w; + vec2 ndc3 = gl_in[3].gl_Position.xy / gl_in[3].gl_Position.w; + + //direction of the three segments (previous, current, next) */ + vec2 line_vector0 = ndc1 - ndc0; + vec2 line_vector1 = ndc2 - ndc1; + vec2 line_vector2 = ndc3 - ndc2; + vec2 dir0 = normalize(vec2(line_vector0.x, line_vector0.y * u_aspect_ratio)); + vec2 dir1 = normalize(vec2(line_vector1.x, line_vector1.y * u_aspect_ratio)); + vec2 dir2 = normalize(vec2(line_vector2.x, line_vector2.y * u_aspect_ratio)); + + //normals of the three segments (previous, current, next) + vec2 n0 = vec2( -dir0.y, dir0.x ); + vec2 n1 = vec2( -dir1.y, dir1.x ); + vec2 n2 = vec2( -dir2.y, dir2.x ); + + // determine miter lines by averaging the normals of the 2 segments + vec2 miter_a = normalize( n0 + n1 );// miter at start of current segment + vec2 miter_b = normalize( n1 + n2 );// miter at end of current segment + + // determine the length of the miter by projecting it onto normal and then inverse it + float an1 = dot(miter_a, n1); + float bn1 = dot(miter_b, n2); + if (an1==0) an1 = 1; + if (bn1==0) bn1 = 1; + + float length_a = line_width / an1; + if( dot(dir0, dir1 ) < -0.1/*MiterLimit*/) + { + miter_a = n1; + length_a = Thickness; + } + + float length_b = line_width / bn1; + if( dot(dir1, dir2) < -0.1/*MiterLimit*/) { + miter_b = n1; + length_b = Thickness; + } + + n0 = vec2(line_width/u_width, line_width/u_height) * n0; + n1 = vec2(line_width/u_width, line_width/u_height) * n1; + n2 = vec2(line_width/u_width, line_width/u_height) * n2; + miter_a = vec2(length_a/u_width, length_a/u_height) * miter_a; + miter_b = vec2(length_b/u_width, length_b/u_height) * miter_b; + + if(EnableVertexColors) + gColor = vColor0[0]; + gl_Position = vec4((ndc1 + miter_a) * pos1.w, pos1.zw); + EmitVertex(); + + if(EnableVertexColors) + gColor = vColor0[0]; + gl_Position = vec4((ndc1 - miter_a) * pos1.w, pos1.zw); + EmitVertex(); + + if(EnableVertexColors) + gColor = vColor0[1]; + gl_Position = vec4((ndc2 + miter_b) * pos2.w, pos2.zw); + EmitVertex(); + + if(EnableVertexColors) + gColor = vColor0[1]; + gl_Position = vec4((ndc2 - miter_b) * pos2.w, pos2.zw); + EmitVertex(); + + EndPrimitive(); +} \ No newline at end of file diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.AspNetCore.Authorization.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.AspNetCore.Authorization.dll deleted file mode 100644 index 0fcca6f3b7..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.AspNetCore.Authorization.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.AspNetCore.Components.Forms.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.AspNetCore.Components.Forms.dll deleted file mode 100644 index 98c83415ec..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.AspNetCore.Components.Forms.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.AspNetCore.Components.Web.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.AspNetCore.Components.Web.dll deleted file mode 100644 index 49240666a1..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.AspNetCore.Components.Web.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.AspNetCore.Components.WebAssembly.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.AspNetCore.Components.WebAssembly.dll deleted file mode 100644 index 03a467d8c9..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.AspNetCore.Components.WebAssembly.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.AspNetCore.Components.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.AspNetCore.Components.dll deleted file mode 100644 index 8bc8bc1863..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.AspNetCore.Components.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.AspNetCore.Metadata.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.AspNetCore.Metadata.dll deleted file mode 100644 index 83d35fa450..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.AspNetCore.Metadata.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.CSharp.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.CSharp.dll deleted file mode 100644 index 60da2d01dd..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.CSharp.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.Configuration.Abstractions.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.Configuration.Abstractions.dll deleted file mode 100644 index c9da0ee140..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.Configuration.Abstractions.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.Configuration.Binder.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.Configuration.Binder.dll deleted file mode 100644 index 547f622a84..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.Configuration.Binder.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.Configuration.FileExtensions.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.Configuration.FileExtensions.dll deleted file mode 100644 index dc17b548a9..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.Configuration.FileExtensions.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.Configuration.Json.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.Configuration.Json.dll deleted file mode 100644 index ee8f6cd466..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.Configuration.Json.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.Configuration.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.Configuration.dll deleted file mode 100644 index 856e7c2e22..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.Configuration.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.DependencyInjection.Abstractions.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.DependencyInjection.Abstractions.dll deleted file mode 100644 index 0eb728cc8a..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.DependencyInjection.Abstractions.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.DependencyInjection.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.DependencyInjection.dll deleted file mode 100644 index 86ab7d2de0..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.DependencyInjection.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.FileProviders.Abstractions.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.FileProviders.Abstractions.dll deleted file mode 100644 index 4c8b346f00..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.FileProviders.Abstractions.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.FileProviders.Physical.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.FileProviders.Physical.dll deleted file mode 100644 index 92c3d654c7..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.FileProviders.Physical.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.FileSystemGlobbing.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.FileSystemGlobbing.dll deleted file mode 100644 index 3c01af84fe..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.FileSystemGlobbing.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.Logging.Abstractions.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.Logging.Abstractions.dll deleted file mode 100644 index a9a16f431b..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.Logging.Abstractions.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.Logging.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.Logging.dll deleted file mode 100644 index d132872c7b..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.Logging.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.Options.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.Options.dll deleted file mode 100644 index 89de3610cf..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.Options.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.Primitives.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.Primitives.dll deleted file mode 100644 index befa607e66..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Extensions.Primitives.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.JSInterop.WebAssembly.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.JSInterop.WebAssembly.dll deleted file mode 100644 index 431affdeeb..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.JSInterop.WebAssembly.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.JSInterop.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.JSInterop.dll deleted file mode 100644 index 8783527a30..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.JSInterop.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.VisualBasic.Core.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.VisualBasic.Core.dll deleted file mode 100644 index 5d99f81f8d..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.VisualBasic.Core.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.VisualBasic.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.VisualBasic.dll deleted file mode 100644 index 583b36123e..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.VisualBasic.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Win32.Primitives.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Win32.Primitives.dll deleted file mode 100644 index 1fdb499550..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Win32.Primitives.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Win32.Registry.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Win32.Registry.dll deleted file mode 100644 index 70e23abe59..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Microsoft.Win32.Registry.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Mono.WebAssembly.Interop.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/Mono.WebAssembly.Interop.dll deleted file mode 100644 index a761f091d1..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/Mono.WebAssembly.Interop.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/SharpFontManaged.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/SharpFontManaged.dll deleted file mode 100644 index de3b06c4d5..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/SharpFontManaged.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.AppContext.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.AppContext.dll deleted file mode 100644 index 77c26430b2..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.AppContext.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Buffers.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Buffers.dll deleted file mode 100644 index 4b75e71f54..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Buffers.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Collections.Concurrent.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Collections.Concurrent.dll deleted file mode 100644 index a5eebae0b4..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Collections.Concurrent.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Collections.Immutable.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Collections.Immutable.dll deleted file mode 100644 index 87f365c2cf..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Collections.Immutable.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Collections.NonGeneric.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Collections.NonGeneric.dll deleted file mode 100644 index 8a6290c6ba..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Collections.NonGeneric.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Collections.Specialized.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Collections.Specialized.dll deleted file mode 100644 index ef7ef57d0e..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Collections.Specialized.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Collections.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Collections.dll deleted file mode 100644 index 569db2ec5e..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Collections.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ComponentModel.Annotations.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ComponentModel.Annotations.dll deleted file mode 100644 index e1552e9635..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ComponentModel.Annotations.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ComponentModel.DataAnnotations.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ComponentModel.DataAnnotations.dll deleted file mode 100644 index 77955e7928..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ComponentModel.DataAnnotations.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ComponentModel.EventBasedAsync.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ComponentModel.EventBasedAsync.dll deleted file mode 100644 index a17a6dab43..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ComponentModel.EventBasedAsync.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ComponentModel.Primitives.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ComponentModel.Primitives.dll deleted file mode 100644 index 7488ee6b89..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ComponentModel.Primitives.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ComponentModel.TypeConverter.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ComponentModel.TypeConverter.dll deleted file mode 100644 index e8ccde816b..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ComponentModel.TypeConverter.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ComponentModel.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ComponentModel.dll deleted file mode 100644 index 01e21562a7..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ComponentModel.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Configuration.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Configuration.dll deleted file mode 100644 index 61eb6a9c8f..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Configuration.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Console.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Console.dll deleted file mode 100644 index f46b862a00..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Console.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Core.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Core.dll deleted file mode 100644 index 6d3e198ce0..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Core.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Data.Common.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Data.Common.dll deleted file mode 100644 index 9efd9cc9bd..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Data.Common.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Data.DataSetExtensions.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Data.DataSetExtensions.dll deleted file mode 100644 index 959dbee6d0..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Data.DataSetExtensions.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Data.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Data.dll deleted file mode 100644 index c141a7b799..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Data.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.Contracts.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.Contracts.dll deleted file mode 100644 index 371abd373a..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.Contracts.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.Debug.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.Debug.dll deleted file mode 100644 index 468608936e..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.Debug.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.DiagnosticSource.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.DiagnosticSource.dll deleted file mode 100644 index e09840443b..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.DiagnosticSource.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.FileVersionInfo.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.FileVersionInfo.dll deleted file mode 100644 index 0556d5f5d9..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.FileVersionInfo.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.Process.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.Process.dll deleted file mode 100644 index f34eb73af6..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.Process.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.StackTrace.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.StackTrace.dll deleted file mode 100644 index caf7d4809e..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.StackTrace.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.TextWriterTraceListener.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.TextWriterTraceListener.dll deleted file mode 100644 index 5c62c4652c..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.TextWriterTraceListener.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.Tools.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.Tools.dll deleted file mode 100644 index 79e997a3c8..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.Tools.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.TraceSource.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.TraceSource.dll deleted file mode 100644 index ae22edc713..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.TraceSource.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.Tracing.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.Tracing.dll deleted file mode 100644 index 157f983349..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Diagnostics.Tracing.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Drawing.Primitives.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Drawing.Primitives.dll deleted file mode 100644 index caa84df2c2..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Drawing.Primitives.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Drawing.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Drawing.dll deleted file mode 100644 index bae4a9f6c0..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Drawing.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Dynamic.Runtime.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Dynamic.Runtime.dll deleted file mode 100644 index 042fd66006..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Dynamic.Runtime.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Formats.Asn1.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Formats.Asn1.dll deleted file mode 100644 index ed8bb6ec18..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Formats.Asn1.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Globalization.Calendars.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Globalization.Calendars.dll deleted file mode 100644 index 30804991c4..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Globalization.Calendars.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Globalization.Extensions.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Globalization.Extensions.dll deleted file mode 100644 index 88678bf760..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Globalization.Extensions.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Globalization.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Globalization.dll deleted file mode 100644 index 21d4cccca1..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Globalization.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.Compression.Brotli.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.Compression.Brotli.dll deleted file mode 100644 index 5d2f6eaec7..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.Compression.Brotli.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.Compression.FileSystem.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.Compression.FileSystem.dll deleted file mode 100644 index e4b641ae00..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.Compression.FileSystem.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.Compression.ZipFile.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.Compression.ZipFile.dll deleted file mode 100644 index 2aba28e753..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.Compression.ZipFile.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.Compression.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.Compression.dll deleted file mode 100644 index 3502cc211e..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.Compression.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.FileSystem.AccessControl.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.FileSystem.AccessControl.dll deleted file mode 100644 index d91a177e9c..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.FileSystem.AccessControl.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.FileSystem.DriveInfo.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.FileSystem.DriveInfo.dll deleted file mode 100644 index bd70932a12..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.FileSystem.DriveInfo.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.FileSystem.Primitives.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.FileSystem.Primitives.dll deleted file mode 100644 index fdd2c7b446..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.FileSystem.Primitives.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.FileSystem.Watcher.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.FileSystem.Watcher.dll deleted file mode 100644 index b3f0cb0712..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.FileSystem.Watcher.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.FileSystem.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.FileSystem.dll deleted file mode 100644 index f8a545ca1e..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.FileSystem.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.IsolatedStorage.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.IsolatedStorage.dll deleted file mode 100644 index 913095d3f0..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.IsolatedStorage.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.MemoryMappedFiles.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.MemoryMappedFiles.dll deleted file mode 100644 index 9bc7f8456d..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.MemoryMappedFiles.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.Pipelines.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.Pipelines.dll deleted file mode 100644 index 74811b7125..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.Pipelines.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.Pipes.AccessControl.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.Pipes.AccessControl.dll deleted file mode 100644 index d147cf2436..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.Pipes.AccessControl.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.Pipes.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.Pipes.dll deleted file mode 100644 index a290d31e0a..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.Pipes.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.UnmanagedMemoryStream.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.UnmanagedMemoryStream.dll deleted file mode 100644 index 1d23401619..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.UnmanagedMemoryStream.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.dll deleted file mode 100644 index c0fec502ef..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.IO.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Linq.Expressions.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Linq.Expressions.dll deleted file mode 100644 index c01313755a..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Linq.Expressions.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Linq.Parallel.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Linq.Parallel.dll deleted file mode 100644 index b6f1964765..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Linq.Parallel.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Linq.Queryable.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Linq.Queryable.dll deleted file mode 100644 index 7502256c46..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Linq.Queryable.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Linq.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Linq.dll deleted file mode 100644 index 4443f7a1de..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Linq.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Memory.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Memory.dll deleted file mode 100644 index d80c59f58c..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Memory.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.Http.Json.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.Http.Json.dll deleted file mode 100644 index fedabfa04a..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.Http.Json.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.Http.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.Http.dll deleted file mode 100644 index 85a9a549c0..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.Http.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.HttpListener.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.HttpListener.dll deleted file mode 100644 index 59a432f3b3..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.HttpListener.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.Mail.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.Mail.dll deleted file mode 100644 index 146d3ae5e8..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.Mail.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.NameResolution.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.NameResolution.dll deleted file mode 100644 index 56a379d3e1..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.NameResolution.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.NetworkInformation.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.NetworkInformation.dll deleted file mode 100644 index 309afe171c..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.NetworkInformation.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.Ping.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.Ping.dll deleted file mode 100644 index 20999f0c2d..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.Ping.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.Primitives.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.Primitives.dll deleted file mode 100644 index 9855bd2516..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.Primitives.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.Quic.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.Quic.dll deleted file mode 100644 index d91360c638..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.Quic.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.Requests.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.Requests.dll deleted file mode 100644 index d932f29341..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.Requests.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.Security.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.Security.dll deleted file mode 100644 index b122cd5b86..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.Security.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.ServicePoint.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.ServicePoint.dll deleted file mode 100644 index a5f1b121d9..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.ServicePoint.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.Sockets.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.Sockets.dll deleted file mode 100644 index 543f853104..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.Sockets.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.WebClient.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.WebClient.dll deleted file mode 100644 index 2ad44437a0..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.WebClient.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.WebHeaderCollection.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.WebHeaderCollection.dll deleted file mode 100644 index c7b5034d5c..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.WebHeaderCollection.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.WebProxy.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.WebProxy.dll deleted file mode 100644 index b913d924b8..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.WebProxy.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.WebSockets.Client.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.WebSockets.Client.dll deleted file mode 100644 index 66fa472a7f..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.WebSockets.Client.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.WebSockets.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.WebSockets.dll deleted file mode 100644 index 100130e076..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.WebSockets.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.dll deleted file mode 100644 index 197c44a5e2..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Net.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Numerics.Vectors.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Numerics.Vectors.dll deleted file mode 100644 index 042cde451d..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Numerics.Vectors.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Numerics.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Numerics.dll deleted file mode 100644 index 21ded7acb7..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Numerics.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ObjectModel.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ObjectModel.dll deleted file mode 100644 index 5ea2468beb..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ObjectModel.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Private.CoreLib.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Private.CoreLib.dll deleted file mode 100644 index ba0004e2b2..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Private.CoreLib.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Private.DataContractSerialization.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Private.DataContractSerialization.dll deleted file mode 100644 index 94c1267a78..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Private.DataContractSerialization.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Private.Runtime.InteropServices.JavaScript.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Private.Runtime.InteropServices.JavaScript.dll deleted file mode 100644 index 91f7003549..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Private.Runtime.InteropServices.JavaScript.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Private.Uri.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Private.Uri.dll deleted file mode 100644 index 81f35cf335..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Private.Uri.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Private.Xml.Linq.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Private.Xml.Linq.dll deleted file mode 100644 index 233bb6762d..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Private.Xml.Linq.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Private.Xml.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Private.Xml.dll deleted file mode 100644 index df5614a795..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Private.Xml.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Reflection.DispatchProxy.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Reflection.DispatchProxy.dll deleted file mode 100644 index 7b28892927..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Reflection.DispatchProxy.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Reflection.Emit.ILGeneration.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Reflection.Emit.ILGeneration.dll deleted file mode 100644 index 7dadba587f..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Reflection.Emit.ILGeneration.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Reflection.Emit.Lightweight.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Reflection.Emit.Lightweight.dll deleted file mode 100644 index e525bcc57d..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Reflection.Emit.Lightweight.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Reflection.Emit.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Reflection.Emit.dll deleted file mode 100644 index ea8aa432b3..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Reflection.Emit.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Reflection.Extensions.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Reflection.Extensions.dll deleted file mode 100644 index d7eb56e5ed..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Reflection.Extensions.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Reflection.Metadata.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Reflection.Metadata.dll deleted file mode 100644 index 9e2ffa5634..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Reflection.Metadata.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Reflection.Primitives.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Reflection.Primitives.dll deleted file mode 100644 index b7a7072e86..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Reflection.Primitives.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Reflection.TypeExtensions.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Reflection.TypeExtensions.dll deleted file mode 100644 index a39ee9533a..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Reflection.TypeExtensions.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Reflection.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Reflection.dll deleted file mode 100644 index 43364c0d33..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Reflection.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Resources.Reader.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Resources.Reader.dll deleted file mode 100644 index 030b64568b..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Resources.Reader.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Resources.ResourceManager.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Resources.ResourceManager.dll deleted file mode 100644 index b68a8dbe55..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Resources.ResourceManager.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Resources.Writer.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Resources.Writer.dll deleted file mode 100644 index 7e059fb307..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Resources.Writer.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.CompilerServices.Unsafe.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.CompilerServices.Unsafe.dll deleted file mode 100644 index 57d2b4560f..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.CompilerServices.Unsafe.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.CompilerServices.VisualC.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.CompilerServices.VisualC.dll deleted file mode 100644 index 1520f9f509..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.CompilerServices.VisualC.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Extensions.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Extensions.dll deleted file mode 100644 index 1feb16a05f..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Extensions.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Handles.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Handles.dll deleted file mode 100644 index af82d8aab5..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Handles.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.InteropServices.RuntimeInformation.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.InteropServices.RuntimeInformation.dll deleted file mode 100644 index 62553ed915..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.InteropServices.RuntimeInformation.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.InteropServices.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.InteropServices.dll deleted file mode 100644 index fd49ab4fa9..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.InteropServices.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Intrinsics.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Intrinsics.dll deleted file mode 100644 index 1a08cf68d9..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Intrinsics.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Loader.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Loader.dll deleted file mode 100644 index f861d3a0f8..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Loader.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Numerics.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Numerics.dll deleted file mode 100644 index 93fa6f662c..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Numerics.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Serialization.Formatters.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Serialization.Formatters.dll deleted file mode 100644 index 21f8c171ca..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Serialization.Formatters.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Serialization.Json.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Serialization.Json.dll deleted file mode 100644 index c00aedc175..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Serialization.Json.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Serialization.Primitives.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Serialization.Primitives.dll deleted file mode 100644 index 267db79373..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Serialization.Primitives.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Serialization.Xml.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Serialization.Xml.dll deleted file mode 100644 index 548e85e2a0..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Serialization.Xml.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Serialization.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Serialization.dll deleted file mode 100644 index 7487f75fa5..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.Serialization.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.dll deleted file mode 100644 index fcc59106ad..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Runtime.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.AccessControl.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.AccessControl.dll deleted file mode 100644 index 78bd16e1cc..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.AccessControl.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Claims.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Claims.dll deleted file mode 100644 index 7d607e0da0..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Claims.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Cryptography.Algorithms.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Cryptography.Algorithms.dll deleted file mode 100644 index 8bf434adc3..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Cryptography.Algorithms.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Cryptography.Cng.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Cryptography.Cng.dll deleted file mode 100644 index 5bc6069497..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Cryptography.Cng.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Cryptography.Csp.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Cryptography.Csp.dll deleted file mode 100644 index 4cf3830ebb..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Cryptography.Csp.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Cryptography.Encoding.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Cryptography.Encoding.dll deleted file mode 100644 index e0000aff6e..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Cryptography.Encoding.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Cryptography.OpenSsl.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Cryptography.OpenSsl.dll deleted file mode 100644 index 5d5645e8c8..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Cryptography.OpenSsl.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Cryptography.Primitives.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Cryptography.Primitives.dll deleted file mode 100644 index 1d591ae820..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Cryptography.Primitives.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Cryptography.X509Certificates.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Cryptography.X509Certificates.dll deleted file mode 100644 index a351884fc4..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Cryptography.X509Certificates.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Principal.Windows.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Principal.Windows.dll deleted file mode 100644 index 107637b012..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Principal.Windows.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Principal.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Principal.dll deleted file mode 100644 index ec72940be9..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.Principal.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.SecureString.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.SecureString.dll deleted file mode 100644 index 6cb21adf2a..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.SecureString.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.dll deleted file mode 100644 index 14a91aeb10..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Security.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ServiceModel.Web.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ServiceModel.Web.dll deleted file mode 100644 index d80d3e0b02..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ServiceModel.Web.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ServiceProcess.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ServiceProcess.dll deleted file mode 100644 index 2adf58202c..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ServiceProcess.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Text.Encoding.CodePages.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Text.Encoding.CodePages.dll deleted file mode 100644 index 5a5837a81d..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Text.Encoding.CodePages.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Text.Encoding.Extensions.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Text.Encoding.Extensions.dll deleted file mode 100644 index cc4e8b098a..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Text.Encoding.Extensions.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Text.Encoding.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Text.Encoding.dll deleted file mode 100644 index 0ee288c4fc..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Text.Encoding.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Text.Encodings.Web.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Text.Encodings.Web.dll deleted file mode 100644 index 3c52c7c0f6..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Text.Encodings.Web.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Text.Json.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Text.Json.dll deleted file mode 100644 index ee9f9e28d4..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Text.Json.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Text.RegularExpressions.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Text.RegularExpressions.dll deleted file mode 100644 index a0d0c3df5b..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Text.RegularExpressions.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.Channels.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.Channels.dll deleted file mode 100644 index 0e8139e54e..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.Channels.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.Overlapped.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.Overlapped.dll deleted file mode 100644 index 9ed5b6eb81..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.Overlapped.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.Tasks.Dataflow.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.Tasks.Dataflow.dll deleted file mode 100644 index 7f628bc8a8..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.Tasks.Dataflow.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.Tasks.Extensions.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.Tasks.Extensions.dll deleted file mode 100644 index b5ec56f6aa..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.Tasks.Extensions.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.Tasks.Parallel.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.Tasks.Parallel.dll deleted file mode 100644 index c946153098..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.Tasks.Parallel.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.Tasks.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.Tasks.dll deleted file mode 100644 index 050b33f807..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.Tasks.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.Thread.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.Thread.dll deleted file mode 100644 index 88102cfb90..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.Thread.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.ThreadPool.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.ThreadPool.dll deleted file mode 100644 index 2b4892942b..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.ThreadPool.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.Timer.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.Timer.dll deleted file mode 100644 index 62a2b53fb4..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.Timer.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.dll deleted file mode 100644 index 86a749c856..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Threading.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Transactions.Local.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Transactions.Local.dll deleted file mode 100644 index 99dd4ba087..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Transactions.Local.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Transactions.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Transactions.dll deleted file mode 100644 index 3c6d1d1b54..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Transactions.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ValueTuple.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ValueTuple.dll deleted file mode 100644 index 8289674387..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.ValueTuple.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Web.HttpUtility.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Web.HttpUtility.dll deleted file mode 100644 index 031a9705f0..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Web.HttpUtility.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Web.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Web.dll deleted file mode 100644 index d48482da36..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Web.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Windows.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Windows.dll deleted file mode 100644 index 6a0805e688..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Windows.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Xml.Linq.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Xml.Linq.dll deleted file mode 100644 index 73ad661f65..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Xml.Linq.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Xml.ReaderWriter.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Xml.ReaderWriter.dll deleted file mode 100644 index 4d4bdd68da..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Xml.ReaderWriter.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Xml.Serialization.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Xml.Serialization.dll deleted file mode 100644 index 180437bb40..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Xml.Serialization.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Xml.XDocument.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Xml.XDocument.dll deleted file mode 100644 index 1aa86f9f2b..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Xml.XDocument.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Xml.XPath.XDocument.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Xml.XPath.XDocument.dll deleted file mode 100644 index dc7c3e79df..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Xml.XPath.XDocument.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Xml.XPath.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Xml.XPath.dll deleted file mode 100644 index 5b2dc97430..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Xml.XPath.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Xml.XmlDocument.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Xml.XmlDocument.dll deleted file mode 100644 index ecc556ff24..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Xml.XmlDocument.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Xml.XmlSerializer.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Xml.XmlSerializer.dll deleted file mode 100644 index 99c76de198..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Xml.XmlSerializer.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Xml.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Xml.dll deleted file mode 100644 index d67460a9f5..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.Xml.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.dll deleted file mode 100644 index 4c4524bb06..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/System.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/WebAssembly.Bindings.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/WebAssembly.Bindings.dll deleted file mode 100644 index fd882dd245..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/WebAssembly.Bindings.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/WindowsBase.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/WindowsBase.dll deleted file mode 100644 index 453a23b63f..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/WindowsBase.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/binding_support.js b/Examples/Complete/Camera/Blazor/wwwroot/_framework/binding_support.js deleted file mode 100644 index 74a7e994e3..0000000000 --- a/Examples/Complete/Camera/Blazor/wwwroot/_framework/binding_support.js +++ /dev/null @@ -1,2277 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -var BindingSupportLib = { - $BINDING__postset: 'BINDING.export_functions (Module);', - $BINDING: { - BINDING_ASM: "[System.Private.Runtime.InteropServices.JavaScript]System.Runtime.InteropServices.JavaScript.Runtime", - mono_wasm_object_registry: [], - mono_wasm_ref_counter: 0, - mono_wasm_free_list: [], - mono_wasm_owned_objects_frames: [], - mono_wasm_owned_objects_LMF: [], - mono_wasm_marshal_enum_as_int: true, - mono_bindings_init: function (binding_asm) { - this.BINDING_ASM = binding_asm; - }, - - export_functions: function (module) { - module ["mono_bindings_init"] = BINDING.mono_bindings_init.bind(BINDING); - module ["mono_bind_method"] = BINDING.bind_method.bind(BINDING); - module ["mono_method_invoke"] = BINDING.call_method.bind(BINDING); - module ["mono_method_get_call_signature"] = BINDING.mono_method_get_call_signature.bind(BINDING); - module ["mono_method_resolve"] = BINDING.resolve_method_fqn.bind(BINDING); - module ["mono_bind_static_method"] = BINDING.bind_static_method.bind(BINDING); - module ["mono_call_static_method"] = BINDING.call_static_method.bind(BINDING); - module ["mono_bind_assembly_entry_point"] = BINDING.bind_assembly_entry_point.bind(BINDING); - module ["mono_call_assembly_entry_point"] = BINDING.call_assembly_entry_point.bind(BINDING); - module ["mono_intern_string"] = BINDING.mono_intern_string.bind(BINDING); - }, - - bindings_lazy_init: function () { - if (this.init) - return; - - // avoid infinite recursion - this.init = true; - - Array.prototype[Symbol.for("wasm type")] = 1; - ArrayBuffer.prototype[Symbol.for("wasm type")] = 2; - DataView.prototype[Symbol.for("wasm type")] = 3; - Function.prototype[Symbol.for("wasm type")] = 4; - Map.prototype[Symbol.for("wasm type")] = 5; - if (typeof SharedArrayBuffer !== 'undefined') - SharedArrayBuffer.prototype[Symbol.for("wasm type")] = 6; - Int8Array.prototype[Symbol.for("wasm type")] = 10; - Uint8Array.prototype[Symbol.for("wasm type")] = 11; - Uint8ClampedArray.prototype[Symbol.for("wasm type")] = 12; - Int16Array.prototype[Symbol.for("wasm type")] = 13; - Uint16Array.prototype[Symbol.for("wasm type")] = 14; - Int32Array.prototype[Symbol.for("wasm type")] = 15; - Uint32Array.prototype[Symbol.for("wasm type")] = 16; - Float32Array.prototype[Symbol.for("wasm type")] = 17; - Float64Array.prototype[Symbol.for("wasm type")] = 18; - - this.assembly_load = Module.cwrap ('mono_wasm_assembly_load', 'number', ['string']); - this.find_corlib_class = Module.cwrap ('mono_wasm_find_corlib_class', 'number', ['string', 'string']); - this.find_class = Module.cwrap ('mono_wasm_assembly_find_class', 'number', ['number', 'string', 'string']); - this._find_method = Module.cwrap ('mono_wasm_assembly_find_method', 'number', ['number', 'string', 'number']); - this.invoke_method = Module.cwrap ('mono_wasm_invoke_method', 'number', ['number', 'number', 'number', 'number']); - this.mono_string_get_utf8 = Module.cwrap ('mono_wasm_string_get_utf8', 'number', ['number']); - this.mono_wasm_string_from_utf16 = Module.cwrap ('mono_wasm_string_from_utf16', 'number', ['number', 'number']); - this.mono_get_obj_type = Module.cwrap ('mono_wasm_get_obj_type', 'number', ['number']); - this.mono_array_length = Module.cwrap ('mono_wasm_array_length', 'number', ['number']); - this.mono_array_get = Module.cwrap ('mono_wasm_array_get', 'number', ['number', 'number']); - this.mono_obj_array_new = Module.cwrap ('mono_wasm_obj_array_new', 'number', ['number']); - this.mono_obj_array_set = Module.cwrap ('mono_wasm_obj_array_set', 'void', ['number', 'number', 'number']); - this.mono_wasm_register_bundled_satellite_assemblies = Module.cwrap ('mono_wasm_register_bundled_satellite_assemblies', 'void', [ ]); - this.mono_wasm_try_unbox_primitive_and_get_type = Module.cwrap ('mono_wasm_try_unbox_primitive_and_get_type', 'number', ['number', 'number']); - this.mono_wasm_box_primitive = Module.cwrap ('mono_wasm_box_primitive', 'number', ['number', 'number', 'number']); - this.mono_wasm_intern_string = Module.cwrap ('mono_wasm_intern_string', 'number', ['number']); - this.assembly_get_entry_point = Module.cwrap ('mono_wasm_assembly_get_entry_point', 'number', ['number']); - this.mono_wasm_get_delegate_invoke = Module.cwrap ('mono_wasm_get_delegate_invoke', 'number', ['number']); - this.mono_wasm_string_array_new = Module.cwrap ('mono_wasm_string_array_new', 'number', ['number']); - - this._box_buffer = Module._malloc(16); - this._unbox_buffer = Module._malloc(16); - this._class_int32 = this.find_corlib_class ("System", "Int32"); - this._class_uint32 = this.find_corlib_class ("System", "UInt32"); - this._class_double = this.find_corlib_class ("System", "Double"); - this._class_boolean = this.find_corlib_class ("System", "Boolean"); - - // receives a byteoffset into allocated Heap with a size. - this.mono_typed_array_new = Module.cwrap ('mono_wasm_typed_array_new', 'number', ['number','number','number','number']); - - var binding_fqn_asm = this.BINDING_ASM.substring(this.BINDING_ASM.indexOf ("[") + 1, this.BINDING_ASM.indexOf ("]")).trim(); - var binding_fqn_class = this.BINDING_ASM.substring (this.BINDING_ASM.indexOf ("]") + 1).trim(); - - this.binding_module = this.assembly_load (binding_fqn_asm); - if (!this.binding_module) - throw "Can't find bindings module assembly: " + binding_fqn_asm; - - var namespace = null, classname = null; - if (binding_fqn_class !== null && typeof binding_fqn_class !== "undefined") - { - namespace = "System.Runtime.InteropServices.JavaScript"; - classname = binding_fqn_class.length > 0 ? binding_fqn_class : "Runtime"; - if (binding_fqn_class.indexOf(".") != -1) { - var idx = binding_fqn_class.lastIndexOf("."); - namespace = binding_fqn_class.substring (0, idx); - classname = binding_fqn_class.substring (idx + 1); - } - } - - var wasm_runtime_class = this.find_class (this.binding_module, namespace, classname); - if (!wasm_runtime_class) - throw "Can't find " + binding_fqn_class + " class"; - - var get_method = function(method_name) { - var res = BINDING.find_method (wasm_runtime_class, method_name, -1); - if (!res) - throw "Can't find method " + namespace + "." + classname + ":" + method_name; - return res; - }; - - var bind_runtime_method = function (method_name, signature) { - var method = get_method (method_name); - return BINDING.bind_method (method, 0, signature, "BINDINGS_" + method_name); - }; - - // NOTE: The bound methods have a _ prefix on their names to ensure - // that any code relying on the old get_method/call_method pattern will - // break in a more understandable way. - - this._bind_js_obj = bind_runtime_method ("BindIJSObjectReference", "iii"); - this._bind_core_clr_obj = bind_runtime_method ("BindCoreCLRObject", "ii"); - this._bind_existing_obj = bind_runtime_method ("BindExistingObject", "mi"); - this._unbind_raw_obj_and_free = bind_runtime_method ("UnBindRawIJSObjectReferenceAndFree", "ii"); - this._get_js_id = bind_runtime_method ("GetIJSObjectReferenceId", "m"); - this._get_raw_mono_obj = bind_runtime_method ("GetDotNetObject", "i!"); - - this._is_simple_array = bind_runtime_method ("IsSimpleArray", "m"); - this.setup_js_cont = get_method ("SetupJSContinuation"); - - this.create_tcs = get_method ("CreateTaskSource"); - this.set_tcs_result = get_method ("SetTaskSourceResult"); - this.set_tcs_failure = get_method ("SetTaskSourceFailure"); - this.tcs_get_task_and_bind = get_method ("GetTaskAndBind"); - this.get_call_sig = get_method ("GetCallSignature"); - - this._object_to_string = bind_runtime_method ("ObjectToString", "m"); - this.get_date_value = get_method ("GetDateValue"); - this.create_date_time = get_method ("CreateDateTime"); - this.create_uri = get_method ("CreateUri"); - - this.safehandle_addref = get_method ("SafeHandleAddRef"); - this.safehandle_release = get_method ("SafeHandleRelease"); - this.safehandle_get_handle = get_method ("SafeHandleGetHandle"); - this.safehandle_release_by_handle = get_method ("SafeHandleReleaseByHandle"); - - this._are_promises_supported = ((typeof Promise === "object") || (typeof Promise === "function")) && (typeof Promise.resolve === "function"); - - this._empty_string = ""; - this._empty_string_ptr = 0; - this._interned_string_full_root_buffers = []; - this._interned_string_current_root_buffer = null; - this._interned_string_current_root_buffer_count = 0; - this._interned_string_table = new Map (); - this._managed_pointer_to_interned_string_table = new Map (); - }, - - // Ensures the string is already interned on both the managed and JavaScript sides, - // then returns the interned string value (to provide fast reference comparisons like C#) - mono_intern_string: function (string) { - if (string.length === 0) - return this._empty_string; - - var ptr = this.js_string_to_mono_string_interned (string); - var result = this._managed_pointer_to_interned_string_table.get (ptr); - return result; - }, - - _store_string_in_intern_table: function (string, ptr, internIt) { - if (!ptr) - throw new Error ("null pointer passed to _store_string_in_intern_table"); - else if (typeof (ptr) !== "number") - throw new Error (`non-pointer passed to _store_string_in_intern_table: ${typeof(ptr)}`); - - const internBufferSize = 8192; - - if (this._interned_string_current_root_buffer_count >= internBufferSize) { - this._interned_string_full_root_buffers.push (this._interned_string_current_root_buffer); - this._interned_string_current_root_buffer = null; - } - if (!this._interned_string_current_root_buffer) { - this._interned_string_current_root_buffer = MONO.mono_wasm_new_root_buffer (internBufferSize, "interned strings"); - this._interned_string_current_root_buffer_count = 0; - } - - var rootBuffer = this._interned_string_current_root_buffer; - var index = this._interned_string_current_root_buffer_count++; - rootBuffer.set (index, ptr); - - // Store the managed string into the managed intern table. This can theoretically - // provide a different managed object than the one we passed in, so update our - // pointer (stored in the root) with the result. - if (internIt) - rootBuffer.set (index, ptr = this.mono_wasm_intern_string (ptr)); - - if (!ptr) - throw new Error ("mono_wasm_intern_string produced a null pointer"); - - this._interned_string_table.set (string, ptr); - this._managed_pointer_to_interned_string_table.set (ptr, string); - - if ((string.length === 0) && !this._empty_string_ptr) - this._empty_string_ptr = ptr; - - return ptr; - }, - - js_string_to_mono_string_interned: function (string) { - var text = (typeof (string) === "symbol") - ? (string.description || Symbol.keyFor(string) || "") - : string; - - if ((text.length === 0) && this._empty_string_ptr) - return this._empty_string_ptr; - - var ptr = this._interned_string_table.get (string); - if (ptr) - return ptr; - - ptr = this.js_string_to_mono_string_new (text); - ptr = this._store_string_in_intern_table (string, ptr, true); - - return ptr; - }, - - js_string_to_mono_string: function (string) { - if (string === null) - return null; - else if (typeof (string) === "symbol") - return this.js_string_to_mono_string_interned (string); - else if (typeof (string) !== "string") - throw new Error ("Expected string argument"); - - // Always use an interned pointer for empty strings - if (string.length === 0) - return this.js_string_to_mono_string_interned (string); - - // Looking up large strings in the intern table will require the JS runtime to - // potentially hash them and then do full byte-by-byte comparisons, which is - // very expensive. Because we can not guarantee it won't happen, try to minimize - // the cost of this and prevent performance issues for large strings - if (string.length <= 256) { - var interned = this._interned_string_table.get (string); - if (interned) - return interned; - } - - return this.js_string_to_mono_string_new (string); - }, - - js_string_to_mono_string_new: function (string) { - var buffer = Module._malloc ((string.length + 1) * 2); - var buffer16 = (buffer / 2) | 0; - for (var i = 0; i < string.length; i++) - Module.HEAP16[buffer16 + i] = string.charCodeAt (i); - Module.HEAP16[buffer16 + string.length] = 0; - var result = this.mono_wasm_string_from_utf16 (buffer, string.length); - Module._free (buffer); - return result; - }, - - find_method: function (klass, name, n) { - var result = this._find_method(klass, name, n); - if (result) { - if (!this._method_descriptions) - this._method_descriptions = new Map(); - this._method_descriptions.set(result, name); - } - return result; - }, - - get_js_obj: function (js_handle) { - if (js_handle > 0) - return this.mono_wasm_require_handle(js_handle); - return null; - }, - - conv_string: function (mono_obj, interned) { - var interned_instance = this._managed_pointer_to_interned_string_table.get (mono_obj); - if (interned_instance !== undefined) - return interned_instance; - - var result = MONO.string_decoder.copy (mono_obj); - if (interned) { - // This string is interned on the managed side but we didn't have it in our cache. - this._store_string_in_intern_table (result, mono_obj, false); - } - return result; - }, - - is_nested_array: function (ele) { - return this._is_simple_array(ele); - }, - - mono_array_to_js_array: function (mono_array) { - if (mono_array === 0) - return null; - - var arrayRoot = MONO.mono_wasm_new_root (mono_array); - try { - return this._mono_array_root_to_js_array (arrayRoot); - } finally { - arrayRoot.release(); - } - }, - - _mono_array_root_to_js_array: function (arrayRoot) { - if (arrayRoot.value === 0) - return null; - - let elemRoot = MONO.mono_wasm_new_root (); - - try { - var len = this.mono_array_length (arrayRoot.value); - var res = new Array (len); - for (var i = 0; i < len; ++i) - { - elemRoot.value = this.mono_array_get (arrayRoot.value, i); - - if (this.is_nested_array (elemRoot.value)) - res[i] = this._mono_array_root_to_js_array (elemRoot); - else - res[i] = this._unbox_mono_obj_root (elemRoot); - } - } finally { - elemRoot.release (); - } - - return res; - }, - - js_array_to_mono_array: function (js_array, asString = false) { - var mono_array = asString ? this.mono_wasm_string_array_new (js_array.length) : this.mono_obj_array_new (js_array.length); - let [arrayRoot, elemRoot] = MONO.mono_wasm_new_roots ([mono_array, 0]); - - try { - for (var i = 0; i < js_array.length; ++i) { - var obj = js_array[i]; - if (asString) - obj = obj.toString (); - - elemRoot.value = this.js_to_mono_obj (obj); - this.mono_obj_array_set (arrayRoot.value, i, elemRoot.value); - } - - return mono_array; - } finally { - MONO.mono_wasm_release_roots (arrayRoot, elemRoot); - } - }, - - unbox_mono_obj: function (mono_obj) { - if (mono_obj === 0) - return undefined; - - var root = MONO.mono_wasm_new_root (mono_obj); - try { - return this._unbox_mono_obj_root (root); - } finally { - root.release(); - } - }, - - _unbox_delegate_rooted: function (mono_obj) { - var obj = this.extract_js_obj (mono_obj); - obj.__mono_delegate_alive__ = true; - // FIXME: Should we root the object as long as this function has not been GCd? - return function () { - // TODO: Just use Function.bind - return BINDING.invoke_delegate (obj, arguments); - }; - }, - - _unbox_task_rooted: function (mono_obj) { - if (!this._are_promises_supported) - throw new Error ("Promises are not supported thus 'System.Threading.Tasks.Task' can not work in this context."); - - var obj = this.extract_js_obj (mono_obj); - var cont_obj = null; - var promise = new Promise (function (resolve, reject) { - cont_obj = { - resolve: resolve, - reject: reject - }; - }); - - this.call_method (this.setup_js_cont, null, "mo", [ mono_obj, cont_obj ]); - obj.__mono_js_cont__ = cont_obj.__mono_gchandle__; - cont_obj.__mono_js_task__ = obj.__mono_gchandle__; - return promise; - }, - - _unbox_safehandle_rooted: function (mono_obj) { - var addRef = true; - var js_handle = this.call_method(this.safehandle_get_handle, null, "mi", [ mono_obj, addRef ]); - var requiredObject = BINDING.mono_wasm_require_handle (js_handle); - if (addRef) - { - if (typeof this.mono_wasm_owned_objects_LMF === "undefined") - this.mono_wasm_owned_objects_LMF = []; - - this.mono_wasm_owned_objects_LMF.push(js_handle); - } - return requiredObject; - }, - - _unbox_mono_obj_rooted_with_known_nonprimitive_type: function (mono_obj, type) { - //See MARSHAL_TYPE_ defines in driver.c - switch (type) { - case 26: // int64 - case 27: // uint64 - // TODO: Fix this once emscripten offers HEAPI64/HEAPU64 or can return them - throw new Error ("int64 not available"); - case 3: // string - return this.conv_string (mono_obj, false); - case 29: // interned string - return this.conv_string (mono_obj, true); - case 4: //vts - throw new Error ("no idea on how to unbox value types"); - case 5: // delegate - return this._unbox_delegate_rooted (mono_obj); - case 6: // Task - return this._unbox_task_rooted (mono_obj); - case 7: // ref type - return this.extract_js_obj (mono_obj); - case 10: // arrays - case 11: - case 12: - case 13: - case 14: - case 15: - case 16: - case 17: - case 18: - throw new Error ("Marshalling of primitive arrays are not supported. Use the corresponding TypedArray instead."); - case 20: // clr .NET DateTime - var dateValue = this.call_method(this.get_date_value, null, "md", [ mono_obj ]); - return new Date(dateValue); - case 21: // clr .NET DateTimeOffset - var dateoffsetValue = this._object_to_string (mono_obj); - return dateoffsetValue; - case 22: // clr .NET Uri - var uriValue = this._object_to_string (mono_obj); - return uriValue; - case 23: // clr .NET SafeHandle - return this._unbox_safehandle_rooted (mono_obj); - case 30: - return undefined; - default: - throw new Error ("no idea on how to unbox object kind " + type + " at offset " + mono_obj); - } - }, - - _unbox_mono_obj_root: function (root) { - var mono_obj = root.value; - if (mono_obj === 0) - return undefined; - - var type = this.mono_wasm_try_unbox_primitive_and_get_type (mono_obj, this._unbox_buffer); - switch (type) { - case 1: // int - return Module.HEAP32[this._unbox_buffer / 4]; - case 25: // uint32 - return Module.HEAPU32[this._unbox_buffer / 4]; - case 24: // float32 - return Module.HEAPF32[this._unbox_buffer / 4]; - case 2: // float64 - return Module.HEAPF64[this._unbox_buffer / 8]; - case 8: // boolean - return (Module.HEAP32[this._unbox_buffer / 4]) !== 0; - case 28: // char - return String.fromCharCode(Module.HEAP32[this._unbox_buffer / 4]); - default: - return this._unbox_mono_obj_rooted_with_known_nonprimitive_type (mono_obj, type); - } - }, - - create_task_completion_source: function () { - return this.call_method (this.create_tcs, null, "i", [ -1 ]); - }, - - set_task_result: function (tcs, result) { - tcs.is_mono_tcs_result_set = true; - this.call_method (this.set_tcs_result, null, "oo", [ tcs, result ]); - if (tcs.is_mono_tcs_task_bound) - this.free_task_completion_source(tcs); - }, - - set_task_failure: function (tcs, reason) { - tcs.is_mono_tcs_result_set = true; - this.call_method (this.set_tcs_failure, null, "os", [ tcs, reason.toString () ]); - if (tcs.is_mono_tcs_task_bound) - this.free_task_completion_source(tcs); - }, - - // https://github.com/Planeshifter/emscripten-examples/blob/master/01_PassingArrays/sum_post.js - js_typedarray_to_heap: function(typedArray){ - var numBytes = typedArray.length * typedArray.BYTES_PER_ELEMENT; - var ptr = Module._malloc(numBytes); - var heapBytes = new Uint8Array(Module.HEAPU8.buffer, ptr, numBytes); - heapBytes.set(new Uint8Array(typedArray.buffer, typedArray.byteOffset, numBytes)); - return heapBytes; - }, - - _box_js_int: function (js_obj) { - Module.HEAP32[this._box_buffer / 4] = js_obj; - return this.mono_wasm_box_primitive (this._class_int32, this._box_buffer, 4); - }, - - _box_js_uint: function (js_obj) { - Module.HEAPU32[this._box_buffer / 4] = js_obj; - return this.mono_wasm_box_primitive (this._class_uint32, this._box_buffer, 4); - }, - - _box_js_double: function (js_obj) { - Module.HEAPF64[this._box_buffer / 8] = js_obj; - return this.mono_wasm_box_primitive (this._class_double, this._box_buffer, 8); - }, - - _box_js_bool: function (js_obj) { - Module.HEAP32[this._box_buffer / 4] = js_obj ? 1 : 0; - return this.mono_wasm_box_primitive (this._class_boolean, this._box_buffer, 4); - }, - - js_to_mono_obj: function (js_obj) { - this.bindings_lazy_init (); - - // determines if the javascript object is a Promise or Promise like which can happen - // when using an external Promise library. The javascript object should be marshalled - // as managed Task objects. - // - // Example is when Bluebird is included in a web page using a script tag, it overwrites the - // global Promise object by default with its own version of Promise. - function isThenable() { - // When using an external Promise library the Promise.resolve may not be sufficient - // to identify the object as a Promise. - return Promise.resolve(js_obj) === js_obj || - ((typeof js_obj === "object" || typeof js_obj === "function") && typeof js_obj.then === "function") - } - - switch (true) { - case js_obj === null: - case typeof js_obj === "undefined": - return 0; - case typeof js_obj === "number": { - if ((js_obj | 0) === js_obj) - result = this._box_js_int (js_obj); - else if ((js_obj >>> 0) === js_obj) - result = this._box_js_uint (js_obj); - else - result = this._box_js_double (js_obj); - - if (!result) - throw new Error (`Boxing failed for ${js_obj}`); - - return result; - } case typeof js_obj === "string": - return this.js_string_to_mono_string (js_obj); - case typeof js_obj === "symbol": - return this.js_string_to_mono_string_interned (js_obj); - case typeof js_obj === "boolean": - return this._box_js_bool (js_obj); - case isThenable() === true: - var the_task = this.try_extract_mono_obj (js_obj); - if (the_task) - return the_task; - // FIXME: We need to root tcs for an appropriate timespan, at least until the Task - // is resolved - var tcs = this.create_task_completion_source (); - js_obj.then (function (result) { - BINDING.set_task_result (tcs, result); - }, function (reason) { - BINDING.set_task_failure (tcs, reason); - }) - return this.get_task_and_bind (tcs, js_obj); - case js_obj.constructor.name === "Date": - // We may need to take into account the TimeZone Offset - return this.call_method(this.create_date_time, null, "d!", [ js_obj.getTime() ]); - default: - return this.extract_mono_obj (js_obj); - } - }, - js_to_mono_uri: function (js_obj) { - this.bindings_lazy_init (); - - switch (true) { - case js_obj === null: - case typeof js_obj === "undefined": - return 0; - case typeof js_obj === "symbol": - case typeof js_obj === "string": - return this.call_method(this.create_uri, null, "s!", [ js_obj ]) - default: - return this.extract_mono_obj (js_obj); - } - }, - has_backing_array_buffer: function (js_obj) { - return typeof SharedArrayBuffer !== 'undefined' - ? js_obj.buffer instanceof ArrayBuffer || js_obj.buffer instanceof SharedArrayBuffer - : js_obj.buffer instanceof ArrayBuffer; - }, - - js_typed_array_to_array : function (js_obj) { - - // JavaScript typed arrays are array-like objects and provide a mechanism for accessing - // raw binary data. (...) To achieve maximum flexibility and efficiency, JavaScript typed arrays - // split the implementation into buffers and views. A buffer (implemented by the ArrayBuffer object) - // is an object representing a chunk of data; it has no format to speak of, and offers no - // mechanism for accessing its contents. In order to access the memory contained in a buffer, - // you need to use a view. A view provides a context — that is, a data type, starting offset, - // and number of elements — that turns the data into an actual typed array. - // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays - if (!!(this.has_backing_array_buffer(js_obj) && js_obj.BYTES_PER_ELEMENT)) - { - var arrayType = js_obj[Symbol.for("wasm type")]; - var heapBytes = this.js_typedarray_to_heap(js_obj); - var bufferArray = this.mono_typed_array_new(heapBytes.byteOffset, js_obj.length, js_obj.BYTES_PER_ELEMENT, arrayType); - Module._free(heapBytes.byteOffset); - return bufferArray; - } - else { - throw new Error("Object '" + js_obj + "' is not a typed array"); - } - - - }, - // Copy the existing typed array to the heap pointed to by the pinned array address - // typed array memory -> copy to heap -> address of managed pinned array - typedarray_copy_to : function (typed_array, pinned_array, begin, end, bytes_per_element) { - - // JavaScript typed arrays are array-like objects and provide a mechanism for accessing - // raw binary data. (...) To achieve maximum flexibility and efficiency, JavaScript typed arrays - // split the implementation into buffers and views. A buffer (implemented by the ArrayBuffer object) - // is an object representing a chunk of data; it has no format to speak of, and offers no - // mechanism for accessing its contents. In order to access the memory contained in a buffer, - // you need to use a view. A view provides a context — that is, a data type, starting offset, - // and number of elements — that turns the data into an actual typed array. - // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays - if (!!(this.has_backing_array_buffer(typed_array) && typed_array.BYTES_PER_ELEMENT)) - { - // Some sanity checks of what is being asked of us - // lets play it safe and throw an error here instead of assuming to much. - // Better safe than sorry later - if (bytes_per_element !== typed_array.BYTES_PER_ELEMENT) - throw new Error("Inconsistent element sizes: TypedArray.BYTES_PER_ELEMENT '" + typed_array.BYTES_PER_ELEMENT + "' sizeof managed element: '" + bytes_per_element + "'"); - - // how much space we have to work with - var num_of_bytes = (end - begin) * bytes_per_element; - // how much typed buffer space are we talking about - var view_bytes = typed_array.length * typed_array.BYTES_PER_ELEMENT; - // only use what is needed. - if (num_of_bytes > view_bytes) - num_of_bytes = view_bytes; - - // offset index into the view - var offset = begin * bytes_per_element; - - // Create a view over the heap pointed to by the pinned array address - var heapBytes = new Uint8Array(Module.HEAPU8.buffer, pinned_array + offset, num_of_bytes); - // Copy the bytes of the typed array to the heap. - heapBytes.set(new Uint8Array(typed_array.buffer, typed_array.byteOffset, num_of_bytes)); - - return num_of_bytes; - } - else { - throw new Error("Object '" + typed_array + "' is not a typed array"); - } - - }, - // Copy the pinned array address from pinned_array allocated on the heap to the typed array. - // adress of managed pinned array -> copy from heap -> typed array memory - typedarray_copy_from : function (typed_array, pinned_array, begin, end, bytes_per_element) { - - // JavaScript typed arrays are array-like objects and provide a mechanism for accessing - // raw binary data. (...) To achieve maximum flexibility and efficiency, JavaScript typed arrays - // split the implementation into buffers and views. A buffer (implemented by the ArrayBuffer object) - // is an object representing a chunk of data; it has no format to speak of, and offers no - // mechanism for accessing its contents. In order to access the memory contained in a buffer, - // you need to use a view. A view provides a context — that is, a data type, starting offset, - // and number of elements — that turns the data into an actual typed array. - // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays - if (!!(this.has_backing_array_buffer(typed_array) && typed_array.BYTES_PER_ELEMENT)) - { - // Some sanity checks of what is being asked of us - // lets play it safe and throw an error here instead of assuming to much. - // Better safe than sorry later - if (bytes_per_element !== typed_array.BYTES_PER_ELEMENT) - throw new Error("Inconsistent element sizes: TypedArray.BYTES_PER_ELEMENT '" + typed_array.BYTES_PER_ELEMENT + "' sizeof managed element: '" + bytes_per_element + "'"); - - // how much space we have to work with - var num_of_bytes = (end - begin) * bytes_per_element; - // how much typed buffer space are we talking about - var view_bytes = typed_array.length * typed_array.BYTES_PER_ELEMENT; - // only use what is needed. - if (num_of_bytes > view_bytes) - num_of_bytes = view_bytes; - - // Create a new view for mapping - var typedarrayBytes = new Uint8Array(typed_array.buffer, 0, num_of_bytes); - // offset index into the view - var offset = begin * bytes_per_element; - // Set view bytes to value from HEAPU8 - typedarrayBytes.set(Module.HEAPU8.subarray(pinned_array + offset, pinned_array + offset + num_of_bytes)); - return num_of_bytes; - } - else { - throw new Error("Object '" + typed_array + "' is not a typed array"); - } - - }, - // Creates a new typed array from pinned array address from pinned_array allocated on the heap to the typed array. - // adress of managed pinned array -> copy from heap -> typed array memory - typed_array_from : function (pinned_array, begin, end, bytes_per_element, type) { - - // typed array - var newTypedArray = 0; - - switch (type) - { - case 5: - newTypedArray = new Int8Array(end - begin); - break; - case 6: - newTypedArray = new Uint8Array(end - begin); - break; - case 7: - newTypedArray = new Int16Array(end - begin); - break; - case 8: - newTypedArray = new Uint16Array(end - begin); - break; - case 9: - newTypedArray = new Int32Array(end - begin); - break; - case 10: - newTypedArray = new Uint32Array(end - begin); - break; - case 13: - newTypedArray = new Float32Array(end - begin); - break; - case 14: - newTypedArray = new Float64Array(end - begin); - break; - case 15: // This is a special case because the typed array is also byte[] - newTypedArray = new Uint8ClampedArray(end - begin); - break; - } - - this.typedarray_copy_from(newTypedArray, pinned_array, begin, end, bytes_per_element); - return newTypedArray; - }, - js_to_mono_enum: function (js_obj, method, parmIdx) { - this.bindings_lazy_init (); - - if (typeof (js_obj) !== "number") - throw new Error (`Expected numeric value for enum argument, got '${js_obj}'`); - - return js_obj | 0; - }, - wasm_binding_obj_new: function (js_obj_id, ownsHandle, type) - { - return this._bind_js_obj (js_obj_id, ownsHandle, type); - }, - wasm_bind_existing: function (mono_obj, js_id) - { - return this._bind_existing_obj (mono_obj, js_id); - }, - - wasm_bind_core_clr_obj: function (js_id, gc_handle) - { - return this._bind_core_clr_obj (js_id, gc_handle); - }, - - wasm_get_js_id: function (mono_obj) - { - return this._get_js_id (mono_obj); - }, - - wasm_get_raw_obj: function (gchandle) - { - return this._get_raw_mono_obj (gchandle); - }, - - try_extract_mono_obj:function (js_obj) { - if (js_obj === null || typeof js_obj === "undefined" || typeof js_obj.__mono_gchandle__ === "undefined") - return 0; - return this.wasm_get_raw_obj (js_obj.__mono_gchandle__); - }, - - mono_method_get_call_signature: function(method, mono_obj) { - this.bindings_lazy_init (); - - return this.call_method (this.get_call_sig, null, "im", [ method, mono_obj ]); - }, - - get_task_and_bind: function (tcs, js_obj) { - var gc_handle = this.mono_wasm_free_list.length ? this.mono_wasm_free_list.pop() : this.mono_wasm_ref_counter++; - var task_gchandle = this.call_method (this.tcs_get_task_and_bind, null, "oi", [ tcs, gc_handle + 1 ]); - js_obj.__mono_gchandle__ = task_gchandle; - this.mono_wasm_object_registry[gc_handle] = js_obj; - this.free_task_completion_source(tcs); - tcs.is_mono_tcs_task_bound = true; - js_obj.__mono_bound_tcs__ = tcs.__mono_gchandle__; - tcs.__mono_bound_task__ = js_obj.__mono_gchandle__; - return this.wasm_get_raw_obj (js_obj.__mono_gchandle__); - }, - - free_task_completion_source: function (tcs) { - if (tcs.is_mono_tcs_result_set) - { - this._unbind_raw_obj_and_free (tcs.__mono_gchandle__); - } - if (tcs.__mono_bound_task__) - { - this._unbind_raw_obj_and_free (tcs.__mono_bound_task__); - } - }, - - extract_mono_obj: function (js_obj) { - if (js_obj === null || typeof js_obj === "undefined") - return 0; - - var result = null; - var gc_handle = js_obj.__mono_gchandle__; - if (gc_handle) { - result = this.wasm_get_raw_obj (gc_handle); - - // It's possible the managed object corresponding to this JS object was collected, - // in which case we need to make a new one. - if (!result) { - delete js_obj.__mono_gchandle__; - delete js_obj.is_mono_bridged_obj; - } - } - - if (!result) { - gc_handle = this.mono_wasm_register_obj(js_obj); - result = this.wasm_get_raw_obj (gc_handle); - } - - return result; - }, - - extract_js_obj: function (mono_obj) { - if (mono_obj == 0) - return null; - - var js_id = this.wasm_get_js_id (mono_obj); - if (js_id > 0) - return this.mono_wasm_require_handle(js_id); - - var gcHandle = this.mono_wasm_free_list.length ? this.mono_wasm_free_list.pop() : this.mono_wasm_ref_counter++; - var js_obj = { - __mono_gchandle__: this.wasm_bind_existing(mono_obj, gcHandle + 1), - is_mono_bridged_obj: true - }; - - this.mono_wasm_object_registry[gcHandle] = js_obj; - return js_obj; - }, - - _create_named_function: function (name, argumentNames, body, closure) { - var result = null, keys = null, closureArgumentList = null, closureArgumentNames = null; - - if (closure) { - closureArgumentNames = Object.keys (closure); - closureArgumentList = new Array (closureArgumentNames.length); - for (var i = 0, l = closureArgumentNames.length; i < l; i++) - closureArgumentList[i] = closure[closureArgumentNames[i]]; - } - - var constructor = this._create_rebindable_named_function (name, argumentNames, body, closureArgumentNames); - result = constructor.apply (null, closureArgumentList); - - return result; - }, - - _create_rebindable_named_function: function (name, argumentNames, body, closureArgNames) { - var strictPrefix = "\"use strict\";\r\n"; - var uriPrefix = "", escapedFunctionIdentifier = ""; - - if (name) { - uriPrefix = "//# sourceURL=https://mono-wasm.invalid/" + name + "\r\n"; - escapedFunctionIdentifier = name; - } else { - escapedFunctionIdentifier = "unnamed"; - } - - var rawFunctionText = "function " + escapedFunctionIdentifier + "(" + - argumentNames.join(", ") + - ") {\r\n" + - body + - "\r\n};\r\n"; - - var lineBreakRE = /\r(\n?)/g; - - rawFunctionText = - uriPrefix + strictPrefix + - rawFunctionText.replace(lineBreakRE, "\r\n ") + - ` return ${escapedFunctionIdentifier};\r\n`; - - var result = null, keys = null; - - if (closureArgNames) { - keys = closureArgNames.concat ([rawFunctionText]); - } else { - keys = [rawFunctionText]; - } - - result = Function.apply (Function, keys); - return result; - }, - - _create_primitive_converters: function () { - var result = new Map (); - result.set ('m', { steps: [{ }], size: 0}); - result.set ('s', { steps: [{ convert: this.js_string_to_mono_string.bind (this) }], size: 0, needs_root: true }); - result.set ('S', { steps: [{ convert: this.js_string_to_mono_string_interned.bind (this) }], size: 0, needs_root: true }); - result.set ('o', { steps: [{ convert: this.js_to_mono_obj.bind (this) }], size: 0, needs_root: true }); - result.set ('u', { steps: [{ convert: this.js_to_mono_uri.bind (this) }], size: 0, needs_root: true }); - - // result.set ('k', { steps: [{ convert: this.js_to_mono_enum.bind (this), indirect: 'i64'}], size: 8}); - result.set ('j', { steps: [{ convert: this.js_to_mono_enum.bind (this), indirect: 'i32'}], size: 8}); - - result.set ('i', { steps: [{ indirect: 'i32'}], size: 8}); - result.set ('l', { steps: [{ indirect: 'i64'}], size: 8}); - result.set ('f', { steps: [{ indirect: 'float'}], size: 8}); - result.set ('d', { steps: [{ indirect: 'double'}], size: 8}); - - this._primitive_converters = result; - return result; - }, - - _create_converter_for_marshal_string: function (args_marshal) { - var primitiveConverters = this._primitive_converters; - if (!primitiveConverters) - primitiveConverters = this._create_primitive_converters (); - - var steps = []; - var size = 0; - var is_result_definitely_unmarshaled = false, - is_result_possibly_unmarshaled = false, - result_unmarshaled_if_argc = -1, - needs_root_buffer = false; - - for (var i = 0; i < args_marshal.length; ++i) { - var key = args_marshal[i]; - - if (i === args_marshal.length - 1) { - if (key === "!") { - is_result_definitely_unmarshaled = true; - continue; - } else if (key === "m") { - is_result_possibly_unmarshaled = true; - result_unmarshaled_if_argc = args_marshal.length - 1; - } - } else if (key === "!") - throw new Error ("! must be at the end of the signature"); - - var conv = primitiveConverters.get (key); - if (!conv) - throw new Error ("Unknown parameter type " + type); - - var localStep = Object.create (conv.steps[0]); - localStep.size = conv.size; - if (conv.needs_root) - needs_root_buffer = true; - localStep.needs_root = conv.needs_root; - localStep.key = args_marshal[i]; - steps.push (localStep); - size += conv.size; - } - - return { - steps: steps, size: size, args_marshal: args_marshal, - is_result_definitely_unmarshaled: is_result_definitely_unmarshaled, - is_result_possibly_unmarshaled: is_result_possibly_unmarshaled, - result_unmarshaled_if_argc: result_unmarshaled_if_argc, - needs_root_buffer: needs_root_buffer - }; - }, - - _get_converter_for_marshal_string: function (args_marshal) { - if (!this._signature_converters) - this._signature_converters = new Map(); - - var converter = this._signature_converters.get (args_marshal); - if (!converter) { - converter = this._create_converter_for_marshal_string (args_marshal); - this._signature_converters.set (args_marshal, converter); - } - - return converter; - }, - - _compile_converter_for_marshal_string: function (args_marshal) { - var converter = this._get_converter_for_marshal_string (args_marshal); - if (typeof (converter.args_marshal) !== "string") - throw new Error ("Corrupt converter for '" + args_marshal + "'"); - - if (converter.compiled_function && converter.compiled_variadic_function) - return converter; - - var converterName = args_marshal.replace("!", "_result_unmarshaled"); - converter.name = converterName; - - var body = []; - var argumentNames = ["buffer", "rootBuffer", "method"]; - - // worst-case allocation size instead of allocating dynamically, plus padding - var bufferSizeBytes = converter.size + (args_marshal.length * 4) + 16; - var rootBufferSize = args_marshal.length; - // ensure the indirect values are 8-byte aligned so that aligned loads and stores will work - var indirectBaseOffset = ((((args_marshal.length * 4) + 7) / 8) | 0) * 8; - - var closure = {}; - var indirectLocalOffset = 0; - - body.push ( - `if (!buffer) buffer = Module._malloc (${bufferSizeBytes});`, - `var indirectStart = buffer + ${indirectBaseOffset};`, - "var indirect32 = (indirectStart / 4) | 0, indirect64 = (indirectStart / 8) | 0;", - "var buffer32 = (buffer / 4) | 0;", - "" - ); - - for (let i = 0; i < converter.steps.length; i++) { - var step = converter.steps[i]; - var closureKey = "step" + i; - var valueKey = "value" + i; - - var argKey = "arg" + i; - argumentNames.push (argKey); - - if (step.convert) { - closure[closureKey] = step.convert; - body.push (`var ${valueKey} = ${closureKey}(${argKey}, method, ${i});`); - } else { - body.push (`var ${valueKey} = ${argKey};`); - } - - if (step.needs_root) - body.push (`rootBuffer.set (${i}, ${valueKey});`); - - if (step.indirect) { - var heapArrayName = null; - - switch (step.indirect) { - case "u32": - heapArrayName = "HEAPU32"; - break; - case "i32": - heapArrayName = "HEAP32"; - break; - case "float": - heapArrayName = "HEAPF32"; - break; - case "double": - body.push (`Module.HEAPF64[indirect64 + ${(indirectLocalOffset / 8)}] = ${valueKey};`); - break; - case "i64": - body.push (`Module.setValue (indirectStart + ${indirectLocalOffset}, ${valueKey}, 'i64');`); - break; - default: - throw new Error ("Unimplemented indirect type: " + step.indirect); - } - - if (heapArrayName) - body.push (`Module.${heapArrayName}[indirect32 + ${(indirectLocalOffset / 4)}] = ${valueKey};`); - - body.push (`Module.HEAP32[buffer32 + ${i}] = indirectStart + ${indirectLocalOffset};`, ""); - indirectLocalOffset += step.size; - } else { - body.push (`Module.HEAP32[buffer32 + ${i}] = ${valueKey};`, ""); - indirectLocalOffset += 4; - } - } - - body.push ("return buffer;"); - - var bodyJs = body.join ("\r\n"), compiledFunction = null, compiledVariadicFunction = null; - try { - compiledFunction = this._create_named_function("converter_" + converterName, argumentNames, bodyJs, closure); - converter.compiled_function = compiledFunction; - } catch (exc) { - converter.compiled_function = null; - console.warn("compiling converter failed for", bodyJs, "with error", exc); - throw exc; - } - - argumentNames = ["existingBuffer", "rootBuffer", "method", "args"]; - closure = { - converter: compiledFunction - }; - body = [ - "return converter(", - " existingBuffer, rootBuffer, method," - ]; - - for (let i = 0; i < converter.steps.length; i++) { - body.push( - " args[" + i + - ( - (i == converter.steps.length - 1) - ? "]" - : "], " - ) - ); - } - - body.push(");"); - - bodyJs = body.join ("\r\n"); - try { - compiledVariadicFunction = this._create_named_function("variadic_converter_" + converterName, argumentNames, bodyJs, closure); - converter.compiled_variadic_function = compiledVariadicFunction; - } catch (exc) { - converter.compiled_variadic_function = null; - console.warn("compiling converter failed for", bodyJs, "with error", exc); - throw exc; - } - - converter.scratchRootBuffer = null; - converter.scratchBuffer = 0 | 0; - - return converter; - }, - - _verify_args_for_method_call: function (args_marshal, args) { - var has_args = args && (typeof args === "object") && args.length > 0; - var has_args_marshal = typeof args_marshal === "string"; - - if (has_args) { - if (!has_args_marshal) - throw new Error ("No signature provided for method call."); - else if (args.length > args_marshal.length) - throw new Error ("Too many parameter values. Expected at most " + args_marshal.length + " value(s) for signature " + args_marshal); - } - - return has_args_marshal && has_args; - }, - - _get_buffer_for_method_call: function (converter) { - if (!converter) - return 0; - - var result = converter.scratchBuffer; - converter.scratchBuffer = 0; - return result; - }, - - _get_args_root_buffer_for_method_call: function (converter) { - if (!converter) - return null; - - if (!converter.needs_root_buffer) - return null; - - var result; - if (converter.scratchRootBuffer) { - result = converter.scratchRootBuffer; - converter.scratchRootBuffer = null; - } else { - // TODO: Expand the converter's heap allocation and then use - // mono_wasm_new_root_buffer_from_pointer instead. Not that important - // at present because the scratch buffer will be reused unless we are - // recursing through a re-entrant call - result = MONO.mono_wasm_new_root_buffer (converter.steps.length); - result.converter = converter; - } - return result; - }, - - _release_args_root_buffer_from_method_call: function (converter, argsRootBuffer) { - if (!argsRootBuffer || !converter) - return; - - // Store the arguments root buffer for re-use in later calls - if (!converter.scratchRootBuffer) { - argsRootBuffer.clear (); - converter.scratchRootBuffer = argsRootBuffer; - } else { - argsRootBuffer.release (); - } - }, - - _release_buffer_from_method_call: function (converter, buffer) { - if (!converter || !buffer) - return; - - if (!converter.scratchBuffer) - converter.scratchBuffer = buffer | 0; - else - Module._free (buffer | 0); - }, - - _convert_exception_for_method_call: function (result, exception) { - if (exception === 0) - return null; - - var msg = this.conv_string (result, false); - var err = new Error (msg); //the convention is that invoke_method ToString () any outgoing exception - // console.warn ("error", msg, "at location", err.stack); - return err; - }, - - _maybe_produce_signature_warning: function (converter) { - if (converter.has_warned_about_signature) - return; - - console.warn ("MONO_WASM: Deprecated raw return value signature: '" + converter.args_marshal + "'. End the signature with '!' instead of 'm'."); - converter.has_warned_about_signature = true; - }, - - _decide_if_result_is_marshaled: function (converter, argc) { - if (!converter) - return true; - - if ( - converter.is_result_possibly_unmarshaled && - (argc === converter.result_unmarshaled_if_argc) - ) { - if (argc < converter.result_unmarshaled_if_argc) - throw new Error(["Expected >= ", converter.result_unmarshaled_if_argc, "argument(s) but got", argc, "for signature " + converter.args_marshal].join(" ")); - - this._maybe_produce_signature_warning (converter); - return false; - } else { - if (argc < converter.steps.length) - throw new Error(["Expected", converter.steps.length, "argument(s) but got", argc, "for signature " + converter.args_marshal].join(" ")); - - return !converter.is_result_definitely_unmarshaled; - } - }, - - /* - args_marshal is a string with one character per parameter that tells how to marshal it, here are the valid values: - - i: int32 - j: int32 - Enum with underlying type of int32 - l: int64 - k: int64 - Enum with underlying type of int64 - f: float - d: double - s: string - S: interned string - o: js object will be converted to a C# object (this will box numbers/bool/promises) - m: raw mono object. Don't use it unless you know what you're doing - - to suppress marshaling of the return value, place '!' at the end of args_marshal, i.e. 'ii!' instead of 'ii' - */ - call_method: function (method, this_arg, args_marshal, args) { - this.bindings_lazy_init (); - - // HACK: Sometimes callers pass null or undefined, coerce it to 0 since that's what wasm expects - this_arg = this_arg | 0; - - // Detect someone accidentally passing the wrong type of value to method - if ((method | 0) !== method) - throw new Error (`method must be an address in the native heap, but was '${method}'`); - if (!method) - throw new Error ("no method specified"); - - var needs_converter = this._verify_args_for_method_call (args_marshal, args); - - var buffer = 0, converter = null, argsRootBuffer = null; - var is_result_marshaled = true; - - // check if the method signature needs argument mashalling - if (needs_converter) { - converter = this._compile_converter_for_marshal_string (args_marshal); - - is_result_marshaled = this._decide_if_result_is_marshaled (converter, args.length); - - argsRootBuffer = this._get_args_root_buffer_for_method_call (converter); - - var scratchBuffer = this._get_buffer_for_method_call (converter); - - buffer = converter.compiled_variadic_function (scratchBuffer, argsRootBuffer, method, args); - } - - return this._call_method_with_converted_args (method, this_arg, converter, buffer, is_result_marshaled, argsRootBuffer); - }, - - _handle_exception_for_call: function ( - converter, buffer, resultRoot, exceptionRoot, argsRootBuffer - ) { - var exc = this._convert_exception_for_method_call (resultRoot.value, exceptionRoot.value); - if (!exc) - return; - - this._teardown_after_call (converter, buffer, resultRoot, exceptionRoot, argsRootBuffer); - throw exc; - }, - - _handle_exception_and_produce_result_for_call: function ( - converter, buffer, resultRoot, exceptionRoot, argsRootBuffer, is_result_marshaled - ) { - this._handle_exception_for_call (converter, buffer, resultRoot, exceptionRoot, argsRootBuffer); - - if (is_result_marshaled) - result = this._unbox_mono_obj_root (resultRoot); - else - result = resultRoot.value; - - this._teardown_after_call (converter, buffer, resultRoot, exceptionRoot, argsRootBuffer); - return result; - }, - - _teardown_after_call: function (converter, buffer, resultRoot, exceptionRoot, argsRootBuffer) { - this._release_args_root_buffer_from_method_call (converter, argsRootBuffer); - this._release_buffer_from_method_call (converter, buffer | 0); - - if (resultRoot) - resultRoot.release (); - if (exceptionRoot) - exceptionRoot.release (); - }, - - _get_method_description: function (method) { - if (!this._method_descriptions) - this._method_descriptions = new Map(); - - var result = this._method_descriptions.get (method); - if (!result) - result = "method#" + method; - return result; - }, - - _call_method_with_converted_args: function (method, this_arg, converter, buffer, is_result_marshaled, argsRootBuffer) { - var resultRoot = MONO.mono_wasm_new_root (), exceptionRoot = MONO.mono_wasm_new_root (); - resultRoot.value = this.invoke_method (method, this_arg, buffer, exceptionRoot.get_address ()); - return this._handle_exception_and_produce_result_for_call (converter, buffer, resultRoot, exceptionRoot, argsRootBuffer, is_result_marshaled); - }, - - bind_method: function (method, this_arg, args_marshal, friendly_name) { - this.bindings_lazy_init (); - - this_arg = this_arg | 0; - - var converter = null; - if (typeof (args_marshal) === "string") - converter = this._compile_converter_for_marshal_string (args_marshal); - - var closure = { - library_mono: MONO, - binding_support: this, - method: method, - this_arg: this_arg - }; - - var converterKey = "converter_" + converter.name; - - if (converter) - closure[converterKey] = converter; - - var argumentNames = []; - var body = [ - "var resultRoot = library_mono.mono_wasm_new_root (), exceptionRoot = library_mono.mono_wasm_new_root ();", - "" - ]; - - if (converter) { - body.push( - `var argsRootBuffer = binding_support._get_args_root_buffer_for_method_call (${converterKey});`, - `var scratchBuffer = binding_support._get_buffer_for_method_call (${converterKey});`, - `var buffer = ${converterKey}.compiled_function (`, - " scratchBuffer, argsRootBuffer, method," - ); - - for (var i = 0; i < converter.steps.length; i++) { - var argName = "arg" + i; - argumentNames.push(argName); - body.push( - " " + argName + - ( - (i == converter.steps.length - 1) - ? "" - : ", " - ) - ); - } - - body.push(");"); - - } else { - body.push("var argsRootBuffer = null, buffer = 0;"); - } - - if (converter.is_result_definitely_unmarshaled) { - body.push ("var is_result_marshaled = false;"); - } else if (converter.is_result_possibly_unmarshaled) { - body.push (`var is_result_marshaled = arguments.length !== ${converter.result_unmarshaled_if_argc};`); - } else { - body.push ("var is_result_marshaled = true;"); - } - - // We inline a bunch of the invoke and marshaling logic here in order to eliminate the GC pressure normally - // created by the unboxing part of the call process. Because unbox_mono_obj(_rooted) can return non-numeric - // types, v8 and spidermonkey allocate and store its result on the heap (in the nursery, to be fair). - // For a bound method however, we know the result will always be the same type because C# methods have known - // return types. Inlining the invoke and marshaling logic means that even though the bound method has logic - // for handling various types, only one path through the method (for its appropriate return type) will ever - // be taken, and the JIT will see that the 'result' local and thus the return value of this function are - // always of the exact same type. All of the branches related to this end up being predicted and low-cost. - // The end result is that bound method invocations don't always allocate, so no more nursery GCs. Yay! -kg - body.push( - "", - "resultRoot.value = binding_support.invoke_method (method, this_arg, buffer, exceptionRoot.get_address ());", - `binding_support._handle_exception_for_call (${converterKey}, buffer, resultRoot, exceptionRoot, argsRootBuffer);`, - "", - "var resultPtr = resultRoot.value, result = undefined;", - "if (!is_result_marshaled) ", - " result = resultPtr;", - "else if (resultPtr !== 0) {", - // For the common scenario where the return type is a primitive, we want to try and unbox it directly - // into our existing heap allocation and then read it out of the heap. Doing this all in one operation - // means that we only need to enter a gc safe region twice (instead of 3+ times with the normal, - // slower check-type-and-then-unbox flow which has extra checks since unbox verifies the type). - " var resultType = binding_support.mono_wasm_try_unbox_primitive_and_get_type (resultPtr, buffer);", - " switch (resultType) {", - " case 1:", // int - " result = Module.HEAP32[buffer / 4]; break;", - " case 25:", // uint32 - " result = Module.HEAPU32[buffer / 4]; break;", - " case 24:", // float32 - " result = Module.HEAPF32[buffer / 4]; break;", - " case 2:", // float64 - " result = Module.HEAPF64[buffer / 8]; break;", - " case 8:", // boolean - " result = (Module.HEAP32[buffer / 4]) !== 0; break;", - " case 28:", // char - " result = String.fromCharCode(Module.HEAP32[buffer / 4]); break;", - " default:", - " result = binding_support._unbox_mono_obj_rooted_with_known_nonprimitive_type (resultPtr, resultType); break;", - " }", - "}", - "", - `binding_support._teardown_after_call (${converterKey}, buffer, resultRoot, exceptionRoot, argsRootBuffer);`, - "return result;" - ); - - bodyJs = body.join ("\r\n"); - - if (friendly_name) { - var escapeRE = /[^A-Za-z0-9_]/g; - friendly_name = friendly_name.replace(escapeRE, "_"); - } - - var displayName = "managed_" + (friendly_name || method); - - if (this_arg) - displayName += "_with_this_" + this_arg; - - return this._create_named_function(displayName, argumentNames, bodyJs, closure); - }, - - invoke_delegate: function (delegate_obj, js_args) { - this.bindings_lazy_init (); - - // Check to make sure the delegate is still alive on the CLR side of things. - if (typeof delegate_obj.__mono_delegate_alive__ !== "undefined") { - if (!delegate_obj.__mono_delegate_alive__) - throw new Error("The delegate target that is being invoked is no longer available. Please check if it has been prematurely GC'd."); - } - - var [delegateRoot] = MONO.mono_wasm_new_roots ([this.extract_mono_obj (delegate_obj)]); - try { - if (typeof delegate_obj.__mono_delegate_invoke__ === "undefined") - delegate_obj.__mono_delegate_invoke__ = this.mono_wasm_get_delegate_invoke(delegateRoot.value); - if (!delegate_obj.__mono_delegate_invoke__) - throw new Error("System.Delegate Invoke method can not be resolved."); - - if (typeof delegate_obj.__mono_delegate_invoke_sig__ === "undefined") - delegate_obj.__mono_delegate_invoke_sig__ = Module.mono_method_get_call_signature (delegate_obj.__mono_delegate_invoke__, delegateRoot.value); - - return this.call_method (delegate_obj.__mono_delegate_invoke__, delegateRoot.value, delegate_obj.__mono_delegate_invoke_sig__, js_args); - } finally { - MONO.mono_wasm_release_roots (delegateRoot); - } - }, - - resolve_method_fqn: function (fqn) { - this.bindings_lazy_init (); - - var assembly = fqn.substring(fqn.indexOf ("[") + 1, fqn.indexOf ("]")).trim(); - fqn = fqn.substring (fqn.indexOf ("]") + 1).trim(); - - var methodname = fqn.substring(fqn.indexOf (":") + 1); - fqn = fqn.substring (0, fqn.indexOf (":")).trim (); - - var namespace = ""; - var classname = fqn; - if (fqn.indexOf(".") != -1) { - var idx = fqn.lastIndexOf("."); - namespace = fqn.substring (0, idx); - classname = fqn.substring (idx + 1); - } - - if (!assembly.trim()) - throw new Error("No assembly name specified"); - if (!classname.trim()) - throw new Error("No class name specified"); - if (!methodname.trim()) - throw new Error("No method name specified"); - - var asm = this.assembly_load (assembly); - if (!asm) - throw new Error ("Could not find assembly: " + assembly); - - var klass = this.find_class(asm, namespace, classname); - if (!klass) - throw new Error ("Could not find class: " + namespace + ":" + classname + " in assembly " + assembly); - - var method = this.find_method (klass, methodname, -1); - if (!method) - throw new Error ("Could not find method: " + methodname); - return method; - }, - - call_static_method: function (fqn, args, signature) { - this.bindings_lazy_init (); - - var method = this.resolve_method_fqn (fqn); - - if (typeof signature === "undefined") - signature = Module.mono_method_get_call_signature (method); - - return this.call_method (method, null, signature, args); - }, - - bind_static_method: function (fqn, signature) { - this.bindings_lazy_init (); - - var method = this.resolve_method_fqn (fqn); - - if (typeof signature === "undefined") - signature = Module.mono_method_get_call_signature (method); - - return BINDING.bind_method (method, null, signature, fqn); - }, - - bind_assembly_entry_point: function (assembly, signature) { - this.bindings_lazy_init (); - - var asm = this.assembly_load (assembly); - if (!asm) - throw new Error ("Could not find assembly: " + assembly); - - var method = this.assembly_get_entry_point(asm); - if (!method) - throw new Error ("Could not find entry point for assembly: " + assembly); - - if (typeof signature === "undefined") - signature = Module.mono_method_get_call_signature (method); - - return function() { - try { - var args = [...arguments]; - if (args.length > 0 && Array.isArray (args[0])) - args[0] = BINDING.js_array_to_mono_array (args[0], true); - - let result = BINDING.call_method (method, null, signature, args); - return Promise.resolve (result); - } catch (error) { - return Promise.reject (error); - } - }; - }, - call_assembly_entry_point: function (assembly, args, signature) { - return this.bind_assembly_entry_point (assembly, signature) (...args) - }, - // Object wrapping helper functions to handle reference handles that will - // be used in managed code. - mono_wasm_register_obj: function(obj) { - - var gc_handle = undefined; - if (obj !== null && typeof obj !== "undefined") - { - gc_handle = obj.__mono_gchandle__; - - if (typeof gc_handle === "undefined") { - var handle = this.mono_wasm_free_list.length ? - this.mono_wasm_free_list.pop() : this.mono_wasm_ref_counter++; - obj.__mono_jshandle__ = handle; - // Obtain the JS -> C# type mapping. - var wasm_type = obj[Symbol.for("wasm type")]; - obj.__owns_handle__ = true; - gc_handle = obj.__mono_gchandle__ = this.wasm_binding_obj_new(handle + 1, obj.__owns_handle__, typeof wasm_type === "undefined" ? -1 : wasm_type); - this.mono_wasm_object_registry[handle] = obj; - - } - } - return gc_handle; - }, - mono_wasm_require_handle: function(handle) { - if (handle > 0) - return this.mono_wasm_object_registry[handle - 1]; - return null; - }, - mono_wasm_unregister_obj: function(js_id) { - var obj = this.mono_wasm_object_registry[js_id - 1]; - if (typeof obj !== "undefined" && obj !== null) { - // if this is the global object then do not - // unregister it. - if (globalThis === obj) - return obj; - - var gc_handle = obj.__mono_gchandle__; - if (typeof gc_handle !== "undefined") { - - obj.__mono_gchandle__ = undefined; - obj.__mono_jshandle__ = undefined; - - // If we are unregistering a delegate then mark it as not being alive - // this will be checked in the delegate invoke and throw an appropriate - // error. - if (typeof obj.__mono_delegate_alive__ !== "undefined") - obj.__mono_delegate_alive__ = false; - - this.mono_wasm_object_registry[js_id - 1] = undefined; - this.mono_wasm_free_list.push(js_id - 1); - } - } - return obj; - }, - mono_wasm_free_handle: function(handle) { - this.mono_wasm_unregister_obj(handle); - }, - mono_wasm_free_raw_object: function(js_id) { - var obj = this.mono_wasm_object_registry[js_id - 1]; - if (typeof obj !== "undefined" && obj !== null) { - // if this is the global object then do not - // unregister it. - if (globalThis === obj) - return obj; - - var gc_handle = obj.__mono_gchandle__; - if (typeof gc_handle !== "undefined") { - - obj.__mono_gchandle__ = undefined; - obj.__mono_jshandle__ = undefined; - - this.mono_wasm_object_registry[js_id - 1] = undefined; - this.mono_wasm_free_list.push(js_id - 1); - } - } - return obj; - }, - mono_wasm_parse_args : function (args) { - var js_args = this.mono_array_to_js_array(args); - this.mono_wasm_save_LMF(); - return js_args; - }, - mono_wasm_save_LMF : function () { - //console.log("save LMF: " + BINDING.mono_wasm_owned_objects_frames.length) - BINDING.mono_wasm_owned_objects_frames.push(BINDING.mono_wasm_owned_objects_LMF); - BINDING.mono_wasm_owned_objects_LMF = undefined; - }, - mono_wasm_unwind_LMF : function () { - var __owned_objects__ = this.mono_wasm_owned_objects_frames.pop(); - // Release all managed objects that are loaded into the LMF - if (typeof __owned_objects__ !== "undefined") - { - // Look into passing the array of owned object handles in one pass. - var refidx; - for (refidx = 0; refidx < __owned_objects__.length; refidx++) - { - var ownerRelease = __owned_objects__[refidx]; - this.call_method(this.safehandle_release_by_handle, null, "i", [ ownerRelease ]); - } - } - //console.log("restore LMF: " + BINDING.mono_wasm_owned_objects_frames.length) - - }, - mono_wasm_convert_return_value: function (ret) { - this.mono_wasm_unwind_LMF(); - return this.js_to_mono_obj (ret); - }, - }, - - mono_wasm_invoke_js_with_args: function(js_handle, method_name, args, is_exception) { - BINDING.bindings_lazy_init (); - - var obj = BINDING.get_js_obj (js_handle); - if (!obj) { - setValue (is_exception, 1, "i32"); - return BINDING.js_string_to_mono_string ("Invalid JS object handle '" + js_handle + "'"); - } - - var js_name = BINDING.conv_string (method_name, false); - if (!js_name) { - setValue (is_exception, 1, "i32"); - return BINDING.js_string_to_mono_string ("Invalid method name object '" + method_name + "'"); - } - - var js_args = BINDING.mono_wasm_parse_args(args); - - var res; - try { - var m = obj [js_name]; - if (typeof m === "undefined") - throw new Error("Method: '" + js_name + "' not found for: '" + Object.prototype.toString.call(obj) + "'"); - var res = m.apply (obj, js_args); - return BINDING.mono_wasm_convert_return_value(res); - } catch (e) { - // make sure we release object reference counts on errors. - BINDING.mono_wasm_unwind_LMF(); - var res = e.toString (); - setValue (is_exception, 1, "i32"); - if (res === null || res === undefined) - res = "unknown exception"; - return BINDING.js_string_to_mono_string (res); - } - }, - mono_wasm_get_object_property: function(js_handle, property_name, is_exception) { - BINDING.bindings_lazy_init (); - - var obj = BINDING.mono_wasm_require_handle (js_handle); - if (!obj) { - setValue (is_exception, 1, "i32"); - return BINDING.js_string_to_mono_string ("Invalid JS object handle '" + js_handle + "'"); - } - - var js_name = BINDING.conv_string (property_name, false); - if (!js_name) { - setValue (is_exception, 1, "i32"); - return BINDING.js_string_to_mono_string ("Invalid property name object '" + js_name + "'"); - } - - var res; - try { - var m = obj [js_name]; - if (m === Object(m) && obj.__is_mono_proxied__) - m.__is_mono_proxied__ = true; - - return BINDING.js_to_mono_obj (m); - } catch (e) { - var res = e.toString (); - setValue (is_exception, 1, "i32"); - if (res === null || typeof res === "undefined") - res = "unknown exception"; - return BINDING.js_string_to_mono_string (res); - } - }, - mono_wasm_set_object_property: function (js_handle, property_name, value, createIfNotExist, hasOwnProperty, is_exception) { - - BINDING.bindings_lazy_init (); - - var requireObject = BINDING.mono_wasm_require_handle (js_handle); - if (!requireObject) { - setValue (is_exception, 1, "i32"); - return BINDING.js_string_to_mono_string ("Invalid JS object handle '" + js_handle + "'"); - } - - var property = BINDING.conv_string (property_name, false); - if (!property) { - setValue (is_exception, 1, "i32"); - return BINDING.js_string_to_mono_string ("Invalid property name object '" + property_name + "'"); - } - - var result = false; - - var js_value = BINDING.unbox_mono_obj(value); - BINDING.mono_wasm_save_LMF(); - - if (createIfNotExist) { - requireObject[property] = js_value; - result = true; - } - else { - result = false; - if (!createIfNotExist) - { - if (!requireObject.hasOwnProperty(property)) - return false; - } - if (hasOwnProperty === true) { - if (requireObject.hasOwnProperty(property)) { - requireObject[property] = js_value; - result = true; - } - } - else { - requireObject[property] = js_value; - result = true; - } - - } - BINDING.mono_wasm_unwind_LMF(); - return BINDING._box_js_bool (result); - }, - mono_wasm_get_by_index: function(js_handle, property_index, is_exception) { - BINDING.bindings_lazy_init (); - - var obj = BINDING.mono_wasm_require_handle (js_handle); - if (!obj) { - setValue (is_exception, 1, "i32"); - return BINDING.js_string_to_mono_string ("Invalid JS object handle '" + js_handle + "'"); - } - - try { - var m = obj [property_index]; - return BINDING.js_to_mono_obj (m); - } catch (e) { - var res = e.toString (); - setValue (is_exception, 1, "i32"); - if (res === null || typeof res === "undefined") - res = "unknown exception"; - return BINDING.js_string_to_mono_string (res); - } - }, - mono_wasm_set_by_index: function(js_handle, property_index, value, is_exception) { - BINDING.bindings_lazy_init (); - - var obj = BINDING.mono_wasm_require_handle (js_handle); - if (!obj) { - setValue (is_exception, 1, "i32"); - return BINDING.js_string_to_mono_string ("Invalid JS object handle '" + js_handle + "'"); - } - - var js_value = BINDING.unbox_mono_obj(value); - BINDING.mono_wasm_save_LMF(); - - try { - obj [property_index] = js_value; - BINDING.mono_wasm_unwind_LMF(); - return true; - } catch (e) { - var res = e.toString (); - setValue (is_exception, 1, "i32"); - if (res === null || typeof res === "undefined") - res = "unknown exception"; - return BINDING.js_string_to_mono_string (res); - } - }, - mono_wasm_get_global_object: function(global_name, is_exception) { - BINDING.bindings_lazy_init (); - - var js_name = BINDING.conv_string (global_name, false); - - var globalObj; - - if (!js_name) { - globalObj = globalThis; - } - else { - globalObj = globalThis[js_name]; - } - - if (globalObj === null || typeof globalObj === undefined) { - setValue (is_exception, 1, "i32"); - return BINDING.js_string_to_mono_string ("Global object '" + js_name + "' not found."); - } - - return BINDING.js_to_mono_obj (globalObj); - }, - mono_wasm_release_handle: function(js_handle, is_exception) { - BINDING.bindings_lazy_init (); - - BINDING.mono_wasm_free_handle(js_handle); - }, - mono_wasm_release_object: function(js_handle, is_exception) { - BINDING.bindings_lazy_init (); - - BINDING.mono_wasm_free_raw_object(js_handle); - }, - mono_wasm_bind_core_object: function(js_handle, gc_handle, is_exception) { - BINDING.bindings_lazy_init (); - - var requireObject = BINDING.mono_wasm_require_handle (js_handle); - if (!requireObject) { - setValue (is_exception, 1, "i32"); - return BINDING.js_string_to_mono_string ("Invalid JS object handle '" + js_handle + "'"); - } - - BINDING.wasm_bind_core_clr_obj(js_handle, gc_handle ); - requireObject.__mono_gchandle__ = gc_handle; - requireObject.__js_handle__ = js_handle; - return gc_handle; - }, - mono_wasm_bind_host_object: function(js_handle, gc_handle, is_exception) { - BINDING.bindings_lazy_init (); - - var requireObject = BINDING.mono_wasm_require_handle (js_handle); - if (!requireObject) { - setValue (is_exception, 1, "i32"); - return BINDING.js_string_to_mono_string ("Invalid JS object handle '" + js_handle + "'"); - } - - BINDING.wasm_bind_core_clr_obj(js_handle, gc_handle ); - requireObject.__mono_gchandle__ = gc_handle; - return gc_handle; - }, - mono_wasm_new: function (core_name, args, is_exception) { - BINDING.bindings_lazy_init (); - - var js_name = BINDING.conv_string (core_name, false); - - if (!js_name) { - setValue (is_exception, 1, "i32"); - return BINDING.js_string_to_mono_string ("Core object '" + js_name + "' not found."); - } - - var coreObj = globalThis[js_name]; - - if (coreObj === null || typeof coreObj === "undefined") { - setValue (is_exception, 1, "i32"); - return BINDING.js_string_to_mono_string ("JavaScript host object '" + js_name + "' not found."); - } - - var js_args = BINDING.mono_wasm_parse_args(args); - - try { - - // This is all experimental !!!!!! - var allocator = function(constructor, js_args) { - // Not sure if we should be checking for anything here - var argsList = new Array(); - argsList[0] = constructor; - if (js_args) - argsList = argsList.concat (js_args); - var tempCtor = constructor.bind.apply (constructor, argsList); - var obj = new tempCtor (); - return obj; - }; - - var res = allocator(coreObj, js_args); - var gc_handle = BINDING.mono_wasm_free_list.length ? BINDING.mono_wasm_free_list.pop() : BINDING.mono_wasm_ref_counter++; - BINDING.mono_wasm_object_registry[gc_handle] = res; - return BINDING.mono_wasm_convert_return_value(gc_handle + 1); - } catch (e) { - var res = e.toString (); - setValue (is_exception, 1, "i32"); - if (res === null || res === undefined) - res = "Error allocating object."; - return BINDING.js_string_to_mono_string (res); - } - - }, - - mono_wasm_typed_array_to_array: function(js_handle, is_exception) { - BINDING.bindings_lazy_init (); - - var requireObject = BINDING.mono_wasm_require_handle (js_handle); - if (!requireObject) { - setValue (is_exception, 1, "i32"); - return BINDING.js_string_to_mono_string ("Invalid JS object handle '" + js_handle + "'"); - } - - return BINDING.js_typed_array_to_array(requireObject); - }, - mono_wasm_typed_array_copy_to: function(js_handle, pinned_array, begin, end, bytes_per_element, is_exception) { - BINDING.bindings_lazy_init (); - - var requireObject = BINDING.mono_wasm_require_handle (js_handle); - if (!requireObject) { - setValue (is_exception, 1, "i32"); - return BINDING.js_string_to_mono_string ("Invalid JS object handle '" + js_handle + "'"); - } - - var res = BINDING.typedarray_copy_to(requireObject, pinned_array, begin, end, bytes_per_element); - return BINDING.js_to_mono_obj (res) - }, - mono_wasm_typed_array_from: function(pinned_array, begin, end, bytes_per_element, type, is_exception) { - BINDING.bindings_lazy_init (); - var res = BINDING.typed_array_from(pinned_array, begin, end, bytes_per_element, type); - return BINDING.js_to_mono_obj (res) - }, - mono_wasm_typed_array_copy_from: function(js_handle, pinned_array, begin, end, bytes_per_element, is_exception) { - BINDING.bindings_lazy_init (); - - var requireObject = BINDING.mono_wasm_require_handle (js_handle); - if (!requireObject) { - setValue (is_exception, 1, "i32"); - return BINDING.js_string_to_mono_string ("Invalid JS object handle '" + js_handle + "'"); - } - - var res = BINDING.typedarray_copy_from(requireObject, pinned_array, begin, end, bytes_per_element); - return BINDING.js_to_mono_obj (res) - }, - - -}; - -autoAddDeps(BindingSupportLib, '$BINDING') -mergeInto(LibraryManager.library, BindingSupportLib) - -// SIG // Begin signature block -// SIG // MIIkjAYJKoZIhvcNAQcCoIIkfTCCJHkCAQExDzANBglg -// SIG // hkgBZQMEAgEFADB3BgorBgEEAYI3AgEEoGkwZzAyBgor -// SIG // BgEEAYI3AgEeMCQCAQEEEBDgyQbOONQRoqMAEEvTUJAC -// SIG // AQACAQACAQACAQACAQAwMTANBglghkgBZQMEAgEFAAQg -// SIG // nxTMCwiUNcOBRhhNQT5WVPUesv0mhdRMmZ4ME03Cqb+g -// SIG // gg3wMIIGbjCCBFagAwIBAgITMwAAAhOMDBwxNbzSXwAA -// SIG // AAACEzANBgkqhkiG9w0BAQwFADB+MQswCQYDVQQGEwJV -// SIG // UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH -// SIG // UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv -// SIG // cmF0aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQgQ29kZSBT -// SIG // aWduaW5nIFBDQSAyMDExMB4XDTIxMDIxMTIwMDk1MVoX -// SIG // DTIyMDIxMDIwMDk1MVowYzELMAkGA1UEBhMCVVMxEzAR -// SIG // BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1v -// SIG // bmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv -// SIG // bjENMAsGA1UEAxMELk5FVDCCAaIwDQYJKoZIhvcNAQEB -// SIG // BQADggGPADCCAYoCggGBAJtZcELdrGHlHCF6nz4bH8vW -// SIG // l5M3GfXIf7JY7OovRwgweTptJQGby0YHZ+iCrWIE7fTc -// SIG // /c9eGKGm+EsuWHnanAm9Ro7MSjdPsYBRaif1Y6dyhBcb -// SIG // b44guUNKlplq7L1k3ldXFFzyAt+u8UzCL5QFwibg2nWi -// SIG // QmCkoJWhiA6RxEPgEZ/ss2ICppgLHm1o6vy1P4ci6aMk -// SIG // Tj2s1uct/oFflYwE0DsK1OrFH7QvoIqWCAuXUXjZOKnF -// SIG // oRia22+ci2oxs/LVkgqcMwC35KHvUBzCW3LME/dSBWCO -// SIG // TV7gieG+gUtxBgPpzomak4thtrQLMRAWl7AOtI7QvsXa -// SIG // FEyQpAlDVz12Sa89KJOLBPksBRDw4woRZLlHnUrtxFRp -// SIG // MZsr+9cf2zfZPG4ia2iDSBFfXu2BeXrifkT4c/UV5Iy3 -// SIG // qEHCzh1jLmN701jUOhF1QN1LEPn+TCth2b239/34+Bym -// SIG // cIAcDP1EWk8JodsUDedKhK+lAefNL0mzUrIQc6Dxb5cq -// SIG // may/QQIDAQABo4IBfjCCAXowHwYDVR0lBBgwFgYKKwYB -// SIG // BAGCN0wIAQYIKwYBBQUHAwMwHQYDVR0OBBYEFO9NaSC3 -// SIG // 3IwsQ0OKpWHnclste605MFAGA1UdEQRJMEekRTBDMSkw -// SIG // JwYDVQQLEyBNaWNyb3NvZnQgT3BlcmF0aW9ucyBQdWVy -// SIG // dG8gUmljbzEWMBQGA1UEBRMNNDY0MjIzKzQ2NDI5MzAf -// SIG // BgNVHSMEGDAWgBRIbmTlUAXTgqoXNzcitW2oynUClTBU -// SIG // BgNVHR8ETTBLMEmgR6BFhkNodHRwOi8vd3d3Lm1pY3Jv -// SIG // c29mdC5jb20vcGtpb3BzL2NybC9NaWNDb2RTaWdQQ0Ey -// SIG // MDExXzIwMTEtMDctMDguY3JsMGEGCCsGAQUFBwEBBFUw -// SIG // UzBRBggrBgEFBQcwAoZFaHR0cDovL3d3dy5taWNyb3Nv -// SIG // ZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNDb2RTaWdQQ0Ey -// SIG // MDExXzIwMTEtMDctMDguY3J0MAwGA1UdEwEB/wQCMAAw -// SIG // DQYJKoZIhvcNAQEMBQADggIBAFiD+cR0K6evMUeUrBMA -// SIG // pLljV65GDDTzlD4jqr6Mu1NTeZv5L9IJlR6DLAEKaJnB -// SIG // a7fZZ/ME/FZasmc40+WijhDmth/OOc7IpfJ3Ra1auKIA -// SIG // g687mo/eWiPs0nC42oCdchy9Q5AS7K0+MUk7R/p9eCTP -// SIG // NYFjSMItiL+YFYCxaZXqHizwdXcvCIrESq4DXwN+ZdUe -// SIG // GBEO9F2SkMVC61/y2xwSwRWmfO/l4YutKT+dSKjlelYi -// SIG // zFAQaJrGzO5ac56S+K/NMndPL7Od3ohqxMu7gsFUynxY -// SIG // l+eyB9T9I9HrUWoHj6ce4nzOxHC+yDRD6Mi2AaT+IbMO -// SIG // cGvWeJC5iX3tzpMqdz0BOMl6jbff+t+BLS7VtU6JAFCM -// SIG // fk5h+wqIPWjon3tpTuFtCkMOSzIoso3U6kdX0fgrgXnN -// SIG // KJspBXkfKG9lMPOPOKwzua1qjghvgzPMftj1yZqFljJm -// SIG // cjBxs/HKA8J8st1MKcgiBGDX5zkcsHYGuAkIb2fXQuYW -// SIG // y0G78JzzSv1u0LAFj8/Qtx9Hm2wfc20+ww+MYEQ9tu1F -// SIG // uJZK2O7+p7iVziwZvo+XVzuIU7sVjcmJH5Gn/ttfkLQ3 -// SIG // 0jvM9QyV/lYwurg4Gn5Li/IZSN56WGIPilRkXUVurpaV -// SIG // WeYCjeUJzMY2n2tVMFl6pgnGmaA2a0uiG3z0GpMPdbS1 -// SIG // R/oEMIIHejCCBWKgAwIBAgIKYQ6Q0gAAAAAAAzANBgkq -// SIG // hkiG9w0BAQsFADCBiDELMAkGA1UEBhMCVVMxEzARBgNV -// SIG // BAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx -// SIG // HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEy -// SIG // MDAGA1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNh -// SIG // dGUgQXV0aG9yaXR5IDIwMTEwHhcNMTEwNzA4MjA1OTA5 -// SIG // WhcNMjYwNzA4MjEwOTA5WjB+MQswCQYDVQQGEwJVUzET -// SIG // MBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVk -// SIG // bW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0 -// SIG // aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQgQ29kZSBTaWdu -// SIG // aW5nIFBDQSAyMDExMIICIjANBgkqhkiG9w0BAQEFAAOC -// SIG // Ag8AMIICCgKCAgEAq/D6chAcLq3YbqqCEE00uvK2WCGf -// SIG // Qhsqa+laUKq4BjgaBEm6f8MMHt03a8YS2AvwOMKZBrDI -// SIG // OdUBFDFC04kNeWSHfpRgJGyvnkmc6Whe0t+bU7IKLMOv -// SIG // 2akrrnoJr9eWWcpgGgXpZnboMlImEi/nqwhQz7NEt13Y -// SIG // xC4Ddato88tt8zpcoRb0RrrgOGSsbmQ1eKagYw8t00CT -// SIG // +OPeBw3VXHmlSSnnDb6gE3e+lD3v++MrWhAfTVYoonpy -// SIG // 4BI6t0le2O3tQ5GD2Xuye4Yb2T6xjF3oiU+EGvKhL1nk -// SIG // kDstrjNYxbc+/jLTswM9sbKvkjh+0p2ALPVOVpEhNSXD -// SIG // OW5kf1O6nA+tGSOEy/S6A4aN91/w0FK/jJSHvMAhdCVf -// SIG // GCi2zCcoOCWYOUo2z3yxkq4cI6epZuxhH2rhKEmdX4ji -// SIG // JV3TIUs+UsS1Vz8kA/DRelsv1SPjcF0PUUZ3s/gA4bys -// SIG // AoJf28AVs70b1FVL5zmhD+kjSbwYuER8ReTBw3J64HLn -// SIG // JN+/RpnF78IcV9uDjexNSTCnq47f7Fufr/zdsGbiwZeB -// SIG // e+3W7UvnSSmnEyimp31ngOaKYnhfsi+E11ecXL93KCjx -// SIG // 7W3DKI8sj0A3T8HhhUSJxAlMxdSlQy90lfdu+HggWCwT -// SIG // XWCVmj5PM4TasIgX3p5O9JawvEagbJjS4NaIjAsCAwEA -// SIG // AaOCAe0wggHpMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1Ud -// SIG // DgQWBBRIbmTlUAXTgqoXNzcitW2oynUClTAZBgkrBgEE -// SIG // AYI3FAIEDB4KAFMAdQBiAEMAQTALBgNVHQ8EBAMCAYYw -// SIG // DwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBRyLToC -// SIG // MZBDuRQFTuHqp8cx0SOJNDBaBgNVHR8EUzBRME+gTaBL -// SIG // hklodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpL2Ny -// SIG // bC9wcm9kdWN0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFf -// SIG // MDNfMjIuY3JsMF4GCCsGAQUFBwEBBFIwUDBOBggrBgEF -// SIG // BQcwAoZCaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3Br -// SIG // aS9jZXJ0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFfMDNf -// SIG // MjIuY3J0MIGfBgNVHSAEgZcwgZQwgZEGCSsGAQQBgjcu -// SIG // AzCBgzA/BggrBgEFBQcCARYzaHR0cDovL3d3dy5taWNy -// SIG // b3NvZnQuY29tL3BraW9wcy9kb2NzL3ByaW1hcnljcHMu -// SIG // aHRtMEAGCCsGAQUFBwICMDQeMiAdAEwAZQBnAGEAbABf -// SIG // AHAAbwBsAGkAYwB5AF8AcwB0AGEAdABlAG0AZQBuAHQA -// SIG // LiAdMA0GCSqGSIb3DQEBCwUAA4ICAQBn8oalmOBUeRou -// SIG // 09h0ZyKbC5YR4WOSmUKWfdJ5DJDBZV8uLD74w3LRbYP+ -// SIG // vj/oCso7v0epo/Np22O/IjWll11lhJB9i0ZQVdgMknzS -// SIG // Gksc8zxCi1LQsP1r4z4HLimb5j0bpdS1HXeUOeLpZMlE -// SIG // PXh6I/MTfaaQdION9MsmAkYqwooQu6SpBQyb7Wj6aC6V -// SIG // oCo/KmtYSWMfCWluWpiW5IP0wI/zRive/DvQvTXvbiWu -// SIG // 5a8n7dDd8w6vmSiXmE0OPQvyCInWH8MyGOLwxS3OW560 -// SIG // STkKxgrCxq2u5bLZ2xWIUUVYODJxJxp/sfQn+N4sOiBp -// SIG // mLJZiWhub6e3dMNABQamASooPoI/E01mC8CzTfXhj38c -// SIG // bxV9Rad25UAqZaPDXVJihsMdYzaXht/a8/jyFqGaJ+HN -// SIG // pZfQ7l1jQeNbB5yHPgZ3BtEGsXUfFL5hYbXw3MYbBL7f -// SIG // QccOKO7eZS/sl/ahXJbYANahRr1Z85elCUtIEJmAH9AA -// SIG // KcWxm6U/RXceNcbSoqKfenoi+kiVH6v7RyOA9Z74v2u3 -// SIG // S5fi63V4GuzqN5l5GEv/1rMjaHXmr/r8i+sLgOppO6/8 -// SIG // MO0ETI7f33VtY5E90Z1WTk+/gFcioXgRMiF670EKsT/7 -// SIG // qMykXcGhiJtXcVZOSEXAQsmbdlsKgEhr/Xmfwb1tbWrJ -// SIG // UnMTDXpQzTGCFfQwghXwAgEBMIGVMH4xCzAJBgNVBAYT -// SIG // AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH -// SIG // EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y -// SIG // cG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2Rl -// SIG // IFNpZ25pbmcgUENBIDIwMTECEzMAAAITjAwcMTW80l8A -// SIG // AAAAAhMwDQYJYIZIAWUDBAIBBQCgga4wGQYJKoZIhvcN -// SIG // AQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEO -// SIG // MAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIH3V -// SIG // rVuHS6jhW1b2UUHL4nnR4dtJ5uT9jxWIJ1zW6lbkMEIG -// SIG // CisGAQQBgjcCAQwxNDAyoBSAEgBNAGkAYwByAG8AcwBv -// SIG // AGYAdKEagBhodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20w -// SIG // DQYJKoZIhvcNAQEBBQAEggGAluW+auGYLdzMAxqZXnjE -// SIG // AL0vFOlkbqS3YpYbb/93sk5LpYTyyv9AvLiwWOkwP/it -// SIG // RG6yVuwYmaLjRiXdisc6AVn3GoC1SW8CLlO6Yx4Xad+i -// SIG // xbD+KopbBdLcnCy80oJSmKh8peST4SMVsxnMHc6RkYCc -// SIG // wShpd845K6Zr+D/83uLq2wnMJh6kEJHDTPXHOObC5fm4 -// SIG // eAJF8vps7FbW+n8ZgM4zVfiVELaKK+x/uUpaVIIgD99J -// SIG // twXA+0qOhPGlI2KJdh9ptnpLn4wcdTHRq/Vg7GFtC4Un -// SIG // 2aMgDkcer2DrrkUdjtnMoVPo+oWSkLl8hIJDWQUP4apC -// SIG // 7mRCpxNVj9HbxNuV8mXVVacwq590peVGLKEn4US0GBwo -// SIG // d5fXG7T4RJEhBJ2OdQN924/B8asWWxeDm4f3pEIGpnu+ -// SIG // NxnsbDCegbPVuVm97bq51snFul6sQ1NUUNoFOyN+WyAf -// SIG // VLNIDeT9s9X+TrxFqPqA8uYY0pnz83FzlmE/f03Ru08c -// SIG // W1cENGteoYIS/jCCEvoGCisGAQQBgjcDAwExghLqMIIS -// SIG // 5gYJKoZIhvcNAQcCoIIS1zCCEtMCAQMxDzANBglghkgB -// SIG // ZQMEAgEFADCCAVkGCyqGSIb3DQEJEAEEoIIBSASCAUQw -// SIG // ggFAAgEBBgorBgEEAYRZCgMBMDEwDQYJYIZIAWUDBAIB -// SIG // BQAEII2c2aXB+/wtEhB0SYNUVf6+akfrAb8q2mkOPozv -// SIG // Bn+tAgZgsPYTykMYEzIwMjEwNjAzMTAyNzI2LjYzMVow -// SIG // BIACAfSggdikgdUwgdIxCzAJBgNVBAYTAlVTMRMwEQYD -// SIG // VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k -// SIG // MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x -// SIG // LTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJh -// SIG // dGlvbnMgTGltaXRlZDEmMCQGA1UECxMdVGhhbGVzIFRT -// SIG // UyBFU046MTc5RS00QkIwLTgyNDYxJTAjBgNVBAMTHE1p -// SIG // Y3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2Wggg5NMIIE -// SIG // +TCCA+GgAwIBAgITMwAAATyL/bmzP0eX/QAAAAABPDAN -// SIG // BgkqhkiG9w0BAQsFADB8MQswCQYDVQQGEwJVUzETMBEG -// SIG // A1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u -// SIG // ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u -// SIG // MSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQ -// SIG // Q0EgMjAxMDAeFw0yMDEwMTUxNzI4MjNaFw0yMjAxMTIx -// SIG // NzI4MjNaMIHSMQswCQYDVQQGEwJVUzETMBEGA1UECBMK -// SIG // V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwG -// SIG // A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMS0wKwYD -// SIG // VQQLEyRNaWNyb3NvZnQgSXJlbGFuZCBPcGVyYXRpb25z -// SIG // IExpbWl0ZWQxJjAkBgNVBAsTHVRoYWxlcyBUU1MgRVNO -// SIG // OjE3OUUtNEJCMC04MjQ2MSUwIwYDVQQDExxNaWNyb3Nv -// SIG // ZnQgVGltZS1TdGFtcCBTZXJ2aWNlMIIBIjANBgkqhkiG -// SIG // 9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmBAq6WkDqvY5DgaQ -// SIG // t+OX0NCLzqUaivJxHvo6KSXP+VzTas2p6uYa3fcIm+EX -// SIG // b6bj4+vJ+Q5v12btrwqp1qMYct4sa24Ev64Nwkt26qfA -// SIG // INVEIP8QM99k7nnkzmNXDnpXF0WoaLCHI5a65L9dwGnB -// SIG // V5uAG2DAoGDOgc3WSgEXm3OsxL/uEAsuPtQFfER0BxDn -// SIG // aI+NjiaWxVpR72Cs17jNQB+L5o0/aP3wqtplg+yINvwq -// SIG // WiHdoByukfkvdPYitu7lZI1Wqdv0m+AEziyW2lUPl9Po -// SIG // WGxHAnrH/d4PrQEF7rwPHR+t3aCuSOc3WQheVP9w4m35 -// SIG // e2QhbFOpLPqYeIya2wIDAQABo4IBGzCCARcwHQYDVR0O -// SIG // BBYEFOGhZ+LKEvo2s2E/JRjqGL8mZzxGMB8GA1UdIwQY -// SIG // MBaAFNVjOlyKMZDzQ3t8RhvFM2hahW1VMFYGA1UdHwRP -// SIG // ME0wS6BJoEeGRWh0dHA6Ly9jcmwubWljcm9zb2Z0LmNv -// SIG // bS9wa2kvY3JsL3Byb2R1Y3RzL01pY1RpbVN0YVBDQV8y -// SIG // MDEwLTA3LTAxLmNybDBaBggrBgEFBQcBAQROMEwwSgYI -// SIG // KwYBBQUHMAKGPmh0dHA6Ly93d3cubWljcm9zb2Z0LmNv -// SIG // bS9wa2kvY2VydHMvTWljVGltU3RhUENBXzIwMTAtMDct -// SIG // MDEuY3J0MAwGA1UdEwEB/wQCMAAwEwYDVR0lBAwwCgYI -// SIG // KwYBBQUHAwgwDQYJKoZIhvcNAQELBQADggEBADL3EIyU -// SIG // 3Zd5bkjMxakZMUZJSfilkVFJQdyNiiVVm+Bp+nlnSU4l -// SIG // nQtbsXoxdqD19G/l/UCIYvLtQGle/dnhIrdpUM6lYD4n -// SIG // 8k2Ri48ytjqLuD4/xefD6dpuh7qRn7jQHoZZ/oUr7yBO -// SIG // YIBJwor/ZVZACTjJSxxd/A2z7+6clrNC879rI2cDx73Y -// SIG // bVfJQbTmLBPDcc55W7MnPNL0Z0XqpvCUCumfMQA+EnmP -// SIG // HbhRV4XIhExthNG4fvzd5sBp81yczG0igCpMyMOmMan/ -// SIG // sx81jxYpvQxmcJnIavuiQSrW+BBk9BBbX6hgqzjw+Tu7 -// SIG // j8EnY9WqYF6qOx3Lce4XLOao6cIwggZxMIIEWaADAgEC -// SIG // AgphCYEqAAAAAAACMA0GCSqGSIb3DQEBCwUAMIGIMQsw -// SIG // CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQ -// SIG // MA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9z -// SIG // b2Z0IENvcnBvcmF0aW9uMTIwMAYDVQQDEylNaWNyb3Nv -// SIG // ZnQgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAx -// SIG // MDAeFw0xMDA3MDEyMTM2NTVaFw0yNTA3MDEyMTQ2NTVa -// SIG // MHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5n -// SIG // dG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN -// SIG // aWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1p -// SIG // Y3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMIIBIjAN -// SIG // BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqR0NvHcR -// SIG // ijog7PwTl/X6f2mUa3RUENWlCgCChfvtfGhLLF/Fw+Vh -// SIG // wna3PmYrW/AVUycEMR9BGxqVHc4JE458YTBZsTBED/Fg -// SIG // iIRUQwzXTbg4CLNC3ZOs1nMwVyaCo0UN0Or1R4HNvyRg -// SIG // MlhgRvJYR4YyhB50YWeRX4FUsc+TTJLBxKZd0WETbijG -// SIG // GvmGgLvfYfxGwScdJGcSchohiq9LZIlQYrFd/XcfPfBX -// SIG // day9ikJNQFHRD5wGPmd/9WbAA5ZEfu/QS/1u5ZrKsajy -// SIG // eioKMfDaTgaRtogINeh4HLDpmc085y9Euqf03GS9pAHB -// SIG // IAmTeM38vMDJRF1eFpwBBU8iTQIDAQABo4IB5jCCAeIw -// SIG // EAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0OBBYEFNVjOlyK -// SIG // MZDzQ3t8RhvFM2hahW1VMBkGCSsGAQQBgjcUAgQMHgoA -// SIG // UwB1AGIAQwBBMAsGA1UdDwQEAwIBhjAPBgNVHRMBAf8E -// SIG // BTADAQH/MB8GA1UdIwQYMBaAFNX2VsuP6KJcYmjRPZSQ -// SIG // W9fOmhjEMFYGA1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9j -// SIG // cmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3Rz -// SIG // L01pY1Jvb0NlckF1dF8yMDEwLTA2LTIzLmNybDBaBggr -// SIG // BgEFBQcBAQROMEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93 -// SIG // d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljUm9v -// SIG // Q2VyQXV0XzIwMTAtMDYtMjMuY3J0MIGgBgNVHSABAf8E -// SIG // gZUwgZIwgY8GCSsGAQQBgjcuAzCBgTA9BggrBgEFBQcC -// SIG // ARYxaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL1BLSS9k -// SIG // b2NzL0NQUy9kZWZhdWx0Lmh0bTBABggrBgEFBQcCAjA0 -// SIG // HjIgHQBMAGUAZwBhAGwAXwBQAG8AbABpAGMAeQBfAFMA -// SIG // dABhAHQAZQBtAGUAbgB0AC4gHTANBgkqhkiG9w0BAQsF -// SIG // AAOCAgEAB+aIUQ3ixuCYP4FxAz2do6Ehb7Prpsz1Mb7P -// SIG // BeKp/vpXbRkws8LFZslq3/Xn8Hi9x6ieJeP5vO1rVFcI -// SIG // K1GCRBL7uVOMzPRgEop2zEBAQZvcXBf/XPleFzWYJFZL -// SIG // dO9CEMivv3/Gf/I3fVo/HPKZeUqRUgCvOA8X9S95gWXZ -// SIG // qbVr5MfO9sp6AG9LMEQkIjzP7QOllo9ZKby2/QThcJ8y -// SIG // Sif9Va8v/rbljjO7Yl+a21dA6fHOmWaQjP9qYn/dxUoL -// SIG // kSbiOewZSnFjnXshbcOco6I8+n99lmqQeKZt0uGc+R38 -// SIG // ONiU9MalCpaGpL2eGq4EQoO4tYCbIjggtSXlZOz39L9+ -// SIG // Y1klD3ouOVd2onGqBooPiRa6YacRy5rYDkeagMXQzafQ -// SIG // 732D8OE7cQnfXXSYIghh2rBQHm+98eEA3+cxB6STOvdl -// SIG // R3jo+KhIq/fecn5ha293qYHLpwmsObvsxsvYgrRyzR30 -// SIG // uIUBHoD7G4kqVDmyW9rIDVWZeodzOwjmmC3qjeAzLhIp -// SIG // 9cAvVCch98isTtoouLGp25ayp0Kiyc8ZQU3ghvkqmqMR -// SIG // ZjDTu3QyS99je/WZii8bxyGvWbWu3EQ8l1Bx16HSxVXj -// SIG // ad5XwdHeMMD9zOZN+w2/XU/pnR4ZOC+8z1gFLu8NoFA1 -// SIG // 2u8JJxzVs341Hgi62jbb01+P3nSISRKhggLXMIICQAIB -// SIG // ATCCAQChgdikgdUwgdIxCzAJBgNVBAYTAlVTMRMwEQYD -// SIG // VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k -// SIG // MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x -// SIG // LTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJh -// SIG // dGlvbnMgTGltaXRlZDEmMCQGA1UECxMdVGhhbGVzIFRT -// SIG // UyBFU046MTc5RS00QkIwLTgyNDYxJTAjBgNVBAMTHE1p -// SIG // Y3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2WiIwoBATAH -// SIG // BgUrDgMCGgMVAB1LdHpZ3mjy22teinut0UdweuTmoIGD -// SIG // MIGApH4wfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldh -// SIG // c2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNV -// SIG // BAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UE -// SIG // AxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAw -// SIG // DQYJKoZIhvcNAQEFBQACBQDkYrSTMCIYDzIwMjEwNjAz -// SIG // MDk1MzIzWhgPMjAyMTA2MDQwOTUzMjNaMHcwPQYKKwYB -// SIG // BAGEWQoEATEvMC0wCgIFAORitJMCAQAwCgIBAAICHHsC -// SIG // Af8wBwIBAAICEmcwCgIFAORkBhMCAQAwNgYKKwYBBAGE -// SIG // WQoEAjEoMCYwDAYKKwYBBAGEWQoDAqAKMAgCAQACAweh -// SIG // IKEKMAgCAQACAwGGoDANBgkqhkiG9w0BAQUFAAOBgQCY -// SIG // ousN436K7aadq4lBgT0F3tetvOpvcoc5L/B0EHZeb+rx -// SIG // I6wYloEMcVPOaLiSMMf0VDjzUIG3/Q31iN/Cn40W86ZS -// SIG // 86kC3qcwFL+McvgJrNZHpU0a9DUI0lHxJi36t0Z/GC7T -// SIG // XkZpJzeAvJ1M+tpdnSRqvDvn9+wzi3HqdNzQEjGCAw0w -// SIG // ggMJAgEBMIGTMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQI -// SIG // EwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4w -// SIG // HAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAk -// SIG // BgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAy -// SIG // MDEwAhMzAAABPIv9ubM/R5f9AAAAAAE8MA0GCWCGSAFl -// SIG // AwQCAQUAoIIBSjAaBgkqhkiG9w0BCQMxDQYLKoZIhvcN -// SIG // AQkQAQQwLwYJKoZIhvcNAQkEMSIEIGcjizRAV34zL9eJ -// SIG // b2RFHY1/tZslsyH/7JVBDzcmxfxYMIH6BgsqhkiG9w0B -// SIG // CRACLzGB6jCB5zCB5DCBvQQgoEkCuk0kv8DnOqm31HwR -// SIG // r+2IbD3xmIW4FSGK4SboWkYwgZgwgYCkfjB8MQswCQYD -// SIG // VQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4G -// SIG // A1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0 -// SIG // IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQg -// SIG // VGltZS1TdGFtcCBQQ0EgMjAxMAITMwAAATyL/bmzP0eX -// SIG // /QAAAAABPDAiBCALHqq7hdXl2pLRNhwHbHSPjkcaMyvv -// SIG // QZpBGWeSTRYazzANBgkqhkiG9w0BAQsFAASCAQBkJ1KB -// SIG // vdXdE1TIb5f+SIDE5GixmmZqtTSyAZ8eeHco27axheRx -// SIG // g3T8HtjDx0nfyKBsA6ukiu+IUXt/jQek6fjxPJLSCI4I -// SIG // Gozyb6SXL2AI1f0Do0kKqTxiSgc3JiCJBiuI9y1jUBcX -// SIG // Tuw06nrSkMzDhcAXg0OiPoSN/K7ZWSfMPCJrc+t+eT79 -// SIG // 9DpbzCXpGvVH/sLrp+hl+Wb9R3AlTQoh0aehcm3CiGBo -// SIG // hIodIiPZsKm4ne/1Otr8HVUnXa52+SqNRbCuVClEvqVL -// SIG // o8GQB7tdfTbLOrEzrdm9omSaXNYSNMsEDHNC04E6j1Ys -// SIG // Oko6bU9skHp/7vp0NRkY5W6Fj4uu -// SIG // End signature block diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/corebindings.c b/Examples/Complete/Camera/Blazor/wwwroot/_framework/corebindings.c deleted file mode 100644 index a0263c2a8b..0000000000 --- a/Examples/Complete/Camera/Blazor/wwwroot/_framework/corebindings.c +++ /dev/null @@ -1,177 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -#include -#include -#include -#include -#include -#include - -#include - -//JS funcs -extern MonoObject* mono_wasm_invoke_js_with_args (int js_handle, MonoString *method, MonoArray *args, int *is_exception); -extern MonoObject* mono_wasm_get_object_property (int js_handle, MonoString *propertyName, int *is_exception); -extern MonoObject* mono_wasm_get_by_index (int js_handle, int property_index, int *is_exception); -extern MonoObject* mono_wasm_set_object_property (int js_handle, MonoString *propertyName, MonoObject *value, int createIfNotExist, int hasOwnProperty, int *is_exception); -extern MonoObject* mono_wasm_set_by_index (int js_handle, int property_index, MonoObject *value, int *is_exception); -extern MonoObject* mono_wasm_get_global_object (MonoString *global_name, int *is_exception); -extern void* mono_wasm_release_handle (int js_handle, int *is_exception); -extern void* mono_wasm_release_object (int js_handle, int *is_exception); -extern MonoObject* mono_wasm_new (MonoString *core_name, MonoArray *args, int *is_exception); -extern int mono_wasm_bind_core_object (int js_handle, int gc_handle, int *is_exception); -extern int mono_wasm_bind_host_object (int js_handle, int gc_handle, int *is_exception); -extern MonoObject* mono_wasm_typed_array_to_array (int js_handle, int *is_exception); -extern MonoObject* mono_wasm_typed_array_copy_to (int js_handle, int ptr, int begin, int end, int bytes_per_element, int *is_exception); -extern MonoObject* mono_wasm_typed_array_from (int ptr, int begin, int end, int bytes_per_element, int type, int *is_exception); -extern MonoObject* mono_wasm_typed_array_copy_from (int js_handle, int ptr, int begin, int end, int bytes_per_element, int *is_exception); - -// Compiles a JavaScript function from the function data passed. -// Note: code snippet is not a function definition. Instead it must create and return a function instance. -EM_JS(MonoObject*, compile_function, (int snippet_ptr, int len, int *is_exception), { - try { - var data = MONO.string_decoder.decode (snippet_ptr, snippet_ptr + len); - var wrapper = '(function () { ' + data + ' })'; - var funcFactory = eval(wrapper); - var func = funcFactory(); - if (typeof func !== 'function') { - throw new Error('Code must return an instance of a JavaScript function. ' - + 'Please use `return` statement to return a function.'); - } - setValue (is_exception, 0, "i32"); - return BINDING.js_to_mono_obj (func); - } - catch (e) - { - res = e.toString (); - setValue (is_exception, 1, "i32"); - if (res === null || res === undefined) - res = "unknown exception"; - return BINDING.js_to_mono_obj (res); - } -}); - -static MonoObject* -mono_wasm_compile_function (MonoString *str, int *is_exception) -{ - if (str == NULL) - return NULL; - //char *native_val = mono_string_to_utf8 (str); - mono_unichar2 *native_val = mono_string_chars (str); - int native_len = mono_string_length (str) * 2; - - MonoObject* native_res = compile_function((int)native_val, native_len, is_exception); - mono_free (native_val); - if (native_res == NULL) - return NULL; - return native_res; -} - -void core_initialize_internals () -{ - mono_add_internal_call ("Interop/Runtime::InvokeJSWithArgs", mono_wasm_invoke_js_with_args); - mono_add_internal_call ("Interop/Runtime::GetObjectProperty", mono_wasm_get_object_property); - mono_add_internal_call ("Interop/Runtime::GetByIndex", mono_wasm_get_by_index); - mono_add_internal_call ("Interop/Runtime::SetObjectProperty", mono_wasm_set_object_property); - mono_add_internal_call ("Interop/Runtime::SetByIndex", mono_wasm_set_by_index); - mono_add_internal_call ("Interop/Runtime::GetGlobalObject", mono_wasm_get_global_object); - mono_add_internal_call ("Interop/Runtime::ReleaseHandle", mono_wasm_release_handle); - mono_add_internal_call ("Interop/Runtime::ReleaseObject", mono_wasm_release_object); - mono_add_internal_call ("Interop/Runtime::BindCoreObject", mono_wasm_bind_core_object); - mono_add_internal_call ("Interop/Runtime::BindHostObject", mono_wasm_bind_host_object); - mono_add_internal_call ("Interop/Runtime::New", mono_wasm_new); - mono_add_internal_call ("Interop/Runtime::TypedArrayToArray", mono_wasm_typed_array_to_array); - mono_add_internal_call ("Interop/Runtime::TypedArrayCopyTo", mono_wasm_typed_array_copy_to); - mono_add_internal_call ("Interop/Runtime::TypedArrayFrom", mono_wasm_typed_array_from); - mono_add_internal_call ("Interop/Runtime::TypedArrayCopyFrom", mono_wasm_typed_array_copy_from); - mono_add_internal_call ("Interop/Runtime::CompileFunction", mono_wasm_compile_function); - -} - -// Int8Array | int8_t | byte or SByte (signed byte) -// Uint8Array | uint8_t | byte or Byte (unsigned byte) -// Uint8ClampedArray| uint8_t | byte or Byte (unsigned byte) -// Int16Array | int16_t | short (signed short) -// Uint16Array | uint16_t | ushort (unsigned short) -// Int32Array | int32_t | int (signed integer) -// Uint32Array | uint32_t | uint (unsigned integer) -// Float32Array | float | float -// Float64Array | double | double -// typed array marshalling -#define MARSHAL_ARRAY_BYTE 10 -#define MARSHAL_ARRAY_UBYTE 11 -#define MARSHAL_ARRAY_UBYTE_C 12 // alias of MARSHAL_ARRAY_UBYTE -#define MARSHAL_ARRAY_SHORT 13 -#define MARSHAL_ARRAY_USHORT 14 -#define MARSHAL_ARRAY_INT 15 -#define MARSHAL_ARRAY_UINT 16 -#define MARSHAL_ARRAY_FLOAT 17 -#define MARSHAL_ARRAY_DOUBLE 18 - -EMSCRIPTEN_KEEPALIVE MonoArray* -mono_wasm_typed_array_new (char *arr, int length, int size, int type) -{ - MonoClass *typeClass = mono_get_byte_class(); // default is Byte - switch (type) { - case MARSHAL_ARRAY_BYTE: - typeClass = mono_get_sbyte_class(); - break; - case MARSHAL_ARRAY_SHORT: - typeClass = mono_get_int16_class(); - break; - case MARSHAL_ARRAY_USHORT: - typeClass = mono_get_uint16_class(); - break; - case MARSHAL_ARRAY_INT: - typeClass = mono_get_int32_class(); - break; - case MARSHAL_ARRAY_UINT: - typeClass = mono_get_uint32_class(); - break; - case MARSHAL_ARRAY_FLOAT: - typeClass = mono_get_single_class(); - break; - case MARSHAL_ARRAY_DOUBLE: - typeClass = mono_get_double_class(); - break; - } - - MonoArray *buffer; - - buffer = mono_array_new (mono_get_root_domain(), typeClass, length); - memcpy(mono_array_addr_with_size(buffer, sizeof(char), 0), arr, length * size); - - return buffer; -} - -EMSCRIPTEN_KEEPALIVE int -mono_wasm_unbox_enum (MonoObject *obj) -{ - if (!obj) - return 0; - - MonoType *type = mono_class_get_type (mono_object_get_class(obj)); - - void *ptr = mono_object_unbox (obj); - switch (mono_type_get_type(mono_type_get_underlying_type (type))) { - case MONO_TYPE_I1: - case MONO_TYPE_U1: - return *(unsigned char*)ptr; - case MONO_TYPE_I2: - return *(short*)ptr; - case MONO_TYPE_U2: - return *(unsigned short*)ptr; - case MONO_TYPE_I4: - return *(int*)ptr; - case MONO_TYPE_U4: - return *(unsigned int*)ptr; - // WASM doesn't support returning longs to JS - // case MONO_TYPE_I8: - // case MONO_TYPE_U8: - default: - printf ("Invalid type %d to mono_unbox_enum\n", mono_type_get_type(mono_type_get_underlying_type (type))); - return 0; - } -} - - diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/dotnet.6.0.0-preview.5.21301.5.js b/Examples/Complete/Camera/Blazor/wwwroot/_framework/dotnet.6.0.0-preview.5.21301.5.js deleted file mode 100644 index 5d37b02174..0000000000 --- a/Examples/Complete/Camera/Blazor/wwwroot/_framework/dotnet.6.0.0-preview.5.21301.5.js +++ /dev/null @@ -1,288 +0,0 @@ -var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram="./this.program";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string";ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;var nodeFS;var nodePath;if(ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){scriptDirectory=require("path").dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}read_=function shell_read(filename,binary){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);return nodeFS["readFileSync"](filename,binary?null:"utf8")};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){thisProgram=process["argv"][1].replace(/\\/g,"/")}arguments_=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);quit_=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){read_=function shell_read(f){return read(f)}}readBinary=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){arguments_=scriptArgs}else if(typeof arguments!="undefined"){arguments_=arguments}if(typeof quit==="function"){quit_=function(status){quit(status)}}if(typeof print!=="undefined"){if(typeof console==="undefined")console={};console.log=print;console.warn=console.error=typeof printErr!=="undefined"?printErr:print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!=="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=function(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=function(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=function(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var STACK_ALIGN=16;function alignMemory(size,factor){if(!factor)factor=STACK_ALIGN;return Math.ceil(size/factor)*factor}function convertJsFunctionToWasm(func,sig){if(typeof WebAssembly.Function==="function"){var typeNames={"i":"i32","j":"i64","f":"f32","d":"f64"};var type={parameters:[],results:sig[0]=="v"?[]:[typeNames[sig[0]]]};for(var i=1;i>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}function getValue(ptr,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":return HEAP8[ptr>>0];case"i8":return HEAP8[ptr>>0];case"i16":return HEAP16[ptr>>1];case"i32":return HEAP32[ptr>>2];case"i64":return HEAP32[ptr>>2];case"float":return HEAPF32[ptr>>2];case"double":return HEAPF64[ptr>>3];default:abort("invalid type for getValue: "+type)}return null}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func}function ccall(ident,returnType,argTypes,args,opts){var toC={"string":function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret},"array":function(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType==="string")return UTF8ToString(ret);if(returnType==="boolean")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}function stringToUTF16(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite>1]=codeUnit;outPtr+=2}HEAP16[outPtr>>1]=0;return outPtr-startPtr}function allocateUTF8(str){var size=lengthBytesUTF8(str)+1;var ret=_malloc(size);if(ret)stringToUTF8Array(str,HEAP8,ret,size);return ret}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||16777216;var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;__ATINIT__.push({func:function(){___wasm_call_ctors()}});function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();SOCKFS.root=FS.mount(SOCKFS,{},null);callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what+="";err(what);ABORT=true;EXITSTATUS=1;what="abort("+what+"). Build with -s ASSERTIONS=1 for more info.";var e=new WebAssembly.RuntimeError(what);throw e}function hasPrefix(str,prefix){return String.prototype.startsWith?str.startsWith(prefix):str.indexOf(prefix)===0}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return hasPrefix(filename,dataURIPrefix)}var fileURIPrefix="file://";function isFileURI(filename){return hasPrefix(filename,fileURIPrefix)}var wasmBinaryFile="dotnet.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch==="function"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(wasmBinaryFile)})}else{if(readAsync){return new Promise(function(resolve,reject){readAsync(wasmBinaryFile,function(response){resolve(new Uint8Array(response))},reject)})}}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["Sa"];updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module["asm"]["Ta"];removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiatedSource)})})}else{return instantiateArrayBuffer(receiveInstantiatedSource)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync();return{}}var tempDouble;var tempI64;var ASM_CONSTS={100232:function($0,$1){var level=$0;var message=Module.UTF8ToString($1);var namespace="Debugger.Debug";if(MONO["logging"]&&MONO.logging["debugger"]){MONO.logging.debugger(level,message);return}console.debug("%s: %s",namespace,message)},102604:function($0,$1,$2){MONO.mono_wasm_add_typed_value("pointer",$0,{ptr_addr:$1,klass_addr:$2})},102719:function($0,$1,$2){MONO.mono_wasm_add_typed_value("array",$0,{objectId:$1,length:$2})},102831:function($0,$1,$2,$3,$4,$5){MONO.mono_wasm_add_typed_value($0,$1,{toString:$2,value_addr:$3,value_size:$4,klass:$5})},102953:function($0,$1,$2){MONO.mono_wasm_add_typed_value($0,$1,{toString:$2})},103391:function($0,$1,$2,$3,$4){MONO.mono_wasm_add_properties_var($0,{field_offset:$1,is_own:$2,attr:$3,owner_class:$4})},541329:function($0,$1){MONO.string_decoder.decode($0,$0+$1,true)},541702:function($0,$1,$2,$3){var str=MONO.string_decoder.decode($0,$0+$1);try{var res=eval(str);if(res===null||res==undefined)return 0;res=res.toString();setValue($2,0,"i32")}catch(e){res=e.toString();setValue($2,1,"i32");if(res===null||res===undefined)res="unknown exception";var stack=e.stack;if(stack){if(stack.startsWith(res))res=stack;else res+="\n"+stack}}var buff=Module._malloc((res.length+1)*2);stringToUTF16(res,buff,(res.length+1)*2);setValue($3,res.length,"i32");return buff},542256:function($0,$1,$2,$3,$4){var log_level=$0;var message=Module.UTF8ToString($1);var isFatal=$2;var domain=Module.UTF8ToString($3);var dataPtr=$4;if(MONO["logging"]&&MONO.logging["trace"]){MONO.logging.trace(domain,log_level,message,isFatal,dataPtr);return}if(isFatal)console.trace(message);switch(Module.UTF8ToString($0)){case"critical":case"error":console.error(message);break;case"warning":console.warn(message);break;case"message":console.log(message);break;case"info":console.info(message);break;case"debug":console.debug(message);break;default:console.log(message);break}}};function compile_function(snippet_ptr,len,is_exception){try{var data=MONO.string_decoder.decode(snippet_ptr,snippet_ptr+len);var wrapper="(function () { "+data+" })";var funcFactory=eval(wrapper);var func=funcFactory();if(typeof func!=="function"){throw new Error("Code must return an instance of a JavaScript function. "+"Please use `return` statement to return a function.")}setValue(is_exception,0,"i32");return BINDING.js_to_mono_obj(func)}catch(e){res=e.toString();setValue(is_exception,1,"i32");if(res===null||res===undefined)res="unknown exception";return BINDING.js_to_mono_obj(res)}}function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){wasmTable.get(func)()}else{wasmTable.get(func)(callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}var _emscripten_get_now;if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else _emscripten_get_now=function(){return performance.now()};var _emscripten_get_now_is_monotonic=true;function setErrNo(value){HEAP32[___errno_location()>>2]=value;return value}function _clock_gettime(clk_id,tp){var now;if(clk_id===0){now=Date.now()}else if((clk_id===1||clk_id===4)&&_emscripten_get_now_is_monotonic){now=_emscripten_get_now()}else{setErrNo(28);return-1}HEAP32[tp>>2]=now/1e3|0;HEAP32[tp+4>>2]=now%1e3*1e3*1e3|0;return 0}function ___clock_gettime(a0,a1){return _clock_gettime(a0,a1)}var ExceptionInfoAttrs={DESTRUCTOR_OFFSET:0,REFCOUNT_OFFSET:4,TYPE_OFFSET:8,CAUGHT_OFFSET:12,RETHROWN_OFFSET:13,SIZE:16};function ___cxa_allocate_exception(size){return _malloc(size+ExceptionInfoAttrs.SIZE)+ExceptionInfoAttrs.SIZE}function ExceptionInfo(excPtr){this.excPtr=excPtr;this.ptr=excPtr-ExceptionInfoAttrs.SIZE;this.set_type=function(type){HEAP32[this.ptr+ExceptionInfoAttrs.TYPE_OFFSET>>2]=type};this.get_type=function(){return HEAP32[this.ptr+ExceptionInfoAttrs.TYPE_OFFSET>>2]};this.set_destructor=function(destructor){HEAP32[this.ptr+ExceptionInfoAttrs.DESTRUCTOR_OFFSET>>2]=destructor};this.get_destructor=function(){return HEAP32[this.ptr+ExceptionInfoAttrs.DESTRUCTOR_OFFSET>>2]};this.set_refcount=function(refcount){HEAP32[this.ptr+ExceptionInfoAttrs.REFCOUNT_OFFSET>>2]=refcount};this.set_caught=function(caught){caught=caught?1:0;HEAP8[this.ptr+ExceptionInfoAttrs.CAUGHT_OFFSET>>0]=caught};this.get_caught=function(){return HEAP8[this.ptr+ExceptionInfoAttrs.CAUGHT_OFFSET>>0]!=0};this.set_rethrown=function(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+ExceptionInfoAttrs.RETHROWN_OFFSET>>0]=rethrown};this.get_rethrown=function(){return HEAP8[this.ptr+ExceptionInfoAttrs.RETHROWN_OFFSET>>0]!=0};this.init=function(type,destructor){this.set_type(type);this.set_destructor(destructor);this.set_refcount(0);this.set_caught(false);this.set_rethrown(false)};this.add_ref=function(){var value=HEAP32[this.ptr+ExceptionInfoAttrs.REFCOUNT_OFFSET>>2];HEAP32[this.ptr+ExceptionInfoAttrs.REFCOUNT_OFFSET>>2]=value+1};this.release_ref=function(){var prev=HEAP32[this.ptr+ExceptionInfoAttrs.REFCOUNT_OFFSET>>2];HEAP32[this.ptr+ExceptionInfoAttrs.REFCOUNT_OFFSET>>2]=prev-1;return prev===1}}function CatchInfo(ptr){this.free=function(){_free(this.ptr);this.ptr=0};this.set_base_ptr=function(basePtr){HEAP32[this.ptr>>2]=basePtr};this.get_base_ptr=function(){return HEAP32[this.ptr>>2]};this.set_adjusted_ptr=function(adjustedPtr){var ptrSize=4;HEAP32[this.ptr+ptrSize>>2]=adjustedPtr};this.get_adjusted_ptr=function(){var ptrSize=4;return HEAP32[this.ptr+ptrSize>>2]};this.get_exception_ptr=function(){var isPointer=___cxa_is_pointer_type(this.get_exception_info().get_type());if(isPointer){return HEAP32[this.get_base_ptr()>>2]}var adjusted=this.get_adjusted_ptr();if(adjusted!==0)return adjusted;return this.get_base_ptr()};this.get_exception_info=function(){return new ExceptionInfo(this.get_base_ptr())};if(ptr===undefined){this.ptr=_malloc(8);this.set_adjusted_ptr(0)}else{this.ptr=ptr}}var exceptionCaught=[];function exception_addRef(info){info.add_ref()}var uncaughtExceptionCount=0;function ___cxa_begin_catch(ptr){var catchInfo=new CatchInfo(ptr);var info=catchInfo.get_exception_info();if(!info.get_caught()){info.set_caught(true);uncaughtExceptionCount--}info.set_rethrown(false);exceptionCaught.push(catchInfo);exception_addRef(info);return catchInfo.get_exception_ptr()}var exceptionLast=0;function ___cxa_free_exception(ptr){return _free(new ExceptionInfo(ptr).ptr)}function exception_decRef(info){if(info.release_ref()&&!info.get_rethrown()){var destructor=info.get_destructor();if(destructor){wasmTable.get(destructor)(info.excPtr)}___cxa_free_exception(info.excPtr)}}function ___cxa_end_catch(){_setThrew(0);var catchInfo=exceptionCaught.pop();exception_decRef(catchInfo.get_exception_info());catchInfo.free();exceptionLast=0}function ___resumeException(catchInfoPtr){var catchInfo=new CatchInfo(catchInfoPtr);var ptr=catchInfo.get_base_ptr();if(!exceptionLast){exceptionLast=ptr}catchInfo.free();throw ptr}function ___cxa_find_matching_catch_3(){var thrown=exceptionLast;if(!thrown){setTempRet0(0|0);return 0|0}var info=new ExceptionInfo(thrown);var thrownType=info.get_type();var catchInfo=new CatchInfo;catchInfo.set_base_ptr(thrown);if(!thrownType){setTempRet0(0|0);return catchInfo.ptr|0}var typeArray=Array.prototype.slice.call(arguments);var stackTop=stackSave();var exceptionThrowBuf=stackAlloc(4);HEAP32[exceptionThrowBuf>>2]=thrown;for(var i=0;i>2];if(thrown!==adjusted){catchInfo.set_adjusted_ptr(adjusted)}setTempRet0(caughtType|0);return catchInfo.ptr|0}}stackRestore(stackTop);setTempRet0(thrownType|0);return catchInfo.ptr|0}function ___cxa_throw(ptr,type,destructor){var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;throw ptr}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";path=PATH.normalize(path);path=path.replace(/\/$/,"");var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)}};function getRandomDevice(){if(typeof crypto==="object"&&typeof crypto["getRandomValues"]==="function"){var randomBuffer=new Uint8Array(1);return function(){crypto.getRandomValues(randomBuffer);return randomBuffer[0]}}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");return function(){return crypto_module["randomBytes"](1)[0]}}catch(e){}}return function(){abort("randomDevice")}}var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};function mmapAlloc(size){var alignedSize=alignMemory(size,16384);var ptr=_malloc(alignedSize);while(size=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(newSize);if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+length8){throw new FS.ErrnoError(32)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"r+":2,"w":577,"w+":578,"a":1089,"a+":1090},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 2}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 2}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 2}return 0},mayLookup:function(dir){var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen:function(node,flags){if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}}}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(70)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(28)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){FS.forceLoadFile(node);return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){FS.forceLoadFile(node);var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags,offset){var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-28;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-28}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;if(!node){return-44}var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-2}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD:function(fd){var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);return stream},get64:function(low,high){return low}};function ___sys_access(path,amode){try{path=SYSCALLS.getStr(path);return SYSCALLS.doAccess(path,amode)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_chdir(path){try{path=SYSCALLS.getStr(path);FS.chdir(path);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_chmod(path,mode){try{path=SYSCALLS.getStr(path);FS.chmod(path,mode);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_fadvise64_64(fd,offset,len,advice){return 0}function ___sys_fallocate(fd,mode,off_low,off_high,len_low,len_high){try{var stream=SYSCALLS.getStreamFromFD(fd);var offset=SYSCALLS.get64(off_low,off_high);var len=SYSCALLS.get64(len_low,len_high);FS.allocate(stream,offset,len);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_fchmod(fd,mode){try{FS.fchmod(fd,mode);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_fcntl64(fd,cmd,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-28}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-28;case 9:setErrNo(28);return-1;default:{return-28}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_fstat64(fd,buf){try{var stream=SYSCALLS.getStreamFromFD(fd);return SYSCALLS.doStat(FS.stat,stream.path,buf)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_ftruncate64(fd,zero,low,high){try{var length=SYSCALLS.get64(low,high);FS.ftruncate(fd,length);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_getcwd(buf,size){try{if(size===0)return-28;var cwd=FS.cwd();var cwdLengthInBytes=lengthBytesUTF8(cwd);if(size>>0,(tempDouble=id,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[dirp+pos>>2]=tempI64[0],HEAP32[dirp+pos+4>>2]=tempI64[1];tempI64=[(idx+1)*struct_size>>>0,(tempDouble=(idx+1)*struct_size,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[dirp+pos+8>>2]=tempI64[0],HEAP32[dirp+pos+12>>2]=tempI64[1];HEAP16[dirp+pos+16>>1]=280;HEAP8[dirp+pos+18>>0]=type;stringToUTF8(name,dirp+pos+19,256);pos+=struct_size;idx+=1}FS.llseek(stream,idx*struct_size,0);return pos}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_getpid(){return 42}function ___sys_getrusage(who,usage){try{_memset(usage,0,136);HEAP32[usage>>2]=1;HEAP32[usage+4>>2]=2;HEAP32[usage+8>>2]=3;HEAP32[usage+12>>2]=4;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_ioctl(fd,op,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(op){case 21509:case 21505:{if(!stream.tty)return-59;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-59;return 0}case 21519:{if(!stream.tty)return-59;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-59;return-28}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-59;return 0}case 21524:{if(!stream.tty)return-59;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_link(oldpath,newpath){return-34}function ___sys_lstat64(path,buf){try{path=SYSCALLS.getStr(path);return SYSCALLS.doStat(FS.lstat,path,buf)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_madvise1(addr,length,advice){return 0}function ___sys_mkdir(path,mode){try{path=SYSCALLS.getStr(path);return SYSCALLS.doMkdir(path,mode)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function syscallMmap2(addr,len,prot,flags,fd,off){off<<=12;var ptr;var allocated=false;if((flags&16)!==0&&addr%16384!==0){return-28}if((flags&32)!==0){ptr=_memalign(16384,len);if(!ptr)return-48;_memset(ptr,0,len);allocated=true}else{var info=FS.getStream(fd);if(!info)return-8;var res=FS.mmap(info,addr,len,off,prot,flags);ptr=res.ptr;allocated=res.allocated}SYSCALLS.mappings[ptr]={malloc:ptr,len:len,allocated:allocated,fd:fd,prot:prot,flags:flags,offset:off};return ptr}function ___sys_mmap2(addr,len,prot,flags,fd,off){try{return syscallMmap2(addr,len,prot,flags,fd,off)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_msync(addr,len,flags){try{var info=SYSCALLS.mappings[addr];if(!info)return 0;SYSCALLS.doMsync(addr,FS.getStream(info.fd),len,info.flags,0);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function syscallMunmap(addr,len){if((addr|0)===-1||len===0){return-28}var info=SYSCALLS.mappings[addr];if(!info)return 0;if(len===info.len){var stream=FS.getStream(info.fd);if(stream){if(info.prot&2){SYSCALLS.doMsync(addr,stream,len,info.flags,info.offset)}FS.munmap(stream)}SYSCALLS.mappings[addr]=null;if(info.allocated){_free(info.malloc)}}return 0}function ___sys_munmap(addr,len){try{return syscallMunmap(addr,len)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_open(path,flags,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(path);var mode=varargs?SYSCALLS.get():0;var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_readlink(path,buf,bufsize){try{path=SYSCALLS.getStr(path);return SYSCALLS.doReadlink(path,buf,bufsize)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_rename(old_path,new_path){try{old_path=SYSCALLS.getStr(old_path);new_path=SYSCALLS.getStr(new_path);FS.rename(old_path,new_path);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_rmdir(path){try{path=SYSCALLS.getStr(path);FS.rmdir(path);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}var ERRNO_CODES={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135};var SOCKFS={mount:function(mount){Module["websocket"]=Module["websocket"]&&"object"===typeof Module["websocket"]?Module["websocket"]:{};Module["websocket"]._callbacks={};Module["websocket"]["on"]=function(event,callback){if("function"===typeof callback){this._callbacks[event]=callback}return this};Module["websocket"].emit=function(event,param){if("function"===typeof this._callbacks[event]){this._callbacks[event].call(this,param)}};return FS.createNode(null,"/",16384|511,0)},createSocket:function(family,type,protocol){type&=~526336;var streaming=type==1;if(protocol){assert(streaming==(protocol==6))}var sock={family:family,type:type,protocol:protocol,server:null,error:null,peers:{},pending:[],recv_queue:[],sock_ops:SOCKFS.websocket_sock_ops};var name=SOCKFS.nextname();var node=FS.createNode(SOCKFS.root,name,49152,0);node.sock=sock;var stream=FS.createStream({path:name,node:node,flags:2,seekable:false,stream_ops:SOCKFS.stream_ops});sock.stream=stream;return sock},getSocket:function(fd){var stream=FS.getStream(fd);if(!stream||!FS.isSocket(stream.node.mode)){return null}return stream.node.sock},stream_ops:{poll:function(stream){var sock=stream.node.sock;return sock.sock_ops.poll(sock)},ioctl:function(stream,request,varargs){var sock=stream.node.sock;return sock.sock_ops.ioctl(sock,request,varargs)},read:function(stream,buffer,offset,length,position){var sock=stream.node.sock;var msg=sock.sock_ops.recvmsg(sock,length);if(!msg){return 0}buffer.set(msg.buffer,offset);return msg.buffer.length},write:function(stream,buffer,offset,length,position){var sock=stream.node.sock;return sock.sock_ops.sendmsg(sock,buffer,offset,length)},close:function(stream){var sock=stream.node.sock;sock.sock_ops.close(sock)}},nextname:function(){if(!SOCKFS.nextname.current){SOCKFS.nextname.current=0}return"socket["+SOCKFS.nextname.current+++"]"},websocket_sock_ops:{createPeer:function(sock,addr,port){var ws;if(typeof addr==="object"){ws=addr;addr=null;port=null}if(ws){if(ws._socket){addr=ws._socket.remoteAddress;port=ws._socket.remotePort}else{var result=/ws[s]?:\/\/([^:]+):(\d+)/.exec(ws.url);if(!result){throw new Error("WebSocket URL must be in the format ws(s)://address:port")}addr=result[1];port=parseInt(result[2],10)}}else{try{var runtimeConfig=Module["websocket"]&&"object"===typeof Module["websocket"];var url="ws:#".replace("#","//");if(runtimeConfig){if("string"===typeof Module["websocket"]["url"]){url=Module["websocket"]["url"]}}if(url==="ws://"||url==="wss://"){var parts=addr.split("/");url=url+parts[0]+":"+port+"/"+parts.slice(1).join("/")}var subProtocols="binary";if(runtimeConfig){if("string"===typeof Module["websocket"]["subprotocol"]){subProtocols=Module["websocket"]["subprotocol"]}}var opts=undefined;if(subProtocols!=="null"){subProtocols=subProtocols.replace(/^ +| +$/g,"").split(/ *, */);opts=ENVIRONMENT_IS_NODE?{"protocol":subProtocols.toString()}:subProtocols}if(runtimeConfig&&null===Module["websocket"]["subprotocol"]){subProtocols="null";opts=undefined}var WebSocketConstructor;if(ENVIRONMENT_IS_NODE){WebSocketConstructor=require("ws")}else{WebSocketConstructor=WebSocket}ws=new WebSocketConstructor(url,opts);ws.binaryType="arraybuffer"}catch(e){throw new FS.ErrnoError(ERRNO_CODES.EHOSTUNREACH)}}var peer={addr:addr,port:port,socket:ws,dgram_send_queue:[]};SOCKFS.websocket_sock_ops.addPeer(sock,peer);SOCKFS.websocket_sock_ops.handlePeerEvents(sock,peer);if(sock.type===2&&typeof sock.sport!=="undefined"){peer.dgram_send_queue.push(new Uint8Array([255,255,255,255,"p".charCodeAt(0),"o".charCodeAt(0),"r".charCodeAt(0),"t".charCodeAt(0),(sock.sport&65280)>>8,sock.sport&255]))}return peer},getPeer:function(sock,addr,port){return sock.peers[addr+":"+port]},addPeer:function(sock,peer){sock.peers[peer.addr+":"+peer.port]=peer},removePeer:function(sock,peer){delete sock.peers[peer.addr+":"+peer.port]},handlePeerEvents:function(sock,peer){var first=true;var handleOpen=function(){Module["websocket"].emit("open",sock.stream.fd);try{var queued=peer.dgram_send_queue.shift();while(queued){peer.socket.send(queued);queued=peer.dgram_send_queue.shift()}}catch(e){peer.socket.close()}};function handleMessage(data){if(typeof data==="string"){var encoder=new TextEncoder;data=encoder.encode(data)}else{assert(data.byteLength!==undefined);if(data.byteLength==0){return}else{data=new Uint8Array(data)}}var wasfirst=first;first=false;if(wasfirst&&data.length===10&&data[0]===255&&data[1]===255&&data[2]===255&&data[3]===255&&data[4]==="p".charCodeAt(0)&&data[5]==="o".charCodeAt(0)&&data[6]==="r".charCodeAt(0)&&data[7]==="t".charCodeAt(0)){var newport=data[8]<<8|data[9];SOCKFS.websocket_sock_ops.removePeer(sock,peer);peer.port=newport;SOCKFS.websocket_sock_ops.addPeer(sock,peer);return}sock.recv_queue.push({addr:peer.addr,port:peer.port,data:data});Module["websocket"].emit("message",sock.stream.fd)}if(ENVIRONMENT_IS_NODE){peer.socket.on("open",handleOpen);peer.socket.on("message",function(data,flags){if(!flags.binary){return}handleMessage(new Uint8Array(data).buffer)});peer.socket.on("close",function(){Module["websocket"].emit("close",sock.stream.fd)});peer.socket.on("error",function(error){sock.error=ERRNO_CODES.ECONNREFUSED;Module["websocket"].emit("error",[sock.stream.fd,sock.error,"ECONNREFUSED: Connection refused"])})}else{peer.socket.onopen=handleOpen;peer.socket.onclose=function(){Module["websocket"].emit("close",sock.stream.fd)};peer.socket.onmessage=function peer_socket_onmessage(event){handleMessage(event.data)};peer.socket.onerror=function(error){sock.error=ERRNO_CODES.ECONNREFUSED;Module["websocket"].emit("error",[sock.stream.fd,sock.error,"ECONNREFUSED: Connection refused"])}}},poll:function(sock){if(sock.type===1&&sock.server){return sock.pending.length?64|1:0}var mask=0;var dest=sock.type===1?SOCKFS.websocket_sock_ops.getPeer(sock,sock.daddr,sock.dport):null;if(sock.recv_queue.length||!dest||dest&&dest.socket.readyState===dest.socket.CLOSING||dest&&dest.socket.readyState===dest.socket.CLOSED){mask|=64|1}if(!dest||dest&&dest.socket.readyState===dest.socket.OPEN){mask|=4}if(dest&&dest.socket.readyState===dest.socket.CLOSING||dest&&dest.socket.readyState===dest.socket.CLOSED){mask|=16}return mask},ioctl:function(sock,request,arg){switch(request){case 21531:var bytes=0;if(sock.recv_queue.length){bytes=sock.recv_queue[0].data.length}HEAP32[arg>>2]=bytes;return 0;default:return ERRNO_CODES.EINVAL}},close:function(sock){if(sock.server){try{sock.server.close()}catch(e){}sock.server=null}var peers=Object.keys(sock.peers);for(var i=0;i>>0}function jstoi_q(str){return parseInt(str)}function __inet_pton6_raw(str){var words;var w,offset,z;var valid6regx=/^((?=.*::)(?!.*::.+::)(::)?([\dA-F]{1,4}:(:|\b)|){5}|([\dA-F]{1,4}:){6})((([\dA-F]{1,4}((?!\3)::|:\b|$))|(?!\2\3)){2}|(((2[0-4]|1\d|[1-9])?\d|25[0-5])\.?\b){4})$/i;var parts=[];if(!valid6regx.test(str)){return null}if(str==="::"){return[0,0,0,0,0,0,0,0]}if(str.indexOf("::")===0){str=str.replace("::","Z:")}else{str=str.replace("::",":Z:")}if(str.indexOf(".")>0){str=str.replace(new RegExp("[.]","g"),":");words=str.split(":");words[words.length-4]=jstoi_q(words[words.length-4])+jstoi_q(words[words.length-3])*256;words[words.length-3]=jstoi_q(words[words.length-2])+jstoi_q(words[words.length-1])*256;words=words.slice(0,words.length-2)}else{words=str.split(":")}offset=0;z=0;for(w=0;w>8&255)+"."+(addr>>16&255)+"."+(addr>>24&255)}function __inet_ntop6_raw(ints){var str="";var word=0;var longest=0;var lastzero=0;var zstart=0;var len=0;var i=0;var parts=[ints[0]&65535,ints[0]>>16,ints[1]&65535,ints[1]>>16,ints[2]&65535,ints[2]>>16,ints[3]&65535,ints[3]>>16];var hasipv4=true;var v4part="";for(i=0;i<5;i++){if(parts[i]!==0){hasipv4=false;break}}if(hasipv4){v4part=__inet_ntop4_raw(parts[6]|parts[7]<<16);if(parts[5]===-1){str="::ffff:";str+=v4part;return str}if(parts[5]===0){str="::";if(v4part==="0.0.0.0")v4part="";if(v4part==="0.0.0.1")v4part="1";str+=v4part;return str}}for(word=0;word<8;word++){if(parts[word]===0){if(word-lastzero>1){len=0}lastzero=word;len++}if(len>longest){longest=len;zstart=word-longest+1}}for(word=0;word<8;word++){if(longest>1){if(parts[word]===0&&word>=zstart&&word>1];var port=_ntohs(HEAPU16[sa+2>>1]);var addr;switch(family){case 2:if(salen!==16){return{errno:28}}addr=HEAP32[sa+4>>2];addr=__inet_ntop4_raw(addr);break;case 10:if(salen!==28){return{errno:28}}addr=[HEAP32[sa+8>>2],HEAP32[sa+12>>2],HEAP32[sa+16>>2],HEAP32[sa+20>>2]];addr=__inet_ntop6_raw(addr);break;default:return{errno:5}}return{family:family,addr:addr,port:port}}function __write_sockaddr(sa,family,addr,port,addrlen){switch(family){case 2:addr=__inet_pton4_raw(addr);if(addrlen){HEAP32[addrlen>>2]=16}HEAP16[sa>>1]=family;HEAP32[sa+4>>2]=addr;HEAP16[sa+2>>1]=_htons(port);break;case 10:addr=__inet_pton6_raw(addr);if(addrlen){HEAP32[addrlen>>2]=28}HEAP32[sa>>2]=family;HEAP32[sa+8>>2]=addr[0];HEAP32[sa+12>>2]=addr[1];HEAP32[sa+16>>2]=addr[2];HEAP32[sa+20>>2]=addr[3];HEAP16[sa+2>>1]=_htons(port);HEAP32[sa+4>>2]=0;HEAP32[sa+24>>2]=0;break;default:return 5}return 0}function ___sys_socketcall(call,socketvararg){try{SYSCALLS.varargs=socketvararg;var getSocketFromFD=function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(8);return socket};var getSocketAddress=function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info};switch(call){case 1:{var domain=SYSCALLS.get(),type=SYSCALLS.get(),protocol=SYSCALLS.get();var sock=SOCKFS.createSocket(domain,type,protocol);return sock.stream.fd}case 2:{var sock=getSocketFromFD(),info=getSocketAddress();sock.sock_ops.bind(sock,info.addr,info.port);return 0}case 3:{var sock=getSocketFromFD(),info=getSocketAddress();sock.sock_ops.connect(sock,info.addr,info.port);return 0}case 4:{var sock=getSocketFromFD(),backlog=SYSCALLS.get();sock.sock_ops.listen(sock,backlog);return 0}case 5:{var sock=getSocketFromFD(),addr=SYSCALLS.get(),addrlen=SYSCALLS.get();var newsock=sock.sock_ops.accept(sock);if(addr){var errno=__write_sockaddr(addr,newsock.family,DNS.lookup_name(newsock.daddr),newsock.dport,addrlen)}return newsock.stream.fd}case 6:{var sock=getSocketFromFD(),addr=SYSCALLS.get(),addrlen=SYSCALLS.get();var errno=__write_sockaddr(addr,sock.family,DNS.lookup_name(sock.saddr||"0.0.0.0"),sock.sport,addrlen);return 0}case 7:{var sock=getSocketFromFD(),addr=SYSCALLS.get(),addrlen=SYSCALLS.get();if(!sock.daddr){return-53}var errno=__write_sockaddr(addr,sock.family,DNS.lookup_name(sock.daddr),sock.dport,addrlen);return 0}case 11:{var sock=getSocketFromFD(),message=SYSCALLS.get(),length=SYSCALLS.get(),flags=SYSCALLS.get(),dest=getSocketAddress(true);if(!dest){return FS.write(sock.stream,HEAP8,message,length)}else{return sock.sock_ops.sendmsg(sock,HEAP8,message,length,dest.addr,dest.port)}}case 12:{var sock=getSocketFromFD(),buf=SYSCALLS.get(),len=SYSCALLS.get(),flags=SYSCALLS.get(),addr=SYSCALLS.get(),addrlen=SYSCALLS.get();var msg=sock.sock_ops.recvmsg(sock,len);if(!msg)return 0;if(addr){var errno=__write_sockaddr(addr,sock.family,DNS.lookup_name(msg.addr),msg.port,addrlen)}HEAPU8.set(msg.buffer,buf);return msg.buffer.byteLength}case 14:{return-50}case 15:{var sock=getSocketFromFD(),level=SYSCALLS.get(),optname=SYSCALLS.get(),optval=SYSCALLS.get(),optlen=SYSCALLS.get();if(level===1){if(optname===4){HEAP32[optval>>2]=sock.error;HEAP32[optlen>>2]=4;sock.error=null;return 0}}return-50}case 16:{var sock=getSocketFromFD(),message=SYSCALLS.get(),flags=SYSCALLS.get();var iov=HEAP32[message+8>>2];var num=HEAP32[message+12>>2];var addr,port;var name=HEAP32[message>>2];var namelen=HEAP32[message+4>>2];if(name){var info=__read_sockaddr(name,namelen);if(info.errno)return-info.errno;port=info.port;addr=DNS.lookup_addr(info.addr)||info.addr}var total=0;for(var i=0;i>2]}var view=new Uint8Array(total);var offset=0;for(var i=0;i>2];var iovlen=HEAP32[iov+(8*i+4)>>2];for(var j=0;j>0]}}return sock.sock_ops.sendmsg(sock,view,0,total,addr,port)}case 17:{var sock=getSocketFromFD(),message=SYSCALLS.get(),flags=SYSCALLS.get();var iov=HEAP32[message+8>>2];var num=HEAP32[message+12>>2];var total=0;for(var i=0;i>2]}var msg=sock.sock_ops.recvmsg(sock,total);if(!msg)return 0;var name=HEAP32[message>>2];if(name){var errno=__write_sockaddr(name,sock.family,DNS.lookup_name(msg.addr),msg.port)}var bytesRead=0;var bytesRemaining=msg.buffer.byteLength;for(var i=0;bytesRemaining>0&&i>2];var iovlen=HEAP32[iov+(8*i+4)>>2];if(!iovlen){continue}var length=Math.min(iovlen,bytesRemaining);var buf=msg.buffer.subarray(bytesRead,bytesRead+length);HEAPU8.set(buf,iovbase+bytesRead);bytesRead+=length;bytesRemaining-=length}return bytesRead}default:{return-52}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_stat64(path,buf){try{path=SYSCALLS.getStr(path);return SYSCALLS.doStat(FS.stat,path,buf)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_unlink(path){try{path=SYSCALLS.getStr(path);FS.unlink(path);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_utimensat(dirfd,path,times,flags){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);var seconds=HEAP32[times>>2];var nanoseconds=HEAP32[times+4>>2];var atime=seconds*1e3+nanoseconds/(1e3*1e3);times+=8;seconds=HEAP32[times>>2];nanoseconds=HEAP32[times+4>>2];var mtime=seconds*1e3+nanoseconds/(1e3*1e3);FS.utime(path,atime,mtime);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function _abort(){abort()}function _emscripten_get_now_res(){if(ENVIRONMENT_IS_NODE){return 1}else if(typeof dateNow!=="undefined"){return 1e3}else return 1e3}function _clock_getres(clk_id,res){var nsec;if(clk_id===0){nsec=1e3*1e3}else if(clk_id===1&&_emscripten_get_now_is_monotonic){nsec=_emscripten_get_now_res()}else{setErrNo(28);return-1}HEAP32[res>>2]=nsec/1e9|0;HEAP32[res+4>>2]=nsec;return 0}var DOTNETENTROPY={batchedQuotaMax:65536,getBatchedRandomValues:function(buffer,bufferLength){for(var i=0;i>>16);updateGlobalBufferAndViews(wasmMemory.buffer);return 1}catch(e){}}function _emscripten_resize_heap(requestedSize){requestedSize=requestedSize>>>0;var oldSize=_emscripten_get_heap_size();var maxHeapSize=2147483648;if(requestedSize>maxHeapSize){return false}var minHeapSize=16777216;for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(minHeapSize,requestedSize,overGrownHeapSize),65536));var replacement=emscripten_realloc_buffer(newSize);if(replacement){return true}}return false}function _emscripten_thread_sleep(msecs){var start=_emscripten_get_now();while(_emscripten_get_now()-start>2]=strings.length;var bufSize=0;strings.forEach(function(string){bufSize+=string.length+1});HEAP32[penviron_buf_size>>2]=bufSize;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _exit(status){exit(status)}function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_fdstat_get(fd,pbuf){try{var stream=SYSCALLS.getStreamFromFD(fd);var type=stream.tty?2:FS.isDir(stream.mode)?3:FS.isLink(stream.mode)?7:4;HEAP8[pbuf>>0]=type;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_read(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doReadv(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){try{var stream=SYSCALLS.getStreamFromFD(fd);var HIGH_OFFSET=4294967296;var offset=offset_high*HIGH_OFFSET+(offset_low>>>0);var DOUBLE_LIMIT=9007199254740992;if(offset<=-DOUBLE_LIMIT||offset>=DOUBLE_LIMIT){return-61}FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[newOffset>>2]=tempI64[0],HEAP32[newOffset+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_sync(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);if(stream.stream_ops&&stream.stream_ops.fsync){return-stream.stream_ops.fsync(stream)}return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_write(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doWritev(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _flock(fd,operation){return 0}var GAI_ERRNO_MESSAGES={};function _gai_strerror(val){var buflen=256;if(!_gai_strerror.buffer){_gai_strerror.buffer=_malloc(buflen);GAI_ERRNO_MESSAGES["0"]="Success";GAI_ERRNO_MESSAGES[""+-1]="Invalid value for 'ai_flags' field";GAI_ERRNO_MESSAGES[""+-2]="NAME or SERVICE is unknown";GAI_ERRNO_MESSAGES[""+-3]="Temporary failure in name resolution";GAI_ERRNO_MESSAGES[""+-4]="Non-recoverable failure in name res";GAI_ERRNO_MESSAGES[""+-6]="'ai_family' not supported";GAI_ERRNO_MESSAGES[""+-7]="'ai_socktype' not supported";GAI_ERRNO_MESSAGES[""+-8]="SERVICE not supported for 'ai_socktype'";GAI_ERRNO_MESSAGES[""+-10]="Memory allocation failure";GAI_ERRNO_MESSAGES[""+-11]="System error returned in 'errno'";GAI_ERRNO_MESSAGES[""+-12]="Argument buffer overflow"}var msg="Unknown error";if(val in GAI_ERRNO_MESSAGES){if(GAI_ERRNO_MESSAGES[val].length>buflen-1){msg="Message too long"}else{msg=GAI_ERRNO_MESSAGES[val]}}writeAsciiToMemory(msg,_gai_strerror.buffer);return _gai_strerror.buffer}function _getTempRet0(){return getTempRet0()|0}function _gettimeofday(ptr){var now=Date.now();HEAP32[ptr>>2]=now/1e3|0;HEAP32[ptr+4>>2]=now%1e3*1e3|0;return 0}function _gmtime_r(time,tmPtr){var date=new Date(HEAP32[time>>2]*1e3);HEAP32[tmPtr>>2]=date.getUTCSeconds();HEAP32[tmPtr+4>>2]=date.getUTCMinutes();HEAP32[tmPtr+8>>2]=date.getUTCHours();HEAP32[tmPtr+12>>2]=date.getUTCDate();HEAP32[tmPtr+16>>2]=date.getUTCMonth();HEAP32[tmPtr+20>>2]=date.getUTCFullYear()-1900;HEAP32[tmPtr+24>>2]=date.getUTCDay();HEAP32[tmPtr+36>>2]=0;HEAP32[tmPtr+32>>2]=0;var start=Date.UTC(date.getUTCFullYear(),0,1,0,0,0,0);var yday=(date.getTime()-start)/(1e3*60*60*24)|0;HEAP32[tmPtr+28>>2]=yday;if(!_gmtime_r.GMTString)_gmtime_r.GMTString=allocateUTF8("GMT");HEAP32[tmPtr+40>>2]=_gmtime_r.GMTString;return tmPtr}function _llvm_eh_typeid_for(type){return type}function _tzset(){if(_tzset.called)return;_tzset.called=true;var currentYear=(new Date).getFullYear();var winter=new Date(currentYear,0,1);var summer=new Date(currentYear,6,1);var winterOffset=winter.getTimezoneOffset();var summerOffset=summer.getTimezoneOffset();var stdTimezoneOffset=Math.max(winterOffset,summerOffset);HEAP32[__get_timezone()>>2]=stdTimezoneOffset*60;HEAP32[__get_daylight()>>2]=Number(winterOffset!=summerOffset);function extractZone(date){var match=date.toTimeString().match(/\(([A-Za-z ]+)\)$/);return match?match[1]:"GMT"}var winterName=extractZone(winter);var summerName=extractZone(summer);var winterNamePtr=allocateUTF8(winterName);var summerNamePtr=allocateUTF8(summerName);if(summerOffset>2]=winterNamePtr;HEAP32[__get_tzname()+4>>2]=summerNamePtr}else{HEAP32[__get_tzname()>>2]=summerNamePtr;HEAP32[__get_tzname()+4>>2]=winterNamePtr}}function _localtime_r(time,tmPtr){_tzset();var date=new Date(HEAP32[time>>2]*1e3);HEAP32[tmPtr>>2]=date.getSeconds();HEAP32[tmPtr+4>>2]=date.getMinutes();HEAP32[tmPtr+8>>2]=date.getHours();HEAP32[tmPtr+12>>2]=date.getDate();HEAP32[tmPtr+16>>2]=date.getMonth();HEAP32[tmPtr+20>>2]=date.getFullYear()-1900;HEAP32[tmPtr+24>>2]=date.getDay();var start=new Date(date.getFullYear(),0,1);var yday=(date.getTime()-start.getTime())/(1e3*60*60*24)|0;HEAP32[tmPtr+28>>2]=yday;HEAP32[tmPtr+36>>2]=-(date.getTimezoneOffset()*60);var summerOffset=new Date(date.getFullYear(),6,1).getTimezoneOffset();var winterOffset=start.getTimezoneOffset();var dst=(summerOffset!=winterOffset&&date.getTimezoneOffset()==Math.min(winterOffset,summerOffset))|0;HEAP32[tmPtr+32>>2]=dst;var zonePtr=HEAP32[__get_tzname()+(dst?4:0)>>2];HEAP32[tmPtr+40>>2]=zonePtr;return tmPtr}var MONO={pump_count:0,timeout_queue:[],_vt_stack:[],mono_wasm_runtime_is_ready:false,mono_wasm_ignore_pdb_load_errors:true,_id_table:{},pump_message:function(){if(!this.mono_background_exec)this.mono_background_exec=Module.cwrap("mono_background_exec",null);while(MONO.timeout_queue.length>0){--MONO.pump_count;MONO.timeout_queue.shift()()}while(MONO.pump_count>0){--MONO.pump_count;this.mono_background_exec()}},export_functions:function(module){module["pump_message"]=MONO.pump_message.bind(MONO);module["mono_load_runtime_and_bcl"]=MONO.mono_load_runtime_and_bcl.bind(MONO);module["mono_load_runtime_and_bcl_args"]=MONO.mono_load_runtime_and_bcl_args.bind(MONO);module["mono_wasm_load_bytes_into_heap"]=MONO.mono_wasm_load_bytes_into_heap.bind(MONO);module["mono_wasm_load_icu_data"]=MONO.mono_wasm_load_icu_data.bind(MONO);module["mono_wasm_get_icudt_name"]=MONO.mono_wasm_get_icudt_name.bind(MONO);module["mono_wasm_globalization_init"]=MONO.mono_wasm_globalization_init.bind(MONO);module["mono_wasm_get_loaded_files"]=MONO.mono_wasm_get_loaded_files.bind(MONO);module["mono_wasm_new_root_buffer"]=MONO.mono_wasm_new_root_buffer.bind(MONO);module["mono_wasm_new_root_buffer_from_pointer"]=MONO.mono_wasm_new_root_buffer_from_pointer.bind(MONO);module["mono_wasm_new_root"]=MONO.mono_wasm_new_root.bind(MONO);module["mono_wasm_new_roots"]=MONO.mono_wasm_new_roots.bind(MONO);module["mono_wasm_release_roots"]=MONO.mono_wasm_release_roots.bind(MONO)},_base64Converter:{_base64Table:["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","0","1","2","3","4","5","6","7","8","9","+","/"],_makeByteReader:function(bytes,index,count){var position=typeof index==="number"?index:0;var endpoint;if(typeof count==="number")endpoint=position+count;else endpoint=bytes.length-position;var result={read:function(){if(position>=endpoint)return false;var nextByte=bytes[position];position+=1;return nextByte}};Object.defineProperty(result,"eof",{get:function(){return position>=endpoint},configurable:true,enumerable:true});return result},toBase64StringImpl:function(inArray,offset,length){var reader=this._makeByteReader(inArray,offset,length);var result="";var ch1=0,ch2=0,ch3=0,bits=0,equalsCount=0,sum=0;var mask1=(1<<24)-1,mask2=(1<<18)-1,mask3=(1<<12)-1,mask4=(1<<6)-1;var shift1=18,shift2=12,shift3=6,shift4=0;while(true){ch1=reader.read();ch2=reader.read();ch3=reader.read();if(ch1===false)break;if(ch2===false){ch2=0;equalsCount+=1}if(ch3===false){ch3=0;equalsCount+=1}sum=ch1<<16|ch2<<8|ch3<<0;bits=(sum&mask1)>>shift1;result+=this._base64Table[bits];bits=(sum&mask2)>>shift2;result+=this._base64Table[bits];if(equalsCount<2){bits=(sum&mask3)>>shift3;result+=this._base64Table[bits]}if(equalsCount===2){result+="=="}else if(equalsCount===1){result+="="}else{bits=(sum&mask4)>>shift4;result+=this._base64Table[bits]}}return result}},_mono_wasm_root_buffer_prototype:{_throw_index_out_of_range:function(){throw new Error("index out of range")},_check_in_range:function(index){if(index>=this.__count||index<0)this._throw_index_out_of_range()},get_address:function(index){this._check_in_range(index);return this.__offset+index*4},get_address_32:function(index){this._check_in_range(index);return this.__offset32+index},get:function(index){this._check_in_range(index);return Module.HEAP32[this.get_address_32(index)]},set:function(index,value){Module.HEAP32[this.get_address_32(index)]=value;return value},_unsafe_get:function(index){return Module.HEAP32[this.__offset32+index]},_unsafe_set:function(index,value){Module.HEAP32[this.__offset32+index]=value},clear:function(){if(this.__offset)MONO._zero_region(this.__offset,this.__count*4)},release:function(){if(this.__offset&&this.__ownsAllocation){MONO.mono_wasm_deregister_root(this.__offset);MONO._zero_region(this.__offset,this.__count*4);Module._free(this.__offset)}this.__handle=this.__offset=this.__count=this.__offset32=0},toString:function(){return"[root buffer @"+this.get_address(0)+", size "+this.__count+"]"}},_scratch_root_buffer:null,_scratch_root_free_indices:null,_scratch_root_free_indices_count:0,_scratch_root_free_instances:[],_mono_wasm_root_prototype:{get_address:function(){return this.__buffer.get_address(this.__index)},get_address_32:function(){return this.__buffer.get_address_32(this.__index)},get:function(){var result=this.__buffer._unsafe_get(this.__index);return result},set:function(value){this.__buffer._unsafe_set(this.__index,value);return value},valueOf:function(){return this.get()},clear:function(){this.set(0)},release:function(){const maxPooledInstances=128;if(MONO._scratch_root_free_instances.length>maxPooledInstances){MONO._mono_wasm_release_scratch_index(this.__index);this.__buffer=0;this.__index=0}else{this.set(0);MONO._scratch_root_free_instances.push(this)}},toString:function(){return"[root @"+this.get_address()+"]"}},_mono_wasm_release_scratch_index:function(index){if(index===undefined)return;this._scratch_root_buffer.set(index,0);this._scratch_root_free_indices[this._scratch_root_free_indices_count]=index;this._scratch_root_free_indices_count++},_mono_wasm_claim_scratch_index:function(){if(!this._scratch_root_buffer){const maxScratchRoots=8192;this._scratch_root_buffer=this.mono_wasm_new_root_buffer(maxScratchRoots,"js roots");this._scratch_root_free_indices=new Int32Array(maxScratchRoots);this._scratch_root_free_indices_count=maxScratchRoots;for(var i=0;i= 1");capacity=capacity|0;var capacityBytes=capacity*4;var offset=Module._malloc(capacityBytes);if(offset%4!==0)throw new Error("Malloc returned an unaligned offset");this._zero_region(offset,capacityBytes);var result=Object.create(this._mono_wasm_root_buffer_prototype);result.__offset=offset;result.__offset32=offset/4|0;result.__count=capacity;result.length=capacity;result.__handle=this.mono_wasm_register_root(offset,capacityBytes,msg||0);result.__ownsAllocation=true;return result},mono_wasm_new_root_buffer_from_pointer:function(offset,capacity,msg){if(!this.mono_wasm_register_root||!this.mono_wasm_deregister_root){this.mono_wasm_register_root=Module.cwrap("mono_wasm_register_root","number",["number","number","string"]);this.mono_wasm_deregister_root=Module.cwrap("mono_wasm_deregister_root",null,["number"])}if(capacity<=0)throw new Error("capacity >= 1");capacity=capacity|0;var capacityBytes=capacity*4;if(offset%4!==0)throw new Error("Unaligned offset");this._zero_region(offset,capacityBytes);var result=Object.create(this._mono_wasm_root_buffer_prototype);result.__offset=offset;result.__offset32=offset/4|0;result.__count=capacity;result.length=capacity;result.__handle=this.mono_wasm_register_root(offset,capacityBytes,msg||0);result.__ownsAllocation=false;return result},mono_wasm_new_root:function(value){var result;if(this._scratch_root_free_instances.length>0){result=this._scratch_root_free_instances.pop()}else{var index=this._mono_wasm_claim_scratch_index();var buffer=this._scratch_root_buffer;result=Object.create(this._mono_wasm_root_prototype);result.__buffer=buffer;result.__index=index}if(value!==undefined){if(typeof value!=="number")throw new Error("value must be an address in the managed heap");result.set(value)}else{result.set(0)}return result},mono_wasm_new_roots:function(count_or_values){var result;if(Array.isArray(count_or_values)){result=new Array(count_or_values.length);for(var i=0;i0){result=new Array(count_or_values);for(var i=0;i",description:""};i++}out_list.push(o)}return out_list},_filter_automatic_properties:function(props,accessors_only=false){let getters={};let all_fields_except_backing_fields={};let backing_fields={};props.forEach(p=>{if(p.name===undefined){console.debug(`Bug: Found a member with no name. Skipping it. p: ${JSON.stringify(p)}`);return}if(p.name.endsWith("k__BackingField")){const auto_prop_name=p.name.replace("k__BackingField","").replace("<","").replace(">","");if(!(auto_prop_name in backing_fields))backing_fields[auto_prop_name]=Object.assign(p,{name:auto_prop_name})}else if(p.get!==undefined){if(!(p.name in getters)&&!(p.name in all_fields_except_backing_fields))getters[p.name]=p}else if(!(p.name in all_fields_except_backing_fields)){all_fields_except_backing_fields[p.name]=p}});Object.values(backing_fields).forEach(backing_field=>{const auto_prop_name=backing_field.name;const getter=getters[auto_prop_name];if(getter===undefined){return}if(auto_prop_name in all_fields_except_backing_fields){delete getters[auto_prop_name]}else if(getter.__args.owner_class===backing_field.__args.owner_class){all_fields_except_backing_fields[auto_prop_name]=backing_field;delete getters[auto_prop_name]}});if(accessors_only)return Object.values(getters);return Object.values(all_fields_except_backing_fields).concat(Object.values(getters))},_parse_object_id:function(idStr,throwOnError=false){if(idStr===undefined||idStr==""||!idStr.startsWith("dotnet:")){if(throwOnError)throw new Error(`Invalid id: ${idStr}`);return undefined}const[,scheme,...rest]=idStr.split(":");let res={scheme:scheme,value:rest.join(":"),idStr:idStr,o:{}};try{res.o=JSON.parse(res.value)}catch(e){}return res},_resolve_member_by_name:function(base_object,base_name,expr_parts){if(base_object===undefined||base_object.value===undefined)throw new Error(`Bug: base_object is undefined`);if(base_object.value.type==="object"&&base_object.value.subtype==="null")throw new ReferenceError(`Null reference: ${base_name} is null`);if(base_object.value.type!=="object")throw new ReferenceError(`'.' is only supported on non-primitive types. Failed on '${base_name}'`);if(expr_parts.length==0)throw new Error(`Invalid member access expression`);const root=expr_parts[0];const props=this.mono_wasm_get_details(base_object.value.objectId,{});let resObject=props.find(l=>l.name==root);if(resObject!==undefined){if(resObject.value===undefined&&resObject.get!==undefined)resObject=this._invoke_getter(base_object.value.objectId,root)}if(resObject===undefined||expr_parts.length==1)return resObject;else{expr_parts.shift();return this._resolve_member_by_name(resObject,root,expr_parts)}},mono_wasm_eval_member_access:function(scope,var_list,rootObjectId,expr){if(expr===undefined||expr.length==0)throw new Error(`expression argument required`);let parts=expr.split(".");if(parts.length==0)throw new Error(`Invalid member access expression: ${expr}`);const root=parts[0];const locals=this.mono_wasm_get_variables(scope,var_list);let rootObject=locals.find(l=>l.name===root);if(rootObject===undefined){const thisObject=locals.find(l=>l.name=="this");if(thisObject===undefined)throw new ReferenceError(`Could not find ${root} in locals, and no 'this' found.`);const thisProps=this.mono_wasm_get_details(thisObject.value.objectId,{});rootObject=thisProps.find(tp=>tp.name==root);if(rootObject===undefined)throw new ReferenceError(`Could not find ${root} in locals, or in 'this'`);if(rootObject.value===undefined&&rootObject.get!==undefined)rootObject=this._invoke_getter(thisObject.value.objectId,root)}parts.shift();if(parts.length==0)return rootObject;if(rootObject===undefined||rootObject.value===undefined)throw new Error(`Could not get a value for ${root}`);return this._resolve_member_by_name(rootObject,root,parts)},mono_wasm_set_variable_value:function(scope,index,name,newValue){console.debug(">> mono_wasm_set_variable_value "+name+" - "+newValue);var ret=this._c_fn_table.mono_wasm_set_variable_on_frame_wrapper(scope,index,name,newValue);if(ret==false)throw new Error(`Could not get a value for ${name}`);return ret},_get_vt_properties:function(id,args={}){let entry=this._get_id_props(id.idStr);if(entry===undefined||entry.members===undefined){if(!isNaN(id.o.containerId)){this._get_object_properties(id.o.containerId,{expandValueTypes:true})}else if(!isNaN(id.o.arrayId))this._get_array_values(id,Number(id.o.arrayIdx),1,true);else throw new Error(`Invalid valuetype id (${id.idStr}). Can't get properties for it.`)}entry=this._get_id_props(id.idStr);if(entry!==undefined&&entry.members!==undefined){if(args.accessorPropertiesOnly===true)return entry.accessors;return entry.members}throw new Error(`Unknown valuetype id: ${id.idStr}. Failed to get properties for it.`)},_assign_vt_ids:function(vars,getIdArgs){vars.forEach((v,i)=>{const value=v.value;if(value===undefined||!value.isValueType)return;if(value.objectId!==undefined)throw new Error(`Bug: Trying to assign valuetype id, but the var already has one: ${v}`);value.objectId=this._new_or_add_id_props({scheme:"valuetype",idArgs:getIdArgs(v,i),props:value._props});delete value._props});return vars},mono_wasm_get_variables:function(scope,var_list){const numBytes=var_list.length*Int32Array.BYTES_PER_ELEMENT;const ptr=Module._malloc(numBytes);let heapBytes=new Int32Array(Module.HEAP32.buffer,ptr,numBytes);for(let i=0;i({containerId:this._async_method_objectId,fieldOffset:v.fieldOffset}));for(let i in res){const res_name=res[i].name;if(this._async_method_objectId!=0){if(res_name!==undefined&&res_name.indexOf(">")>0){res[i].name=res_name.substring(1,res_name.indexOf(">"))}}else if(res_name===undefined&&var_list[i]!==undefined){res[i].name=var_list[i].name}}this._post_process_details(res);return res},_get_properties_args_to_gpflags:function(args){let gpflags=0;if(args.expandValueTypes)gpflags|=4;return gpflags},_get_object_properties:function(idNum,args={}){let gpflags=this._get_properties_args_to_gpflags(args);let{res_ok:res_ok,res:res}=this.mono_wasm_get_object_properties_info(idNum,gpflags);if(!res_ok)throw new Error(`Failed to get properties for ${idNum}`);res=MONO._filter_automatic_properties(res,args.accessorPropertiesOnly===true);res=this._assign_vt_ids(res,v=>({containerId:idNum,fieldOffset:v.fieldOffset}));res=this._post_process_details(res);return res},_get_array_values:function(id,startIdx=0,count=-1,expandValueTypes=false){if(isNaN(id.o.arrayId)||isNaN(startIdx))throw new Error(`Invalid array id: ${id.idStr}`);let gpflags=this._get_properties_args_to_gpflags({expandValueTypes:expandValueTypes});let{res_ok:res_ok,res:res}=this.mono_wasm_get_array_values_info(id.o.arrayId,startIdx,count,gpflags);if(!res_ok)throw new Error(`Failed to get properties for array id ${id.idStr}`);res=this._assign_vt_ids(res,(_,i)=>({arrayId:id.o.arrayId,arrayIdx:Number(startIdx)+i}));for(let i=0;i0)this._extract_and_cache_value_types(details);details.forEach(d=>delete d.__args);return details},_next_id:function(){return++this._next_id_var},_extract_and_cache_value_types:function(var_list){if(var_list==undefined||!Array.isArray(var_list)||var_list.length==0)return var_list;for(let i in var_list){let value=var_list[i].value;if(value===undefined)continue;if(value.objectId!==undefined&&value.objectId.startsWith("dotnet:pointer:")){let ptr_args=this._get_id_props(value.objectId);if(ptr_args===undefined)throw new Error(`Bug: Expected to find an entry for pointer id: ${value.objectId}`);ptr_args.varName=ptr_args.varName||var_list[i].name}if(value.type!="object"||value.isValueType!=true||value.expanded!=true)continue;if(value.members===undefined){continue}value.objectId=value.objectId||this._new_or_add_id_props({scheme:"valuetype"});this._extract_and_cache_value_types(value.members);const accessors=value.members.filter(m=>m.get!==undefined);const new_props=Object.assign({members:value.members,accessors:accessors},value.__extra_vt_props);this._new_or_add_id_props({objectId:value.objectId,props:new_props});delete value.members;delete value.__extra_vt_props}return var_list},_get_cfo_res_details:function(objectId,args){if(!(objectId in this._call_function_res_cache))throw new Error(`Could not find any object with id ${objectId}`);const real_obj=this._call_function_res_cache[objectId];const descriptors=Object.getOwnPropertyDescriptors(real_obj);if(args.accessorPropertiesOnly){Object.keys(descriptors).forEach(k=>{if(descriptors[k].get===undefined)Reflect.deleteProperty(descriptors,k)})}let res_details=[];Object.keys(descriptors).forEach(k=>{let new_obj;let prop_desc=descriptors[k];if(typeof prop_desc.value=="object"){new_obj=Object.assign({name:k},prop_desc)}else if(prop_desc.value!==undefined){new_obj={name:k,value:Object.assign({type:typeof prop_desc.value,description:""+prop_desc.value},prop_desc)}}else if(prop_desc.get!==undefined){new_obj={name:k,get:{className:"Function",description:`get ${k} () {}`,type:"function"}}}else{new_obj={name:k,value:{type:"symbol",value:"",description:""}}}res_details.push(new_obj)});return{__value_as_json_string__:JSON.stringify(res_details)}},_new_or_add_id_props:function({scheme:scheme=undefined,objectId:objectId=undefined,idArgs:idArgs={},props:props={}}){if(scheme===undefined&&objectId===undefined)throw new Error(`Either scheme or objectId must be given`);if(scheme!==undefined&&objectId!==undefined)throw new Error(`Both scheme, and objectId cannot be given`);if(objectId!==undefined&&Object.entries(idArgs).length>0)throw new Error(`Both objectId, and idArgs cannot be given`);if(Object.entries(idArgs).length==0){idArgs.num=this._next_id()}let idStr;if(objectId!==undefined){idStr=objectId;const old_props=this._id_table[idStr];if(old_props===undefined)throw new Error(`ObjectId not found in the id table: ${idStr}`);this._id_table[idStr]=Object.assign(old_props,props)}else{idStr=`dotnet:${scheme}:${JSON.stringify(idArgs)}`;this._id_table[idStr]=props}return idStr},_get_id_props:function(objectId){return this._id_table[objectId]},_get_deref_ptr_value:function(objectId){const ptr_args=this._get_id_props(objectId);if(ptr_args===undefined)throw new Error(`Unknown pointer id: ${objectId}`);if(ptr_args.ptr_addr==0||ptr_args.klass_addr==0)throw new Error(`Both ptr_addr and klass_addr need to be non-zero, to dereference a pointer. objectId: ${objectId}`);const value_addr=new DataView(Module.HEAPU8.buffer).getUint32(ptr_args.ptr_addr,true);let{res_ok:res_ok,res:res}=this.mono_wasm_get_deref_ptr_value_info(value_addr,ptr_args.klass_addr);if(!res_ok)throw new Error(`Failed to dereference pointer ${objectId}`);if(res.length>0){if(ptr_args.varName===undefined)throw new Error(`Bug: no varName found for the pointer. objectId: ${objectId}`);res[0].name=`*${ptr_args.varName}`}res=this._post_process_details(res);return res},mono_wasm_get_details:function(objectId,args={}){let id=this._parse_object_id(objectId,true);switch(id.scheme){case"object":{if(isNaN(id.value))throw new Error(`Invalid objectId: ${objectId}. Expected a numeric id.`);args.expandValueTypes=false;return this._get_object_properties(id.value,args)}case"array":return this._get_array_values(id);case"valuetype":return this._get_vt_properties(id,args);case"cfo_res":return this._get_cfo_res_details(objectId,args);case"pointer":{return this._get_deref_ptr_value(objectId)}default:throw new Error(`Unknown object id format: ${objectId}`)}},_cache_call_function_res:function(obj){const id=`dotnet:cfo_res:${this._next_call_function_res_id++}`;this._call_function_res_cache[id]=obj;return id},mono_wasm_release_object:function(objectId){if(objectId in this._cache_call_function_res)delete this._cache_call_function_res[objectId]},_invoke_getter:function(objectIdStr,name){const id=this._parse_object_id(objectIdStr);if(id===undefined)throw new Error(`Invalid object id: ${objectIdStr}`);let getter_res;if(id.scheme=="object"){if(isNaN(id.o)||id.o<0)throw new Error(`Invalid object id: ${objectIdStr}`);let{res_ok:res_ok,res:res}=this.mono_wasm_invoke_getter_on_object_info(id.o,name);if(!res_ok)throw new Error(`Invoking getter on ${objectIdStr} failed`);getter_res=res}else if(id.scheme=="valuetype"){const id_props=this._get_id_props(objectIdStr);if(id_props===undefined)throw new Error(`Unknown valuetype id: ${objectIdStr}`);if(typeof id_props.value64!=="string"||isNaN(id_props.klass))throw new Error(`Bug: Cannot invoke getter on ${objectIdStr}, because of missing or invalid klass/value64 fields. idProps: ${JSON.stringify(id_props)}`);const dataPtr=Module._malloc(id_props.value64.length);const dataHeap=new Uint8Array(Module.HEAPU8.buffer,dataPtr,id_props.value64.length);dataHeap.set(new Uint8Array(this._base64_to_uint8(id_props.value64)));let{res_ok:res_ok,res:res}=this.mono_wasm_invoke_getter_on_value_info(dataHeap.byteOffset,id_props.klass,name);Module._free(dataHeap.byteOffset);if(!res_ok){console.debug(`Invoking getter on valuetype ${objectIdStr}, with props: ${JSON.stringify(id_props)} failed`);throw new Error(`Invoking getter on valuetype ${objectIdStr} failed`)}getter_res=res}else{throw new Error(`Only object, and valuetypes supported for getters, id: ${objectIdStr}`)}getter_res=MONO._post_process_details(getter_res);return getter_res.length>0?getter_res[0]:{}},_set_value_on_object:function(objectIdStr,name,newvalue){const id=this._parse_object_id(objectIdStr);if(id===undefined)throw new Error(`Invalid object id: ${objectIdStr}`);let setter_res;if(id.scheme=="object"){if(isNaN(id.o)||id.o<0)throw new Error(`Invalid object id: ${objectIdStr}`);var ret=this._c_fn_table.mono_wasm_set_value_on_object_wrapper(id.o,name,newvalue);if(!ret)throw new Error(`Invoking setter on ${objectIdStr} failed`);setter_res=ret}else throw new Error(`Only object is supported for setters, id: ${objectIdStr}`);return setter_res},_create_proxy_from_object_id:function(objectId){const details=this.mono_wasm_get_details(objectId);if(objectId.startsWith("dotnet:array:"))return details.map(p=>p.value);let proxy={};Object.keys(details).forEach(p=>{var prop=details[p];if(prop.get!==undefined){Object.defineProperty(proxy,prop.name,{get(){return MONO._invoke_getter(objectId,prop.name)}})}else{proxy[prop.name]=prop.value}});const handler1={set(obj,prop,newValue){return MONO._set_value_on_object(objectId,prop,newValue.toString())}};return new Proxy(proxy,handler1)},mono_wasm_call_function_on:function(request){if(request.arguments!=undefined&&!Array.isArray(request.arguments))throw new Error(`"arguments" should be an array, but was ${request.arguments}`);const objId=request.objectId;let proxy;if(objId.startsWith("dotnet:cfo_res:")){if(objId in this._call_function_res_cache)proxy=this._call_function_res_cache[objId];else throw new Error(`Unknown object id ${objId}`)}else{proxy=this._create_proxy_from_object_id(objId)}const fn_args=request.arguments!=undefined?request.arguments.map(a=>JSON.stringify(a.value)):[];const fn_eval_str=`var fn = ${request.functionDeclaration}; fn.call (proxy, ...[${fn_args}]);`;const fn_res=eval(fn_eval_str);if(fn_res===undefined)return{type:"undefined"};if(fn_res===null||fn_res.subtype==="null"&&fn_res.value===undefined)return fn_res;if(Object(fn_res)!==fn_res)return fn_res;if(fn_res.value!==undefined&&Object(fn_res.value.value)!==fn_res.value.value)return fn_res.value;if(request.returnByValue)return{type:"object",value:fn_res};const fn_res_id=this._cache_call_function_res(fn_res);if(Object.getPrototypeOf(fn_res)==Array.prototype){return{type:"object",subtype:"array",className:"Array",description:`Array(${fn_res.length})`,objectId:fn_res_id}}else{return{type:"object",className:"Object",description:"Object",objectId:fn_res_id}}},_clear_per_step_state:function(){this._next_id_var=0;this._id_table={}},mono_wasm_debugger_resume:function(){this._clear_per_step_state()},mono_wasm_start_single_stepping:function(kind){console.debug(">> mono_wasm_start_single_stepping "+kind);if(!this.mono_wasm_setup_single_step)this.mono_wasm_setup_single_step=Module.cwrap("mono_wasm_setup_single_step","number",["number"]);this._clear_per_step_state();return this.mono_wasm_setup_single_step(kind)},mono_wasm_set_pause_on_exceptions:function(state){if(!this.mono_wasm_pause_on_exceptions)this.mono_wasm_pause_on_exceptions=Module.cwrap("mono_wasm_pause_on_exceptions","number",["number"]);var state_enum=0;switch(state){case"uncaught":state_enum=1;break;case"all":state_enum=2;break}return this.mono_wasm_pause_on_exceptions(state_enum)},mono_wasm_detach_debugger:function(){if(!this.mono_wasm_set_is_debugger_attached)this.mono_wasm_set_is_debugger_attached=Module.cwrap("mono_wasm_set_is_debugger_attached","void",["bool"]);this.mono_wasm_set_is_debugger_attached(false)},_register_c_fn:function(name,...args){Object.defineProperty(this._c_fn_table,name+"_wrapper",{value:Module.cwrap(name,...args)})},_register_c_var_fn:function(name,ret_type,params){if(ret_type!=="bool")throw new Error(`Bug: Expected a C function signature that returns bool`);this._register_c_fn(name,ret_type,params);Object.defineProperty(this,name+"_info",{value:function(...args){MONO.var_info=[];const res_ok=MONO._c_fn_table[name+"_wrapper"](...args);let res=MONO.var_info;MONO.var_info=[];if(res_ok){res=this._fixup_name_value_objects(res);return{res_ok:res_ok,res:res}}return{res_ok:res_ok,res:undefined}}})},mono_wasm_runtime_ready:function(){this.mono_wasm_runtime_is_ready=true;this._clear_per_step_state();this._next_call_function_res_id=0;this._call_function_res_cache={};this._c_fn_table={};this._register_c_var_fn("mono_wasm_get_object_properties","bool",["number","number"]);this._register_c_var_fn("mono_wasm_get_array_values","bool",["number","number","number","number"]);this._register_c_var_fn("mono_wasm_invoke_getter_on_object","bool",["number","string"]);this._register_c_var_fn("mono_wasm_invoke_getter_on_value","bool",["number","number","string"]);this._register_c_var_fn("mono_wasm_get_local_vars","bool",["number","number","number"]);this._register_c_var_fn("mono_wasm_get_deref_ptr_value","bool",["number","number"]);this._register_c_fn("mono_wasm_set_value_on_object","bool",["number","string","string"]);this._register_c_fn("mono_wasm_set_variable_on_frame","bool",["number","number","string","string"]);if(globalThis.dotnetDebugger)debugger;else console.debug("mono_wasm_runtime_ready","fe00e07a-5519-4dfe-b35a-f867dbaf2e28")},mono_wasm_set_breakpoint:function(assembly,method_token,il_offset){if(!this.mono_wasm_set_bp)this.mono_wasm_set_bp=Module.cwrap("mono_wasm_set_breakpoint","number",["string","number","number"]);return this.mono_wasm_set_bp(assembly,method_token,il_offset)},mono_wasm_remove_breakpoint:function(breakpoint_id){if(!this.mono_wasm_del_bp)this.mono_wasm_del_bp=Module.cwrap("mono_wasm_remove_breakpoint","number",["number"]);return this.mono_wasm_del_bp(breakpoint_id)},mono_wasm_setenv:function(name,value){if(!this.wasm_setenv)this.wasm_setenv=Module.cwrap("mono_wasm_setenv",null,["string","string"]);this.wasm_setenv(name,value)},mono_wasm_set_runtime_options:function(options){if(!this.wasm_parse_runtime_options)this.wasm_parse_runtime_options=Module.cwrap("mono_wasm_parse_runtime_options",null,["number","number"]);var argv=Module._malloc(options.length*4);var wasm_strdup=Module.cwrap("mono_wasm_strdup","number",["string"]);let aindex=0;for(var i=0;i0?virtualName.substr(0,lastSlash):null;var fileName=lastSlash>0?virtualName.substr(lastSlash+1):virtualName;if(fileName.startsWith("/"))fileName=fileName.substr(1);if(parentDirectory){if(ctx.tracing)console.log("MONO_WASM: Creating directory '"+parentDirectory+"'");var pathRet=ctx.createPath("/",parentDirectory,true,true)}else{parentDirectory="/"}if(ctx.tracing)console.log("MONO_WASM: Creating file '"+fileName+"' in directory '"+parentDirectory+"'");if(!this.mono_wasm_load_data_archive(bytes,parentDirectory)){var fileRet=ctx.createDataFile(parentDirectory,fileName,bytes,true,true,true)}break;default:throw new Error("Unrecognized asset behavior:",asset.behavior,"for asset",asset.name)}if(asset.behavior==="assembly"){var hasPpdb=ctx.mono_wasm_add_assembly(virtualName,offset,bytes.length);if(!hasPpdb){var index=ctx.loaded_files.findIndex(element=>element.file==virtualName);ctx.loaded_files.splice(index,1)}}else if(asset.behavior==="icu"){if(this.mono_wasm_load_icu_data(offset))ctx.num_icu_assets_loaded_successfully+=1;else console.error("Error loading ICU asset",asset.name)}else if(asset.behavior==="resource"){ctx.mono_wasm_add_satellite_assembly(virtualName,asset.culture,offset,bytes.length)}},mono_load_runtime_and_bcl:function(unused_vfs_prefix,deploy_prefix,debug_level,file_list,loaded_cb,fetch_file_cb){var args={fetch_file_cb:fetch_file_cb,loaded_cb:loaded_cb,debug_level:debug_level,assembly_root:deploy_prefix,assets:[]};for(var i=0;iloaded_files_with_debug_info.push(value.url));MONO.loaded_files=loaded_files_with_debug_info;if(ctx.tracing){console.log("MONO_WASM: loaded_assets: "+JSON.stringify(ctx.loaded_assets));console.log("MONO_WASM: loaded_files: "+JSON.stringify(ctx.loaded_files))}var load_runtime=Module.cwrap("mono_wasm_load_runtime",null,["string","number"]);console.debug("MONO_WASM: Initializing mono runtime");this.mono_wasm_globalization_init(args.globalization_mode);if(ENVIRONMENT_IS_SHELL||ENVIRONMENT_IS_NODE){try{load_runtime("unused",args.debug_level)}catch(ex){print("MONO_WASM: load_runtime () failed: "+ex);print("MONO_WASM: Stacktrace: \n");print(ex.stack);var wasm_exit=Module.cwrap("mono_wasm_exit",null,["number"]);wasm_exit(1)}}else{load_runtime("unused",args.debug_level)}let tz;try{tz=Intl.DateTimeFormat().resolvedOptions().timeZone}catch{}MONO.mono_wasm_setenv("TZ",tz||"UTC");MONO.mono_wasm_runtime_ready();args.loaded_cb()},_load_assets_and_runtime:function(args){if(args.enable_debugging)args.debug_level=args.enable_debugging;if(args.assembly_list)throw new Error("Invalid args (assembly_list was replaced by assets)");if(args.runtime_assets)throw new Error("Invalid args (runtime_assets was replaced by assets)");if(args.runtime_asset_sources)throw new Error("Invalid args (runtime_asset_sources was replaced by remote_sources)");if(!args.loaded_cb)throw new Error("loaded_cb not provided");var ctx={tracing:args.diagnostic_tracing||false,pending_count:args.assets.length,mono_wasm_add_assembly:Module.cwrap("mono_wasm_add_assembly","number",["string","number","number"]),mono_wasm_add_satellite_assembly:Module.cwrap("mono_wasm_add_satellite_assembly","void",["string","string","number","number"]),loaded_assets:Object.create(null),loaded_files:[],createPath:Module["FS_createPath"],createDataFile:Module["FS_createDataFile"]};if(ctx.tracing)console.log("mono_wasm_load_runtime_with_args",JSON.stringify(args));this._apply_configuration_from_args(args);var fetch_file_cb=this._get_fetch_file_cb_from_args(args);var onPendingRequestComplete=function(){--ctx.pending_count;if(ctx.pending_count===0){try{MONO._finalize_startup(args,ctx)}catch(exc){console.error("Unhandled exception in _finalize_startup",exc);throw exc}}};var processFetchResponseBuffer=function(asset,url,blob){try{MONO._handle_loaded_asset(ctx,asset,url,blob)}catch(exc){console.error("Unhandled exception in processFetchResponseBuffer",exc);throw exc}finally{onPendingRequestComplete()}};args.assets.forEach(function(asset){var attemptNextSource;var sourceIndex=0;var sourcesList=asset.load_remote?args.remote_sources:[""];var handleFetchResponse=function(response){if(!response.ok){try{attemptNextSource();return}catch(exc){console.error("MONO_WASM: Unhandled exception in handleFetchResponse attemptNextSource for asset",asset.name,exc);throw exc}}try{var bufferPromise=response["arrayBuffer"]();bufferPromise.then(processFetchResponseBuffer.bind(this,asset,response.url))}catch(exc){console.error("MONO_WASM: Unhandled exception in handleFetchResponse for asset",asset.name,exc);attemptNextSource()}};attemptNextSource=function(){if(sourceIndex>=sourcesList.length){var msg="MONO_WASM: Failed to load "+asset.name;try{var isOk=asset.is_optional||asset.name.match(/\.pdb$/)&&MONO.mono_wasm_ignore_pdb_load_errors;if(isOk)console.debug(msg);else{console.error(msg);throw new Error(msg)}}finally{onPendingRequestComplete()}}var sourcePrefix=sourcesList[sourceIndex];sourceIndex++;if(sourcePrefix==="./")sourcePrefix="";var attemptUrl;if(sourcePrefix.trim()===""){if(asset.behavior==="assembly")attemptUrl=locateFile(args.assembly_root+"/"+asset.name);else if(asset.behavior==="resource"){var path=asset.culture!==""?`${asset.culture}/${asset.name}`:asset.name;attemptUrl=locateFile(args.assembly_root+"/"+path)}else attemptUrl=asset.name}else{attemptUrl=sourcePrefix+asset.name}try{if(asset.name===attemptUrl){if(ctx.tracing)console.log("Attempting to fetch '"+attemptUrl+"'")}else{if(ctx.tracing)console.log("Attempting to fetch '"+attemptUrl+"' for",asset.name)}var fetch_promise=fetch_file_cb(attemptUrl);fetch_promise.then(handleFetchResponse)}catch(exc){console.error("MONO_WASM: Error fetching "+attemptUrl,exc);attemptNextSource()}};attemptNextSource()})},mono_wasm_globalization_init:function(globalization_mode){var invariantMode=false;if(globalization_mode==="invariant")invariantMode=true;if(!invariantMode){if(this.num_icu_assets_loaded_successfully>0){console.debug("MONO_WASM: ICU data archive(s) loaded, disabling invariant mode")}else if(globalization_mode!=="icu"){console.debug("MONO_WASM: ICU data archive(s) not loaded, using invariant globalization mode");invariantMode=true}else{var msg="invariant globalization mode is inactive and no ICU data archives were loaded";console.error("MONO_WASM: ERROR: "+msg);throw new Error(msg)}}if(invariantMode)this.mono_wasm_setenv("DOTNET_SYSTEM_GLOBALIZATION_INVARIANT","1");this.mono_wasm_setenv("DOTNET_SYSTEM_GLOBALIZATION_PREDEFINED_CULTURES_ONLY","1")},mono_wasm_get_loaded_files:function(){if(!this.mono_wasm_set_is_debugger_attached)this.mono_wasm_set_is_debugger_attached=Module.cwrap("mono_wasm_set_is_debugger_attached","void",["bool"]);this.mono_wasm_set_is_debugger_attached(true);return MONO.loaded_files},mono_wasm_get_loaded_asset_table:function(){return MONO.loaded_assets},mono_wasm_clear_all_breakpoints:function(){if(!this.mono_clear_bps)this.mono_clear_bps=Module.cwrap("mono_wasm_clear_all_breakpoints",null);this.mono_clear_bps()},mono_wasm_add_null_var:function(className){let fixed_class_name=MONO._mono_csharp_fixup_class_name(Module.UTF8ToString(className));if(!fixed_class_name){fixed_class_name=className}MONO.var_info.push({value:{type:"object",className:fixed_class_name,description:fixed_class_name,subtype:"null"}})},_mono_wasm_add_string_var:function(var_value){if(var_value===0){MONO.mono_wasm_add_null_var("string");return}MONO.var_info.push({value:{type:"string",value:var_value,description:var_value}})},_mono_wasm_add_getter_var:function(className){const fixed_class_name=MONO._mono_csharp_fixup_class_name(className);var name;if(MONO.var_info.length>0)name=MONO.var_info[MONO.var_info.length-1].name;name=name===undefined?"":name;MONO.var_info.push({get:{className:"Function",description:`get ${name} () {}`,type:"function"}})},_mono_wasm_add_array_var:function(className,objectId,length){const fixed_class_name=MONO._mono_csharp_fixup_class_name(className);if(objectId==0){MONO.mono_wasm_add_null_var(fixed_class_name);return}MONO.var_info.push({value:{type:"object",subtype:"array",className:fixed_class_name,description:`${fixed_class_name}(${length})`,objectId:this._new_or_add_id_props({scheme:"array",idArgs:{arrayId:objectId}})}})},_base64_to_uint8:function(base64String){const byteCharacters=atob(base64String);const byteNumbers=new Array(byteCharacters.length);for(let i=0;i{var file=m[0];var last=file.lastIndexOf("/");var directory=file.slice(0,last+1);folders.add(directory)});folders.forEach(folder=>{Module["FS_createPath"](prefix,folder,true,true)});for(row of manifest){var name=row[0];var length=row[1];var bytes=data.slice(0,length);Module["FS_createDataFile"](prefix,name,bytes,true,true);data=data.slice(length)}return true},mono_wasm_raise_debug_event:function(event,args={}){if(typeof event!=="object")throw new Error(`event must be an object, but got ${JSON.stringify(event)}`);if(event.eventName===undefined)throw new Error(`event.eventName is a required parameter, in event: ${JSON.stringify(event)}`);if(typeof args!=="object")throw new Error(`args must be an object, but got ${JSON.stringify(args)}`);console.debug("mono_wasm_debug_event_raised:aef14bca-5519-4dfe-b35a-f867abc123ae",JSON.stringify(event),JSON.stringify(args))}};function _mono_set_timeout(timeout,id){if(!this.mono_set_timeout_exec)this.mono_set_timeout_exec=Module.cwrap("mono_set_timeout_exec",null,["number"]);if(typeof globalThis.setTimeout==="function"){globalThis.setTimeout(function(){this.mono_set_timeout_exec(id)},timeout)}else{++MONO.pump_count;MONO.timeout_queue.push(function(){this.mono_set_timeout_exec(id)})}}function _mono_wasm_add_array_item(position){MONO.var_info.push({name:`${position}`})}function _mono_wasm_add_enum_var(className,members,value){const re=new RegExp(`[,]?([^,:]+):(${value}(?=,)|${value}$)`,"g");const members_str=Module.UTF8ToString(members);const match=re.exec(members_str);const member_name=match==null?""+value:match[1];const fixed_class_name=MONO._mono_csharp_fixup_class_name(Module.UTF8ToString(className));MONO.var_info.push({value:{type:"object",className:fixed_class_name,description:member_name,isEnum:true}})}function _mono_wasm_add_frame(il,method,frame_id,assembly_name,method_full_name){var parts=Module.UTF8ToString(method_full_name).split(":",2);MONO.active_frames.push({il_pos:il,method_token:method,assembly_name:Module.UTF8ToString(assembly_name),method_name:parts[parts.length-1],frame_id:frame_id})}function _mono_wasm_add_func_var(className,targetName,objectId){if(objectId==0){MONO.mono_wasm_add_null_var(MONO._mono_csharp_fixup_class_name(Module.UTF8ToString(className)));return}function args_to_sig(args_str){var parts=args_str.split(":");parts=parts.map(a=>MONO._mono_csharp_fixup_class_name(a));var method_name=parts.pop();var ret_sig=parts[0];var args_sig=parts.splice(1).join(", ");return`${ret_sig} ${method_name} (${args_sig})`}let tgt_sig;if(targetName!=0)tgt_sig=args_to_sig(Module.UTF8ToString(targetName));const type_name=MONO._mono_csharp_fixup_class_name(Module.UTF8ToString(className));if(tgt_sig===undefined)tgt_sig=type_name;if(objectId==-1||targetName===0){MONO.var_info.push({value:{type:"symbol",value:tgt_sig,description:tgt_sig}})}else{MONO.var_info.push({value:{type:"object",className:type_name,description:tgt_sig,objectId:"dotnet:object:"+objectId}})}}function _mono_wasm_add_obj_var(className,toString,objectId){if(objectId==0){MONO.mono_wasm_add_null_var(className);return}const fixed_class_name=MONO._mono_csharp_fixup_class_name(Module.UTF8ToString(className));MONO.var_info.push({value:{type:"object",className:fixed_class_name,description:toString===0?fixed_class_name:Module.UTF8ToString(toString),objectId:"dotnet:object:"+objectId}})}function _mono_wasm_add_properties_var(name,args){MONO.mono_wasm_add_properties_var(name,args)}function _mono_wasm_add_typed_value(type,str_value,value){MONO.mono_wasm_add_typed_value(type,str_value,value)}function _mono_wasm_asm_loaded(assembly_name,assembly_ptr,assembly_len,pdb_ptr,pdb_len){if(MONO.mono_wasm_runtime_is_ready!==true)return;const assembly_name_str=assembly_name!==0?Module.UTF8ToString(assembly_name).concat(".dll"):"";const assembly_data=new Uint8Array(Module.HEAPU8.buffer,assembly_ptr,assembly_len);const assembly_b64=MONO._base64Converter.toBase64StringImpl(assembly_data);let pdb_b64;if(pdb_ptr){const pdb_data=new Uint8Array(Module.HEAPU8.buffer,pdb_ptr,pdb_len);pdb_b64=MONO._base64Converter.toBase64StringImpl(pdb_data)}MONO.mono_wasm_raise_debug_event({eventName:"AssemblyLoaded",assembly_name:assembly_name_str,assembly_b64:assembly_b64,pdb_b64:pdb_b64})}var BINDING={BINDING_ASM:"[System.Private.Runtime.InteropServices.JavaScript]System.Runtime.InteropServices.JavaScript.Runtime",mono_wasm_object_registry:[],mono_wasm_ref_counter:0,mono_wasm_free_list:[],mono_wasm_owned_objects_frames:[],mono_wasm_owned_objects_LMF:[],mono_wasm_marshal_enum_as_int:true,mono_bindings_init:function(binding_asm){this.BINDING_ASM=binding_asm},export_functions:function(module){module["mono_bindings_init"]=BINDING.mono_bindings_init.bind(BINDING);module["mono_bind_method"]=BINDING.bind_method.bind(BINDING);module["mono_method_invoke"]=BINDING.call_method.bind(BINDING);module["mono_method_get_call_signature"]=BINDING.mono_method_get_call_signature.bind(BINDING);module["mono_method_resolve"]=BINDING.resolve_method_fqn.bind(BINDING);module["mono_bind_static_method"]=BINDING.bind_static_method.bind(BINDING);module["mono_call_static_method"]=BINDING.call_static_method.bind(BINDING);module["mono_bind_assembly_entry_point"]=BINDING.bind_assembly_entry_point.bind(BINDING);module["mono_call_assembly_entry_point"]=BINDING.call_assembly_entry_point.bind(BINDING);module["mono_intern_string"]=BINDING.mono_intern_string.bind(BINDING)},bindings_lazy_init:function(){if(this.init)return;this.init=true;Array.prototype[Symbol.for("wasm type")]=1;ArrayBuffer.prototype[Symbol.for("wasm type")]=2;DataView.prototype[Symbol.for("wasm type")]=3;Function.prototype[Symbol.for("wasm type")]=4;Map.prototype[Symbol.for("wasm type")]=5;if(typeof SharedArrayBuffer!=="undefined")SharedArrayBuffer.prototype[Symbol.for("wasm type")]=6;Int8Array.prototype[Symbol.for("wasm type")]=10;Uint8Array.prototype[Symbol.for("wasm type")]=11;Uint8ClampedArray.prototype[Symbol.for("wasm type")]=12;Int16Array.prototype[Symbol.for("wasm type")]=13;Uint16Array.prototype[Symbol.for("wasm type")]=14;Int32Array.prototype[Symbol.for("wasm type")]=15;Uint32Array.prototype[Symbol.for("wasm type")]=16;Float32Array.prototype[Symbol.for("wasm type")]=17;Float64Array.prototype[Symbol.for("wasm type")]=18;this.assembly_load=Module.cwrap("mono_wasm_assembly_load","number",["string"]);this.find_corlib_class=Module.cwrap("mono_wasm_find_corlib_class","number",["string","string"]);this.find_class=Module.cwrap("mono_wasm_assembly_find_class","number",["number","string","string"]);this._find_method=Module.cwrap("mono_wasm_assembly_find_method","number",["number","string","number"]);this.invoke_method=Module.cwrap("mono_wasm_invoke_method","number",["number","number","number","number"]);this.mono_string_get_utf8=Module.cwrap("mono_wasm_string_get_utf8","number",["number"]);this.mono_wasm_string_from_utf16=Module.cwrap("mono_wasm_string_from_utf16","number",["number","number"]);this.mono_get_obj_type=Module.cwrap("mono_wasm_get_obj_type","number",["number"]);this.mono_array_length=Module.cwrap("mono_wasm_array_length","number",["number"]);this.mono_array_get=Module.cwrap("mono_wasm_array_get","number",["number","number"]);this.mono_obj_array_new=Module.cwrap("mono_wasm_obj_array_new","number",["number"]);this.mono_obj_array_set=Module.cwrap("mono_wasm_obj_array_set","void",["number","number","number"]);this.mono_wasm_register_bundled_satellite_assemblies=Module.cwrap("mono_wasm_register_bundled_satellite_assemblies","void",[]);this.mono_wasm_try_unbox_primitive_and_get_type=Module.cwrap("mono_wasm_try_unbox_primitive_and_get_type","number",["number","number"]);this.mono_wasm_box_primitive=Module.cwrap("mono_wasm_box_primitive","number",["number","number","number"]);this.mono_wasm_intern_string=Module.cwrap("mono_wasm_intern_string","number",["number"]);this.assembly_get_entry_point=Module.cwrap("mono_wasm_assembly_get_entry_point","number",["number"]);this.mono_wasm_get_delegate_invoke=Module.cwrap("mono_wasm_get_delegate_invoke","number",["number"]);this.mono_wasm_string_array_new=Module.cwrap("mono_wasm_string_array_new","number",["number"]);this._box_buffer=Module._malloc(16);this._unbox_buffer=Module._malloc(16);this._class_int32=this.find_corlib_class("System","Int32");this._class_uint32=this.find_corlib_class("System","UInt32");this._class_double=this.find_corlib_class("System","Double");this._class_boolean=this.find_corlib_class("System","Boolean");this.mono_typed_array_new=Module.cwrap("mono_wasm_typed_array_new","number",["number","number","number","number"]);var binding_fqn_asm=this.BINDING_ASM.substring(this.BINDING_ASM.indexOf("[")+1,this.BINDING_ASM.indexOf("]")).trim();var binding_fqn_class=this.BINDING_ASM.substring(this.BINDING_ASM.indexOf("]")+1).trim();this.binding_module=this.assembly_load(binding_fqn_asm);if(!this.binding_module)throw"Can't find bindings module assembly: "+binding_fqn_asm;var namespace=null,classname=null;if(binding_fqn_class!==null&&typeof binding_fqn_class!=="undefined"){namespace="System.Runtime.InteropServices.JavaScript";classname=binding_fqn_class.length>0?binding_fqn_class:"Runtime";if(binding_fqn_class.indexOf(".")!=-1){var idx=binding_fqn_class.lastIndexOf(".");namespace=binding_fqn_class.substring(0,idx);classname=binding_fqn_class.substring(idx+1)}}var wasm_runtime_class=this.find_class(this.binding_module,namespace,classname);if(!wasm_runtime_class)throw"Can't find "+binding_fqn_class+" class";var get_method=function(method_name){var res=BINDING.find_method(wasm_runtime_class,method_name,-1);if(!res)throw"Can't find method "+namespace+"."+classname+":"+method_name;return res};var bind_runtime_method=function(method_name,signature){var method=get_method(method_name);return BINDING.bind_method(method,0,signature,"BINDINGS_"+method_name)};this._bind_js_obj=bind_runtime_method("BindJSObject","iii");this._bind_core_clr_obj=bind_runtime_method("BindCoreCLRObject","ii");this._bind_existing_obj=bind_runtime_method("BindExistingObject","mi");this._unbind_raw_obj_and_free=bind_runtime_method("UnBindRawJSObjectAndFree","ii");this._get_js_id=bind_runtime_method("GetJSObjectId","m");this._get_raw_mono_obj=bind_runtime_method("GetDotNetObject","i!");this._is_simple_array=bind_runtime_method("IsSimpleArray","m");this.setup_js_cont=get_method("SetupJSContinuation");this.create_tcs=get_method("CreateTaskSource");this.set_tcs_result=get_method("SetTaskSourceResult");this.set_tcs_failure=get_method("SetTaskSourceFailure");this.tcs_get_task_and_bind=get_method("GetTaskAndBind");this.get_call_sig=get_method("GetCallSignature");this._object_to_string=bind_runtime_method("ObjectToString","m");this.get_date_value=get_method("GetDateValue");this.create_date_time=get_method("CreateDateTime");this.create_uri=get_method("CreateUri");this.safehandle_addref=get_method("SafeHandleAddRef");this.safehandle_release=get_method("SafeHandleRelease");this.safehandle_get_handle=get_method("SafeHandleGetHandle");this.safehandle_release_by_handle=get_method("SafeHandleReleaseByHandle");this._are_promises_supported=(typeof Promise==="object"||typeof Promise==="function")&&typeof Promise.resolve==="function";this._empty_string="";this._empty_string_ptr=0;this._interned_string_full_root_buffers=[];this._interned_string_current_root_buffer=null;this._interned_string_current_root_buffer_count=0;this._interned_string_table=new Map;this._managed_pointer_to_interned_string_table=new Map},mono_intern_string:function(string){if(string.length===0)return this._empty_string;var ptr=this.js_string_to_mono_string_interned(string);var result=this._managed_pointer_to_interned_string_table.get(ptr);return result},_store_string_in_intern_table:function(string,ptr,internIt){if(!ptr)throw new Error("null pointer passed to _store_string_in_intern_table");else if(typeof ptr!=="number")throw new Error(`non-pointer passed to _store_string_in_intern_table: ${typeof ptr}`);const internBufferSize=8192;if(this._interned_string_current_root_buffer_count>=internBufferSize){this._interned_string_full_root_buffers.push(this._interned_string_current_root_buffer);this._interned_string_current_root_buffer=null}if(!this._interned_string_current_root_buffer){this._interned_string_current_root_buffer=MONO.mono_wasm_new_root_buffer(internBufferSize,"interned strings");this._interned_string_current_root_buffer_count=0}var rootBuffer=this._interned_string_current_root_buffer;var index=this._interned_string_current_root_buffer_count++;rootBuffer.set(index,ptr);if(internIt)rootBuffer.set(index,ptr=this.mono_wasm_intern_string(ptr));if(!ptr)throw new Error("mono_wasm_intern_string produced a null pointer");this._interned_string_table.set(string,ptr);this._managed_pointer_to_interned_string_table.set(ptr,string);if(string.length===0&&!this._empty_string_ptr)this._empty_string_ptr=ptr;return ptr},js_string_to_mono_string_interned:function(string){var text=typeof string==="symbol"?string.description||Symbol.keyFor(string)||"":string;if(text.length===0&&this._empty_string_ptr)return this._empty_string_ptr;var ptr=this._interned_string_table.get(string);if(ptr)return ptr;ptr=this.js_string_to_mono_string_new(text);ptr=this._store_string_in_intern_table(string,ptr,true);return ptr},js_string_to_mono_string:function(string){if(string===null)return null;else if(typeof string==="symbol")return this.js_string_to_mono_string_interned(string);else if(typeof string!=="string")throw new Error("Expected string argument");if(string.length===0)return this.js_string_to_mono_string_interned(string);if(string.length<=256){var interned=this._interned_string_table.get(string);if(interned)return interned}return this.js_string_to_mono_string_new(string)},js_string_to_mono_string_new:function(string){var buffer=Module._malloc((string.length+1)*2);var buffer16=buffer/2|0;for(var i=0;i0)return this.mono_wasm_require_handle(js_handle);return null},conv_string:function(mono_obj,interned){var interned_instance=this._managed_pointer_to_interned_string_table.get(mono_obj);if(interned_instance!==undefined)return interned_instance;var result=MONO.string_decoder.copy(mono_obj);if(interned){this._store_string_in_intern_table(result,mono_obj,false)}return result},is_nested_array:function(ele){return this._is_simple_array(ele)},mono_array_to_js_array:function(mono_array){if(mono_array===0)return null;var arrayRoot=MONO.mono_wasm_new_root(mono_array);try{return this._mono_array_root_to_js_array(arrayRoot)}finally{arrayRoot.release()}},_mono_array_root_to_js_array:function(arrayRoot){if(arrayRoot.value===0)return null;let elemRoot=MONO.mono_wasm_new_root();try{var len=this.mono_array_length(arrayRoot.value);var res=new Array(len);for(var i=0;i>>0===js_obj)result=this._box_js_uint(js_obj);else result=this._box_js_double(js_obj);if(!result)throw new Error(`Boxing failed for ${js_obj}`);return result}case typeof js_obj==="string":return this.js_string_to_mono_string(js_obj);case typeof js_obj==="symbol":return this.js_string_to_mono_string_interned(js_obj);case typeof js_obj==="boolean":return this._box_js_bool(js_obj);case isThenable()===true:var the_task=this.try_extract_mono_obj(js_obj);if(the_task)return the_task;var tcs=this.create_task_completion_source();js_obj.then(function(result){BINDING.set_task_result(tcs,result)},function(reason){BINDING.set_task_failure(tcs,reason)});return this.get_task_and_bind(tcs,js_obj);case js_obj.constructor.name==="Date":return this.call_method(this.create_date_time,null,"d!",[js_obj.getTime()]);default:return this.extract_mono_obj(js_obj)}},js_to_mono_uri:function(js_obj){this.bindings_lazy_init();switch(true){case js_obj===null:case typeof js_obj==="undefined":return 0;case typeof js_obj==="symbol":case typeof js_obj==="string":return this.call_method(this.create_uri,null,"s!",[js_obj]);default:return this.extract_mono_obj(js_obj)}},has_backing_array_buffer:function(js_obj){return typeof SharedArrayBuffer!=="undefined"?js_obj.buffer instanceof ArrayBuffer||js_obj.buffer instanceof SharedArrayBuffer:js_obj.buffer instanceof ArrayBuffer},js_typed_array_to_array:function(js_obj){if(!!(this.has_backing_array_buffer(js_obj)&&js_obj.BYTES_PER_ELEMENT)){var arrayType=js_obj[Symbol.for("wasm type")];var heapBytes=this.js_typedarray_to_heap(js_obj);var bufferArray=this.mono_typed_array_new(heapBytes.byteOffset,js_obj.length,js_obj.BYTES_PER_ELEMENT,arrayType);Module._free(heapBytes.byteOffset);return bufferArray}else{throw new Error("Object '"+js_obj+"' is not a typed array")}},typedarray_copy_to:function(typed_array,pinned_array,begin,end,bytes_per_element){if(!!(this.has_backing_array_buffer(typed_array)&&typed_array.BYTES_PER_ELEMENT)){if(bytes_per_element!==typed_array.BYTES_PER_ELEMENT)throw new Error("Inconsistent element sizes: TypedArray.BYTES_PER_ELEMENT '"+typed_array.BYTES_PER_ELEMENT+"' sizeof managed element: '"+bytes_per_element+"'");var num_of_bytes=(end-begin)*bytes_per_element;var view_bytes=typed_array.length*typed_array.BYTES_PER_ELEMENT;if(num_of_bytes>view_bytes)num_of_bytes=view_bytes;var offset=begin*bytes_per_element;var heapBytes=new Uint8Array(Module.HEAPU8.buffer,pinned_array+offset,num_of_bytes);heapBytes.set(new Uint8Array(typed_array.buffer,typed_array.byteOffset,num_of_bytes));return num_of_bytes}else{throw new Error("Object '"+typed_array+"' is not a typed array")}},typedarray_copy_from:function(typed_array,pinned_array,begin,end,bytes_per_element){if(!!(this.has_backing_array_buffer(typed_array)&&typed_array.BYTES_PER_ELEMENT)){if(bytes_per_element!==typed_array.BYTES_PER_ELEMENT)throw new Error("Inconsistent element sizes: TypedArray.BYTES_PER_ELEMENT '"+typed_array.BYTES_PER_ELEMENT+"' sizeof managed element: '"+bytes_per_element+"'");var num_of_bytes=(end-begin)*bytes_per_element;var view_bytes=typed_array.length*typed_array.BYTES_PER_ELEMENT;if(num_of_bytes>view_bytes)num_of_bytes=view_bytes;var typedarrayBytes=new Uint8Array(typed_array.buffer,0,num_of_bytes);var offset=begin*bytes_per_element;typedarrayBytes.set(Module.HEAPU8.subarray(pinned_array+offset,pinned_array+offset+num_of_bytes));return num_of_bytes}else{throw new Error("Object '"+typed_array+"' is not a typed array")}},typed_array_from:function(pinned_array,begin,end,bytes_per_element,type){var newTypedArray=0;switch(type){case 5:newTypedArray=new Int8Array(end-begin);break;case 6:newTypedArray=new Uint8Array(end-begin);break;case 7:newTypedArray=new Int16Array(end-begin);break;case 8:newTypedArray=new Uint16Array(end-begin);break;case 9:newTypedArray=new Int32Array(end-begin);break;case 10:newTypedArray=new Uint32Array(end-begin);break;case 13:newTypedArray=new Float32Array(end-begin);break;case 14:newTypedArray=new Float64Array(end-begin);break;case 15:newTypedArray=new Uint8ClampedArray(end-begin);break}this.typedarray_copy_from(newTypedArray,pinned_array,begin,end,bytes_per_element);return newTypedArray},js_to_mono_enum:function(js_obj,method,parmIdx){this.bindings_lazy_init();if(typeof js_obj!=="number")throw new Error(`Expected numeric value for enum argument, got '${js_obj}'`);return js_obj|0},wasm_binding_obj_new:function(js_obj_id,ownsHandle,type){return this._bind_js_obj(js_obj_id,ownsHandle,type)},wasm_bind_existing:function(mono_obj,js_id){return this._bind_existing_obj(mono_obj,js_id)},wasm_bind_core_clr_obj:function(js_id,gc_handle){return this._bind_core_clr_obj(js_id,gc_handle)},wasm_get_js_id:function(mono_obj){return this._get_js_id(mono_obj)},wasm_get_raw_obj:function(gchandle){return this._get_raw_mono_obj(gchandle)},try_extract_mono_obj:function(js_obj){if(js_obj===null||typeof js_obj==="undefined"||typeof js_obj.__mono_gchandle__==="undefined")return 0;return this.wasm_get_raw_obj(js_obj.__mono_gchandle__)},mono_method_get_call_signature:function(method,mono_obj){this.bindings_lazy_init();return this.call_method(this.get_call_sig,null,"im",[method,mono_obj])},get_task_and_bind:function(tcs,js_obj){var gc_handle=this.mono_wasm_free_list.length?this.mono_wasm_free_list.pop():this.mono_wasm_ref_counter++;var task_gchandle=this.call_method(this.tcs_get_task_and_bind,null,"oi",[tcs,gc_handle+1]);js_obj.__mono_gchandle__=task_gchandle;this.mono_wasm_object_registry[gc_handle]=js_obj;this.free_task_completion_source(tcs);tcs.is_mono_tcs_task_bound=true;js_obj.__mono_bound_tcs__=tcs.__mono_gchandle__;tcs.__mono_bound_task__=js_obj.__mono_gchandle__;return this.wasm_get_raw_obj(js_obj.__mono_gchandle__)},free_task_completion_source:function(tcs){if(tcs.is_mono_tcs_result_set){this._unbind_raw_obj_and_free(tcs.__mono_gchandle__)}if(tcs.__mono_bound_task__){this._unbind_raw_obj_and_free(tcs.__mono_bound_task__)}},extract_mono_obj:function(js_obj){if(js_obj===null||typeof js_obj==="undefined")return 0;var result=null;var gc_handle=js_obj.__mono_gchandle__;if(gc_handle){result=this.wasm_get_raw_obj(gc_handle);if(!result){delete js_obj.__mono_gchandle__;delete js_obj.is_mono_bridged_obj}}if(!result){gc_handle=this.mono_wasm_register_obj(js_obj);result=this.wasm_get_raw_obj(gc_handle)}return result},extract_js_obj:function(mono_obj){if(mono_obj==0)return null;var js_id=this.wasm_get_js_id(mono_obj);if(js_id>0)return this.mono_wasm_require_handle(js_id);var gcHandle=this.mono_wasm_free_list.length?this.mono_wasm_free_list.pop():this.mono_wasm_ref_counter++;var js_obj={__mono_gchandle__:this.wasm_bind_existing(mono_obj,gcHandle+1),is_mono_bridged_obj:true};this.mono_wasm_object_registry[gcHandle]=js_obj;return js_obj},_create_named_function:function(name,argumentNames,body,closure){var result=null,closureArgumentList=null,closureArgumentNames=null;if(closure){closureArgumentNames=Object.keys(closure);closureArgumentList=new Array(closureArgumentNames.length);for(var i=0,l=closureArgumentNames.length;i0;var has_args_marshal=typeof args_marshal==="string";if(has_args){if(!has_args_marshal)throw new Error("No signature provided for method call.");else if(args.length>args_marshal.length)throw new Error("Too many parameter values. Expected at most "+args_marshal.length+" value(s) for signature "+args_marshal)}return has_args_marshal&&has_args},_get_buffer_for_method_call:function(converter){if(!converter)return 0;var result=converter.scratchBuffer;converter.scratchBuffer=0;return result},_get_args_root_buffer_for_method_call:function(converter){if(!converter)return null;if(!converter.needs_root_buffer)return null;var result;if(converter.scratchRootBuffer){result=converter.scratchRootBuffer;converter.scratchRootBuffer=null}else{result=MONO.mono_wasm_new_root_buffer(converter.steps.length);result.converter=converter}return result},_release_args_root_buffer_from_method_call:function(converter,argsRootBuffer){if(!argsRootBuffer||!converter)return;if(!converter.scratchRootBuffer){argsRootBuffer.clear();converter.scratchRootBuffer=argsRootBuffer}else{argsRootBuffer.release()}},_release_buffer_from_method_call:function(converter,buffer){if(!converter||!buffer)return;if(!converter.scratchBuffer)converter.scratchBuffer=buffer|0;else Module._free(buffer|0)},_convert_exception_for_method_call:function(result,exception){if(exception===0)return null;var msg=this.conv_string(result,false);var err=new Error(msg);return err},_maybe_produce_signature_warning:function(converter){if(converter.has_warned_about_signature)return;console.warn("MONO_WASM: Deprecated raw return value signature: '"+converter.args_marshal+"'. End the signature with '!' instead of 'm'.");converter.has_warned_about_signature=true},_decide_if_result_is_marshaled:function(converter,argc){if(!converter)return true;if(converter.is_result_possibly_unmarshaled&&argc===converter.result_unmarshaled_if_argc){if(argc= ",converter.result_unmarshaled_if_argc,"argument(s) but got",argc,"for signature "+converter.args_marshal].join(" "));this._maybe_produce_signature_warning(converter);return false}else{if(argc0&&Array.isArray(args[0]))args[0]=BINDING.js_array_to_mono_array(args[0],true);let result=BINDING.call_method(method,null,signature,args);return Promise.resolve(result)}catch(error){return Promise.reject(error)}}},call_assembly_entry_point:function(assembly,args,signature){return this.bind_assembly_entry_point(assembly,signature)(...args)},mono_wasm_register_obj:function(obj){var gc_handle=undefined;if(obj!==null&&typeof obj!=="undefined"){gc_handle=obj.__mono_gchandle__;if(typeof gc_handle==="undefined"){var handle=this.mono_wasm_free_list.length?this.mono_wasm_free_list.pop():this.mono_wasm_ref_counter++;obj.__mono_jshandle__=handle;var wasm_type=obj[Symbol.for("wasm type")];obj.__owns_handle__=true;gc_handle=obj.__mono_gchandle__=this.wasm_binding_obj_new(handle+1,obj.__owns_handle__,typeof wasm_type==="undefined"?-1:wasm_type);this.mono_wasm_object_registry[handle]=obj}}return gc_handle},mono_wasm_require_handle:function(handle){if(handle>0)return this.mono_wasm_object_registry[handle-1];return null},mono_wasm_unregister_obj:function(js_id){var obj=this.mono_wasm_object_registry[js_id-1];if(typeof obj!=="undefined"&&obj!==null){if(globalThis===obj)return obj;var gc_handle=obj.__mono_gchandle__;if(typeof gc_handle!=="undefined"){obj.__mono_gchandle__=undefined;obj.__mono_jshandle__=undefined;if(typeof obj.__mono_delegate_alive__!=="undefined")obj.__mono_delegate_alive__=false;this.mono_wasm_object_registry[js_id-1]=undefined;this.mono_wasm_free_list.push(js_id-1)}}return obj},mono_wasm_free_handle:function(handle){this.mono_wasm_unregister_obj(handle)},mono_wasm_free_raw_object:function(js_id){var obj=this.mono_wasm_object_registry[js_id-1];if(typeof obj!=="undefined"&&obj!==null){if(globalThis===obj)return obj;var gc_handle=obj.__mono_gchandle__;if(typeof gc_handle!=="undefined"){obj.__mono_gchandle__=undefined;obj.__mono_jshandle__=undefined;this.mono_wasm_object_registry[js_id-1]=undefined;this.mono_wasm_free_list.push(js_id-1)}}return obj},mono_wasm_parse_args:function(args){var js_args=this.mono_array_to_js_array(args);this.mono_wasm_save_LMF();return js_args},mono_wasm_save_LMF:function(){BINDING.mono_wasm_owned_objects_frames.push(BINDING.mono_wasm_owned_objects_LMF);BINDING.mono_wasm_owned_objects_LMF=undefined},mono_wasm_unwind_LMF:function(){var __owned_objects__=this.mono_wasm_owned_objects_frames.pop();if(typeof __owned_objects__!=="undefined"){var refidx;for(refidx=0;refidx<__owned_objects__.length;refidx++){var ownerRelease=__owned_objects__[refidx];this.call_method(this.safehandle_release_by_handle,null,"i",[ownerRelease])}}},mono_wasm_convert_return_value:function(ret){this.mono_wasm_unwind_LMF();return this.js_to_mono_obj(ret)}};function _mono_wasm_bind_core_object(js_handle,gc_handle,is_exception){BINDING.bindings_lazy_init();var requireObject=BINDING.mono_wasm_require_handle(js_handle);if(!requireObject){setValue(is_exception,1,"i32");return BINDING.js_string_to_mono_string("Invalid JS object handle '"+js_handle+"'")}BINDING.wasm_bind_core_clr_obj(js_handle,gc_handle);requireObject.__mono_gchandle__=gc_handle;requireObject.__js_handle__=js_handle;return gc_handle}function _mono_wasm_bind_host_object(js_handle,gc_handle,is_exception){BINDING.bindings_lazy_init();var requireObject=BINDING.mono_wasm_require_handle(js_handle);if(!requireObject){setValue(is_exception,1,"i32");return BINDING.js_string_to_mono_string("Invalid JS object handle '"+js_handle+"'")}BINDING.wasm_bind_core_clr_obj(js_handle,gc_handle);requireObject.__mono_gchandle__=gc_handle;return gc_handle}function _mono_wasm_fire_bp(){debugger}function _mono_wasm_fire_exception(exception_id,message,class_name,uncaught){MONO.active_exception={exception_id:exception_id,message:Module.UTF8ToString(message),class_name:Module.UTF8ToString(class_name),uncaught:uncaught};debugger}function _mono_wasm_get_by_index(js_handle,property_index,is_exception){BINDING.bindings_lazy_init();var obj=BINDING.mono_wasm_require_handle(js_handle);if(!obj){setValue(is_exception,1,"i32");return BINDING.js_string_to_mono_string("Invalid JS object handle '"+js_handle+"'")}try{var m=obj[property_index];return BINDING.js_to_mono_obj(m)}catch(e){var res=e.toString();setValue(is_exception,1,"i32");if(res===null||typeof res==="undefined")res="unknown exception";return BINDING.js_string_to_mono_string(res)}}function _mono_wasm_get_global_object(global_name,is_exception){BINDING.bindings_lazy_init();var js_name=BINDING.conv_string(global_name,false);var globalObj;if(!js_name){globalObj=globalThis}else{globalObj=globalThis[js_name]}if(globalObj===null||typeof globalObj===undefined){setValue(is_exception,1,"i32");return BINDING.js_string_to_mono_string("Global object '"+js_name+"' not found.")}return BINDING.js_to_mono_obj(globalObj)}function _mono_wasm_get_object_property(js_handle,property_name,is_exception){BINDING.bindings_lazy_init();var obj=BINDING.mono_wasm_require_handle(js_handle);if(!obj){setValue(is_exception,1,"i32");return BINDING.js_string_to_mono_string("Invalid JS object handle '"+js_handle+"'")}var js_name=BINDING.conv_string(property_name,false);if(!js_name){setValue(is_exception,1,"i32");return BINDING.js_string_to_mono_string("Invalid property name object '"+js_name+"'")}var res;try{var m=obj[js_name];if(m===Object(m)&&obj.__is_mono_proxied__)m.__is_mono_proxied__=true;return BINDING.js_to_mono_obj(m)}catch(e){var res=e.toString();setValue(is_exception,1,"i32");if(res===null||typeof res==="undefined")res="unknown exception";return BINDING.js_string_to_mono_string(res)}}var DOTNET={conv_string:function(mono_obj){return MONO.string_decoder.copy(mono_obj)}};function _mono_wasm_invoke_js_blazor(exceptionMessage,callInfo,arg0,arg1,arg2){var mono_string=globalThis._mono_string_cached||(globalThis._mono_string_cached=Module.cwrap("mono_wasm_string_from_js","number",["string"]));try{var blazorExports=globalThis.Blazor;if(!blazorExports){throw new Error("The blazor.webassembly.js library is not loaded.")}return blazorExports._internal.invokeJSFromDotNet(callInfo,arg0,arg1,arg2)}catch(ex){var exceptionJsString=ex.message+"\n"+ex.stack;var exceptionSystemString=mono_string(exceptionJsString);setValue(exceptionMessage,exceptionSystemString,"i32");return 0}}function _mono_wasm_invoke_js_marshalled(exceptionMessage,asyncHandleLongPtr,functionName,argsJson,treatResultAsVoid){var mono_string=globalThis._mono_string_cached||(globalThis._mono_string_cached=Module.cwrap("mono_wasm_string_from_js","number",["string"]));try{var u32Index=asyncHandleLongPtr>>2;var asyncHandleJsNumber=Module.HEAPU32[u32Index+1]*4294967296+Module.HEAPU32[u32Index];var funcNameJsString=DOTNET.conv_string(functionName);var argsJsonJsString=argsJson&&DOTNET.conv_string(argsJson);var dotNetExports=globaThis.DotNet;if(!dotNetExports){throw new Error("The Microsoft.JSInterop.js library is not loaded.")}if(asyncHandleJsNumber){dotNetExports.jsCallDispatcher.beginInvokeJSFromDotNet(asyncHandleJsNumber,funcNameJsString,argsJsonJsString,treatResultAsVoid);return 0}else{var resultJson=dotNetExports.jsCallDispatcher.invokeJSFromDotNet(funcNameJsString,argsJsonJsString,treatResultAsVoid);return resultJson===null?0:mono_string(resultJson)}}catch(ex){var exceptionJsString=ex.message+"\n"+ex.stack;var exceptionSystemString=mono_string(exceptionJsString);setValue(exceptionMessage,exceptionSystemString,"i32");return 0}}function _mono_wasm_invoke_js_unmarshalled(exceptionMessage,funcName,arg0,arg1,arg2){try{var funcNameJsString=DOTNET.conv_string(funcName);var dotNetExports=globalThis.DotNet;if(!dotNetExports){throw new Error("The Microsoft.JSInterop.js library is not loaded.")}var funcInstance=dotNetExports.jsCallDispatcher.findJSFunction(funcNameJsString);return funcInstance.call(null,arg0,arg1,arg2)}catch(ex){var exceptionJsString=ex.message+"\n"+ex.stack;var mono_string=Module.cwrap("mono_wasm_string_from_js","number",["string"]);var exceptionSystemString=mono_string(exceptionJsString);setValue(exceptionMessage,exceptionSystemString,"i32");return 0}}function _mono_wasm_invoke_js_with_args(js_handle,method_name,args,is_exception){BINDING.bindings_lazy_init();var obj=BINDING.get_js_obj(js_handle);if(!obj){setValue(is_exception,1,"i32");return BINDING.js_string_to_mono_string("Invalid JS object handle '"+js_handle+"'")}var js_name=BINDING.conv_string(method_name,false);if(!js_name){setValue(is_exception,1,"i32");return BINDING.js_string_to_mono_string("Invalid method name object '"+method_name+"'")}var js_args=BINDING.mono_wasm_parse_args(args);var res;try{var m=obj[js_name];if(typeof m==="undefined")throw new Error("Method: '"+js_name+"' not found for: '"+Object.prototype.toString.call(obj)+"'");var res=m.apply(obj,js_args);return BINDING.mono_wasm_convert_return_value(res)}catch(e){BINDING.mono_wasm_unwind_LMF();var res=e.toString();setValue(is_exception,1,"i32");if(res===null||res===undefined)res="unknown exception";return BINDING.js_string_to_mono_string(res)}}function _mono_wasm_new(core_name,args,is_exception){BINDING.bindings_lazy_init();var js_name=BINDING.conv_string(core_name,false);if(!js_name){setValue(is_exception,1,"i32");return BINDING.js_string_to_mono_string("Core object '"+js_name+"' not found.")}var coreObj=globalThis[js_name];if(coreObj===null||typeof coreObj==="undefined"){setValue(is_exception,1,"i32");return BINDING.js_string_to_mono_string("JavaScript host object '"+js_name+"' not found.")}var js_args=BINDING.mono_wasm_parse_args(args);try{var allocator=function(constructor,js_args){var argsList=new Array;argsList[0]=constructor;if(js_args)argsList=argsList.concat(js_args);var tempCtor=constructor.bind.apply(constructor,argsList);var obj=new tempCtor;return obj};var res=allocator(coreObj,js_args);var gc_handle=BINDING.mono_wasm_free_list.length?BINDING.mono_wasm_free_list.pop():BINDING.mono_wasm_ref_counter++;BINDING.mono_wasm_object_registry[gc_handle]=res;return BINDING.mono_wasm_convert_return_value(gc_handle+1)}catch(e){var res=e.toString();setValue(is_exception,1,"i32");if(res===null||res===undefined)res="Error allocating object.";return BINDING.js_string_to_mono_string(res)}}function _mono_wasm_release_handle(js_handle,is_exception){BINDING.bindings_lazy_init();BINDING.mono_wasm_free_handle(js_handle)}function _mono_wasm_release_object(js_handle,is_exception){BINDING.bindings_lazy_init();BINDING.mono_wasm_free_raw_object(js_handle)}function _mono_wasm_set_by_index(js_handle,property_index,value,is_exception){BINDING.bindings_lazy_init();var obj=BINDING.mono_wasm_require_handle(js_handle);if(!obj){setValue(is_exception,1,"i32");return BINDING.js_string_to_mono_string("Invalid JS object handle '"+js_handle+"'")}var js_value=BINDING.unbox_mono_obj(value);BINDING.mono_wasm_save_LMF();try{obj[property_index]=js_value;BINDING.mono_wasm_unwind_LMF();return true}catch(e){var res=e.toString();setValue(is_exception,1,"i32");if(res===null||typeof res==="undefined")res="unknown exception";return BINDING.js_string_to_mono_string(res)}}function _mono_wasm_set_is_async_method(objectId){MONO._async_method_objectId=objectId}function _mono_wasm_set_object_property(js_handle,property_name,value,createIfNotExist,hasOwnProperty,is_exception){BINDING.bindings_lazy_init();var requireObject=BINDING.mono_wasm_require_handle(js_handle);if(!requireObject){setValue(is_exception,1,"i32");return BINDING.js_string_to_mono_string("Invalid JS object handle '"+js_handle+"'")}var property=BINDING.conv_string(property_name,false);if(!property){setValue(is_exception,1,"i32");return BINDING.js_string_to_mono_string("Invalid property name object '"+property_name+"'")}var result=false;var js_value=BINDING.unbox_mono_obj(value);BINDING.mono_wasm_save_LMF();if(createIfNotExist){requireObject[property]=js_value;result=true}else{result=false;if(!createIfNotExist){if(!requireObject.hasOwnProperty(property))return false}if(hasOwnProperty===true){if(requireObject.hasOwnProperty(property)){requireObject[property]=js_value;result=true}}else{requireObject[property]=js_value;result=true}}BINDING.mono_wasm_unwind_LMF();return BINDING._box_js_bool(result)}function _mono_wasm_typed_array_copy_from(js_handle,pinned_array,begin,end,bytes_per_element,is_exception){BINDING.bindings_lazy_init();var requireObject=BINDING.mono_wasm_require_handle(js_handle);if(!requireObject){setValue(is_exception,1,"i32");return BINDING.js_string_to_mono_string("Invalid JS object handle '"+js_handle+"'")}var res=BINDING.typedarray_copy_from(requireObject,pinned_array,begin,end,bytes_per_element);return BINDING.js_to_mono_obj(res)}function _mono_wasm_typed_array_copy_to(js_handle,pinned_array,begin,end,bytes_per_element,is_exception){BINDING.bindings_lazy_init();var requireObject=BINDING.mono_wasm_require_handle(js_handle);if(!requireObject){setValue(is_exception,1,"i32");return BINDING.js_string_to_mono_string("Invalid JS object handle '"+js_handle+"'")}var res=BINDING.typedarray_copy_to(requireObject,pinned_array,begin,end,bytes_per_element);return BINDING.js_to_mono_obj(res)}function _mono_wasm_typed_array_from(pinned_array,begin,end,bytes_per_element,type,is_exception){BINDING.bindings_lazy_init();var res=BINDING.typed_array_from(pinned_array,begin,end,bytes_per_element,type);return BINDING.js_to_mono_obj(res)}function _mono_wasm_typed_array_to_array(js_handle,is_exception){BINDING.bindings_lazy_init();var requireObject=BINDING.mono_wasm_require_handle(js_handle);if(!requireObject){setValue(is_exception,1,"i32");return BINDING.js_string_to_mono_string("Invalid JS object handle '"+js_handle+"'")}return BINDING.js_typed_array_to_array(requireObject)}function _schedule_background_exec(){++MONO.pump_count;if(typeof globalThis.setTimeout==="function"){globalThis.setTimeout(MONO.pump_message,0)}}function __isLeapYear(year){return year%4===0&&(year%100!==0||year%400===0)}function __arraySum(array,index){var sum=0;for(var i=0;i<=index;sum+=array[i++]){}return sum}var __MONTH_DAYS_LEAP=[31,29,31,30,31,30,31,31,30,31,30,31];var __MONTH_DAYS_REGULAR=[31,28,31,30,31,30,31,31,30,31,30,31];function __addDays(date,days){var newDate=new Date(date.getTime());while(days>0){var leap=__isLeapYear(newDate.getFullYear());var currentMonth=newDate.getMonth();var daysInCurrentMonth=(leap?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR)[currentMonth];if(days>daysInCurrentMonth-newDate.getDate()){days-=daysInCurrentMonth-newDate.getDate()+1;newDate.setDate(1);if(currentMonth<11){newDate.setMonth(currentMonth+1)}else{newDate.setMonth(0);newDate.setFullYear(newDate.getFullYear()+1)}}else{newDate.setDate(newDate.getDate()+days);return newDate}}return newDate}function _strftime(s,maxsize,format,tm){var tm_zone=HEAP32[tm+40>>2];var date={tm_sec:HEAP32[tm>>2],tm_min:HEAP32[tm+4>>2],tm_hour:HEAP32[tm+8>>2],tm_mday:HEAP32[tm+12>>2],tm_mon:HEAP32[tm+16>>2],tm_year:HEAP32[tm+20>>2],tm_wday:HEAP32[tm+24>>2],tm_yday:HEAP32[tm+28>>2],tm_isdst:HEAP32[tm+32>>2],tm_gmtoff:HEAP32[tm+36>>2],tm_zone:tm_zone?UTF8ToString(tm_zone):""};var pattern=UTF8ToString(format);var EXPANSION_RULES_1={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};for(var rule in EXPANSION_RULES_1){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_1[rule])}var WEEKDAYS=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];var MONTHS=["January","February","March","April","May","June","July","August","September","October","November","December"];function leadingSomething(value,digits,character){var str=typeof value==="number"?value.toString():value||"";while(str.length0?1:0}var compare;if((compare=sgn(date1.getFullYear()-date2.getFullYear()))===0){if((compare=sgn(date1.getMonth()-date2.getMonth()))===0){compare=sgn(date1.getDate()-date2.getDate())}}return compare}function getFirstWeekStartDate(janFourth){switch(janFourth.getDay()){case 0:return new Date(janFourth.getFullYear()-1,11,29);case 1:return janFourth;case 2:return new Date(janFourth.getFullYear(),0,3);case 3:return new Date(janFourth.getFullYear(),0,2);case 4:return new Date(janFourth.getFullYear(),0,1);case 5:return new Date(janFourth.getFullYear()-1,11,31);case 6:return new Date(janFourth.getFullYear()-1,11,30)}}function getWeekBasedYear(date){var thisDate=__addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);var janFourthThisYear=new Date(thisDate.getFullYear(),0,4);var janFourthNextYear=new Date(thisDate.getFullYear()+1,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);if(compareByDay(firstWeekStartThisYear,thisDate)<=0){if(compareByDay(firstWeekStartNextYear,thisDate)<=0){return thisDate.getFullYear()+1}else{return thisDate.getFullYear()}}else{return thisDate.getFullYear()-1}}var EXPANSION_RULES_2={"%a":function(date){return WEEKDAYS[date.tm_wday].substring(0,3)},"%A":function(date){return WEEKDAYS[date.tm_wday]},"%b":function(date){return MONTHS[date.tm_mon].substring(0,3)},"%B":function(date){return MONTHS[date.tm_mon]},"%C":function(date){var year=date.tm_year+1900;return leadingNulls(year/100|0,2)},"%d":function(date){return leadingNulls(date.tm_mday,2)},"%e":function(date){return leadingSomething(date.tm_mday,2," ")},"%g":function(date){return getWeekBasedYear(date).toString().substring(2)},"%G":function(date){return getWeekBasedYear(date)},"%H":function(date){return leadingNulls(date.tm_hour,2)},"%I":function(date){var twelveHour=date.tm_hour;if(twelveHour==0)twelveHour=12;else if(twelveHour>12)twelveHour-=12;return leadingNulls(twelveHour,2)},"%j":function(date){return leadingNulls(date.tm_mday+__arraySum(__isLeapYear(date.tm_year+1900)?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,date.tm_mon-1),3)},"%m":function(date){return leadingNulls(date.tm_mon+1,2)},"%M":function(date){return leadingNulls(date.tm_min,2)},"%n":function(){return"\n"},"%p":function(date){if(date.tm_hour>=0&&date.tm_hour<12){return"AM"}else{return"PM"}},"%S":function(date){return leadingNulls(date.tm_sec,2)},"%t":function(){return"\t"},"%u":function(date){return date.tm_wday||7},"%U":function(date){var janFirst=new Date(date.tm_year+1900,0,1);var firstSunday=janFirst.getDay()===0?janFirst:__addDays(janFirst,7-janFirst.getDay());var endDate=new Date(date.tm_year+1900,date.tm_mon,date.tm_mday);if(compareByDay(firstSunday,endDate)<0){var februaryFirstUntilEndMonth=__arraySum(__isLeapYear(endDate.getFullYear())?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,endDate.getMonth()-1)-31;var firstSundayUntilEndJanuary=31-firstSunday.getDate();var days=firstSundayUntilEndJanuary+februaryFirstUntilEndMonth+endDate.getDate();return leadingNulls(Math.ceil(days/7),2)}return compareByDay(firstSunday,janFirst)===0?"01":"00"},"%V":function(date){var janFourthThisYear=new Date(date.tm_year+1900,0,4);var janFourthNextYear=new Date(date.tm_year+1901,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);var endDate=__addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);if(compareByDay(endDate,firstWeekStartThisYear)<0){return"53"}if(compareByDay(firstWeekStartNextYear,endDate)<=0){return"01"}var daysDifference;if(firstWeekStartThisYear.getFullYear()=0;off=Math.abs(off)/60;off=off/60*100+off%60;return(ahead?"+":"-")+String("0000"+off).slice(-4)},"%Z":function(date){return date.tm_zone},"%%":function(){return"%"}};for(var rule in EXPANSION_RULES_2){if(pattern.indexOf(rule)>=0){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_2[rule](date))}}var bytes=intArrayFromString(pattern,false);if(bytes.length>maxsize){return 0}writeArrayToMemory(bytes,s);return bytes.length-1}function _sysconf(name){switch(name){case 30:return 16384;case 85:var maxHeapSize=2147483648;return maxHeapSize/16384;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:return 200809;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:case 80:case 81:case 79:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32;case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1e3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:{if(typeof navigator==="object")return navigator["hardwareConcurrency"]||1;return 1}}setErrNo(28);return-1}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}var readAsmConstArgsArray=[];function readAsmConstArgs(sigPtr,buf){readAsmConstArgsArray.length=0;var ch;buf>>=2;while(ch=HEAPU8[sigPtr++]){var double=ch<105;if(double&&buf&1)buf++;readAsmConstArgsArray.push(double?HEAPF64[buf++>>1]:HEAP32[buf]);++buf}return readAsmConstArgsArray}var FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};var readMode=292|73;var writeMode=146;Object.defineProperties(FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}});FS.FSNode=FSNode;FS.staticInit();Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;MONO.export_functions(Module);BINDING.export_functions(Module);function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmLibraryArg={"q":___assert_fail,"Ra":___clock_gettime,"Qa":___cxa_allocate_exception,"Pa":___cxa_begin_catch,"Oa":___cxa_end_catch,"Na":___cxa_find_matching_catch_3,"Ma":___cxa_throw,"La":___resumeException,"xa":___sys_access,"Ja":___sys_chdir,"x":___sys_chmod,"Aa":___sys_fadvise64_64,"ya":___sys_fallocate,"oa":___sys_fchmod,"d":___sys_fcntl64,"Da":___sys_fstat64,"Fa":___sys_ftruncate64,"Ha":___sys_getcwd,"Ba":___sys_getdents64,"j":___sys_getpid,"sa":___sys_getrusage,"ta":___sys_ioctl,"qa":___sys_link,"Ea":___sys_lstat64,"Ca":___sys_madvise1,"va":___sys_mkdir,"Ga":___sys_mmap2,"Ia":___sys_msync,"pa":___sys_munmap,"v":___sys_open,"ra":___sys_readlink,"wa":___sys_rename,"ua":___sys_rmdir,"m":___sys_socketcall,"w":___sys_stat64,"Ka":___sys_unlink,"za":___sys_utimensat,"a":_abort,"ja":_clock_getres,"h":_clock_gettime,"ia":compile_function,"t":_dotnet_browser_entropy,"f":_emscripten_asm_const_int,"ha":_emscripten_memcpy_big,"ga":_emscripten_resize_heap,"fa":_emscripten_thread_sleep,"na":_environ_get,"ma":_environ_sizes_get,"c":_exit,"i":_fd_close,"la":_fd_fdstat_get,"u":_fd_read,"$":_fd_seek,"ka":_fd_sync,"p":_fd_write,"ea":_flock,"da":_gai_strerror,"ca":_getTempRet0,"e":_gettimeofday,"ba":_gmtime_r,"aa":invoke_vi,"W":_llvm_eh_typeid_for,"l":_localtime_r,"V":_mono_set_timeout,"U":_mono_wasm_add_array_item,"_":_mono_wasm_add_enum_var,"T":_mono_wasm_add_frame,"Z":_mono_wasm_add_func_var,"Y":_mono_wasm_add_obj_var,"k":_mono_wasm_add_properties_var,"b":_mono_wasm_add_typed_value,"s":_mono_wasm_asm_loaded,"S":_mono_wasm_bind_core_object,"R":_mono_wasm_bind_host_object,"r":_mono_wasm_fire_bp,"Q":_mono_wasm_fire_exception,"P":_mono_wasm_get_by_index,"O":_mono_wasm_get_global_object,"N":_mono_wasm_get_object_property,"M":_mono_wasm_invoke_js_blazor,"L":_mono_wasm_invoke_js_marshalled,"K":_mono_wasm_invoke_js_unmarshalled,"J":_mono_wasm_invoke_js_with_args,"I":_mono_wasm_new,"H":_mono_wasm_release_handle,"G":_mono_wasm_release_object,"F":_mono_wasm_set_by_index,"X":_mono_wasm_set_is_async_method,"E":_mono_wasm_set_object_property,"D":_mono_wasm_typed_array_copy_from,"C":_mono_wasm_typed_array_copy_to,"B":_mono_wasm_typed_array_from,"A":_mono_wasm_typed_array_to_array,"z":_schedule_background_exec,"o":_strftime,"g":_sysconf,"n":_time,"y":_tzset};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["Ua"]).apply(null,arguments)};var _mono_wasm_register_root=Module["_mono_wasm_register_root"]=function(){return(_mono_wasm_register_root=Module["_mono_wasm_register_root"]=Module["asm"]["Va"]).apply(null,arguments)};var _mono_wasm_deregister_root=Module["_mono_wasm_deregister_root"]=function(){return(_mono_wasm_deregister_root=Module["_mono_wasm_deregister_root"]=Module["asm"]["Wa"]).apply(null,arguments)};var _mono_wasm_add_assembly=Module["_mono_wasm_add_assembly"]=function(){return(_mono_wasm_add_assembly=Module["_mono_wasm_add_assembly"]=Module["asm"]["Xa"]).apply(null,arguments)};var _mono_wasm_add_satellite_assembly=Module["_mono_wasm_add_satellite_assembly"]=function(){return(_mono_wasm_add_satellite_assembly=Module["_mono_wasm_add_satellite_assembly"]=Module["asm"]["Ya"]).apply(null,arguments)};var _mono_wasm_setenv=Module["_mono_wasm_setenv"]=function(){return(_mono_wasm_setenv=Module["_mono_wasm_setenv"]=Module["asm"]["Za"]).apply(null,arguments)};var _mono_wasm_register_bundled_satellite_assemblies=Module["_mono_wasm_register_bundled_satellite_assemblies"]=function(){return(_mono_wasm_register_bundled_satellite_assemblies=Module["_mono_wasm_register_bundled_satellite_assemblies"]=Module["asm"]["_a"]).apply(null,arguments)};var _mono_wasm_load_runtime=Module["_mono_wasm_load_runtime"]=function(){return(_mono_wasm_load_runtime=Module["_mono_wasm_load_runtime"]=Module["asm"]["$a"]).apply(null,arguments)};var _mono_wasm_assembly_load=Module["_mono_wasm_assembly_load"]=function(){return(_mono_wasm_assembly_load=Module["_mono_wasm_assembly_load"]=Module["asm"]["ab"]).apply(null,arguments)};var _mono_wasm_find_corlib_class=Module["_mono_wasm_find_corlib_class"]=function(){return(_mono_wasm_find_corlib_class=Module["_mono_wasm_find_corlib_class"]=Module["asm"]["bb"]).apply(null,arguments)};var _mono_wasm_assembly_find_class=Module["_mono_wasm_assembly_find_class"]=function(){return(_mono_wasm_assembly_find_class=Module["_mono_wasm_assembly_find_class"]=Module["asm"]["cb"]).apply(null,arguments)};var _mono_wasm_assembly_find_method=Module["_mono_wasm_assembly_find_method"]=function(){return(_mono_wasm_assembly_find_method=Module["_mono_wasm_assembly_find_method"]=Module["asm"]["db"]).apply(null,arguments)};var _mono_wasm_get_delegate_invoke=Module["_mono_wasm_get_delegate_invoke"]=function(){return(_mono_wasm_get_delegate_invoke=Module["_mono_wasm_get_delegate_invoke"]=Module["asm"]["eb"]).apply(null,arguments)};var _mono_wasm_box_primitive=Module["_mono_wasm_box_primitive"]=function(){return(_mono_wasm_box_primitive=Module["_mono_wasm_box_primitive"]=Module["asm"]["fb"]).apply(null,arguments)};var _mono_wasm_invoke_method=Module["_mono_wasm_invoke_method"]=function(){return(_mono_wasm_invoke_method=Module["_mono_wasm_invoke_method"]=Module["asm"]["gb"]).apply(null,arguments)};var _mono_wasm_assembly_get_entry_point=Module["_mono_wasm_assembly_get_entry_point"]=function(){return(_mono_wasm_assembly_get_entry_point=Module["_mono_wasm_assembly_get_entry_point"]=Module["asm"]["hb"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["ib"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["jb"]).apply(null,arguments)};var _mono_wasm_string_get_utf8=Module["_mono_wasm_string_get_utf8"]=function(){return(_mono_wasm_string_get_utf8=Module["_mono_wasm_string_get_utf8"]=Module["asm"]["kb"]).apply(null,arguments)};var _mono_wasm_string_convert=Module["_mono_wasm_string_convert"]=function(){return(_mono_wasm_string_convert=Module["_mono_wasm_string_convert"]=Module["asm"]["lb"]).apply(null,arguments)};var _mono_wasm_string_from_js=Module["_mono_wasm_string_from_js"]=function(){return(_mono_wasm_string_from_js=Module["_mono_wasm_string_from_js"]=Module["asm"]["mb"]).apply(null,arguments)};var _mono_wasm_string_from_utf16=Module["_mono_wasm_string_from_utf16"]=function(){return(_mono_wasm_string_from_utf16=Module["_mono_wasm_string_from_utf16"]=Module["asm"]["nb"]).apply(null,arguments)};var _mono_wasm_get_obj_type=Module["_mono_wasm_get_obj_type"]=function(){return(_mono_wasm_get_obj_type=Module["_mono_wasm_get_obj_type"]=Module["asm"]["ob"]).apply(null,arguments)};var _mono_wasm_try_unbox_primitive_and_get_type=Module["_mono_wasm_try_unbox_primitive_and_get_type"]=function(){return(_mono_wasm_try_unbox_primitive_and_get_type=Module["_mono_wasm_try_unbox_primitive_and_get_type"]=Module["asm"]["pb"]).apply(null,arguments)};var _mono_unbox_int=Module["_mono_unbox_int"]=function(){return(_mono_unbox_int=Module["_mono_unbox_int"]=Module["asm"]["qb"]).apply(null,arguments)};var _mono_wasm_array_length=Module["_mono_wasm_array_length"]=function(){return(_mono_wasm_array_length=Module["_mono_wasm_array_length"]=Module["asm"]["rb"]).apply(null,arguments)};var _mono_wasm_array_get=Module["_mono_wasm_array_get"]=function(){return(_mono_wasm_array_get=Module["_mono_wasm_array_get"]=Module["asm"]["sb"]).apply(null,arguments)};var _mono_wasm_obj_array_new=Module["_mono_wasm_obj_array_new"]=function(){return(_mono_wasm_obj_array_new=Module["_mono_wasm_obj_array_new"]=Module["asm"]["tb"]).apply(null,arguments)};var _mono_wasm_obj_array_set=Module["_mono_wasm_obj_array_set"]=function(){return(_mono_wasm_obj_array_set=Module["_mono_wasm_obj_array_set"]=Module["asm"]["ub"]).apply(null,arguments)};var _mono_wasm_string_array_new=Module["_mono_wasm_string_array_new"]=function(){return(_mono_wasm_string_array_new=Module["_mono_wasm_string_array_new"]=Module["asm"]["vb"]).apply(null,arguments)};var _mono_wasm_exec_regression=Module["_mono_wasm_exec_regression"]=function(){return(_mono_wasm_exec_regression=Module["_mono_wasm_exec_regression"]=Module["asm"]["wb"]).apply(null,arguments)};var _mono_wasm_exit=Module["_mono_wasm_exit"]=function(){return(_mono_wasm_exit=Module["_mono_wasm_exit"]=Module["asm"]["xb"]).apply(null,arguments)};var _mono_wasm_set_main_args=Module["_mono_wasm_set_main_args"]=function(){return(_mono_wasm_set_main_args=Module["_mono_wasm_set_main_args"]=Module["asm"]["yb"]).apply(null,arguments)};var _mono_wasm_strdup=Module["_mono_wasm_strdup"]=function(){return(_mono_wasm_strdup=Module["_mono_wasm_strdup"]=Module["asm"]["zb"]).apply(null,arguments)};var _mono_wasm_parse_runtime_options=Module["_mono_wasm_parse_runtime_options"]=function(){return(_mono_wasm_parse_runtime_options=Module["_mono_wasm_parse_runtime_options"]=Module["asm"]["Ab"]).apply(null,arguments)};var _mono_wasm_enable_on_demand_gc=Module["_mono_wasm_enable_on_demand_gc"]=function(){return(_mono_wasm_enable_on_demand_gc=Module["_mono_wasm_enable_on_demand_gc"]=Module["asm"]["Bb"]).apply(null,arguments)};var _mono_wasm_intern_string=Module["_mono_wasm_intern_string"]=function(){return(_mono_wasm_intern_string=Module["_mono_wasm_intern_string"]=Module["asm"]["Cb"]).apply(null,arguments)};var _mono_wasm_typed_array_new=Module["_mono_wasm_typed_array_new"]=function(){return(_mono_wasm_typed_array_new=Module["_mono_wasm_typed_array_new"]=Module["asm"]["Db"]).apply(null,arguments)};var _mono_wasm_unbox_enum=Module["_mono_wasm_unbox_enum"]=function(){return(_mono_wasm_unbox_enum=Module["_mono_wasm_unbox_enum"]=Module["asm"]["Eb"]).apply(null,arguments)};var _memset=Module["_memset"]=function(){return(_memset=Module["_memset"]=Module["asm"]["Fb"]).apply(null,arguments)};var ___errno_location=Module["___errno_location"]=function(){return(___errno_location=Module["___errno_location"]=Module["asm"]["Gb"]).apply(null,arguments)};var _putchar=Module["_putchar"]=function(){return(_putchar=Module["_putchar"]=Module["asm"]["Hb"]).apply(null,arguments)};var _mono_background_exec=Module["_mono_background_exec"]=function(){return(_mono_background_exec=Module["_mono_background_exec"]=Module["asm"]["Ib"]).apply(null,arguments)};var _mono_wasm_get_icudt_name=Module["_mono_wasm_get_icudt_name"]=function(){return(_mono_wasm_get_icudt_name=Module["_mono_wasm_get_icudt_name"]=Module["asm"]["Jb"]).apply(null,arguments)};var _mono_wasm_load_icu_data=Module["_mono_wasm_load_icu_data"]=function(){return(_mono_wasm_load_icu_data=Module["_mono_wasm_load_icu_data"]=Module["asm"]["Kb"]).apply(null,arguments)};var _mono_print_method_from_ip=Module["_mono_print_method_from_ip"]=function(){return(_mono_print_method_from_ip=Module["_mono_print_method_from_ip"]=Module["asm"]["Lb"]).apply(null,arguments)};var _mono_set_timeout_exec=Module["_mono_set_timeout_exec"]=function(){return(_mono_set_timeout_exec=Module["_mono_set_timeout_exec"]=Module["asm"]["Mb"]).apply(null,arguments)};var _mono_wasm_pause_on_exceptions=Module["_mono_wasm_pause_on_exceptions"]=function(){return(_mono_wasm_pause_on_exceptions=Module["_mono_wasm_pause_on_exceptions"]=Module["asm"]["Nb"]).apply(null,arguments)};var _mono_wasm_setup_single_step=Module["_mono_wasm_setup_single_step"]=function(){return(_mono_wasm_setup_single_step=Module["_mono_wasm_setup_single_step"]=Module["asm"]["Ob"]).apply(null,arguments)};var _mono_wasm_clear_all_breakpoints=Module["_mono_wasm_clear_all_breakpoints"]=function(){return(_mono_wasm_clear_all_breakpoints=Module["_mono_wasm_clear_all_breakpoints"]=Module["asm"]["Pb"]).apply(null,arguments)};var _mono_wasm_set_breakpoint=Module["_mono_wasm_set_breakpoint"]=function(){return(_mono_wasm_set_breakpoint=Module["_mono_wasm_set_breakpoint"]=Module["asm"]["Qb"]).apply(null,arguments)};var _mono_wasm_remove_breakpoint=Module["_mono_wasm_remove_breakpoint"]=function(){return(_mono_wasm_remove_breakpoint=Module["_mono_wasm_remove_breakpoint"]=Module["asm"]["Rb"]).apply(null,arguments)};var _mono_wasm_current_bp_id=Module["_mono_wasm_current_bp_id"]=function(){return(_mono_wasm_current_bp_id=Module["_mono_wasm_current_bp_id"]=Module["asm"]["Sb"]).apply(null,arguments)};var _mono_wasm_enum_frames=Module["_mono_wasm_enum_frames"]=function(){return(_mono_wasm_enum_frames=Module["_mono_wasm_enum_frames"]=Module["asm"]["Tb"]).apply(null,arguments)};var _mono_wasm_set_variable_on_frame=Module["_mono_wasm_set_variable_on_frame"]=function(){return(_mono_wasm_set_variable_on_frame=Module["_mono_wasm_set_variable_on_frame"]=Module["asm"]["Ub"]).apply(null,arguments)};var _mono_wasm_get_deref_ptr_value=Module["_mono_wasm_get_deref_ptr_value"]=function(){return(_mono_wasm_get_deref_ptr_value=Module["_mono_wasm_get_deref_ptr_value"]=Module["asm"]["Vb"]).apply(null,arguments)};var _mono_wasm_get_local_vars=Module["_mono_wasm_get_local_vars"]=function(){return(_mono_wasm_get_local_vars=Module["_mono_wasm_get_local_vars"]=Module["asm"]["Wb"]).apply(null,arguments)};var _mono_wasm_get_object_properties=Module["_mono_wasm_get_object_properties"]=function(){return(_mono_wasm_get_object_properties=Module["_mono_wasm_get_object_properties"]=Module["asm"]["Xb"]).apply(null,arguments)};var _mono_wasm_get_array_values=Module["_mono_wasm_get_array_values"]=function(){return(_mono_wasm_get_array_values=Module["_mono_wasm_get_array_values"]=Module["asm"]["Yb"]).apply(null,arguments)};var _mono_wasm_invoke_getter_on_object=Module["_mono_wasm_invoke_getter_on_object"]=function(){return(_mono_wasm_invoke_getter_on_object=Module["_mono_wasm_invoke_getter_on_object"]=Module["asm"]["Zb"]).apply(null,arguments)};var _mono_wasm_set_value_on_object=Module["_mono_wasm_set_value_on_object"]=function(){return(_mono_wasm_set_value_on_object=Module["_mono_wasm_set_value_on_object"]=Module["asm"]["_b"]).apply(null,arguments)};var _mono_wasm_invoke_getter_on_value=Module["_mono_wasm_invoke_getter_on_value"]=function(){return(_mono_wasm_invoke_getter_on_value=Module["_mono_wasm_invoke_getter_on_value"]=Module["asm"]["$b"]).apply(null,arguments)};var _mono_wasm_set_is_debugger_attached=Module["_mono_wasm_set_is_debugger_attached"]=function(){return(_mono_wasm_set_is_debugger_attached=Module["_mono_wasm_set_is_debugger_attached"]=Module["asm"]["ac"]).apply(null,arguments)};var _ntohs=Module["_ntohs"]=function(){return(_ntohs=Module["_ntohs"]=Module["asm"]["bc"]).apply(null,arguments)};var _htons=Module["_htons"]=function(){return(_htons=Module["_htons"]=Module["asm"]["cc"]).apply(null,arguments)};var __get_tzname=Module["__get_tzname"]=function(){return(__get_tzname=Module["__get_tzname"]=Module["asm"]["dc"]).apply(null,arguments)};var __get_daylight=Module["__get_daylight"]=function(){return(__get_daylight=Module["__get_daylight"]=Module["asm"]["ec"]).apply(null,arguments)};var __get_timezone=Module["__get_timezone"]=function(){return(__get_timezone=Module["__get_timezone"]=Module["asm"]["fc"]).apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return(stackSave=Module["stackSave"]=Module["asm"]["gc"]).apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return(stackRestore=Module["stackRestore"]=Module["asm"]["hc"]).apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return(stackAlloc=Module["stackAlloc"]=Module["asm"]["ic"]).apply(null,arguments)};var _setThrew=Module["_setThrew"]=function(){return(_setThrew=Module["_setThrew"]=Module["asm"]["jc"]).apply(null,arguments)};var _memalign=Module["_memalign"]=function(){return(_memalign=Module["_memalign"]=Module["asm"]["kc"]).apply(null,arguments)};function invoke_vi(index,a1){var sp=stackSave();try{wasmTable.get(index)(a1)}catch(e){stackRestore(sp);if(e!==e+0&&e!=="longjmp")throw e;_setThrew(1,0)}}Module["ccall"]=ccall;Module["cwrap"]=cwrap;Module["setValue"]=setValue;Module["getValue"]=getValue;Module["UTF8ArrayToString"]=UTF8ArrayToString;Module["UTF8ToString"]=UTF8ToString;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;Module["addFunction"]=addFunction;var calledRun;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0)return;function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&noExitRuntime&&status===0){return}if(noExitRuntime){}else{EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status);ABORT=true}quit_(status,new ExitStatus(status))}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}noExitRuntime=true;run(); - -// SIG // Begin signature block -// SIG // MIIkiQYJKoZIhvcNAQcCoIIkejCCJHYCAQExDzANBglg -// SIG // hkgBZQMEAgEFADB3BgorBgEEAYI3AgEEoGkwZzAyBgor -// SIG // BgEEAYI3AgEeMCQCAQEEEBDgyQbOONQRoqMAEEvTUJAC -// SIG // AQACAQACAQACAQACAQAwMTANBglghkgBZQMEAgEFAAQg -// SIG // PLeKwAgCwe2CPN782zkeEf0KfzZbJmCrLpS8iENFFtWg -// SIG // gg3wMIIGbjCCBFagAwIBAgITMwAAAhOMDBwxNbzSXwAA -// SIG // AAACEzANBgkqhkiG9w0BAQwFADB+MQswCQYDVQQGEwJV -// SIG // UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH -// SIG // UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv -// SIG // cmF0aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQgQ29kZSBT -// SIG // aWduaW5nIFBDQSAyMDExMB4XDTIxMDIxMTIwMDk1MVoX -// SIG // DTIyMDIxMDIwMDk1MVowYzELMAkGA1UEBhMCVVMxEzAR -// SIG // BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1v -// SIG // bmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv -// SIG // bjENMAsGA1UEAxMELk5FVDCCAaIwDQYJKoZIhvcNAQEB -// SIG // BQADggGPADCCAYoCggGBAJtZcELdrGHlHCF6nz4bH8vW -// SIG // l5M3GfXIf7JY7OovRwgweTptJQGby0YHZ+iCrWIE7fTc -// SIG // /c9eGKGm+EsuWHnanAm9Ro7MSjdPsYBRaif1Y6dyhBcb -// SIG // b44guUNKlplq7L1k3ldXFFzyAt+u8UzCL5QFwibg2nWi -// SIG // QmCkoJWhiA6RxEPgEZ/ss2ICppgLHm1o6vy1P4ci6aMk -// SIG // Tj2s1uct/oFflYwE0DsK1OrFH7QvoIqWCAuXUXjZOKnF -// SIG // oRia22+ci2oxs/LVkgqcMwC35KHvUBzCW3LME/dSBWCO -// SIG // TV7gieG+gUtxBgPpzomak4thtrQLMRAWl7AOtI7QvsXa -// SIG // FEyQpAlDVz12Sa89KJOLBPksBRDw4woRZLlHnUrtxFRp -// SIG // MZsr+9cf2zfZPG4ia2iDSBFfXu2BeXrifkT4c/UV5Iy3 -// SIG // qEHCzh1jLmN701jUOhF1QN1LEPn+TCth2b239/34+Bym -// SIG // cIAcDP1EWk8JodsUDedKhK+lAefNL0mzUrIQc6Dxb5cq -// SIG // may/QQIDAQABo4IBfjCCAXowHwYDVR0lBBgwFgYKKwYB -// SIG // BAGCN0wIAQYIKwYBBQUHAwMwHQYDVR0OBBYEFO9NaSC3 -// SIG // 3IwsQ0OKpWHnclste605MFAGA1UdEQRJMEekRTBDMSkw -// SIG // JwYDVQQLEyBNaWNyb3NvZnQgT3BlcmF0aW9ucyBQdWVy -// SIG // dG8gUmljbzEWMBQGA1UEBRMNNDY0MjIzKzQ2NDI5MzAf -// SIG // BgNVHSMEGDAWgBRIbmTlUAXTgqoXNzcitW2oynUClTBU -// SIG // BgNVHR8ETTBLMEmgR6BFhkNodHRwOi8vd3d3Lm1pY3Jv -// SIG // c29mdC5jb20vcGtpb3BzL2NybC9NaWNDb2RTaWdQQ0Ey -// SIG // MDExXzIwMTEtMDctMDguY3JsMGEGCCsGAQUFBwEBBFUw -// SIG // UzBRBggrBgEFBQcwAoZFaHR0cDovL3d3dy5taWNyb3Nv -// SIG // ZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNDb2RTaWdQQ0Ey -// SIG // MDExXzIwMTEtMDctMDguY3J0MAwGA1UdEwEB/wQCMAAw -// SIG // DQYJKoZIhvcNAQEMBQADggIBAFiD+cR0K6evMUeUrBMA -// SIG // pLljV65GDDTzlD4jqr6Mu1NTeZv5L9IJlR6DLAEKaJnB -// SIG // a7fZZ/ME/FZasmc40+WijhDmth/OOc7IpfJ3Ra1auKIA -// SIG // g687mo/eWiPs0nC42oCdchy9Q5AS7K0+MUk7R/p9eCTP -// SIG // NYFjSMItiL+YFYCxaZXqHizwdXcvCIrESq4DXwN+ZdUe -// SIG // GBEO9F2SkMVC61/y2xwSwRWmfO/l4YutKT+dSKjlelYi -// SIG // zFAQaJrGzO5ac56S+K/NMndPL7Od3ohqxMu7gsFUynxY -// SIG // l+eyB9T9I9HrUWoHj6ce4nzOxHC+yDRD6Mi2AaT+IbMO -// SIG // cGvWeJC5iX3tzpMqdz0BOMl6jbff+t+BLS7VtU6JAFCM -// SIG // fk5h+wqIPWjon3tpTuFtCkMOSzIoso3U6kdX0fgrgXnN -// SIG // KJspBXkfKG9lMPOPOKwzua1qjghvgzPMftj1yZqFljJm -// SIG // cjBxs/HKA8J8st1MKcgiBGDX5zkcsHYGuAkIb2fXQuYW -// SIG // y0G78JzzSv1u0LAFj8/Qtx9Hm2wfc20+ww+MYEQ9tu1F -// SIG // uJZK2O7+p7iVziwZvo+XVzuIU7sVjcmJH5Gn/ttfkLQ3 -// SIG // 0jvM9QyV/lYwurg4Gn5Li/IZSN56WGIPilRkXUVurpaV -// SIG // WeYCjeUJzMY2n2tVMFl6pgnGmaA2a0uiG3z0GpMPdbS1 -// SIG // R/oEMIIHejCCBWKgAwIBAgIKYQ6Q0gAAAAAAAzANBgkq -// SIG // hkiG9w0BAQsFADCBiDELMAkGA1UEBhMCVVMxEzARBgNV -// SIG // BAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx -// SIG // HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEy -// SIG // MDAGA1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNh -// SIG // dGUgQXV0aG9yaXR5IDIwMTEwHhcNMTEwNzA4MjA1OTA5 -// SIG // WhcNMjYwNzA4MjEwOTA5WjB+MQswCQYDVQQGEwJVUzET -// SIG // MBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVk -// SIG // bW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0 -// SIG // aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQgQ29kZSBTaWdu -// SIG // aW5nIFBDQSAyMDExMIICIjANBgkqhkiG9w0BAQEFAAOC -// SIG // Ag8AMIICCgKCAgEAq/D6chAcLq3YbqqCEE00uvK2WCGf -// SIG // Qhsqa+laUKq4BjgaBEm6f8MMHt03a8YS2AvwOMKZBrDI -// SIG // OdUBFDFC04kNeWSHfpRgJGyvnkmc6Whe0t+bU7IKLMOv -// SIG // 2akrrnoJr9eWWcpgGgXpZnboMlImEi/nqwhQz7NEt13Y -// SIG // xC4Ddato88tt8zpcoRb0RrrgOGSsbmQ1eKagYw8t00CT -// SIG // +OPeBw3VXHmlSSnnDb6gE3e+lD3v++MrWhAfTVYoonpy -// SIG // 4BI6t0le2O3tQ5GD2Xuye4Yb2T6xjF3oiU+EGvKhL1nk -// SIG // kDstrjNYxbc+/jLTswM9sbKvkjh+0p2ALPVOVpEhNSXD -// SIG // OW5kf1O6nA+tGSOEy/S6A4aN91/w0FK/jJSHvMAhdCVf -// SIG // GCi2zCcoOCWYOUo2z3yxkq4cI6epZuxhH2rhKEmdX4ji -// SIG // JV3TIUs+UsS1Vz8kA/DRelsv1SPjcF0PUUZ3s/gA4bys -// SIG // AoJf28AVs70b1FVL5zmhD+kjSbwYuER8ReTBw3J64HLn -// SIG // JN+/RpnF78IcV9uDjexNSTCnq47f7Fufr/zdsGbiwZeB -// SIG // e+3W7UvnSSmnEyimp31ngOaKYnhfsi+E11ecXL93KCjx -// SIG // 7W3DKI8sj0A3T8HhhUSJxAlMxdSlQy90lfdu+HggWCwT -// SIG // XWCVmj5PM4TasIgX3p5O9JawvEagbJjS4NaIjAsCAwEA -// SIG // AaOCAe0wggHpMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1Ud -// SIG // DgQWBBRIbmTlUAXTgqoXNzcitW2oynUClTAZBgkrBgEE -// SIG // AYI3FAIEDB4KAFMAdQBiAEMAQTALBgNVHQ8EBAMCAYYw -// SIG // DwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBRyLToC -// SIG // MZBDuRQFTuHqp8cx0SOJNDBaBgNVHR8EUzBRME+gTaBL -// SIG // hklodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpL2Ny -// SIG // bC9wcm9kdWN0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFf -// SIG // MDNfMjIuY3JsMF4GCCsGAQUFBwEBBFIwUDBOBggrBgEF -// SIG // BQcwAoZCaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3Br -// SIG // aS9jZXJ0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFfMDNf -// SIG // MjIuY3J0MIGfBgNVHSAEgZcwgZQwgZEGCSsGAQQBgjcu -// SIG // AzCBgzA/BggrBgEFBQcCARYzaHR0cDovL3d3dy5taWNy -// SIG // b3NvZnQuY29tL3BraW9wcy9kb2NzL3ByaW1hcnljcHMu -// SIG // aHRtMEAGCCsGAQUFBwICMDQeMiAdAEwAZQBnAGEAbABf -// SIG // AHAAbwBsAGkAYwB5AF8AcwB0AGEAdABlAG0AZQBuAHQA -// SIG // LiAdMA0GCSqGSIb3DQEBCwUAA4ICAQBn8oalmOBUeRou -// SIG // 09h0ZyKbC5YR4WOSmUKWfdJ5DJDBZV8uLD74w3LRbYP+ -// SIG // vj/oCso7v0epo/Np22O/IjWll11lhJB9i0ZQVdgMknzS -// SIG // Gksc8zxCi1LQsP1r4z4HLimb5j0bpdS1HXeUOeLpZMlE -// SIG // PXh6I/MTfaaQdION9MsmAkYqwooQu6SpBQyb7Wj6aC6V -// SIG // oCo/KmtYSWMfCWluWpiW5IP0wI/zRive/DvQvTXvbiWu -// SIG // 5a8n7dDd8w6vmSiXmE0OPQvyCInWH8MyGOLwxS3OW560 -// SIG // STkKxgrCxq2u5bLZ2xWIUUVYODJxJxp/sfQn+N4sOiBp -// SIG // mLJZiWhub6e3dMNABQamASooPoI/E01mC8CzTfXhj38c -// SIG // bxV9Rad25UAqZaPDXVJihsMdYzaXht/a8/jyFqGaJ+HN -// SIG // pZfQ7l1jQeNbB5yHPgZ3BtEGsXUfFL5hYbXw3MYbBL7f -// SIG // QccOKO7eZS/sl/ahXJbYANahRr1Z85elCUtIEJmAH9AA -// SIG // KcWxm6U/RXceNcbSoqKfenoi+kiVH6v7RyOA9Z74v2u3 -// SIG // S5fi63V4GuzqN5l5GEv/1rMjaHXmr/r8i+sLgOppO6/8 -// SIG // MO0ETI7f33VtY5E90Z1WTk+/gFcioXgRMiF670EKsT/7 -// SIG // qMykXcGhiJtXcVZOSEXAQsmbdlsKgEhr/Xmfwb1tbWrJ -// SIG // UnMTDXpQzTGCFfEwghXtAgEBMIGVMH4xCzAJBgNVBAYT -// SIG // AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH -// SIG // EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y -// SIG // cG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2Rl -// SIG // IFNpZ25pbmcgUENBIDIwMTECEzMAAAITjAwcMTW80l8A -// SIG // AAAAAhMwDQYJYIZIAWUDBAIBBQCgga4wGQYJKoZIhvcN -// SIG // AQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEO -// SIG // MAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIO+j -// SIG // /BZlk1fhkXEi+WULmsUiSkNrwq1x/0ZWBzjJYz6KMEIG -// SIG // CisGAQQBgjcCAQwxNDAyoBSAEgBNAGkAYwByAG8AcwBv -// SIG // AGYAdKEagBhodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20w -// SIG // DQYJKoZIhvcNAQEBBQAEggGAFA2yiPcmjO5fRqia9Wia -// SIG // uE4PtJ1/ht2JzVjgxuO5qR65vahC3mqQYtuP4Rob01W+ -// SIG // jMrXoGElLlAmcDnjer7uVhNdojFma3G8HmuxLZdXMq1f -// SIG // +aJI3O+nM5vZKHaBY9pYxU1pa3TkUvtZZ/YJFBdhbKZD -// SIG // Ls1MYVhTkSwDeneYZoTMnUuGRHh+PaId1aHZKpYlVtdV -// SIG // j7fe4MA69cxp/L1/kImlYrXyEOCKsjMoYP2+2oPVsCSd -// SIG // EqGO7WjkMCeL+pVy0jJhp33rc/zQcmlPckMUNfj7PCxH -// SIG // u8uiphWyyKqYnsw+GSFMNwmREcQBSn7eN6/Vba07M74M -// SIG // O3izrFGoobjArchg5sSefgDBSURVDhZgb/0c+MOXH3o1 -// SIG // LvJratAGmsYH6l7UYF03diOLAUENmv+xODrOs7zkH7hJ -// SIG // A9wGcELhUZjHA9YiGpc/ArBooRskd+F+uo7PCndVOSVq -// SIG // LNCIqeZcl20g/lskSIAh6ww5+ELR+TiC+P+N/du+FBHY -// SIG // doBM1fBaoYIS+zCCEvcGCisGAQQBgjcDAwExghLnMIIS -// SIG // 4wYJKoZIhvcNAQcCoIIS1DCCEtACAQMxDzANBglghkgB -// SIG // ZQMEAgEFADCCAVkGCyqGSIb3DQEJEAEEoIIBSASCAUQw -// SIG // ggFAAgEBBgorBgEEAYRZCgMBMDEwDQYJYIZIAWUDBAIB -// SIG // BQAEIF9W/UlnlTLeyoCPkSO+Vze4KnVZVhXQet9xGpGD -// SIG // VDUBAgZgsBDDb7UYEzIwMjEwNjAzMTAyNzI0LjIxMlow -// SIG // BIACAfSggdikgdUwgdIxCzAJBgNVBAYTAlVTMRMwEQYD -// SIG // VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k -// SIG // MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x -// SIG // LTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJh -// SIG // dGlvbnMgTGltaXRlZDEmMCQGA1UECxMdVGhhbGVzIFRT -// SIG // UyBFU046RDA4Mi00QkZELUVFQkExJTAjBgNVBAMTHE1p -// SIG // Y3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2Wggg5KMIIE -// SIG // +TCCA+GgAwIBAgITMwAAAUGvf1KXXPLcRQAAAAABQTAN -// SIG // BgkqhkiG9w0BAQsFADB8MQswCQYDVQQGEwJVUzETMBEG -// SIG // A1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u -// SIG // ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u -// SIG // MSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQ -// SIG // Q0EgMjAxMDAeFw0yMDEwMTUxNzI4MjdaFw0yMjAxMTIx -// SIG // NzI4MjdaMIHSMQswCQYDVQQGEwJVUzETMBEGA1UECBMK -// SIG // V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwG -// SIG // A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMS0wKwYD -// SIG // VQQLEyRNaWNyb3NvZnQgSXJlbGFuZCBPcGVyYXRpb25z -// SIG // IExpbWl0ZWQxJjAkBgNVBAsTHVRoYWxlcyBUU1MgRVNO -// SIG // OkQwODItNEJGRC1FRUJBMSUwIwYDVQQDExxNaWNyb3Nv -// SIG // ZnQgVGltZS1TdGFtcCBTZXJ2aWNlMIIBIjANBgkqhkiG -// SIG // 9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8irLqL28dal+PJUm -// SIG // UJOwvYn/sOCEzQzZyj94XbFPtRhDhPjagvvKOv1GgMoO -// SIG // uXvkpM3uM5E67vyOCPxqhTAzq7Ak3zkEXXBv7JoM8Xm0 -// SIG // x5UcnAkpUiEo0eycRl6bnYIB3KlZW3uz4Jc2v2FV0KCG -// SIG // kLrvqfKP8V/i2hVyN854OejWpx8wGUazM4CYUVowcgED -// SIG // c76OY+Xa4W27DCZJm2f9ol4BjSL+b2L/T8n/LEGknaUx -// SIG // wSQTN1LQCt+uBDCASd6VQR5CLLJVt6MBL0W1NlaWxEAJ -// SIG // wlIdyBnS1ihLvRg1jc/KUZe0sRFdD3fhKrjPac3hoy00 -// SIG // 7Fvr6Go0WJ4pr2rJdQIDAQABo4IBGzCCARcwHQYDVR0O -// SIG // BBYEFC0oPyxuLpD9RXBr9c8NO0EFEsbEMB8GA1UdIwQY -// SIG // MBaAFNVjOlyKMZDzQ3t8RhvFM2hahW1VMFYGA1UdHwRP -// SIG // ME0wS6BJoEeGRWh0dHA6Ly9jcmwubWljcm9zb2Z0LmNv -// SIG // bS9wa2kvY3JsL3Byb2R1Y3RzL01pY1RpbVN0YVBDQV8y -// SIG // MDEwLTA3LTAxLmNybDBaBggrBgEFBQcBAQROMEwwSgYI -// SIG // KwYBBQUHMAKGPmh0dHA6Ly93d3cubWljcm9zb2Z0LmNv -// SIG // bS9wa2kvY2VydHMvTWljVGltU3RhUENBXzIwMTAtMDct -// SIG // MDEuY3J0MAwGA1UdEwEB/wQCMAAwEwYDVR0lBAwwCgYI -// SIG // KwYBBQUHAwgwDQYJKoZIhvcNAQELBQADggEBAFJ63yJ9 -// SIG // 2ChqCgpexD48okviGuC4ikNsvmwlCSet1sFpvJEzLJB8 -// SIG // cTF4z4qQTz8AsQtcew6mAVmQCYDu9f5ee11xXj1LwHYs -// SIG // ZGnSs/OfRul1VKmY51OQpqvK5O/Ct4fs0Iblzo8eyOLJ -// SIG // ygTk97aXVA4Uzq8GblL7LQ5XiwAY446MOALnNXFo/Kq9 -// SIG // tvzipwY1YcRn/nlMQ+b92OiLLmHVMi2wAUORiKFvaAfY -// SIG // WjhQd+2qHLMsdpNluwBbWe7FF5ABsDo0HROMWyCgxdLQ -// SIG // 3vqr3DMSH3ZWKiirFsvWJmchfZPGRObwqszvSXPFmPBZ -// SIG // 9o+er+4UoLV+50GWnnQky7HVgLkwggZxMIIEWaADAgEC -// SIG // AgphCYEqAAAAAAACMA0GCSqGSIb3DQEBCwUAMIGIMQsw -// SIG // CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQ -// SIG // MA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9z -// SIG // b2Z0IENvcnBvcmF0aW9uMTIwMAYDVQQDEylNaWNyb3Nv -// SIG // ZnQgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAx -// SIG // MDAeFw0xMDA3MDEyMTM2NTVaFw0yNTA3MDEyMTQ2NTVa -// SIG // MHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5n -// SIG // dG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN -// SIG // aWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1p -// SIG // Y3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMIIBIjAN -// SIG // BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqR0NvHcR -// SIG // ijog7PwTl/X6f2mUa3RUENWlCgCChfvtfGhLLF/Fw+Vh -// SIG // wna3PmYrW/AVUycEMR9BGxqVHc4JE458YTBZsTBED/Fg -// SIG // iIRUQwzXTbg4CLNC3ZOs1nMwVyaCo0UN0Or1R4HNvyRg -// SIG // MlhgRvJYR4YyhB50YWeRX4FUsc+TTJLBxKZd0WETbijG -// SIG // GvmGgLvfYfxGwScdJGcSchohiq9LZIlQYrFd/XcfPfBX -// SIG // day9ikJNQFHRD5wGPmd/9WbAA5ZEfu/QS/1u5ZrKsajy -// SIG // eioKMfDaTgaRtogINeh4HLDpmc085y9Euqf03GS9pAHB -// SIG // IAmTeM38vMDJRF1eFpwBBU8iTQIDAQABo4IB5jCCAeIw -// SIG // EAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0OBBYEFNVjOlyK -// SIG // MZDzQ3t8RhvFM2hahW1VMBkGCSsGAQQBgjcUAgQMHgoA -// SIG // UwB1AGIAQwBBMAsGA1UdDwQEAwIBhjAPBgNVHRMBAf8E -// SIG // BTADAQH/MB8GA1UdIwQYMBaAFNX2VsuP6KJcYmjRPZSQ -// SIG // W9fOmhjEMFYGA1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9j -// SIG // cmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3Rz -// SIG // L01pY1Jvb0NlckF1dF8yMDEwLTA2LTIzLmNybDBaBggr -// SIG // BgEFBQcBAQROMEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93 -// SIG // d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljUm9v -// SIG // Q2VyQXV0XzIwMTAtMDYtMjMuY3J0MIGgBgNVHSABAf8E -// SIG // gZUwgZIwgY8GCSsGAQQBgjcuAzCBgTA9BggrBgEFBQcC -// SIG // ARYxaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL1BLSS9k -// SIG // b2NzL0NQUy9kZWZhdWx0Lmh0bTBABggrBgEFBQcCAjA0 -// SIG // HjIgHQBMAGUAZwBhAGwAXwBQAG8AbABpAGMAeQBfAFMA -// SIG // dABhAHQAZQBtAGUAbgB0AC4gHTANBgkqhkiG9w0BAQsF -// SIG // AAOCAgEAB+aIUQ3ixuCYP4FxAz2do6Ehb7Prpsz1Mb7P -// SIG // BeKp/vpXbRkws8LFZslq3/Xn8Hi9x6ieJeP5vO1rVFcI -// SIG // K1GCRBL7uVOMzPRgEop2zEBAQZvcXBf/XPleFzWYJFZL -// SIG // dO9CEMivv3/Gf/I3fVo/HPKZeUqRUgCvOA8X9S95gWXZ -// SIG // qbVr5MfO9sp6AG9LMEQkIjzP7QOllo9ZKby2/QThcJ8y -// SIG // Sif9Va8v/rbljjO7Yl+a21dA6fHOmWaQjP9qYn/dxUoL -// SIG // kSbiOewZSnFjnXshbcOco6I8+n99lmqQeKZt0uGc+R38 -// SIG // ONiU9MalCpaGpL2eGq4EQoO4tYCbIjggtSXlZOz39L9+ -// SIG // Y1klD3ouOVd2onGqBooPiRa6YacRy5rYDkeagMXQzafQ -// SIG // 732D8OE7cQnfXXSYIghh2rBQHm+98eEA3+cxB6STOvdl -// SIG // R3jo+KhIq/fecn5ha293qYHLpwmsObvsxsvYgrRyzR30 -// SIG // uIUBHoD7G4kqVDmyW9rIDVWZeodzOwjmmC3qjeAzLhIp -// SIG // 9cAvVCch98isTtoouLGp25ayp0Kiyc8ZQU3ghvkqmqMR -// SIG // ZjDTu3QyS99je/WZii8bxyGvWbWu3EQ8l1Bx16HSxVXj -// SIG // ad5XwdHeMMD9zOZN+w2/XU/pnR4ZOC+8z1gFLu8NoFA1 -// SIG // 2u8JJxzVs341Hgi62jbb01+P3nSISRKhggLUMIICPQIB -// SIG // ATCCAQChgdikgdUwgdIxCzAJBgNVBAYTAlVTMRMwEQYD -// SIG // VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k -// SIG // MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x -// SIG // LTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJh -// SIG // dGlvbnMgTGltaXRlZDEmMCQGA1UECxMdVGhhbGVzIFRT -// SIG // UyBFU046RDA4Mi00QkZELUVFQkExJTAjBgNVBAMTHE1p -// SIG // Y3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2WiIwoBATAH -// SIG // BgUrDgMCGgMVAKrlvym1CquIoQcrzncLvkD1WpUDoIGD -// SIG // MIGApH4wfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldh -// SIG // c2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNV -// SIG // BAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UE -// SIG // AxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAw -// SIG // DQYJKoZIhvcNAQEFBQACBQDkYyCxMCIYDzIwMjEwNjAz -// SIG // MTczNDQxWhgPMjAyMTA2MDQxNzM0NDFaMHQwOgYKKwYB -// SIG // BAGEWQoEATEsMCowCgIFAORjILECAQAwBwIBAAICEcww -// SIG // BwIBAAICEgswCgIFAORkcjECAQAwNgYKKwYBBAGEWQoE -// SIG // AjEoMCYwDAYKKwYBBAGEWQoDAqAKMAgCAQACAwehIKEK -// SIG // MAgCAQACAwGGoDANBgkqhkiG9w0BAQUFAAOBgQBtyFzG -// SIG // N2gJJZ3T6Dzxrw0RoLe9MAvzpz7H2wn8BMAuUs68+9Sz -// SIG // 0qPPgY06wPmE9dqyNzKBjwQrPnJ/qIegjqxgIAazKKN2 -// SIG // hxkAF/kZg0zTK4jDKKUAzIlSwaXbpD19RKHHRdyXGu/0 -// SIG // xlUHCFogRUpH8CZQsXulgvS7H0jiYUkTLTGCAw0wggMJ -// SIG // AgEBMIGTMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpX -// SIG // YXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYD -// SIG // VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNV -// SIG // BAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEw -// SIG // AhMzAAABQa9/Updc8txFAAAAAAFBMA0GCWCGSAFlAwQC -// SIG // AQUAoIIBSjAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQ -// SIG // AQQwLwYJKoZIhvcNAQkEMSIEIDpRwFQTDOc8xcJlaU+j -// SIG // NiTtrqf2gu9E6sxjCfitRM3RMIH6BgsqhkiG9w0BCRAC -// SIG // LzGB6jCB5zCB5DCBvQQgUT8BPIzqc3SecHRPLKBtW0vO -// SIG // OnT+78haWo+XcxVerd4wgZgwgYCkfjB8MQswCQYDVQQG -// SIG // EwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UE -// SIG // BxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENv -// SIG // cnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGlt -// SIG // ZS1TdGFtcCBQQ0EgMjAxMAITMwAAAUGvf1KXXPLcRQAA -// SIG // AAABQTAiBCDEmllKq6p2dSDRT7WXEfJzMnBQlv3YcYTQ -// SIG // /uWbkawwhzANBgkqhkiG9w0BAQsFAASCAQAhfBpb75wo -// SIG // So2gcoQJiDZ9lV0kGglSZX1BDF8J62A6IVx2Pmn7D4IY -// SIG // IKXiWQe19jI1zYw8TuiFUPzFNQbkdJHvt3P8A4FoowN3 -// SIG // tMwdX6Vh5pisICKU05HguvtJ8sc6iVBPTk7LFHG/+n3p -// SIG // Wf/9ou6BZkxdYddKcn9Aw1udIEc+mXLrji6BrJmE8Fr4 -// SIG // rXOutJkFBTBOyDfxeBqqb3EzcH620EQL9CEShF4Ozs14 -// SIG // QAdOnIGLdDYe0QCqZh13uT1o4d6vp374oi78tV8ledom -// SIG // 9JJe0S6eeUr8/Pvl4p5qkPNIlZKDVKdj9DNUHIGj/Gac -// SIG // OJi52Nnfjra0FMb1/kMTkRZa -// SIG // End signature block diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/dotnet.timezones.blat b/Examples/Complete/Camera/Blazor/wwwroot/_framework/dotnet.timezones.blat deleted file mode 100644 index 2b8309168c..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/dotnet.timezones.blat and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/dotnet.wasm b/Examples/Complete/Camera/Blazor/wwwroot/_framework/dotnet.wasm deleted file mode 100644 index 8c6ce02850..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/dotnet.wasm and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/dotnet_support.js b/Examples/Complete/Camera/Blazor/wwwroot/_framework/dotnet_support.js deleted file mode 100644 index d4b54ff863..0000000000 --- a/Examples/Complete/Camera/Blazor/wwwroot/_framework/dotnet_support.js +++ /dev/null @@ -1,382 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -var DotNetSupportLib = { - $DOTNET: { - conv_string: function (mono_obj) { - return MONO.string_decoder.copy (mono_obj); - } - }, - mono_wasm_invoke_js_blazor: function(exceptionMessage, callInfo, arg0, arg1, arg2) { - var mono_string = globalThis._mono_string_cached - || (globalThis._mono_string_cached = Module.cwrap('mono_wasm_string_from_js', 'number', ['string'])); - - try { - var blazorExports = globalThis.Blazor; - if (!blazorExports) { - throw new Error('The blazor.webassembly.js library is not loaded.'); - } - - return blazorExports._internal.invokeJSFromDotNet(callInfo, arg0, arg1, arg2); - } catch (ex) { - var exceptionJsString = ex.message + '\n' + ex.stack; - var exceptionSystemString = mono_string(exceptionJsString); - setValue (exceptionMessage, exceptionSystemString, 'i32'); // *exceptionMessage = exceptionSystemString; - return 0; - } - }, - - // This is for back-compat only and will eventually be removed - mono_wasm_invoke_js_marshalled: function(exceptionMessage, asyncHandleLongPtr, functionName, argsJson, treatResultAsVoid) { - - var mono_string = globalThis._mono_string_cached - || (globalThis._mono_string_cached = Module.cwrap('mono_wasm_string_from_js', 'number', ['string'])); - - try { - // Passing a .NET long into JS via Emscripten is tricky. The method here is to pass - // as pointer to the long, then combine two reads from the HEAPU32 array. - // Even though JS numbers can't represent the full range of a .NET long, it's OK - // because we'll never exceed Number.MAX_SAFE_INTEGER (2^53 - 1) in this case. - //var u32Index = $1 >> 2; - var u32Index = asyncHandleLongPtr >> 2; - var asyncHandleJsNumber = Module.HEAPU32[u32Index + 1]*4294967296 + Module.HEAPU32[u32Index]; - - // var funcNameJsString = UTF8ToString (functionName); - // var argsJsonJsString = argsJson && UTF8ToString (argsJson); - var funcNameJsString = DOTNET.conv_string(functionName); - var argsJsonJsString = argsJson && DOTNET.conv_string (argsJson); - - var dotNetExports = globaThis.DotNet; - if (!dotNetExports) { - throw new Error('The Microsoft.JSInterop.js library is not loaded.'); - } - - if (asyncHandleJsNumber) { - dotNetExports.jsCallDispatcher.beginInvokeJSFromDotNet(asyncHandleJsNumber, funcNameJsString, argsJsonJsString, treatResultAsVoid); - return 0; - } else { - var resultJson = dotNetExports.jsCallDispatcher.invokeJSFromDotNet(funcNameJsString, argsJsonJsString, treatResultAsVoid); - return resultJson === null ? 0 : mono_string(resultJson); - } - } catch (ex) { - var exceptionJsString = ex.message + '\n' + ex.stack; - var exceptionSystemString = mono_string(exceptionJsString); - setValue (exceptionMessage, exceptionSystemString, 'i32'); // *exceptionMessage = exceptionSystemString; - return 0; - } - }, - - // This is for back-compat only and will eventually be removed - mono_wasm_invoke_js_unmarshalled: function(exceptionMessage, funcName, arg0, arg1, arg2) { - try { - // Get the function you're trying to invoke - var funcNameJsString = DOTNET.conv_string(funcName); - var dotNetExports = globalThis.DotNet; - if (!dotNetExports) { - throw new Error('The Microsoft.JSInterop.js library is not loaded.'); - } - var funcInstance = dotNetExports.jsCallDispatcher.findJSFunction(funcNameJsString); - - return funcInstance.call(null, arg0, arg1, arg2); - } catch (ex) { - var exceptionJsString = ex.message + '\n' + ex.stack; - var mono_string = Module.cwrap('mono_wasm_string_from_js', 'number', ['string']); // TODO: Cache - var exceptionSystemString = mono_string(exceptionJsString); - setValue (exceptionMessage, exceptionSystemString, 'i32'); // *exceptionMessage = exceptionSystemString; - return 0; - } - } - - -}; - -autoAddDeps(DotNetSupportLib, '$DOTNET') -mergeInto(LibraryManager.library, DotNetSupportLib) - - -// SIG // Begin signature block -// SIG // MIIkiQYJKoZIhvcNAQcCoIIkejCCJHYCAQExDzANBglg -// SIG // hkgBZQMEAgEFADB3BgorBgEEAYI3AgEEoGkwZzAyBgor -// SIG // BgEEAYI3AgEeMCQCAQEEEBDgyQbOONQRoqMAEEvTUJAC -// SIG // AQACAQACAQACAQACAQAwMTANBglghkgBZQMEAgEFAAQg -// SIG // DQxM5aUosMIFmI353dLRcro0jWTAvinWkY5FLkoNZqCg -// SIG // gg3wMIIGbjCCBFagAwIBAgITMwAAAhOMDBwxNbzSXwAA -// SIG // AAACEzANBgkqhkiG9w0BAQwFADB+MQswCQYDVQQGEwJV -// SIG // UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH -// SIG // UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv -// SIG // cmF0aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQgQ29kZSBT -// SIG // aWduaW5nIFBDQSAyMDExMB4XDTIxMDIxMTIwMDk1MVoX -// SIG // DTIyMDIxMDIwMDk1MVowYzELMAkGA1UEBhMCVVMxEzAR -// SIG // BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1v -// SIG // bmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv -// SIG // bjENMAsGA1UEAxMELk5FVDCCAaIwDQYJKoZIhvcNAQEB -// SIG // BQADggGPADCCAYoCggGBAJtZcELdrGHlHCF6nz4bH8vW -// SIG // l5M3GfXIf7JY7OovRwgweTptJQGby0YHZ+iCrWIE7fTc -// SIG // /c9eGKGm+EsuWHnanAm9Ro7MSjdPsYBRaif1Y6dyhBcb -// SIG // b44guUNKlplq7L1k3ldXFFzyAt+u8UzCL5QFwibg2nWi -// SIG // QmCkoJWhiA6RxEPgEZ/ss2ICppgLHm1o6vy1P4ci6aMk -// SIG // Tj2s1uct/oFflYwE0DsK1OrFH7QvoIqWCAuXUXjZOKnF -// SIG // oRia22+ci2oxs/LVkgqcMwC35KHvUBzCW3LME/dSBWCO -// SIG // TV7gieG+gUtxBgPpzomak4thtrQLMRAWl7AOtI7QvsXa -// SIG // FEyQpAlDVz12Sa89KJOLBPksBRDw4woRZLlHnUrtxFRp -// SIG // MZsr+9cf2zfZPG4ia2iDSBFfXu2BeXrifkT4c/UV5Iy3 -// SIG // qEHCzh1jLmN701jUOhF1QN1LEPn+TCth2b239/34+Bym -// SIG // cIAcDP1EWk8JodsUDedKhK+lAefNL0mzUrIQc6Dxb5cq -// SIG // may/QQIDAQABo4IBfjCCAXowHwYDVR0lBBgwFgYKKwYB -// SIG // BAGCN0wIAQYIKwYBBQUHAwMwHQYDVR0OBBYEFO9NaSC3 -// SIG // 3IwsQ0OKpWHnclste605MFAGA1UdEQRJMEekRTBDMSkw -// SIG // JwYDVQQLEyBNaWNyb3NvZnQgT3BlcmF0aW9ucyBQdWVy -// SIG // dG8gUmljbzEWMBQGA1UEBRMNNDY0MjIzKzQ2NDI5MzAf -// SIG // BgNVHSMEGDAWgBRIbmTlUAXTgqoXNzcitW2oynUClTBU -// SIG // BgNVHR8ETTBLMEmgR6BFhkNodHRwOi8vd3d3Lm1pY3Jv -// SIG // c29mdC5jb20vcGtpb3BzL2NybC9NaWNDb2RTaWdQQ0Ey -// SIG // MDExXzIwMTEtMDctMDguY3JsMGEGCCsGAQUFBwEBBFUw -// SIG // UzBRBggrBgEFBQcwAoZFaHR0cDovL3d3dy5taWNyb3Nv -// SIG // ZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNDb2RTaWdQQ0Ey -// SIG // MDExXzIwMTEtMDctMDguY3J0MAwGA1UdEwEB/wQCMAAw -// SIG // DQYJKoZIhvcNAQEMBQADggIBAFiD+cR0K6evMUeUrBMA -// SIG // pLljV65GDDTzlD4jqr6Mu1NTeZv5L9IJlR6DLAEKaJnB -// SIG // a7fZZ/ME/FZasmc40+WijhDmth/OOc7IpfJ3Ra1auKIA -// SIG // g687mo/eWiPs0nC42oCdchy9Q5AS7K0+MUk7R/p9eCTP -// SIG // NYFjSMItiL+YFYCxaZXqHizwdXcvCIrESq4DXwN+ZdUe -// SIG // GBEO9F2SkMVC61/y2xwSwRWmfO/l4YutKT+dSKjlelYi -// SIG // zFAQaJrGzO5ac56S+K/NMndPL7Od3ohqxMu7gsFUynxY -// SIG // l+eyB9T9I9HrUWoHj6ce4nzOxHC+yDRD6Mi2AaT+IbMO -// SIG // cGvWeJC5iX3tzpMqdz0BOMl6jbff+t+BLS7VtU6JAFCM -// SIG // fk5h+wqIPWjon3tpTuFtCkMOSzIoso3U6kdX0fgrgXnN -// SIG // KJspBXkfKG9lMPOPOKwzua1qjghvgzPMftj1yZqFljJm -// SIG // cjBxs/HKA8J8st1MKcgiBGDX5zkcsHYGuAkIb2fXQuYW -// SIG // y0G78JzzSv1u0LAFj8/Qtx9Hm2wfc20+ww+MYEQ9tu1F -// SIG // uJZK2O7+p7iVziwZvo+XVzuIU7sVjcmJH5Gn/ttfkLQ3 -// SIG // 0jvM9QyV/lYwurg4Gn5Li/IZSN56WGIPilRkXUVurpaV -// SIG // WeYCjeUJzMY2n2tVMFl6pgnGmaA2a0uiG3z0GpMPdbS1 -// SIG // R/oEMIIHejCCBWKgAwIBAgIKYQ6Q0gAAAAAAAzANBgkq -// SIG // hkiG9w0BAQsFADCBiDELMAkGA1UEBhMCVVMxEzARBgNV -// SIG // BAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx -// SIG // HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEy -// SIG // MDAGA1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNh -// SIG // dGUgQXV0aG9yaXR5IDIwMTEwHhcNMTEwNzA4MjA1OTA5 -// SIG // WhcNMjYwNzA4MjEwOTA5WjB+MQswCQYDVQQGEwJVUzET -// SIG // MBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVk -// SIG // bW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0 -// SIG // aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQgQ29kZSBTaWdu -// SIG // aW5nIFBDQSAyMDExMIICIjANBgkqhkiG9w0BAQEFAAOC -// SIG // Ag8AMIICCgKCAgEAq/D6chAcLq3YbqqCEE00uvK2WCGf -// SIG // Qhsqa+laUKq4BjgaBEm6f8MMHt03a8YS2AvwOMKZBrDI -// SIG // OdUBFDFC04kNeWSHfpRgJGyvnkmc6Whe0t+bU7IKLMOv -// SIG // 2akrrnoJr9eWWcpgGgXpZnboMlImEi/nqwhQz7NEt13Y -// SIG // xC4Ddato88tt8zpcoRb0RrrgOGSsbmQ1eKagYw8t00CT -// SIG // +OPeBw3VXHmlSSnnDb6gE3e+lD3v++MrWhAfTVYoonpy -// SIG // 4BI6t0le2O3tQ5GD2Xuye4Yb2T6xjF3oiU+EGvKhL1nk -// SIG // kDstrjNYxbc+/jLTswM9sbKvkjh+0p2ALPVOVpEhNSXD -// SIG // OW5kf1O6nA+tGSOEy/S6A4aN91/w0FK/jJSHvMAhdCVf -// SIG // GCi2zCcoOCWYOUo2z3yxkq4cI6epZuxhH2rhKEmdX4ji -// SIG // JV3TIUs+UsS1Vz8kA/DRelsv1SPjcF0PUUZ3s/gA4bys -// SIG // AoJf28AVs70b1FVL5zmhD+kjSbwYuER8ReTBw3J64HLn -// SIG // JN+/RpnF78IcV9uDjexNSTCnq47f7Fufr/zdsGbiwZeB -// SIG // e+3W7UvnSSmnEyimp31ngOaKYnhfsi+E11ecXL93KCjx -// SIG // 7W3DKI8sj0A3T8HhhUSJxAlMxdSlQy90lfdu+HggWCwT -// SIG // XWCVmj5PM4TasIgX3p5O9JawvEagbJjS4NaIjAsCAwEA -// SIG // AaOCAe0wggHpMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1Ud -// SIG // DgQWBBRIbmTlUAXTgqoXNzcitW2oynUClTAZBgkrBgEE -// SIG // AYI3FAIEDB4KAFMAdQBiAEMAQTALBgNVHQ8EBAMCAYYw -// SIG // DwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBRyLToC -// SIG // MZBDuRQFTuHqp8cx0SOJNDBaBgNVHR8EUzBRME+gTaBL -// SIG // hklodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpL2Ny -// SIG // bC9wcm9kdWN0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFf -// SIG // MDNfMjIuY3JsMF4GCCsGAQUFBwEBBFIwUDBOBggrBgEF -// SIG // BQcwAoZCaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3Br -// SIG // aS9jZXJ0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFfMDNf -// SIG // MjIuY3J0MIGfBgNVHSAEgZcwgZQwgZEGCSsGAQQBgjcu -// SIG // AzCBgzA/BggrBgEFBQcCARYzaHR0cDovL3d3dy5taWNy -// SIG // b3NvZnQuY29tL3BraW9wcy9kb2NzL3ByaW1hcnljcHMu -// SIG // aHRtMEAGCCsGAQUFBwICMDQeMiAdAEwAZQBnAGEAbABf -// SIG // AHAAbwBsAGkAYwB5AF8AcwB0AGEAdABlAG0AZQBuAHQA -// SIG // LiAdMA0GCSqGSIb3DQEBCwUAA4ICAQBn8oalmOBUeRou -// SIG // 09h0ZyKbC5YR4WOSmUKWfdJ5DJDBZV8uLD74w3LRbYP+ -// SIG // vj/oCso7v0epo/Np22O/IjWll11lhJB9i0ZQVdgMknzS -// SIG // Gksc8zxCi1LQsP1r4z4HLimb5j0bpdS1HXeUOeLpZMlE -// SIG // PXh6I/MTfaaQdION9MsmAkYqwooQu6SpBQyb7Wj6aC6V -// SIG // oCo/KmtYSWMfCWluWpiW5IP0wI/zRive/DvQvTXvbiWu -// SIG // 5a8n7dDd8w6vmSiXmE0OPQvyCInWH8MyGOLwxS3OW560 -// SIG // STkKxgrCxq2u5bLZ2xWIUUVYODJxJxp/sfQn+N4sOiBp -// SIG // mLJZiWhub6e3dMNABQamASooPoI/E01mC8CzTfXhj38c -// SIG // bxV9Rad25UAqZaPDXVJihsMdYzaXht/a8/jyFqGaJ+HN -// SIG // pZfQ7l1jQeNbB5yHPgZ3BtEGsXUfFL5hYbXw3MYbBL7f -// SIG // QccOKO7eZS/sl/ahXJbYANahRr1Z85elCUtIEJmAH9AA -// SIG // KcWxm6U/RXceNcbSoqKfenoi+kiVH6v7RyOA9Z74v2u3 -// SIG // S5fi63V4GuzqN5l5GEv/1rMjaHXmr/r8i+sLgOppO6/8 -// SIG // MO0ETI7f33VtY5E90Z1WTk+/gFcioXgRMiF670EKsT/7 -// SIG // qMykXcGhiJtXcVZOSEXAQsmbdlsKgEhr/Xmfwb1tbWrJ -// SIG // UnMTDXpQzTGCFfEwghXtAgEBMIGVMH4xCzAJBgNVBAYT -// SIG // AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH -// SIG // EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y -// SIG // cG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2Rl -// SIG // IFNpZ25pbmcgUENBIDIwMTECEzMAAAITjAwcMTW80l8A -// SIG // AAAAAhMwDQYJYIZIAWUDBAIBBQCgga4wGQYJKoZIhvcN -// SIG // AQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEO -// SIG // MAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIPei -// SIG // aMpT7aW0G0eaO4V7u+OYsUIWBD2V6EuD1ajffj24MEIG -// SIG // CisGAQQBgjcCAQwxNDAyoBSAEgBNAGkAYwByAG8AcwBv -// SIG // AGYAdKEagBhodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20w -// SIG // DQYJKoZIhvcNAQEBBQAEggGASEblTgnTmkn+iGPTMgPr -// SIG // +5uptto3kTMfvkelPQ3w/xHmtXcAdH24QMN1aSgRgQkH -// SIG // oHsEzQgzSVBwR5jRH/yeM8rA3JqNHY7Gqo1Mhjz6KSxh -// SIG // 4n1YHmD+QYcpt1jSkqWvV6APQhsYyFv+0SsiAErlDRrv -// SIG // vuIHM5xjmVi5yjW2GGOLDtKN0UOtWS3Fagjdv4L02kXi -// SIG // a4XX9rRjzh8ykJawJrd/OgFKbBZlk/O/5ClWVMQ0ijoQ -// SIG // 5Gb2olho4CZ3M0cqsCigz8GMtQDEKb2y4MYYUrKHlkmo -// SIG // tW+q5Jqhw+ocM7sOIz/EIWfjw/D+Lz44N2oQag0MwW0o -// SIG // 0JBk4TcqIHkiYZ1At70J118HmWllMsh35TDgZTD6Ds7W -// SIG // NEG9Y7e+0GwRiva/wLQq/L6vGDtMfBXBJCwpNuwlniok -// SIG // bY4LFW45OtTkCBleFPyuTyNzz7DkG0+XJhE5fw3H6Tsy -// SIG // VgHbV3fAUM76vS/rVrihi6M+M7HejkC7il15R8lqm2La -// SIG // NUG0IugSoYIS+zCCEvcGCisGAQQBgjcDAwExghLnMIIS -// SIG // 4wYJKoZIhvcNAQcCoIIS1DCCEtACAQMxDzANBglghkgB -// SIG // ZQMEAgEFADCCAVkGCyqGSIb3DQEJEAEEoIIBSASCAUQw -// SIG // ggFAAgEBBgorBgEEAYRZCgMBMDEwDQYJYIZIAWUDBAIB -// SIG // BQAEILs+o5Vp2Uu3D+piTqZS72r4qxA46uSkXA4muDH6 -// SIG // FxXaAgZgsATplaQYEzIwMjEwNjAzMTAyNzI0LjIxN1ow -// SIG // BIACAfSggdikgdUwgdIxCzAJBgNVBAYTAlVTMRMwEQYD -// SIG // VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k -// SIG // MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x -// SIG // LTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJh -// SIG // dGlvbnMgTGltaXRlZDEmMCQGA1UECxMdVGhhbGVzIFRT -// SIG // UyBFU046ODZERi00QkJDLTkzMzUxJTAjBgNVBAMTHE1p -// SIG // Y3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2Wggg5KMIIE -// SIG // +TCCA+GgAwIBAgITMwAAAT7OyndSxfc0KwAAAAABPjAN -// SIG // BgkqhkiG9w0BAQsFADB8MQswCQYDVQQGEwJVUzETMBEG -// SIG // A1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u -// SIG // ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u -// SIG // MSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQ -// SIG // Q0EgMjAxMDAeFw0yMDEwMTUxNzI4MjVaFw0yMjAxMTIx -// SIG // NzI4MjVaMIHSMQswCQYDVQQGEwJVUzETMBEGA1UECBMK -// SIG // V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwG -// SIG // A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMS0wKwYD -// SIG // VQQLEyRNaWNyb3NvZnQgSXJlbGFuZCBPcGVyYXRpb25z -// SIG // IExpbWl0ZWQxJjAkBgNVBAsTHVRoYWxlcyBUU1MgRVNO -// SIG // Ojg2REYtNEJCQy05MzM1MSUwIwYDVQQDExxNaWNyb3Nv -// SIG // ZnQgVGltZS1TdGFtcCBTZXJ2aWNlMIIBIjANBgkqhkiG -// SIG // 9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvFTEyDzZfpws404g -// SIG // SC0kt4VSyX/vaxwOfri89gQdxvfQNvvQARebKR3plqHz -// SIG // 0ZHZW+bmFxyGtTh9zw20LSdpMcWYDFc1rzPuJvTNAnDk -// SIG // KyQP+TqrW7j/lDlCLbqi8ubo4EqSpkHra0Zt15j2r/IJ -// SIG // GZbu3QaRY6qYMZxxkkw4Y5ubAwV3E1p+TNzFg8nzgJ9k -// SIG // wEM4xvZAf9NhHhM2K/jx092xmKxyFfp0X0tboY9d1Oyh -// SIG // dCXl8spOigE32g8zH12Y2NXTfI4141LQU+9dKOKQ7YFF -// SIG // 1kwofuGGwxMU0CsDimODWgr6VFVcNDd2tQbGubgdfLBG -// SIG // EBfje0PyoOOXEO1m4QIDAQABo4IBGzCCARcwHQYDVR0O -// SIG // BBYEFJNa8534u9BiLWvwtbZUDraGiP17MB8GA1UdIwQY -// SIG // MBaAFNVjOlyKMZDzQ3t8RhvFM2hahW1VMFYGA1UdHwRP -// SIG // ME0wS6BJoEeGRWh0dHA6Ly9jcmwubWljcm9zb2Z0LmNv -// SIG // bS9wa2kvY3JsL3Byb2R1Y3RzL01pY1RpbVN0YVBDQV8y -// SIG // MDEwLTA3LTAxLmNybDBaBggrBgEFBQcBAQROMEwwSgYI -// SIG // KwYBBQUHMAKGPmh0dHA6Ly93d3cubWljcm9zb2Z0LmNv -// SIG // bS9wa2kvY2VydHMvTWljVGltU3RhUENBXzIwMTAtMDct -// SIG // MDEuY3J0MAwGA1UdEwEB/wQCMAAwEwYDVR0lBAwwCgYI -// SIG // KwYBBQUHAwgwDQYJKoZIhvcNAQELBQADggEBAKaz+RF9 -// SIG // Wp+GkrkVj6cY5djCdVepJFyufABJ1qKlCWXhOoYAcB7w -// SIG // 7ZxzRC4Z2iY4bc9QU93sa2YDwhQwFPeqfKZfWSkmrcus -// SIG // 49QB9EGPc9FwIgfBQK2AJthaYEysTawS40f6yc6w/ybo -// SIG // tAclqFAr+BPDt0zGZoExvGc8ZpVAZpvSyXbzGLuKtm8K -// SIG // +R73VC4DUp4sRFck1Cx8ILvYdYSNYqORyh0Gwi3v4HWm -// SIG // w6HutafFOdFjaKQEcSsn0SNLfY25qOqnu6DL+NAo7z3q -// SIG // D0eBDISilWob5dllDcONfsu99UEtOnrbdl292yGNIyxi -// SIG // lpI8XGNgGcZxKN6VqLBxAuKlWOYwggZxMIIEWaADAgEC -// SIG // AgphCYEqAAAAAAACMA0GCSqGSIb3DQEBCwUAMIGIMQsw -// SIG // CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQ -// SIG // MA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9z -// SIG // b2Z0IENvcnBvcmF0aW9uMTIwMAYDVQQDEylNaWNyb3Nv -// SIG // ZnQgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAx -// SIG // MDAeFw0xMDA3MDEyMTM2NTVaFw0yNTA3MDEyMTQ2NTVa -// SIG // MHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5n -// SIG // dG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN -// SIG // aWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1p -// SIG // Y3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMIIBIjAN -// SIG // BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqR0NvHcR -// SIG // ijog7PwTl/X6f2mUa3RUENWlCgCChfvtfGhLLF/Fw+Vh -// SIG // wna3PmYrW/AVUycEMR9BGxqVHc4JE458YTBZsTBED/Fg -// SIG // iIRUQwzXTbg4CLNC3ZOs1nMwVyaCo0UN0Or1R4HNvyRg -// SIG // MlhgRvJYR4YyhB50YWeRX4FUsc+TTJLBxKZd0WETbijG -// SIG // GvmGgLvfYfxGwScdJGcSchohiq9LZIlQYrFd/XcfPfBX -// SIG // day9ikJNQFHRD5wGPmd/9WbAA5ZEfu/QS/1u5ZrKsajy -// SIG // eioKMfDaTgaRtogINeh4HLDpmc085y9Euqf03GS9pAHB -// SIG // IAmTeM38vMDJRF1eFpwBBU8iTQIDAQABo4IB5jCCAeIw -// SIG // EAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0OBBYEFNVjOlyK -// SIG // MZDzQ3t8RhvFM2hahW1VMBkGCSsGAQQBgjcUAgQMHgoA -// SIG // UwB1AGIAQwBBMAsGA1UdDwQEAwIBhjAPBgNVHRMBAf8E -// SIG // BTADAQH/MB8GA1UdIwQYMBaAFNX2VsuP6KJcYmjRPZSQ -// SIG // W9fOmhjEMFYGA1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9j -// SIG // cmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3Rz -// SIG // L01pY1Jvb0NlckF1dF8yMDEwLTA2LTIzLmNybDBaBggr -// SIG // BgEFBQcBAQROMEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93 -// SIG // d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljUm9v -// SIG // Q2VyQXV0XzIwMTAtMDYtMjMuY3J0MIGgBgNVHSABAf8E -// SIG // gZUwgZIwgY8GCSsGAQQBgjcuAzCBgTA9BggrBgEFBQcC -// SIG // ARYxaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL1BLSS9k -// SIG // b2NzL0NQUy9kZWZhdWx0Lmh0bTBABggrBgEFBQcCAjA0 -// SIG // HjIgHQBMAGUAZwBhAGwAXwBQAG8AbABpAGMAeQBfAFMA -// SIG // dABhAHQAZQBtAGUAbgB0AC4gHTANBgkqhkiG9w0BAQsF -// SIG // AAOCAgEAB+aIUQ3ixuCYP4FxAz2do6Ehb7Prpsz1Mb7P -// SIG // BeKp/vpXbRkws8LFZslq3/Xn8Hi9x6ieJeP5vO1rVFcI -// SIG // K1GCRBL7uVOMzPRgEop2zEBAQZvcXBf/XPleFzWYJFZL -// SIG // dO9CEMivv3/Gf/I3fVo/HPKZeUqRUgCvOA8X9S95gWXZ -// SIG // qbVr5MfO9sp6AG9LMEQkIjzP7QOllo9ZKby2/QThcJ8y -// SIG // Sif9Va8v/rbljjO7Yl+a21dA6fHOmWaQjP9qYn/dxUoL -// SIG // kSbiOewZSnFjnXshbcOco6I8+n99lmqQeKZt0uGc+R38 -// SIG // ONiU9MalCpaGpL2eGq4EQoO4tYCbIjggtSXlZOz39L9+ -// SIG // Y1klD3ouOVd2onGqBooPiRa6YacRy5rYDkeagMXQzafQ -// SIG // 732D8OE7cQnfXXSYIghh2rBQHm+98eEA3+cxB6STOvdl -// SIG // R3jo+KhIq/fecn5ha293qYHLpwmsObvsxsvYgrRyzR30 -// SIG // uIUBHoD7G4kqVDmyW9rIDVWZeodzOwjmmC3qjeAzLhIp -// SIG // 9cAvVCch98isTtoouLGp25ayp0Kiyc8ZQU3ghvkqmqMR -// SIG // ZjDTu3QyS99je/WZii8bxyGvWbWu3EQ8l1Bx16HSxVXj -// SIG // ad5XwdHeMMD9zOZN+w2/XU/pnR4ZOC+8z1gFLu8NoFA1 -// SIG // 2u8JJxzVs341Hgi62jbb01+P3nSISRKhggLUMIICPQIB -// SIG // ATCCAQChgdikgdUwgdIxCzAJBgNVBAYTAlVTMRMwEQYD -// SIG // VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k -// SIG // MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x -// SIG // LTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJh -// SIG // dGlvbnMgTGltaXRlZDEmMCQGA1UECxMdVGhhbGVzIFRT -// SIG // UyBFU046ODZERi00QkJDLTkzMzUxJTAjBgNVBAMTHE1p -// SIG // Y3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2WiIwoBATAH -// SIG // BgUrDgMCGgMVAKBMFej0xjCTjCk1sTdTKa+TzJDUoIGD -// SIG // MIGApH4wfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldh -// SIG // c2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNV -// SIG // BAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UE -// SIG // AxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAw -// SIG // DQYJKoZIhvcNAQEFBQACBQDkYxTdMCIYDzIwMjEwNjAz -// SIG // MTY0NDEzWhgPMjAyMTA2MDQxNjQ0MTNaMHQwOgYKKwYB -// SIG // BAGEWQoEATEsMCowCgIFAORjFN0CAQAwBwIBAAICClww -// SIG // BwIBAAICEWswCgIFAORkZl0CAQAwNgYKKwYBBAGEWQoE -// SIG // AjEoMCYwDAYKKwYBBAGEWQoDAqAKMAgCAQACAwehIKEK -// SIG // MAgCAQACAwGGoDANBgkqhkiG9w0BAQUFAAOBgQCC1rRg -// SIG // Um9T0Ah6EhW50sEN59pkZRy0IgWsJcHlLQpvuQsViBPR -// SIG // T31t6DW2LGocHjECh7d4qMeTTFZkyQPxXQygdUlJ07FD -// SIG // o4myvnoM60HYf8+Ol1NxBOFmmLbLhAGN7VQDFbpMHBQI -// SIG // 4NMiG1Ac/PEu4PU/wsjlpVv69kzg2mek5DGCAw0wggMJ -// SIG // AgEBMIGTMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpX -// SIG // YXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYD -// SIG // VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNV -// SIG // BAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEw -// SIG // AhMzAAABPs7Kd1LF9zQrAAAAAAE+MA0GCWCGSAFlAwQC -// SIG // AQUAoIIBSjAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQ -// SIG // AQQwLwYJKoZIhvcNAQkEMSIEICub1JDAL/AsiPiNlCbL -// SIG // 6bT/2mCQpgIN5GH9eCiLaYMJMIH6BgsqhkiG9w0BCRAC -// SIG // LzGB6jCB5zCB5DCBvQQgi+vOjaqNTvKOZGut49HXrqtw -// SIG // Uj2ZCnVOurBwfgQxmxMwgZgwgYCkfjB8MQswCQYDVQQG -// SIG // EwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UE -// SIG // BxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENv -// SIG // cnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGlt -// SIG // ZS1TdGFtcCBQQ0EgMjAxMAITMwAAAT7OyndSxfc0KwAA -// SIG // AAABPjAiBCDDg1tbQNT5a0tUZMwkkm3mp0UsTWCruFb9 -// SIG // MCaPExqjRDANBgkqhkiG9w0BAQsFAASCAQBH2iVHVOlH -// SIG // VmptqEcBLS3eNS8ycIqxph4ALRJ1GnEZDaGCyvSiL/y0 -// SIG // 5Vx7GFvWSaRfZ8Kq0BgfWZEYCpq8uZ9gZYy1paDGU6Ps -// SIG // YAZtQZak32SzipkHZsswC7W9ePKfMT4FV4tZtupRBgE6 -// SIG // 9J0PRnpXNRXwtZgAYyiKU8TVQsfUryRXYAKQily9GzwY -// SIG // UG67G7umMk9LnycPNUlEgIbn58qhJ59lMDdbrWigHJLF -// SIG // VXzfvWNXLIsMQKPZPgA1sCaUhLrBu+T3nFUX0R57ve7m -// SIG // Xl2HoGZLdkA4V0pXYO5J7yCAvbGjEzm5lltyyQnYrqfx -// SIG // 0RV0o3+4XN4MV2Blp63JcnTX -// SIG // End signature block diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/driver.c b/Examples/Complete/Camera/Blazor/wwwroot/_framework/driver.c deleted file mode 100644 index 515391815c..0000000000 --- a/Examples/Complete/Camera/Blazor/wwwroot/_framework/driver.c +++ /dev/null @@ -1,1118 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -// FIXME: unavailable in emscripten -// #include - -#include - -#include -#include -#include -#include - -#include "pinvoke.h" - -#ifdef CORE_BINDINGS -void core_initialize_internals (); -#endif - -// Blazor specific custom routines - see dotnet_support.js for backing code -extern void* mono_wasm_invoke_js_blazor (MonoString **exceptionMessage, void *callInfo, void* arg0, void* arg1, void* arg2); -// The following two are for back-compat and will eventually be removed -extern void* mono_wasm_invoke_js_marshalled (MonoString **exceptionMessage, void *asyncHandleLongPtr, MonoString *funcName, MonoString *argsJson); -extern void* mono_wasm_invoke_js_unmarshalled (MonoString **exceptionMessage, MonoString *funcName, void* arg0, void* arg1, void* arg2); - -void mono_wasm_enable_debugging (int); - -int mono_wasm_register_root (char *start, size_t size, const char *name); -void mono_wasm_deregister_root (char *addr); - -void mono_ee_interp_init (const char *opts); -void mono_marshal_ilgen_init (void); -void mono_method_builder_ilgen_init (void); -void mono_sgen_mono_ilgen_init (void); -void mono_icall_table_init (void); -void mono_aot_register_module (void **aot_info); -char *monoeg_g_getenv(const char *variable); -int monoeg_g_setenv(const char *variable, const char *value, int overwrite); -int32_t monoeg_g_hasenv(const char *variable); -void mono_free (void*); -int32_t mini_parse_debug_option (const char *option); -char *mono_method_get_full_name (MonoMethod *method); - -static MonoClass* datetime_class; -static MonoClass* datetimeoffset_class; -static MonoClass* uri_class; -static MonoClass* task_class; -static MonoClass* safehandle_class; -static MonoClass* voidtaskresult_class; - -static int resolved_datetime_class = 0, - resolved_datetimeoffset_class = 0, - resolved_uri_class = 0, - resolved_task_class = 0, - resolved_safehandle_class = 0, - resolved_voidtaskresult_class = 0; - -int mono_wasm_enable_gc = 1; - -/* Not part of public headers */ -#define MONO_ICALL_TABLE_CALLBACKS_VERSION 2 - -typedef struct { - int version; - void* (*lookup) (MonoMethod *method, char *classname, char *methodname, char *sigstart, int32_t *uses_handles); - const char* (*lookup_icall_symbol) (void* func); -} MonoIcallTableCallbacks; - -void -mono_install_icall_table_callbacks (const MonoIcallTableCallbacks *cb); - -int mono_regression_test_step (int verbose_level, char *image, char *method_name); -void mono_trace_init (void); - -#define g_new(type, size) ((type *) malloc (sizeof (type) * (size))) -#define g_new0(type, size) ((type *) calloc (sizeof (type), (size))) - -static MonoDomain *root_domain; - -static MonoString* -mono_wasm_invoke_js (MonoString *str, int *is_exception) -{ - if (str == NULL) - return NULL; - - mono_unichar2 *native_val = mono_string_chars (str); - int native_len = mono_string_length (str) * 2; - int native_res_len; - int *p_native_res_len = &native_res_len; - - mono_unichar2 *native_res = (mono_unichar2*)EM_ASM_INT ({ - var str = MONO.string_decoder.decode ($0, $0 + $1); - try { - var res = eval (str); - if (res === null || res == undefined) - return 0; - res = res.toString (); - setValue ($2, 0, "i32"); - } catch (e) { - res = e.toString(); - setValue ($2, 1, "i32"); - if (res === null || res === undefined) - res = "unknown exception"; - - var stack = e.stack; - if (stack) { - // Some JS runtimes insert the error message at the top of the stack, some don't, - // so normalize it by using the stack as the result if it already contains the error - if (stack.startsWith(res)) - res = stack; - else - res += "\n" + stack; - } - } - var buff = Module._malloc((res.length + 1) * 2); - stringToUTF16 (res, buff, (res.length + 1) * 2); - setValue ($3, res.length, "i32"); - return buff; - }, (int)native_val, native_len, is_exception, p_native_res_len); - - if (native_res == NULL) - return NULL; - - MonoString *res = mono_string_new_utf16 (mono_domain_get (), native_res, native_res_len); - free (native_res); - return res; -} - -static void -wasm_trace_logger (const char *log_domain, const char *log_level, const char *message, mono_bool fatal, void *user_data) -{ - EM_ASM({ - var log_level = $0; - var message = Module.UTF8ToString ($1); - var isFatal = $2; - var domain = Module.UTF8ToString ($3); // is this always Mono? - var dataPtr = $4; - - if (MONO["logging"] && MONO.logging["trace"]) { - MONO.logging.trace(domain, log_level, message, isFatal, dataPtr); - return; - } - - if (isFatal) - console.trace (message); - - switch (Module.UTF8ToString ($0)) { - case "critical": - case "error": - console.error (message); - break; - case "warning": - console.warn (message); - break; - case "message": - console.log (message); - break; - case "info": - console.info (message); - break; - case "debug": - console.debug (message); - break; - default: - console.log (message); - break; - } - }, log_level, message, fatal, log_domain, user_data); -} - -typedef uint32_t target_mword; -typedef target_mword SgenDescriptor; -typedef SgenDescriptor MonoGCDescriptor; -MONO_API int mono_gc_register_root (char *start, size_t size, MonoGCDescriptor descr, MonoGCRootSource source, void *key, const char *msg); -void mono_gc_deregister_root (char* addr); - -EMSCRIPTEN_KEEPALIVE int -mono_wasm_register_root (char *start, size_t size, const char *name) -{ - return mono_gc_register_root (start, size, (MonoGCDescriptor)NULL, MONO_ROOT_SOURCE_EXTERNAL, NULL, name ? name : "mono_wasm_register_root"); -} - -EMSCRIPTEN_KEEPALIVE void -mono_wasm_deregister_root (char *addr) -{ - mono_gc_deregister_root (addr); -} - -#ifdef DRIVER_GEN -#include "driver-gen.c" -#endif - -typedef struct WasmAssembly_ WasmAssembly; - -struct WasmAssembly_ { - MonoBundledAssembly assembly; - WasmAssembly *next; -}; - -static WasmAssembly *assemblies; -static int assembly_count; - -EMSCRIPTEN_KEEPALIVE int -mono_wasm_add_assembly (const char *name, const unsigned char *data, unsigned int size) -{ - int len = strlen (name); - if (!strcasecmp (".pdb", &name [len - 4])) { - char *new_name = strdup (name); - //FIXME handle debugging assemblies with .exe extension - strcpy (&new_name [len - 3], "dll"); - mono_register_symfile_for_assembly (new_name, data, size); - return 1; - } - WasmAssembly *entry = g_new0 (WasmAssembly, 1); - entry->assembly.name = strdup (name); - entry->assembly.data = data; - entry->assembly.size = size; - entry->next = assemblies; - assemblies = entry; - ++assembly_count; - return mono_has_pdb_checksum ((char*)data, size); -} - -int -mono_wasm_assembly_already_added (const char *assembly_name) -{ - if (assembly_count == 0) - return 0; - - WasmAssembly *entry = assemblies; - while (entry != NULL) { - int entry_name_minus_extn_len = strlen(entry->assembly.name) - 4; - if (entry_name_minus_extn_len == strlen(assembly_name) && strncmp (entry->assembly.name, assembly_name, entry_name_minus_extn_len) == 0) - return 1; - entry = entry->next; - } - - return 0; -} - -typedef struct WasmSatelliteAssembly_ WasmSatelliteAssembly; - -struct WasmSatelliteAssembly_ { - MonoBundledSatelliteAssembly *assembly; - WasmSatelliteAssembly *next; -}; - -static WasmSatelliteAssembly *satellite_assemblies; -static int satellite_assembly_count; - -EMSCRIPTEN_KEEPALIVE void -mono_wasm_add_satellite_assembly (const char *name, const char *culture, const unsigned char *data, unsigned int size) -{ - WasmSatelliteAssembly *entry = g_new0 (WasmSatelliteAssembly, 1); - entry->assembly = mono_create_new_bundled_satellite_assembly (name, culture, data, size); - entry->next = satellite_assemblies; - satellite_assemblies = entry; - ++satellite_assembly_count; -} - -EMSCRIPTEN_KEEPALIVE void -mono_wasm_setenv (const char *name, const char *value) -{ - monoeg_g_setenv (strdup (name), strdup (value), 1); -} - -static void *sysglobal_native_handle; - -static void* -wasm_dl_load (const char *name, int flags, char **err, void *user_data) -{ - void* handle = wasm_dl_lookup_pinvoke_table (name); - if (handle) - return handle; - - if (!strcmp (name, "System.Globalization.Native")) - return sysglobal_native_handle; - -#if WASM_SUPPORTS_DLOPEN - return dlopen(name, flags); -#endif - - return NULL; -} - -static void* -wasm_dl_symbol (void *handle, const char *name, char **err, void *user_data) -{ - if (handle == sysglobal_native_handle) - assert (0); - -#if WASM_SUPPORTS_DLOPEN - if (!wasm_dl_is_pinvoke_tables (handle)) { - return dlsym (handle, name); - } -#endif - - PinvokeImport *table = (PinvokeImport*)handle; - for (int i = 0; table [i].name; ++i) { - if (!strcmp (table [i].name, name)) - return table [i].func; - } - return NULL; -} - -#if !defined(ENABLE_AOT) || defined(EE_MODE_LLVMONLY_INTERP) -#define NEED_INTERP 1 -#ifndef LINK_ICALLS -// FIXME: llvm+interp mode needs this to call icalls -#define NEED_NORMAL_ICALL_TABLES 1 -#endif -#endif - -#ifdef LINK_ICALLS - -#include "icall-table.h" - -static int -compare_int (const void *k1, const void *k2) -{ - return *(int*)k1 - *(int*)k2; -} - -static void* -icall_table_lookup (MonoMethod *method, char *classname, char *methodname, char *sigstart, int32_t *uses_handles) -{ - uint32_t token = mono_method_get_token (method); - assert (token); - assert ((token & MONO_TOKEN_METHOD_DEF) == MONO_TOKEN_METHOD_DEF); - uint32_t token_idx = token - MONO_TOKEN_METHOD_DEF; - - int *indexes = NULL; - int indexes_size = 0; - uint8_t *handles = NULL; - void **funcs = NULL; - - *uses_handles = 0; - - const char *image_name = mono_image_get_name (mono_class_get_image (mono_method_get_class (method))); - -#if defined(ICALL_TABLE_mscorlib) - if (!strcmp (image_name, "mscorlib")) { - indexes = mscorlib_icall_indexes; - indexes_size = sizeof (mscorlib_icall_indexes) / 4; - handles = mscorlib_icall_handles; - funcs = mscorlib_icall_funcs; - assert (sizeof (mscorlib_icall_indexes [0]) == 4); - } -#endif -#if defined(ICALL_TABLE_corlib) - if (!strcmp (image_name, "System.Private.CoreLib")) { - indexes = corlib_icall_indexes; - indexes_size = sizeof (corlib_icall_indexes) / 4; - handles = corlib_icall_handles; - funcs = corlib_icall_funcs; - assert (sizeof (corlib_icall_indexes [0]) == 4); - } -#endif -#ifdef ICALL_TABLE_System - if (!strcmp (image_name, "System")) { - indexes = System_icall_indexes; - indexes_size = sizeof (System_icall_indexes) / 4; - handles = System_icall_handles; - funcs = System_icall_funcs; - } -#endif - assert (indexes); - - void *p = bsearch (&token_idx, indexes, indexes_size, 4, compare_int); - if (!p) { - return NULL; - printf ("wasm: Unable to lookup icall: %s\n", mono_method_get_name (method)); - exit (1); - } - - uint32_t idx = (int*)p - indexes; - *uses_handles = handles [idx]; - - //printf ("ICALL: %s %x %d %d\n", methodname, token, idx, (int)(funcs [idx])); - - return funcs [idx]; -} - -static const char* -icall_table_lookup_symbol (void *func) -{ - assert (0); - return NULL; -} - -#endif - -/* - * get_native_to_interp: - * - * Return a pointer to a wasm function which can be used to enter the interpreter to - * execute METHOD from native code. - * EXTRA_ARG is the argument passed to the interp entry functions in the runtime. - */ -void* -get_native_to_interp (MonoMethod *method, void *extra_arg) -{ - MonoClass *klass = mono_method_get_class (method); - MonoImage *image = mono_class_get_image (klass); - MonoAssembly *assembly = mono_image_get_assembly (image); - MonoAssemblyName *aname = mono_assembly_get_name (assembly); - const char *name = mono_assembly_name_get_name (aname); - const char *class_name = mono_class_get_name (klass); - const char *method_name = mono_method_get_name (method); - char key [128]; - int len; - - assert (strlen (name) < 100); - snprintf (key, sizeof(key), "%s_%s_%s", name, class_name, method_name); - len = strlen (key); - for (int i = 0; i < len; ++i) { - if (key [i] == '.') - key [i] = '_'; - } - - void *addr = wasm_dl_get_native_to_interp (key, extra_arg); - return addr; -} - -void mono_initialize_internals () -{ - mono_add_internal_call ("Interop/Runtime::InvokeJS", mono_wasm_invoke_js); - // TODO: what happens when two types in different assemblies have the same FQN? - - // Blazor specific custom routines - see dotnet_support.js for backing code - mono_add_internal_call ("WebAssembly.JSInterop.InternalCalls::InvokeJS", mono_wasm_invoke_js_blazor); - // The following two are for back-compat and will eventually be removed - mono_add_internal_call ("WebAssembly.JSInterop.InternalCalls::InvokeJSMarshalled", mono_wasm_invoke_js_marshalled); - mono_add_internal_call ("WebAssembly.JSInterop.InternalCalls::InvokeJSUnmarshalled", mono_wasm_invoke_js_unmarshalled); - -#ifdef CORE_BINDINGS - core_initialize_internals(); -#endif - -} - -EMSCRIPTEN_KEEPALIVE void -mono_wasm_register_bundled_satellite_assemblies () -{ - /* In legacy satellite_assembly_count is always false */ - if (satellite_assembly_count) { - MonoBundledSatelliteAssembly **satellite_bundle_array = g_new0 (MonoBundledSatelliteAssembly *, satellite_assembly_count + 1); - WasmSatelliteAssembly *cur = satellite_assemblies; - int i = 0; - while (cur) { - satellite_bundle_array [i] = cur->assembly; - cur = cur->next; - ++i; - } - mono_register_bundled_satellite_assemblies ((const MonoBundledSatelliteAssembly **)satellite_bundle_array); - } -} - -void mono_wasm_link_icu_shim (void); - -EMSCRIPTEN_KEEPALIVE void -mono_wasm_load_runtime (const char *unused, int debug_level) -{ - const char *interp_opts = ""; - -#ifndef INVARIANT_GLOBALIZATION - mono_wasm_link_icu_shim (); -#endif - -#ifdef DEBUG - monoeg_g_setenv ("MONO_LOG_LEVEL", "debug", 0); - monoeg_g_setenv ("MONO_LOG_MASK", "gc", 0); - // Setting this env var allows Diagnostic.Debug to write to stderr. In a browser environment this - // output will be sent to the console. Right now this is the only way to emit debug logging from - // corlib assemblies. - monoeg_g_setenv ("COMPlus_DebugWriteToStdErr", "1", 0); -#endif - - const char *appctx_keys[2]; - appctx_keys [0] = "APP_CONTEXT_BASE_DIRECTORY"; - appctx_keys [1] = "RUNTIME_IDENTIFIER"; - - const char *appctx_values[2]; - appctx_values [0] = "/"; - appctx_values [1] = "browser-wasm"; - - monovm_initialize (2, appctx_keys, appctx_values); - - mini_parse_debug_option ("top-runtime-invoke-unhandled"); - - mono_dl_fallback_register (wasm_dl_load, wasm_dl_symbol, NULL, NULL); - mono_wasm_install_get_native_to_interp_tramp (get_native_to_interp); - -#ifdef ENABLE_AOT - monoeg_g_setenv ("MONO_AOT_MODE", "aot", 1); - - // Defined in driver-gen.c - register_aot_modules (); -#ifdef EE_MODE_LLVMONLY_INTERP - mono_jit_set_aot_mode (MONO_AOT_MODE_LLVMONLY_INTERP); -#else - mono_jit_set_aot_mode (MONO_AOT_MODE_LLVMONLY); -#endif -#else - mono_jit_set_aot_mode (MONO_AOT_MODE_INTERP_ONLY); - - /* - * debug_level > 0 enables debugging and sets the debug log level to debug_level - * debug_level == 0 disables debugging and enables interpreter optimizations - * debug_level < 0 enabled debugging and disables debug logging. - * - * Note: when debugging is enabled interpreter optimizations are disabled. - */ - if (debug_level) { - // Disable optimizations which interfere with debugging - interp_opts = "-all"; - mono_wasm_enable_debugging (debug_level); - } - -#endif - -#ifdef LINK_ICALLS - /* Link in our own linked icall table */ - static const MonoIcallTableCallbacks mono_icall_table_callbacks = - { - MONO_ICALL_TABLE_CALLBACKS_VERSION, - icall_table_lookup, - icall_table_lookup_symbol - }; - mono_install_icall_table_callbacks (&mono_icall_table_callbacks); -#endif - -#ifdef NEED_NORMAL_ICALL_TABLES - mono_icall_table_init (); -#endif -#ifdef NEED_INTERP - mono_ee_interp_init (interp_opts); - mono_marshal_ilgen_init (); - mono_method_builder_ilgen_init (); - mono_sgen_mono_ilgen_init (); -#endif - - if (assembly_count) { - MonoBundledAssembly **bundle_array = g_new0 (MonoBundledAssembly*, assembly_count + 1); - WasmAssembly *cur = assemblies; - int i = 0; - while (cur) { - bundle_array [i] = &cur->assembly; - cur = cur->next; - ++i; - } - mono_register_bundled_assemblies ((const MonoBundledAssembly **)bundle_array); - } - - mono_wasm_register_bundled_satellite_assemblies (); - mono_trace_init (); - mono_trace_set_log_handler (wasm_trace_logger, NULL); - root_domain = mono_jit_init_version ("mono", "v4.0.30319"); - - mono_initialize_internals(); - - mono_thread_set_main (mono_thread_current ()); -} - -EMSCRIPTEN_KEEPALIVE MonoAssembly* -mono_wasm_assembly_load (const char *name) -{ - MonoImageOpenStatus status; - MonoAssemblyName* aname = mono_assembly_name_new (name); - if (!name) - return NULL; - - MonoAssembly *res = mono_assembly_load (aname, NULL, &status); - mono_assembly_name_free (aname); - - return res; -} - -EMSCRIPTEN_KEEPALIVE MonoClass* -mono_wasm_find_corlib_class (const char *namespace, const char *name) -{ - return mono_class_from_name (mono_get_corlib (), namespace, name); -} - -EMSCRIPTEN_KEEPALIVE MonoClass* -mono_wasm_assembly_find_class (MonoAssembly *assembly, const char *namespace, const char *name) -{ - return mono_class_from_name (mono_assembly_get_image (assembly), namespace, name); -} - -EMSCRIPTEN_KEEPALIVE MonoMethod* -mono_wasm_assembly_find_method (MonoClass *klass, const char *name, int arguments) -{ - return mono_class_get_method_from_name (klass, name, arguments); -} - -EMSCRIPTEN_KEEPALIVE MonoMethod* -mono_wasm_get_delegate_invoke (MonoObject *delegate) -{ - return mono_get_delegate_invoke(mono_object_get_class (delegate)); -} - -EMSCRIPTEN_KEEPALIVE MonoObject* -mono_wasm_box_primitive (MonoClass *klass, void *value, int value_size) -{ - if (!klass) - return NULL; - - MonoType *type = mono_class_get_type (klass); - int alignment; - if (mono_type_size (type, &alignment) > value_size) - return NULL; - - // TODO: use mono_value_box_checked and propagate error out - return mono_value_box (root_domain, klass, value); -} - -EMSCRIPTEN_KEEPALIVE MonoObject* -mono_wasm_invoke_method (MonoMethod *method, MonoObject *this_arg, void *params[], MonoObject **out_exc) -{ - MonoObject *exc = NULL; - MonoObject *res; - - if (out_exc) - *out_exc = NULL; - res = mono_runtime_invoke (method, this_arg, params, &exc); - if (exc) { - if (out_exc) - *out_exc = exc; - - MonoObject *exc2 = NULL; - res = (MonoObject*)mono_object_to_string (exc, &exc2); - if (exc2) - res = (MonoObject*) mono_string_new (root_domain, "Exception Double Fault"); - return res; - } - - MonoMethodSignature *sig = mono_method_signature (method); - MonoType *type = mono_signature_get_return_type (sig); - // If the method return type is void return null - // This gets around a memory access crash when the result return a value when - // a void method is invoked. - if (mono_type_get_type (type) == MONO_TYPE_VOID) - return NULL; - - return res; -} - -EMSCRIPTEN_KEEPALIVE MonoMethod* -mono_wasm_assembly_get_entry_point (MonoAssembly *assembly) -{ - MonoImage *image; - MonoMethod *method; - - image = mono_assembly_get_image (assembly); - uint32_t entry = mono_image_get_entry_point (image); - if (!entry) - return NULL; - - mono_domain_ensure_entry_assembly (root_domain, assembly); - method = mono_get_method (image, entry, NULL); - - /* - * If the entry point looks like a compiler generated wrapper around - * an async method in the form "" then try to look up the async methods - * "$" and "Name" it could be wrapping. We do this because the generated - * sync wrapper will call task.GetAwaiter().GetResult() when we actually want - * to yield to the host runtime. - */ - if (mono_method_get_flags (method, NULL) & 0x0800 /* METHOD_ATTRIBUTE_SPECIAL_NAME */) { - const char *name = mono_method_get_name (method); - int name_length = strlen (name); - - if ((*name != '<') || (name [name_length - 1] != '>')) - return method; - - MonoClass *klass = mono_method_get_class (method); - char *async_name = malloc (name_length + 2); - snprintf (async_name, name_length + 2, "%s$", name); - - // look for "$" - MonoMethodSignature *sig = mono_method_get_signature (method, image, mono_method_get_token (method)); - MonoMethod *async_method = mono_class_get_method_from_name (klass, async_name, mono_signature_get_param_count (sig)); - if (async_method != NULL) { - free (async_name); - return async_method; - } - - // look for "Name" by trimming the first and last character of "" - async_name [name_length - 1] = '\0'; - async_method = mono_class_get_method_from_name (klass, async_name + 1, mono_signature_get_param_count (sig)); - - free (async_name); - if (async_method != NULL) - return async_method; - } - return method; -} - -EMSCRIPTEN_KEEPALIVE char * -mono_wasm_string_get_utf8 (MonoString *str) -{ - return mono_string_to_utf8 (str); //XXX JS is responsible for freeing this -} - -EMSCRIPTEN_KEEPALIVE void -mono_wasm_string_convert (MonoString *str) -{ - if (str == NULL) - return; - - mono_unichar2 *native_val = mono_string_chars (str); - int native_len = mono_string_length (str) * 2; - - EM_ASM ({ - MONO.string_decoder.decode($0, $0 + $1, true); - }, (int)native_val, native_len); -} - -EMSCRIPTEN_KEEPALIVE MonoString * -mono_wasm_string_from_js (const char *str) -{ - if (str) - return mono_string_new (root_domain, str); - else - return NULL; -} - -EMSCRIPTEN_KEEPALIVE MonoString * -mono_wasm_string_from_utf16 (const mono_unichar2 * chars, int length) -{ - assert (length >= 0); - - if (chars) - return mono_string_new_utf16 (root_domain, chars, length); - else - return NULL; -} - -static int -class_is_task (MonoClass *klass) -{ - if (!task_class && !resolved_task_class) { - task_class = mono_class_from_name (mono_get_corlib(), "System.Threading.Tasks", "Task"); - resolved_task_class = 1; - } - - if (task_class && (klass == task_class || mono_class_is_subclass_of(klass, task_class, 0))) - return 1; - - return 0; -} - -MonoClass* mono_get_uri_class(MonoException** exc) -{ - MonoAssembly* assembly = mono_wasm_assembly_load ("System"); - if (!assembly) - return NULL; - MonoClass* klass = mono_wasm_assembly_find_class(assembly, "System", "Uri"); - return klass; -} - -#define MARSHAL_TYPE_INT 1 -#define MARSHAL_TYPE_FP64 2 -#define MARSHAL_TYPE_STRING 3 -#define MARSHAL_TYPE_VT 4 -#define MARSHAL_TYPE_DELEGATE 5 -#define MARSHAL_TYPE_TASK 6 -#define MARSHAL_TYPE_OBJECT 7 -#define MARSHAL_TYPE_BOOL 8 -#define MARSHAL_TYPE_ENUM 9 -#define MARSHAL_TYPE_DATE 20 -#define MARSHAL_TYPE_DATEOFFSET 21 -#define MARSHAL_TYPE_URI 22 -#define MARSHAL_TYPE_SAFEHANDLE 23 - -// typed array marshalling -#define MARSHAL_ARRAY_BYTE 10 -#define MARSHAL_ARRAY_UBYTE 11 -#define MARSHAL_ARRAY_UBYTE_C 12 -#define MARSHAL_ARRAY_SHORT 13 -#define MARSHAL_ARRAY_USHORT 14 -#define MARSHAL_ARRAY_INT 15 -#define MARSHAL_ARRAY_UINT 16 -#define MARSHAL_ARRAY_FLOAT 17 -#define MARSHAL_ARRAY_DOUBLE 18 - -#define MARSHAL_TYPE_FP32 24 -#define MARSHAL_TYPE_UINT32 25 -#define MARSHAL_TYPE_INT64 26 -#define MARSHAL_TYPE_UINT64 27 -#define MARSHAL_TYPE_CHAR 28 -#define MARSHAL_TYPE_STRING_INTERNED 29 -#define MARSHAL_TYPE_VOID 30 - -void mono_wasm_ensure_classes_resolved () -{ - if (!datetime_class && !resolved_datetime_class) { - datetime_class = mono_class_from_name (mono_get_corlib(), "System", "DateTime"); - resolved_datetime_class = 1; - } - if (!datetimeoffset_class && !resolved_datetimeoffset_class) { - datetimeoffset_class = mono_class_from_name (mono_get_corlib(), "System", "DateTimeOffset"); - resolved_datetimeoffset_class = 1; - } - if (!uri_class && !resolved_uri_class) { - MonoException** exc = NULL; - uri_class = mono_get_uri_class(exc); - resolved_uri_class = 1; - } - if (!safehandle_class && !resolved_safehandle_class) { - safehandle_class = mono_class_from_name (mono_get_corlib(), "System.Runtime.InteropServices", "SafeHandle"); - resolved_safehandle_class = 1; - } - if (!voidtaskresult_class && !resolved_voidtaskresult_class) { - voidtaskresult_class = mono_class_from_name (mono_get_corlib(), "System.Threading.Tasks", "VoidTaskResult"); - resolved_voidtaskresult_class = 1; - } -} - -int -mono_wasm_marshal_type_from_mono_type (int mono_type, MonoClass *klass, MonoType *type) -{ - switch (mono_type) { - // case MONO_TYPE_CHAR: prob should be done not as a number? - case MONO_TYPE_BOOLEAN: - return MARSHAL_TYPE_BOOL; - case MONO_TYPE_I1: - case MONO_TYPE_U1: - case MONO_TYPE_I2: - case MONO_TYPE_U2: - case MONO_TYPE_I4: - case MONO_TYPE_I: // IntPtr - return MARSHAL_TYPE_INT; - case MONO_TYPE_CHAR: - return MARSHAL_TYPE_CHAR; - case MONO_TYPE_U4: // The distinction between this and signed int is - // important due to how numbers work in JavaScript - return MARSHAL_TYPE_UINT32; - case MONO_TYPE_I8: - return MARSHAL_TYPE_INT64; - case MONO_TYPE_U8: - return MARSHAL_TYPE_UINT64; - case MONO_TYPE_R4: - return MARSHAL_TYPE_FP32; - case MONO_TYPE_R8: - return MARSHAL_TYPE_FP64; - case MONO_TYPE_STRING: - return MARSHAL_TYPE_STRING; - case MONO_TYPE_SZARRAY: { // simple zero based one-dim-array - MonoClass *eklass = mono_class_get_element_class (klass); - MonoType *etype = mono_class_get_type (eklass); - - switch (mono_type_get_type (etype)) { - case MONO_TYPE_U1: - return MARSHAL_ARRAY_UBYTE; - case MONO_TYPE_I1: - return MARSHAL_ARRAY_BYTE; - case MONO_TYPE_U2: - return MARSHAL_ARRAY_USHORT; - case MONO_TYPE_I2: - return MARSHAL_ARRAY_SHORT; - case MONO_TYPE_U4: - return MARSHAL_ARRAY_UINT; - case MONO_TYPE_I4: - return MARSHAL_ARRAY_INT; - case MONO_TYPE_R4: - return MARSHAL_ARRAY_FLOAT; - case MONO_TYPE_R8: - return MARSHAL_ARRAY_DOUBLE; - default: - return MARSHAL_TYPE_OBJECT; - } - } - default: - mono_wasm_ensure_classes_resolved (); - - if (klass == datetime_class) - return MARSHAL_TYPE_DATE; - if (klass == datetimeoffset_class) - return MARSHAL_TYPE_DATEOFFSET; - if (uri_class && mono_class_is_assignable_from(uri_class, klass)) - return MARSHAL_TYPE_URI; - if (klass == voidtaskresult_class) - return MARSHAL_TYPE_VOID; - if (mono_class_is_enum (klass)) - return MARSHAL_TYPE_ENUM; - if (!mono_type_is_reference (type)) //vt - return MARSHAL_TYPE_VT; - if (mono_class_is_delegate (klass)) - return MARSHAL_TYPE_DELEGATE; - if (class_is_task(klass)) - return MARSHAL_TYPE_TASK; - if (safehandle_class && (klass == safehandle_class || mono_class_is_subclass_of(klass, safehandle_class, 0))) { - return MARSHAL_TYPE_SAFEHANDLE; - } - - return MARSHAL_TYPE_OBJECT; - } -} - -EMSCRIPTEN_KEEPALIVE int -mono_wasm_get_obj_type (MonoObject *obj) -{ - if (!obj) - return 0; - - /* Process obj before calling into the runtime, class_from_name () can invoke managed code */ - MonoClass *klass = mono_object_get_class (obj); - if ((klass == mono_get_string_class ()) && - (mono_string_is_interned ((MonoString *)obj) == (MonoString *)obj)) - return MARSHAL_TYPE_STRING_INTERNED; - - MonoType *type = mono_class_get_type (klass); - obj = NULL; - - int mono_type = mono_type_get_type (type); - - return mono_wasm_marshal_type_from_mono_type (mono_type, klass, type); -} - -EMSCRIPTEN_KEEPALIVE int -mono_wasm_try_unbox_primitive_and_get_type (MonoObject *obj, void *result) -{ - int *resultI = result; - int64_t *resultL = result; - float *resultF = result; - double *resultD = result; - - if (!obj) { - *resultL = 0; - return 0; - } - - /* Process obj before calling into the runtime, class_from_name () can invoke managed code */ - MonoClass *klass = mono_object_get_class (obj); - if ((klass == mono_get_string_class ()) && - (mono_string_is_interned ((MonoString *)obj) == (MonoString *)obj)) { - *resultL = 0; - return MARSHAL_TYPE_STRING_INTERNED; - } - - MonoType *type = mono_class_get_type (klass), *original_type = type; - - if (mono_class_is_enum (klass)) - type = mono_type_get_underlying_type (type); - - int mono_type = mono_type_get_type (type); - - // FIXME: We would prefer to unbox once here but it will fail if the value isn't unboxable - - switch (mono_type) { - case MONO_TYPE_I1: - case MONO_TYPE_BOOLEAN: - *resultI = *(signed char*)mono_object_unbox (obj); - break; - case MONO_TYPE_U1: - *resultI = *(unsigned char*)mono_object_unbox (obj); - break; - case MONO_TYPE_I2: - case MONO_TYPE_CHAR: - *resultI = *(short*)mono_object_unbox (obj); - break; - case MONO_TYPE_U2: - *resultI = *(unsigned short*)mono_object_unbox (obj); - break; - case MONO_TYPE_I4: - case MONO_TYPE_I: - *resultI = *(int*)mono_object_unbox (obj); - break; - case MONO_TYPE_U4: - // FIXME: Will this behave the way we want for large unsigned values? - *resultI = *(int*)mono_object_unbox (obj); - break; - case MONO_TYPE_R4: - *resultF = *(float*)mono_object_unbox (obj); - break; - case MONO_TYPE_R8: - *resultD = *(double*)mono_object_unbox (obj); - break; - case MONO_TYPE_I8: - case MONO_TYPE_U8: - // FIXME: At present the javascript side of things can't handle this, - // but there's no reason not to future-proof this API - *resultL = *(int64_t*)mono_object_unbox (obj); - break; - default: - // If we failed to do a fast unboxing, return the original type information so - // that the caller can do a proper, slow unboxing later - *resultL = 0; - obj = NULL; - return mono_wasm_marshal_type_from_mono_type (mono_type, klass, original_type); - } - - // We successfully performed a fast unboxing here so use the type information - // matching what we unboxed (i.e. an enum's underlying type instead of its type) - obj = NULL; - return mono_wasm_marshal_type_from_mono_type (mono_type, klass, type); -} - -// FIXME: This function is retained specifically because runtime-test.js uses it -EMSCRIPTEN_KEEPALIVE int -mono_unbox_int (MonoObject *obj) -{ - if (!obj) - return 0; - MonoType *type = mono_class_get_type (mono_object_get_class(obj)); - - void *ptr = mono_object_unbox (obj); - switch (mono_type_get_type (type)) { - case MONO_TYPE_I1: - case MONO_TYPE_BOOLEAN: - return *(signed char*)ptr; - case MONO_TYPE_U1: - return *(unsigned char*)ptr; - case MONO_TYPE_I2: - return *(short*)ptr; - case MONO_TYPE_U2: - return *(unsigned short*)ptr; - case MONO_TYPE_I4: - case MONO_TYPE_I: - return *(int*)ptr; - case MONO_TYPE_U4: - return *(unsigned int*)ptr; - case MONO_TYPE_CHAR: - return *(short*)ptr; - // WASM doesn't support returning longs to JS - // case MONO_TYPE_I8: - // case MONO_TYPE_U8: - default: - printf ("Invalid type %d to mono_unbox_int\n", mono_type_get_type (type)); - return 0; - } -} - -EMSCRIPTEN_KEEPALIVE int -mono_wasm_array_length (MonoArray *array) -{ - return mono_array_length (array); -} - -EMSCRIPTEN_KEEPALIVE MonoObject* -mono_wasm_array_get (MonoArray *array, int idx) -{ - return mono_array_get (array, MonoObject*, idx); -} - -EMSCRIPTEN_KEEPALIVE MonoArray* -mono_wasm_obj_array_new (int size) -{ - return mono_array_new (root_domain, mono_get_object_class (), size); -} - -EMSCRIPTEN_KEEPALIVE void -mono_wasm_obj_array_set (MonoArray *array, int idx, MonoObject *obj) -{ - mono_array_setref (array, idx, obj); -} - -EMSCRIPTEN_KEEPALIVE MonoArray* -mono_wasm_string_array_new (int size) -{ - return mono_array_new (root_domain, mono_get_string_class (), size); -} - -EMSCRIPTEN_KEEPALIVE int -mono_wasm_exec_regression (int verbose_level, char *image) -{ - return mono_regression_test_step (verbose_level, image, NULL) ? 0 : 1; -} - -EMSCRIPTEN_KEEPALIVE int -mono_wasm_exit (int exit_code) -{ - exit (exit_code); -} - -EMSCRIPTEN_KEEPALIVE void -mono_wasm_set_main_args (int argc, char* argv[]) -{ - mono_runtime_set_main_args (argc, argv); -} - -EMSCRIPTEN_KEEPALIVE int -mono_wasm_strdup (const char *s) -{ - return (int)strdup (s); -} - -EMSCRIPTEN_KEEPALIVE void -mono_wasm_parse_runtime_options (int argc, char* argv[]) -{ - mono_jit_parse_options (argc, argv); -} - -EMSCRIPTEN_KEEPALIVE void -mono_wasm_enable_on_demand_gc (int enable) -{ - mono_wasm_enable_gc = enable ? 1 : 0; -} - -EMSCRIPTEN_KEEPALIVE MonoString * -mono_wasm_intern_string (MonoString *string) -{ - return mono_string_intern (string); -} diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/emcc-flags.txt b/Examples/Complete/Camera/Blazor/wwwroot/_framework/emcc-flags.txt deleted file mode 100644 index bfcdcb7cdc..0000000000 --- a/Examples/Complete/Camera/Blazor/wwwroot/_framework/emcc-flags.txt +++ /dev/null @@ -1 +0,0 @@ ---profiling-funcs -s ALLOW_MEMORY_GROWTH=1 -s NO_EXIT_RUNTIME=1 -s FORCE_FILESYSTEM=1 -s "EXTRA_EXPORTED_RUNTIME_METHODS=['ccall', 'FS_createPath', 'FS_createDataFile', 'cwrap', 'setValue', 'getValue', 'UTF8ToString', 'UTF8ArrayToString', 'addFunction']" -s "EXPORTED_FUNCTIONS=['_putchar']" --source-map-base http://example.com -emit-llvm -DENABLE_METADATA_UPDATE=1 -Oz --llvm-opts 2 diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/emcc-version.txt b/Examples/Complete/Camera/Blazor/wwwroot/_framework/emcc-version.txt deleted file mode 100644 index 8fd4e7025b..0000000000 --- a/Examples/Complete/Camera/Blazor/wwwroot/_framework/emcc-version.txt +++ /dev/null @@ -1 +0,0 @@ -emcc (Emscripten gcc/clang-like replacement + linker emulating GNU ld) 2.0.12 (d0e647bf266caad50943e78c9841e05e9c499a5d) diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/icudt.dat b/Examples/Complete/Camera/Blazor/wwwroot/_framework/icudt.dat deleted file mode 100644 index c527c4d8e9..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/icudt.dat and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/icudt_CJK.dat b/Examples/Complete/Camera/Blazor/wwwroot/_framework/icudt_CJK.dat deleted file mode 100644 index 39a71c5538..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/icudt_CJK.dat and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/icudt_EFIGS.dat b/Examples/Complete/Camera/Blazor/wwwroot/_framework/icudt_EFIGS.dat deleted file mode 100644 index 924353157a..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/icudt_EFIGS.dat and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/icudt_no_CJK.dat b/Examples/Complete/Camera/Blazor/wwwroot/_framework/icudt_no_CJK.dat deleted file mode 100644 index 2e696e256c..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/icudt_no_CJK.dat and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/library_mono.js b/Examples/Complete/Camera/Blazor/wwwroot/_framework/library_mono.js deleted file mode 100644 index 096cd00cc7..0000000000 --- a/Examples/Complete/Camera/Blazor/wwwroot/_framework/library_mono.js +++ /dev/null @@ -1,2804 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -/** - * @typedef WasmId - * @type {object} - * @property {string} idStr - full object id string - * @property {string} scheme - eg, object, valuetype, array .. - * @property {string} value - string part after `dotnet:scheme:` of the id string - * @property {object} o - value parsed as JSON - */ - -/** - * @typedef WasmRoot - a single address in the managed heap, visible to the GC - * @type {object} - * @property {ManagedPointer} value - pointer into the managed heap, stored in the root - * @property {function} get_address - retrieves address of the root in wasm memory - * @property {function} get - retrieves pointer value - * @property {function} set - updates the pointer - * @property {function} release - releases the root storage for future use - */ - -/** - * @typedef WasmRootBuffer - a collection of addresses in the managed heap, visible to the GC - * @type {object} - * @property {number} length - number of elements the root buffer can hold - * @property {function} get_address - retrieves address of an element in wasm memory, by index - * @property {function} get - retrieves an element by index - * @property {function} set - sets an element's value by index - * @property {function} release - releases the root storage for future use - */ - -/** - * @typedef ManagedPointer - * @type {number} - address in the managed heap - */ - -/** - * @typedef NativePointer - * @type {number} - address in wasm memory - */ - -/** - * @typedef Event - * @type {object} - * @property {string} eventName - name of the event being raised - * @property {object} eventArgs - arguments for the event itself - */ - -var MonoSupportLib = { - $MONO__postset: 'MONO.export_functions (Module);', - $MONO: { - pump_count: 0, - timeout_queue: [], - _vt_stack: [], - mono_wasm_runtime_is_ready : false, - mono_wasm_ignore_pdb_load_errors: true, - - /** @type {object.} */ - _id_table: {}, - - pump_message: function () { - if (!this.mono_background_exec) - this.mono_background_exec = Module.cwrap ("mono_background_exec", null); - while (MONO.timeout_queue.length > 0) { - --MONO.pump_count; - MONO.timeout_queue.shift()(); - } - while (MONO.pump_count > 0) { - --MONO.pump_count; - this.mono_background_exec (); - } - }, - - export_functions: function (module) { - module ["pump_message"] = MONO.pump_message.bind(MONO); - module ["mono_load_runtime_and_bcl"] = MONO.mono_load_runtime_and_bcl.bind(MONO); - module ["mono_load_runtime_and_bcl_args"] = MONO.mono_load_runtime_and_bcl_args.bind(MONO); - module ["mono_wasm_load_bytes_into_heap"] = MONO.mono_wasm_load_bytes_into_heap.bind(MONO); - module ["mono_wasm_load_icu_data"] = MONO.mono_wasm_load_icu_data.bind(MONO); - module ["mono_wasm_get_icudt_name"] = MONO.mono_wasm_get_icudt_name.bind(MONO); - module ["mono_wasm_globalization_init"] = MONO.mono_wasm_globalization_init.bind(MONO); - module ["mono_wasm_get_loaded_files"] = MONO.mono_wasm_get_loaded_files.bind(MONO); - module ["mono_wasm_new_root_buffer"] = MONO.mono_wasm_new_root_buffer.bind(MONO); - module ["mono_wasm_new_root_buffer_from_pointer"] = MONO.mono_wasm_new_root_buffer_from_pointer.bind(MONO); - module ["mono_wasm_new_root"] = MONO.mono_wasm_new_root.bind(MONO); - module ["mono_wasm_new_roots"] = MONO.mono_wasm_new_roots.bind(MONO); - module ["mono_wasm_release_roots"] = MONO.mono_wasm_release_roots.bind(MONO); - }, - - _base64Converter: { - // Code from JSIL: - // https://github.com/sq/JSIL/blob/1d57d5427c87ab92ffa3ca4b82429cd7509796ba/JSIL.Libraries/Includes/Bootstrap/Core/Classes/System.Convert.js#L149 - // Thanks to Katelyn Gadd @kg - - _base64Table: [ - 'A', 'B', 'C', 'D', - 'E', 'F', 'G', 'H', - 'I', 'J', 'K', 'L', - 'M', 'N', 'O', 'P', - 'Q', 'R', 'S', 'T', - 'U', 'V', 'W', 'X', - 'Y', 'Z', - 'a', 'b', 'c', 'd', - 'e', 'f', 'g', 'h', - 'i', 'j', 'k', 'l', - 'm', 'n', 'o', 'p', - 'q', 'r', 's', 't', - 'u', 'v', 'w', 'x', - 'y', 'z', - '0', '1', '2', '3', - '4', '5', '6', '7', - '8', '9', - '+', '/' - ], - - _makeByteReader: function (bytes, index, count) { - var position = (typeof (index) === "number") ? index : 0; - var endpoint; - - if (typeof (count) === "number") - endpoint = (position + count); - else - endpoint = (bytes.length - position); - - var result = { - read: function () { - if (position >= endpoint) - return false; - - var nextByte = bytes[position]; - position += 1; - return nextByte; - } - }; - - Object.defineProperty(result, "eof", { - get: function () { - return (position >= endpoint); - }, - configurable: true, - enumerable: true - }); - - return result; - }, - - toBase64StringImpl: function (inArray, offset, length) { - var reader = this._makeByteReader(inArray, offset, length); - var result = ""; - var ch1 = 0, ch2 = 0, ch3 = 0, bits = 0, equalsCount = 0, sum = 0; - var mask1 = (1 << 24) - 1, mask2 = (1 << 18) - 1, mask3 = (1 << 12) - 1, mask4 = (1 << 6) - 1; - var shift1 = 18, shift2 = 12, shift3 = 6, shift4 = 0; - - while (true) { - ch1 = reader.read(); - ch2 = reader.read(); - ch3 = reader.read(); - - if (ch1 === false) - break; - if (ch2 === false) { - ch2 = 0; - equalsCount += 1; - } - if (ch3 === false) { - ch3 = 0; - equalsCount += 1; - } - - // Seems backwards, but is right! - sum = (ch1 << 16) | (ch2 << 8) | (ch3 << 0); - - bits = (sum & mask1) >> shift1; - result += this._base64Table[bits]; - bits = (sum & mask2) >> shift2; - result += this._base64Table[bits]; - - if (equalsCount < 2) { - bits = (sum & mask3) >> shift3; - result += this._base64Table[bits]; - } - - if (equalsCount === 2) { - result += "=="; - } else if (equalsCount === 1) { - result += "="; - } else { - bits = (sum & mask4) >> shift4; - result += this._base64Table[bits]; - } - } - - return result; - }, - }, - - _mono_wasm_root_buffer_prototype: { - _throw_index_out_of_range: function () { - throw new Error ("index out of range"); - }, - _check_in_range: function (index) { - if ((index >= this.__count) || (index < 0)) - this._throw_index_out_of_range(); - }, - /** @returns {NativePointer} */ - get_address: function (index) { - this._check_in_range (index); - return this.__offset + (index * 4); - }, - /** @returns {number} */ - get_address_32: function (index) { - this._check_in_range (index); - return this.__offset32 + index; - }, - /** @returns {ManagedPointer} */ - get: function (index) { - this._check_in_range (index); - return Module.HEAP32[this.get_address_32 (index)]; - }, - set: function (index, value) { - Module.HEAP32[this.get_address_32 (index)] = value; - return value; - }, - _unsafe_get: function (index) { - return Module.HEAP32[this.__offset32 + index]; - }, - _unsafe_set: function (index, value) { - Module.HEAP32[this.__offset32 + index] = value; - }, - clear: function () { - if (this.__offset) - MONO._zero_region (this.__offset, this.__count * 4); - }, - release: function () { - if (this.__offset && this.__ownsAllocation) { - MONO.mono_wasm_deregister_root (this.__offset); - MONO._zero_region (this.__offset, this.__count * 4); - Module._free (this.__offset); - } - - this.__handle = this.__offset = this.__count = this.__offset32 = 0; - }, - toString: function () { - return "[root buffer @" + this.get_address (0) + ", size " + this.__count + "]"; - } - }, - - _scratch_root_buffer: null, - _scratch_root_free_indices: null, - _scratch_root_free_indices_count: 0, - _scratch_root_free_instances: [], - - _mono_wasm_root_prototype: { - /** @returns {NativePointer} */ - get_address: function () { - return this.__buffer.get_address (this.__index); - }, - /** @returns {number} */ - get_address_32: function () { - return this.__buffer.get_address_32 (this.__index); - }, - /** @returns {ManagedPointer} */ - get: function () { - var result = this.__buffer._unsafe_get (this.__index); - return result; - }, - set: function (value) { - this.__buffer._unsafe_set (this.__index, value); - return value; - }, - /** @returns {ManagedPointer} */ - valueOf: function () { - return this.get (); - }, - clear: function () { - this.set (0); - }, - release: function () { - const maxPooledInstances = 128; - if (MONO._scratch_root_free_instances.length > maxPooledInstances) { - MONO._mono_wasm_release_scratch_index (this.__index); - this.__buffer = 0; - this.__index = 0; - } else { - this.set (0); - MONO._scratch_root_free_instances.push (this); - } - }, - toString: function () { - return "[root @" + this.get_address () + "]"; - } - }, - - _mono_wasm_release_scratch_index: function (index) { - if (index === undefined) - return; - - this._scratch_root_buffer.set (index, 0); - this._scratch_root_free_indices[this._scratch_root_free_indices_count] = index; - this._scratch_root_free_indices_count++; - }, - - _mono_wasm_claim_scratch_index: function () { - if (!this._scratch_root_buffer) { - const maxScratchRoots = 8192; - this._scratch_root_buffer = this.mono_wasm_new_root_buffer (maxScratchRoots, "js roots"); - - this._scratch_root_free_indices = new Int32Array (maxScratchRoots); - this._scratch_root_free_indices_count = maxScratchRoots; - for (var i = 0; i < maxScratchRoots; i++) - this._scratch_root_free_indices[i] = maxScratchRoots - i - 1; - - Object.defineProperty (this._mono_wasm_root_prototype, "value", { - get: this._mono_wasm_root_prototype.get, - set: this._mono_wasm_root_prototype.set, - configurable: false - }); - } - - if (this._scratch_root_free_indices_count < 1) - throw new Error ("Out of scratch root space"); - - var result = this._scratch_root_free_indices[this._scratch_root_free_indices_count - 1]; - this._scratch_root_free_indices_count--; - return result; - }, - - _zero_region: function (byteOffset, sizeBytes) { - if (((byteOffset % 4) === 0) && ((sizeBytes % 4) === 0)) - Module.HEAP32.fill(0, byteOffset / 4, sizeBytes / 4); - else - Module.HEAP8.fill(0, byteOffset, sizeBytes); - }, - - /** - * Allocates a block of memory that can safely contain pointers into the managed heap. - * The result object has get(index) and set(index, value) methods that can be used to retrieve and store managed pointers. - * Once you are done using the root buffer, you must call its release() method. - * For small numbers of roots, it is preferable to use the mono_wasm_new_root and mono_wasm_new_roots APIs instead. - * @param {number} capacity - the maximum number of elements the buffer can hold. - * @param {string} [msg] - a description of the root buffer (for debugging) - * @returns {WasmRootBuffer} - */ - mono_wasm_new_root_buffer: function (capacity, msg) { - if (!this.mono_wasm_register_root || !this.mono_wasm_deregister_root) { - this.mono_wasm_register_root = Module.cwrap ("mono_wasm_register_root", "number", ["number", "number", "string"]); - this.mono_wasm_deregister_root = Module.cwrap ("mono_wasm_deregister_root", null, ["number"]); - } - - if (capacity <= 0) - throw new Error ("capacity >= 1"); - - capacity = capacity | 0; - - var capacityBytes = capacity * 4; - var offset = Module._malloc (capacityBytes); - if ((offset % 4) !== 0) - throw new Error ("Malloc returned an unaligned offset"); - - this._zero_region (offset, capacityBytes); - - var result = Object.create (this._mono_wasm_root_buffer_prototype); - result.__offset = offset; - result.__offset32 = (offset / 4) | 0; - result.__count = capacity; - result.length = capacity; - result.__handle = this.mono_wasm_register_root (offset, capacityBytes, msg || 0); - result.__ownsAllocation = true; - - return result; - }, - - /** - * Creates a root buffer object representing an existing allocation in the native heap and registers - * the allocation with the GC. The caller is responsible for managing the lifetime of the allocation. - * @param {NativePointer} offset - the offset of the root buffer in the native heap. - * @param {number} capacity - the maximum number of elements the buffer can hold. - * @param {string} [msg] - a description of the root buffer (for debugging) - * @returns {WasmRootBuffer} - */ - mono_wasm_new_root_buffer_from_pointer: function (offset, capacity, msg) { - if (!this.mono_wasm_register_root || !this.mono_wasm_deregister_root) { - this.mono_wasm_register_root = Module.cwrap ("mono_wasm_register_root", "number", ["number", "number", "string"]); - this.mono_wasm_deregister_root = Module.cwrap ("mono_wasm_deregister_root", null, ["number"]); - } - - if (capacity <= 0) - throw new Error ("capacity >= 1"); - - capacity = capacity | 0; - - var capacityBytes = capacity * 4; - if ((offset % 4) !== 0) - throw new Error ("Unaligned offset"); - - this._zero_region (offset, capacityBytes); - - var result = Object.create (this._mono_wasm_root_buffer_prototype); - result.__offset = offset; - result.__offset32 = (offset / 4) | 0; - result.__count = capacity; - result.length = capacity; - result.__handle = this.mono_wasm_register_root (offset, capacityBytes, msg || 0); - result.__ownsAllocation = false; - - return result; - }, - - /** - * Allocates temporary storage for a pointer into the managed heap. - * Pointers stored here will be visible to the GC, ensuring that the object they point to aren't moved or collected. - * If you already have a managed pointer you can pass it as an argument to initialize the temporary storage. - * The result object has get() and set(value) methods, along with a .value property. - * When you are done using the root you must call its .release() method. - * @param {ManagedPointer} [value] - an address in the managed heap to initialize the root with (or 0) - * @returns {WasmRoot} - */ - mono_wasm_new_root: function (value) { - var result; - - if (this._scratch_root_free_instances.length > 0) { - result = this._scratch_root_free_instances.pop (); - } else { - var index = this._mono_wasm_claim_scratch_index (); - var buffer = this._scratch_root_buffer; - - result = Object.create (this._mono_wasm_root_prototype); - result.__buffer = buffer; - result.__index = index; - } - - if (value !== undefined) { - if (typeof (value) !== "number") - throw new Error ("value must be an address in the managed heap"); - - result.set (value); - } else { - result.set (0); - } - - return result; - }, - - /** - * Allocates 1 or more temporary roots, accepting either a number of roots or an array of pointers. - * mono_wasm_new_roots(n): returns an array of N zero-initialized roots. - * mono_wasm_new_roots([a, b, ...]) returns an array of new roots initialized with each element. - * Each root must be released with its release method, or using the mono_wasm_release_roots API. - * @param {(number | ManagedPointer[])} count_or_values - either a number of roots or an array of pointers - * @returns {WasmRoot[]} - */ - mono_wasm_new_roots: function (count_or_values) { - var result; - - if (Array.isArray (count_or_values)) { - result = new Array (count_or_values.length); - for (var i = 0; i < result.length; i++) - result[i] = this.mono_wasm_new_root (count_or_values[i]); - } else if ((count_or_values | 0) > 0) { - result = new Array (count_or_values); - for (var i = 0; i < result.length; i++) - result[i] = this.mono_wasm_new_root (); - } else { - throw new Error ("count_or_values must be either an array or a number greater than 0"); - } - - return result; - }, - - /** - * Releases 1 or more root or root buffer objects. - * Multiple objects may be passed on the argument list. - * 'undefined' may be passed as an argument so it is safe to call this method from finally blocks - * even if you are not sure all of your roots have been created yet. - * @param {... WasmRoot} roots - */ - mono_wasm_release_roots: function () { - for (var i = 0; i < arguments.length; i++) { - if (!arguments[i]) - continue; - - arguments[i].release (); - } - }, - - mono_text_decoder: undefined, - string_decoder: { - copy: function (mono_string) { - if (mono_string == 0) - return null; - - if (!this.mono_wasm_string_convert) - this.mono_wasm_string_convert = Module.cwrap ("mono_wasm_string_convert", null, ['number']); - - this.mono_wasm_string_convert (mono_string); - var result = this.result; - this.result = undefined; - return result; - }, - decode: function (start, end, save) { - if (!MONO.mono_text_decoder) { - MONO.mono_text_decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-16le') : undefined; - } - - var str = ""; - if (MONO.mono_text_decoder) { - // When threading is enabled, TextDecoder does not accept a view of a - // SharedArrayBuffer, we must make a copy of the array first. - var subArray = typeof SharedArrayBuffer !== 'undefined' && Module.HEAPU8.buffer instanceof SharedArrayBuffer - ? Module.HEAPU8.slice(start, end) - : Module.HEAPU8.subarray(start, end); - - str = MONO.mono_text_decoder.decode(subArray); - } else { - for (var i = 0; i < end - start; i+=2) { - var char = Module.getValue (start + i, 'i16'); - str += String.fromCharCode (char); - } - } - if (save) - this.result = str; - - return str; - }, - }, - - mono_wasm_get_exception_object: function() { - var exception_obj = MONO.active_exception; - MONO.active_exception = null; - return exception_obj ; - }, - - mono_wasm_get_call_stack: function() { - if (!this.mono_wasm_current_bp_id) - this.mono_wasm_current_bp_id = Module.cwrap ("mono_wasm_current_bp_id", 'number'); - if (!this.mono_wasm_enum_frames) - this.mono_wasm_enum_frames = Module.cwrap ("mono_wasm_enum_frames", null); - - var bp_id = this.mono_wasm_current_bp_id (); - this.active_frames = []; - this.mono_wasm_enum_frames (); - - var the_frames = this.active_frames; - this.active_frames = []; - return { - "breakpoint_id": bp_id, - "frames": the_frames, - }; - }, - - _fixup_name_value_objects: function (var_list) { - let out_list = []; - - var i = 0; - while (i < var_list.length) { - let o = var_list [i]; - const this_has_name = o.name !== undefined; - let next_has_value_or_get_set = false; - - if (i + 1 < var_list.length) { - const next = var_list [i+1]; - next_has_value_or_get_set = next.value !== undefined || next.get !== undefined || next.set !== undefined; - } - - if (!this_has_name) { - // insert the object as-is - // Eg. in case of locals, the names are added - // later - i ++; - } else if (next_has_value_or_get_set) { - // found a {name} followed by a {value/get} - o = Object.assign (o, var_list [i + 1]); - i += 2; - } else { - // missing value/get, so add a placeholder one - o.value = { - type: "symbol", - value: "", - description: "" - }; - i ++; - } - - out_list.push (o); - } - - return out_list; - }, - - _filter_automatic_properties: function (props, accessors_only=false) { - // Note: members in @props, have derived class members, followed by - // those from parent classes - - // Note: Auto-properties have backing fields, named with a special suffix. - // @props here will have the backing field, *and* the getter. - // - // But we want to return only one name/value pair: - // [name of the auto-property] = value of the backing field - - let getters = {}; - let all_fields_except_backing_fields = {}; - let backing_fields = {}; - - // Split props into the 3 groups - backing_fields, getters, and all_fields_except_backing_fields - props.forEach(p => { - if (p.name === undefined) { - console.debug(`Bug: Found a member with no name. Skipping it. p: ${JSON.stringify(p)}`); - return; - } - - if (p.name.endsWith('k__BackingField')) { - const auto_prop_name = p.name.replace ('k__BackingField', '') - .replace ('<', '') - .replace ('>', ''); - - // Only take the first one, as that is overriding others - if (!(auto_prop_name in backing_fields)) - backing_fields[auto_prop_name] = Object.assign(p, { name: auto_prop_name }); - - } else if (p.get !== undefined) { - // if p wasn't overridden by a getter or a field, - // from a more derived class - if (!(p.name in getters) && !(p.name in all_fields_except_backing_fields)) - getters[p.name] = p; - - } else if (!(p.name in all_fields_except_backing_fields)) { - all_fields_except_backing_fields[p.name] = p; - } - }); - - // Filter/merge backing fields, and getters - Object.values(backing_fields).forEach(backing_field => { - const auto_prop_name = backing_field.name; - const getter = getters[auto_prop_name]; - - if (getter === undefined) { - // backing field with no getter - // eg. when a field overrides/`new string foo=..` - // an autoproperty - return; - } - - if (auto_prop_name in all_fields_except_backing_fields) { - delete getters[auto_prop_name]; - } else if (getter.__args.owner_class === backing_field.__args.owner_class) { - // getter+backing_field are from the same class. - // Add the backing_field value as a field - all_fields_except_backing_fields[auto_prop_name] = backing_field; - - // .. and drop the auto-prop getter - delete getters[auto_prop_name]; - } - }); - - if (accessors_only) - return Object.values(getters); - - return Object.values(all_fields_except_backing_fields).concat(Object.values(getters)); - }, - - /** Given `dotnet:object:foo:bar`, - * returns { scheme:'object', value: 'foo:bar' } - * - * Given `dotnet:pointer:{ b: 3 }` - * returns { scheme:'object', value: '{b:3}`, o: {b:3} - * - * @param {string} idStr - * @param {boolean} [throwOnError=false] - * - * @returns {WasmId} - */ - _parse_object_id: function (idStr, throwOnError = false) { - if (idStr === undefined || idStr == "" || !idStr.startsWith ('dotnet:')) { - if (throwOnError) - throw new Error (`Invalid id: ${idStr}`); - - return undefined; - } - - const [, scheme, ...rest] = idStr.split(':'); - let res = { - scheme, - value: rest.join (':'), - idStr, - o: {} - }; - - try { - res.o = JSON.parse(res.value); - // eslint-disable-next-line no-empty - } catch (e) {} - - return res; - }, - - _resolve_member_by_name: function (base_object, base_name, expr_parts) { - if (base_object === undefined || base_object.value === undefined) - throw new Error(`Bug: base_object is undefined`); - - if (base_object.value.type === 'object' && base_object.value.subtype === 'null') - throw new ReferenceError(`Null reference: ${base_name} is null`); - - if (base_object.value.type !== 'object') - throw new ReferenceError(`'.' is only supported on non-primitive types. Failed on '${base_name}'`); - - if (expr_parts.length == 0) - throw new Error(`Invalid member access expression`);//FIXME: need the full expression here - - const root = expr_parts[0]; - const props = this.mono_wasm_get_details(base_object.value.objectId, {}); - let resObject = props.find(l => l.name == root); - if (resObject !== undefined) { - if (resObject.value === undefined && resObject.get !== undefined) - resObject = this._invoke_getter(base_object.value.objectId, root); - } - - if (resObject === undefined || expr_parts.length == 1) - return resObject; - else { - expr_parts.shift(); - return this._resolve_member_by_name(resObject, root, expr_parts); - } - }, - - mono_wasm_eval_member_access: function (scope, var_list, rootObjectId, expr) { - if (expr === undefined || expr.length == 0) - throw new Error(`expression argument required`); - - let parts = expr.split('.'); - if (parts.length == 0) - throw new Error(`Invalid member access expression: ${expr}`); - - const root = parts[0]; - - const locals = this.mono_wasm_get_variables(scope, var_list); - let rootObject = locals.find(l => l.name === root); - if (rootObject === undefined) { - // check `this` - const thisObject = locals.find(l => l.name == "this"); - if (thisObject === undefined) - throw new ReferenceError(`Could not find ${root} in locals, and no 'this' found.`); - - const thisProps = this.mono_wasm_get_details(thisObject.value.objectId, {}); - rootObject = thisProps.find(tp => tp.name == root); - if (rootObject === undefined) - throw new ReferenceError(`Could not find ${root} in locals, or in 'this'`); - - if (rootObject.value === undefined && rootObject.get !== undefined) - rootObject = this._invoke_getter(thisObject.value.objectId, root); - } - - parts.shift(); - - if (parts.length == 0) - return rootObject; - - if (rootObject === undefined || rootObject.value === undefined) - throw new Error(`Could not get a value for ${root}`); - - return this._resolve_member_by_name(rootObject, root, parts); - }, - - mono_wasm_set_variable_value: function (scope, index, name, newValue) { - console.debug (">> mono_wasm_set_variable_value " + name + " - " + newValue); - var ret = this._c_fn_table.mono_wasm_set_variable_on_frame_wrapper(scope, index, name, newValue); - if (ret == false) - throw new Error(`Could not get a value for ${name}`); - return ret; - }, - - /** - * @param {WasmId} id - * @returns {object[]} - */ - _get_vt_properties: function (id, args={}) { - let entry = this._get_id_props (id.idStr); - - if (entry === undefined || entry.members === undefined) { - if (!isNaN (id.o.containerId)) { - // We are expanding, so get *all* the members. - // Which ones to return based on @args, can be determined - // at the time of return - this._get_object_properties (id.o.containerId, { expandValueTypes: true }); - } else if (!isNaN (id.o.arrayId)) - this._get_array_values (id, Number (id.o.arrayIdx), 1, true); - else - throw new Error (`Invalid valuetype id (${id.idStr}). Can't get properties for it.`); - } - - // Let's try again - entry = this._get_id_props (id.idStr); - - if (entry !== undefined && entry.members !== undefined) { - if (args.accessorPropertiesOnly === true) - return entry.accessors; - - return entry.members; - } - - throw new Error (`Unknown valuetype id: ${id.idStr}. Failed to get properties for it.`); - }, - - /** - * - * @callback GetIdArgsCallback - * @param {object} var - * @param {number} idx - * @returns {object} - */ - - /** - * @param {object[]} vars - * @param {GetIdArgsCallback} getIdArgs - * @returns {object} - */ - _assign_vt_ids: function (vars, getIdArgs) - { - vars.forEach ((v, i) => { - // we might not have a `.value`, like in case of getters which have a `.get` instead - const value = v.value; - if (value === undefined || !value.isValueType) - return; - - if (value.objectId !== undefined) - throw new Error (`Bug: Trying to assign valuetype id, but the var already has one: ${v}`); - - value.objectId = this._new_or_add_id_props ({ scheme: 'valuetype', idArgs: getIdArgs (v, i), props: value._props }); - delete value._props; - }); - - return vars; - }, - - // - // @var_list: [ { index: , name: }, .. ] - mono_wasm_get_variables: function(scope, var_list) { - const numBytes = var_list.length * Int32Array.BYTES_PER_ELEMENT; - const ptr = Module._malloc(numBytes); - let heapBytes = new Int32Array(Module.HEAP32.buffer, ptr, numBytes); - for (let i=0; i ({ containerId: this._async_method_objectId, fieldOffset: v.fieldOffset })); - - for (let i in res) { - const res_name = res [i].name; - if (this._async_method_objectId != 0) { - //Async methods are special in the way that local variables can be lifted to generated class fields - //value of "this" comes here either - if (res_name !== undefined && res_name.indexOf ('>') > 0) { - // For async methods, we get the names too, so use that - // ALTHOUGH, the name wouldn't have `<>` for method args - res [i].name = res_name.substring (1, res_name.indexOf ('>')); - } - } else if (res_name === undefined && var_list [i] !== undefined) { - // For non-async methods, we just have the var id, but we have the name - // from the caller - res [i].name = var_list [i].name; - } - } - - this._post_process_details(res); - return res; - }, - - // Keep in sync with the flags in mini-wasm-debugger.c - _get_properties_args_to_gpflags: function (args) { - let gpflags =0; - /* - Disabled for now. Instead, we ask debugger.c to return - ~all~ the members, and then handle the filtering in mono.js . - - if (args.ownProperties) - gpflags |= 1; - if (args.accessorPropertiesOnly) - gpflags |= 2; - */ - if (args.expandValueTypes) - gpflags |= 4; - - return gpflags; - }, - - /** - * @param {number} idNum - * @param {boolean} expandValueTypes - * @returns {object} - */ - _get_object_properties: function(idNum, args={}) { - let gpflags = this._get_properties_args_to_gpflags (args); - - let { res_ok, res } = this.mono_wasm_get_object_properties_info (idNum, gpflags); - if (!res_ok) - throw new Error (`Failed to get properties for ${idNum}`); - - res = MONO._filter_automatic_properties (res, args.accessorPropertiesOnly === true); - res = this._assign_vt_ids (res, v => ({ containerId: idNum, fieldOffset: v.fieldOffset })); - res = this._post_process_details (res); - - return res; - }, - - /** - * @param {WasmId} id - * @param {number} [startIdx=0] - * @param {number} [count=-1] - * @param {boolean} [expandValueTypes=false] - * @returns {object[]} - */ - _get_array_values: function (id, startIdx = 0, count = -1, expandValueTypes = false) { - if (isNaN (id.o.arrayId) || isNaN (startIdx)) - throw new Error (`Invalid array id: ${id.idStr}`); - - let gpflags = this._get_properties_args_to_gpflags({ expandValueTypes }); - let { res_ok, res } = this.mono_wasm_get_array_values_info (id.o.arrayId, startIdx, count, gpflags); - if (!res_ok) - throw new Error (`Failed to get properties for array id ${id.idStr}`); - - res = this._assign_vt_ids (res, (_, i) => ({ arrayId: id.o.arrayId, arrayIdx: Number (startIdx) + i})); - - for (let i = 0; i < res.length; i ++) { - let value = res [i].value; - if (value.objectId !== undefined && value.objectId.startsWith("dotnet:pointer")) - this._new_or_add_id_props ({ objectId: value.objectId, props: { varName: `[${i}]` } }); - } - res = this._post_process_details (res); - return res; - }, - - _post_process_details: function (details) { - if (details == undefined) - return {}; - - if (details.length > 0) - this._extract_and_cache_value_types(details); - - // remove __args added by add_properties_var - details.forEach(d => delete d.__args); - return details; - }, - - /** - * Gets the next id number to use for generating ids - * - * @returns {number} - */ - _next_id: function () { - return ++this._next_id_var; - }, - - _extract_and_cache_value_types: function (var_list) { - if (var_list == undefined || !Array.isArray (var_list) || var_list.length == 0) - return var_list; - - for (let i in var_list) { - let value = var_list [i].value; - if (value === undefined) - continue; - - if (value.objectId !== undefined && value.objectId.startsWith ("dotnet:pointer:")) { - let ptr_args = this._get_id_props (value.objectId); - if (ptr_args === undefined) - throw new Error (`Bug: Expected to find an entry for pointer id: ${value.objectId}`); - - // It might have been already set in some cases, like arrays - // where the name would be `0`, but we want `[0]` for pointers, - // so the deref would look like `*[0]` - ptr_args.varName = ptr_args.varName || var_list [i].name; - } - - if (value.type != "object" || value.isValueType != true || value.expanded != true) // undefined would also give us false - continue; - - if (value.members === undefined) { - // this could happen for valuetypes that maybe - // we were not able to describe, like `ref` parameters - // So, skip that - continue; - } - - // Generate objectId for expanded valuetypes - value.objectId = value.objectId || this._new_or_add_id_props ({ scheme: 'valuetype' }); - - this._extract_and_cache_value_types (value.members); - - const accessors = value.members.filter(m => m.get !== undefined); - const new_props = Object.assign ({ members: value.members, accessors }, value.__extra_vt_props); - - this._new_or_add_id_props ({ objectId: value.objectId, props: new_props }); - delete value.members; - delete value.__extra_vt_props; - } - - return var_list; - }, - - _get_cfo_res_details: function (objectId, args) { - if (!(objectId in this._call_function_res_cache)) - throw new Error(`Could not find any object with id ${objectId}`); - - const real_obj = this._call_function_res_cache [objectId]; - - const descriptors = Object.getOwnPropertyDescriptors (real_obj); - if (args.accessorPropertiesOnly) { - Object.keys (descriptors).forEach (k => { - if (descriptors [k].get === undefined) - Reflect.deleteProperty (descriptors, k); - }); - } - - let res_details = []; - Object.keys (descriptors).forEach (k => { - let new_obj; - let prop_desc = descriptors [k]; - if (typeof prop_desc.value == "object") { - // convert `{value: { type='object', ... }}` - // to `{ name: 'foo', value: { type='object', ... }} - new_obj = Object.assign ({ name: k }, prop_desc); - } else if (prop_desc.value !== undefined) { - // This is needed for values that were not added by us, - // thus are like { value: 5 } - // instead of { value: { type = 'number', value: 5 }} - // - // This can happen, for eg., when `length` gets added for arrays - // or `__proto__`. - new_obj = { - name: k, - // merge/add `type` and `description` to `d.value` - value: Object.assign ({ type: (typeof prop_desc.value), description: '' + prop_desc.value }, - prop_desc) - }; - } else if (prop_desc.get !== undefined) { - // The real_obj has the actual getter. We are just returning a placeholder - // If the caller tries to run function on the cfo_res object, - // that accesses this property, then it would be run on `real_obj`, - // which *has* the original getter - new_obj = { - name: k, - get: { - className: "Function", - description: `get ${k} () {}`, - type: "function" - } - }; - } else { - new_obj = { name: k, value: { type: "symbol", value: "", description: ""} }; - } - - res_details.push (new_obj); - }); - - return { __value_as_json_string__: JSON.stringify (res_details) }; - }, - - /** - * Generates a new id, and a corresponding entry for associated properties - * like `dotnet:pointer:{ a: 4 }` - * The third segment of that `{a:4}` is the idArgs parameter - * - * Only `scheme` or `objectId` can be set. - * if `scheme`, then a new id is generated, and it's properties set - * if `objectId`, then it's properties are updated - * - * @param {object} args - * @param {string} [args.scheme=undefined] scheme second part of `dotnet:pointer:..` - * @param {string} [args.objectId=undefined] objectId - * @param {object} [args.idArgs={}] The third segment of the objectId - * @param {object} [args.props={}] Properties for the generated id - * - * @returns {string} generated/updated id string - */ - _new_or_add_id_props: function ({ scheme = undefined, objectId = undefined, idArgs = {}, props = {} }) { - if (scheme === undefined && objectId === undefined) - throw new Error (`Either scheme or objectId must be given`); - - if (scheme !== undefined && objectId !== undefined) - throw new Error (`Both scheme, and objectId cannot be given`); - - if (objectId !== undefined && Object.entries (idArgs).length > 0) - throw new Error (`Both objectId, and idArgs cannot be given`); - - if (Object.entries (idArgs).length == 0) { - // We want to generate a new id, only if it doesn't have other - // attributes that it can use to uniquely identify. - // Eg, we don't do this for `dotnet:valuetype:{containerId:4, fieldOffset: 24}` - idArgs.num = this._next_id (); - } - - let idStr; - if (objectId !== undefined) { - idStr = objectId; - const old_props = this._id_table [idStr]; - if (old_props === undefined) - throw new Error (`ObjectId not found in the id table: ${idStr}`); - - this._id_table [idStr] = Object.assign (old_props, props); - } else { - idStr = `dotnet:${scheme}:${JSON.stringify (idArgs)}`; - this._id_table [idStr] = props; - } - - return idStr; - }, - - /** - * @param {string} objectId - * @returns {object} - */ - _get_id_props: function (objectId) { - return this._id_table [objectId]; - }, - - _get_deref_ptr_value: function (objectId) { - const ptr_args = this._get_id_props (objectId); - if (ptr_args === undefined) - throw new Error (`Unknown pointer id: ${objectId}`); - - if (ptr_args.ptr_addr == 0 || ptr_args.klass_addr == 0) - throw new Error (`Both ptr_addr and klass_addr need to be non-zero, to dereference a pointer. objectId: ${objectId}`); - - const value_addr = new DataView (Module.HEAPU8.buffer).getUint32 (ptr_args.ptr_addr, /* littleEndian */ true); - let { res_ok, res } = this.mono_wasm_get_deref_ptr_value_info (value_addr, ptr_args.klass_addr); - if (!res_ok) - throw new Error (`Failed to dereference pointer ${objectId}`); - - if (res.length > 0) { - if (ptr_args.varName === undefined) - throw new Error (`Bug: no varName found for the pointer. objectId: ${objectId}`); - - res [0].name = `*${ptr_args.varName}`; - } - - res = this._post_process_details (res); - return res; - }, - - mono_wasm_get_details: function (objectId, args={}) { - let id = this._parse_object_id (objectId, true); - - switch (id.scheme) { - case "object": { - if (isNaN (id.value)) - throw new Error (`Invalid objectId: ${objectId}. Expected a numeric id.`); - - args.expandValueTypes = false; - return this._get_object_properties(id.value, args); - } - - case "array": - return this._get_array_values (id); - - case "valuetype": - return this._get_vt_properties(id, args); - - case "cfo_res": - return this._get_cfo_res_details (objectId, args); - - case "pointer": { - return this._get_deref_ptr_value (objectId); - } - - default: - throw new Error(`Unknown object id format: ${objectId}`); - } - }, - - _cache_call_function_res: function (obj) { - const id = `dotnet:cfo_res:${this._next_call_function_res_id++}`; - this._call_function_res_cache[id] = obj; - return id; - }, - - mono_wasm_release_object: function (objectId) { - if (objectId in this._cache_call_function_res) - delete this._cache_call_function_res[objectId]; - }, - - /** - * @param {string} objectIdStr objectId - * @param {string} name property name - * @returns {object} return value - */ - _invoke_getter: function (objectIdStr, name) { - const id = this._parse_object_id (objectIdStr); - if (id === undefined) - throw new Error (`Invalid object id: ${objectIdStr}`); - - let getter_res; - if (id.scheme == 'object') { - if (isNaN (id.o) || id.o < 0) - throw new Error (`Invalid object id: ${objectIdStr}`); - - let { res_ok, res } = this.mono_wasm_invoke_getter_on_object_info (id.o, name); - if (!res_ok) - throw new Error (`Invoking getter on ${objectIdStr} failed`); - - getter_res = res; - } else if (id.scheme == 'valuetype') { - const id_props = this._get_id_props (objectIdStr); - if (id_props === undefined) - throw new Error (`Unknown valuetype id: ${objectIdStr}`); - - if (typeof id_props.value64 !== 'string' || isNaN (id_props.klass)) - throw new Error (`Bug: Cannot invoke getter on ${objectIdStr}, because of missing or invalid klass/value64 fields. idProps: ${JSON.stringify (id_props)}`); - - const dataPtr = Module._malloc (id_props.value64.length); - const dataHeap = new Uint8Array (Module.HEAPU8.buffer, dataPtr, id_props.value64.length); - dataHeap.set (new Uint8Array (this._base64_to_uint8 (id_props.value64))); - - let { res_ok, res } = this.mono_wasm_invoke_getter_on_value_info (dataHeap.byteOffset, id_props.klass, name); - Module._free (dataHeap.byteOffset); - - if (!res_ok) { - console.debug (`Invoking getter on valuetype ${objectIdStr}, with props: ${JSON.stringify (id_props)} failed`); - throw new Error (`Invoking getter on valuetype ${objectIdStr} failed`); - } - getter_res = res; - } else { - throw new Error (`Only object, and valuetypes supported for getters, id: ${objectIdStr}`); - } - - getter_res = MONO._post_process_details (getter_res); - return getter_res.length > 0 ? getter_res [0] : {}; - }, - - /** - * @param {string} objectIdStr objectId - * @param {string} name property name - * @returns {object} return true if it works and false if it doesn't - */ - _set_value_on_object: function (objectIdStr, name, newvalue) { - const id = this._parse_object_id (objectIdStr); - if (id === undefined) - throw new Error (`Invalid object id: ${objectIdStr}`); - - let setter_res; - if (id.scheme == 'object') { - if (isNaN (id.o) || id.o < 0) - throw new Error (`Invalid object id: ${objectIdStr}`); - - var ret = this._c_fn_table.mono_wasm_set_value_on_object_wrapper (id.o, name, newvalue); - if (!ret) - throw new Error (`Invoking setter on ${objectIdStr} failed`); - - setter_res = ret; - } - else - throw new Error (`Only object is supported for setters, id: ${objectIdStr}`); - return setter_res; - }, - - _create_proxy_from_object_id: function (objectId) { - const details = this.mono_wasm_get_details(objectId); - - if (objectId.startsWith ('dotnet:array:')) - return details.map (p => p.value); - - let proxy = {}; - Object.keys (details).forEach (p => { - var prop = details [p]; - if (prop.get !== undefined) { - // TODO: `set` - - Object.defineProperty (proxy, - prop.name, - { get () { return MONO._invoke_getter (objectId, prop.name); } } - ); - } else { - proxy [prop.name] = prop.value; - } - }); - - const handler1 = { - set (obj, prop, newValue) {return MONO._set_value_on_object (objectId, prop, newValue.toString());}, - }; - return new Proxy(proxy, handler1); - }, - - mono_wasm_call_function_on: function (request) { - if (request.arguments != undefined && !Array.isArray (request.arguments)) - throw new Error (`"arguments" should be an array, but was ${request.arguments}`); - - const objId = request.objectId; - let proxy; - - if (objId.startsWith ('dotnet:cfo_res:')) { - if (objId in this._call_function_res_cache) - proxy = this._call_function_res_cache [objId]; - else - throw new Error (`Unknown object id ${objId}`); - } else { - proxy = this._create_proxy_from_object_id (objId); - } - - const fn_args = request.arguments != undefined ? request.arguments.map(a => JSON.stringify(a.value)) : []; - const fn_eval_str = `var fn = ${request.functionDeclaration}; fn.call (proxy, ...[${fn_args}]);`; - - const fn_res = eval (fn_eval_str); - if (fn_res === undefined) - return { type: "undefined" }; - - if (fn_res === null || (fn_res.subtype === 'null' && fn_res.value === undefined)) - return fn_res; - - // primitive type - if (Object (fn_res) !== fn_res) - return fn_res; - - // return .value, if it is a primitive type - if (fn_res.value !== undefined && Object (fn_res.value.value) !== fn_res.value.value) - return fn_res.value; - - if (request.returnByValue) - return {type: "object", value: fn_res}; - - const fn_res_id = this._cache_call_function_res (fn_res); - if (Object.getPrototypeOf (fn_res) == Array.prototype) { - return { - type: "object", - subtype: "array", - className: "Array", - description: `Array(${fn_res.length})`, - objectId: fn_res_id - }; - } else { - return { type: "object", className: "Object", description: "Object", objectId: fn_res_id }; - } - }, - - _clear_per_step_state: function () { - this._next_id_var = 0; - this._id_table = {}; - }, - - mono_wasm_debugger_resume: function () { - this._clear_per_step_state (); - }, - - mono_wasm_start_single_stepping: function (kind) { - console.debug (">> mono_wasm_start_single_stepping " + kind); - if (!this.mono_wasm_setup_single_step) - this.mono_wasm_setup_single_step = Module.cwrap ("mono_wasm_setup_single_step", 'number', [ 'number']); - - this._clear_per_step_state (); - - return this.mono_wasm_setup_single_step (kind); - }, - - mono_wasm_set_pause_on_exceptions: function (state) { - if (!this.mono_wasm_pause_on_exceptions) - this.mono_wasm_pause_on_exceptions = Module.cwrap ("mono_wasm_pause_on_exceptions", 'number', [ 'number']); - var state_enum = 0; - switch (state) { - case 'uncaught': - state_enum = 1; //EXCEPTION_MODE_UNCAUGHT - break; - case 'all': - state_enum = 2; //EXCEPTION_MODE_ALL - break; - } - return this.mono_wasm_pause_on_exceptions (state_enum); - }, - - mono_wasm_detach_debugger: function () { - if (!this.mono_wasm_set_is_debugger_attached) - this.mono_wasm_set_is_debugger_attached = Module.cwrap ('mono_wasm_set_is_debugger_attached', 'void', ['bool']); - this.mono_wasm_set_is_debugger_attached(false); - }, - - _register_c_fn: function (name, ...args) { - Object.defineProperty (this._c_fn_table, name + '_wrapper', { value: Module.cwrap (name, ...args) }); - }, - - /** - * Calls `Module.cwrap` for the function name, - * and creates a wrapper around it that returns - * `{ bool result, object var_info } - * - * @param {string} name C function name - * @param {string} ret_type - * @param {string[]} params - * - * @returns {void} - */ - _register_c_var_fn: function (name, ret_type, params) { - if (ret_type !== 'bool') - throw new Error (`Bug: Expected a C function signature that returns bool`); - - this._register_c_fn (name, ret_type, params); - Object.defineProperty (this, name + '_info', { - value: function (...args) { - MONO.var_info = []; - const res_ok = MONO._c_fn_table [name + '_wrapper'] (...args); - let res = MONO.var_info; - MONO.var_info = []; - if (res_ok) { - res = this._fixup_name_value_objects (res); - return { res_ok, res }; - } - - return { res_ok, res: undefined }; - } - }); - }, - - mono_wasm_runtime_ready: function () { - this.mono_wasm_runtime_is_ready = true; - this._clear_per_step_state (); - - // FIXME: where should this go? - this._next_call_function_res_id = 0; - this._call_function_res_cache = {}; - - this._c_fn_table = {}; - this._register_c_var_fn ('mono_wasm_get_object_properties', 'bool', [ 'number', 'number' ]); - this._register_c_var_fn ('mono_wasm_get_array_values', 'bool', [ 'number', 'number', 'number', 'number' ]); - this._register_c_var_fn ('mono_wasm_invoke_getter_on_object', 'bool', [ 'number', 'string' ]); - this._register_c_var_fn ('mono_wasm_invoke_getter_on_value', 'bool', [ 'number', 'number', 'string' ]); - this._register_c_var_fn ('mono_wasm_get_local_vars', 'bool', [ 'number', 'number', 'number']); - this._register_c_var_fn ('mono_wasm_get_deref_ptr_value', 'bool', [ 'number', 'number']); - this._register_c_fn ('mono_wasm_set_value_on_object', 'bool', [ 'number', 'string', 'string' ]); - this._register_c_fn ('mono_wasm_set_variable_on_frame', 'bool', [ 'number', 'number', 'string', 'string']); - // DO NOT REMOVE - magic debugger init function - if (globalThis.dotnetDebugger) - debugger; - else - console.debug ("mono_wasm_runtime_ready", "fe00e07a-5519-4dfe-b35a-f867dbaf2e28"); - }, - - mono_wasm_set_breakpoint: function (assembly, method_token, il_offset) { - if (!this.mono_wasm_set_bp) - this.mono_wasm_set_bp = Module.cwrap ('mono_wasm_set_breakpoint', 'number', ['string', 'number', 'number']); - - return this.mono_wasm_set_bp (assembly, method_token, il_offset) - }, - - mono_wasm_remove_breakpoint: function (breakpoint_id) { - if (!this.mono_wasm_del_bp) - this.mono_wasm_del_bp = Module.cwrap ('mono_wasm_remove_breakpoint', 'number', ['number']); - - return this.mono_wasm_del_bp (breakpoint_id); - }, - - // Set environment variable NAME to VALUE - // Should be called before mono_load_runtime_and_bcl () in most cases - mono_wasm_setenv: function (name, value) { - if (!this.wasm_setenv) - this.wasm_setenv = Module.cwrap ('mono_wasm_setenv', null, ['string', 'string']); - this.wasm_setenv (name, value); - }, - - mono_wasm_set_runtime_options: function (options) { - if (!this.wasm_parse_runtime_options) - this.wasm_parse_runtime_options = Module.cwrap ('mono_wasm_parse_runtime_options', null, ['number', 'number']); - var argv = Module._malloc (options.length * 4); - var wasm_strdup = Module.cwrap ('mono_wasm_strdup', 'number', ['string']); - let aindex = 0; - for (var i = 0; i < options.length; ++i) { - Module.setValue (argv + (aindex * 4), wasm_strdup (options [i]), "i32"); - aindex += 1; - } - this.wasm_parse_runtime_options (options.length, argv); - }, - - // - // Initialize the AOT profiler with OPTIONS. - // Requires the AOT profiler to be linked into the app. - // options = { write_at: "", send_to: "" } - // should be in the format ::. - // write_at defaults to 'WebAssembly.Runtime::StopProfile'. - // send_to defaults to 'WebAssembly.Runtime::DumpAotProfileData'. - // DumpAotProfileData stores the data into Module.aot_profile_data. - // - mono_wasm_init_aot_profiler: function (options) { - if (options == null) - options = {} - if (!('write_at' in options)) - options.write_at = 'Interop/Runtime::StopProfile'; - if (!('send_to' in options)) - options.send_to = 'Interop/Runtime::DumpAotProfileData'; - var arg = "aot:write-at-method=" + options.write_at + ",send-to-method=" + options.send_to; - Module.ccall ('mono_wasm_load_profiler_aot', null, ['string'], [arg]); - }, - - // options = { write_at: "", send_to: "" } - // should be in the format ::. - // write_at defaults to 'WebAssembly.Runtime::StopProfile'. - // send_to defaults to 'WebAssembly.Runtime::DumpCoverageProfileData'. - // DumpCoverageProfileData stores the data into Module.coverage_profile_data. - mono_wasm_init_coverage_profiler: function (options) { - if (options == null) - options = {} - if (!('write_at' in options)) - options.write_at = 'WebAssembly.Runtime::StopProfile'; - if (!('send_to' in options)) - options.send_to = 'WebAssembly.Runtime::DumpCoverageProfileData'; - var arg = "coverage:write-at-method=" + options.write_at + ",send-to-method=" + options.send_to; - Module.ccall ('mono_wasm_load_profiler_coverage', null, ['string'], [arg]); - }, - - _apply_configuration_from_args: function (args) { - for (var k in (args.environment_variables || {})) - MONO.mono_wasm_setenv (k, args.environment_variables[k]); - - if (args.runtime_options) - MONO.mono_wasm_set_runtime_options (args.runtime_options); - - if (args.aot_profiler_options) - MONO.mono_wasm_init_aot_profiler (args.aot_profiler_options); - - if (args.coverage_profiler_options) - MONO.mono_wasm_init_coverage_profiler (args.coverage_profiler_options); - }, - - _get_fetch_file_cb_from_args: function (args) { - if (typeof (args.fetch_file_cb) === "function") - return args.fetch_file_cb; - - if (ENVIRONMENT_IS_NODE) { - var fs = require('fs'); - return function (asset) { - console.debug ("MONO_WASM: Loading... " + asset); - var binary = fs.readFileSync (asset); - var resolve_func2 = function (resolve, reject) { - resolve (new Uint8Array (binary)); - }; - - var resolve_func1 = function (resolve, reject) { - var response = { - ok: true, - url: asset, - arrayBuffer: function () { - return new Promise (resolve_func2); - } - }; - resolve (response); - }; - - return new Promise (resolve_func1); - }; - } else if (typeof (fetch) === "function") { - return function (asset) { - return fetch (asset, { credentials: 'same-origin' }); - }; - } else { - throw new Error ("No fetch_file_cb was provided and this environment does not expose 'fetch'."); - } - }, - - _handle_loaded_asset: function (ctx, asset, url, blob) { - var bytes = new Uint8Array (blob); - if (ctx.tracing) - console.log ("MONO_WASM: Loaded:", asset.name, "size", bytes.length, "from", url); - - var virtualName = asset.virtual_path || asset.name; - var offset = null; - - switch (asset.behavior) { - case "resource": - case "assembly": - ctx.loaded_files.push ({ url: url, file: virtualName}); - case "heap": - case "icu": - offset = this.mono_wasm_load_bytes_into_heap (bytes); - ctx.loaded_assets[virtualName] = [offset, bytes.length]; - break; - - case "vfs": - // FIXME - var lastSlash = virtualName.lastIndexOf("/"); - var parentDirectory = (lastSlash > 0) - ? virtualName.substr(0, lastSlash) - : null; - var fileName = (lastSlash > 0) - ? virtualName.substr(lastSlash + 1) - : virtualName; - if (fileName.startsWith("/")) - fileName = fileName.substr(1); - if (parentDirectory) { - if (ctx.tracing) - console.log ("MONO_WASM: Creating directory '" + parentDirectory + "'"); - - var pathRet = ctx.createPath( - "/", parentDirectory, true, true // fixme: should canWrite be false? - ); - } else { - parentDirectory = "/"; - } - - if (ctx.tracing) - console.log ("MONO_WASM: Creating file '" + fileName + "' in directory '" + parentDirectory + "'"); - - if (!this.mono_wasm_load_data_archive (bytes, parentDirectory)) { - var fileRet = ctx.createDataFile ( - parentDirectory, fileName, - bytes, true /* canRead */, true /* canWrite */, true /* canOwn */ - ); - } - break; - - default: - throw new Error ("Unrecognized asset behavior:", asset.behavior, "for asset", asset.name); - } - - if (asset.behavior === "assembly") { - var hasPpdb = ctx.mono_wasm_add_assembly (virtualName, offset, bytes.length); - - if (!hasPpdb) { - var index = ctx.loaded_files.findIndex(element => element.file == virtualName); - ctx.loaded_files.splice(index, 1); - } - } - else if (asset.behavior === "icu") { - if (this.mono_wasm_load_icu_data (offset)) - ctx.num_icu_assets_loaded_successfully += 1; - else - console.error ("Error loading ICU asset", asset.name); - } - else if (asset.behavior === "resource") { - ctx.mono_wasm_add_satellite_assembly (virtualName, asset.culture, offset, bytes.length); - } - }, - - // deprecated - mono_load_runtime_and_bcl: function ( - unused_vfs_prefix, deploy_prefix, debug_level, file_list, loaded_cb, fetch_file_cb - ) { - var args = { - fetch_file_cb: fetch_file_cb, - loaded_cb: loaded_cb, - debug_level: debug_level, - assembly_root: deploy_prefix, - assets: [] - }; - - for (var i = 0; i < file_list.length; i++) { - var file_name = file_list[i]; - var behavior; - if (file_name.startsWith ("icudt") && file_name.endsWith (".dat")) { - // ICU data files are expected to be "icudt%FilterName%.dat" - behavior = "icu"; - } else { // if (file_name.endsWith (".pdb") || file_name.endsWith (".dll")) - behavior = "assembly"; - } - - args.assets.push ({ - name: file_name, - behavior: behavior - }); - } - - return this.mono_load_runtime_and_bcl_args (args); - }, - - // Initializes the runtime and loads assemblies, debug information, and other files. - // @args is a dictionary-style Object with the following properties: - // assembly_root: (required) the subfolder containing managed assemblies and pdbs - // debug_level or enable_debugging: (required) - // assets: (required) a list of assets to load along with the runtime. each asset - // is a dictionary-style Object with the following properties: - // name: (required) the name of the asset, including extension. - // behavior: (required) determines how the asset will be handled once loaded: - // "heap": store asset into the native heap - // "assembly": load asset as a managed assembly (or debugging information) - // "resource": load asset as a managed resource assembly - // "icu": load asset as an ICU data archive - // "vfs": load asset into the virtual filesystem (for fopen, File.Open, etc) - // load_remote: (optional) if true, an attempt will be made to load the asset - // from each location in @args.remote_sources. - // virtual_path: (optional) if specified, overrides the path of the asset in - // the virtual filesystem and similar data structures once loaded. - // is_optional: (optional) if true, any failure to load this asset will be ignored. - // loaded_cb: (required) a function () invoked when loading has completed. - // fetch_file_cb: (optional) a function (string) invoked to fetch a given file. - // If no callback is provided a default implementation appropriate for the current - // environment will be selected (readFileSync in node, fetch elsewhere). - // If no default implementation is available this call will fail. - // remote_sources: (optional) additional search locations for assets. - // sources will be checked in sequential order until the asset is found. - // the string "./" indicates to load from the application directory (as with the - // files in assembly_list), and a fully-qualified URL like "https://example.com/" indicates - // that asset loads can be attempted from a remote server. Sources must end with a "/". - // environment_variables: (optional) dictionary-style Object containing environment variables - // runtime_options: (optional) array of runtime options as strings - // aot_profiler_options: (optional) dictionary-style Object. see the comments for - // mono_wasm_init_aot_profiler. If omitted, aot profiler will not be initialized. - // coverage_profiler_options: (optional) dictionary-style Object. see the comments for - // mono_wasm_init_coverage_profiler. If omitted, coverage profiler will not be initialized. - // globalization_mode: (optional) configures the runtime's globalization mode: - // "icu": load ICU globalization data from any runtime assets with behavior "icu". - // "invariant": operate in invariant globalization mode. - // "auto" (default): if "icu" behavior assets are present, use ICU, otherwise invariant. - // diagnostic_tracing: (optional) enables diagnostic log messages during startup - mono_load_runtime_and_bcl_args: function (args) { - try { - return this._load_assets_and_runtime (args); - } catch (exc) { - console.error ("error in mono_load_runtime_and_bcl_args:", exc); - throw exc; - } - }, - - // @bytes must be a typed array. space is allocated for it in the native heap - // and it is copied to that location. returns the address of the allocation. - mono_wasm_load_bytes_into_heap: function (bytes) { - var memoryOffset = Module._malloc (bytes.length); - var heapBytes = new Uint8Array (Module.HEAPU8.buffer, memoryOffset, bytes.length); - heapBytes.set (bytes); - return memoryOffset; - }, - - num_icu_assets_loaded_successfully: 0, - - // @offset must be the address of an ICU data archive in the native heap. - // returns true on success. - mono_wasm_load_icu_data: function (offset) { - var fn = Module.cwrap ('mono_wasm_load_icu_data', 'number', ['number']); - var ok = (fn (offset)) === 1; - if (ok) - this.num_icu_assets_loaded_successfully++; - return ok; - }, - - // Get icudt.dat exact filename that matches given culture, examples: - // "ja" -> "icudt_CJK.dat" - // "en_US" (or "en-US" or just "en") -> "icudt_EFIGS.dat" - // etc, see "mono_wasm_get_icudt_name" implementation in pal_icushim_static.c - mono_wasm_get_icudt_name: function (culture) { - return Module.ccall ('mono_wasm_get_icudt_name', 'string', ['string'], [culture]); - }, - - _finalize_startup: function (args, ctx) { - var loaded_files_with_debug_info = []; - - MONO.loaded_assets = ctx.loaded_assets; - ctx.loaded_files.forEach(value => loaded_files_with_debug_info.push(value.url)); - MONO.loaded_files = loaded_files_with_debug_info; - if (ctx.tracing) { - console.log ("MONO_WASM: loaded_assets: " + JSON.stringify(ctx.loaded_assets)); - console.log ("MONO_WASM: loaded_files: " + JSON.stringify(ctx.loaded_files)); - } - - var load_runtime = Module.cwrap ('mono_wasm_load_runtime', null, ['string', 'number']); - - console.debug ("MONO_WASM: Initializing mono runtime"); - - this.mono_wasm_globalization_init (args.globalization_mode); - - if (ENVIRONMENT_IS_SHELL || ENVIRONMENT_IS_NODE) { - try { - load_runtime ("unused", args.debug_level); - } catch (ex) { - print ("MONO_WASM: load_runtime () failed: " + ex); - print ("MONO_WASM: Stacktrace: \n"); - print (ex.stack); - - var wasm_exit = Module.cwrap ('mono_wasm_exit', null, ['number']); - wasm_exit (1); - } - } else { - load_runtime ("unused", args.debug_level); - } - - let tz; - try { - tz = Intl.DateTimeFormat().resolvedOptions().timeZone; - } catch {} - MONO.mono_wasm_setenv ("TZ", tz || "UTC"); - MONO.mono_wasm_runtime_ready (); - args.loaded_cb (); - }, - - _load_assets_and_runtime: function (args) { - if (args.enable_debugging) - args.debug_level = args.enable_debugging; - if (args.assembly_list) - throw new Error ("Invalid args (assembly_list was replaced by assets)"); - if (args.runtime_assets) - throw new Error ("Invalid args (runtime_assets was replaced by assets)"); - if (args.runtime_asset_sources) - throw new Error ("Invalid args (runtime_asset_sources was replaced by remote_sources)"); - if (!args.loaded_cb) - throw new Error ("loaded_cb not provided"); - - var ctx = { - tracing: args.diagnostic_tracing || false, - pending_count: args.assets.length, - mono_wasm_add_assembly: Module.cwrap ('mono_wasm_add_assembly', 'number', ['string', 'number', 'number']), - mono_wasm_add_satellite_assembly: Module.cwrap ('mono_wasm_add_satellite_assembly', 'void', ['string', 'string', 'number', 'number']), - loaded_assets: Object.create (null), - // dlls and pdbs, used by blazor and the debugger - loaded_files: [], - createPath: Module['FS_createPath'], - createDataFile: Module['FS_createDataFile'] - }; - - if (ctx.tracing) - console.log ("mono_wasm_load_runtime_with_args", JSON.stringify(args)); - - this._apply_configuration_from_args (args); - - var fetch_file_cb = this._get_fetch_file_cb_from_args (args); - - var onPendingRequestComplete = function () { - --ctx.pending_count; - - if (ctx.pending_count === 0) { - try { - MONO._finalize_startup (args, ctx); - } catch (exc) { - console.error ("Unhandled exception in _finalize_startup", exc); - throw exc; - } - } - }; - - var processFetchResponseBuffer = function (asset, url, blob) { - try { - MONO._handle_loaded_asset (ctx, asset, url, blob); - } catch (exc) { - console.error ("Unhandled exception in processFetchResponseBuffer", exc); - throw exc; - } finally { - onPendingRequestComplete (); - } - }; - - args.assets.forEach (function (asset) { - var attemptNextSource; - var sourceIndex = 0; - var sourcesList = asset.load_remote ? args.remote_sources : [""]; - - var handleFetchResponse = function (response) { - if (!response.ok) { - try { - attemptNextSource (); - return; - } catch (exc) { - console.error ("MONO_WASM: Unhandled exception in handleFetchResponse attemptNextSource for asset", asset.name, exc); - throw exc; - } - } - - try { - var bufferPromise = response ['arrayBuffer'] (); - bufferPromise.then (processFetchResponseBuffer.bind (this, asset, response.url)); - } catch (exc) { - console.error ("MONO_WASM: Unhandled exception in handleFetchResponse for asset", asset.name, exc); - attemptNextSource (); - } - }; - - attemptNextSource = function () { - if (sourceIndex >= sourcesList.length) { - var msg = "MONO_WASM: Failed to load " + asset.name; - try { - var isOk = asset.is_optional || - (asset.name.match (/\.pdb$/) && MONO.mono_wasm_ignore_pdb_load_errors); - - if (isOk) - console.debug (msg); - else { - console.error (msg); - throw new Error (msg); - } - } finally { - onPendingRequestComplete (); - } - } - - var sourcePrefix = sourcesList[sourceIndex]; - sourceIndex++; - - // HACK: Special-case because MSBuild doesn't allow "" as an attribute - if (sourcePrefix === "./") - sourcePrefix = ""; - - var attemptUrl; - if (sourcePrefix.trim() === "") { - if (asset.behavior === "assembly") - attemptUrl = locateFile (args.assembly_root + "/" + asset.name); - else if (asset.behavior === "resource") { - var path = asset.culture !== '' ? `${asset.culture}/${asset.name}` : asset.name; - attemptUrl = locateFile (args.assembly_root + "/" + path); - } - else - attemptUrl = asset.name; - } else { - attemptUrl = sourcePrefix + asset.name; - } - - try { - if (asset.name === attemptUrl) { - if (ctx.tracing) - console.log ("Attempting to fetch '" + attemptUrl + "'"); - } else { - if (ctx.tracing) - console.log ("Attempting to fetch '" + attemptUrl + "' for", asset.name); - } - var fetch_promise = fetch_file_cb (attemptUrl); - fetch_promise.then (handleFetchResponse); - } catch (exc) { - console.error ("MONO_WASM: Error fetching " + attemptUrl, exc); - attemptNextSource (); - } - }; - - attemptNextSource (); - }); - }, - - // Performs setup for globalization. - // @globalization_mode is one of "icu", "invariant", or "auto". - // "auto" will use "icu" if any ICU data archives have been loaded, - // otherwise "invariant". - mono_wasm_globalization_init: function (globalization_mode) { - var invariantMode = false; - - if (globalization_mode === "invariant") - invariantMode = true; - - if (!invariantMode) { - if (this.num_icu_assets_loaded_successfully > 0) { - console.debug ("MONO_WASM: ICU data archive(s) loaded, disabling invariant mode"); - } else if (globalization_mode !== "icu") { - console.debug ("MONO_WASM: ICU data archive(s) not loaded, using invariant globalization mode"); - invariantMode = true; - } else { - var msg = "invariant globalization mode is inactive and no ICU data archives were loaded"; - console.error ("MONO_WASM: ERROR: " + msg); - throw new Error (msg); - } - } - - if (invariantMode) - this.mono_wasm_setenv ("DOTNET_SYSTEM_GLOBALIZATION_INVARIANT", "1"); - - // Set globalization mode to PredefinedCulturesOnly - this.mono_wasm_setenv ("DOTNET_SYSTEM_GLOBALIZATION_PREDEFINED_CULTURES_ONLY", "1"); - }, - - // Used by the debugger to enumerate loaded dlls and pdbs - mono_wasm_get_loaded_files: function() { - if (!this.mono_wasm_set_is_debugger_attached) - this.mono_wasm_set_is_debugger_attached = Module.cwrap ('mono_wasm_set_is_debugger_attached', 'void', ['bool']); - this.mono_wasm_set_is_debugger_attached (true); - return MONO.loaded_files; - }, - - mono_wasm_get_loaded_asset_table: function() { - return MONO.loaded_assets; - }, - - mono_wasm_clear_all_breakpoints: function() { - if (!this.mono_clear_bps) - this.mono_clear_bps = Module.cwrap ('mono_wasm_clear_all_breakpoints', null); - - this.mono_clear_bps (); - }, - - mono_wasm_add_null_var: function(className) - { - let fixed_class_name = MONO._mono_csharp_fixup_class_name(Module.UTF8ToString (className)); - if (!fixed_class_name) { - // Eg, when a @className is passed from js itself, like - // mono_wasm_add_null_var ("string") - fixed_class_name = className; - } - MONO.var_info.push ({value: { - type: "object", - className: fixed_class_name, - description: fixed_class_name, - subtype: "null" - }}); - }, - - _mono_wasm_add_string_var: function(var_value) { - if (var_value === 0) { - MONO.mono_wasm_add_null_var ("string"); - return; - } - - MONO.var_info.push({ - value: { - type: "string", - value: var_value, - description: var_value - } - }); - }, - - _mono_wasm_add_getter_var: function(className) { - const fixed_class_name = MONO._mono_csharp_fixup_class_name (className); - var name; - if (MONO.var_info.length > 0) - name = MONO.var_info [MONO.var_info.length - 1].name; - name = (name === undefined) ? "" : name; - - MONO.var_info.push({ - get: { - className: "Function", - description: `get ${name} () {}`, - type: "function", - } - }); - }, - - _mono_wasm_add_array_var: function(className, objectId, length) { - const fixed_class_name = MONO._mono_csharp_fixup_class_name(className); - if (objectId == 0) { - MONO.mono_wasm_add_null_var (fixed_class_name); - return; - } - - MONO.var_info.push({ - value: { - type: "object", - subtype: "array", - className: fixed_class_name, - description: `${fixed_class_name}(${length})`, - objectId: this._new_or_add_id_props ({ scheme: 'array', idArgs: { arrayId: objectId } }) - } - }); - }, - - // FIXME: improve - _base64_to_uint8: function (base64String) { - const byteCharacters = atob (base64String); - const byteNumbers = new Array(byteCharacters.length); - for (let i = 0; i < byteCharacters.length; i++) { - byteNumbers[i] = byteCharacters.charCodeAt(i); - } - - return new Uint8Array (byteNumbers); - }, - - _begin_value_type_var: function(className, args) { - if (args === undefined || (typeof args !== 'object')) { - console.debug (`_begin_value_type_var: Expected an args object`); - return; - } - - const fixed_class_name = MONO._mono_csharp_fixup_class_name(className); - const toString = args.toString; - const base64String = btoa (String.fromCharCode (...new Uint8Array (Module.HEAPU8.buffer, args.value_addr, args.value_size))); - const vt_obj = { - value: { - type : "object", - className : fixed_class_name, - description : (toString === 0 ? fixed_class_name: Module.UTF8ToString (toString)), - expanded : true, - isValueType : true, - __extra_vt_props: { klass: args.klass, value64: base64String }, - members : [] - } - }; - if (MONO._vt_stack.length == 0) - MONO._old_var_info = MONO.var_info; - - MONO.var_info = vt_obj.value.members; - MONO._vt_stack.push (vt_obj); - }, - - _end_value_type_var: function() { - let top_vt_obj_popped = MONO._vt_stack.pop (); - top_vt_obj_popped.value.members = MONO._filter_automatic_properties ( - MONO._fixup_name_value_objects (top_vt_obj_popped.value.members)); - - if (MONO._vt_stack.length == 0) { - MONO.var_info = MONO._old_var_info; - MONO.var_info.push(top_vt_obj_popped); - } else { - var top_obj = MONO._vt_stack [MONO._vt_stack.length - 1]; - top_obj.value.members.push (top_vt_obj_popped); - MONO.var_info = top_obj.value.members; - } - }, - - _add_valuetype_unexpanded_var: function(className, args) { - if (args === undefined || (typeof args !== 'object')) { - console.debug (`_add_valuetype_unexpanded_var: Expected an args object`); - return; - } - - const fixed_class_name = MONO._mono_csharp_fixup_class_name (className); - const toString = args.toString; - - MONO.var_info.push ({ - value: { - type: "object", - className: fixed_class_name, - description: (toString === 0 ? fixed_class_name : Module.UTF8ToString (toString)), - isValueType: true - } - }); - }, - - mono_wasm_add_properties_var: function (name, args) { - if (typeof args !== 'object') - args = { field_offset: args }; - - if (args.owner_class !== undefined && args.owner_class !== 0) - args.owner_class = Module.UTF8ToString(args.owner_class); - - let name_obj = { - name: Module.UTF8ToString (name), - fieldOffset: args.field_offset, - __args: args - }; - if (args.is_own) - name_obj.isOwn = true; - - MONO.var_info.push(name_obj); - }, - - mono_wasm_add_typed_value: function (type, str_value, value) { - let type_str = type; - if (typeof type != 'string') - type_str = Module.UTF8ToString (type); - - if (str_value !== 0) - str_value = Module.UTF8ToString (str_value); - - switch (type_str) { - case "bool": { - const v = value != 0; - MONO.var_info.push ({ - value: { - type: "boolean", - value: v, - description: v.toString () - }, - writable:true - }); - break; - } - - case "char": { - const v = `${value} '${String.fromCharCode (value)}'`; - MONO.var_info.push ({ - value: { - type: "symbol", - value: v, - description: v - }, - writable:true - }); - break; - } - - case "number": - MONO.var_info.push ({ - value: { - type: "number", - value: value, - description: '' + value - }, - writable:true - }); - break; - - case "string": - MONO._mono_wasm_add_string_var (str_value); - break; - - case "getter": - MONO._mono_wasm_add_getter_var (str_value); - break; - - case "array": - MONO._mono_wasm_add_array_var (str_value, value.objectId, value.length); - break; - - case "begin_vt": - MONO._begin_value_type_var (str_value, value); - break; - - case "end_vt": - MONO._end_value_type_var (); - break; - - case "unexpanded_vt": - MONO._add_valuetype_unexpanded_var (str_value, value); - break; - - case "pointer": { - const fixed_value_str = MONO._mono_csharp_fixup_class_name (str_value); - if (value.klass_addr == 0 || value.ptr_addr == 0 || fixed_value_str.startsWith ('(void*')) { - // null or void*, which we can't deref - MONO.var_info.push({ - value: { - type: "symbol", - value: fixed_value_str, - description: fixed_value_str - } - }); - } else { - MONO.var_info.push({ - value: { - type: "object", - className: fixed_value_str, - description: fixed_value_str, - objectId: this._new_or_add_id_props ({ scheme: 'pointer', props: value }) - } - }); - } - } - break; - - case "symbol": { - if (typeof value === 'object' && value.isClassName) - str_value = MONO._mono_csharp_fixup_class_name (str_value); - - MONO.var_info.push ({ - value: { - type: "symbol", - value: str_value, - description: str_value - } - }); - } - break; - - default: { - const msg = `'${str_value}' ${value}`; - - MONO.var_info.push ({ - value: { - type: "symbol", - value: msg, - description: msg - } - }); - break; - } - } - }, - - _mono_csharp_fixup_class_name: function(className) - { - // Fix up generic names like Foo`2 to Foo - // and nested class names like Foo/Bar to Foo.Bar - return className.replace(/\//g, '.').replace(/`\d+/g, ''); - }, - - mono_wasm_load_data_archive: function (data, prefix) { - if (data.length < 8) - return false; - - var dataview = new DataView(data.buffer); - var magic = dataview.getUint32(0, true); - // get magic number - if (magic != 0x626c6174) { - return false; - } - var manifestSize = dataview.getUint32(4, true); - if (manifestSize == 0 || data.length < manifestSize + 8) - return false; - - var manifest; - try { - manifestContent = Module.UTF8ArrayToString(data, 8, manifestSize); - manifest = JSON.parse(manifestContent); - if (!(manifest instanceof Array)) - return false; - } catch (exc) { - return false; - } - - data = data.slice(manifestSize+8); - - // Create the folder structure - // /usr/share/zoneinfo - // /usr/share/zoneinfo/Africa - // /usr/share/zoneinfo/Asia - // .. - - var folders = new Set() - manifest.filter(m => { - var file = m[0]; - var last = file.lastIndexOf ("/"); - var directory = file.slice (0, last+1); - folders.add(directory); - }); - folders.forEach(folder => { - Module['FS_createPath'](prefix, folder, true, true); - }); - - for (row of manifest) { - var name = row[0]; - var length = row[1]; - var bytes = data.slice(0, length); - Module['FS_createDataFile'](prefix, name, bytes, true, true); - data = data.slice(length); - } - return true; - }, - - /** - * Raises an event for the debug proxy - * - * @param {Event} event - event to be raised - * @param {object} args - arguments for raising this event, eg. `{trace: true}` - */ - mono_wasm_raise_debug_event: function(event, args={}) { - if (typeof event !== 'object') - throw new Error(`event must be an object, but got ${JSON.stringify(event)}`); - - if (event.eventName === undefined) - throw new Error(`event.eventName is a required parameter, in event: ${JSON.stringify(event)}`); - - if (typeof args !== 'object') - throw new Error(`args must be an object, but got ${JSON.stringify(args)}`); - - console.debug('mono_wasm_debug_event_raised:aef14bca-5519-4dfe-b35a-f867abc123ae', JSON.stringify(event), JSON.stringify(args)); - }, - }, - - mono_wasm_add_typed_value: function (type, str_value, value) { - MONO.mono_wasm_add_typed_value (type, str_value, value); - }, - - mono_wasm_add_properties_var: function(name, args) { - MONO.mono_wasm_add_properties_var (name, args); - }, - - mono_wasm_set_is_async_method: function(objectId) { - MONO._async_method_objectId = objectId; - }, - - mono_wasm_add_enum_var: function(className, members, value) { - // FIXME: flags - // - - // group0: Monday:0 - // group1: Monday - // group2: 0 - const re = new RegExp (`[,]?([^,:]+):(${value}(?=,)|${value}$)`, 'g') - const members_str = Module.UTF8ToString (members); - - const match = re.exec(members_str); - const member_name = match == null ? ('' + value) : match [1]; - - const fixed_class_name = MONO._mono_csharp_fixup_class_name(Module.UTF8ToString (className)); - MONO.var_info.push({ - value: { - type: "object", - className: fixed_class_name, - description: member_name, - isEnum: true - } - }); - }, - - mono_wasm_add_array_item: function(position) { - MONO.var_info.push({ - name: `${position}` - }); - }, - - mono_wasm_add_obj_var: function(className, toString, objectId) { - if (objectId == 0) { - MONO.mono_wasm_add_null_var (className); - return; - } - - const fixed_class_name = MONO._mono_csharp_fixup_class_name(Module.UTF8ToString (className)); - MONO.var_info.push({ - value: { - type: "object", - className: fixed_class_name, - description: (toString === 0 ? fixed_class_name : Module.UTF8ToString (toString)), - objectId: "dotnet:object:"+ objectId, - } - }); - }, - - /* - * @className, and @targetName are in the following format: - * - * :[]: - */ - mono_wasm_add_func_var: function (className, targetName, objectId) { - if (objectId == 0) { - MONO.mono_wasm_add_null_var ( - MONO._mono_csharp_fixup_class_name (Module.UTF8ToString (className))); - return; - } - - function args_to_sig (args_str) { - var parts = args_str.split (":"); - // TODO: min length = 3? - parts = parts.map (a => MONO._mono_csharp_fixup_class_name (a)); - - // method name at the end - var method_name = parts.pop (); - - // ret type at the beginning - var ret_sig = parts [0]; - var args_sig = parts.splice (1).join (', '); - return `${ret_sig} ${method_name} (${args_sig})`; - } - let tgt_sig; - if (targetName != 0) - tgt_sig = args_to_sig (Module.UTF8ToString (targetName)); - - const type_name = MONO._mono_csharp_fixup_class_name (Module.UTF8ToString (className)); - if (tgt_sig === undefined) - tgt_sig = type_name; - - if (objectId == -1 || targetName === 0) { - // Target property - MONO.var_info.push ({ - value: { - type: "symbol", - value: tgt_sig, - description: tgt_sig, - } - }); - } else { - MONO.var_info.push ({ - value: { - type: "object", - className: type_name, - description: tgt_sig, - objectId: "dotnet:object:" + objectId, - } - }); - } - }, - - mono_wasm_add_frame: function(il, method, frame_id, assembly_name, method_full_name) { - var parts = Module.UTF8ToString (method_full_name).split (":", 2); - MONO.active_frames.push( { - il_pos: il, - method_token: method, - assembly_name: Module.UTF8ToString (assembly_name), - // Extract just the method name from `{class_name}:{method_name}` - method_name: parts [parts.length - 1], - frame_id - }); - }, - - schedule_background_exec: function () { - ++MONO.pump_count; - if (typeof globalThis.setTimeout === 'function') { - globalThis.setTimeout (MONO.pump_message, 0); - } - }, - - mono_set_timeout: function (timeout, id) { - if (!this.mono_set_timeout_exec) - this.mono_set_timeout_exec = Module.cwrap ("mono_set_timeout_exec", null, [ 'number' ]); - - if (typeof globalThis.setTimeout === 'function') { - globalThis.setTimeout (function () { - this.mono_set_timeout_exec (id); - }, timeout); - } else { - ++MONO.pump_count; - MONO.timeout_queue.push(function() { - this.mono_set_timeout_exec (id); - }) - } - }, - - mono_wasm_fire_bp: function () { - // eslint-disable-next-line no-debugger - debugger; - }, - - mono_wasm_fire_exception: function (exception_id, message, class_name, uncaught) { - MONO.active_exception = { - exception_id: exception_id, - message : Module.UTF8ToString (message), - class_name : Module.UTF8ToString (class_name), - uncaught : uncaught - }; - debugger; - }, - - mono_wasm_asm_loaded: function (assembly_name, assembly_ptr, assembly_len, pdb_ptr, pdb_len) { - // Only trigger this codepath for assemblies loaded after app is ready - if (MONO.mono_wasm_runtime_is_ready !== true) - return; - - const assembly_name_str = assembly_name !== 0 ? Module.UTF8ToString(assembly_name).concat('.dll') : ''; - - const assembly_data = new Uint8Array(Module.HEAPU8.buffer, assembly_ptr, assembly_len); - const assembly_b64 = MONO._base64Converter.toBase64StringImpl(assembly_data); - - let pdb_b64; - if (pdb_ptr) { - const pdb_data = new Uint8Array(Module.HEAPU8.buffer, pdb_ptr, pdb_len); - pdb_b64 = MONO._base64Converter.toBase64StringImpl(pdb_data); - } - - MONO.mono_wasm_raise_debug_event({ - eventName: 'AssemblyLoaded', - assembly_name: assembly_name_str, - assembly_b64, - pdb_b64 - }); - }, -}; - -autoAddDeps(MonoSupportLib, '$MONO') -mergeInto(LibraryManager.library, MonoSupportLib) - -// SIG // Begin signature block -// SIG // MIIkiQYJKoZIhvcNAQcCoIIkejCCJHYCAQExDzANBglg -// SIG // hkgBZQMEAgEFADB3BgorBgEEAYI3AgEEoGkwZzAyBgor -// SIG // BgEEAYI3AgEeMCQCAQEEEBDgyQbOONQRoqMAEEvTUJAC -// SIG // AQACAQACAQACAQACAQAwMTANBglghkgBZQMEAgEFAAQg -// SIG // Tvvy87p47DiUVUWnMbIR1/KRbWHFmD0b1Ot+3ZtV2Eig -// SIG // gg3wMIIGbjCCBFagAwIBAgITMwAAAhOMDBwxNbzSXwAA -// SIG // AAACEzANBgkqhkiG9w0BAQwFADB+MQswCQYDVQQGEwJV -// SIG // UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH -// SIG // UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv -// SIG // cmF0aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQgQ29kZSBT -// SIG // aWduaW5nIFBDQSAyMDExMB4XDTIxMDIxMTIwMDk1MVoX -// SIG // DTIyMDIxMDIwMDk1MVowYzELMAkGA1UEBhMCVVMxEzAR -// SIG // BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1v -// SIG // bmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv -// SIG // bjENMAsGA1UEAxMELk5FVDCCAaIwDQYJKoZIhvcNAQEB -// SIG // BQADggGPADCCAYoCggGBAJtZcELdrGHlHCF6nz4bH8vW -// SIG // l5M3GfXIf7JY7OovRwgweTptJQGby0YHZ+iCrWIE7fTc -// SIG // /c9eGKGm+EsuWHnanAm9Ro7MSjdPsYBRaif1Y6dyhBcb -// SIG // b44guUNKlplq7L1k3ldXFFzyAt+u8UzCL5QFwibg2nWi -// SIG // QmCkoJWhiA6RxEPgEZ/ss2ICppgLHm1o6vy1P4ci6aMk -// SIG // Tj2s1uct/oFflYwE0DsK1OrFH7QvoIqWCAuXUXjZOKnF -// SIG // oRia22+ci2oxs/LVkgqcMwC35KHvUBzCW3LME/dSBWCO -// SIG // TV7gieG+gUtxBgPpzomak4thtrQLMRAWl7AOtI7QvsXa -// SIG // FEyQpAlDVz12Sa89KJOLBPksBRDw4woRZLlHnUrtxFRp -// SIG // MZsr+9cf2zfZPG4ia2iDSBFfXu2BeXrifkT4c/UV5Iy3 -// SIG // qEHCzh1jLmN701jUOhF1QN1LEPn+TCth2b239/34+Bym -// SIG // cIAcDP1EWk8JodsUDedKhK+lAefNL0mzUrIQc6Dxb5cq -// SIG // may/QQIDAQABo4IBfjCCAXowHwYDVR0lBBgwFgYKKwYB -// SIG // BAGCN0wIAQYIKwYBBQUHAwMwHQYDVR0OBBYEFO9NaSC3 -// SIG // 3IwsQ0OKpWHnclste605MFAGA1UdEQRJMEekRTBDMSkw -// SIG // JwYDVQQLEyBNaWNyb3NvZnQgT3BlcmF0aW9ucyBQdWVy -// SIG // dG8gUmljbzEWMBQGA1UEBRMNNDY0MjIzKzQ2NDI5MzAf -// SIG // BgNVHSMEGDAWgBRIbmTlUAXTgqoXNzcitW2oynUClTBU -// SIG // BgNVHR8ETTBLMEmgR6BFhkNodHRwOi8vd3d3Lm1pY3Jv -// SIG // c29mdC5jb20vcGtpb3BzL2NybC9NaWNDb2RTaWdQQ0Ey -// SIG // MDExXzIwMTEtMDctMDguY3JsMGEGCCsGAQUFBwEBBFUw -// SIG // UzBRBggrBgEFBQcwAoZFaHR0cDovL3d3dy5taWNyb3Nv -// SIG // ZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNDb2RTaWdQQ0Ey -// SIG // MDExXzIwMTEtMDctMDguY3J0MAwGA1UdEwEB/wQCMAAw -// SIG // DQYJKoZIhvcNAQEMBQADggIBAFiD+cR0K6evMUeUrBMA -// SIG // pLljV65GDDTzlD4jqr6Mu1NTeZv5L9IJlR6DLAEKaJnB -// SIG // a7fZZ/ME/FZasmc40+WijhDmth/OOc7IpfJ3Ra1auKIA -// SIG // g687mo/eWiPs0nC42oCdchy9Q5AS7K0+MUk7R/p9eCTP -// SIG // NYFjSMItiL+YFYCxaZXqHizwdXcvCIrESq4DXwN+ZdUe -// SIG // GBEO9F2SkMVC61/y2xwSwRWmfO/l4YutKT+dSKjlelYi -// SIG // zFAQaJrGzO5ac56S+K/NMndPL7Od3ohqxMu7gsFUynxY -// SIG // l+eyB9T9I9HrUWoHj6ce4nzOxHC+yDRD6Mi2AaT+IbMO -// SIG // cGvWeJC5iX3tzpMqdz0BOMl6jbff+t+BLS7VtU6JAFCM -// SIG // fk5h+wqIPWjon3tpTuFtCkMOSzIoso3U6kdX0fgrgXnN -// SIG // KJspBXkfKG9lMPOPOKwzua1qjghvgzPMftj1yZqFljJm -// SIG // cjBxs/HKA8J8st1MKcgiBGDX5zkcsHYGuAkIb2fXQuYW -// SIG // y0G78JzzSv1u0LAFj8/Qtx9Hm2wfc20+ww+MYEQ9tu1F -// SIG // uJZK2O7+p7iVziwZvo+XVzuIU7sVjcmJH5Gn/ttfkLQ3 -// SIG // 0jvM9QyV/lYwurg4Gn5Li/IZSN56WGIPilRkXUVurpaV -// SIG // WeYCjeUJzMY2n2tVMFl6pgnGmaA2a0uiG3z0GpMPdbS1 -// SIG // R/oEMIIHejCCBWKgAwIBAgIKYQ6Q0gAAAAAAAzANBgkq -// SIG // hkiG9w0BAQsFADCBiDELMAkGA1UEBhMCVVMxEzARBgNV -// SIG // BAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx -// SIG // HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEy -// SIG // MDAGA1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNh -// SIG // dGUgQXV0aG9yaXR5IDIwMTEwHhcNMTEwNzA4MjA1OTA5 -// SIG // WhcNMjYwNzA4MjEwOTA5WjB+MQswCQYDVQQGEwJVUzET -// SIG // MBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVk -// SIG // bW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0 -// SIG // aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQgQ29kZSBTaWdu -// SIG // aW5nIFBDQSAyMDExMIICIjANBgkqhkiG9w0BAQEFAAOC -// SIG // Ag8AMIICCgKCAgEAq/D6chAcLq3YbqqCEE00uvK2WCGf -// SIG // Qhsqa+laUKq4BjgaBEm6f8MMHt03a8YS2AvwOMKZBrDI -// SIG // OdUBFDFC04kNeWSHfpRgJGyvnkmc6Whe0t+bU7IKLMOv -// SIG // 2akrrnoJr9eWWcpgGgXpZnboMlImEi/nqwhQz7NEt13Y -// SIG // xC4Ddato88tt8zpcoRb0RrrgOGSsbmQ1eKagYw8t00CT -// SIG // +OPeBw3VXHmlSSnnDb6gE3e+lD3v++MrWhAfTVYoonpy -// SIG // 4BI6t0le2O3tQ5GD2Xuye4Yb2T6xjF3oiU+EGvKhL1nk -// SIG // kDstrjNYxbc+/jLTswM9sbKvkjh+0p2ALPVOVpEhNSXD -// SIG // OW5kf1O6nA+tGSOEy/S6A4aN91/w0FK/jJSHvMAhdCVf -// SIG // GCi2zCcoOCWYOUo2z3yxkq4cI6epZuxhH2rhKEmdX4ji -// SIG // JV3TIUs+UsS1Vz8kA/DRelsv1SPjcF0PUUZ3s/gA4bys -// SIG // AoJf28AVs70b1FVL5zmhD+kjSbwYuER8ReTBw3J64HLn -// SIG // JN+/RpnF78IcV9uDjexNSTCnq47f7Fufr/zdsGbiwZeB -// SIG // e+3W7UvnSSmnEyimp31ngOaKYnhfsi+E11ecXL93KCjx -// SIG // 7W3DKI8sj0A3T8HhhUSJxAlMxdSlQy90lfdu+HggWCwT -// SIG // XWCVmj5PM4TasIgX3p5O9JawvEagbJjS4NaIjAsCAwEA -// SIG // AaOCAe0wggHpMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1Ud -// SIG // DgQWBBRIbmTlUAXTgqoXNzcitW2oynUClTAZBgkrBgEE -// SIG // AYI3FAIEDB4KAFMAdQBiAEMAQTALBgNVHQ8EBAMCAYYw -// SIG // DwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBRyLToC -// SIG // MZBDuRQFTuHqp8cx0SOJNDBaBgNVHR8EUzBRME+gTaBL -// SIG // hklodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpL2Ny -// SIG // bC9wcm9kdWN0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFf -// SIG // MDNfMjIuY3JsMF4GCCsGAQUFBwEBBFIwUDBOBggrBgEF -// SIG // BQcwAoZCaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3Br -// SIG // aS9jZXJ0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFfMDNf -// SIG // MjIuY3J0MIGfBgNVHSAEgZcwgZQwgZEGCSsGAQQBgjcu -// SIG // AzCBgzA/BggrBgEFBQcCARYzaHR0cDovL3d3dy5taWNy -// SIG // b3NvZnQuY29tL3BraW9wcy9kb2NzL3ByaW1hcnljcHMu -// SIG // aHRtMEAGCCsGAQUFBwICMDQeMiAdAEwAZQBnAGEAbABf -// SIG // AHAAbwBsAGkAYwB5AF8AcwB0AGEAdABlAG0AZQBuAHQA -// SIG // LiAdMA0GCSqGSIb3DQEBCwUAA4ICAQBn8oalmOBUeRou -// SIG // 09h0ZyKbC5YR4WOSmUKWfdJ5DJDBZV8uLD74w3LRbYP+ -// SIG // vj/oCso7v0epo/Np22O/IjWll11lhJB9i0ZQVdgMknzS -// SIG // Gksc8zxCi1LQsP1r4z4HLimb5j0bpdS1HXeUOeLpZMlE -// SIG // PXh6I/MTfaaQdION9MsmAkYqwooQu6SpBQyb7Wj6aC6V -// SIG // oCo/KmtYSWMfCWluWpiW5IP0wI/zRive/DvQvTXvbiWu -// SIG // 5a8n7dDd8w6vmSiXmE0OPQvyCInWH8MyGOLwxS3OW560 -// SIG // STkKxgrCxq2u5bLZ2xWIUUVYODJxJxp/sfQn+N4sOiBp -// SIG // mLJZiWhub6e3dMNABQamASooPoI/E01mC8CzTfXhj38c -// SIG // bxV9Rad25UAqZaPDXVJihsMdYzaXht/a8/jyFqGaJ+HN -// SIG // pZfQ7l1jQeNbB5yHPgZ3BtEGsXUfFL5hYbXw3MYbBL7f -// SIG // QccOKO7eZS/sl/ahXJbYANahRr1Z85elCUtIEJmAH9AA -// SIG // KcWxm6U/RXceNcbSoqKfenoi+kiVH6v7RyOA9Z74v2u3 -// SIG // S5fi63V4GuzqN5l5GEv/1rMjaHXmr/r8i+sLgOppO6/8 -// SIG // MO0ETI7f33VtY5E90Z1WTk+/gFcioXgRMiF670EKsT/7 -// SIG // qMykXcGhiJtXcVZOSEXAQsmbdlsKgEhr/Xmfwb1tbWrJ -// SIG // UnMTDXpQzTGCFfEwghXtAgEBMIGVMH4xCzAJBgNVBAYT -// SIG // AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH -// SIG // EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y -// SIG // cG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2Rl -// SIG // IFNpZ25pbmcgUENBIDIwMTECEzMAAAITjAwcMTW80l8A -// SIG // AAAAAhMwDQYJYIZIAWUDBAIBBQCgga4wGQYJKoZIhvcN -// SIG // AQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEO -// SIG // MAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIIc0 -// SIG // GX5eNl4PgrfOFgISutINWxZYGN5xQPt82b94AyqYMEIG -// SIG // CisGAQQBgjcCAQwxNDAyoBSAEgBNAGkAYwByAG8AcwBv -// SIG // AGYAdKEagBhodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20w -// SIG // DQYJKoZIhvcNAQEBBQAEggGAJ0DQ80PWaiFWypAKfKBM -// SIG // wmQpNy8l63FMfu0ctMvHYVXFgsYGKtMDutRNKr3UmlGw -// SIG // 5GBnDaSURINl0TpKtzM5l+lm3xRxId8V4g4plnJYOVdR -// SIG // 0SUpUpUld4wGuZcvJJKJgrUC57B06jBCbI/Giohe3XDI -// SIG // 7DrpvR4xI6bvYZEkWreCHz6yOTIiTYDPT30Ekzja1mv4 -// SIG // DGI2U3Zw9SgcnmSmUeLILvtVfYnV5fVkfMeisKj8TyIM -// SIG // lkUJ0NgWpVWk1ev7eLQkw5Oh609F8NiSA4PkRMIpvua4 -// SIG // 0E4bM7n05HlITtfgB/h4k2K26J8c+ea1eDKF624r7RY9 -// SIG // +/3WjJHZdGbIiojEii/aLdZjGhNs2YheJ7L64IlvS56u -// SIG // dYIXMATb3ZZcCbjVqB3aiVD9xxMyzpmf//S6e4LsPCJV -// SIG // FUS17f7yQak+5/ZVJssBG4ldCN6c9Rr61Miq5pvC44Gv -// SIG // eos0fBbT3aJXlWtt8sg6IKd+HT2U6OTIbpVYTs4dybRa -// SIG // Bqz6kf/XoYIS+zCCEvcGCisGAQQBgjcDAwExghLnMIIS -// SIG // 4wYJKoZIhvcNAQcCoIIS1DCCEtACAQMxDzANBglghkgB -// SIG // ZQMEAgEFADCCAVkGCyqGSIb3DQEJEAEEoIIBSASCAUQw -// SIG // ggFAAgEBBgorBgEEAYRZCgMBMDEwDQYJYIZIAWUDBAIB -// SIG // BQAEIMY0V2/ZQvpl02KAa9TY35X/CnTrfPplccdRWprr -// SIG // /hvBAgZgsBDDb54YEzIwMjEwNjAzMTAyNzIzLjg1OFow -// SIG // BIACAfSggdikgdUwgdIxCzAJBgNVBAYTAlVTMRMwEQYD -// SIG // VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k -// SIG // MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x -// SIG // LTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJh -// SIG // dGlvbnMgTGltaXRlZDEmMCQGA1UECxMdVGhhbGVzIFRT -// SIG // UyBFU046RDA4Mi00QkZELUVFQkExJTAjBgNVBAMTHE1p -// SIG // Y3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2Wggg5KMIIE -// SIG // +TCCA+GgAwIBAgITMwAAAUGvf1KXXPLcRQAAAAABQTAN -// SIG // BgkqhkiG9w0BAQsFADB8MQswCQYDVQQGEwJVUzETMBEG -// SIG // A1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u -// SIG // ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u -// SIG // MSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQ -// SIG // Q0EgMjAxMDAeFw0yMDEwMTUxNzI4MjdaFw0yMjAxMTIx -// SIG // NzI4MjdaMIHSMQswCQYDVQQGEwJVUzETMBEGA1UECBMK -// SIG // V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwG -// SIG // A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMS0wKwYD -// SIG // VQQLEyRNaWNyb3NvZnQgSXJlbGFuZCBPcGVyYXRpb25z -// SIG // IExpbWl0ZWQxJjAkBgNVBAsTHVRoYWxlcyBUU1MgRVNO -// SIG // OkQwODItNEJGRC1FRUJBMSUwIwYDVQQDExxNaWNyb3Nv -// SIG // ZnQgVGltZS1TdGFtcCBTZXJ2aWNlMIIBIjANBgkqhkiG -// SIG // 9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8irLqL28dal+PJUm -// SIG // UJOwvYn/sOCEzQzZyj94XbFPtRhDhPjagvvKOv1GgMoO -// SIG // uXvkpM3uM5E67vyOCPxqhTAzq7Ak3zkEXXBv7JoM8Xm0 -// SIG // x5UcnAkpUiEo0eycRl6bnYIB3KlZW3uz4Jc2v2FV0KCG -// SIG // kLrvqfKP8V/i2hVyN854OejWpx8wGUazM4CYUVowcgED -// SIG // c76OY+Xa4W27DCZJm2f9ol4BjSL+b2L/T8n/LEGknaUx -// SIG // wSQTN1LQCt+uBDCASd6VQR5CLLJVt6MBL0W1NlaWxEAJ -// SIG // wlIdyBnS1ihLvRg1jc/KUZe0sRFdD3fhKrjPac3hoy00 -// SIG // 7Fvr6Go0WJ4pr2rJdQIDAQABo4IBGzCCARcwHQYDVR0O -// SIG // BBYEFC0oPyxuLpD9RXBr9c8NO0EFEsbEMB8GA1UdIwQY -// SIG // MBaAFNVjOlyKMZDzQ3t8RhvFM2hahW1VMFYGA1UdHwRP -// SIG // ME0wS6BJoEeGRWh0dHA6Ly9jcmwubWljcm9zb2Z0LmNv -// SIG // bS9wa2kvY3JsL3Byb2R1Y3RzL01pY1RpbVN0YVBDQV8y -// SIG // MDEwLTA3LTAxLmNybDBaBggrBgEFBQcBAQROMEwwSgYI -// SIG // KwYBBQUHMAKGPmh0dHA6Ly93d3cubWljcm9zb2Z0LmNv -// SIG // bS9wa2kvY2VydHMvTWljVGltU3RhUENBXzIwMTAtMDct -// SIG // MDEuY3J0MAwGA1UdEwEB/wQCMAAwEwYDVR0lBAwwCgYI -// SIG // KwYBBQUHAwgwDQYJKoZIhvcNAQELBQADggEBAFJ63yJ9 -// SIG // 2ChqCgpexD48okviGuC4ikNsvmwlCSet1sFpvJEzLJB8 -// SIG // cTF4z4qQTz8AsQtcew6mAVmQCYDu9f5ee11xXj1LwHYs -// SIG // ZGnSs/OfRul1VKmY51OQpqvK5O/Ct4fs0Iblzo8eyOLJ -// SIG // ygTk97aXVA4Uzq8GblL7LQ5XiwAY446MOALnNXFo/Kq9 -// SIG // tvzipwY1YcRn/nlMQ+b92OiLLmHVMi2wAUORiKFvaAfY -// SIG // WjhQd+2qHLMsdpNluwBbWe7FF5ABsDo0HROMWyCgxdLQ -// SIG // 3vqr3DMSH3ZWKiirFsvWJmchfZPGRObwqszvSXPFmPBZ -// SIG // 9o+er+4UoLV+50GWnnQky7HVgLkwggZxMIIEWaADAgEC -// SIG // AgphCYEqAAAAAAACMA0GCSqGSIb3DQEBCwUAMIGIMQsw -// SIG // CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQ -// SIG // MA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9z -// SIG // b2Z0IENvcnBvcmF0aW9uMTIwMAYDVQQDEylNaWNyb3Nv -// SIG // ZnQgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAx -// SIG // MDAeFw0xMDA3MDEyMTM2NTVaFw0yNTA3MDEyMTQ2NTVa -// SIG // MHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5n -// SIG // dG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN -// SIG // aWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1p -// SIG // Y3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMIIBIjAN -// SIG // BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqR0NvHcR -// SIG // ijog7PwTl/X6f2mUa3RUENWlCgCChfvtfGhLLF/Fw+Vh -// SIG // wna3PmYrW/AVUycEMR9BGxqVHc4JE458YTBZsTBED/Fg -// SIG // iIRUQwzXTbg4CLNC3ZOs1nMwVyaCo0UN0Or1R4HNvyRg -// SIG // MlhgRvJYR4YyhB50YWeRX4FUsc+TTJLBxKZd0WETbijG -// SIG // GvmGgLvfYfxGwScdJGcSchohiq9LZIlQYrFd/XcfPfBX -// SIG // day9ikJNQFHRD5wGPmd/9WbAA5ZEfu/QS/1u5ZrKsajy -// SIG // eioKMfDaTgaRtogINeh4HLDpmc085y9Euqf03GS9pAHB -// SIG // IAmTeM38vMDJRF1eFpwBBU8iTQIDAQABo4IB5jCCAeIw -// SIG // EAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0OBBYEFNVjOlyK -// SIG // MZDzQ3t8RhvFM2hahW1VMBkGCSsGAQQBgjcUAgQMHgoA -// SIG // UwB1AGIAQwBBMAsGA1UdDwQEAwIBhjAPBgNVHRMBAf8E -// SIG // BTADAQH/MB8GA1UdIwQYMBaAFNX2VsuP6KJcYmjRPZSQ -// SIG // W9fOmhjEMFYGA1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9j -// SIG // cmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3Rz -// SIG // L01pY1Jvb0NlckF1dF8yMDEwLTA2LTIzLmNybDBaBggr -// SIG // BgEFBQcBAQROMEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93 -// SIG // d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljUm9v -// SIG // Q2VyQXV0XzIwMTAtMDYtMjMuY3J0MIGgBgNVHSABAf8E -// SIG // gZUwgZIwgY8GCSsGAQQBgjcuAzCBgTA9BggrBgEFBQcC -// SIG // ARYxaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL1BLSS9k -// SIG // b2NzL0NQUy9kZWZhdWx0Lmh0bTBABggrBgEFBQcCAjA0 -// SIG // HjIgHQBMAGUAZwBhAGwAXwBQAG8AbABpAGMAeQBfAFMA -// SIG // dABhAHQAZQBtAGUAbgB0AC4gHTANBgkqhkiG9w0BAQsF -// SIG // AAOCAgEAB+aIUQ3ixuCYP4FxAz2do6Ehb7Prpsz1Mb7P -// SIG // BeKp/vpXbRkws8LFZslq3/Xn8Hi9x6ieJeP5vO1rVFcI -// SIG // K1GCRBL7uVOMzPRgEop2zEBAQZvcXBf/XPleFzWYJFZL -// SIG // dO9CEMivv3/Gf/I3fVo/HPKZeUqRUgCvOA8X9S95gWXZ -// SIG // qbVr5MfO9sp6AG9LMEQkIjzP7QOllo9ZKby2/QThcJ8y -// SIG // Sif9Va8v/rbljjO7Yl+a21dA6fHOmWaQjP9qYn/dxUoL -// SIG // kSbiOewZSnFjnXshbcOco6I8+n99lmqQeKZt0uGc+R38 -// SIG // ONiU9MalCpaGpL2eGq4EQoO4tYCbIjggtSXlZOz39L9+ -// SIG // Y1klD3ouOVd2onGqBooPiRa6YacRy5rYDkeagMXQzafQ -// SIG // 732D8OE7cQnfXXSYIghh2rBQHm+98eEA3+cxB6STOvdl -// SIG // R3jo+KhIq/fecn5ha293qYHLpwmsObvsxsvYgrRyzR30 -// SIG // uIUBHoD7G4kqVDmyW9rIDVWZeodzOwjmmC3qjeAzLhIp -// SIG // 9cAvVCch98isTtoouLGp25ayp0Kiyc8ZQU3ghvkqmqMR -// SIG // ZjDTu3QyS99je/WZii8bxyGvWbWu3EQ8l1Bx16HSxVXj -// SIG // ad5XwdHeMMD9zOZN+w2/XU/pnR4ZOC+8z1gFLu8NoFA1 -// SIG // 2u8JJxzVs341Hgi62jbb01+P3nSISRKhggLUMIICPQIB -// SIG // ATCCAQChgdikgdUwgdIxCzAJBgNVBAYTAlVTMRMwEQYD -// SIG // VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k -// SIG // MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x -// SIG // LTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJh -// SIG // dGlvbnMgTGltaXRlZDEmMCQGA1UECxMdVGhhbGVzIFRT -// SIG // UyBFU046RDA4Mi00QkZELUVFQkExJTAjBgNVBAMTHE1p -// SIG // Y3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2WiIwoBATAH -// SIG // BgUrDgMCGgMVAKrlvym1CquIoQcrzncLvkD1WpUDoIGD -// SIG // MIGApH4wfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldh -// SIG // c2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNV -// SIG // BAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UE -// SIG // AxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAw -// SIG // DQYJKoZIhvcNAQEFBQACBQDkYyCxMCIYDzIwMjEwNjAz -// SIG // MTczNDQxWhgPMjAyMTA2MDQxNzM0NDFaMHQwOgYKKwYB -// SIG // BAGEWQoEATEsMCowCgIFAORjILECAQAwBwIBAAICEcww -// SIG // BwIBAAICEgswCgIFAORkcjECAQAwNgYKKwYBBAGEWQoE -// SIG // AjEoMCYwDAYKKwYBBAGEWQoDAqAKMAgCAQACAwehIKEK -// SIG // MAgCAQACAwGGoDANBgkqhkiG9w0BAQUFAAOBgQBtyFzG -// SIG // N2gJJZ3T6Dzxrw0RoLe9MAvzpz7H2wn8BMAuUs68+9Sz -// SIG // 0qPPgY06wPmE9dqyNzKBjwQrPnJ/qIegjqxgIAazKKN2 -// SIG // hxkAF/kZg0zTK4jDKKUAzIlSwaXbpD19RKHHRdyXGu/0 -// SIG // xlUHCFogRUpH8CZQsXulgvS7H0jiYUkTLTGCAw0wggMJ -// SIG // AgEBMIGTMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpX -// SIG // YXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYD -// SIG // VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNV -// SIG // BAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEw -// SIG // AhMzAAABQa9/Updc8txFAAAAAAFBMA0GCWCGSAFlAwQC -// SIG // AQUAoIIBSjAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQ -// SIG // AQQwLwYJKoZIhvcNAQkEMSIEII8NUwagPkRHGAJ8Oo/i -// SIG // OW4YAgx20yCGVo52QoQGwCM7MIH6BgsqhkiG9w0BCRAC -// SIG // LzGB6jCB5zCB5DCBvQQgUT8BPIzqc3SecHRPLKBtW0vO -// SIG // OnT+78haWo+XcxVerd4wgZgwgYCkfjB8MQswCQYDVQQG -// SIG // EwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UE -// SIG // BxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENv -// SIG // cnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGlt -// SIG // ZS1TdGFtcCBQQ0EgMjAxMAITMwAAAUGvf1KXXPLcRQAA -// SIG // AAABQTAiBCDEmllKq6p2dSDRT7WXEfJzMnBQlv3YcYTQ -// SIG // /uWbkawwhzANBgkqhkiG9w0BAQsFAASCAQDKMix79B07 -// SIG // +fbk3bFY4G6Rl6OG/BDKvIWVa6A0nJcM0lAcngEJm/j0 -// SIG // V0ooT1kDINkma8NxBS5EnY1oPpHyMG9U9vgL4uz4VwuB -// SIG // eS+cD+fgnbaSWzksiIKwyrSByhq5D2anX+fI5uHMK2a9 -// SIG // +S8zFRwhLjdyu6IIh614P9cRTubsyOjLhD1VxG4ZQ0Sz -// SIG // SIOtHMNPYoZgpHNeiS+rf39jIqlgAB8e3t/tqhtOIUUW -// SIG // VJCrYx9Ri5g5WYrsPnXV2H2GY7rCMn0iSeLEkDhw5Ck1 -// SIG // ZJgRlRavAqoScb2Z3AyMQmBDfLq0aG/+Z58eWPOvG3aZ -// SIG // H89A+KL1p3E1Lr8/Seby8NXt -// SIG // End signature block diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/mscorlib.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/mscorlib.dll deleted file mode 100644 index 1fd5a54bfd..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/mscorlib.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/netstandard.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/netstandard.dll deleted file mode 100644 index 1430b87912..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/netstandard.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/pal_random.js b/Examples/Complete/Camera/Blazor/wwwroot/_framework/pal_random.js deleted file mode 100644 index 63e5bdac60..0000000000 --- a/Examples/Complete/Camera/Blazor/wwwroot/_framework/pal_random.js +++ /dev/null @@ -1,320 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -var DotNetEntropyLib = { - $DOTNETENTROPY: { - // batchedQuotaMax is the max number of bytes as specified by the api spec. - // If the byteLength of array is greater than 65536, throw a QuotaExceededError and terminate the algorithm. - // https://www.w3.org/TR/WebCryptoAPI/#Crypto-method-getRandomValues - batchedQuotaMax: 65536, - getBatchedRandomValues: function (buffer, bufferLength) { - // for modern web browsers - // map the work array to the memory buffer passed with the length - for (var i = 0; i < bufferLength; i += this.batchedQuotaMax) { - var view = new Uint8Array(Module.HEAPU8.buffer, buffer + i, Math.min(bufferLength - i, this.batchedQuotaMax)); - crypto.getRandomValues(view) - } - } - }, - dotnet_browser_entropy : function (buffer, bufferLength) { - // check that we have crypto available - if (typeof crypto === 'object' && typeof crypto['getRandomValues'] === 'function') { - DOTNETENTROPY.getBatchedRandomValues(buffer, bufferLength) - return 0; - } else { - // we couldn't find a proper implementation, as Math.random() is not suitable - // instead of aborting here we will return and let managed code handle the message - return -1; - } - }, -}; - -autoAddDeps(DotNetEntropyLib, '$DOTNETENTROPY') -mergeInto(LibraryManager.library, DotNetEntropyLib) - -// SIG // Begin signature block -// SIG // MIIkjAYJKoZIhvcNAQcCoIIkfTCCJHkCAQExDzANBglg -// SIG // hkgBZQMEAgEFADB3BgorBgEEAYI3AgEEoGkwZzAyBgor -// SIG // BgEEAYI3AgEeMCQCAQEEEBDgyQbOONQRoqMAEEvTUJAC -// SIG // AQACAQACAQACAQACAQAwMTANBglghkgBZQMEAgEFAAQg -// SIG // He0Yy7K+G59QXMN5sHHtOtGJyoFg0Ie3YpqLi1MNoKeg -// SIG // gg3wMIIGbjCCBFagAwIBAgITMwAAAhOMDBwxNbzSXwAA -// SIG // AAACEzANBgkqhkiG9w0BAQwFADB+MQswCQYDVQQGEwJV -// SIG // UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH -// SIG // UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv -// SIG // cmF0aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQgQ29kZSBT -// SIG // aWduaW5nIFBDQSAyMDExMB4XDTIxMDIxMTIwMDk1MVoX -// SIG // DTIyMDIxMDIwMDk1MVowYzELMAkGA1UEBhMCVVMxEzAR -// SIG // BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1v -// SIG // bmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv -// SIG // bjENMAsGA1UEAxMELk5FVDCCAaIwDQYJKoZIhvcNAQEB -// SIG // BQADggGPADCCAYoCggGBAJtZcELdrGHlHCF6nz4bH8vW -// SIG // l5M3GfXIf7JY7OovRwgweTptJQGby0YHZ+iCrWIE7fTc -// SIG // /c9eGKGm+EsuWHnanAm9Ro7MSjdPsYBRaif1Y6dyhBcb -// SIG // b44guUNKlplq7L1k3ldXFFzyAt+u8UzCL5QFwibg2nWi -// SIG // QmCkoJWhiA6RxEPgEZ/ss2ICppgLHm1o6vy1P4ci6aMk -// SIG // Tj2s1uct/oFflYwE0DsK1OrFH7QvoIqWCAuXUXjZOKnF -// SIG // oRia22+ci2oxs/LVkgqcMwC35KHvUBzCW3LME/dSBWCO -// SIG // TV7gieG+gUtxBgPpzomak4thtrQLMRAWl7AOtI7QvsXa -// SIG // FEyQpAlDVz12Sa89KJOLBPksBRDw4woRZLlHnUrtxFRp -// SIG // MZsr+9cf2zfZPG4ia2iDSBFfXu2BeXrifkT4c/UV5Iy3 -// SIG // qEHCzh1jLmN701jUOhF1QN1LEPn+TCth2b239/34+Bym -// SIG // cIAcDP1EWk8JodsUDedKhK+lAefNL0mzUrIQc6Dxb5cq -// SIG // may/QQIDAQABo4IBfjCCAXowHwYDVR0lBBgwFgYKKwYB -// SIG // BAGCN0wIAQYIKwYBBQUHAwMwHQYDVR0OBBYEFO9NaSC3 -// SIG // 3IwsQ0OKpWHnclste605MFAGA1UdEQRJMEekRTBDMSkw -// SIG // JwYDVQQLEyBNaWNyb3NvZnQgT3BlcmF0aW9ucyBQdWVy -// SIG // dG8gUmljbzEWMBQGA1UEBRMNNDY0MjIzKzQ2NDI5MzAf -// SIG // BgNVHSMEGDAWgBRIbmTlUAXTgqoXNzcitW2oynUClTBU -// SIG // BgNVHR8ETTBLMEmgR6BFhkNodHRwOi8vd3d3Lm1pY3Jv -// SIG // c29mdC5jb20vcGtpb3BzL2NybC9NaWNDb2RTaWdQQ0Ey -// SIG // MDExXzIwMTEtMDctMDguY3JsMGEGCCsGAQUFBwEBBFUw -// SIG // UzBRBggrBgEFBQcwAoZFaHR0cDovL3d3dy5taWNyb3Nv -// SIG // ZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNDb2RTaWdQQ0Ey -// SIG // MDExXzIwMTEtMDctMDguY3J0MAwGA1UdEwEB/wQCMAAw -// SIG // DQYJKoZIhvcNAQEMBQADggIBAFiD+cR0K6evMUeUrBMA -// SIG // pLljV65GDDTzlD4jqr6Mu1NTeZv5L9IJlR6DLAEKaJnB -// SIG // a7fZZ/ME/FZasmc40+WijhDmth/OOc7IpfJ3Ra1auKIA -// SIG // g687mo/eWiPs0nC42oCdchy9Q5AS7K0+MUk7R/p9eCTP -// SIG // NYFjSMItiL+YFYCxaZXqHizwdXcvCIrESq4DXwN+ZdUe -// SIG // GBEO9F2SkMVC61/y2xwSwRWmfO/l4YutKT+dSKjlelYi -// SIG // zFAQaJrGzO5ac56S+K/NMndPL7Od3ohqxMu7gsFUynxY -// SIG // l+eyB9T9I9HrUWoHj6ce4nzOxHC+yDRD6Mi2AaT+IbMO -// SIG // cGvWeJC5iX3tzpMqdz0BOMl6jbff+t+BLS7VtU6JAFCM -// SIG // fk5h+wqIPWjon3tpTuFtCkMOSzIoso3U6kdX0fgrgXnN -// SIG // KJspBXkfKG9lMPOPOKwzua1qjghvgzPMftj1yZqFljJm -// SIG // cjBxs/HKA8J8st1MKcgiBGDX5zkcsHYGuAkIb2fXQuYW -// SIG // y0G78JzzSv1u0LAFj8/Qtx9Hm2wfc20+ww+MYEQ9tu1F -// SIG // uJZK2O7+p7iVziwZvo+XVzuIU7sVjcmJH5Gn/ttfkLQ3 -// SIG // 0jvM9QyV/lYwurg4Gn5Li/IZSN56WGIPilRkXUVurpaV -// SIG // WeYCjeUJzMY2n2tVMFl6pgnGmaA2a0uiG3z0GpMPdbS1 -// SIG // R/oEMIIHejCCBWKgAwIBAgIKYQ6Q0gAAAAAAAzANBgkq -// SIG // hkiG9w0BAQsFADCBiDELMAkGA1UEBhMCVVMxEzARBgNV -// SIG // BAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx -// SIG // HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEy -// SIG // MDAGA1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNh -// SIG // dGUgQXV0aG9yaXR5IDIwMTEwHhcNMTEwNzA4MjA1OTA5 -// SIG // WhcNMjYwNzA4MjEwOTA5WjB+MQswCQYDVQQGEwJVUzET -// SIG // MBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVk -// SIG // bW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0 -// SIG // aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQgQ29kZSBTaWdu -// SIG // aW5nIFBDQSAyMDExMIICIjANBgkqhkiG9w0BAQEFAAOC -// SIG // Ag8AMIICCgKCAgEAq/D6chAcLq3YbqqCEE00uvK2WCGf -// SIG // Qhsqa+laUKq4BjgaBEm6f8MMHt03a8YS2AvwOMKZBrDI -// SIG // OdUBFDFC04kNeWSHfpRgJGyvnkmc6Whe0t+bU7IKLMOv -// SIG // 2akrrnoJr9eWWcpgGgXpZnboMlImEi/nqwhQz7NEt13Y -// SIG // xC4Ddato88tt8zpcoRb0RrrgOGSsbmQ1eKagYw8t00CT -// SIG // +OPeBw3VXHmlSSnnDb6gE3e+lD3v++MrWhAfTVYoonpy -// SIG // 4BI6t0le2O3tQ5GD2Xuye4Yb2T6xjF3oiU+EGvKhL1nk -// SIG // kDstrjNYxbc+/jLTswM9sbKvkjh+0p2ALPVOVpEhNSXD -// SIG // OW5kf1O6nA+tGSOEy/S6A4aN91/w0FK/jJSHvMAhdCVf -// SIG // GCi2zCcoOCWYOUo2z3yxkq4cI6epZuxhH2rhKEmdX4ji -// SIG // JV3TIUs+UsS1Vz8kA/DRelsv1SPjcF0PUUZ3s/gA4bys -// SIG // AoJf28AVs70b1FVL5zmhD+kjSbwYuER8ReTBw3J64HLn -// SIG // JN+/RpnF78IcV9uDjexNSTCnq47f7Fufr/zdsGbiwZeB -// SIG // e+3W7UvnSSmnEyimp31ngOaKYnhfsi+E11ecXL93KCjx -// SIG // 7W3DKI8sj0A3T8HhhUSJxAlMxdSlQy90lfdu+HggWCwT -// SIG // XWCVmj5PM4TasIgX3p5O9JawvEagbJjS4NaIjAsCAwEA -// SIG // AaOCAe0wggHpMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1Ud -// SIG // DgQWBBRIbmTlUAXTgqoXNzcitW2oynUClTAZBgkrBgEE -// SIG // AYI3FAIEDB4KAFMAdQBiAEMAQTALBgNVHQ8EBAMCAYYw -// SIG // DwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBRyLToC -// SIG // MZBDuRQFTuHqp8cx0SOJNDBaBgNVHR8EUzBRME+gTaBL -// SIG // hklodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpL2Ny -// SIG // bC9wcm9kdWN0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFf -// SIG // MDNfMjIuY3JsMF4GCCsGAQUFBwEBBFIwUDBOBggrBgEF -// SIG // BQcwAoZCaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3Br -// SIG // aS9jZXJ0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFfMDNf -// SIG // MjIuY3J0MIGfBgNVHSAEgZcwgZQwgZEGCSsGAQQBgjcu -// SIG // AzCBgzA/BggrBgEFBQcCARYzaHR0cDovL3d3dy5taWNy -// SIG // b3NvZnQuY29tL3BraW9wcy9kb2NzL3ByaW1hcnljcHMu -// SIG // aHRtMEAGCCsGAQUFBwICMDQeMiAdAEwAZQBnAGEAbABf -// SIG // AHAAbwBsAGkAYwB5AF8AcwB0AGEAdABlAG0AZQBuAHQA -// SIG // LiAdMA0GCSqGSIb3DQEBCwUAA4ICAQBn8oalmOBUeRou -// SIG // 09h0ZyKbC5YR4WOSmUKWfdJ5DJDBZV8uLD74w3LRbYP+ -// SIG // vj/oCso7v0epo/Np22O/IjWll11lhJB9i0ZQVdgMknzS -// SIG // Gksc8zxCi1LQsP1r4z4HLimb5j0bpdS1HXeUOeLpZMlE -// SIG // PXh6I/MTfaaQdION9MsmAkYqwooQu6SpBQyb7Wj6aC6V -// SIG // oCo/KmtYSWMfCWluWpiW5IP0wI/zRive/DvQvTXvbiWu -// SIG // 5a8n7dDd8w6vmSiXmE0OPQvyCInWH8MyGOLwxS3OW560 -// SIG // STkKxgrCxq2u5bLZ2xWIUUVYODJxJxp/sfQn+N4sOiBp -// SIG // mLJZiWhub6e3dMNABQamASooPoI/E01mC8CzTfXhj38c -// SIG // bxV9Rad25UAqZaPDXVJihsMdYzaXht/a8/jyFqGaJ+HN -// SIG // pZfQ7l1jQeNbB5yHPgZ3BtEGsXUfFL5hYbXw3MYbBL7f -// SIG // QccOKO7eZS/sl/ahXJbYANahRr1Z85elCUtIEJmAH9AA -// SIG // KcWxm6U/RXceNcbSoqKfenoi+kiVH6v7RyOA9Z74v2u3 -// SIG // S5fi63V4GuzqN5l5GEv/1rMjaHXmr/r8i+sLgOppO6/8 -// SIG // MO0ETI7f33VtY5E90Z1WTk+/gFcioXgRMiF670EKsT/7 -// SIG // qMykXcGhiJtXcVZOSEXAQsmbdlsKgEhr/Xmfwb1tbWrJ -// SIG // UnMTDXpQzTGCFfQwghXwAgEBMIGVMH4xCzAJBgNVBAYT -// SIG // AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH -// SIG // EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y -// SIG // cG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2Rl -// SIG // IFNpZ25pbmcgUENBIDIwMTECEzMAAAITjAwcMTW80l8A -// SIG // AAAAAhMwDQYJYIZIAWUDBAIBBQCgga4wGQYJKoZIhvcN -// SIG // AQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEO -// SIG // MAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIKTQ -// SIG // ts56jQmXdTOrJhxHePDRP6IYHMqtdIFdJu6K2KWDMEIG -// SIG // CisGAQQBgjcCAQwxNDAyoBSAEgBNAGkAYwByAG8AcwBv -// SIG // AGYAdKEagBhodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20w -// SIG // DQYJKoZIhvcNAQEBBQAEggGAOhQBtM8dGqO4xsak/oHn -// SIG // LgxQeUK0erh74L+U88RqkAd9KtULNj1RqjYSeAxsoXxZ -// SIG // /6F/wiQaHzYr41yGXNTiUtT2+VQ3fJRffXZA59U19pve -// SIG // uonmwz2ZAD+NJl6uzQQsuc+aiyDmENCBI8Q95d8zfopn -// SIG // lEpKICbrb3sAIfvOzJxod/JJEfVWm/P0r1XXMdcgbC9O -// SIG // LmxaVgyH+L4Zwb6K3OYIQrnEKxXKAydWUCyqtynPyEsH -// SIG // UFnSL9SogbunqXCug7xv9hUC1qqR08796dn4+Arxa4LT -// SIG // /5yfn9pQ2QVIQPZghqKN5xYsQBFyn8Xh4fSYt9aSGrh7 -// SIG // 3k1WYPumXp901gILj4TxSZtxtOyOHxZzy/AzdAtUAFit -// SIG // ePp5G12J7XduTJIb7SIPbvMNoOeRPEWTIRYk7orpRsqP -// SIG // t2ChkxkKzljyAjPNpZjYM+J2+l+uYUTuUlQBSwouHw4h -// SIG // hDGVC4mOn7/friAsLo7MOB2Als0kuXGP4uY2nC0hvAyM -// SIG // 5/gxULEGoYIS/jCCEvoGCisGAQQBgjcDAwExghLqMIIS -// SIG // 5gYJKoZIhvcNAQcCoIIS1zCCEtMCAQMxDzANBglghkgB -// SIG // ZQMEAgEFADCCAVkGCyqGSIb3DQEJEAEEoIIBSASCAUQw -// SIG // ggFAAgEBBgorBgEEAYRZCgMBMDEwDQYJYIZIAWUDBAIB -// SIG // BQAEIG06YaXst+QK7V0RqeXNgH8uVNIHvnuRRBwqG+UM -// SIG // g7LQAgZgsPYTylQYEzIwMjEwNjAzMTAyNzI2LjgwNlow -// SIG // BIACAfSggdikgdUwgdIxCzAJBgNVBAYTAlVTMRMwEQYD -// SIG // VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k -// SIG // MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x -// SIG // LTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJh -// SIG // dGlvbnMgTGltaXRlZDEmMCQGA1UECxMdVGhhbGVzIFRT -// SIG // UyBFU046MTc5RS00QkIwLTgyNDYxJTAjBgNVBAMTHE1p -// SIG // Y3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2Wggg5NMIIE -// SIG // +TCCA+GgAwIBAgITMwAAATyL/bmzP0eX/QAAAAABPDAN -// SIG // BgkqhkiG9w0BAQsFADB8MQswCQYDVQQGEwJVUzETMBEG -// SIG // A1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u -// SIG // ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u -// SIG // MSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQ -// SIG // Q0EgMjAxMDAeFw0yMDEwMTUxNzI4MjNaFw0yMjAxMTIx -// SIG // NzI4MjNaMIHSMQswCQYDVQQGEwJVUzETMBEGA1UECBMK -// SIG // V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwG -// SIG // A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMS0wKwYD -// SIG // VQQLEyRNaWNyb3NvZnQgSXJlbGFuZCBPcGVyYXRpb25z -// SIG // IExpbWl0ZWQxJjAkBgNVBAsTHVRoYWxlcyBUU1MgRVNO -// SIG // OjE3OUUtNEJCMC04MjQ2MSUwIwYDVQQDExxNaWNyb3Nv -// SIG // ZnQgVGltZS1TdGFtcCBTZXJ2aWNlMIIBIjANBgkqhkiG -// SIG // 9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmBAq6WkDqvY5DgaQ -// SIG // t+OX0NCLzqUaivJxHvo6KSXP+VzTas2p6uYa3fcIm+EX -// SIG // b6bj4+vJ+Q5v12btrwqp1qMYct4sa24Ev64Nwkt26qfA -// SIG // INVEIP8QM99k7nnkzmNXDnpXF0WoaLCHI5a65L9dwGnB -// SIG // V5uAG2DAoGDOgc3WSgEXm3OsxL/uEAsuPtQFfER0BxDn -// SIG // aI+NjiaWxVpR72Cs17jNQB+L5o0/aP3wqtplg+yINvwq -// SIG // WiHdoByukfkvdPYitu7lZI1Wqdv0m+AEziyW2lUPl9Po -// SIG // WGxHAnrH/d4PrQEF7rwPHR+t3aCuSOc3WQheVP9w4m35 -// SIG // e2QhbFOpLPqYeIya2wIDAQABo4IBGzCCARcwHQYDVR0O -// SIG // BBYEFOGhZ+LKEvo2s2E/JRjqGL8mZzxGMB8GA1UdIwQY -// SIG // MBaAFNVjOlyKMZDzQ3t8RhvFM2hahW1VMFYGA1UdHwRP -// SIG // ME0wS6BJoEeGRWh0dHA6Ly9jcmwubWljcm9zb2Z0LmNv -// SIG // bS9wa2kvY3JsL3Byb2R1Y3RzL01pY1RpbVN0YVBDQV8y -// SIG // MDEwLTA3LTAxLmNybDBaBggrBgEFBQcBAQROMEwwSgYI -// SIG // KwYBBQUHMAKGPmh0dHA6Ly93d3cubWljcm9zb2Z0LmNv -// SIG // bS9wa2kvY2VydHMvTWljVGltU3RhUENBXzIwMTAtMDct -// SIG // MDEuY3J0MAwGA1UdEwEB/wQCMAAwEwYDVR0lBAwwCgYI -// SIG // KwYBBQUHAwgwDQYJKoZIhvcNAQELBQADggEBADL3EIyU -// SIG // 3Zd5bkjMxakZMUZJSfilkVFJQdyNiiVVm+Bp+nlnSU4l -// SIG // nQtbsXoxdqD19G/l/UCIYvLtQGle/dnhIrdpUM6lYD4n -// SIG // 8k2Ri48ytjqLuD4/xefD6dpuh7qRn7jQHoZZ/oUr7yBO -// SIG // YIBJwor/ZVZACTjJSxxd/A2z7+6clrNC879rI2cDx73Y -// SIG // bVfJQbTmLBPDcc55W7MnPNL0Z0XqpvCUCumfMQA+EnmP -// SIG // HbhRV4XIhExthNG4fvzd5sBp81yczG0igCpMyMOmMan/ -// SIG // sx81jxYpvQxmcJnIavuiQSrW+BBk9BBbX6hgqzjw+Tu7 -// SIG // j8EnY9WqYF6qOx3Lce4XLOao6cIwggZxMIIEWaADAgEC -// SIG // AgphCYEqAAAAAAACMA0GCSqGSIb3DQEBCwUAMIGIMQsw -// SIG // CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQ -// SIG // MA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9z -// SIG // b2Z0IENvcnBvcmF0aW9uMTIwMAYDVQQDEylNaWNyb3Nv -// SIG // ZnQgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAx -// SIG // MDAeFw0xMDA3MDEyMTM2NTVaFw0yNTA3MDEyMTQ2NTVa -// SIG // MHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5n -// SIG // dG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN -// SIG // aWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1p -// SIG // Y3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMIIBIjAN -// SIG // BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqR0NvHcR -// SIG // ijog7PwTl/X6f2mUa3RUENWlCgCChfvtfGhLLF/Fw+Vh -// SIG // wna3PmYrW/AVUycEMR9BGxqVHc4JE458YTBZsTBED/Fg -// SIG // iIRUQwzXTbg4CLNC3ZOs1nMwVyaCo0UN0Or1R4HNvyRg -// SIG // MlhgRvJYR4YyhB50YWeRX4FUsc+TTJLBxKZd0WETbijG -// SIG // GvmGgLvfYfxGwScdJGcSchohiq9LZIlQYrFd/XcfPfBX -// SIG // day9ikJNQFHRD5wGPmd/9WbAA5ZEfu/QS/1u5ZrKsajy -// SIG // eioKMfDaTgaRtogINeh4HLDpmc085y9Euqf03GS9pAHB -// SIG // IAmTeM38vMDJRF1eFpwBBU8iTQIDAQABo4IB5jCCAeIw -// SIG // EAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0OBBYEFNVjOlyK -// SIG // MZDzQ3t8RhvFM2hahW1VMBkGCSsGAQQBgjcUAgQMHgoA -// SIG // UwB1AGIAQwBBMAsGA1UdDwQEAwIBhjAPBgNVHRMBAf8E -// SIG // BTADAQH/MB8GA1UdIwQYMBaAFNX2VsuP6KJcYmjRPZSQ -// SIG // W9fOmhjEMFYGA1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9j -// SIG // cmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3Rz -// SIG // L01pY1Jvb0NlckF1dF8yMDEwLTA2LTIzLmNybDBaBggr -// SIG // BgEFBQcBAQROMEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93 -// SIG // d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljUm9v -// SIG // Q2VyQXV0XzIwMTAtMDYtMjMuY3J0MIGgBgNVHSABAf8E -// SIG // gZUwgZIwgY8GCSsGAQQBgjcuAzCBgTA9BggrBgEFBQcC -// SIG // ARYxaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL1BLSS9k -// SIG // b2NzL0NQUy9kZWZhdWx0Lmh0bTBABggrBgEFBQcCAjA0 -// SIG // HjIgHQBMAGUAZwBhAGwAXwBQAG8AbABpAGMAeQBfAFMA -// SIG // dABhAHQAZQBtAGUAbgB0AC4gHTANBgkqhkiG9w0BAQsF -// SIG // AAOCAgEAB+aIUQ3ixuCYP4FxAz2do6Ehb7Prpsz1Mb7P -// SIG // BeKp/vpXbRkws8LFZslq3/Xn8Hi9x6ieJeP5vO1rVFcI -// SIG // K1GCRBL7uVOMzPRgEop2zEBAQZvcXBf/XPleFzWYJFZL -// SIG // dO9CEMivv3/Gf/I3fVo/HPKZeUqRUgCvOA8X9S95gWXZ -// SIG // qbVr5MfO9sp6AG9LMEQkIjzP7QOllo9ZKby2/QThcJ8y -// SIG // Sif9Va8v/rbljjO7Yl+a21dA6fHOmWaQjP9qYn/dxUoL -// SIG // kSbiOewZSnFjnXshbcOco6I8+n99lmqQeKZt0uGc+R38 -// SIG // ONiU9MalCpaGpL2eGq4EQoO4tYCbIjggtSXlZOz39L9+ -// SIG // Y1klD3ouOVd2onGqBooPiRa6YacRy5rYDkeagMXQzafQ -// SIG // 732D8OE7cQnfXXSYIghh2rBQHm+98eEA3+cxB6STOvdl -// SIG // R3jo+KhIq/fecn5ha293qYHLpwmsObvsxsvYgrRyzR30 -// SIG // uIUBHoD7G4kqVDmyW9rIDVWZeodzOwjmmC3qjeAzLhIp -// SIG // 9cAvVCch98isTtoouLGp25ayp0Kiyc8ZQU3ghvkqmqMR -// SIG // ZjDTu3QyS99je/WZii8bxyGvWbWu3EQ8l1Bx16HSxVXj -// SIG // ad5XwdHeMMD9zOZN+w2/XU/pnR4ZOC+8z1gFLu8NoFA1 -// SIG // 2u8JJxzVs341Hgi62jbb01+P3nSISRKhggLXMIICQAIB -// SIG // ATCCAQChgdikgdUwgdIxCzAJBgNVBAYTAlVTMRMwEQYD -// SIG // VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k -// SIG // MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x -// SIG // LTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJh -// SIG // dGlvbnMgTGltaXRlZDEmMCQGA1UECxMdVGhhbGVzIFRT -// SIG // UyBFU046MTc5RS00QkIwLTgyNDYxJTAjBgNVBAMTHE1p -// SIG // Y3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2WiIwoBATAH -// SIG // BgUrDgMCGgMVAB1LdHpZ3mjy22teinut0UdweuTmoIGD -// SIG // MIGApH4wfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldh -// SIG // c2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNV -// SIG // BAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UE -// SIG // AxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAw -// SIG // DQYJKoZIhvcNAQEFBQACBQDkYrSTMCIYDzIwMjEwNjAz -// SIG // MDk1MzIzWhgPMjAyMTA2MDQwOTUzMjNaMHcwPQYKKwYB -// SIG // BAGEWQoEATEvMC0wCgIFAORitJMCAQAwCgIBAAICHHsC -// SIG // Af8wBwIBAAICEmcwCgIFAORkBhMCAQAwNgYKKwYBBAGE -// SIG // WQoEAjEoMCYwDAYKKwYBBAGEWQoDAqAKMAgCAQACAweh -// SIG // IKEKMAgCAQACAwGGoDANBgkqhkiG9w0BAQUFAAOBgQCY -// SIG // ousN436K7aadq4lBgT0F3tetvOpvcoc5L/B0EHZeb+rx -// SIG // I6wYloEMcVPOaLiSMMf0VDjzUIG3/Q31iN/Cn40W86ZS -// SIG // 86kC3qcwFL+McvgJrNZHpU0a9DUI0lHxJi36t0Z/GC7T -// SIG // XkZpJzeAvJ1M+tpdnSRqvDvn9+wzi3HqdNzQEjGCAw0w -// SIG // ggMJAgEBMIGTMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQI -// SIG // EwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4w -// SIG // HAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAk -// SIG // BgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAy -// SIG // MDEwAhMzAAABPIv9ubM/R5f9AAAAAAE8MA0GCWCGSAFl -// SIG // AwQCAQUAoIIBSjAaBgkqhkiG9w0BCQMxDQYLKoZIhvcN -// SIG // AQkQAQQwLwYJKoZIhvcNAQkEMSIEIEDP9TS9t0tVhYYh -// SIG // aVWNhKGSloUqLAb0iMBgj6/F5ZD7MIH6BgsqhkiG9w0B -// SIG // CRACLzGB6jCB5zCB5DCBvQQgoEkCuk0kv8DnOqm31HwR -// SIG // r+2IbD3xmIW4FSGK4SboWkYwgZgwgYCkfjB8MQswCQYD -// SIG // VQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4G -// SIG // A1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0 -// SIG // IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQg -// SIG // VGltZS1TdGFtcCBQQ0EgMjAxMAITMwAAATyL/bmzP0eX -// SIG // /QAAAAABPDAiBCALHqq7hdXl2pLRNhwHbHSPjkcaMyvv -// SIG // QZpBGWeSTRYazzANBgkqhkiG9w0BAQsFAASCAQA/tNOS -// SIG // ROAW5YXTbJIsKtU+QCCg2z5gPErQeDJUj/F5VP3vAdSc -// SIG // 2htKXzRXPBa2ogS+bgULMjfrf8WXkjtLfhC7EGdKyJqV -// SIG // RbCt+hOfPMyARE97EaiTukNbqVVLRM68CnknsBdi5HOg -// SIG // K2qd7C3CZfTv2qF8rhmsWXdR9rRG9LBOIwIoABna0gIU -// SIG // dPWrqLwRKNVNQznSFwKlI8WyLsFExx64d13AspZxjcKv -// SIG // dedPCLNvqqw8n4RZGXy2T8snU2somQLPRpyv11U3B8El -// SIG // MVok0S3YqvHSYGWslEKeDiavLaY38JkbFZSa6WVBxxqP -// SIG // vjdCNxwuZMlTu3cZPdUo7iY31BTQ -// SIG // End signature block diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/pinvoke.c b/Examples/Complete/Camera/Blazor/wwwroot/_framework/pinvoke.c deleted file mode 100644 index 3804005cb5..0000000000 --- a/Examples/Complete/Camera/Blazor/wwwroot/_framework/pinvoke.c +++ /dev/null @@ -1,61 +0,0 @@ -#include "pinvoke.h" - -#include - -/* - * The table header contain autogenerated function declarations, so avoid including standard headers - * to avoid incompatible declarations. - */ -#define NULL ((void*)0) -int strcmp (const char *s1, const char *s2); -void mono_wasm_printerr (const char *s); - -#ifdef GEN_PINVOKE -#include "pinvoke-table.h" -#else -#include "pinvoke-tables-default.h" -#endif - -void -mono_wasm_pinvoke_vararg_stub (void) -{ - /* This is just a stub used to mark vararg pinvokes */ -} - -void* -wasm_dl_lookup_pinvoke_table (const char *name) -{ - for (int i = 0; i < sizeof (pinvoke_tables) / sizeof (void*); ++i) { - if (!strcmp (name, pinvoke_names [i])) - return pinvoke_tables [i]; - } - return NULL; -} - -int -wasm_dl_is_pinvoke_table (void *handle) -{ - for (int i = 0; i < sizeof (pinvoke_tables) / sizeof (void*); ++i) { - if (pinvoke_tables [i] == handle) { - return 1; - } - } - return 0; -} - -void* -wasm_dl_get_native_to_interp (const char *key, void *extra_arg) -{ -#ifdef GEN_PINVOKE - for (int i = 0; i < sizeof (wasm_native_to_interp_map) / sizeof (void*); ++i) { - if (!strcmp (wasm_native_to_interp_map [i], key)) { - void *addr = wasm_native_to_interp_funcs [i]; - wasm_native_to_interp_ftndescs [i] = *(InterpFtnDesc*)extra_arg; - return addr; - } - } - return NULL; -#else - return NULL; -#endif -} diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/pinvoke.h b/Examples/Complete/Camera/Blazor/wwwroot/_framework/pinvoke.h deleted file mode 100644 index 03c5ce4ed6..0000000000 --- a/Examples/Complete/Camera/Blazor/wwwroot/_framework/pinvoke.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef __PINVOKE_H__ -#define __PINVOKE_H__ - -typedef struct { - const char *name; - void *func; -} PinvokeImport; - -typedef struct { - void *func; - void *arg; -} InterpFtnDesc; - -void* -wasm_dl_lookup_pinvoke_table (const char *name); - -int -wasm_dl_is_pinvoke_table (void *handle); - -void* -wasm_dl_get_native_to_interp (const char *key, void *extra_arg); - -void -mono_wasm_pinvoke_vararg_stub (void); - -#endif diff --git a/Examples/Complete/Camera/Blazor/wwwroot/_framework/protobuf-net.Core.dll b/Examples/Complete/Camera/Blazor/wwwroot/_framework/protobuf-net.Core.dll deleted file mode 100644 index 602fa0f6f9..0000000000 Binary files a/Examples/Complete/Camera/Blazor/wwwroot/_framework/protobuf-net.Core.dll and /dev/null differ diff --git a/Examples/Complete/Camera/Blazor/wwwroot/css/app.css b/Examples/Complete/Camera/Blazor/wwwroot/css/app.css new file mode 100644 index 0000000000..54a8aa38c3 --- /dev/null +++ b/Examples/Complete/Camera/Blazor/wwwroot/css/app.css @@ -0,0 +1,103 @@ +html, body { + font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; +} + +h1:focus { + outline: none; +} + +a, .btn-link { + color: #0071c1; +} + +.btn-primary { + color: #fff; + background-color: #1b6ec2; + border-color: #1861ac; +} + +.btn:focus, .btn:active:focus, .btn-link.nav-link:focus, .form-control:focus, .form-check-input:focus { + box-shadow: 0 0 0 0.1rem white, 0 0 0 0.25rem #258cfb; +} + +.content { + padding-top: 1.1rem; +} + +.valid.modified:not([type=checkbox]) { + outline: 1px solid #26b050; +} + +.invalid { + outline: 1px solid red; +} + +.validation-message { + color: red; +} + +#blazor-error-ui { + background: lightyellow; + bottom: 0; + box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2); + display: none; + left: 0; + padding: 0.6rem 1.25rem 0.7rem 1.25rem; + position: fixed; + width: 100%; + z-index: 1000; +} + + #blazor-error-ui .dismiss { + cursor: pointer; + position: absolute; + right: 0.75rem; + top: 0.5rem; + } + +.blazor-error-boundary { + background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2LjYwNiA1Mi4yNjU4TDI2Ny4wNTIgNTIuNzk4NyAyNjcuNTM5IDUzLjYyODMgMjkwLjE4NSA5Mi4xODMxIDI5MC41NDUgOTIuNzk1IDI5MC42NTYgOTIuOTk2QzI5MC44NzcgOTMuNTEzIDI5MSA5NC4wODE1IDI5MSA5NC42NzgyIDI5MSA5Ny4wNjUxIDI4OS4wMzggOTkgMjg2LjYxNyA5OUwyNDAuMzgzIDk5QzIzNy45NjMgOTkgMjM2IDk3LjA2NTEgMjM2IDk0LjY3ODIgMjM2IDk0LjM3OTkgMjM2LjAzMSA5NC4wODg2IDIzNi4wODkgOTMuODA3MkwyMzYuMzM4IDkzLjAxNjIgMjM2Ljg1OCA5Mi4xMzE0IDI1OS40NzMgNTMuNjI5NCAyNTkuOTYxIDUyLjc5ODUgMjYwLjQwNyA1Mi4yNjU4QzI2MS4yIDUxLjQ4MzcgMjYyLjI5NiA1MSAyNjMuNTA2IDUxWk0yNjMuNTg2IDY2LjAxODNDMjYwLjczNyA2Ni4wMTgzIDI1OS4zMTMgNjcuMTI0NSAyNTkuMzEzIDY5LjMzNyAyNTkuMzEzIDY5LjYxMDIgMjU5LjMzMiA2OS44NjA4IDI1OS4zNzEgNzAuMDg4N0wyNjEuNzk1IDg0LjAxNjEgMjY1LjM4IDg0LjAxNjEgMjY3LjgyMSA2OS43NDc1QzI2Ny44NiA2OS43MzA5IDI2Ny44NzkgNjkuNTg3NyAyNjcuODc5IDY5LjMxNzkgMjY3Ljg3OSA2Ny4xMTgyIDI2Ni40NDggNjYuMDE4MyAyNjMuNTg2IDY2LjAxODNaTTI2My41NzYgODYuMDU0N0MyNjEuMDQ5IDg2LjA1NDcgMjU5Ljc4NiA4Ny4zMDA1IDI1OS43ODYgODkuNzkyMSAyNTkuNzg2IDkyLjI4MzcgMjYxLjA0OSA5My41Mjk1IDI2My41NzYgOTMuNTI5NSAyNjYuMTE2IDkzLjUyOTUgMjY3LjM4NyA5Mi4yODM3IDI2Ny4zODcgODkuNzkyMSAyNjcuMzg3IDg3LjMwMDUgMjY2LjExNiA4Ni4wNTQ3IDI2My41NzYgODYuMDU0N1oiIGZpbGw9IiNGRkU1MDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=) no-repeat 1rem/1.8rem, #b32121; + padding: 1rem 1rem 1rem 3.7rem; + color: white; +} + + .blazor-error-boundary::after { + content: "An error has occurred." + } + +.loading-progress { + position: relative; + display: block; + width: 8rem; + height: 8rem; + margin: 20vh auto 1rem auto; +} + + .loading-progress circle { + fill: none; + stroke: #e0e0e0; + stroke-width: 0.6rem; + transform-origin: 50% 50%; + transform: rotate(-90deg); + } + + .loading-progress circle:last-child { + stroke: #1b6ec2; + stroke-dasharray: calc(3.141 * var(--blazor-load-percentage, 0%) * 0.8), 500%; + transition: stroke-dasharray 0.05s ease-in-out; + } + +.loading-progress-text { + position: absolute; + text-align: center; + font-weight: bold; + inset: calc(20vh + 3.25rem) 0 auto 0.2rem; +} + + .loading-progress-text:after { + content: var(--blazor-load-percentage-text, "Loading"); + } + +code { + color: #c02d76; +} diff --git a/Examples/Complete/Camera/Blazor/wwwroot/css/bootstrap/bootstrap.min.css b/Examples/Complete/Camera/Blazor/wwwroot/css/bootstrap/bootstrap.min.css new file mode 100644 index 0000000000..02ae65b5fe --- /dev/null +++ b/Examples/Complete/Camera/Blazor/wwwroot/css/bootstrap/bootstrap.min.css @@ -0,0 +1,7 @@ +@charset "UTF-8";/*! + * Bootstrap v5.1.0 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors + * Copyright 2011-2021 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */:root{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-primary:#0d6efd;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-primary-rgb:13,110,253;--bs-secondary-rgb:108,117,125;--bs-success-rgb:25,135,84;--bs-info-rgb:13,202,240;--bs-warning-rgb:255,193,7;--bs-danger-rgb:220,53,69;--bs-light-rgb:248,249,250;--bs-dark-rgb:33,37,41;--bs-white-rgb:255,255,255;--bs-black-rgb:0,0,0;--bs-body-rgb:33,37,41;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--bs-gradient:linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:400;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-body-bg:#fff}*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){.h1,h1{font-size:2.5rem}}.h2,h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){.h2,h2{font-size:2rem}}.h3,h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){.h3,h3{font-size:1.75rem}}.h4,h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){.h4,h4{font-size:1.5rem}}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}.small,small{font-size:.875em}.mark,mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:var(--bs-font-monospace);font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:.875em;color:#6c757d}.blockquote-footer::before{content:"— "}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:.875em;color:#6c757d}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{width:100%;padding-right:var(--bs-gutter-x,.75rem);padding-left:var(--bs-gutter-x,.75rem);margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}@media (min-width:1400px){.container,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{max-width:1320px}}.row{--bs-gutter-x:1.5rem;--bs-gutter-y:0;display:flex;flex-wrap:wrap;margin-top:calc(var(--bs-gutter-y) * -1);margin-right:calc(var(--bs-gutter-x) * -.5);margin-left:calc(var(--bs-gutter-x) * -.5)}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.6666666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}.g-0,.gx-0{--bs-gutter-x:0}.g-0,.gy-0{--bs-gutter-y:0}.g-1,.gx-1{--bs-gutter-x:0.25rem}.g-1,.gy-1{--bs-gutter-y:0.25rem}.g-2,.gx-2{--bs-gutter-x:0.5rem}.g-2,.gy-2{--bs-gutter-y:0.5rem}.g-3,.gx-3{--bs-gutter-x:1rem}.g-3,.gy-3{--bs-gutter-y:1rem}.g-4,.gx-4{--bs-gutter-x:1.5rem}.g-4,.gy-4{--bs-gutter-y:1.5rem}.g-5,.gx-5{--bs-gutter-x:3rem}.g-5,.gy-5{--bs-gutter-y:3rem}@media (min-width:576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.6666666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x:0}.g-sm-0,.gy-sm-0{--bs-gutter-y:0}.g-sm-1,.gx-sm-1{--bs-gutter-x:0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y:0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x:0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y:0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x:1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y:1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x:1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y:1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x:3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y:3rem}}@media (min-width:768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.6666666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x:0}.g-md-0,.gy-md-0{--bs-gutter-y:0}.g-md-1,.gx-md-1{--bs-gutter-x:0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y:0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x:0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y:0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x:1rem}.g-md-3,.gy-md-3{--bs-gutter-y:1rem}.g-md-4,.gx-md-4{--bs-gutter-x:1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y:1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x:3rem}.g-md-5,.gy-md-5{--bs-gutter-y:3rem}}@media (min-width:992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.6666666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x:0}.g-lg-0,.gy-lg-0{--bs-gutter-y:0}.g-lg-1,.gx-lg-1{--bs-gutter-x:0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y:0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x:0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y:0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x:1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y:1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x:1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y:1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x:3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y:3rem}}@media (min-width:1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x:0}.g-xl-0,.gy-xl-0{--bs-gutter-y:0}.g-xl-1,.gx-xl-1{--bs-gutter-x:0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y:0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x:0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y:0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x:1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y:1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x:1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y:1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x:3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y:3rem}}@media (min-width:1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333333%}.offset-xxl-2{margin-left:16.66666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333333%}.offset-xxl-5{margin-left:41.66666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333333%}.offset-xxl-8{margin-left:66.66666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333333%}.offset-xxl-11{margin-left:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x:0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y:0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x:0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y:0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x:0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y:0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x:1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y:1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x:1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y:1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x:3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y:3rem}}.table{--bs-table-bg:transparent;--bs-table-accent-bg:transparent;--bs-table-striped-color:#212529;--bs-table-striped-bg:rgba(0, 0, 0, 0.05);--bs-table-active-color:#212529;--bs-table-active-bg:rgba(0, 0, 0, 0.1);--bs-table-hover-color:#212529;--bs-table-hover-bg:rgba(0, 0, 0, 0.075);width:100%;margin-bottom:1rem;color:#212529;vertical-align:top;border-color:#dee2e6}.table>:not(caption)>*>*{padding:.5rem .5rem;background-color:var(--bs-table-bg);border-bottom-width:1px;box-shadow:inset 0 0 0 9999px var(--bs-table-accent-bg)}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table>:not(:last-child)>:last-child>*{border-bottom-color:currentColor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:1px 0}.table-bordered>:not(caption)>*>*{border-width:0 1px}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-striped>tbody>tr:nth-of-type(odd){--bs-table-accent-bg:var(--bs-table-striped-bg);color:var(--bs-table-striped-color)}.table-active{--bs-table-accent-bg:var(--bs-table-active-bg);color:var(--bs-table-active-color)}.table-hover>tbody>tr:hover{--bs-table-accent-bg:var(--bs-table-hover-bg);color:var(--bs-table-hover-color)}.table-primary{--bs-table-bg:#cfe2ff;--bs-table-striped-bg:#c5d7f2;--bs-table-striped-color:#000;--bs-table-active-bg:#bacbe6;--bs-table-active-color:#000;--bs-table-hover-bg:#bfd1ec;--bs-table-hover-color:#000;color:#000;border-color:#bacbe6}.table-secondary{--bs-table-bg:#e2e3e5;--bs-table-striped-bg:#d7d8da;--bs-table-striped-color:#000;--bs-table-active-bg:#cbccce;--bs-table-active-color:#000;--bs-table-hover-bg:#d1d2d4;--bs-table-hover-color:#000;color:#000;border-color:#cbccce}.table-success{--bs-table-bg:#d1e7dd;--bs-table-striped-bg:#c7dbd2;--bs-table-striped-color:#000;--bs-table-active-bg:#bcd0c7;--bs-table-active-color:#000;--bs-table-hover-bg:#c1d6cc;--bs-table-hover-color:#000;color:#000;border-color:#bcd0c7}.table-info{--bs-table-bg:#cff4fc;--bs-table-striped-bg:#c5e8ef;--bs-table-striped-color:#000;--bs-table-active-bg:#badce3;--bs-table-active-color:#000;--bs-table-hover-bg:#bfe2e9;--bs-table-hover-color:#000;color:#000;border-color:#badce3}.table-warning{--bs-table-bg:#fff3cd;--bs-table-striped-bg:#f2e7c3;--bs-table-striped-color:#000;--bs-table-active-bg:#e6dbb9;--bs-table-active-color:#000;--bs-table-hover-bg:#ece1be;--bs-table-hover-color:#000;color:#000;border-color:#e6dbb9}.table-danger{--bs-table-bg:#f8d7da;--bs-table-striped-bg:#eccccf;--bs-table-striped-color:#000;--bs-table-active-bg:#dfc2c4;--bs-table-active-color:#000;--bs-table-hover-bg:#e5c7ca;--bs-table-hover-color:#000;color:#000;border-color:#dfc2c4}.table-light{--bs-table-bg:#f8f9fa;--bs-table-striped-bg:#ecedee;--bs-table-striped-color:#000;--bs-table-active-bg:#dfe0e1;--bs-table-active-color:#000;--bs-table-hover-bg:#e5e6e7;--bs-table-hover-color:#000;color:#000;border-color:#dfe0e1}.table-dark{--bs-table-bg:#212529;--bs-table-striped-bg:#2c3034;--bs-table-striped-color:#fff;--bs-table-active-bg:#373b3e;--bs-table-active-color:#fff;--bs-table-hover-bg:#323539;--bs-table-hover-color:#fff;color:#fff;border-color:#373b3e}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media (max-width:575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem}.form-text{margin-top:.25rem;font-size:.875em;color:#6c757d}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:#212529;background-color:#fff;border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-control::-webkit-date-and-time-value{height:1.5em}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}.form-control::file-selector-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:#dde0e3}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control::-webkit-file-upload-button{-webkit-transition:none;transition:none}}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:#dde0e3}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + .75rem + 2px)}textarea.form-control-sm{min-height:calc(1.5em + .5rem + 2px)}textarea.form-control-lg{min-height:calc(1.5em + 1rem + 2px)}.form-control-color{width:3rem;height:auto;padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{height:1.5em;border-radius:.25rem}.form-control-color::-webkit-color-swatch{height:1.5em;border-radius:.25rem}.form-select{display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;-moz-padding-start:calc(0.75rem - 3px);font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-select{transition:none}}.form-select:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:#e9ecef}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #212529}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.form-check{display:block;min-height:1.5rem;padding-left:1.5em;margin-bottom:.125rem}.form-check .form-check-input{float:left;margin-left:-1.5em}.form-check-input{width:1em;height:1em;margin-top:.25em;vertical-align:top;background-color:#fff;background-repeat:no-repeat;background-position:center;background-size:contain;border:1px solid rgba(0,0,0,.25);-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-print-color-adjust:exact;color-adjust:exact}.form-check-input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-check-input:checked{background-color:#0d6efd;border-color:#0d6efd}.form-check-input:checked[type=checkbox]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e")}.form-check-input:checked[type=radio]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.form-check-input[type=checkbox]:indeterminate{background-color:#0d6efd;border-color:#0d6efd;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{opacity:.5}.form-switch{padding-left:2.5em}.form-switch .form-check-input{width:2em;margin-left:-2.5em;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");background-position:left center;border-radius:2em;transition:background-position .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:right center;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.btn-check:disabled+.btn,.btn-check[disabled]+.btn{pointer-events:none;filter:none;opacity:.65}.form-range{width:100%;height:1.5rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#0d6efd;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#b6d4fe}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#0d6efd;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-range::-moz-range-thumb{-moz-transition:none;transition:none}}.form-range::-moz-range-thumb:active{background-color:#b6d4fe}.form-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.form-range:disabled::-moz-range-thumb{background-color:#adb5bd}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-select{height:calc(3.5rem + 2px);line-height:1.25}.form-floating>label{position:absolute;top:0;left:0;height:100%;padding:1rem .75rem;pointer-events:none;border:1px solid transparent;transform-origin:0 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out}@media (prefers-reduced-motion:reduce){.form-floating>label{transition:none}}.form-floating>.form-control{padding:1rem .75rem}.form-floating>.form-control::-moz-placeholder{color:transparent}.form-floating>.form-control::placeholder{color:transparent}.form-floating>.form-control:not(:-moz-placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:not(:-moz-placeholder-shown)~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-select~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control:-webkit-autofill~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-select:focus{z-index:3}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:3}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-lg>.btn,.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.input-group-sm>.btn,.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3),.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu){border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4),.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:-1px;border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#198754}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:rgba(25,135,84,.9);border-radius:.25rem}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:#198754;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.form-select.is-valid,.was-validated .form-select:valid{border-color:#198754}.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"],.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"]{padding-right:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.form-select.is-valid:focus,.was-validated .form-select:valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.form-check-input.is-valid,.was-validated .form-check-input:valid{border-color:#198754}.form-check-input.is-valid:checked,.was-validated .form-check-input:valid:checked{background-color:#198754}.form-check-input.is-valid:focus,.was-validated .form-check-input:valid:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#198754}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.input-group .form-control.is-valid,.input-group .form-select.is-valid,.was-validated .input-group .form-control:valid,.was-validated .input-group .form-select:valid{z-index:1}.input-group .form-control.is-valid:focus,.input-group .form-select.is-valid:focus,.was-validated .input-group .form-control:valid:focus,.was-validated .input-group .form-select:valid:focus{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.form-select.is-invalid,.was-validated .form-select:invalid{border-color:#dc3545}.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"],.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"]{padding-right:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.form-select.is-invalid:focus,.was-validated .form-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.form-check-input.is-invalid,.was-validated .form-check-input:invalid{border-color:#dc3545}.form-check-input.is-invalid:checked,.was-validated .form-check-input:invalid:checked{background-color:#dc3545}.form-check-input.is-invalid:focus,.was-validated .form-check-input:invalid:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.input-group .form-control.is-invalid,.input-group .form-select.is-invalid,.was-validated .input-group .form-control:invalid,.was-validated .input-group .form-select:invalid{z-index:2}.input-group .form-control.is-invalid:focus,.input-group .form-select.is-invalid:focus,.was-validated .input-group .form-control:invalid:focus,.was-validated .input-group .form-select:invalid:focus{z-index:3}.btn{display:inline-block;font-weight:400;line-height:1.5;color:#212529;text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529}.btn-check:focus+.btn,.btn:focus{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.btn.disabled,.btn:disabled,fieldset:disabled .btn{pointer-events:none;opacity:.65}.btn-primary{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-primary:hover{color:#fff;background-color:#0b5ed7;border-color:#0a58ca}.btn-check:focus+.btn-primary,.btn-primary:focus{color:#fff;background-color:#0b5ed7;border-color:#0a58ca;box-shadow:0 0 0 .25rem rgba(49,132,253,.5)}.btn-check:active+.btn-primary,.btn-check:checked+.btn-primary,.btn-primary.active,.btn-primary:active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0a58ca;border-color:#0a53be}.btn-check:active+.btn-primary:focus,.btn-check:checked+.btn-primary:focus,.btn-primary.active:focus,.btn-primary:active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(49,132,253,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5c636a;border-color:#565e64}.btn-check:focus+.btn-secondary,.btn-secondary:focus{color:#fff;background-color:#5c636a;border-color:#565e64;box-shadow:0 0 0 .25rem rgba(130,138,145,.5)}.btn-check:active+.btn-secondary,.btn-check:checked+.btn-secondary,.btn-secondary.active,.btn-secondary:active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#565e64;border-color:#51585e}.btn-check:active+.btn-secondary:focus,.btn-check:checked+.btn-secondary:focus,.btn-secondary.active:focus,.btn-secondary:active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-success{color:#fff;background-color:#198754;border-color:#198754}.btn-success:hover{color:#fff;background-color:#157347;border-color:#146c43}.btn-check:focus+.btn-success,.btn-success:focus{color:#fff;background-color:#157347;border-color:#146c43;box-shadow:0 0 0 .25rem rgba(60,153,110,.5)}.btn-check:active+.btn-success,.btn-check:checked+.btn-success,.btn-success.active,.btn-success:active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#146c43;border-color:#13653f}.btn-check:active+.btn-success:focus,.btn-check:checked+.btn-success:focus,.btn-success.active:focus,.btn-success:active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(60,153,110,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#198754;border-color:#198754}.btn-info{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-info:hover{color:#000;background-color:#31d2f2;border-color:#25cff2}.btn-check:focus+.btn-info,.btn-info:focus{color:#000;background-color:#31d2f2;border-color:#25cff2;box-shadow:0 0 0 .25rem rgba(11,172,204,.5)}.btn-check:active+.btn-info,.btn-check:checked+.btn-info,.btn-info.active,.btn-info:active,.show>.btn-info.dropdown-toggle{color:#000;background-color:#3dd5f3;border-color:#25cff2}.btn-check:active+.btn-info:focus,.btn-check:checked+.btn-info:focus,.btn-info.active:focus,.btn-info:active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(11,172,204,.5)}.btn-info.disabled,.btn-info:disabled{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-warning{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#000;background-color:#ffca2c;border-color:#ffc720}.btn-check:focus+.btn-warning,.btn-warning:focus{color:#000;background-color:#ffca2c;border-color:#ffc720;box-shadow:0 0 0 .25rem rgba(217,164,6,.5)}.btn-check:active+.btn-warning,.btn-check:checked+.btn-warning,.btn-warning.active,.btn-warning:active,.show>.btn-warning.dropdown-toggle{color:#000;background-color:#ffcd39;border-color:#ffc720}.btn-check:active+.btn-warning:focus,.btn-check:checked+.btn-warning:focus,.btn-warning.active:focus,.btn-warning:active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(217,164,6,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#bb2d3b;border-color:#b02a37}.btn-check:focus+.btn-danger,.btn-danger:focus{color:#fff;background-color:#bb2d3b;border-color:#b02a37;box-shadow:0 0 0 .25rem rgba(225,83,97,.5)}.btn-check:active+.btn-danger,.btn-check:checked+.btn-danger,.btn-danger.active,.btn-danger:active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#b02a37;border-color:#a52834}.btn-check:active+.btn-danger:focus,.btn-check:checked+.btn-danger:focus,.btn-danger.active:focus,.btn-danger:active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-light{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:focus+.btn-light,.btn-light:focus{color:#000;background-color:#f9fafb;border-color:#f9fafb;box-shadow:0 0 0 .25rem rgba(211,212,213,.5)}.btn-check:active+.btn-light,.btn-check:checked+.btn-light,.btn-light.active,.btn-light:active,.show>.btn-light.dropdown-toggle{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:active+.btn-light:focus,.btn-check:checked+.btn-light:focus,.btn-light.active:focus,.btn-light:active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(211,212,213,.5)}.btn-light.disabled,.btn-light:disabled{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-dark{color:#fff;background-color:#212529;border-color:#212529}.btn-dark:hover{color:#fff;background-color:#1c1f23;border-color:#1a1e21}.btn-check:focus+.btn-dark,.btn-dark:focus{color:#fff;background-color:#1c1f23;border-color:#1a1e21;box-shadow:0 0 0 .25rem rgba(66,70,73,.5)}.btn-check:active+.btn-dark,.btn-check:checked+.btn-dark,.btn-dark.active,.btn-dark:active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1a1e21;border-color:#191c1f}.btn-check:active+.btn-dark:focus,.btn-check:checked+.btn-dark:focus,.btn-dark.active:focus,.btn-dark:active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(66,70,73,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#212529;border-color:#212529}.btn-outline-primary{color:#0d6efd;border-color:#0d6efd}.btn-outline-primary:hover{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-check:focus+.btn-outline-primary,.btn-outline-primary:focus{box-shadow:0 0 0 .25rem rgba(13,110,253,.5)}.btn-check:active+.btn-outline-primary,.btn-check:checked+.btn-outline-primary,.btn-outline-primary.active,.btn-outline-primary.dropdown-toggle.show,.btn-outline-primary:active{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-check:active+.btn-outline-primary:focus,.btn-check:checked+.btn-outline-primary:focus,.btn-outline-primary.active:focus,.btn-outline-primary.dropdown-toggle.show:focus,.btn-outline-primary:active:focus{box-shadow:0 0 0 .25rem rgba(13,110,253,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#0d6efd;background-color:transparent}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-check:focus+.btn-outline-secondary,.btn-outline-secondary:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,.5)}.btn-check:active+.btn-outline-secondary,.btn-check:checked+.btn-outline-secondary,.btn-outline-secondary.active,.btn-outline-secondary.dropdown-toggle.show,.btn-outline-secondary:active{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-check:active+.btn-outline-secondary:focus,.btn-check:checked+.btn-outline-secondary:focus,.btn-outline-secondary.active:focus,.btn-outline-secondary.dropdown-toggle.show:focus,.btn-outline-secondary:active:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-success{color:#198754;border-color:#198754}.btn-outline-success:hover{color:#fff;background-color:#198754;border-color:#198754}.btn-check:focus+.btn-outline-success,.btn-outline-success:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-check:active+.btn-outline-success,.btn-check:checked+.btn-outline-success,.btn-outline-success.active,.btn-outline-success.dropdown-toggle.show,.btn-outline-success:active{color:#fff;background-color:#198754;border-color:#198754}.btn-check:active+.btn-outline-success:focus,.btn-check:checked+.btn-outline-success:focus,.btn-outline-success.active:focus,.btn-outline-success.dropdown-toggle.show:focus,.btn-outline-success:active:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#198754;background-color:transparent}.btn-outline-info{color:#0dcaf0;border-color:#0dcaf0}.btn-outline-info:hover{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:focus+.btn-outline-info,.btn-outline-info:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-check:active+.btn-outline-info,.btn-check:checked+.btn-outline-info,.btn-outline-info.active,.btn-outline-info.dropdown-toggle.show,.btn-outline-info:active{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:active+.btn-outline-info:focus,.btn-check:checked+.btn-outline-info:focus,.btn-outline-info.active:focus,.btn-outline-info.dropdown-toggle.show:focus,.btn-outline-info:active:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#0dcaf0;background-color:transparent}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:focus+.btn-outline-warning,.btn-outline-warning:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-check:active+.btn-outline-warning,.btn-check:checked+.btn-outline-warning,.btn-outline-warning.active,.btn-outline-warning.dropdown-toggle.show,.btn-outline-warning:active{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:active+.btn-outline-warning:focus,.btn-check:checked+.btn-outline-warning:focus,.btn-outline-warning.active:focus,.btn-outline-warning.dropdown-toggle.show:focus,.btn-outline-warning:active:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:focus+.btn-outline-danger,.btn-outline-danger:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)}.btn-check:active+.btn-outline-danger,.btn-check:checked+.btn-outline-danger,.btn-outline-danger.active,.btn-outline-danger.dropdown-toggle.show,.btn-outline-danger:active{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:active+.btn-outline-danger:focus,.btn-check:checked+.btn-outline-danger:focus,.btn-outline-danger.active:focus,.btn-outline-danger.dropdown-toggle.show:focus,.btn-outline-danger:active:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:focus+.btn-outline-light,.btn-outline-light:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)}.btn-check:active+.btn-outline-light,.btn-check:checked+.btn-outline-light,.btn-outline-light.active,.btn-outline-light.dropdown-toggle.show,.btn-outline-light:active{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:active+.btn-outline-light:focus,.btn-check:checked+.btn-outline-light:focus,.btn-outline-light.active:focus,.btn-outline-light.dropdown-toggle.show:focus,.btn-outline-light:active:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-dark{color:#212529;border-color:#212529}.btn-outline-dark:hover{color:#fff;background-color:#212529;border-color:#212529}.btn-check:focus+.btn-outline-dark,.btn-outline-dark:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-check:active+.btn-outline-dark,.btn-check:checked+.btn-outline-dark,.btn-outline-dark.active,.btn-outline-dark.dropdown-toggle.show,.btn-outline-dark:active{color:#fff;background-color:#212529;border-color:#212529}.btn-check:active+.btn-outline-dark:focus,.btn-check:checked+.btn-outline-dark:focus,.btn-outline-dark.active:focus,.btn-outline-dark.dropdown-toggle.show:focus,.btn-outline-dark:active:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#212529;background-color:transparent}.btn-link{font-weight:400;color:#0d6efd;text-decoration:underline}.btn-link:hover{color:#0a58ca}.btn-link.disabled,.btn-link:disabled{color:#6c757d}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width .35s ease}@media (prefers-reduced-motion:reduce){.collapsing.collapse-horizontal{transition:none}}.dropdown,.dropend,.dropstart,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;z-index:1000;display:none;min-width:10rem;padding:.5rem 0;margin:0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:.125rem}.dropdown-menu-start{--bs-position:start}.dropdown-menu-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-end{--bs-position:end}.dropdown-menu-end[data-bs-popper]{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-start{--bs-position:start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position:end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-start{--bs-position:start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position:end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-start{--bs-position:start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position:end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-start{--bs-position:start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position:end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}@media (min-width:1400px){.dropdown-menu-xxl-start{--bs-position:start}.dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxl-end{--bs-position:end}.dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropend .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropend .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropstart .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropstart .dropdown-toggle::after{display:none}.dropstart .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropstart .dropdown-toggle:empty::after{margin-left:0}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid rgba(0,0,0,.15)}.dropdown-item{display:block;width:100%;padding:.25rem 1rem;clear:both;font-weight:400;color:#212529;text-align:inherit;text-decoration:none;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#1e2125;background-color:#e9ecef}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#0d6efd}.dropdown-item.disabled,.dropdown-item:disabled{color:#adb5bd;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1rem;color:#212529}.dropdown-menu-dark{color:#dee2e6;background-color:#343a40;border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item{color:#dee2e6}.dropdown-menu-dark .dropdown-item:focus,.dropdown-menu-dark .dropdown-item:hover{color:#fff;background-color:rgba(255,255,255,.15)}.dropdown-menu-dark .dropdown-item.active,.dropdown-menu-dark .dropdown-item:active{color:#fff;background-color:#0d6efd}.dropdown-menu-dark .dropdown-item.disabled,.dropdown-menu-dark .dropdown-item:disabled{color:#adb5bd}.dropdown-menu-dark .dropdown-divider{border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item-text{color:#dee2e6}.dropdown-menu-dark .dropdown-header{color:#adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;flex:1 1 auto}.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropstart .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn~.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem;color:#0d6efd;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media (prefers-reduced-motion:reduce){.nav-link{transition:none}}.nav-link:focus,.nav-link:hover{color:#0a58ca}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-link{margin-bottom:-1px;background:0 0;border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6;isolation:isolate}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{background:0 0;border:0;border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#0d6efd}.nav-fill .nav-item,.nav-fill>.nav-link{flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{flex-basis:0;flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding-top:.5rem;padding-bottom:.5rem}.navbar>.container,.navbar>.container-fluid,.navbar>.container-lg,.navbar>.container-md,.navbar>.container-sm,.navbar>.container-xl,.navbar>.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}.navbar-brand{padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;text-decoration:none;white-space:nowrap}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem;transition:box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 .25rem}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height,75vh);overflow-y:auto}@media (min-width:576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas-header{display:none}.navbar-expand-sm .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-sm .offcanvas-bottom,.navbar-expand-sm .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-sm .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas-header{display:none}.navbar-expand-md .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-md .offcanvas-bottom,.navbar-expand-md .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-md .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas-header{display:none}.navbar-expand-lg .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-lg .offcanvas-bottom,.navbar-expand-lg .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-lg .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas-header{display:none}.navbar-expand-xl .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-xl .offcanvas-bottom,.navbar-expand-xl .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-xl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-xxl .offcanvas-bottom,.navbar-expand-xxl .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-xxl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas-header{display:none}.navbar-expand .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand .offcanvas-bottom,.navbar-expand .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.55)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.55);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.55)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.55)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.55);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.55)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;padding:1rem 1rem}.card-title{margin-bottom:.5rem}.card-subtitle{margin-top:-.25rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link+.card-link{margin-left:1rem}.card-header{padding:.5rem 1rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-footer{padding:.5rem 1rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.5rem;margin-bottom:-.5rem;margin-left:-.5rem;border-bottom:0}.card-header-pills{margin-right:-.5rem;margin-left:-.5rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom,.card-img-top{width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-group>.card{margin-bottom:.75rem}@media (min-width:576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.accordion-button{position:relative;display:flex;align-items:center;width:100%;padding:1rem 1.25rem;font-size:1rem;color:#212529;text-align:left;background-color:#fff;border:0;border-radius:0;overflow-anchor:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,border-radius .15s ease}@media (prefers-reduced-motion:reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){color:#0c63e4;background-color:#e7f1ff;box-shadow:inset 0 -1px 0 rgba(0,0,0,.125)}.accordion-button:not(.collapsed)::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230c63e4'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");transform:rotate(-180deg)}.accordion-button::after{flex-shrink:0;width:1.25rem;height:1.25rem;margin-left:auto;content:"";background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-size:1.25rem;transition:transform .2s ease-in-out}@media (prefers-reduced-motion:reduce){.accordion-button::after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.accordion-header{margin-bottom:0}.accordion-item{background-color:#fff;border:1px solid rgba(0,0,0,.125)}.accordion-item:first-of-type{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.accordion-item:first-of-type .accordion-button{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.accordion-item:last-of-type .accordion-button.collapsed{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.accordion-item:last-of-type .accordion-collapse{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.accordion-body{padding:1rem 1.25rem}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item{border-right:0;border-left:0;border-radius:0}.accordion-flush .accordion-item:first-child{border-top:0}.accordion-flush .accordion-item:last-child{border-bottom:0}.accordion-flush .accordion-item .accordion-button{border-radius:0}.breadcrumb{display:flex;flex-wrap:wrap;padding:0 0;margin-bottom:1rem;list-style:none}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:.5rem;color:#6c757d;content:var(--bs-breadcrumb-divider, "/")}.breadcrumb-item.active{color:#6c757d}.pagination{display:flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;color:#0d6efd;text-decoration:none;background-color:#fff;border:1px solid #dee2e6;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:#0a58ca;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;color:#0a58ca;background-color:#e9ecef;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.page-item:not(:first-child) .page-link{margin-left:-1px}.page-item.active .page-link{z-index:3;color:#fff;background-color:#0d6efd;border-color:#0d6efd}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;background-color:#fff;border-color:#dee2e6}.page-link{padding:.375rem .75rem}.page-item:first-child .page-link{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.35em .65em;font-size:.75em;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{position:relative;padding:1rem 1rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-primary{color:#084298;background-color:#cfe2ff;border-color:#b6d4fe}.alert-primary .alert-link{color:#06357a}.alert-secondary{color:#41464b;background-color:#e2e3e5;border-color:#d3d6d8}.alert-secondary .alert-link{color:#34383c}.alert-success{color:#0f5132;background-color:#d1e7dd;border-color:#badbcc}.alert-success .alert-link{color:#0c4128}.alert-info{color:#055160;background-color:#cff4fc;border-color:#b6effb}.alert-info .alert-link{color:#04414d}.alert-warning{color:#664d03;background-color:#fff3cd;border-color:#ffecb5}.alert-warning .alert-link{color:#523e02}.alert-danger{color:#842029;background-color:#f8d7da;border-color:#f5c2c7}.alert-danger .alert-link{color:#6a1a21}.alert-light{color:#636464;background-color:#fefefe;border-color:#fdfdfe}.alert-light .alert-link{color:#4f5050}.alert-dark{color:#141619;background-color:#d3d3d4;border-color:#bcbebf}.alert-dark .alert-link{color:#101214}@-webkit-keyframes progress-bar-stripes{0%{background-position-x:1rem}}@keyframes progress-bar-stripes{0%{background-position-x:1rem}}.progress{display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:flex;flex-direction:column;justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#0d6efd;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:1s linear infinite progress-bar-stripes;animation:1s linear infinite progress-bar-stripes}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.25rem}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>li::before{content:counters(section, ".") ". ";counter-increment:section}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.5rem 1rem;color:#212529;text-decoration:none;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#0d6efd;border-color:#0d6efd}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width:576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1400px){.list-group-horizontal-xxl{flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#084298;background-color:#cfe2ff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#084298;background-color:#bacbe6}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#084298;border-color:#084298}.list-group-item-secondary{color:#41464b;background-color:#e2e3e5}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#41464b;background-color:#cbccce}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#41464b;border-color:#41464b}.list-group-item-success{color:#0f5132;background-color:#d1e7dd}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#0f5132;background-color:#bcd0c7}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#0f5132;border-color:#0f5132}.list-group-item-info{color:#055160;background-color:#cff4fc}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#055160;background-color:#badce3}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#055160;border-color:#055160}.list-group-item-warning{color:#664d03;background-color:#fff3cd}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#664d03;background-color:#e6dbb9}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#664d03;border-color:#664d03}.list-group-item-danger{color:#842029;background-color:#f8d7da}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#842029;background-color:#dfc2c4}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#842029;border-color:#842029}.list-group-item-light{color:#636464;background-color:#fefefe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#636464;background-color:#e5e5e5}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#636464;border-color:#636464}.list-group-item-dark{color:#141619;background-color:#d3d3d4}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#141619;background-color:#bebebf}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#141619;border-color:#141619}.btn-close{box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:#000;background:transparent url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e") center/1em auto no-repeat;border:0;border-radius:.25rem;opacity:.5}.btn-close:hover{color:#000;text-decoration:none;opacity:.75}.btn-close:focus{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25);opacity:1}.btn-close.disabled,.btn-close:disabled{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;opacity:.25}.btn-close-white{filter:invert(1) grayscale(100%) brightness(200%)}.toast{width:350px;max-width:100%;font-size:.875rem;pointer-events:auto;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .5rem 1rem rgba(0,0,0,.15);border-radius:.25rem}.toast.showing{opacity:0}.toast:not(.show){display:none}.toast-container{width:-webkit-max-content;width:-moz-max-content;width:max-content;max-width:100%;pointer-events:none}.toast-container>:not(:last-child){margin-bottom:.75rem}.toast-header{display:flex;align-items:center;padding:.5rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05);border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.toast-header .btn-close{margin-right:-.375rem;margin-left:.75rem}.toast-body{padding:.75rem;word-wrap:break-word}.modal{position:fixed;top:0;left:0;z-index:1055;display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1050;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .btn-close{padding:.5rem .5rem;margin:-.5rem -.5rem -.5rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;flex-wrap:wrap;flex-shrink:0;align-items:center;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer>*{margin:.25rem}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{height:calc(100% - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-header{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}.modal-fullscreen .modal-footer{border-radius:0}@media (max-width:575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-header{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}.modal-fullscreen-sm-down .modal-footer{border-radius:0}}@media (max-width:767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-header{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}.modal-fullscreen-md-down .modal-footer{border-radius:0}}@media (max-width:991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-header{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}.modal-fullscreen-lg-down .modal-footer{border-radius:0}}@media (max-width:1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-header{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}.modal-fullscreen-xl-down .modal-footer{border-radius:0}}@media (max-width:1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-header{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}.modal-fullscreen-xxl-down .modal-footer{border-radius:0}}.tooltip{position:absolute;z-index:1080;display:block;margin:0;font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .tooltip-arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .tooltip-arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[data-popper-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow,.bs-tooltip-top .tooltip-arrow{bottom:0}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before,.bs-tooltip-top .tooltip-arrow::before{top:-1px;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[data-popper-placement^=right],.bs-tooltip-end{padding:0 .4rem}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow,.bs-tooltip-end .tooltip-arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before,.bs-tooltip-end .tooltip-arrow::before{right:-1px;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[data-popper-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow,.bs-tooltip-bottom .tooltip-arrow{top:0}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before,.bs-tooltip-bottom .tooltip-arrow::before{bottom:-1px;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[data-popper-placement^=left],.bs-tooltip-start{padding:0 .4rem}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow,.bs-tooltip-start .tooltip-arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before,.bs-tooltip-start .tooltip-arrow::before{left:-1px;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1070;display:block;max-width:276px;font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .popover-arrow{position:absolute;display:block;width:1rem;height:.5rem}.popover .popover-arrow::after,.popover .popover-arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow,.bs-popover-top>.popover-arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,.bs-popover-top>.popover-arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,.bs-popover-top>.popover-arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow,.bs-popover-end>.popover-arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,.bs-popover-end>.popover-arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,.bs-popover-end>.popover-arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow,.bs-popover-bottom>.popover-arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,.bs-popover-bottom>.popover-arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,.bs-popover-bottom>.popover-arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f0f0f0}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow,.bs-popover-start>.popover-arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,.bs-popover-start>.popover-arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,.bs-popover-start>.popover-arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem 1rem;margin-bottom:0;font-size:1rem;background-color:#f0f0f0;border-bottom:1px solid rgba(0,0,0,.2);border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:1rem 1rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-end,.carousel-item-next:not(.carousel-item-start){transform:translateX(100%)}.active.carousel-item-start,.carousel-item-prev:not(.carousel-item-end){transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:0 0;border:0;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;justify-content:center;padding:0;margin-right:15%;margin-bottom:1rem;margin-left:15%;list-style:none}.carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border:0;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:1.25rem;left:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:#fff;text-align:center}.carousel-dark .carousel-control-next-icon,.carousel-dark .carousel-control-prev-icon{filter:invert(1) grayscale(100)}.carousel-dark .carousel-indicators [data-bs-target]{background-color:#000}.carousel-dark .carousel-caption{color:#000}@-webkit-keyframes spinner-border{to{transform:rotate(360deg)}}@keyframes spinner-border{to{transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:-.125em;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:.75s linear infinite spinner-border;animation:.75s linear infinite spinner-border}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:-.125em;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:.75s linear infinite spinner-grow;animation:.75s linear infinite spinner-grow}.spinner-grow-sm{width:1rem;height:1rem}@media (prefers-reduced-motion:reduce){.spinner-border,.spinner-grow{-webkit-animation-duration:1.5s;animation-duration:1.5s}}.offcanvas{position:fixed;bottom:0;z-index:1045;display:flex;flex-direction:column;max-width:100%;visibility:hidden;background-color:#fff;background-clip:padding-box;outline:0;transition:transform .3s ease-in-out}@media (prefers-reduced-motion:reduce){.offcanvas{transition:none}}.offcanvas-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.offcanvas-backdrop.fade{opacity:0}.offcanvas-backdrop.show{opacity:.5}.offcanvas-header{display:flex;align-items:center;justify-content:space-between;padding:1rem 1rem}.offcanvas-header .btn-close{padding:.5rem .5rem;margin-top:-.5rem;margin-right:-.5rem;margin-bottom:-.5rem}.offcanvas-title{margin-bottom:0;line-height:1.5}.offcanvas-body{flex-grow:1;padding:1rem 1rem;overflow-y:auto}.offcanvas-start{top:0;left:0;width:400px;border-right:1px solid rgba(0,0,0,.2);transform:translateX(-100%)}.offcanvas-end{top:0;right:0;width:400px;border-left:1px solid rgba(0,0,0,.2);transform:translateX(100%)}.offcanvas-top{top:0;right:0;left:0;height:30vh;max-height:100%;border-bottom:1px solid rgba(0,0,0,.2);transform:translateY(-100%)}.offcanvas-bottom{right:0;left:0;height:30vh;max-height:100%;border-top:1px solid rgba(0,0,0,.2);transform:translateY(100%)}.offcanvas.show{transform:none}.placeholder{display:inline-block;min-height:1em;vertical-align:middle;cursor:wait;background-color:currentColor;opacity:.5}.placeholder.btn::before{display:inline-block;content:""}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{-webkit-animation:placeholder-glow 2s ease-in-out infinite;animation:placeholder-glow 2s ease-in-out infinite}@-webkit-keyframes placeholder-glow{50%{opacity:.2}}@keyframes placeholder-glow{50%{opacity:.2}}.placeholder-wave{-webkit-mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,0.8) 75%,#000 95%);mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,0.8) 75%,#000 95%);-webkit-mask-size:200% 100%;mask-size:200% 100%;-webkit-animation:placeholder-wave 2s linear infinite;animation:placeholder-wave 2s linear infinite}@-webkit-keyframes placeholder-wave{100%{-webkit-mask-position:-200% 0%;mask-position:-200% 0%}}@keyframes placeholder-wave{100%{-webkit-mask-position:-200% 0%;mask-position:-200% 0%}}.clearfix::after{display:block;clear:both;content:""}.link-primary{color:#0d6efd}.link-primary:focus,.link-primary:hover{color:#0a58ca}.link-secondary{color:#6c757d}.link-secondary:focus,.link-secondary:hover{color:#565e64}.link-success{color:#198754}.link-success:focus,.link-success:hover{color:#146c43}.link-info{color:#0dcaf0}.link-info:focus,.link-info:hover{color:#3dd5f3}.link-warning{color:#ffc107}.link-warning:focus,.link-warning:hover{color:#ffcd39}.link-danger{color:#dc3545}.link-danger:focus,.link-danger:hover{color:#b02a37}.link-light{color:#f8f9fa}.link-light:focus,.link-light:hover{color:#f9fafb}.link-dark{color:#212529}.link-dark:focus,.link-dark:hover{color:#1a1e21}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio:100%}.ratio-4x3{--bs-aspect-ratio:calc(3 / 4 * 100%)}.ratio-16x9{--bs-aspect-ratio:calc(9 / 16 * 100%)}.ratio-21x9{--bs-aspect-ratio:calc(9 / 21 * 100%)}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}@media (min-width:576px){.sticky-sm-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:768px){.sticky-md-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:992px){.sticky-lg-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:1200px){.sticky-xl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:1400px){.sticky-xxl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.hstack{display:flex;flex-direction:row;align-items:center;align-self:stretch}.vstack{display:flex;flex:1 1 auto;flex-direction:column;align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;width:1px;min-height:1em;background-color:currentColor;opacity:.25}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.float-start{float:left!important}.float-end{float:right!important}.float-none{float:none!important}.opacity-0{opacity:0!important}.opacity-25{opacity:.25!important}.opacity-50{opacity:.5!important}.opacity-75{opacity:.75!important}.opacity-100{opacity:1!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.overflow-visible{overflow:visible!important}.overflow-scroll{overflow:scroll!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-grid{display:grid!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}.d-none{display:none!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.top-0{top:0!important}.top-50{top:50%!important}.top-100{top:100%!important}.bottom-0{bottom:0!important}.bottom-50{bottom:50%!important}.bottom-100{bottom:100%!important}.start-0{left:0!important}.start-50{left:50%!important}.start-100{left:100%!important}.end-0{right:0!important}.end-50{right:50%!important}.end-100{right:100%!important}.translate-middle{transform:translate(-50%,-50%)!important}.translate-middle-x{transform:translateX(-50%)!important}.translate-middle-y{transform:translateY(-50%)!important}.border{border:1px solid #dee2e6!important}.border-0{border:0!important}.border-top{border-top:1px solid #dee2e6!important}.border-top-0{border-top:0!important}.border-end{border-right:1px solid #dee2e6!important}.border-end-0{border-right:0!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-bottom-0{border-bottom:0!important}.border-start{border-left:1px solid #dee2e6!important}.border-start-0{border-left:0!important}.border-primary{border-color:#0d6efd!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#198754!important}.border-info{border-color:#0dcaf0!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#212529!important}.border-white{border-color:#fff!important}.border-1{border-width:1px!important}.border-2{border-width:2px!important}.border-3{border-width:3px!important}.border-4{border-width:4px!important}.border-5{border-width:5px!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.mw-100{max-width:100%!important}.vw-100{width:100vw!important}.min-vw-100{min-width:100vw!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mh-100{max-height:100%!important}.vh-100{height:100vh!important}.min-vh-100{min-height:100vh!important}.flex-fill{flex:1 1 auto!important}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-0{gap:0!important}.gap-1{gap:.25rem!important}.gap-2{gap:.5rem!important}.gap-3{gap:1rem!important}.gap-4{gap:1.5rem!important}.gap-5{gap:3rem!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.justify-content-evenly{justify-content:space-evenly!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}.order-first{order:-1!important}.order-0{order:0!important}.order-1{order:1!important}.order-2{order:2!important}.order-3{order:3!important}.order-4{order:4!important}.order-5{order:5!important}.order-last{order:6!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-3{margin:1rem!important}.m-4{margin:1.5rem!important}.m-5{margin:3rem!important}.m-auto{margin:auto!important}.mx-0{margin-right:0!important;margin-left:0!important}.mx-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-3{margin-right:1rem!important;margin-left:1rem!important}.mx-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-5{margin-right:3rem!important;margin-left:3rem!important}.mx-auto{margin-right:auto!important;margin-left:auto!important}.my-0{margin-top:0!important;margin-bottom:0!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4{margin-top:1.5rem!important}.mt-5{margin-top:3rem!important}.mt-auto{margin-top:auto!important}.me-0{margin-right:0!important}.me-1{margin-right:.25rem!important}.me-2{margin-right:.5rem!important}.me-3{margin-right:1rem!important}.me-4{margin-right:1.5rem!important}.me-5{margin-right:3rem!important}.me-auto{margin-right:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:1rem!important}.mb-4{margin-bottom:1.5rem!important}.mb-5{margin-bottom:3rem!important}.mb-auto{margin-bottom:auto!important}.ms-0{margin-left:0!important}.ms-1{margin-left:.25rem!important}.ms-2{margin-left:.5rem!important}.ms-3{margin-left:1rem!important}.ms-4{margin-left:1.5rem!important}.ms-5{margin-left:3rem!important}.ms-auto{margin-left:auto!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2{padding:.5rem!important}.p-3{padding:1rem!important}.p-4{padding:1.5rem!important}.p-5{padding:3rem!important}.px-0{padding-right:0!important;padding-left:0!important}.px-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-3{padding-right:1rem!important;padding-left:1rem!important}.px-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-5{padding-right:3rem!important;padding-left:3rem!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-0{padding-top:0!important}.pt-1{padding-top:.25rem!important}.pt-2{padding-top:.5rem!important}.pt-3{padding-top:1rem!important}.pt-4{padding-top:1.5rem!important}.pt-5{padding-top:3rem!important}.pe-0{padding-right:0!important}.pe-1{padding-right:.25rem!important}.pe-2{padding-right:.5rem!important}.pe-3{padding-right:1rem!important}.pe-4{padding-right:1.5rem!important}.pe-5{padding-right:3rem!important}.pb-0{padding-bottom:0!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:1rem!important}.pb-4{padding-bottom:1.5rem!important}.pb-5{padding-bottom:3rem!important}.ps-0{padding-left:0!important}.ps-1{padding-left:.25rem!important}.ps-2{padding-left:.5rem!important}.ps-3{padding-left:1rem!important}.ps-4{padding-left:1.5rem!important}.ps-5{padding-left:3rem!important}.font-monospace{font-family:var(--bs-font-monospace)!important}.fs-1{font-size:calc(1.375rem + 1.5vw)!important}.fs-2{font-size:calc(1.325rem + .9vw)!important}.fs-3{font-size:calc(1.3rem + .6vw)!important}.fs-4{font-size:calc(1.275rem + .3vw)!important}.fs-5{font-size:1.25rem!important}.fs-6{font-size:1rem!important}.fst-italic{font-style:italic!important}.fst-normal{font-style:normal!important}.fw-light{font-weight:300!important}.fw-lighter{font-weight:lighter!important}.fw-normal{font-weight:400!important}.fw-bold{font-weight:700!important}.fw-bolder{font-weight:bolder!important}.lh-1{line-height:1!important}.lh-sm{line-height:1.25!important}.lh-base{line-height:1.5!important}.lh-lg{line-height:2!important}.text-start{text-align:left!important}.text-end{text-align:right!important}.text-center{text-align:center!important}.text-decoration-none{text-decoration:none!important}.text-decoration-underline{text-decoration:underline!important}.text-decoration-line-through{text-decoration:line-through!important}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-break{word-wrap:break-word!important;word-break:break-word!important}.text-primary{--bs-text-opacity:1;color:rgba(var(--bs-primary-rgb),var(--bs-text-opacity))!important}.text-secondary{--bs-text-opacity:1;color:rgba(var(--bs-secondary-rgb),var(--bs-text-opacity))!important}.text-success{--bs-text-opacity:1;color:rgba(var(--bs-success-rgb),var(--bs-text-opacity))!important}.text-info{--bs-text-opacity:1;color:rgba(var(--bs-info-rgb),var(--bs-text-opacity))!important}.text-warning{--bs-text-opacity:1;color:rgba(var(--bs-warning-rgb),var(--bs-text-opacity))!important}.text-danger{--bs-text-opacity:1;color:rgba(var(--bs-danger-rgb),var(--bs-text-opacity))!important}.text-light{--bs-text-opacity:1;color:rgba(var(--bs-light-rgb),var(--bs-text-opacity))!important}.text-dark{--bs-text-opacity:1;color:rgba(var(--bs-dark-rgb),var(--bs-text-opacity))!important}.text-black{--bs-text-opacity:1;color:rgba(var(--bs-black-rgb),var(--bs-text-opacity))!important}.text-white{--bs-text-opacity:1;color:rgba(var(--bs-white-rgb),var(--bs-text-opacity))!important}.text-body{--bs-text-opacity:1;color:rgba(var(--bs-body-rgb),var(--bs-text-opacity))!important}.text-muted{--bs-text-opacity:1;color:#6c757d!important}.text-black-50{--bs-text-opacity:1;color:rgba(0,0,0,.5)!important}.text-white-50{--bs-text-opacity:1;color:rgba(255,255,255,.5)!important}.text-reset{--bs-text-opacity:1;color:inherit!important}.text-opacity-25{--bs-text-opacity:0.25}.text-opacity-50{--bs-text-opacity:0.5}.text-opacity-75{--bs-text-opacity:0.75}.text-opacity-100{--bs-text-opacity:1}.bg-primary{--bs-bg-opacity:1;background-color:rgba(var(--bs-primary-rgb),var(--bs-bg-opacity))!important}.bg-secondary{--bs-bg-opacity:1;background-color:rgba(var(--bs-secondary-rgb),var(--bs-bg-opacity))!important}.bg-success{--bs-bg-opacity:1;background-color:rgba(var(--bs-success-rgb),var(--bs-bg-opacity))!important}.bg-info{--bs-bg-opacity:1;background-color:rgba(var(--bs-info-rgb),var(--bs-bg-opacity))!important}.bg-warning{--bs-bg-opacity:1;background-color:rgba(var(--bs-warning-rgb),var(--bs-bg-opacity))!important}.bg-danger{--bs-bg-opacity:1;background-color:rgba(var(--bs-danger-rgb),var(--bs-bg-opacity))!important}.bg-light{--bs-bg-opacity:1;background-color:rgba(var(--bs-light-rgb),var(--bs-bg-opacity))!important}.bg-dark{--bs-bg-opacity:1;background-color:rgba(var(--bs-dark-rgb),var(--bs-bg-opacity))!important}.bg-black{--bs-bg-opacity:1;background-color:rgba(var(--bs-black-rgb),var(--bs-bg-opacity))!important}.bg-white{--bs-bg-opacity:1;background-color:rgba(var(--bs-white-rgb),var(--bs-bg-opacity))!important}.bg-body{--bs-bg-opacity:1;background-color:rgba(var(--bs-body-rgb),var(--bs-bg-opacity))!important}.bg-transparent{--bs-bg-opacity:1;background-color:transparent!important}.bg-opacity-10{--bs-bg-opacity:0.1}.bg-opacity-25{--bs-bg-opacity:0.25}.bg-opacity-50{--bs-bg-opacity:0.5}.bg-opacity-75{--bs-bg-opacity:0.75}.bg-opacity-100{--bs-bg-opacity:1}.bg-gradient{background-image:var(--bs-gradient)!important}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;user-select:none!important}.pe-none{pointer-events:none!important}.pe-auto{pointer-events:auto!important}.rounded{border-radius:.25rem!important}.rounded-0{border-radius:0!important}.rounded-1{border-radius:.2rem!important}.rounded-2{border-radius:.25rem!important}.rounded-3{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-end{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-start{border-bottom-left-radius:.25rem!important;border-top-left-radius:.25rem!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media (min-width:576px){.float-sm-start{float:left!important}.float-sm-end{float:right!important}.float-sm-none{float:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-sm-0{gap:0!important}.gap-sm-1{gap:.25rem!important}.gap-sm-2{gap:.5rem!important}.gap-sm-3{gap:1rem!important}.gap-sm-4{gap:1.5rem!important}.gap-sm-5{gap:3rem!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.justify-content-sm-evenly{justify-content:space-evenly!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.order-sm-first{order:-1!important}.order-sm-0{order:0!important}.order-sm-1{order:1!important}.order-sm-2{order:2!important}.order-sm-3{order:3!important}.order-sm-4{order:4!important}.order-sm-5{order:5!important}.order-sm-last{order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin:3rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-right:0!important;margin-left:0!important}.mx-sm-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-sm-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-sm-3{margin-right:1rem!important;margin-left:1rem!important}.mx-sm-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-sm-5{margin-right:3rem!important;margin-left:3rem!important}.mx-sm-auto{margin-right:auto!important;margin-left:auto!important}.my-sm-0{margin-top:0!important;margin-bottom:0!important}.my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-sm-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:.25rem!important}.mt-sm-2{margin-top:.5rem!important}.mt-sm-3{margin-top:1rem!important}.mt-sm-4{margin-top:1.5rem!important}.mt-sm-5{margin-top:3rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-right:0!important}.me-sm-1{margin-right:.25rem!important}.me-sm-2{margin-right:.5rem!important}.me-sm-3{margin-right:1rem!important}.me-sm-4{margin-right:1.5rem!important}.me-sm-5{margin-right:3rem!important}.me-sm-auto{margin-right:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:.25rem!important}.mb-sm-2{margin-bottom:.5rem!important}.mb-sm-3{margin-bottom:1rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.mb-sm-5{margin-bottom:3rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-left:0!important}.ms-sm-1{margin-left:.25rem!important}.ms-sm-2{margin-left:.5rem!important}.ms-sm-3{margin-left:1rem!important}.ms-sm-4{margin-left:1.5rem!important}.ms-sm-5{margin-left:3rem!important}.ms-sm-auto{margin-left:auto!important}.p-sm-0{padding:0!important}.p-sm-1{padding:.25rem!important}.p-sm-2{padding:.5rem!important}.p-sm-3{padding:1rem!important}.p-sm-4{padding:1.5rem!important}.p-sm-5{padding:3rem!important}.px-sm-0{padding-right:0!important;padding-left:0!important}.px-sm-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-sm-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-sm-3{padding-right:1rem!important;padding-left:1rem!important}.px-sm-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-sm-5{padding-right:3rem!important;padding-left:3rem!important}.py-sm-0{padding-top:0!important;padding-bottom:0!important}.py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-sm-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:.25rem!important}.pt-sm-2{padding-top:.5rem!important}.pt-sm-3{padding-top:1rem!important}.pt-sm-4{padding-top:1.5rem!important}.pt-sm-5{padding-top:3rem!important}.pe-sm-0{padding-right:0!important}.pe-sm-1{padding-right:.25rem!important}.pe-sm-2{padding-right:.5rem!important}.pe-sm-3{padding-right:1rem!important}.pe-sm-4{padding-right:1.5rem!important}.pe-sm-5{padding-right:3rem!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:.25rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pb-sm-3{padding-bottom:1rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pb-sm-5{padding-bottom:3rem!important}.ps-sm-0{padding-left:0!important}.ps-sm-1{padding-left:.25rem!important}.ps-sm-2{padding-left:.5rem!important}.ps-sm-3{padding-left:1rem!important}.ps-sm-4{padding-left:1.5rem!important}.ps-sm-5{padding-left:3rem!important}.text-sm-start{text-align:left!important}.text-sm-end{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.float-md-start{float:left!important}.float-md-end{float:right!important}.float-md-none{float:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-md-0{gap:0!important}.gap-md-1{gap:.25rem!important}.gap-md-2{gap:.5rem!important}.gap-md-3{gap:1rem!important}.gap-md-4{gap:1.5rem!important}.gap-md-5{gap:3rem!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.justify-content-md-evenly{justify-content:space-evenly!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.order-md-first{order:-1!important}.order-md-0{order:0!important}.order-md-1{order:1!important}.order-md-2{order:2!important}.order-md-3{order:3!important}.order-md-4{order:4!important}.order-md-5{order:5!important}.order-md-last{order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin:3rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-right:0!important;margin-left:0!important}.mx-md-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-md-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-md-3{margin-right:1rem!important;margin-left:1rem!important}.mx-md-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-md-5{margin-right:3rem!important;margin-left:3rem!important}.mx-md-auto{margin-right:auto!important;margin-left:auto!important}.my-md-0{margin-top:0!important;margin-bottom:0!important}.my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-md-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-md-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:.25rem!important}.mt-md-2{margin-top:.5rem!important}.mt-md-3{margin-top:1rem!important}.mt-md-4{margin-top:1.5rem!important}.mt-md-5{margin-top:3rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-right:0!important}.me-md-1{margin-right:.25rem!important}.me-md-2{margin-right:.5rem!important}.me-md-3{margin-right:1rem!important}.me-md-4{margin-right:1.5rem!important}.me-md-5{margin-right:3rem!important}.me-md-auto{margin-right:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:.25rem!important}.mb-md-2{margin-bottom:.5rem!important}.mb-md-3{margin-bottom:1rem!important}.mb-md-4{margin-bottom:1.5rem!important}.mb-md-5{margin-bottom:3rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-left:0!important}.ms-md-1{margin-left:.25rem!important}.ms-md-2{margin-left:.5rem!important}.ms-md-3{margin-left:1rem!important}.ms-md-4{margin-left:1.5rem!important}.ms-md-5{margin-left:3rem!important}.ms-md-auto{margin-left:auto!important}.p-md-0{padding:0!important}.p-md-1{padding:.25rem!important}.p-md-2{padding:.5rem!important}.p-md-3{padding:1rem!important}.p-md-4{padding:1.5rem!important}.p-md-5{padding:3rem!important}.px-md-0{padding-right:0!important;padding-left:0!important}.px-md-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-md-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-md-3{padding-right:1rem!important;padding-left:1rem!important}.px-md-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-md-5{padding-right:3rem!important;padding-left:3rem!important}.py-md-0{padding-top:0!important;padding-bottom:0!important}.py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-md-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-md-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:.25rem!important}.pt-md-2{padding-top:.5rem!important}.pt-md-3{padding-top:1rem!important}.pt-md-4{padding-top:1.5rem!important}.pt-md-5{padding-top:3rem!important}.pe-md-0{padding-right:0!important}.pe-md-1{padding-right:.25rem!important}.pe-md-2{padding-right:.5rem!important}.pe-md-3{padding-right:1rem!important}.pe-md-4{padding-right:1.5rem!important}.pe-md-5{padding-right:3rem!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:.25rem!important}.pb-md-2{padding-bottom:.5rem!important}.pb-md-3{padding-bottom:1rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pb-md-5{padding-bottom:3rem!important}.ps-md-0{padding-left:0!important}.ps-md-1{padding-left:.25rem!important}.ps-md-2{padding-left:.5rem!important}.ps-md-3{padding-left:1rem!important}.ps-md-4{padding-left:1.5rem!important}.ps-md-5{padding-left:3rem!important}.text-md-start{text-align:left!important}.text-md-end{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.float-lg-start{float:left!important}.float-lg-end{float:right!important}.float-lg-none{float:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-lg-0{gap:0!important}.gap-lg-1{gap:.25rem!important}.gap-lg-2{gap:.5rem!important}.gap-lg-3{gap:1rem!important}.gap-lg-4{gap:1.5rem!important}.gap-lg-5{gap:3rem!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.justify-content-lg-evenly{justify-content:space-evenly!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.order-lg-first{order:-1!important}.order-lg-0{order:0!important}.order-lg-1{order:1!important}.order-lg-2{order:2!important}.order-lg-3{order:3!important}.order-lg-4{order:4!important}.order-lg-5{order:5!important}.order-lg-last{order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin:3rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-right:0!important;margin-left:0!important}.mx-lg-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-lg-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-lg-3{margin-right:1rem!important;margin-left:1rem!important}.mx-lg-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-lg-5{margin-right:3rem!important;margin-left:3rem!important}.mx-lg-auto{margin-right:auto!important;margin-left:auto!important}.my-lg-0{margin-top:0!important;margin-bottom:0!important}.my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-lg-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:.25rem!important}.mt-lg-2{margin-top:.5rem!important}.mt-lg-3{margin-top:1rem!important}.mt-lg-4{margin-top:1.5rem!important}.mt-lg-5{margin-top:3rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-right:0!important}.me-lg-1{margin-right:.25rem!important}.me-lg-2{margin-right:.5rem!important}.me-lg-3{margin-right:1rem!important}.me-lg-4{margin-right:1.5rem!important}.me-lg-5{margin-right:3rem!important}.me-lg-auto{margin-right:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:.25rem!important}.mb-lg-2{margin-bottom:.5rem!important}.mb-lg-3{margin-bottom:1rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.mb-lg-5{margin-bottom:3rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-left:0!important}.ms-lg-1{margin-left:.25rem!important}.ms-lg-2{margin-left:.5rem!important}.ms-lg-3{margin-left:1rem!important}.ms-lg-4{margin-left:1.5rem!important}.ms-lg-5{margin-left:3rem!important}.ms-lg-auto{margin-left:auto!important}.p-lg-0{padding:0!important}.p-lg-1{padding:.25rem!important}.p-lg-2{padding:.5rem!important}.p-lg-3{padding:1rem!important}.p-lg-4{padding:1.5rem!important}.p-lg-5{padding:3rem!important}.px-lg-0{padding-right:0!important;padding-left:0!important}.px-lg-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-lg-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-lg-3{padding-right:1rem!important;padding-left:1rem!important}.px-lg-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-lg-5{padding-right:3rem!important;padding-left:3rem!important}.py-lg-0{padding-top:0!important;padding-bottom:0!important}.py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-lg-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:.25rem!important}.pt-lg-2{padding-top:.5rem!important}.pt-lg-3{padding-top:1rem!important}.pt-lg-4{padding-top:1.5rem!important}.pt-lg-5{padding-top:3rem!important}.pe-lg-0{padding-right:0!important}.pe-lg-1{padding-right:.25rem!important}.pe-lg-2{padding-right:.5rem!important}.pe-lg-3{padding-right:1rem!important}.pe-lg-4{padding-right:1.5rem!important}.pe-lg-5{padding-right:3rem!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:.25rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pb-lg-3{padding-bottom:1rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pb-lg-5{padding-bottom:3rem!important}.ps-lg-0{padding-left:0!important}.ps-lg-1{padding-left:.25rem!important}.ps-lg-2{padding-left:.5rem!important}.ps-lg-3{padding-left:1rem!important}.ps-lg-4{padding-left:1.5rem!important}.ps-lg-5{padding-left:3rem!important}.text-lg-start{text-align:left!important}.text-lg-end{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.float-xl-start{float:left!important}.float-xl-end{float:right!important}.float-xl-none{float:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-xl-0{gap:0!important}.gap-xl-1{gap:.25rem!important}.gap-xl-2{gap:.5rem!important}.gap-xl-3{gap:1rem!important}.gap-xl-4{gap:1.5rem!important}.gap-xl-5{gap:3rem!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.justify-content-xl-evenly{justify-content:space-evenly!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.order-xl-first{order:-1!important}.order-xl-0{order:0!important}.order-xl-1{order:1!important}.order-xl-2{order:2!important}.order-xl-3{order:3!important}.order-xl-4{order:4!important}.order-xl-5{order:5!important}.order-xl-last{order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin:3rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-right:0!important;margin-left:0!important}.mx-xl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xl-auto{margin-right:auto!important;margin-left:auto!important}.my-xl-0{margin-top:0!important;margin-bottom:0!important}.my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:.25rem!important}.mt-xl-2{margin-top:.5rem!important}.mt-xl-3{margin-top:1rem!important}.mt-xl-4{margin-top:1.5rem!important}.mt-xl-5{margin-top:3rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-right:0!important}.me-xl-1{margin-right:.25rem!important}.me-xl-2{margin-right:.5rem!important}.me-xl-3{margin-right:1rem!important}.me-xl-4{margin-right:1.5rem!important}.me-xl-5{margin-right:3rem!important}.me-xl-auto{margin-right:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:.25rem!important}.mb-xl-2{margin-bottom:.5rem!important}.mb-xl-3{margin-bottom:1rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.mb-xl-5{margin-bottom:3rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-left:0!important}.ms-xl-1{margin-left:.25rem!important}.ms-xl-2{margin-left:.5rem!important}.ms-xl-3{margin-left:1rem!important}.ms-xl-4{margin-left:1.5rem!important}.ms-xl-5{margin-left:3rem!important}.ms-xl-auto{margin-left:auto!important}.p-xl-0{padding:0!important}.p-xl-1{padding:.25rem!important}.p-xl-2{padding:.5rem!important}.p-xl-3{padding:1rem!important}.p-xl-4{padding:1.5rem!important}.p-xl-5{padding:3rem!important}.px-xl-0{padding-right:0!important;padding-left:0!important}.px-xl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xl-0{padding-top:0!important;padding-bottom:0!important}.py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:.25rem!important}.pt-xl-2{padding-top:.5rem!important}.pt-xl-3{padding-top:1rem!important}.pt-xl-4{padding-top:1.5rem!important}.pt-xl-5{padding-top:3rem!important}.pe-xl-0{padding-right:0!important}.pe-xl-1{padding-right:.25rem!important}.pe-xl-2{padding-right:.5rem!important}.pe-xl-3{padding-right:1rem!important}.pe-xl-4{padding-right:1.5rem!important}.pe-xl-5{padding-right:3rem!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:.25rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pb-xl-3{padding-bottom:1rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pb-xl-5{padding-bottom:3rem!important}.ps-xl-0{padding-left:0!important}.ps-xl-1{padding-left:.25rem!important}.ps-xl-2{padding-left:.5rem!important}.ps-xl-3{padding-left:1rem!important}.ps-xl-4{padding-left:1.5rem!important}.ps-xl-5{padding-left:3rem!important}.text-xl-start{text-align:left!important}.text-xl-end{text-align:right!important}.text-xl-center{text-align:center!important}}@media (min-width:1400px){.float-xxl-start{float:left!important}.float-xxl-end{float:right!important}.float-xxl-none{float:none!important}.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!important}.d-xxl-grid{display:grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:flex!important}.d-xxl-inline-flex{display:inline-flex!important}.d-xxl-none{display:none!important}.flex-xxl-fill{flex:1 1 auto!important}.flex-xxl-row{flex-direction:row!important}.flex-xxl-column{flex-direction:column!important}.flex-xxl-row-reverse{flex-direction:row-reverse!important}.flex-xxl-column-reverse{flex-direction:column-reverse!important}.flex-xxl-grow-0{flex-grow:0!important}.flex-xxl-grow-1{flex-grow:1!important}.flex-xxl-shrink-0{flex-shrink:0!important}.flex-xxl-shrink-1{flex-shrink:1!important}.flex-xxl-wrap{flex-wrap:wrap!important}.flex-xxl-nowrap{flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-xxl-0{gap:0!important}.gap-xxl-1{gap:.25rem!important}.gap-xxl-2{gap:.5rem!important}.gap-xxl-3{gap:1rem!important}.gap-xxl-4{gap:1.5rem!important}.gap-xxl-5{gap:3rem!important}.justify-content-xxl-start{justify-content:flex-start!important}.justify-content-xxl-end{justify-content:flex-end!important}.justify-content-xxl-center{justify-content:center!important}.justify-content-xxl-between{justify-content:space-between!important}.justify-content-xxl-around{justify-content:space-around!important}.justify-content-xxl-evenly{justify-content:space-evenly!important}.align-items-xxl-start{align-items:flex-start!important}.align-items-xxl-end{align-items:flex-end!important}.align-items-xxl-center{align-items:center!important}.align-items-xxl-baseline{align-items:baseline!important}.align-items-xxl-stretch{align-items:stretch!important}.align-content-xxl-start{align-content:flex-start!important}.align-content-xxl-end{align-content:flex-end!important}.align-content-xxl-center{align-content:center!important}.align-content-xxl-between{align-content:space-between!important}.align-content-xxl-around{align-content:space-around!important}.align-content-xxl-stretch{align-content:stretch!important}.align-self-xxl-auto{align-self:auto!important}.align-self-xxl-start{align-self:flex-start!important}.align-self-xxl-end{align-self:flex-end!important}.align-self-xxl-center{align-self:center!important}.align-self-xxl-baseline{align-self:baseline!important}.align-self-xxl-stretch{align-self:stretch!important}.order-xxl-first{order:-1!important}.order-xxl-0{order:0!important}.order-xxl-1{order:1!important}.order-xxl-2{order:2!important}.order-xxl-3{order:3!important}.order-xxl-4{order:4!important}.order-xxl-5{order:5!important}.order-xxl-last{order:6!important}.m-xxl-0{margin:0!important}.m-xxl-1{margin:.25rem!important}.m-xxl-2{margin:.5rem!important}.m-xxl-3{margin:1rem!important}.m-xxl-4{margin:1.5rem!important}.m-xxl-5{margin:3rem!important}.m-xxl-auto{margin:auto!important}.mx-xxl-0{margin-right:0!important;margin-left:0!important}.mx-xxl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xxl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xxl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xxl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xxl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xxl-auto{margin-right:auto!important;margin-left:auto!important}.my-xxl-0{margin-top:0!important;margin-bottom:0!important}.my-xxl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xxl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xxl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xxl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xxl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xxl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xxl-0{margin-top:0!important}.mt-xxl-1{margin-top:.25rem!important}.mt-xxl-2{margin-top:.5rem!important}.mt-xxl-3{margin-top:1rem!important}.mt-xxl-4{margin-top:1.5rem!important}.mt-xxl-5{margin-top:3rem!important}.mt-xxl-auto{margin-top:auto!important}.me-xxl-0{margin-right:0!important}.me-xxl-1{margin-right:.25rem!important}.me-xxl-2{margin-right:.5rem!important}.me-xxl-3{margin-right:1rem!important}.me-xxl-4{margin-right:1.5rem!important}.me-xxl-5{margin-right:3rem!important}.me-xxl-auto{margin-right:auto!important}.mb-xxl-0{margin-bottom:0!important}.mb-xxl-1{margin-bottom:.25rem!important}.mb-xxl-2{margin-bottom:.5rem!important}.mb-xxl-3{margin-bottom:1rem!important}.mb-xxl-4{margin-bottom:1.5rem!important}.mb-xxl-5{margin-bottom:3rem!important}.mb-xxl-auto{margin-bottom:auto!important}.ms-xxl-0{margin-left:0!important}.ms-xxl-1{margin-left:.25rem!important}.ms-xxl-2{margin-left:.5rem!important}.ms-xxl-3{margin-left:1rem!important}.ms-xxl-4{margin-left:1.5rem!important}.ms-xxl-5{margin-left:3rem!important}.ms-xxl-auto{margin-left:auto!important}.p-xxl-0{padding:0!important}.p-xxl-1{padding:.25rem!important}.p-xxl-2{padding:.5rem!important}.p-xxl-3{padding:1rem!important}.p-xxl-4{padding:1.5rem!important}.p-xxl-5{padding:3rem!important}.px-xxl-0{padding-right:0!important;padding-left:0!important}.px-xxl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xxl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xxl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xxl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xxl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xxl-0{padding-top:0!important;padding-bottom:0!important}.py-xxl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xxl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xxl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xxl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xxl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xxl-0{padding-top:0!important}.pt-xxl-1{padding-top:.25rem!important}.pt-xxl-2{padding-top:.5rem!important}.pt-xxl-3{padding-top:1rem!important}.pt-xxl-4{padding-top:1.5rem!important}.pt-xxl-5{padding-top:3rem!important}.pe-xxl-0{padding-right:0!important}.pe-xxl-1{padding-right:.25rem!important}.pe-xxl-2{padding-right:.5rem!important}.pe-xxl-3{padding-right:1rem!important}.pe-xxl-4{padding-right:1.5rem!important}.pe-xxl-5{padding-right:3rem!important}.pb-xxl-0{padding-bottom:0!important}.pb-xxl-1{padding-bottom:.25rem!important}.pb-xxl-2{padding-bottom:.5rem!important}.pb-xxl-3{padding-bottom:1rem!important}.pb-xxl-4{padding-bottom:1.5rem!important}.pb-xxl-5{padding-bottom:3rem!important}.ps-xxl-0{padding-left:0!important}.ps-xxl-1{padding-left:.25rem!important}.ps-xxl-2{padding-left:.5rem!important}.ps-xxl-3{padding-left:1rem!important}.ps-xxl-4{padding-left:1.5rem!important}.ps-xxl-5{padding-left:3rem!important}.text-xxl-start{text-align:left!important}.text-xxl-end{text-align:right!important}.text-xxl-center{text-align:center!important}}@media (min-width:1200px){.fs-1{font-size:2.5rem!important}.fs-2{font-size:2rem!important}.fs-3{font-size:1.75rem!important}.fs-4{font-size:1.5rem!important}}@media print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}} +/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/Examples/Complete/Camera/Blazor/wwwroot/css/bootstrap/bootstrap.min.css.map b/Examples/Complete/Camera/Blazor/wwwroot/css/bootstrap/bootstrap.min.css.map new file mode 100644 index 0000000000..afcd9e33e9 --- /dev/null +++ b/Examples/Complete/Camera/Blazor/wwwroot/css/bootstrap/bootstrap.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../scss/bootstrap.scss","../../scss/_root.scss","../../scss/_reboot.scss","dist/css/bootstrap.css","../../scss/vendor/_rfs.scss","../../scss/mixins/_border-radius.scss","../../scss/_type.scss","../../scss/mixins/_lists.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/_containers.scss","../../scss/mixins/_container.scss","../../scss/mixins/_breakpoints.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/_tables.scss","../../scss/mixins/_table-variants.scss","../../scss/forms/_labels.scss","../../scss/forms/_form-text.scss","../../scss/forms/_form-control.scss","../../scss/mixins/_transition.scss","../../scss/mixins/_gradients.scss","../../scss/forms/_form-select.scss","../../scss/forms/_form-check.scss","../../scss/forms/_form-range.scss","../../scss/forms/_floating-labels.scss","../../scss/forms/_input-group.scss","../../scss/mixins/_forms.scss","../../scss/_buttons.scss","../../scss/mixins/_buttons.scss","../../scss/_transitions.scss","../../scss/_dropdown.scss","../../scss/mixins/_caret.scss","../../scss/_button-group.scss","../../scss/_nav.scss","../../scss/_navbar.scss","../../scss/_card.scss","../../scss/_accordion.scss","../../scss/_breadcrumb.scss","../../scss/_pagination.scss","../../scss/mixins/_pagination.scss","../../scss/_badge.scss","../../scss/_alert.scss","../../scss/mixins/_alert.scss","../../scss/_progress.scss","../../scss/_list-group.scss","../../scss/mixins/_list-group.scss","../../scss/_close.scss","../../scss/_toasts.scss","../../scss/_modal.scss","../../scss/mixins/_backdrop.scss","../../scss/_tooltip.scss","../../scss/mixins/_reset-text.scss","../../scss/_popover.scss","../../scss/_carousel.scss","../../scss/mixins/_clearfix.scss","../../scss/_spinners.scss","../../scss/_offcanvas.scss","../../scss/_placeholders.scss","../../scss/helpers/_colored-links.scss","../../scss/helpers/_ratio.scss","../../scss/helpers/_position.scss","../../scss/helpers/_stacks.scss","../../scss/helpers/_visually-hidden.scss","../../scss/mixins/_visually-hidden.scss","../../scss/helpers/_stretched-link.scss","../../scss/helpers/_text-truncation.scss","../../scss/mixins/_text-truncate.scss","../../scss/helpers/_vr.scss","../../scss/mixins/_utilities.scss","../../scss/utilities/_api.scss"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Bootstrap v5.1.0 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n\n// scss-docs-start import-stack\n// Configuration\n@import \"functions\";\n@import \"variables\";\n@import \"mixins\";\n@import \"utilities\";\n\n// Layout & components\n@import \"root\";\n@import \"reboot\";\n@import \"type\";\n@import \"images\";\n@import \"containers\";\n@import \"grid\";\n@import \"tables\";\n@import \"forms\";\n@import \"buttons\";\n@import \"transitions\";\n@import \"dropdown\";\n@import \"button-group\";\n@import \"nav\";\n@import \"navbar\";\n@import \"card\";\n@import \"accordion\";\n@import \"breadcrumb\";\n@import \"pagination\";\n@import \"badge\";\n@import \"alert\";\n@import \"progress\";\n@import \"list-group\";\n@import \"close\";\n@import \"toasts\";\n@import \"modal\";\n@import \"tooltip\";\n@import \"popover\";\n@import \"carousel\";\n@import \"spinners\";\n@import \"offcanvas\";\n@import \"placeholders\";\n\n// Helpers\n@import \"helpers\";\n\n// Utilities\n@import \"utilities/api\";\n// scss-docs-end import-stack\n",":root {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$variable-prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$variable-prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$variable-prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$variable-prefix}#{$color}-rgb: #{$value};\n }\n\n --#{$variable-prefix}white-rgb: #{to-rgb($white)};\n --#{$variable-prefix}black-rgb: #{to-rgb($black)};\n --#{$variable-prefix}body-rgb: #{to-rgb($body-color)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$variable-prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$variable-prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$variable-prefix}gradient: #{$gradient};\n\n // Root and body\n // stylelint-disable custom-property-empty-line-before\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$variable-prefix}root-font-size: #{$font-size-root};\n }\n --#{$variable-prefix}body-font-family: #{$font-family-base};\n --#{$variable-prefix}body-font-size: #{$font-size-base};\n --#{$variable-prefix}body-font-weight: #{$font-weight-base};\n --#{$variable-prefix}body-line-height: #{$line-height-base};\n --#{$variable-prefix}body-color: #{$body-color};\n @if $body-text-align != null {\n --#{$variable-prefix}body-text-align: #{$body-text-align};\n }\n --#{$variable-prefix}body-bg: #{$body-bg};\n // scss-docs-end root-body-variables\n // stylelint-enable custom-property-empty-line-before\n}\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n\n// Root\n//\n// Ability to the value of the root font sizes, affecting the value of `rem`.\n// null by default, thus nothing is generated.\n\n:root {\n @if $font-size-root != null {\n font-size: var(--#{$variable-prefix}-root-font-size);\n }\n\n @if $enable-smooth-scroll {\n @media (prefers-reduced-motion: no-preference) {\n scroll-behavior: smooth;\n }\n }\n}\n\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Prevent adjustments of font size after orientation changes in iOS.\n// 4. Change the default tap highlight to be completely transparent in iOS.\n\n// scss-docs-start reboot-body-rules\nbody {\n margin: 0; // 1\n font-family: var(--#{$variable-prefix}body-font-family);\n @include font-size(var(--#{$variable-prefix}body-font-size));\n font-weight: var(--#{$variable-prefix}body-font-weight);\n line-height: var(--#{$variable-prefix}body-line-height);\n color: var(--#{$variable-prefix}body-color);\n text-align: var(--#{$variable-prefix}body-text-align);\n background-color: var(--#{$variable-prefix}body-bg); // 2\n -webkit-text-size-adjust: 100%; // 3\n -webkit-tap-highlight-color: rgba($black, 0); // 4\n}\n// scss-docs-end reboot-body-rules\n\n\n// Content grouping\n//\n// 1. Reset Firefox's gray color\n// 2. Set correct height and prevent the `size` attribute to make the `hr` look like an input field\n\nhr {\n margin: $hr-margin-y 0;\n color: $hr-color; // 1\n background-color: currentColor;\n border: 0;\n opacity: $hr-opacity;\n}\n\nhr:not([size]) {\n height: $hr-height; // 2\n}\n\n\n// Typography\n//\n// 1. Remove top margins from headings\n// By default, `

`-`

` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n\n%heading {\n margin-top: 0; // 1\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-style: $headings-font-style;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: $headings-color;\n}\n\nh1 {\n @extend %heading;\n @include font-size($h1-font-size);\n}\n\nh2 {\n @extend %heading;\n @include font-size($h2-font-size);\n}\n\nh3 {\n @extend %heading;\n @include font-size($h3-font-size);\n}\n\nh4 {\n @extend %heading;\n @include font-size($h4-font-size);\n}\n\nh5 {\n @extend %heading;\n @include font-size($h5-font-size);\n}\n\nh6 {\n @extend %heading;\n @include font-size($h6-font-size);\n}\n\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `

`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\n\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n\n// Abbreviations\n//\n// 1. Duplicate behavior to the data-bs-* attribute for our tooltip plugin\n// 2. Add the correct text decoration in Chrome, Edge, Opera, and Safari.\n// 3. Add explicit cursor to indicate changed behavior.\n// 4. Prevent the text-decoration to be skipped.\n\nabbr[title],\nabbr[data-bs-original-title] { // 1\n text-decoration: underline dotted; // 2\n cursor: help; // 3\n text-decoration-skip-ink: none; // 4\n}\n\n\n// Address\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\n\n// Lists\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\n// 1. Undo browser default\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // 1\n}\n\n\n// Blockquote\n\nblockquote {\n margin: 0 0 1rem;\n}\n\n\n// Strong\n//\n// Add the correct font weight in Chrome, Edge, and Safari\n\nb,\nstrong {\n font-weight: $font-weight-bolder;\n}\n\n\n// Small\n//\n// Add the correct font size in all browsers\n\nsmall {\n @include font-size($small-font-size);\n}\n\n\n// Mark\n\nmark {\n padding: $mark-padding;\n background-color: $mark-bg;\n}\n\n\n// Sub and Sup\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n\nsub,\nsup {\n position: relative;\n @include font-size($sub-sup-font-size);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n// Links\n\na {\n color: $link-color;\n text-decoration: $link-decoration;\n\n &:hover {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n &,\n &:hover {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n// Code\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-code;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n direction: ltr #{\"/* rtl:ignore */\"};\n unicode-bidi: bidi-override;\n}\n\n// 1. Remove browser default top margin\n// 2. Reset browser default of `1em` to use `rem`s\n// 3. Don't allow content to break outside\n\npre {\n display: block;\n margin-top: 0; // 1\n margin-bottom: 1rem; // 2\n overflow: auto; // 3\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\ncode {\n @include font-size($code-font-size);\n color: $code-color;\n word-wrap: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n\n kbd {\n padding: 0;\n @include font-size(1em);\n font-weight: $nested-kbd-font-weight;\n }\n}\n\n\n// Figures\n//\n// Apply a consistent margin strategy (matches our type styles).\n\nfigure {\n margin: 0 0 1rem;\n}\n\n\n// Images and content\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\n\n// Tables\n//\n// Prevent double borders\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: $table-cell-padding-y;\n padding-bottom: $table-cell-padding-y;\n color: $table-caption-color;\n text-align: left;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n font-weight: $table-th-font-weight; // 1\n text-align: inherit; // 2\n text-align: -webkit-match-parent; // 3\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\n\n// Forms\n//\n// 1. Allow labels to use `margin` for spacing.\n\nlabel {\n display: inline-block; // 1\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n// See https://github.com/twbs/bootstrap/issues/24093\n\nbutton {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 0;\n}\n\n// Explicitly remove focus outline in Chromium when it shouldn't be\n// visible (e.g. as result of mouse click or touch tap). It already\n// should be doing this automatically, but seems to currently be\n// confused and applies its very visible two-tone outline anyway.\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\n// 1. Remove the margin in Firefox and Safari\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // 1\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\n// Remove the inheritance of text transform in Firefox\nbutton,\nselect {\n text-transform: none;\n}\n// Set the cursor for non-`