diff --git a/.editorconfig b/.editorconfig
index 592aef7b7b1..f8ad6ea8e56 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -141,7 +141,8 @@ csharp_prefer_simple_using_statement = false:none                       # IDE006
 csharp_using_directive_placement = outside_namespace:suggestion         # IDE0065: using directive placement
 
 # File header preferences
-file_header_template = unset                                            # IDE0073: Require file header
+dotnet_diagnostic.IDE0073.severity = warning                            # IDE0073: Require file header
+file_header_template = Licensed to the .NET Foundation under one or more agreements.\nThe .NET Foundation licenses this file to you under the MIT license.
 
 # Namespace naming preferences
 dotnet_style_namespace_match_folder = true:suggestion                   # IDE0130: Namespace does not match folder structure
diff --git a/.github/actions/build/action.yml b/.github/actions/build/action.yml
index f8cb2d25c96..3529e471e79 100644
--- a/.github/actions/build/action.yml
+++ b/.github/actions/build/action.yml
@@ -5,14 +5,15 @@ runs:
   steps:
   - uses: actions/setup-node@v4
     with:
-      node-version: 20
+      node-version: 22
 
   - uses: actions/setup-dotnet@v4
     with:
       dotnet-version: |
+        9.x
         8.x
 
-  - run: npm install
+  - run: npm ci
     shell: bash
     working-directory: templates
 
diff --git a/.github/actions/report-failed-tests/action.yml b/.github/actions/report-failed-tests/action.yml
deleted file mode 100644
index 44ea07de4e5..00000000000
--- a/.github/actions/report-failed-tests/action.yml
+++ /dev/null
@@ -1,27 +0,0 @@
-name: Report failed tests
-description: Report failed tests
-runs:
-  using: "composite"
-  steps:
-  - name: Report failed tests
-    shell: pwsh
-    run: |
-      $trxFiles = Get-ChildItem test -Filter *.trx -Recurse
-      $failedTests = @()
-      foreach($trxFile in $trxFiles)
-      {
-        [xml]$trx = Get-Content $trxFile -Raw
-        if($trx.TestRun.ResultSummary.outcome -eq 'Failed')
-        {
-          $failedTests += $trx.TestRun.Results.UnitTestResult | where { $_.outcome -eq 'Failed' }
-        }
-      }
-
-      if($failedTests.Length -gt 0)
-      {
-        Write-Output "## Failed Tests" >> $env:GITHUB_STEP_SUMMARY
-        foreach($failedTest in $failedTests)
-        {
-          Write-Output "<details><summary>$($failedTest.testName)</summary><pre>$($failedTest.Output.ErrorInfo.Message)`nStackTrace:`n"$($failedTest.Output.ErrorInfo.StackTrace)"</pre></details>" >> $env:GITHUB_STEP_SUMMARY
-        }
-      }
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 1be8953f9cb..7fbcefc84a4 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -1,6 +1,6 @@
 name: ci
 on:
-  pull_request_target:
+  pull_request:
     branches: [ main, feature/*, hotfix/* ]
   push:
     branches: [ main, feature/*, hotfix/* ]
@@ -9,7 +9,6 @@ on:
 jobs:
   test:
     runs-on: ${{ matrix.os }}
-    environment: ci
     strategy:
       fail-fast: false
       matrix:
@@ -34,9 +33,9 @@ jobs:
     - run: dotnet test -c Release -f net8.0 --no-build --collect:"XPlat Code Coverage" --consoleLoggerParameters:"Summary;Verbosity=Minimal"
       id: test-net80
 
-    - run: dotnet test -c Release -f net6.0 --no-build --collect:"XPlat Code Coverage" --consoleLoggerParameters:"Summary;Verbosity=Minimal"
+    - run: dotnet test -c Release -f net9.0 --no-build --collect:"XPlat Code Coverage" --consoleLoggerParameters:"Summary;Verbosity=Minimal"
       if: matrix.os == 'ubuntu-latest'
-      id: test-net60
+      id: test-net90
 
     - run: npm i -g @percy/cli
       if: matrix.os == 'ubuntu-latest'
@@ -73,10 +72,6 @@ jobs:
         name: dump
         path: /tmp/coredump*
 
-    - name: Report failed tests
-      if: ${{ failure() && (steps.test-net80.outcome == 'failure' || steps.test-net60.outcome == 'failure') }}
-      uses: ./.github/actions/report-failed-tests
-
   publish-docs:
     if: github.event_name == 'push' && github.ref == 'refs/heads/main'
     needs: [test]
diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml
index 727c9c9464c..6ba3f724aba 100644
--- a/.github/workflows/nightly.yml
+++ b/.github/workflows/nightly.yml
@@ -13,11 +13,6 @@ jobs:
     permissions:
       packages: write
     steps:
-    - uses: actions/setup-dotnet@v4
-      with:
-        dotnet-version: |
-          9.x
-
     - uses: actions/checkout@v4
       with:
         fetch-depth: 0
diff --git a/.github/workflows/reports.yml b/.github/workflows/reports.yml
new file mode 100644
index 00000000000..88edd1c0b69
--- /dev/null
+++ b/.github/workflows/reports.yml
@@ -0,0 +1,58 @@
+name: report-test-results
+run-name: Generate Test Report for ${{ github.event.workflow_run.head_commit.message }}
+on:
+  workflow_run:
+    workflows:
+      - ci
+    types:
+      - completed
+
+permissions:
+  contents: read
+  actions: read
+  checks: write
+
+jobs:
+  report:
+    runs-on: ubuntu-latest
+    if: ${{ github.event.workflow_run.conclusion == 'success' || github.event.workflow_run.conclusion == 'failure' }}
+    steps:
+    - name: Create Test Report
+      uses: dorny/test-reporter@31a54ee7ebcacc03a09ea97a7e5465a47b84aea5 # v1.9.1
+      id : test-reports
+      with:
+        artifact: /^logs-(.*)/         # Name of artifact to report
+        name: test-results             # Name of the `check run` which will be created
+        path: 'test/TestResults/*.trx'
+        reporter: dotnet-trx
+        fail-on-error: false
+        fail-on-empty: false
+
+    - name: Output message to job summary
+      id: output-job-summary
+      shell: pwsh
+      if: ${{ steps.test-reports.outputs.time != '0' }}
+      run: |
+        $conclusion = "${{ steps.test-reports.outputs.conclusion }}"
+        $passed     = "${{ steps.test-reports.outputs.passed }}"
+        $failed     = "${{ steps.test-reports.outputs.failed }}"
+        $skipped    = "${{ steps.test-reports.outputs.skipped }}"
+        $time       = "${{ steps.test-reports.outputs.time }}"
+        $url_html   = "${{ steps.test-reports.outputs.url_html }}"
+
+        $content = @"
+        ## Summary of Test Report
+
+        - **Report URL**: $url_html
+ 
+        | Conclusion  | Passed  | Failed  | Skipped  | Time       |
+        |-------------|---------|---------|----------|------------|
+        | $conclusion | $passed | $failed | $skipped | $time [ms] |
+        "@
+
+        Write-Output $content >> $env:GITHUB_STEP_SUMMARY
+
+        if($failed -ne '0'){
+          echo "::error::Test Report contains ${failed} errors."
+          exit 1
+        }
diff --git a/Directory.Build.props b/Directory.Build.props
index 46f3e4a1dc1..9ec7dd187a7 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -1,7 +1,7 @@
 <Project>
   <PropertyGroup>
     <ContinuousIntegrationBuild Condition="'$(GITHUB_ACTIONS)' == 'true'">true</ContinuousIntegrationBuild>
-    <TargetFrameworks>net6.0;net8.0</TargetFrameworks>
+    <TargetFrameworks>net8.0;net9.0</TargetFrameworks>
     <TargetFrameworks Condition="'$(DOCFX_PREVIEW_BUILD)' == 'true'">net8.0;net9.0</TargetFrameworks> 
     <LangVersion>Preview</LangVersion>
     <ImplicitUsings>enable</ImplicitUsings>
@@ -45,13 +45,6 @@
     <None Include="$(MSBuildThisFileDirectory)\README.md" Pack="true" PackagePath="\"/>
   </ItemGroup>
 
-  <ItemGroup Condition="'$(ProjectName)' != 'Docfx.Common'">
-    <PackageReference Include="PolySharp">
-      <PrivateAssets>all</PrivateAssets>
-      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
-    </PackageReference>
-  </ItemGroup>
-
   <ItemGroup>
     <PackageReference Include="Microsoft.SourceLink.GitHub">
       <PrivateAssets>all</PrivateAssets>
@@ -59,7 +52,6 @@
     </PackageReference>
   </ItemGroup>
 
-
   <!-- Remove Node.js runtime dependencies that used by playwright -->
   <Target Name="RemoveNodeJsRuntimes" AfterTargets="CopyPlaywrightFilesToOutput">
     <ItemGroup>
diff --git a/Directory.Packages.props b/Directory.Packages.props
index 637af77e5c6..2ca7cb4b913 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -4,45 +4,30 @@
     <ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
   </PropertyGroup>
   <ItemGroup>
-    <PackageVersion Include="HtmlAgilityPack" Version="1.11.65" />
+    <PackageVersion Include="HtmlAgilityPack" Version="1.11.70" />
     <PackageVersion Include="ICSharpCode.Decompiler" Version="8.2.0.7535" />
     <PackageVersion Include="IgnoresAccessChecksToGenerator" Version="0.7.0" />
-    <PackageVersion Include="Jint" Version="4.0.2" />
-    <PackageVersion Include="JsonSchema.Net" Version="7.2.2" />
-    <PackageVersion Include="Markdig" Version="0.37.0" />
-    <PackageVersion Include="Microsoft.Playwright" Version="1.46.0" />
+    <PackageVersion Include="Jint" Version="4.1.0" />
+    <PackageVersion Include="JsonSchema.Net" Version="7.2.3" />
+    <PackageVersion Include="Markdig" Version="0.38.0" />
+    <PackageVersion Include="Microsoft.Playwright" Version="1.48.0" />
     <PackageVersion Include="Microsoft.SourceLink.GitHub" Version="8.0.0" />
     <PackageVersion Include="Newtonsoft.Json" Version="13.0.3" />
     <PackageVersion Include="OneOf" Version="3.0.271" />
     <PackageVersion Include="OneOf.SourceGenerator" Version="3.0.271" />
-    <PackageVersion Include="PdfPig" Version="0.1.9-alpha-20240904-cd2a8" />
+    <PackageVersion Include="PdfPig" Version="0.1.9" />
     <PackageVersion Include="PlantUml.Net" Version="1.4.80" />
-    <PackageVersion Include="PolySharp" Version="1.14.1" />
     <PackageVersion Include="Spectre.Console" Version="0.49.1" />
     <PackageVersion Include="Spectre.Console.Cli" Version="0.49.1" />
     <PackageVersion Include="Stubble.Core" Version="1.10.8" />
     <PackageVersion Include="System.Collections.Immutable" Version="8.0.0" />
     <PackageVersion Include="System.Composition" Version="8.0.0" />
     <PackageVersion Include="System.Formats.Asn1" Version="8.0.1" />
-    <PackageVersion Include="System.Text.Json" Version="8.0.4" />
+    <PackageVersion Include="System.Text.Json" Version="8.0.5" />
     <PackageVersion Include="YamlDotNet" Version="15.3.0" />
   </ItemGroup>
 
-  <ItemGroup Condition="'$(TargetFramework)' == 'net6.0'">
-    <!-- "17.3.2" is the latest compatible version for .NET 6 -->
-    <PackageVersion Include="Microsoft.Build" Version="[17.3.2]" />
-    <PackageVersion Include="Microsoft.Build.Locator" Version="1.7.8" />
-    <PackageVersion Include="Microsoft.CodeAnalysis" Version="[4.8.0]" />
-    <PackageVersion Include="Microsoft.CodeAnalysis.Common" Version="[4.8.0]" />
-    <PackageVersion Include="Microsoft.CodeAnalysis.CSharp.Workspaces" Version="[4.8.0]" />
-    <PackageVersion Include="Microsoft.CodeAnalysis.CSharp" Version="[4.8.0]" />
-    <PackageVersion Include="Microsoft.CodeAnalysis.VisualBasic.Workspaces" Version="[4.8.0]" />
-    <PackageVersion Include="Microsoft.CodeAnalysis.VisualBasic" Version="[4.8.0]" />
-    <PackageVersion Include="Microsoft.CodeAnalysis.Workspaces.Common" Version="[4.8.0]" />
-    <PackageVersion Include="Microsoft.CodeAnalysis.Workspaces.MSBuild" Version="[4.8.0]" />
-  </ItemGroup>
-
-  <ItemGroup Condition="'$(TargetFramework)' != 'net6.0'">
+  <ItemGroup>
     <PackageVersion Include="Microsoft.CodeAnalysis" Version="4.11.0" />
     <PackageVersion Include="Microsoft.CodeAnalysis.Common" Version="4.11.0" />
     <PackageVersion Include="Microsoft.CodeAnalysis.CSharp.Workspaces" Version="4.11.0" />
@@ -56,12 +41,12 @@
   <ItemGroup>
     <!-- Test only -->
     <PackageVersion Include="coverlet.collector" Version="6.0.2" />
-    <PackageVersion Include="FluentAssertions" Version="6.12.0" />
+    <PackageVersion Include="FluentAssertions" Version="6.12.1" />
     <PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.11.1" />
     <PackageVersion Include="PublicApiGenerator" Version="11.1.0" />
-    <PackageVersion Include="Verify.DiffPlex" Version="3.1.0" />
-    <PackageVersion Include="Verify.Xunit" Version="26.4.0" />
+    <PackageVersion Include="Verify.DiffPlex" Version="3.1.2" />
+    <PackageVersion Include="Verify.Xunit" Version="28.1.3" />
     <PackageVersion Include="xunit.runner.visualstudio" Version="2.8.2" />
-    <PackageVersion Include="xunit" Version="2.9.0" />
+    <PackageVersion Include="xunit" Version="2.9.2" />
   </ItemGroup>
 </Project>
diff --git a/README.md b/README.md
index 39b13d54e90..8b534c0d8f7 100644
--- a/README.md
+++ b/README.md
@@ -51,8 +51,8 @@ We welcome code contributions through pull requests, issues tagged as **[`help-w
 ### Prerequisites
 
 - Install [Visual Studio 2022 (Community or higher)](https://www.visualstudio.com/) and make sure you have the latest updates.
-- Install [.NET SDK](https://dotnet.microsoft.com/download/dotnet) 6.x and 8.x.
-- Install NodeJS (20.x.x).
+- Install [.NET SDK](https://dotnet.microsoft.com/download/dotnet) 8.x and 9.x.
+- Install NodeJS (22.x.x).
 
 ### Build and Test
 
diff --git a/docs/docfx.json b/docs/docfx.json
index 93a5158b8db..d0df50ec024 100644
--- a/docs/docfx.json
+++ b/docs/docfx.json
@@ -1,4 +1,5 @@
 {
+  "$schema": "https://raw.githubusercontent.com/dotnet/docfx/main/schemas/docfx.schema.json",
   "metadata": [
     {
       "src": [
@@ -25,6 +26,11 @@
       {
         "files": [ "**/images/**", "**/media/**", "codesnippet/**" ],
         "exclude": [ "_site/**", "obj/**" ]
+      },
+      {
+        "src": "../schemas",
+        "files": [ "**/*.json" ],
+        "dest": "schemas"
       }
     ],
     "postProcessors": [ "ExtractSearchIndex" ],
diff --git a/docs/docs/config.md b/docs/docs/config.md
index 6cb1c099d95..c20536fae04 100644
--- a/docs/docs/config.md
+++ b/docs/docs/config.md
@@ -51,7 +51,7 @@ Replace [new URL] with the URL that you want to redirect users to. You can use a
 
 ## Metadata
 
-Metadata are attributes attached to an file. It helps shape the look and feel of a page and provides extra context to the article.
+Metadata are attributes attached to a file. It helps shape the look and feel of a page and provides extra context to the article.
 
 To add metadata to an article, use "YAML Front Matter" markdown extension syntax:
 
diff --git a/docs/docs/dotnet-api-docs.md b/docs/docs/dotnet-api-docs.md
index a1ff5da1474..a1d81f5be61 100644
--- a/docs/docs/dotnet-api-docs.md
+++ b/docs/docs/dotnet-api-docs.md
@@ -87,7 +87,7 @@ If your project targets multiple target frameworks, docfx internally builds each
     }],
     "dest": "api",
     "properties": {
-      "TargetFramework": "net6.0"
+      "TargetFramework": "net8.0"
     }
   },
 }
diff --git a/docs/docs/publish-azure-devops.md b/docs/docs/publish-azure-devops.md
new file mode 100644
index 00000000000..c34beabd4c6
--- /dev/null
+++ b/docs/docs/publish-azure-devops.md
@@ -0,0 +1,100 @@
+# Deploy to GitHub Pages from Azure DevOps
+
+
+### 1. **Create a GitHub Personal Access Token (PAT)**
+You will need a GitHub PAT with repo permissions to allow Azure DevOps to push to the GitHub Pages branch.
+
+- Go to your GitHub account > **Settings** > **Developer settings** > **Personal Access Tokens**.
+- Click on **Generate new token** and select the required repo permissions.
+- Save the token somewhere secure as it will be used in the Azure DevOps pipeline.
+
+### 2. **Create Azure DevOps Pipeline**
+
+#### a. **Setup DocFX**
+Ensure that you have a `docfx.json` configuration file in your repository. This will define how DocFX generates your documentation.
+
+- Install DocFX locally on your development machine and create the configuration:
+
+  ```bash
+  docfx init -q
+  ```
+
+This will generate the `docfx.json` file, which you can configure to specify input and output directories, build settings, etc.
+
+#### b. **Azure Pipelines YAML File**
+
+Create an Azure DevOps pipeline YAML file (e.g., `azure-pipelines.yml`) in the root of your project to automate the build and deployment.
+
+Here is a sample pipeline YAML configuration for DocFX:
+
+```yaml
+trigger:
+  branches:
+    include:
+      - main  # Trigger on main branch
+
+pool:
+  vmImage: 'ubuntu-latest'  # Use the latest Ubuntu VM
+
+variables:
+  - group: GitHubPAT
+
+steps:
+  # Step 1: Install DocFX
+  - task: UseDotNet@2
+    inputs:
+      packageType: 'sdk'
+      version: '8.x'  # Ensure you have .NET SDK installed
+      installationPath: $(Agent.ToolsDirectory)/dotnet
+
+  - script: |
+      dotnet tool install -g docfx
+    displayName: 'Install DocFX'
+
+  # Step 2: Build the Documentation using DocFX
+  - script: |
+      docfx build
+    displayName: 'Build Documentation'
+
+  # Step 3: Deploy to GitHub Pages
+  - task: Bash@3
+    displayName: 'Deploy to GitHub Pages'
+    inputs:
+      targetType: 'inline'
+      script: |
+        git config --global user.email "your-email@example.com"
+        git config --global user.name "Your Name"
+        git clone --branch gh-pages https://$GITHUB_PAT@github.com/$GITHUB_REPO.git out
+        rm -rf out/*
+        cp -r _site/* out/
+        cd out
+        git add --all
+        git commit -m "Update documentation"
+        git push origin gh-pages
+    env:
+      GITHUB_PAT: $(GITHUB_PAT)  # The GitHub Personal Access Token
+      GITHUB_REPO: your-github-username/your-repo-name  # Update with your repo details
+```
+
+#### c. **Setup Azure Pipeline Variables**
+
+- Go to **Azure DevOps** > **Pipelines** > **Library**.
+- Create a new pipeline variable group called GitHubPAT.
+- Add a new variable named GITHUB_PAT and set the value to the GitHub Personal Access Token you created earlier. Mark this variable as secret.
+
+### 3. **Configure GitHub Pages**
+
+- Go to your GitHub repository.
+- Under **Settings** > **Pages**, set the source branch to gh-pages.
+
+### 4. **Run the Pipeline**
+
+- Commit the azure-pipelines.yml file to your repository and trigger the pipeline.
+- Azure DevOps will now:
+  1. Install DocFX.
+  2. Build the documentation.
+  3. Deploy the documentation to the gh-pages branch in GitHub.
+
+### 5. **Access the Documentation**
+
+After the pipeline finishes, your documentation will be available in the github-pages deployments.
\ No newline at end of file
diff --git a/docs/docs/toc.yml b/docs/docs/toc.yml
index 711c69513ac..7f1b3a150c9 100644
--- a/docs/docs/toc.yml
+++ b/docs/docs/toc.yml
@@ -14,6 +14,7 @@
 
 - name: Advanced
 - href: additional-languages.md
+- href: ./publish-azure-devops.md
 
 - name: Reference
 - href: ../reference/docfx-json-reference.md
diff --git a/docs/index.md b/docs/index.md
index 5134ddb7a2f..ee497ffed05 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -8,7 +8,8 @@ In this section we will build a simple documentation site on your local machine.
 
 > Prerequisites
 > - Familiarity with the command line
-> - Install [.NET SDK](https://dotnet.microsoft.com/en-us/download) 6.0 or higher
+> - Install [.NET SDK](https://dotnet.microsoft.com/en-us/download) 8.0 or higher
+> - Install [Node.js](https://nodejs.org/) v20 or higher
 
 Make sure you have [.NET SDK](https://dotnet.microsoft.com/en-us/download) installed, then open a terminal and enter the following command to install the latest docfx:
 
@@ -98,14 +99,16 @@ jobs:
 You can also use docfx as a NuGet library:
 
 ```xml
-<PackageReference Include="Docfx.App" Version="2.76.0" />
-<PackageReference Include="Microsoft.CodeAnalysis.Workspaces.MSBuild" Version="4.9.2" />
-<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Workspaces" Version="4.9.2" />
+<PackageReference Include="Docfx.App" Version="2.77.0" />
+<!-- the versions of Microsoft.CodeAnalysis.* must match exactly what Docfx.App was built against, not the latest stable version -->
+<PackageReference Include="Microsoft.CodeAnalysis.Workspaces.MSBuild" Version="4.10.0" />
+<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Workspaces" Version="4.10.0" />
 ```
 
 Then build a docset using:
 
 ```cs
+await Docfx.Dotnet.DotnetApiCatalog.GenerateManagedReferenceYamlFiles("docfx.json");
 await Docfx.Docset.Build("docfx.json");
 ```
 
diff --git a/docs/reference/docfx-environment-variables-reference.md b/docs/reference/docfx-environment-variables-reference.md
index ad8ed1945bc..2332cabfe31 100644
--- a/docs/reference/docfx-environment-variables-reference.md
+++ b/docs/reference/docfx-environment-variables-reference.md
@@ -30,5 +30,5 @@ Maximum time in milliseconds to override the default [Playwright timeout](https:
 
 ## `PLAYWRIGHT_NODEJS_PATH`
 
-Custom Node.js executable path that will be used by the `docfx pdf' command.
+Custom Node.js executable path that will be used by the `docfx pdf` command.
 By default, docfx automatically detect installed Node.js from `PATH`.
diff --git a/docs/reference/docfx-json-reference.md b/docs/reference/docfx-json-reference.md
index f0de2c02839..ff1e2dee49b 100644
--- a/docs/reference/docfx-json-reference.md
+++ b/docs/reference/docfx-json-reference.md
@@ -397,6 +397,13 @@ Specifies an optional set of MSBuild properties used when interpreting project f
 > [!Note]
 > Make sure to specify `"TargetFramework": <one of the frameworks>` in your docfx.json when the project is targeting for multiple platforms.
 
+> [!Note]
+> When generating metadata from source code files.
+> Supported properties are limited to the following.
+>   - `DefineConstants`
+>   - `AllowUnsafeBlocks`
+> If other properties are specified. These properties are ignored silently.
+
 ### `noRestore`
 
 Do not run `dotnet restore` before building the projects.
diff --git a/docs/spec/docfx_document_schema.md b/docs/spec/docfx_document_schema.md
index 308286fbaf3..2d3919d45bc 100644
--- a/docs/spec/docfx_document_schema.md
+++ b/docs/spec/docfx_document_schema.md
@@ -36,7 +36,7 @@ This schema exposes two types of fields. Fixed fields, which have a declared nam
 By convention, the schema file is suffixed with `.schema.json`.
 
 ### Data Types
-Primitive data types in *THIS schema* are based on [JSON schema Draft 6 4.2 Instance](http://json-schema.org/latest/json-schema-core.html#rfc.section.4.2)
+Primitive data types in *THIS schema* are based on [JSON schema](https://json-schema.org/draft/2020-12/json-schema-core)
 
 ### Schema
 For a given field, `*` as the starting character in *Description* cell stands for **required**.
diff --git a/docs/tutorial/howto_build_your_own_type_of_documentation_with_custom_plug-in.md b/docs/tutorial/howto_build_your_own_type_of_documentation_with_custom_plug-in.md
index 8d70d6af0a0..fb9ec81686d 100644
--- a/docs/tutorial/howto_build_your_own_type_of_documentation_with_custom_plug-in.md
+++ b/docs/tutorial/howto_build_your_own_type_of_documentation_with_custom_plug-in.md
@@ -15,7 +15,7 @@ Goal and limitation
 
 Preparation
 -----------
-1.  Create a new C# class library targeting `net6.0` or later.
+1.  Create a new C# class library targeting `net8.0` or later.
 
 2.  Add NuGet package reference to `System.Composition`, `Docfx.Plugins` and `Docfx.Common`.
 
@@ -57,7 +57,7 @@ Create a document processor
 3. Load our rtf file by reading all text:
    [!Code-csharp[Load](../codesnippet/Rtf/RtfDocumentProcessor.cs?name=Load)]
 
-   We use `Dictionary<string, object>` as the data model, similar to how [ConceptualDocumentProcessor](https://github.com/dotnet/docfx/blob/dev/src/Docfx.Build.ConceptualDocuments/ConceptualDocumentProcessor.cs)
+   We use `Dictionary<string, object>` as the data model, similar to how [ConceptualDocumentProcessor](https://github.com/dotnet/docfx/blob/main/src/Docfx.Build/Conceptual/ConceptualDocumentProcessor.cs)
  stores the content of markdown files.
 
 4. Implement `Save` method as follows:
diff --git a/samples/extensions/build/build.csproj b/samples/extensions/build/build.csproj
index c762e1104c0..ff4751c5219 100644
--- a/samples/extensions/build/build.csproj
+++ b/samples/extensions/build/build.csproj
@@ -2,7 +2,7 @@
 
   <PropertyGroup>
     <OutputType>Exe</OutputType>
-    <TargetFramework>net7.0</TargetFramework>
+    <TargetFramework>net8.0</TargetFramework>
     <ImplicitUsings>enable</ImplicitUsings>
     <Nullable>enable</Nullable>
   </PropertyGroup>
diff --git a/samples/seed/docfx.json b/samples/seed/docfx.json
index 67b546abf8c..6dcf2b76192 100644
--- a/samples/seed/docfx.json
+++ b/samples/seed/docfx.json
@@ -1,4 +1,5 @@
 {
+  "$schema": "https://raw.githubusercontent.com/dotnet/docfx/main/schemas/docfx.schema.json",
   "metadata": [
     {
       "src": [
diff --git a/samples/seed/dotnet/project/Project.Core/BuildFromProject.Core.csproj b/samples/seed/dotnet/project/Project.Core/BuildFromProject.Core.csproj
index a90328379a1..639eaa34ad3 100644
--- a/samples/seed/dotnet/project/Project.Core/BuildFromProject.Core.csproj
+++ b/samples/seed/dotnet/project/Project.Core/BuildFromProject.Core.csproj
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>net6.0</TargetFramework>
+    <TargetFramework>net8.0</TargetFramework>
     <LangVersion>latest</LangVersion>
     <Nullable>enable</Nullable>
     <ImplicitUsings>enable</ImplicitUsings>
diff --git a/samples/seed/dotnet/project/Project/BuildFromProject.csproj b/samples/seed/dotnet/project/Project/BuildFromProject.csproj
index c3271976a56..bfef038c926 100644
--- a/samples/seed/dotnet/project/Project/BuildFromProject.csproj
+++ b/samples/seed/dotnet/project/Project/BuildFromProject.csproj
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>net6.0</TargetFramework>
+    <TargetFramework>net8.0</TargetFramework>
     <LangVersion>latest</LangVersion>
     <Nullable>enable</Nullable>
     <ImplicitUsings>enable</ImplicitUsings>
diff --git a/samples/seed/dotnet/solution/CatLibrary.Core/CatLibrary.Core.csproj b/samples/seed/dotnet/solution/CatLibrary.Core/CatLibrary.Core.csproj
index 6f2aed608ee..9d5a3ce7408 100644
--- a/samples/seed/dotnet/solution/CatLibrary.Core/CatLibrary.Core.csproj
+++ b/samples/seed/dotnet/solution/CatLibrary.Core/CatLibrary.Core.csproj
@@ -1,5 +1,5 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <TargetFramework>net6.0</TargetFramework>
+    <TargetFramework>net8.0</TargetFramework>
   </PropertyGroup>
-</Project>
\ No newline at end of file
+</Project>
diff --git a/samples/seed/dotnet/solution/CatLibrary/CatLibrary.csproj b/samples/seed/dotnet/solution/CatLibrary/CatLibrary.csproj
index a24c9ef8923..f4377e8b0af 100644
--- a/samples/seed/dotnet/solution/CatLibrary/CatLibrary.csproj
+++ b/samples/seed/dotnet/solution/CatLibrary/CatLibrary.csproj
@@ -1,6 +1,6 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <TargetFramework>net6.0</TargetFramework>
+    <TargetFramework>net8.0</TargetFramework>
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
   </PropertyGroup>
   <ItemGroup>
diff --git a/schemas/docfx.schema.json b/schemas/docfx.schema.json
index 5979ceb1764..956b1c916d8 100644
--- a/schemas/docfx.schema.json
+++ b/schemas/docfx.schema.json
@@ -5,6 +5,10 @@
   "type": "object",
   "additionalProperties": false,
   "properties": {
+    "$schema": {
+      "type": "string",
+      "default": "https://raw.githubusercontent.com/dotnet/docfx/main/schemas/docfx.schema.json"
+    },
     "build": {
       "$ref": "#/$defs/buildConfig"
     },
diff --git a/schemas/filterconfig.schema.json b/schemas/filterconfig.schema.json
index 271942dddf0..ffbadc282d8 100644
--- a/schemas/filterconfig.schema.json
+++ b/schemas/filterconfig.schema.json
@@ -5,6 +5,10 @@
   "type": "object",
   "additionalProperties": false,
   "properties": {
+    "$schema": {
+      "type": "string",
+      "default": "https://raw.githubusercontent.com/dotnet/docfx/main/schemas/filterconfig.schema.json"
+    },
     "apiRules": {
       "type": "array",
       "description": "Include/exclude rules using uid.",
diff --git a/schemas/toc.schema.json b/schemas/toc.schema.json
index 8bf1a9d7b60..3fdce6ec949 100644
--- a/schemas/toc.schema.json
+++ b/schemas/toc.schema.json
@@ -4,7 +4,7 @@
   "title": "JSON Schema for docfx TOC file.",
   "anyOf": [
     {
-      "$ref": "#/$defs/tocItem"
+      "$ref": "#/$defs/rootTocItem"
     },
     {
       "type": "array",
@@ -14,6 +14,101 @@
     }
   ],
   "$defs": {
+    "rootTocItem": {
+      "type": "object",
+      "additionalProperties": true,
+      "properties": {
+        "$schema": {
+          "type": "string",
+          "default": "https://raw.githubusercontent.com/dotnet/docfx/main/schemas/toc.schema.json"
+        },
+        "uid": {
+          "type": "string",
+          "description": "The uid of the article. Can be used instead of href."
+        },
+        "name": {
+          "type": "string",
+          "description": ""
+        },
+        "displayName": {
+          "type": "string",
+          "description": "An optional display name for the TOC node. When not specified, uses the title metadata or the first Heading 1 element from the referenced article as the display name."
+        },
+        "href": {
+          "type": "string",
+          "description": "The path the TOC node leads to. Optional because a node can exist just to parent other nodes."
+        },
+        "originalHref": {
+          "type": "string",
+          "description": ""
+        },
+        "tocHref": {
+          "type": "string",
+          "description": ""
+        },
+        "originalTocHref": {
+          "type": "string",
+          "description": ""
+        },
+        "topicHref": {
+          "type": "string",
+          "description": "Specify the topic href of the TOC Item. It is useful when href is linking to a folder or TOC file or tocHref is used."
+        },
+        "originalTopicHref": {
+          "type": "string",
+          "description": ""
+        },
+        "includedFrom": {
+          "type": "string",
+          "description": ""
+        },
+        "homepage": {
+          "type": "string",
+          "description": "(Deprecated)",
+          "deprecated": true
+        },
+        "originalHomepage": {
+          "type": "string",
+          "description": "(Deprecated).",
+          "deprecated": true
+        },
+        "homepageUid": {
+          "type": "string",
+          "description": "(Deprecated).",
+          "deprecated": true
+        },
+        "topicUid": {
+          "type": "string",
+          "description": "Specify the uid of the referenced file. If the value is set, it overwrites the value of topicHref."
+        },
+        "order": {
+          "type": "integer",
+          "default": 0,
+          "description": "Specify the order of toc item, TOCs with a smaller order value are picked first."
+        },
+        "type": {
+          "type": "string",
+          "description": "Specify the type of toc item."
+        },
+        "items": {
+          "type": "array",
+          "description": "List of TOC items.",
+          "items": {
+            "$ref": "#/$defs/tocItem"
+          }
+        },
+        "expanded": {
+          "type": "boolean",
+          "default": false,
+          "description": "If set to true, Child items are displayed as expanded."
+        },
+        "dropdown": {
+          "type": "boolean",
+          "default": false,
+          "description": "If set to true, Child items are displayed as dropdown on top navigation bar."
+        }
+      }
+    },
     "tocItem": {
       "type": "object",
       "additionalProperties": true,
diff --git a/schemas/xrefmap.schema.json b/schemas/xrefmap.schema.json
index c79672c96f0..4d530140206 100644
--- a/schemas/xrefmap.schema.json
+++ b/schemas/xrefmap.schema.json
@@ -5,6 +5,10 @@
   "type": "object",
   "additionalProperties": true,
   "properties": {
+    "$schema": {
+      "type": "string",
+      "default": "https://raw.githubusercontent.com/dotnet/docfx/main/schemas/xrefmap.schema.json"
+    },
     "sorted": {
       "type": "boolean",
       "default": false,
diff --git a/src/Docfx.App/Config/FileMetadataPairs.cs b/src/Docfx.App/Config/FileMetadataPairs.cs
index 7e3ea1b73c9..7390e638ad1 100644
--- a/src/Docfx.App/Config/FileMetadataPairs.cs
+++ b/src/Docfx.App/Config/FileMetadataPairs.cs
@@ -8,7 +8,8 @@ namespace Docfx;
 /// </summary>
 /// <see cref="BuildJsonConfig.FileMetadata"/>
 /// <see cref="MergeJsonItemConfig.FileMetadata"/>
-[Newtonsoft.Json.JsonConverter(typeof(FileMetadataPairsConverter))]
+[Newtonsoft.Json.JsonConverter(typeof(FileMetadataPairsConverter.NewtonsoftJsonConverter))]
+[System.Text.Json.Serialization.JsonConverter(typeof(FileMetadataPairsConverter.SystemTextJsonConverter))]
 internal class FileMetadataPairs
 {
     // Order matters, the latter one overrides the former one
@@ -28,9 +29,9 @@ public IReadOnlyList<FileMetadataPairsItem> Items
     /// <summary>
     /// Initializes a new instance of the <see cref="FileMetadataPairs"/> class.
     /// </summary>
-    public FileMetadataPairs(List<FileMetadataPairsItem> items)
+    public FileMetadataPairs(IEnumerable<FileMetadataPairsItem> items)
     {
-        _items = items;
+        _items = items.ToList();
     }
 
     /// <summary>
diff --git a/src/Docfx.App/Config/FileMetadataPairsConverter.NewtonsoftJson.cs b/src/Docfx.App/Config/FileMetadataPairsConverter.NewtonsoftJson.cs
new file mode 100644
index 00000000000..c407fde2110
--- /dev/null
+++ b/src/Docfx.App/Config/FileMetadataPairsConverter.NewtonsoftJson.cs
@@ -0,0 +1,63 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using Docfx.Common;
+
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Docfx;
+
+internal partial class FileMetadataPairsConverter
+{
+    /// <summary>
+    /// JsonConverter for FileMetadataPairs
+    /// </summary>
+    internal class NewtonsoftJsonConverter : JsonConverter
+    {
+        /// <inheritdoc/>
+        public override bool CanConvert(Type objectType)
+        {
+            return objectType == typeof(FileMetadataPairs);
+        }
+
+        /// <inheritdoc/>
+        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
+        {
+            IEnumerable<JToken> jItems;
+            if (reader.TokenType == JsonToken.StartObject)
+            {
+                jItems = JContainer.Load(reader);
+            }
+            else throw new JsonReaderException($"{reader.TokenType} is not a valid {objectType.Name}.");
+            return new FileMetadataPairs(jItems.Select(ParseItem).ToList());
+        }
+
+        /// <inheritdoc/>
+        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
+        {
+            writer.WriteStartObject();
+            foreach (var item in ((FileMetadataPairs)value).Items)
+            {
+                writer.WritePropertyName(item.Glob.Raw);
+                writer.WriteRawValue(JsonUtility.Serialize(item.Value));
+            }
+            writer.WriteEndObject();
+        }
+
+        private static FileMetadataPairsItem ParseItem(JToken item)
+        {
+            if (item.Type == JTokenType.Property)
+            {
+                JProperty jProperty = item as JProperty;
+                var pattern = jProperty.Name;
+                var rawValue = jProperty.Value;
+                return new FileMetadataPairsItem(pattern, rawValue);
+            }
+            else
+            {
+                throw new JsonReaderException($"Unsupported value {item} (type: {item.Type}).");
+            }
+        }
+    }
+}
diff --git a/src/Docfx.App/Config/FileMetadataPairsConverter.SystemTextJson.cs b/src/Docfx.App/Config/FileMetadataPairsConverter.SystemTextJson.cs
new file mode 100644
index 00000000000..5d294a0e691
--- /dev/null
+++ b/src/Docfx.App/Config/FileMetadataPairsConverter.SystemTextJson.cs
@@ -0,0 +1,78 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.Linq;
+using System.Text.Json;
+using System.Text.Json.Serialization;
+using Docfx.Common;
+
+#nullable enable
+
+namespace Docfx;
+
+internal partial class FileMetadataPairsConverter
+{
+    /// <summary>
+    /// JsonConverter for FileMetadataPairs
+    /// </summary>
+    internal class SystemTextJsonConverter : JsonConverter<FileMetadataPairs>
+    {
+        public override FileMetadataPairs Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            if (reader.TokenType != JsonTokenType.StartObject)
+            {
+                throw new JsonException($"{reader.TokenType} is not a valid {typeToConvert.Name}.");
+            }
+
+            using var document = JsonDocument.ParseValue(ref reader);
+            var properties = document.RootElement.EnumerateObject();
+            var items = properties.Select(x => new FileMetadataPairsItem(x.Name, ToInferredType(x.Value))).ToArray();
+            return new FileMetadataPairs(items);
+        }
+
+        public override void Write(Utf8JsonWriter writer, FileMetadataPairs value, JsonSerializerOptions options)
+        {
+            writer.WriteStartObject();
+            foreach (var item in value.Items)
+            {
+                writer.WritePropertyName(item.Glob.Raw);
+                writer.WriteRawValue(JsonUtility.Serialize(item.Value));
+            }
+            writer.WriteEndObject();
+        }
+
+        /// <summary>
+        /// Convert JsonElement to .NET object.
+        /// </summary>
+        private static object? ToInferredType(JsonElement elem)
+        {
+            switch (elem.ValueKind)
+            {
+                case JsonValueKind.Null:
+                    return null;
+                case JsonValueKind.True:
+                    return true;
+                case JsonValueKind.False:
+                    return false;
+                case JsonValueKind.String when elem.TryGetDateTime(out DateTime datetime):
+                    return datetime;
+                case JsonValueKind.String:
+                    return elem.GetString();
+                case JsonValueKind.Array:
+                    return elem.EnumerateArray().Select(ToInferredType).ToArray();
+                case JsonValueKind.Object:
+                    var properties = elem.EnumerateObject();
+                    return properties.ToDictionary(x => x.Name, x => ToInferredType(x.Value));
+                case JsonValueKind.Number when elem.TryGetInt32(out int intValue):
+                    return intValue;
+                case JsonValueKind.Number when elem.TryGetInt64(out long longValue):
+                    return longValue;
+                case JsonValueKind.Number:
+                    return elem.GetDouble();
+                case JsonValueKind.Undefined:
+                default:
+                    throw new JsonException($"JsonValueKind({elem.ValueKind}) is not supported.");
+            }
+        }
+    }
+}
diff --git a/src/Docfx.App/Config/FileMetadataPairsConverter.cs b/src/Docfx.App/Config/FileMetadataPairsConverter.cs
index cdebbaff91b..71dcc5f3458 100644
--- a/src/Docfx.App/Config/FileMetadataPairsConverter.cs
+++ b/src/Docfx.App/Config/FileMetadataPairsConverter.cs
@@ -11,51 +11,6 @@ namespace Docfx;
 /// <summary>
 /// JsonConverter for FileMetadataPairs
 /// </summary>
-internal class FileMetadataPairsConverter : JsonConverter
+internal partial class FileMetadataPairsConverter
 {
-    /// <inheritdoc/>
-    public override bool CanConvert(Type objectType)
-    {
-        return objectType == typeof(FileMetadataPairs);
-    }
-
-    /// <inheritdoc/>
-    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
-    {
-        var value = reader.Value;
-        IEnumerable<JToken> jItems;
-        if (reader.TokenType == JsonToken.StartObject)
-        {
-            jItems = JContainer.Load(reader);
-        }
-        else throw new JsonReaderException($"{reader.TokenType} is not a valid {objectType.Name}.");
-        return new FileMetadataPairs(jItems.Select(ParseItem).ToList());
-    }
-
-    /// <inheritdoc/>
-    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
-    {
-        writer.WriteStartObject();
-        foreach (var item in ((FileMetadataPairs)value).Items)
-        {
-            writer.WritePropertyName(item.Glob.Raw);
-            writer.WriteRawValue(JsonUtility.Serialize(item.Value));
-        }
-        writer.WriteEndObject();
-    }
-
-    private static FileMetadataPairsItem ParseItem(JToken item)
-    {
-        if (item.Type == JTokenType.Property)
-        {
-            JProperty jProperty = item as JProperty;
-            var pattern = jProperty.Name;
-            var rawValue = jProperty.Value;
-            return new FileMetadataPairsItem(pattern, rawValue);
-        }
-        else
-        {
-            throw new JsonReaderException($"Unsupported value {item} (type: {item.Type}).");
-        }
-    }
 }
diff --git a/src/Docfx.App/Config/FileMetadataPairsItem.cs b/src/Docfx.App/Config/FileMetadataPairsItem.cs
index f434b0221a9..5f5af6e8555 100644
--- a/src/Docfx.App/Config/FileMetadataPairsItem.cs
+++ b/src/Docfx.App/Config/FileMetadataPairsItem.cs
@@ -1,6 +1,8 @@
 // Licensed to the .NET Foundation under one or more agreements.
 // The .NET Foundation licenses this file to you under the MIT license.
 
+using System.Text.Json;
+using System.Text.Json.Serialization;
 using Docfx.Common;
 using Docfx.Glob;
 
@@ -20,6 +22,7 @@ internal class FileMetadataPairsItem
     /// <summary>
     /// JObject, no need to transform it to object as the metadata value will not be used but only to be serialized
     /// </summary>
+    [System.Text.Json.Serialization.JsonConverter(typeof(JsonElementConverter))]
     public object Value { get; }
 
     /// <summary>
@@ -31,3 +34,16 @@ public FileMetadataPairsItem(string pattern, object value)
         Value = ConvertToObjectHelper.ConvertJObjectToObject(value);
     }
 }
+
+internal class JsonElementConverter : JsonConverter<JsonElement>
+{
+    public override JsonElement Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+    {
+        throw new NotImplementedException();
+    }
+
+    public override void Write(Utf8JsonWriter writer, JsonElement value, JsonSerializerOptions options)
+    {
+        throw new NotImplementedException();
+    }
+}
diff --git a/src/Docfx.App/Config/ListWithStringFallback.cs b/src/Docfx.App/Config/ListWithStringFallback.cs
index 4ece161d789..788626707ed 100644
--- a/src/Docfx.App/Config/ListWithStringFallback.cs
+++ b/src/Docfx.App/Config/ListWithStringFallback.cs
@@ -6,13 +6,14 @@ namespace Docfx;
 /// <summary>
 /// ListWithStringFallback.
 /// </summary>
-[Newtonsoft.Json.JsonConverter(typeof(ListWithStringFallbackConverter))]
+[Newtonsoft.Json.JsonConverter(typeof(ListWithStringFallbackConverter.NewtonsoftJsonConverter))]
+[System.Text.Json.Serialization.JsonConverter(typeof(ListWithStringFallbackConverter.SystemTextJsonConverter))]
 internal class ListWithStringFallback : List<string>
 {
     /// <summary>
     /// Initializes a new instance of the <see cref="ListWithStringFallback"/> class.
     /// </summary>
-    public ListWithStringFallback() : base()
+    public ListWithStringFallback()
     {
     }
 
diff --git a/src/Docfx.App/Config/ListWithStringFallbackConverter.NewtonsoftJson.cs b/src/Docfx.App/Config/ListWithStringFallbackConverter.NewtonsoftJson.cs
new file mode 100644
index 00000000000..c41baf9818c
--- /dev/null
+++ b/src/Docfx.App/Config/ListWithStringFallbackConverter.NewtonsoftJson.cs
@@ -0,0 +1,72 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Docfx;
+
+
+internal partial class ListWithStringFallbackConverter
+{
+    /// <summary>
+    /// JsonConverter for <see cref="ListWithStringFallback"/>.
+    /// </summary>
+    internal class NewtonsoftJsonConverter : JsonConverter
+    {
+        /// <inheritdoc/>
+        public override bool CanConvert(Type objectType)
+        {
+            return objectType == typeof(FileMapping);
+        }
+
+        /// <inheritdoc/>
+        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
+        {
+            var model = new ListWithStringFallback();
+            var value = reader.Value;
+            IEnumerable<JToken> jItems;
+            if (reader.TokenType == JsonToken.StartArray)
+            {
+                jItems = JArray.Load(reader);
+            }
+            else if (reader.TokenType == JsonToken.StartObject)
+            {
+                jItems = JContainer.Load(reader);
+            }
+            else if (reader.TokenType == JsonToken.String)
+            {
+                jItems = JRaw.Load(reader);
+            }
+            else
+            {
+                jItems = JObject.Load(reader);
+            }
+
+            if (jItems is JValue)
+            {
+                model.Add(jItems.ToString());
+            }
+            else
+            {
+                foreach (var item in jItems)
+                {
+                    model.Add(item.ToString());
+                }
+            }
+
+            return model;
+        }
+
+        /// <inheritdoc/>
+        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
+        {
+            writer.WriteStartArray();
+            foreach (var item in (ListWithStringFallback)value)
+            {
+                serializer.Serialize(writer, item);
+            }
+            writer.WriteEndArray();
+        }
+    }
+}
diff --git a/src/Docfx.App/Config/ListWithStringFallbackConverter.SystemTextJson.cs b/src/Docfx.App/Config/ListWithStringFallbackConverter.SystemTextJson.cs
new file mode 100644
index 00000000000..219ec035958
--- /dev/null
+++ b/src/Docfx.App/Config/ListWithStringFallbackConverter.SystemTextJson.cs
@@ -0,0 +1,56 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.IO;
+using System.Text.Json;
+using System.Text.Json.Serialization;
+using YamlDotNet.Serialization;
+
+namespace Docfx;
+
+
+internal partial class ListWithStringFallbackConverter
+{
+    /// <summary>
+    /// JsonConverter for <see cref="ListWithStringFallback"/>.
+    /// </summary>
+    internal class SystemTextJsonConverter : JsonConverter<ListWithStringFallback>
+    {
+        public override ListWithStringFallback Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            var tokenType = reader.TokenType;
+            switch (tokenType)
+            {
+                case JsonTokenType.String:
+                    {
+                        var value = reader.GetString();
+                        return new ListWithStringFallback([value]);
+                    }
+                case JsonTokenType.StartArray:
+                    {
+                        var items = JsonSerializer.Deserialize<string[]>(ref reader, options);
+                        return new ListWithStringFallback(items);
+                    }
+                case JsonTokenType.StartObject:
+                    {
+                        using var document = JsonDocument.ParseValue(ref reader);
+                        JsonElement root = document.RootElement;
+                        var values = root.EnumerateObject().Select(x=>x.ToString());
+                        return new ListWithStringFallback(values);
+                    }
+                default:
+                    throw new JsonException($"TokenType({reader.TokenType}) is not supported.");
+            }
+        }
+
+        public override void Write(Utf8JsonWriter writer, ListWithStringFallback value, JsonSerializerOptions options)
+        {
+            writer.WriteStartArray();
+            foreach (var item in value)
+            {
+                writer.WriteStringValue(item);
+            }
+            writer.WriteEndArray();
+        }
+    }
+}
diff --git a/src/Docfx.App/Config/ListWithStringFallbackConverter.cs b/src/Docfx.App/Config/ListWithStringFallbackConverter.cs
index 47c117f6274..12188991a86 100644
--- a/src/Docfx.App/Config/ListWithStringFallbackConverter.cs
+++ b/src/Docfx.App/Config/ListWithStringFallbackConverter.cs
@@ -6,63 +6,7 @@
 
 namespace Docfx;
 
-/// <summary>
-/// JsonConverter for <see cref="ListWithStringFallback"/>.
-/// </summary>
-internal class ListWithStringFallbackConverter : JsonConverter
-{
-    /// <inheritdoc/>
-    public override bool CanConvert(Type objectType)
-    {
-        return objectType == typeof(FileMapping);
-    }
-
-    /// <inheritdoc/>
-    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
-    {
-        var model = new ListWithStringFallback();
-        var value = reader.Value;
-        IEnumerable<JToken> jItems;
-        if (reader.TokenType == JsonToken.StartArray)
-        {
-            jItems = JArray.Load(reader);
-        }
-        else if (reader.TokenType == JsonToken.StartObject)
-        {
-            jItems = JContainer.Load(reader);
-        }
-        else if (reader.TokenType == JsonToken.String)
-        {
-            jItems = JRaw.Load(reader);
-        }
-        else
-        {
-            jItems = JObject.Load(reader);
-        }
-
-        if (jItems is JValue)
-        {
-            model.Add(jItems.ToString());
-        }
-        else
-        {
-            foreach (var item in jItems)
-            {
-                model.Add(item.ToString());
-            }
-        }
 
-        return model;
-    }
-
-    /// <inheritdoc/>
-    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
-    {
-        writer.WriteStartArray();
-        foreach (var item in (ListWithStringFallback)value)
-        {
-            serializer.Serialize(writer, item);
-        }
-        writer.WriteEndArray();
-    }
+internal partial class ListWithStringFallbackConverter
+{
 }
diff --git a/src/Docfx.App/Config/MergeJsonConfig.cs b/src/Docfx.App/Config/MergeJsonConfig.cs
index 4596c28c8e7..e06432eded5 100644
--- a/src/Docfx.App/Config/MergeJsonConfig.cs
+++ b/src/Docfx.App/Config/MergeJsonConfig.cs
@@ -6,7 +6,8 @@ namespace Docfx;
 /// <summary>
 /// MergeJsonConfig.
 /// </summary>
-[Newtonsoft.Json.JsonConverter(typeof(MergeJsonConfigConverter))]
+[Newtonsoft.Json.JsonConverter(typeof(MergeJsonConfigConverter.NewtonsoftJsonConverter))]
+[System.Text.Json.Serialization.JsonConverter(typeof(MergeJsonConfigConverter.SystemTextJsonConverter))]
 internal class MergeJsonConfig : List<MergeJsonItemConfig>
 {
     /// <summary>
diff --git a/src/Docfx.App/Config/MergeJsonConfigConverter.NewtonsoftJson.cs b/src/Docfx.App/Config/MergeJsonConfigConverter.NewtonsoftJson.cs
new file mode 100644
index 00000000000..344c352c61f
--- /dev/null
+++ b/src/Docfx.App/Config/MergeJsonConfigConverter.NewtonsoftJson.cs
@@ -0,0 +1,68 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Docfx;
+
+
+internal partial class MergeJsonConfigConverter
+{
+    /// <summary>
+    /// JsonConverter for <see cref="MergeJsonConfig"/>.
+    /// </summary>
+    internal class NewtonsoftJsonConverter : JsonConverter
+    {
+        /// <inheritdoc/>
+        public override bool CanConvert(Type objectType)
+        {
+            return objectType == typeof(MergeJsonConfig);
+        }
+
+        /// <inheritdoc/>
+        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
+        {
+            var model = new MergeJsonConfig();
+            var value = reader.Value;
+            IEnumerable<JToken> jItems;
+            if (reader.TokenType == JsonToken.StartArray)
+            {
+                jItems = JArray.Load(reader);
+            }
+            else if (reader.TokenType == JsonToken.String)
+            {
+                jItems = JRaw.Load(reader);
+            }
+            else
+            {
+                jItems = JObject.Load(reader);
+            }
+
+            if (jItems is JValue one)
+            {
+                model.Add(serializer.Deserialize<MergeJsonItemConfig>(one.CreateReader()));
+            }
+            else if (jItems is JObject)
+            {
+                model.Add(serializer.Deserialize<MergeJsonItemConfig>(((JToken)jItems).CreateReader()));
+            }
+            else
+            {
+                foreach (var item in jItems)
+                {
+                    MergeJsonItemConfig itemModel = serializer.Deserialize<MergeJsonItemConfig>(item.CreateReader());
+                    model.Add(itemModel);
+                }
+            }
+
+            return model;
+        }
+
+        /// <inheritdoc/>
+        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
+        {
+            serializer.Serialize(writer, ((MergeJsonConfig)value).ToArray());
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Docfx.App/Config/MergeJsonConfigConverter.SystemTextJson.cs b/src/Docfx.App/Config/MergeJsonConfigConverter.SystemTextJson.cs
new file mode 100644
index 00000000000..90ebe522bd1
--- /dev/null
+++ b/src/Docfx.App/Config/MergeJsonConfigConverter.SystemTextJson.cs
@@ -0,0 +1,50 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.Text.Json;
+using System.Text.Json.Serialization;
+using YamlDotNet.Serialization;
+
+namespace Docfx;
+
+internal partial class MergeJsonConfigConverter
+{
+    /// <summary>
+    /// JsonConverter for <see cref="MergeJsonConfig"/>.
+    /// </summary>
+    internal class SystemTextJsonConverter : JsonConverter<MergeJsonConfig>
+    {
+        public override MergeJsonConfig Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            var model = new MergeJsonConfig();
+
+            var tokenType = reader.TokenType;
+
+            switch (tokenType)
+            {
+                case JsonTokenType.StartArray:
+                    {
+                        var items = JsonSerializer.Deserialize<MergeJsonItemConfig[]>(ref reader, options);
+                        return new MergeJsonConfig(items);
+                    }
+                case JsonTokenType.StartObject:
+                    {
+                        var item = JsonSerializer.Deserialize<MergeJsonItemConfig>(ref reader, options);
+                        return new MergeJsonConfig(item);
+                    }
+                default:
+                    throw new JsonException($"TokenType({tokenType}) is not supported.");
+            }
+        }
+
+        public override void Write(Utf8JsonWriter writer, MergeJsonConfig value, JsonSerializerOptions options)
+        {
+            writer.WriteStartArray();
+            foreach (var item in value)
+            {
+                JsonSerializer.Serialize(writer, item, options);
+            }
+            writer.WriteEndArray();
+        }
+    }
+}
diff --git a/src/Docfx.App/Config/MergeJsonConfigConverter.cs b/src/Docfx.App/Config/MergeJsonConfigConverter.cs
index 3081ff85504..64d4e815013 100644
--- a/src/Docfx.App/Config/MergeJsonConfigConverter.cs
+++ b/src/Docfx.App/Config/MergeJsonConfigConverter.cs
@@ -9,56 +9,6 @@ namespace Docfx;
 /// <summary>
 /// JsonConverter for <see cref="MergeJsonConfig"/>.
 /// </summary>
-internal class MergeJsonConfigConverter : JsonConverter
+internal partial class MergeJsonConfigConverter
 {
-    /// <inheritdoc/>
-    public override bool CanConvert(Type objectType)
-    {
-        return objectType == typeof(MergeJsonConfig);
-    }
-
-    /// <inheritdoc/>
-    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
-    {
-        var model = new MergeJsonConfig();
-        var value = reader.Value;
-        IEnumerable<JToken> jItems;
-        if (reader.TokenType == JsonToken.StartArray)
-        {
-            jItems = JArray.Load(reader);
-        }
-        else if (reader.TokenType == JsonToken.String)
-        {
-            jItems = JRaw.Load(reader);
-        }
-        else
-        {
-            jItems = JObject.Load(reader);
-        }
-
-        if (jItems is JValue one)
-        {
-            model.Add(serializer.Deserialize<MergeJsonItemConfig>(one.CreateReader()));
-        }
-        else if (jItems is JObject)
-        {
-            model.Add(serializer.Deserialize<MergeJsonItemConfig>(((JToken)jItems).CreateReader()));
-        }
-        else
-        {
-            foreach (var item in jItems)
-            {
-                MergeJsonItemConfig itemModel = serializer.Deserialize<MergeJsonItemConfig>(item.CreateReader());
-                model.Add(itemModel);
-            }
-        }
-
-        return model;
-    }
-
-    /// <inheritdoc/>
-    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
-    {
-        serializer.Serialize(writer, ((MergeJsonConfig)value).ToArray());
-    }
 }
diff --git a/src/Docfx.App/Docfx.App.csproj b/src/Docfx.App/Docfx.App.csproj
index 609196c0de2..12db285be2e 100644
--- a/src/Docfx.App/Docfx.App.csproj
+++ b/src/Docfx.App/Docfx.App.csproj
@@ -1,7 +1,8 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <EnablePackageValidation>true</EnablePackageValidation>
-    <PackageValidationBaselineVersion>2.70.0</PackageValidationBaselineVersion>
+    <!-- TODO: Enable package validation after v2.78.0 packages are published --> 
+    <EnablePackageValidation>false</EnablePackageValidation>
+    <PackageValidationBaselineVersion>2.78.0</PackageValidationBaselineVersion>
     <Description>Docfx published as a library for extensibility and advanced customization</Description>
   </PropertyGroup>
 
@@ -15,7 +16,7 @@
     <InternalsVisibleTo Include="docfx.Tests" />
     <InternalsVisibleTo Include="docfx.Snapshot.Tests" />
   </ItemGroup>
-  
+
   <ItemGroup>
     <InternalsAssemblyName Include="UglyToad.PdfPig" />
   </ItemGroup>
diff --git a/src/Docfx.App/Helpers/DocumentBuilderWrapper.cs b/src/Docfx.App/Helpers/DocumentBuilderWrapper.cs
index b7eb555a8ce..2bafb81bef6 100644
--- a/src/Docfx.App/Helpers/DocumentBuilderWrapper.cs
+++ b/src/Docfx.App/Helpers/DocumentBuilderWrapper.cs
@@ -15,7 +15,7 @@ internal static class DocumentBuilderWrapper
 {
     private static readonly Assembly[] s_pluginAssemblies = LoadPluginAssemblies(AppContext.BaseDirectory).ToArray();
 
-    public static void BuildDocument(BuildJsonConfig config, BuildOptions options, TemplateManager templateManager, string baseDirectory, string outputDirectory, string templateDirectory)
+    public static void BuildDocument(BuildJsonConfig config, BuildOptions options, TemplateManager templateManager, string baseDirectory, string outputDirectory, string templateDirectory, CancellationToken cancellationToken)
     {
         var postProcessorNames = config.PostProcessors.ToImmutableArray();
         var metadata = config.GlobalMetadata?.ToImmutableDictionary();
@@ -23,7 +23,7 @@ public static void BuildDocument(BuildJsonConfig config, BuildOptions options, T
         // Ensure "_enableSearch" adds the right post processor
         if (metadata != null && metadata.TryGetValue("_enableSearch", out object value))
         {
-            if (value is bool isSearchable && isSearchable && !postProcessorNames.Contains("ExtractSearchIndex"))
+            if (value is true && !postProcessorNames.Contains("ExtractSearchIndex"))
             {
                 postProcessorNames = postProcessorNames.Add("ExtractSearchIndex");
             }
@@ -39,7 +39,7 @@ public static void BuildDocument(BuildJsonConfig config, BuildOptions options, T
         using var builder = new DocumentBuilder(s_pluginAssemblies.Concat(pluginAssemblies), postProcessorNames);
 
         var parameters = ConfigToParameter(config, options, templateManager, baseDirectory, outputDirectory, templateDirectory);
-        builder.Build(parameters, outputDirectory);
+        builder.Build(parameters, outputDirectory, cancellationToken);
     }
 
     private static IEnumerable<Assembly> LoadPluginAssemblies(string pluginDirectory)
diff --git a/src/Docfx.App/Helpers/MetadataMerger.cs b/src/Docfx.App/Helpers/MetadataMerger.cs
index 029862bb0e9..2dee2e496f3 100644
--- a/src/Docfx.App/Helpers/MetadataMerger.cs
+++ b/src/Docfx.App/Helpers/MetadataMerger.cs
@@ -31,11 +31,11 @@ public void Merge(MetadataMergeParameters parameters)
         }
         parameters.Metadata ??= ImmutableDictionary<string, object>.Empty;
 
-            Directory.CreateDirectory(parameters.OutputBaseDir);
-            Logger.LogInfo("Start merge metadata...");
-            MergePageViewModel(parameters);
-            MergeToc(parameters);
-            Logger.LogInfo("Merge metadata completed.");
+        Directory.CreateDirectory(parameters.OutputBaseDir);
+        Logger.LogInfo("Start merge metadata...");
+        MergePageViewModel(parameters);
+        MergeToc(parameters);
+        Logger.LogInfo("Merge metadata completed.");
     }
 
     private void MergePageViewModel(MetadataMergeParameters parameters)
@@ -67,7 +67,7 @@ private void MergePageViewModel(MetadataMergeParameters parameters)
                 }));
         foreach (var m in models)
         {
-            m.File = (RelativePath)m.FileAndType.DestinationDir + (((RelativePath)m.File) - (RelativePath)m.FileAndType.SourceDir);
+            m.File = (RelativePath)m.FileAndType.DestinationDir + ((RelativePath)m.File - (RelativePath)m.FileAndType.SourceDir);
             Console.WriteLine($"File:{m.OriginalFileAndType.File} from:{m.FileAndType.SourceDir} to:{m.FileAndType.DestinationDir} => {m.File}");
         }
         foreach (var m in models)
@@ -88,7 +88,7 @@ from f in tocFiles
             select YamlUtility.Deserialize<List<TocItemViewModel>>(f.File));
         CopyMetadataToToc(vm);
         YamlUtility.Serialize(
-            ((RelativePath)tocFiles[0].DestinationDir + (((RelativePath)tocFiles[0].File) - (RelativePath)tocFiles[0].SourceDir)).ToString(),
+            ((RelativePath)tocFiles[0].DestinationDir + ((RelativePath)tocFiles[0].File - (RelativePath)tocFiles[0].SourceDir)).ToString(),
             vm,
             YamlMime.TableOfContent);
     }
diff --git a/src/Docfx.App/PdfBuilder.cs b/src/Docfx.App/PdfBuilder.cs
index d2b84c90093..fdb1312dc36 100644
--- a/src/Docfx.App/PdfBuilder.cs
+++ b/src/Docfx.App/PdfBuilder.cs
@@ -201,7 +201,7 @@ async Task<byte[]> PrintHeaderFooterCore()
                 {
                     await page.GotoAsync("about:blank");
 
-                    PagePdfOptions options = new PagePdfOptions
+                    var options = new PagePdfOptions
                     {
                         DisplayHeaderFooter = true,
                         HeaderTemplate = headerTemplate,
@@ -583,7 +583,7 @@ private static bool TryGetPlaywrightPageFormat(PageSize pageSize, out string? pa
                 pageFormat = pageSize.ToString();
                 return true;
 
-            // Following format is not supported format by playwright. 
+            // Following format is not supported format by playwright.
             // It need to use Width/Height settings.
             case PageSize.A7:
             case PageSize.A8:
diff --git a/src/Docfx.App/RunBuild.cs b/src/Docfx.App/RunBuild.cs
index 33706794ffd..5501ae9e856 100644
--- a/src/Docfx.App/RunBuild.cs
+++ b/src/Docfx.App/RunBuild.cs
@@ -16,7 +16,7 @@ internal static class RunBuild
     /// <summary>
     /// Build document with specified settings.
     /// </summary>
-    public static string Exec(BuildJsonConfig config, BuildOptions options, string configDirectory, string outputDirectory = null)
+    public static string Exec(BuildJsonConfig config, BuildOptions options, string configDirectory, string outputDirectory = null, CancellationToken cancellationToken = default)
     {
         var stopwatch = Stopwatch.StartNew();
         if (config.Template == null || config.Template.Count == 0)
@@ -36,7 +36,7 @@ public static string Exec(BuildJsonConfig config, BuildOptions options, string c
         {
             var templateManager = new TemplateManager(config.Template, config.Theme, configDirectory);
 
-            DocumentBuilderWrapper.BuildDocument(config, options, templateManager, baseDirectory, outputFolder, null);
+            DocumentBuilderWrapper.BuildDocument(config, options, templateManager, baseDirectory, outputFolder, null, cancellationToken);
 
             templateManager.ProcessTheme(outputFolder, true);
         }
diff --git a/src/Docfx.Build.Common/Docfx.Build.Common.csproj b/src/Docfx.Build.Common/Docfx.Build.Common.csproj
index 59b08eb754b..206ccd57b0e 100644
--- a/src/Docfx.Build.Common/Docfx.Build.Common.csproj
+++ b/src/Docfx.Build.Common/Docfx.Build.Common.csproj
@@ -1,4 +1,4 @@
-<Project Sdk="Microsoft.NET.Sdk">
+<Project Sdk="Microsoft.NET.Sdk">
   <ItemGroup>
     <ProjectReference Include="..\Docfx.Common\Docfx.Common.csproj" />
     <ProjectReference Include="..\Docfx.DataContracts.Common\Docfx.DataContracts.Common.csproj" />
diff --git a/src/Docfx.Build.Common/ModelAttributeHandlers/Handlers/BaseModelAttributeHandler.cs b/src/Docfx.Build.Common/ModelAttributeHandlers/Handlers/BaseModelAttributeHandler.cs
index 847a3da6406..1178c9062bf 100644
--- a/src/Docfx.Build.Common/ModelAttributeHandlers/Handlers/BaseModelAttributeHandler.cs
+++ b/src/Docfx.Build.Common/ModelAttributeHandlers/Handlers/BaseModelAttributeHandler.cs
@@ -78,7 +78,7 @@ public object Handle(object obj, HandleModelAttributesContext context)
 
     protected virtual bool ShouldHandle(object currentObj, object declaringObject, PropInfo currentPropInfo, HandleModelAttributesContext context)
     {
-        return currentPropInfo != null && currentPropInfo.Attr != null;
+        return currentPropInfo is {Attr: not null};
     }
 
     /// <summary>
diff --git a/src/Docfx.Build.Common/ModelAttributeHandlers/ReflectionHelper.cs b/src/Docfx.Build.Common/ModelAttributeHandlers/ReflectionHelper.cs
index 41667a65bbb..1a04794eccc 100644
--- a/src/Docfx.Build.Common/ModelAttributeHandlers/ReflectionHelper.cs
+++ b/src/Docfx.Build.Common/ModelAttributeHandlers/ReflectionHelper.cs
@@ -36,7 +36,7 @@ public static object CreateInstance(Type type, Type[] typeArguments, Type[] argu
         ArgumentNullException.ThrowIfNull(arguments);
 
         var func = _createInstanceCache.GetOrAdd(
-            Tuple.Create(type, typeArguments ?? Type.EmptyTypes, argumentTypes),
+            Tuple.Create(type, typeArguments ?? [], argumentTypes),
             GetCreateInstanceFunc);
         return func(arguments);
     }
@@ -150,7 +150,7 @@ public static IEnumerable<PropertyInfo> GetPublicProperties(Type type)
     {
         if (!type.IsVisible)
         {
-            return Enumerable.Empty<PropertyInfo>();
+            return [];
         }
         return GetProperties(type, BindingFlags.Public | BindingFlags.Instance);
     }
diff --git a/src/Docfx.Build.Common/Reference/OverwriteDocumentModel.cs b/src/Docfx.Build.Common/Reference/OverwriteDocumentModel.cs
index 7d412822293..8ac8f568cbb 100644
--- a/src/Docfx.Build.Common/Reference/OverwriteDocumentModel.cs
+++ b/src/Docfx.Build.Common/Reference/OverwriteDocumentModel.cs
@@ -81,7 +81,7 @@ public class OverwriteDocumentModel
     [YamlIgnore]
     [Newtonsoft.Json.JsonIgnore]
     [System.Text.Json.Serialization.JsonIgnore]
-    public ImmutableArray<string> Dependency { get; set; } = ImmutableArray<string>.Empty;
+    public ImmutableArray<string> Dependency { get; set; } = [];
 
     public T ConvertTo<T>() where T : class
     {
diff --git a/src/Docfx.Build.Common/YamlHtmlPart.cs b/src/Docfx.Build.Common/YamlHtmlPart.cs
index cfc5d680e56..62e6649e4fb 100644
--- a/src/Docfx.Build.Common/YamlHtmlPart.cs
+++ b/src/Docfx.Build.Common/YamlHtmlPart.cs
@@ -21,9 +21,9 @@ public class YamlHtmlPart
 
     public int EndLine { get; set; }
 
-    public ImmutableArray<string> LinkToFiles { get; set; } = ImmutableArray<string>.Empty;
+    public ImmutableArray<string> LinkToFiles { get; set; } = [];
 
-    public ImmutableHashSet<string> LinkToUids { get; set; } = ImmutableHashSet<string>.Empty;
+    public ImmutableHashSet<string> LinkToUids { get; set; } = [];
 
     public ImmutableDictionary<string, object> YamlHeader { get; set; } = ImmutableDictionary<string, object>.Empty;
 
diff --git a/src/Docfx.Build.ManagedReference/ApplyPlatformVersion.cs b/src/Docfx.Build.ManagedReference/ApplyPlatformVersion.cs
index 96532b18507..9135d8c370a 100644
--- a/src/Docfx.Build.ManagedReference/ApplyPlatformVersion.cs
+++ b/src/Docfx.Build.ManagedReference/ApplyPlatformVersion.cs
@@ -27,9 +27,8 @@ public override IEnumerable<FileModel> Prebuild(ImmutableList<FileModel> models,
             }
             var page = m.Content as PageViewModel;
             if (page?.Metadata != null &&
-                page.Metadata.TryGetValue("platform", out object value))
+                page.Metadata.Remove("platform", out object value))
             {
-                page.Metadata.Remove("platform");
                 var list = GetPlatformVersionFromMetadata(value);
                 if (list != null)
                 {
diff --git a/src/Docfx.Build.ManagedReference/BuildOutputs/ApiBuildOutput.cs b/src/Docfx.Build.ManagedReference/BuildOutputs/ApiBuildOutput.cs
index 48a62fcfb5c..d3087ea9a83 100644
--- a/src/Docfx.Build.ManagedReference/BuildOutputs/ApiBuildOutput.cs
+++ b/src/Docfx.Build.ManagedReference/BuildOutputs/ApiBuildOutput.cs
@@ -188,7 +188,7 @@ public class ApiBuildOutput
 
     public static ApiBuildOutput FromModel(PageViewModel model)
     {
-        if (model == null || model.Items == null || model.Items.Count == 0)
+        if (model?.Items == null || model.Items.Count == 0)
         {
             return null;
         }
diff --git a/src/Docfx.Build.ManagedReference/BuildOutputs/ApiReferenceBuildOutput.cs b/src/Docfx.Build.ManagedReference/BuildOutputs/ApiReferenceBuildOutput.cs
index 454bb7ea717..14416d04deb 100644
--- a/src/Docfx.Build.ManagedReference/BuildOutputs/ApiReferenceBuildOutput.cs
+++ b/src/Docfx.Build.ManagedReference/BuildOutputs/ApiReferenceBuildOutput.cs
@@ -173,17 +173,28 @@ public class ApiReferenceBuildOutput
     [ExtensibleMember]
     [Newtonsoft.Json.JsonIgnore]
     [System.Text.Json.Serialization.JsonIgnore]
+    [System.Text.Json.Serialization.JsonPropertyName("__metadata__")]
     public Dictionary<string, object> Metadata { get; set; } = new();
 
     [EditorBrowsable(EditorBrowsableState.Never)]
     [YamlIgnore]
     [Newtonsoft.Json.JsonExtensionData]
     [System.Text.Json.Serialization.JsonExtensionData]
-    public CompositeDictionary MetadataJson =>
-        CompositeDictionary
+    [System.Text.Json.Serialization.JsonInclude]
+    public CompositeDictionary MetadataJson
+    {
+        get
+        {
+            return CompositeDictionary
             .CreateBuilder()
             .Add(string.Empty, Metadata)
             .Create();
+        }
+        private init
+        {
+            // init or getter is required for deserialize data with System.Text.Json.
+        }
+    }
 
     private bool _needExpand = true;
 
@@ -289,7 +300,7 @@ public void Expand(Dictionary<string, ApiReferenceBuildOutput> references, strin
 
     public static List<ApiLanguageValuePair> GetSpecNames(string xref, string[] supportedLanguages, SortedList<string, List<SpecViewModel>> specs = null)
     {
-        if (specs != null && specs.Count > 0)
+        if (specs is {Count: > 0})
         {
             return (from spec in specs
                     where supportedLanguages.Contains(spec.Key)
diff --git a/src/Docfx.Build.ManagedReference/BuildOutputs/ApiSyntaxBuildOutput.cs b/src/Docfx.Build.ManagedReference/BuildOutputs/ApiSyntaxBuildOutput.cs
index 7dd160477b4..3c639142027 100644
--- a/src/Docfx.Build.ManagedReference/BuildOutputs/ApiSyntaxBuildOutput.cs
+++ b/src/Docfx.Build.ManagedReference/BuildOutputs/ApiSyntaxBuildOutput.cs
@@ -13,7 +13,7 @@ public class ApiSyntaxBuildOutput
     [YamlMember(Alias = "content")]
     [JsonProperty("content")]
     [JsonPropertyName("content")]
-    public List<ApiLanguageValuePair> Content { get; set; } = new List<ApiLanguageValuePair>();
+    public List<ApiLanguageValuePair> Content { get; set; } = [];
 
     [YamlMember(Alias = "parameters")]
     [JsonProperty("parameters")]
diff --git a/src/Docfx.Build.ManagedReference/Docfx.Build.ManagedReference.csproj b/src/Docfx.Build.ManagedReference/Docfx.Build.ManagedReference.csproj
index 2977ffe9aa8..b9e1c1dbcd6 100644
--- a/src/Docfx.Build.ManagedReference/Docfx.Build.ManagedReference.csproj
+++ b/src/Docfx.Build.ManagedReference/Docfx.Build.ManagedReference.csproj
@@ -1,4 +1,4 @@
-<Project Sdk="Microsoft.NET.Sdk">
+<Project Sdk="Microsoft.NET.Sdk">
   <ItemGroup>
     <ProjectReference Include="..\Docfx.Build.Common\Docfx.Build.Common.csproj" />
     <ProjectReference Include="..\Docfx.Common\Docfx.Common.csproj" />
diff --git a/src/Docfx.Build.ManagedReference/FillReferenceInformation.cs b/src/Docfx.Build.ManagedReference/FillReferenceInformation.cs
index 018aede6bce..1935a7a605b 100644
--- a/src/Docfx.Build.ManagedReference/FillReferenceInformation.cs
+++ b/src/Docfx.Build.ManagedReference/FillReferenceInformation.cs
@@ -112,11 +112,11 @@ private void TraceSourceInfo(PageViewModel model, string file)
 
     private static IEnumerable<string> GetUidsToFill(PageViewModel pageViewModel)
     {
-        return (from i in pageViewModel.Items
-                from c in (i.Children ?? Enumerable.Empty<string>())
-                    .Concat(i.ExtensionMethods ?? Enumerable.Empty<string>())
-                    .Concat(i.InheritedMembers ?? Enumerable.Empty<string>())
-                select c);
+        return from i in pageViewModel.Items
+            from c in (i.Children ?? Enumerable.Empty<string>())
+                .Concat(i.ExtensionMethods ?? Enumerable.Empty<string>())
+                .Concat(i.InheritedMembers ?? Enumerable.Empty<string>())
+            select c;
     }
 
     #endregion
diff --git a/src/Docfx.Build.ManagedReference/MergeManagedReferenceDocument.cs b/src/Docfx.Build.ManagedReference/MergeManagedReferenceDocument.cs
index 44986ce5d21..acf4e8e7c7a 100644
--- a/src/Docfx.Build.ManagedReference/MergeManagedReferenceDocument.cs
+++ b/src/Docfx.Build.ManagedReference/MergeManagedReferenceDocument.cs
@@ -42,7 +42,6 @@ public override IEnumerable<FileModel> Prebuild(ImmutableList<FileModel> models,
                 return m;
             }
             processedUid.Add(mainUid);
-            var vm = (PageViewModel)m.Content;
             m.Content = MergeCore(
                 mainUid,
                 m,
@@ -169,10 +168,7 @@ private static void MergeReferencesCore(
     {
         foreach (var pair in mergeFrom)
         {
-            if (!mergeTo.ContainsKey(pair.Key))
-            {
-                mergeTo[pair.Key] = pair.Value;
-            }
+            mergeTo.TryAdd(pair.Key, pair.Value);
         }
     }
 
diff --git a/src/Docfx.Build.ManagedReference/SplitClassPageToMemberLevel.cs b/src/Docfx.Build.ManagedReference/SplitClassPageToMemberLevel.cs
index 8910a97fa99..874bfb5ec06 100644
--- a/src/Docfx.Build.ManagedReference/SplitClassPageToMemberLevel.cs
+++ b/src/Docfx.Build.ManagedReference/SplitClassPageToMemberLevel.cs
@@ -46,14 +46,10 @@ public override IEnumerable<FileModel> Prebuild(ImmutableList<FileModel> models,
             var result = SplitModelToOverloadLevel(model, modelsDict, dupeModels);
             if (result != null)
             {
-                if (treeMapping.ContainsKey(result.Uid))
+                if (!treeMapping.TryAdd(result.Uid, Tuple.Create(model.OriginalFileAndType, result.TreeItems)))
                 {
                     Logger.LogWarning($"Model with the UID {result.Uid} already exists. '{model.OriginalFileAndType?.FullPath ?? model.FileAndType.FullPath}' is ignored.");
                 }
-                else
-                {
-                    treeMapping.Add(result.Uid, Tuple.Create(model.OriginalFileAndType, result.TreeItems));
-                }
             }
             else
             {
@@ -66,9 +62,8 @@ public override IEnumerable<FileModel> Prebuild(ImmutableList<FileModel> models,
 
         foreach (var dupeModel in dupeModels)
         {
-            if (modelsDict.TryGetValue(dupeModel.File, out var dupe))
+            if (modelsDict.Remove(dupeModel.File, out var dupe))
             {
-                modelsDict.Remove(dupeModel.File);
                 RenewDupeFileModels(dupe, newFilePaths, modelsDict);
             }
             RenewDupeFileModels(dupeModel, newFilePaths, modelsDict);
@@ -116,11 +111,10 @@ private static string GetUniqueFilePath(string dupePath, string newFileName, Dic
             {
                 // new file path already exist and have suffix
                 newFileName += $"_{suffix}";
-                suffix++;
             }
             else
             {
-                // new file path already exist but doesn't have suffix (special case) 
+                // new file path already exist but doesn't have suffix (special case)
                 newFileName += "_1";
                 newFilePaths[newFilePath] = 2;
             }
diff --git a/src/Docfx.Build.OperationLevelRestApi/SplitRestApiToOperationLevel.cs b/src/Docfx.Build.OperationLevelRestApi/SplitRestApiToOperationLevel.cs
index 5eb21b8a427..b108f10f8cb 100644
--- a/src/Docfx.Build.OperationLevelRestApi/SplitRestApiToOperationLevel.cs
+++ b/src/Docfx.Build.OperationLevelRestApi/SplitRestApiToOperationLevel.cs
@@ -185,10 +185,7 @@ private static Dictionary<string, object> MergeChildMetadata(RestApiRootItemView
         foreach (var pair in root.Metadata)
         {
             // Child metadata wins for the same key
-            if (!result.ContainsKey(pair.Key))
-            {
-                result[pair.Key] = pair.Value;
-            }
+            result.TryAdd(pair.Key, pair.Value);
         }
         return result;
     }
diff --git a/src/Docfx.Build.OverwriteDocuments/Docfx.Build.OverwriteDocuments.csproj b/src/Docfx.Build.OverwriteDocuments/Docfx.Build.OverwriteDocuments.csproj
index e462efbb22e..833f41fb3c0 100644
--- a/src/Docfx.Build.OverwriteDocuments/Docfx.Build.OverwriteDocuments.csproj
+++ b/src/Docfx.Build.OverwriteDocuments/Docfx.Build.OverwriteDocuments.csproj
@@ -1,4 +1,4 @@
-<Project Sdk="Microsoft.NET.Sdk">
+<Project Sdk="Microsoft.NET.Sdk">
   <ItemGroup>
     <PackageReference Include="Markdig" />
   </ItemGroup>
diff --git a/src/Docfx.Build.OverwriteDocuments/OverwriteUtility.cs b/src/Docfx.Build.OverwriteDocuments/OverwriteUtility.cs
index 84018ab2d59..275874b7e5e 100644
--- a/src/Docfx.Build.OverwriteDocuments/OverwriteUtility.cs
+++ b/src/Docfx.Build.OverwriteDocuments/OverwriteUtility.cs
@@ -23,7 +23,7 @@ public static List<OPathSegment> ParseOPath(string OPathString)
             throw new ArgumentException("OPathString cannot be null or empty.", nameof(OPathString));
         }
 
-        if (OPathString.EndsWith("/", StringComparison.Ordinal))
+        if (OPathString.EndsWith('/'))
         {
             throw new ArgumentException($"{OPathString} is not a valid OPath");
         }
@@ -39,7 +39,7 @@ public static List<OPathSegment> ParseOPath(string OPathString)
                 throw new ArgumentException($"{OPathString} is not a valid OPath");
             }
 
-            if (!match.Value.EndsWith("/", StringComparison.Ordinal) && match.Groups["key"].Success)
+            if (!match.Value.EndsWith('/') && match.Groups["key"].Success)
             {
                 throw new ArgumentException($"{OPathString} is not a valid OPath");
             }
@@ -76,33 +76,34 @@ public static string GetUidWrapper(string uid)
 
     public static void AddOrUpdateFragmentEntity(this Dictionary<string, MarkdownFragment> fragments, string uid, Dictionary<string, object> metadata = null)
     {
-        if (!fragments.ContainsKey(uid))
+        if (!fragments.TryGetValue(uid, out var value))
         {
-            fragments.Add(uid, new MarkdownFragment
+            value = new MarkdownFragment
             {
                 Uid = uid,
                 Properties = new Dictionary<string, MarkdownProperty>(),
                 Metadata = metadata
-            });
+            };
+            fragments.Add(uid, value);
         }
-        fragments[uid].Metadata = MergeMetadata(fragments[uid].Metadata, metadata);
-        fragments[uid].Touched = true;
+
+        value.Metadata = MergeMetadata(value.Metadata, metadata);
+        value.Touched = true;
     }
 
     public static void AddOrUpdateFragmentProperty(this MarkdownFragment fragment, string oPath, string content = null, Dictionary<string, object> metadata = null)
     {
-        if (!fragment.Properties.ContainsKey(oPath))
+        if (!fragment.Properties.TryGetValue(oPath, out var property))
         {
-            fragment.Properties[oPath] = new MarkdownProperty
-            {
-                OPath = oPath
-            };
+            fragment.Properties[oPath] = property = new MarkdownProperty { OPath = oPath};
         }
-        if (string.IsNullOrEmpty(fragment.Properties[oPath].Content))
+
+        if (string.IsNullOrEmpty(property.Content))
         {
-            fragment.Properties[oPath].Content = string.IsNullOrWhiteSpace(content) ? string.Empty : content.Trim('\n', '\r');
+            property.Content = string.IsNullOrWhiteSpace(content) ? string.Empty : content.Trim('\n', '\r');
         }
-        fragment.Properties[oPath].Touched = true;
+
+        property.Touched = true;
         fragment.Metadata = MergeMetadata(fragment.Metadata, metadata);
     }
 
@@ -156,10 +157,7 @@ private static Dictionary<string, object> MergeMetadata(Dictionary<string, objec
         {
             foreach (var pair in right)
             {
-                if (!left.ContainsKey(pair.Key))
-                {
-                    left[pair.Key] = right[pair.Key];
-                }
+                left.TryAdd(pair.Key, pair.Value);
             }
         }
         return left;
diff --git a/src/Docfx.Build.RestApi/BuildRestApiDocument.cs b/src/Docfx.Build.RestApi/BuildRestApiDocument.cs
index 75d60adb8d8..479fa53a900 100644
--- a/src/Docfx.Build.RestApi/BuildRestApiDocument.cs
+++ b/src/Docfx.Build.RestApi/BuildRestApiDocument.cs
@@ -102,7 +102,7 @@ private static void MarkupRecursive(JToken jToken, IHostService host, FileModel
             {
                 if (MarkupKeys.Contains(pair.Key) && pair.Value != null)
                 {
-                    if (pair.Value is JValue jValue && jValue.Type == JTokenType.String)
+                    if (pair.Value is JValue {Type: JTokenType.String} jValue)
                     {
                         jObject[pair.Key] = Markup(host, (string)jValue, model, filter);
                     }
diff --git a/src/Docfx.Build.RestApi/Docfx.Build.RestApi.csproj b/src/Docfx.Build.RestApi/Docfx.Build.RestApi.csproj
index 7ab4ee053c2..7703e8c6c3b 100644
--- a/src/Docfx.Build.RestApi/Docfx.Build.RestApi.csproj
+++ b/src/Docfx.Build.RestApi/Docfx.Build.RestApi.csproj
@@ -1,4 +1,4 @@
-<Project Sdk="Microsoft.NET.Sdk">
+<Project Sdk="Microsoft.NET.Sdk">
   <ItemGroup>
     <ProjectReference Include="..\Docfx.Build.Common\Docfx.Build.Common.csproj" />
     <ProjectReference Include="..\Docfx.Common\Docfx.Common.csproj" />
diff --git a/src/Docfx.Build.RestApi/RestApiDocumentProcessor.cs b/src/Docfx.Build.RestApi/RestApiDocumentProcessor.cs
index a21c9c1dec0..fe922ad87a2 100644
--- a/src/Docfx.Build.RestApi/RestApiDocumentProcessor.cs
+++ b/src/Docfx.Build.RestApi/RestApiDocumentProcessor.cs
@@ -211,7 +211,7 @@ private static bool IsSwaggerFile(string filePath)
             if (jObject.TryGetValue("swagger", out JToken swaggerValue))
             {
                 var swaggerString = (string)swaggerValue;
-                if (swaggerString != null && swaggerString.Equals("2.0"))
+                if (swaggerString is "2.0")
                 {
                     return true;
                 }
@@ -256,12 +256,10 @@ private static Dictionary<string, object> MergeMetadata(IDictionary<string, obje
         var result = new Dictionary<string, object>(item);
         foreach (var pair in overwriteItems.OrderBy(item => item.Key))
         {
-            if (result.ContainsKey(pair.Key))
+            if (!result.TryAdd(pair.Key, pair.Value))
             {
                 Logger.LogWarning($"Metadata \"{pair.Key}\" inside rest api is overwritten.");
             }
-
-            result[pair.Key] = pair.Value;
         }
         return result;
     }
diff --git a/src/Docfx.Build.RestApi/RestApiHelper.cs b/src/Docfx.Build.RestApi/RestApiHelper.cs
index 7235523ce8d..96258dc939e 100644
--- a/src/Docfx.Build.RestApi/RestApiHelper.cs
+++ b/src/Docfx.Build.RestApi/RestApiHelper.cs
@@ -48,7 +48,7 @@ public static SwaggerFormattedReference FormatReferenceFullPath(string reference
         }
 
         // Not decode for JSON String Representation
-        if (reference.StartsWith("/", StringComparison.Ordinal))
+        if (reference.StartsWith('/'))
         {
             return new SwaggerFormattedReference
             {
diff --git a/src/Docfx.Build.RestApi/Swagger/Internals/SwaggerJsonBuilder.cs b/src/Docfx.Build.RestApi/Swagger/Internals/SwaggerJsonBuilder.cs
index ef230d10eb9..871b936684f 100644
--- a/src/Docfx.Build.RestApi/Swagger/Internals/SwaggerJsonBuilder.cs
+++ b/src/Docfx.Build.RestApi/Swagger/Internals/SwaggerJsonBuilder.cs
@@ -247,10 +247,7 @@ private SwaggerObjectBase ResolveReferences(SwaggerObjectBase swaggerBase, strin
                         }
 
                         var swaggerObject = ResolveSwaggerObject(resolvedObject);
-                        if (!swaggerObject.Dictionary.ContainsKey(InternalRefNameKey))
-                        {
-                            swaggerObject.Dictionary.Add(InternalRefNameKey, new SwaggerValue { Token = swagger.ReferenceName });
-                        }
+                        swaggerObject.Dictionary.TryAdd(InternalRefNameKey, new SwaggerValue { Token = swagger.ReferenceName });
                         swagger.Reference = swaggerObject;
                         refStack.Pop();
                     }
@@ -259,9 +256,9 @@ private SwaggerObjectBase ResolveReferences(SwaggerObjectBase swaggerBase, strin
             case SwaggerObjectType.Object:
                 {
                     var swagger = (SwaggerObject)swaggerBase;
-                    foreach (var key in swagger.Dictionary.Keys.ToList())
+                    foreach (var pair in swagger.Dictionary.ToList())
                     {
-                        swagger.Dictionary[key] = ResolveReferences(swagger.Dictionary[key], swaggerPath, refStack);
+                        swagger.Dictionary[pair.Key] = ResolveReferences(pair.Value, swaggerPath, refStack);
                     }
                     return swagger;
                 }
diff --git a/src/Docfx.Build.SchemaDriven/ApplyOverwriteFragments.cs b/src/Docfx.Build.SchemaDriven/ApplyOverwriteFragments.cs
index 1bd0ba8ac27..fd2c9e40cb1 100644
--- a/src/Docfx.Build.SchemaDriven/ApplyOverwriteFragments.cs
+++ b/src/Docfx.Build.SchemaDriven/ApplyOverwriteFragments.cs
@@ -64,7 +64,6 @@ public override void Build(FileModel model, IHostService host)
                     $"Unable to parse markdown fragments: {ex.Message}",
                     line: ex.Position == -1 ? null : (ex.Position + 1).ToString(),
                     code: WarningCodes.Overwrite.InvalidMarkdownFragments);
-                return;
             }
             catch (DocumentException de)
             {
diff --git a/src/Docfx.Build.SchemaDriven/Models/JsonPointer.cs b/src/Docfx.Build.SchemaDriven/Models/JsonPointer.cs
index 5b1284e1ea1..99bb7ddba2d 100644
--- a/src/Docfx.Build.SchemaDriven/Models/JsonPointer.cs
+++ b/src/Docfx.Build.SchemaDriven/Models/JsonPointer.cs
@@ -49,7 +49,7 @@ public JsonPointer GetParentPointer()
     public static bool TryCreate(string raw, out JsonPointer pointer)
     {
         pointer = null;
-        if (raw != null && raw.Length > 0 && raw[0] != '/')
+        if (raw is {Length: > 0} && raw[0] != '/')
         {
             return false;
         }
diff --git a/src/Docfx.Build.SchemaDriven/OverwriteApplier.cs b/src/Docfx.Build.SchemaDriven/OverwriteApplier.cs
index 6284264e381..3524d0cc96d 100644
--- a/src/Docfx.Build.SchemaDriven/OverwriteApplier.cs
+++ b/src/Docfx.Build.SchemaDriven/OverwriteApplier.cs
@@ -84,7 +84,7 @@ public object BuildOverwriteWithSchema(FileModel owModel, OverwriteDocumentModel
         dynamic overwriteObject = ConvertToObjectHelper.ConvertToDynamic(overwrite.Metadata);
         overwriteObject.uid = overwrite.Uid;
         var overwriteModel = new FileModel(owModel.FileAndType, overwriteObject, owModel.OriginalFileAndType);
-        var context = (((IDictionary<string, object>)(owModel.Properties)).TryGetValue("MarkdigMarkdownService", out var service))
+        var context = ((IDictionary<string, object>)owModel.Properties).TryGetValue("MarkdigMarkdownService", out var service)
             ? new ProcessContext(_host, overwriteModel, null, (MarkdigMarkdownService)service)
             : new ProcessContext(_host, overwriteModel);
         if (_overwriteModelType == OverwriteModelType.Classic)
@@ -115,8 +115,8 @@ public object BuildOverwriteWithSchema(FileModel owModel, OverwriteDocumentModel
             };
         }
 
-        owModel.LinkToUids = owModel.LinkToUids.Union((context.UidLinkSources).Keys);
-        owModel.LinkToFiles = owModel.LinkToFiles.Union((context.FileLinkSources).Keys);
+        owModel.LinkToUids = owModel.LinkToUids.Union(context.UidLinkSources.Keys);
+        owModel.LinkToFiles = owModel.LinkToFiles.Union(context.FileLinkSources.Keys);
         owModel.FileLinkSources = owModel.FileLinkSources.Merge(context.FileLinkSources);
         owModel.UidLinkSources = owModel.UidLinkSources.Merge(context.UidLinkSources);
         owModel.Uids = owModel.Uids.AddRange(context.Uids);
diff --git a/src/Docfx.Build.SchemaDriven/Processors/FileInterpreter.cs b/src/Docfx.Build.SchemaDriven/Processors/FileInterpreter.cs
index 9f21a5f35e7..d67f99742ed 100644
--- a/src/Docfx.Build.SchemaDriven/Processors/FileInterpreter.cs
+++ b/src/Docfx.Build.SchemaDriven/Processors/FileInterpreter.cs
@@ -19,7 +19,7 @@ public FileInterpreter(bool exportFileLink, bool updateValue)
 
     public bool CanInterpret(BaseSchema schema)
     {
-        return schema != null && schema.ContentType == ContentType.File;
+        return schema is {ContentType: ContentType.File};
     }
 
     public object Interpret(BaseSchema schema, object value, IProcessContext context, string path)
@@ -48,7 +48,7 @@ public object Interpret(BaseSchema schema, object value, IProcessContext context
         relPath = (currentFile + relPath).GetPathFromWorkingFolder();
         if (_exportFileLink)
         {
-            (context.FileLinkSources).AddFileLinkSource(new LinkSourceInfo
+            context.FileLinkSources.AddFileLinkSource(new LinkSourceInfo
             {
                 Target = relPath,
                 SourceFile = originalFile.File
diff --git a/src/Docfx.Build.SchemaDriven/Processors/HrefInterpreter.cs b/src/Docfx.Build.SchemaDriven/Processors/HrefInterpreter.cs
index d20c08f188c..afe370d804d 100644
--- a/src/Docfx.Build.SchemaDriven/Processors/HrefInterpreter.cs
+++ b/src/Docfx.Build.SchemaDriven/Processors/HrefInterpreter.cs
@@ -21,7 +21,7 @@ public HrefInterpreter(bool exportFileLink, bool updateValue, string siteHostNam
 
     public bool CanInterpret(BaseSchema schema)
     {
-        return schema != null && schema.ContentType == ContentType.Href;
+        return schema is {ContentType: ContentType.Href};
     }
 
     public object Interpret(BaseSchema schema, object value, IProcessContext context, string path)
@@ -44,7 +44,7 @@ public object Interpret(BaseSchema schema, object value, IProcessContext context
         }
 
         // "/" is also considered as absolute to us
-        if (uri.IsAbsoluteUri || val.StartsWith("/", StringComparison.Ordinal))
+        if (uri.IsAbsoluteUri || val.StartsWith('/'))
         {
             return Helper.RemoveHostName(val, _siteHostName);
         }
@@ -60,7 +60,7 @@ public object Interpret(BaseSchema schema, object value, IProcessContext context
             relPath = (currentFile + relPath.UrlDecode()).GetPathFromWorkingFolder();
             if (_exportFileLink)
             {
-                (context.FileLinkSources).AddFileLinkSource(new LinkSourceInfo
+                context.FileLinkSources.AddFileLinkSource(new LinkSourceInfo
                 {
                     Target = relPath,
                     Anchor = UriUtility.GetFragment(val),
diff --git a/src/Docfx.Build.SchemaDriven/Processors/MarkdownAstInterpreter.cs b/src/Docfx.Build.SchemaDriven/Processors/MarkdownAstInterpreter.cs
index 497851514e7..6f70df20a95 100644
--- a/src/Docfx.Build.SchemaDriven/Processors/MarkdownAstInterpreter.cs
+++ b/src/Docfx.Build.SchemaDriven/Processors/MarkdownAstInterpreter.cs
@@ -40,9 +40,9 @@ private static string MarkupCore(MarkdownDocument document, IProcessContext cont
         var host = context.Host;
 
         var mr = context.MarkdigMarkdownService.Render(document);
-        (context.FileLinkSources).Merge(mr.FileLinkSources);
-        (context.UidLinkSources).Merge(mr.UidLinkSources);
-        (context.Dependency).UnionWith(mr.Dependency);
+        context.FileLinkSources.Merge(mr.FileLinkSources);
+        context.UidLinkSources.Merge(mr.UidLinkSources);
+        context.Dependency.UnionWith(mr.Dependency);
         return mr.Html;
     }
 }
diff --git a/src/Docfx.Build.SchemaDriven/Processors/MarkdownInterpreter.cs b/src/Docfx.Build.SchemaDriven/Processors/MarkdownInterpreter.cs
index a4c928497d7..2ac605ee96e 100644
--- a/src/Docfx.Build.SchemaDriven/Processors/MarkdownInterpreter.cs
+++ b/src/Docfx.Build.SchemaDriven/Processors/MarkdownInterpreter.cs
@@ -9,7 +9,7 @@ public class MarkdownInterpreter : IInterpreter
 {
     public bool CanInterpret(BaseSchema schema)
     {
-        return schema != null && schema.ContentType == ContentType.Markdown;
+        return schema is {ContentType: ContentType.Markdown};
     }
 
     public object Interpret(BaseSchema schema, object value, IProcessContext context, string path)
@@ -32,9 +32,9 @@ private static string MarkupCore(string content, IProcessContext context, string
         var host = context.Host;
 
         var mr = host.Markup(content, context.GetOriginalContentFile(path), false);
-        (context.FileLinkSources).Merge(mr.FileLinkSources);
-        (context.UidLinkSources).Merge(mr.UidLinkSources);
-        (context.Dependency).UnionWith(mr.Dependency);
+        context.FileLinkSources.Merge(mr.FileLinkSources);
+        context.UidLinkSources.Merge(mr.UidLinkSources);
+        context.Dependency.UnionWith(mr.Dependency);
 
         if (mr.Html.StartsWith("<p"))
             mr.Html = mr.Html.Insert(mr.Html.IndexOf(">"), " jsonPath=\"" + path + "\"");
diff --git a/src/Docfx.Build.SchemaDriven/Processors/Merger.cs b/src/Docfx.Build.SchemaDriven/Processors/Merger.cs
index 0b730355a3f..3b6dadf990f 100644
--- a/src/Docfx.Build.SchemaDriven/Processors/Merger.cs
+++ b/src/Docfx.Build.SchemaDriven/Processors/Merger.cs
@@ -131,7 +131,7 @@ private static void ThrowError(string message)
 
     private static bool TestKey(object source, object overrides, BaseSchema schema)
     {
-        if (overrides == null || overrides == null)
+        if (overrides == null || source == null)
         {
             return false;
         }
diff --git a/src/Docfx.Build.SchemaDriven/Processors/ProcessContext.cs b/src/Docfx.Build.SchemaDriven/Processors/ProcessContext.cs
index f58039757f9..4fe3d6bc2fd 100644
--- a/src/Docfx.Build.SchemaDriven/Processors/ProcessContext.cs
+++ b/src/Docfx.Build.SchemaDriven/Processors/ProcessContext.cs
@@ -58,7 +58,7 @@ public ProcessContext(IHostService hs, FileModel fm, IDocumentBuildContext bc, M
         XRefSpecs = new List<XRefSpec>();
         ExternalXRefSpecs = new List<XRefSpec>();
         Metadata = new Dictionary<string, object>();
-        if (((IDictionary<string, object>)(fm.Properties)).TryGetValue("PathProperties", out var properties))
+        if (((IDictionary<string, object>)fm.Properties).TryGetValue("PathProperties", out var properties))
         {
             var pathProperties = properties as Dictionary<string, Dictionary<string, object>>;
             PathProperties = pathProperties ?? throw new ArgumentException($"PathProperties is expecting a dictionary however is a {pathProperties.GetType()}");
diff --git a/src/Docfx.Build.SchemaDriven/Processors/XrefInterpreter.cs b/src/Docfx.Build.SchemaDriven/Processors/XrefInterpreter.cs
index a865871c960..e4c0f1618f3 100644
--- a/src/Docfx.Build.SchemaDriven/Processors/XrefInterpreter.cs
+++ b/src/Docfx.Build.SchemaDriven/Processors/XrefInterpreter.cs
@@ -19,7 +19,7 @@ public XrefInterpreter(bool aggregateXrefs, bool resolveXref)
 
     public bool CanInterpret(BaseSchema schema)
     {
-        return schema != null && schema.ContentType == ContentType.Xref;
+        return schema is {ContentType: ContentType.Xref};
     }
 
     public object Interpret(BaseSchema schema, object value, IProcessContext context, string path)
diff --git a/src/Docfx.Build.SchemaDriven/ValidateFragmentsHandler.cs b/src/Docfx.Build.SchemaDriven/ValidateFragmentsHandler.cs
index 2a21076f632..4d4aa003a70 100644
--- a/src/Docfx.Build.SchemaDriven/ValidateFragmentsHandler.cs
+++ b/src/Docfx.Build.SchemaDriven/ValidateFragmentsHandler.cs
@@ -37,9 +37,10 @@ public void HandleProperty(string propertyKey, YamlMappingNode node, Dictionary<
             return;
         }
         var opath = oPathPrefix + propertyKey;
-        if (!fragments[uid].Properties.ContainsKey(opath))
+        var fragment = fragments[uid];
+        if (!fragment.Properties.ContainsKey(opath))
         {
-            if (string.IsNullOrEmpty(oPathPrefix) && fragments[uid].Metadata?.ContainsKey(opath) == true)
+            if (string.IsNullOrEmpty(oPathPrefix) && fragment.Metadata?.ContainsKey(opath) == true)
             {
                 return;
             }
diff --git a/src/Docfx.Build.TagLevelRestApi/Docfx.Build.TagLevelRestApi.csproj b/src/Docfx.Build.TagLevelRestApi/Docfx.Build.TagLevelRestApi.csproj
index bc0232bfbde..4b814009b09 100644
--- a/src/Docfx.Build.TagLevelRestApi/Docfx.Build.TagLevelRestApi.csproj
+++ b/src/Docfx.Build.TagLevelRestApi/Docfx.Build.TagLevelRestApi.csproj
@@ -1,4 +1,4 @@
-<Project Sdk="Microsoft.NET.Sdk">
+<Project Sdk="Microsoft.NET.Sdk">
   <ItemGroup>
     <ProjectReference Include="..\..\src\Docfx.Build.Common\Docfx.Build.Common.csproj" />
     <ProjectReference Include="..\..\src\Docfx.Common\Docfx.Common.csproj" />
diff --git a/src/Docfx.Build.TagLevelRestApi/SplitRestApiToTagLevel.cs b/src/Docfx.Build.TagLevelRestApi/SplitRestApiToTagLevel.cs
index de7e7fc5852..dacd4b03c3a 100644
--- a/src/Docfx.Build.TagLevelRestApi/SplitRestApiToTagLevel.cs
+++ b/src/Docfx.Build.TagLevelRestApi/SplitRestApiToTagLevel.cs
@@ -191,10 +191,7 @@ private static Dictionary<string, object> MergeTagMetadata(RestApiRootItemViewMo
         foreach (var pair in root.Metadata)
         {
             // Tag metadata wins for the same key
-            if (!result.ContainsKey(pair.Key))
-            {
-                result[pair.Key] = pair.Value;
-            }
+            result.TryAdd(pair.Key, pair.Value);
         }
         return result;
     }
diff --git a/src/Docfx.Build.UniversalReference/Docfx.Build.UniversalReference.csproj b/src/Docfx.Build.UniversalReference/Docfx.Build.UniversalReference.csproj
index 1d1773babfd..491bb4ce54a 100644
--- a/src/Docfx.Build.UniversalReference/Docfx.Build.UniversalReference.csproj
+++ b/src/Docfx.Build.UniversalReference/Docfx.Build.UniversalReference.csproj
@@ -1,4 +1,4 @@
-<Project Sdk="Microsoft.NET.Sdk">
+<Project Sdk="Microsoft.NET.Sdk">
   <ItemGroup>
     <ProjectReference Include="..\Docfx.Build.Common\Docfx.Build.Common.csproj" />
     <ProjectReference Include="..\Docfx.Common\Docfx.Common.csproj" />
diff --git a/src/Docfx.Build/ApiPage/ApiPageProcessor.cs b/src/Docfx.Build/ApiPage/ApiPageProcessor.cs
index f74ec18b902..115bdd30127 100644
--- a/src/Docfx.Build/ApiPage/ApiPageProcessor.cs
+++ b/src/Docfx.Build/ApiPage/ApiPageProcessor.cs
@@ -46,7 +46,7 @@ public FileModel Load(FileAndType file, ImmutableDictionary<string, object> meta
             foreach (var (key, value) in data.metadata.OrderBy(item => item.Key))
                 content[key] = value.Value;
         }
-        
+
         content["title"] = data.title;
         content["content"] = ApiPageHtmlTemplate.Render(data, Markup).ToString();
         content["yamlmime"] = "ApiPage";
diff --git a/src/Docfx.Build/CompilePhaseHandler.cs b/src/Docfx.Build/CompilePhaseHandler.cs
index e6ad1537014..71da01dbaf2 100644
--- a/src/Docfx.Build/CompilePhaseHandler.cs
+++ b/src/Docfx.Build/CompilePhaseHandler.cs
@@ -39,7 +39,7 @@ public void Handle(List<HostService> hostServices, int maxParallelism)
                     _restructions.AddRange(hostService.TableOfContentRestructions);
                 }
             }
-        }, maxParallelism);
+        }, maxParallelism, Context.CancellationToken);
 
         DistributeTocRestructions(hostServices);
 
@@ -49,7 +49,7 @@ public void Handle(List<HostService> hostServices, int maxParallelism)
             Build(hostService, maxParallelism);
         }
 
-        hostServices.RunAll(Postbuild, maxParallelism);
+        hostServices.RunAll(Postbuild, maxParallelism, Context.CancellationToken);
     }
 
     private void Prepare(List<HostService> hostServices, int maxParallelism)
@@ -66,7 +66,8 @@ private void Prepare(List<HostService> hostServices, int maxParallelism)
                 {
                     m.LocalPathFromRoot ??= StringExtension.ToDisplayPath(Path.Combine(m.BaseDir, m.File));
                 },
-                maxParallelism);
+                maxParallelism,
+                Context.CancellationToken);
         }
     }
 
@@ -83,7 +84,7 @@ private void DistributeTocRestructions(List<HostService> hostServices)
         }
     }
 
-    private static void Prebuild(HostService hostService)
+    private void Prebuild(HostService hostService)
     {
         RunBuildSteps(
             hostService.Processor.BuildSteps,
@@ -99,7 +100,7 @@ private static void Prebuild(HostService hostService)
             });
     }
 
-    private static void Build(HostService hostService, int maxParallelism)
+    private void Build(HostService hostService, int maxParallelism)
     {
         hostService.Models.RunAll(
             m =>
@@ -124,10 +125,11 @@ private static void Build(HostService hostService, int maxParallelism)
                         });
                 }
             },
-            maxParallelism);
+            maxParallelism,
+            Context.CancellationToken);
     }
 
-    private static void Postbuild(HostService hostService)
+    private void Postbuild(HostService hostService)
     {
         hostService.Reload(hostService.Models);
 
@@ -140,12 +142,14 @@ private static void Postbuild(HostService hostService)
             });
     }
 
-    private static void RunBuildSteps(IEnumerable<IDocumentBuildStep> buildSteps, Action<IDocumentBuildStep> action)
+    private void RunBuildSteps(IEnumerable<IDocumentBuildStep> buildSteps, Action<IDocumentBuildStep> action)
     {
         if (buildSteps != null)
         {
             foreach (var buildStep in buildSteps.OrderBy(static step => step.BuildOrder))
             {
+                Context.CancellationToken.ThrowIfCancellationRequested();
+
                 action(buildStep);
             }
         }
diff --git a/src/Docfx.Build/Conceptual/WordCounter.cs b/src/Docfx.Build/Conceptual/WordCounter.cs
index 4efb8208626..45b7377d8f6 100644
--- a/src/Docfx.Build/Conceptual/WordCounter.cs
+++ b/src/Docfx.Build/Conceptual/WordCounter.cs
@@ -8,13 +8,7 @@ namespace Docfx.Build.ConceptualDocuments;
 internal static class WordCounter
 {
     private static readonly string[] ExcludeNodeXPaths = ["//title"];
-
-#if NET8_0_OR_GREATER
     private static readonly System.Buffers.SearchValues<char> SpecialChars = System.Buffers.SearchValues.Create(".?!;:,()[]");
-#else
-    private static readonly string SpecialChars = ".?!;:,()[]";
-#endif
-
     private static readonly char[] DelimiterChars = [' ', '\t', '\n'];
 
     public static long CountWord(string html)
diff --git a/src/Docfx.Build/Docfx.Build.csproj b/src/Docfx.Build/Docfx.Build.csproj
index 0bc80e8884a..c097f058543 100644
--- a/src/Docfx.Build/Docfx.Build.csproj
+++ b/src/Docfx.Build/Docfx.Build.csproj
@@ -18,7 +18,7 @@
     <PackageReference Include="Jint" />
     <PackageReference Include="Stubble.Core" />
     <PackageReference Include="OneOf" />
-    <PackageReference Include="OneOf.SourceGenerator" />
+    <PackageReference Include="OneOf.SourceGenerator" PrivateAssets="All" />
   </ItemGroup>
 
 </Project>
diff --git a/src/Docfx.Build/DocumentBuildContext.cs b/src/Docfx.Build/DocumentBuildContext.cs
index b3da3dfb121..9f8e0ac58f0 100644
--- a/src/Docfx.Build/DocumentBuildContext.cs
+++ b/src/Docfx.Build/DocumentBuildContext.cs
@@ -16,13 +16,7 @@ public sealed class DocumentBuildContext : IDocumentBuildContext
     private readonly ConcurrentDictionary<string, TocInfo> _tableOfContents = new(FilePathComparer.OSPlatformSensitiveStringComparer);
     private readonly Task<IXRefContainerReader> _reader;
 
-    public DocumentBuildContext(string buildOutputFolder)
-        : this(buildOutputFolder, Enumerable.Empty<FileAndType>(), ImmutableArray<string>.Empty, ImmutableArray<string>.Empty, 1, Directory.GetCurrentDirectory(), string.Empty, null, null) { }
-
-    public DocumentBuildContext(string buildOutputFolder, IEnumerable<FileAndType> allSourceFiles, ImmutableArray<string> externalReferencePackages, ImmutableArray<string> xrefMaps, int maxParallelism, string baseFolder, string versionName, ApplyTemplateSettings applyTemplateSetting, string rootTocPath)
-        : this(buildOutputFolder, allSourceFiles, externalReferencePackages, xrefMaps, maxParallelism, baseFolder, versionName, applyTemplateSetting, rootTocPath, null, null) { }
-
-    public DocumentBuildContext(DocumentBuildParameters parameters)
+    public DocumentBuildContext(DocumentBuildParameters parameters, CancellationToken cancellationToken)
     {
         BuildOutputFolder = Path.Combine(Path.GetFullPath(EnvironmentContext.BaseDirectory), parameters.OutputBaseDir);
         VersionName = parameters.VersionName;
@@ -34,9 +28,10 @@ public DocumentBuildContext(DocumentBuildParameters parameters)
 
         if (parameters.XRefMaps.Length > 0)
         {
+            // Note: `_reader` task is processed asyncronously and await is called later. So OperationCancellationException is not thrown by this lines.
             _reader = new XRefCollection(
                 from u in parameters.XRefMaps
-                select new Uri(u, UriKind.RelativeOrAbsolute)).GetReaderAsync(parameters.Files.DefaultBaseDir, parameters.MarkdownEngineParameters?.FallbackFolders);
+                select new Uri(u, UriKind.RelativeOrAbsolute)).GetReaderAsync(parameters.Files.DefaultBaseDir, parameters.MarkdownEngineParameters?.FallbackFolders, cancellationToken);
         }
         RootTocPath = parameters.RootTocPath;
 
@@ -48,15 +43,24 @@ from u in parameters.XRefMaps
         if (!string.IsNullOrEmpty(versionDir))
         {
             versionDir = versionDir.Replace('\\', '/');
-            if (!versionDir.EndsWith("/", StringComparison.Ordinal))
+            if (!versionDir.EndsWith('/'))
             {
                 versionDir += "/";
             }
         }
         VersionFolder = versionDir;
+        CancellationToken = cancellationToken;
     }
 
-    public DocumentBuildContext(
+    #region Constructors that used by test code.
+
+    internal DocumentBuildContext(string buildOutputFolder)
+        : this(buildOutputFolder, [], [], [], 1, Directory.GetCurrentDirectory(), string.Empty, null, null) { }
+
+    private DocumentBuildContext(string buildOutputFolder, IEnumerable<FileAndType> allSourceFiles, ImmutableArray<string> externalReferencePackages, ImmutableArray<string> xrefMaps, int maxParallelism, string baseFolder, string versionName, ApplyTemplateSettings applyTemplateSetting, string rootTocPath)
+        : this(buildOutputFolder, allSourceFiles, externalReferencePackages, xrefMaps, maxParallelism, baseFolder, versionName, applyTemplateSetting, rootTocPath, null, null) { }
+
+    private DocumentBuildContext(
         string buildOutputFolder,
         IEnumerable<FileAndType> allSourceFiles,
         ImmutableArray<string> externalReferencePackages,
@@ -91,13 +95,14 @@ from u in xrefMaps
         if (!string.IsNullOrEmpty(versionFolder))
         {
             versionFolder = versionFolder.Replace('\\', '/');
-            if (!versionFolder.EndsWith("/", StringComparison.Ordinal))
+            if (!versionFolder.EndsWith('/'))
             {
                 versionFolder += "/";
             }
         }
         VersionFolder = versionFolder;
     }
+    #endregion
 
     public string BuildOutputFolder { get; }
 
@@ -109,7 +114,7 @@ from u in xrefMaps
 
     public ApplyTemplateSettings ApplyTemplateSettings { get; set; }
 
-    public ImmutableArray<string> ExternalReferencePackages { get; } = ImmutableArray<string>.Empty;
+    public ImmutableArray<string> ExternalReferencePackages { get; } = [];
 
     public ImmutableDictionary<string, FileAndType> AllSourceFiles { get; }
 
@@ -129,6 +134,8 @@ from u in xrefMaps
 
     public ICustomHrefGenerator HrefGenerator { get; }
 
+    public CancellationToken CancellationToken { get; } = CancellationToken.None;
+
     internal ConcurrentBag<ManifestItem> ManifestItems { get; } = new();
 
     private ConcurrentDictionary<string, XRefSpec> ExternalXRefSpec { get; } = new();
@@ -150,9 +157,10 @@ public void ReportExternalXRefSpec(XRefSpec spec)
 
     public void ResolveExternalXRefSpec()
     {
-        Task.WaitAll(
+        Task.WaitAll([
             Task.Run(ResolveExternalXRefSpecForSpecs),
-            Task.Run(ResolveExternalXRefSpecForNoneSpecsAsync));
+            Task.Run(ResolveExternalXRefSpecForNoneSpecsAsync)
+        ], CancellationToken);
     }
 
     private void ResolveExternalXRefSpecForSpecs()
@@ -205,7 +213,7 @@ private List<string> ResolveByExternalReferencePackages(List<string> uidList, Co
 
         var oldSpecCount = externalXRefSpec.Count;
         var list = new List<string>();
-        using (var externalReferences = new ExternalReferencePackageCollection(ExternalReferencePackages, MaxParallelism))
+        using (var externalReferences = new ExternalReferencePackageCollection(ExternalReferencePackages, MaxParallelism, CancellationToken))
         {
             foreach (var uid in uidList)
             {
@@ -401,7 +409,7 @@ public XRefSpec GetXrefSpec(string uid)
 
         if (ExternalReferencePackages.Length > 0)
         {
-            using (var externalReferences = new ExternalReferencePackageCollection(ExternalReferencePackages, MaxParallelism))
+            using (var externalReferences = new ExternalReferencePackageCollection(ExternalReferencePackages, MaxParallelism, CancellationToken))
             {
                 xref = GetExternalReference(externalReferences, uid);
             }
@@ -429,13 +437,9 @@ public IImmutableList<string> GetTocFileKeySet(string key)
 
     public void RegisterToc(string tocFileKey, string fileKey)
     {
-#if NET7_0_OR_GREATER
         ArgumentException.ThrowIfNullOrEmpty(fileKey);
         ArgumentException.ThrowIfNullOrEmpty(tocFileKey);
-#else
-        if (string.IsNullOrEmpty(fileKey)) throw new ArgumentNullException(nameof(fileKey));
-        if (string.IsNullOrEmpty(tocFileKey)) throw new ArgumentNullException(nameof(tocFileKey));
-#endif
+
         TocMap.AddOrUpdate(
             fileKey,
             new HashSet<string>(FilePathComparer.OSPlatformSensitiveRelativePathComparer) { tocFileKey },
diff --git a/src/Docfx.Build/DocumentBuildParameters.cs b/src/Docfx.Build/DocumentBuildParameters.cs
index 84a1a33b355..2356909b93e 100644
--- a/src/Docfx.Build/DocumentBuildParameters.cs
+++ b/src/Docfx.Build/DocumentBuildParameters.cs
@@ -13,13 +13,13 @@ public class DocumentBuildParameters
 
     public string OutputBaseDir { get; set; }
 
-    public ImmutableArray<string> XRefMaps { get; set; } = ImmutableArray<string>.Empty;
+    public ImmutableArray<string> XRefMaps { get; set; } = [];
 
     public ImmutableDictionary<string, object> Metadata { get; set; } = ImmutableDictionary<string, object>.Empty;
 
     public FileMetadata FileMetadata { get; set; }
 
-    public ImmutableArray<string> PostProcessors { get; set; } = ImmutableArray<string>.Empty;
+    public ImmutableArray<string> PostProcessors { get; set; } = [];
 
     public TemplateManager TemplateManager { get; set; }
 
diff --git a/src/Docfx.Build/DocumentBuilder.cs b/src/Docfx.Build/DocumentBuilder.cs
index ede13a86dd3..6b9c3f72813 100644
--- a/src/Docfx.Build/DocumentBuilder.cs
+++ b/src/Docfx.Build/DocumentBuilder.cs
@@ -39,10 +39,12 @@ public void Build(DocumentBuildParameters parameter)
         Build(new DocumentBuildParameters[] { parameter }, parameter.OutputBaseDir);
     }
 
-    public void Build(IList<DocumentBuildParameters> parameters, string outputDirectory)
+    public void Build(IList<DocumentBuildParameters> parameters, string outputDirectory, CancellationToken cancellationToken = default)
     {
         ArgumentNullException.ThrowIfNull(parameters);
 
+        cancellationToken.ThrowIfCancellationRequested();
+
         if (parameters.Count == 0)
         {
             throw new ArgumentException("Parameters are empty.", nameof(parameters));
@@ -119,7 +121,7 @@ public void Build(IList<DocumentBuildParameters> parameters, string outputDirect
                     MetadataValidators = MetadataValidators.ToList(),
                     Processors = Processors,
                 };
-                manifests.Add(builder.Build(parameter, markdownService));
+                manifests.Add(builder.Build(parameter, markdownService, cancellationToken));
             }
         }
         if (noContentFound)
@@ -157,7 +159,7 @@ public void Build(IList<DocumentBuildParameters> parameters, string outputDirect
             .Create();
 
         generatedManifest.Files.Sort((a, b) => (a.SourceRelativePath ?? "").CompareTo(b.SourceRelativePath ?? ""));
-        JsonUtility.Serialize("manifest.json", generatedManifest, Formatting.Indented);
+        JsonUtility.Serialize("manifest.json", generatedManifest, indented: true);
 
         EnvironmentContext.FileAbstractLayerImpl = null;
 
diff --git a/src/Docfx.Build/FileCollection.cs b/src/Docfx.Build/FileCollection.cs
index 43a98f54a07..48b557d0ee3 100644
--- a/src/Docfx.Build/FileCollection.cs
+++ b/src/Docfx.Build/FileCollection.cs
@@ -61,11 +61,11 @@ public void Add(DocumentType type, string baseDir, IEnumerable<string> files, st
                 throw new ArgumentException("DestinationDir must start with BaseDir, or relative path.", nameof(destinationDir));
             }
         }
-        if (!string.IsNullOrEmpty(sourceDir) && !sourceDir.EndsWith("/", StringComparison.Ordinal))
+        if (!string.IsNullOrEmpty(sourceDir) && !sourceDir.EndsWith('/'))
         {
             sourceDir += "/";
         }
-        if (!string.IsNullOrEmpty(destinationDir) && !destinationDir.EndsWith("/", StringComparison.Ordinal))
+        if (!string.IsNullOrEmpty(destinationDir) && !destinationDir.EndsWith('/'))
         {
             destinationDir += "/";
         }
diff --git a/src/Docfx.Build/FileMetadata.cs b/src/Docfx.Build/FileMetadata.cs
index 8314c0255b3..928e646fb08 100644
--- a/src/Docfx.Build/FileMetadata.cs
+++ b/src/Docfx.Build/FileMetadata.cs
@@ -11,7 +11,7 @@ public sealed class FileMetadata : Dictionary<string, ImmutableArray<FileMetadat
 {
     public string BaseDir { get; }
 
-    public FileMetadata(string baseDir) : base()
+    public FileMetadata(string baseDir)
     {
         BaseDir = baseDir;
     }
diff --git a/src/Docfx.Build/HostServiceCreator.cs b/src/Docfx.Build/HostServiceCreator.cs
index fb6aea1c646..72c28812338 100644
--- a/src/Docfx.Build/HostServiceCreator.cs
+++ b/src/Docfx.Build/HostServiceCreator.cs
@@ -59,14 +59,15 @@ public virtual (FileModel model, bool valid) Load(
             {
                 return (processor.Load(file, fileMeta), true);
             }
+            catch (DocumentException)
+            {
+                return (null, false);
+            }
             catch (Exception e)
             {
-                if (e is not DocumentException)
-                {
-                    Logger.LogError(
-                        $"Unable to load file '{file.File}' via processor '{processor.Name}': {e.Message}",
-                        code: ErrorCodes.Build.InvalidInputFile);
-                }
+                Logger.LogError(
+                    $"Unable to load file '{file.File}' via processor '{processor.Name}': {e.Message}",
+                    code: ErrorCodes.Build.InvalidInputFile);
                 return (null, false);
             }
         }
@@ -97,7 +98,9 @@ bool NeedApplyMetadata()
             {
                 invalidFiles.Add(file.File);
             }
-        }, _context.MaxParallelism);
+        },
+        _context.MaxParallelism,
+        _context.CancellationToken);
 
         return (models.OrderBy(m => m.File, StringComparer.Ordinal).ToArray(), invalidFiles);
     }
diff --git a/src/Docfx.Build/LinkPhaseHandler.cs b/src/Docfx.Build/LinkPhaseHandler.cs
index 2419be3382e..5957e92252d 100644
--- a/src/Docfx.Build/LinkPhaseHandler.cs
+++ b/src/Docfx.Build/LinkPhaseHandler.cs
@@ -55,7 +55,7 @@ private IEnumerable<ManifestItemWithContext> ExportManifest(HostService hostServ
                     m.BaseDir = Context.BuildOutputFolder;
                     if (m.FileAndType.SourceDir != m.FileAndType.DestinationDir)
                     {
-                        m.File = (RelativePath)m.FileAndType.DestinationDir + (((RelativePath)m.File) - (RelativePath)m.FileAndType.SourceDir);
+                        m.File = (RelativePath)m.FileAndType.DestinationDir + ((RelativePath)m.File - (RelativePath)m.FileAndType.SourceDir);
                     }
                     m.File = Path.Combine(Context.VersionFolder ?? string.Empty, m.File);
                     var result = hostService.Processor.Save(m);
@@ -77,7 +77,7 @@ private IEnumerable<ManifestItemWithContext> ExportManifest(HostService hostServ
                     }
                 }
             }
-        });
+        }, Context.CancellationToken);
         return manifestItems;
     }
 
@@ -136,7 +136,7 @@ private void CheckFileLink(FileModel model, HostService hostService, SaveResult
                     Logger.LogWarning($"Invalid file link:({fileLink}).", code: WarningCodes.Build.InvalidFileLink);
                 }
             }
-        });
+        }, Context.CancellationToken);
     }
 
     private void HandleUids(SaveResult result)
diff --git a/src/Docfx.Build/ManifestProcessor.cs b/src/Docfx.Build/ManifestProcessor.cs
index b27302e681a..e135b74a317 100644
--- a/src/Docfx.Build/ManifestProcessor.cs
+++ b/src/Docfx.Build/ManifestProcessor.cs
@@ -87,7 +87,8 @@ private void NormalizeToObject()
                 }
             }
         },
-        _context.MaxParallelism);
+        _context.MaxParallelism,
+        _context.CancellationToken);
     }
 
     private void FeedOptions()
@@ -113,7 +114,8 @@ private void FeedOptions()
                 }
             }
         },
-        _context.MaxParallelism);
+        _context.MaxParallelism,
+        _context.CancellationToken);
     }
 
     private void UpdateHref()
@@ -130,7 +132,8 @@ private void UpdateHref()
                 m.Item.Content = m.FileModel.Content;
             }
         },
-        _context.MaxParallelism);
+        _context.MaxParallelism,
+        _context.CancellationToken);
     }
 
     private void ApplySystemMetadata()
@@ -171,7 +174,8 @@ private void ApplySystemMetadata()
                 }
             }
         },
-        _context.MaxParallelism);
+        _context.MaxParallelism,
+        _context.CancellationToken);
 
         _globalMetadata["_shared"] = sharedObjects;
     }
diff --git a/src/Docfx.Build/ManifestUtility.cs b/src/Docfx.Build/ManifestUtility.cs
index af6cf763f4f..bbad03dea0e 100644
--- a/src/Docfx.Build/ManifestUtility.cs
+++ b/src/Docfx.Build/ManifestUtility.cs
@@ -40,8 +40,8 @@ public static Manifest MergeManifest(List<Manifest> manifests)
         ArgumentNullException.ThrowIfNull(manifests);
 
         var xrefMaps = (from manifest in manifests
-                                where manifest.Xrefmap != null
-                                select manifest.Xrefmap).ToList();
+                        where manifest.Xrefmap != null
+                        select manifest.Xrefmap).ToList();
         var manifestGroupInfos = (from manifest in manifests
                                   from g in manifest.Groups ?? Enumerable.Empty<ManifestGroupInfo>()
                                   select g).ToList();
diff --git a/src/Docfx.Build/OneOfJsonConverterFactory.cs b/src/Docfx.Build/OneOfJsonConverterFactory.cs
index 33e16fe6f01..9c4e48ad146 100644
--- a/src/Docfx.Build/OneOfJsonConverterFactory.cs
+++ b/src/Docfx.Build/OneOfJsonConverterFactory.cs
@@ -3,8 +3,8 @@
 
 using System.Diagnostics;
 using System.Reflection;
-using System.Text.Json.Serialization;
 using System.Text.Json;
+using System.Text.Json.Serialization;
 using OneOf;
 
 #nullable enable
@@ -47,7 +47,6 @@ private class OneOfJsonConverter<T> : JsonConverter<T> where T : IOneOf
                 }
                 catch (JsonException)
                 {
-                    continue;
                 }
             }
 
diff --git a/src/Docfx.Build/PostProcessors/ExtractSearchIndex.cs b/src/Docfx.Build/PostProcessors/ExtractSearchIndex.cs
index 4a910a85ed9..1882c91b598 100644
--- a/src/Docfx.Build/PostProcessors/ExtractSearchIndex.cs
+++ b/src/Docfx.Build/PostProcessors/ExtractSearchIndex.cs
@@ -1,4 +1,4 @@
-// Licensed to the .NET Foundation under one or more agreements.
+// Licensed to the .NET Foundation under one or more agreements.
 // The .NET Foundation licenses this file to you under the MIT license.
 
 using System.Collections.Immutable;
@@ -46,7 +46,7 @@ public ImmutableDictionary<string, object> PrepareMetadata(ImmutableDictionary<s
         return metadata;
     }
 
-    public Manifest Process(Manifest manifest, string outputFolder)
+    public Manifest Process(Manifest manifest, string outputFolder, CancellationToken cancellationToken = default)
     {
         if (outputFolder == null)
         {
@@ -67,6 +67,8 @@ from output in item.Output
         Logger.LogInfo($"Extracting index data from {htmlFiles.Count} html files");
         foreach ((string relativePath, Dictionary<string, object> metadata) in htmlFiles)
         {
+            cancellationToken.ThrowIfCancellationRequested();
+
             var filePath = Path.Combine(outputFolder, relativePath);
             var html = new HtmlDocument();
             Logger.LogDiagnostic($"Extracting index data from {filePath}");
@@ -90,8 +92,7 @@ from output in item.Output
                 }
             }
         }
-
-        JsonUtility.Serialize(indexDataFilePath, indexData, Formatting.Indented);
+        JsonUtility.Serialize(indexDataFilePath, indexData, indented: true);
 
         // add index.json to manifest as resource file
         var manifestItem = new ManifestItem
diff --git a/src/Docfx.Build/PostProcessors/HtmlPostProcessor.cs b/src/Docfx.Build/PostProcessors/HtmlPostProcessor.cs
index a51bd936707..a052eaed954 100644
--- a/src/Docfx.Build/PostProcessors/HtmlPostProcessor.cs
+++ b/src/Docfx.Build/PostProcessors/HtmlPostProcessor.cs
@@ -13,6 +13,8 @@ namespace Docfx.Build.Engine;
 
 sealed class HtmlPostProcessor : IPostProcessor
 {
+    private static readonly UTF8Encoding Utf8EncodingWithoutBom = new(false);
+
     public List<IHtmlDocumentHandler> Handlers { get; } = new();
 
     private bool _handlerInitialized;
@@ -39,7 +41,7 @@ public ImmutableDictionary<string, object> PrepareMetadata(ImmutableDictionary<s
         return metadata;
     }
 
-    public Manifest Process(Manifest manifest, string outputFolder)
+    public Manifest Process(Manifest manifest, string outputFolder, CancellationToken cancellationToken = default)
     {
         ArgumentNullException.ThrowIfNull(manifest);
         ArgumentNullException.ThrowIfNull(outputFolder);
@@ -58,6 +60,8 @@ where output.Key.Equals(".html", StringComparison.OrdinalIgnoreCase)
                                   OutputFile = output.Value.RelativePath,
                               })
         {
+            cancellationToken.ThrowIfCancellationRequested();
+
             if (!EnvironmentContext.FileAbstractLayer.Exists(tuple.OutputFile))
             {
                 continue;
@@ -79,7 +83,7 @@ where output.Key.Equals(".html", StringComparison.OrdinalIgnoreCase)
             }
             using (var stream = EnvironmentContext.FileAbstractLayer.Create(tuple.OutputFile))
             {
-                document.Save(stream, Encoding.UTF8);
+                document.Save(stream, Utf8EncodingWithoutBom);
             }
         }
         foreach (var handler in Handlers)
diff --git a/src/Docfx.Build/PostProcessors/PostProcessorsManager.cs b/src/Docfx.Build/PostProcessors/PostProcessorsManager.cs
index 7e953208a91..39d13341092 100644
--- a/src/Docfx.Build/PostProcessors/PostProcessorsManager.cs
+++ b/src/Docfx.Build/PostProcessors/PostProcessorsManager.cs
@@ -34,11 +34,11 @@ public ImmutableDictionary<string, object> PrepareMetadata(ImmutableDictionary<s
         return updatedMetadata;
     }
 
-    public void Process(Manifest manifest, string outputFolder)
+    public void Process(Manifest manifest, string outputFolder, CancellationToken cancellationToken = default)
     {
         foreach (var postProcessor in _postProcessors)
         {
-            manifest = postProcessor.Processor.Process(manifest, outputFolder) ??
+            manifest = postProcessor.Processor.Process(manifest, outputFolder, cancellationToken) ??
                 throw new DocfxException($"Post processor {postProcessor.ContractName} should not return null manifest");
 
             // To make sure post processor won't generate duplicate output files
diff --git a/src/Docfx.Build/PostProcessors/SitemapGenerator.cs b/src/Docfx.Build/PostProcessors/SitemapGenerator.cs
index b4b2d0d0f22..141a63c792f 100644
--- a/src/Docfx.Build/PostProcessors/SitemapGenerator.cs
+++ b/src/Docfx.Build/PostProcessors/SitemapGenerator.cs
@@ -26,14 +26,14 @@ public ImmutableDictionary<string, object> PrepareMetadata(ImmutableDictionary<s
         return metadata;
     }
 
-    public Manifest Process(Manifest manifest, string outputFolder)
+    public Manifest Process(Manifest manifest, string outputFolder, CancellationToken cancellationToken = default)
     {
         if (string.IsNullOrEmpty(manifest.Sitemap?.BaseUrl))
         {
             return manifest;
         }
 
-        if (!manifest.Sitemap.BaseUrl.EndsWith("/", StringComparison.Ordinal))
+        if (!manifest.Sitemap.BaseUrl.EndsWith('/'))
         {
             manifest.Sitemap.BaseUrl += '/';
         }
@@ -105,7 +105,7 @@ private static SitemapElementOptions GetOptions(SitemapOptions rootOptions, stri
         }
         else
         {
-            if (!options.BaseUrl.EndsWith("/", StringComparison.Ordinal))
+            if (!options.BaseUrl.EndsWith('/'))
             {
                 options.BaseUrl += '/';
             }
diff --git a/src/Docfx.Build/ResourceFiles/IResourceFileConfig.cs b/src/Docfx.Build/ResourceFiles/IResourceFileConfig.cs
index 470299c0dee..63585db7823 100644
--- a/src/Docfx.Build/ResourceFiles/IResourceFileConfig.cs
+++ b/src/Docfx.Build/ResourceFiles/IResourceFileConfig.cs
@@ -1,4 +1,7 @@
-namespace Docfx.Build.ResourceFiles;
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+namespace Docfx.Build.ResourceFiles;
 
 public interface IResourceFileConfig
 {
diff --git a/src/Docfx.Build/ResourceFiles/ResourceDocumentProcessor.cs b/src/Docfx.Build/ResourceFiles/ResourceDocumentProcessor.cs
index 683d7044e3c..f3d5d736fd6 100644
--- a/src/Docfx.Build/ResourceFiles/ResourceDocumentProcessor.cs
+++ b/src/Docfx.Build/ResourceFiles/ResourceDocumentProcessor.cs
@@ -43,7 +43,7 @@ public override FileModel Load(FileAndType file, ImmutableDictionary<string, obj
     {
         return new FileModel(file, new Dictionary<string, object>())
         {
-            Uids = ImmutableArray<UidDefinition>.Empty,
+            Uids = [],
             LocalPathFromRoot = PathUtility.MakeRelativePath(
                 EnvironmentContext.BaseDirectory,
                 EnvironmentContext.FileAbstractLayer.GetPhysicalPath(file.File)),
diff --git a/src/Docfx.Build/SingleDocumentBuilder.cs b/src/Docfx.Build/SingleDocumentBuilder.cs
index eaba1cf50fb..f1cf5ee4aa5 100644
--- a/src/Docfx.Build/SingleDocumentBuilder.cs
+++ b/src/Docfx.Build/SingleDocumentBuilder.cs
@@ -2,6 +2,7 @@
 // The .NET Foundation licenses this file to you under the MIT license.
 
 using System.Collections.Immutable;
+using System.Threading;
 using Docfx.Common;
 using Docfx.Plugins;
 
@@ -16,7 +17,10 @@ class SingleDocumentBuilder : IDisposable
     public IEnumerable<IDocumentProcessor> Processors { get; set; }
     public IEnumerable<IInputMetadataValidator> MetadataValidators { get; set; }
 
-    public static ImmutableList<FileModel> Build(IDocumentProcessor processor, DocumentBuildParameters parameters, IMarkdownService markdownService)
+    public static ImmutableList<FileModel> Build(
+        IDocumentProcessor processor,
+        DocumentBuildParameters parameters,
+        IMarkdownService markdownService)
     {
         var hostServiceCreator = new HostServiceCreator(null);
         var hostService = hostServiceCreator.CreateHostService(
@@ -32,7 +36,7 @@ public static ImmutableList<FileModel> Build(IDocumentProcessor processor, Docum
         return hostService.Models;
     }
 
-    public Manifest Build(DocumentBuildParameters parameters, IMarkdownService markdownService)
+    public Manifest Build(DocumentBuildParameters parameters, IMarkdownService markdownService, CancellationToken cancellationToken)
     {
         ArgumentNullException.ThrowIfNull(parameters);
 
@@ -52,14 +56,14 @@ public Manifest Build(DocumentBuildParameters parameters, IMarkdownService markd
 
         Directory.CreateDirectory(parameters.OutputBaseDir);
 
-        var context = new DocumentBuildContext(parameters);
+        var context = new DocumentBuildContext(parameters, cancellationToken);
 
         // Start building document...
         var templateProcessor = parameters.TemplateManager?.GetTemplateProcessor(context, parameters.MaxParallelism)
                 ?? new TemplateProcessor(new EmptyResourceReader(), context, 16);
 
         var hostServiceCreator = new HostServiceCreator(context);
-        var hostServices = GetInnerContexts(parameters, Processors, templateProcessor, hostServiceCreator, markdownService);
+        var hostServices = GetInnerContexts(parameters, Processors, templateProcessor, hostServiceCreator, markdownService, cancellationToken);
 
         templateProcessor.CopyTemplateResources(context.ApplyTemplateSettings);
 
@@ -86,9 +90,14 @@ private List<HostService> GetInnerContexts(
         IEnumerable<IDocumentProcessor> processors,
         TemplateProcessor templateProcessor,
         HostServiceCreator creator,
-        IMarkdownService markdownService)
+        IMarkdownService markdownService,
+        CancellationToken cancellationToken)
     {
-        var files = (from file in parameters.Files.EnumerateFiles().AsParallel().WithDegreeOfParallelism(parameters.MaxParallelism)
+        cancellationToken.ThrowIfCancellationRequested();
+
+        var files = (from file in parameters.Files.EnumerateFiles().AsParallel()
+                                                                   .WithDegreeOfParallelism(parameters.MaxParallelism)
+                                                                   .WithCancellation(cancellationToken)
                      from p in (from processor in processors
                                 let priority = processor.GetProcessingPriority(file)
                                 where priority != ProcessingPriority.NotSupported
@@ -114,7 +123,9 @@ orderby ps.Key descending
 
         try
         {
-            return (from processor in processors.AsParallel().WithDegreeOfParallelism(parameters.MaxParallelism)
+            return (from processor in processors.AsParallel()
+                                                .WithDegreeOfParallelism(parameters.MaxParallelism)
+                                                .WithCancellation(cancellationToken)
                     join item in toHandleItems.AsParallel() on processor equals item.Key into g
                     from item in g.DefaultIfEmpty()
                     where item != null && item.Any(s => s.Type != DocumentType.Overwrite) // when normal file exists then processing is needed
@@ -138,9 +149,14 @@ select creator.CreateHostService(
     private static string ExportXRefMap(DocumentBuildParameters parameters, DocumentBuildContext context)
     {
         Logger.LogVerbose("Exporting xref map...");
+
+        context.CancellationToken.ThrowIfCancellationRequested();
+
         var xrefMap = new XRefMap
         {
-            References = (from xref in context.XRefSpecMap.Values.AsParallel().WithDegreeOfParallelism(parameters.MaxParallelism)
+            References = (from xref in context.XRefSpecMap.Values.AsParallel()
+                                                                 .WithDegreeOfParallelism(parameters.MaxParallelism)
+                                                                 .WithCancellation(context.CancellationToken)
                           select new XRefSpec(xref)
                           {
                               Href = context.UpdateHref(xref.Href, RelativePath.WorkingFolder)
diff --git a/src/Docfx.Build/SystemMetadataGenerator.cs b/src/Docfx.Build/SystemMetadataGenerator.cs
index 792c19d4222..b02e44bd223 100644
--- a/src/Docfx.Build/SystemMetadataGenerator.cs
+++ b/src/Docfx.Build/SystemMetadataGenerator.cs
@@ -34,7 +34,7 @@ public SystemMetadata Generate(InternalManifestItem item)
         attrs.Key = ((RelativePath)key).RemoveWorkingFolder();
         var file = (RelativePath)(item.FileWithoutExtension + item.Extension);
 
-        attrs.Rel = (RelativePath.Empty).MakeRelativeTo(file);
+        attrs.Rel = RelativePath.Empty.MakeRelativeTo(file);
         var fileWithoutWorkingFolder = file.RemoveWorkingFolder();
         attrs.Path = fileWithoutWorkingFolder;
 
diff --git a/src/Docfx.Build/TableOfContents/MarkdownTocReader.cs b/src/Docfx.Build/TableOfContents/MarkdownTocReader.cs
index b44e42053dc..0f91c0b7acd 100644
--- a/src/Docfx.Build/TableOfContents/MarkdownTocReader.cs
+++ b/src/Docfx.Build/TableOfContents/MarkdownTocReader.cs
@@ -1,4 +1,7 @@
-using System.Text.RegularExpressions;
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.Text.RegularExpressions;
 using Docfx.Common;
 using Docfx.DataContracts.Common;
 using Docfx.Plugins;
diff --git a/src/Docfx.Build/TableOfContents/TocDocumentProcessor.cs b/src/Docfx.Build/TableOfContents/TocDocumentProcessor.cs
index 85edc54ffdb..79172edce58 100644
--- a/src/Docfx.Build/TableOfContents/TocDocumentProcessor.cs
+++ b/src/Docfx.Build/TableOfContents/TocDocumentProcessor.cs
@@ -91,7 +91,7 @@ private void UpdateTocItemHref(TocItemViewModel toc, FileModel model, IDocumentB
         toc.OriginalTopicHref = null;
 
         includedFrom = toc.IncludedFrom ?? includedFrom;
-        if (toc.Items != null && toc.Items.Count > 0)
+        if (toc.Items is {Count: > 0})
         {
             foreach (var item in toc.Items)
             {
diff --git a/src/Docfx.Build/TableOfContents/TocHelper.cs b/src/Docfx.Build/TableOfContents/TocHelper.cs
index 5ff08517a92..caadd3b1829 100644
--- a/src/Docfx.Build/TableOfContents/TocHelper.cs
+++ b/src/Docfx.Build/TableOfContents/TocHelper.cs
@@ -46,14 +46,7 @@ internal static List<FileModel> ResolveToc(ImmutableList<FileModel> models)
 
     public static TocItemViewModel LoadSingleToc(string file)
     {
-#if NET7_0_OR_GREATER
         ArgumentException.ThrowIfNullOrEmpty(file);
-#else
-        if (string.IsNullOrEmpty(file))
-        {
-            throw new ArgumentNullException(nameof(file));
-        }
-#endif
 
         if (!EnvironmentContext.FileAbstractLayer.Exists(file))
         {
diff --git a/src/Docfx.Build/TableOfContents/TocResolver.cs b/src/Docfx.Build/TableOfContents/TocResolver.cs
index 74461c237db..6ea34f31a3b 100644
--- a/src/Docfx.Build/TableOfContents/TocResolver.cs
+++ b/src/Docfx.Build/TableOfContents/TocResolver.cs
@@ -122,12 +122,12 @@ private TocItemInfo ResolveItemCore(TocItemInfo wrapper, Stack<FileAndType> stac
         {
             case HrefType.AbsolutePath:
             case HrefType.RelativeFile:
-                if (item.Items != null && item.Items.Count > 0)
+                if (item.Items is {Count: > 0})
                 {
                     item.Items = new List<TocItemViewModel>(from i in item.Items
-                                                  select ResolveItem(new TocItemInfo(file, i), stack) into r
-                                                  where r != null
-                                                  select r.Content);
+                                                            select ResolveItem(new TocItemInfo(file, i), stack) into r
+                                                            where r != null
+                                                            select r.Content);
                     if (string.IsNullOrEmpty(item.TopicHref) && string.IsNullOrEmpty(item.TopicUid))
                     {
                         var defaultItem = GetDefaultHomepageItem(item);
@@ -347,7 +347,7 @@ private static string NormalizeHref(string href, RelativePath relativeToFile)
 
     private TocItemViewModel GetDefaultHomepageItem(TocItemViewModel toc)
     {
-        if (toc == null || toc.Items == null)
+        if (toc?.Items == null)
         {
             return null;
         }
diff --git a/src/Docfx.Build/TableOfContents/TocRestructureUtility.cs b/src/Docfx.Build/TableOfContents/TocRestructureUtility.cs
index c22f925242f..ead7255750e 100644
--- a/src/Docfx.Build/TableOfContents/TocRestructureUtility.cs
+++ b/src/Docfx.Build/TableOfContents/TocRestructureUtility.cs
@@ -28,7 +28,7 @@ private static void RestructureCore(TocItemViewModel item, List<TocItemViewModel
             }
         }
 
-        if (item.Items != null && item.Items.Count > 0)
+        if (item.Items is {Count: > 0})
         {
             var parentItems = new List<TocItemViewModel>(item.Items);
             foreach (var i in item.Items)
diff --git a/src/Docfx.Build/TemplateProcessors/Preprocessors/JintProcessorHelper.cs b/src/Docfx.Build/TemplateProcessors/Preprocessors/JintProcessorHelper.cs
index 69db15b0e49..5ff49f798cb 100644
--- a/src/Docfx.Build/TemplateProcessors/Preprocessors/JintProcessorHelper.cs
+++ b/src/Docfx.Build/TemplateProcessors/Preprocessors/JintProcessorHelper.cs
@@ -23,7 +23,7 @@ public static JsValue ConvertObjectToJsValue(Jint.Engine engine, object raw)
         {
             // allow Jint to take ownership of the array
             var elements = new JsValue[list.Count];
-            for (int i = 0; i < (uint) elements.Length; i++)
+            for (int i = 0; i < (uint)elements.Length; i++)
             {
                 elements[i] = ConvertObjectToJsValue(engine, list[i]);
             }
diff --git a/src/Docfx.Build/TemplateProcessors/Preprocessors/PreprocessorWithResourcePool.cs b/src/Docfx.Build/TemplateProcessors/Preprocessors/PreprocessorWithResourcePool.cs
index 97e7a8665a2..b696c3fbfe8 100644
--- a/src/Docfx.Build/TemplateProcessors/Preprocessors/PreprocessorWithResourcePool.cs
+++ b/src/Docfx.Build/TemplateProcessors/Preprocessors/PreprocessorWithResourcePool.cs
@@ -67,13 +67,16 @@ public object TransformModel(object model)
         {
             return lease.Resource.TransformModel(model);
         }
+        catch (JavaScriptException ex)
+        {
+            throw BuildException(ex.GetJavaScriptErrorString());
+        }
         catch (Exception ex)
         {
-            string message = ex is JavaScriptException jsException
-                ? jsException.GetJavaScriptErrorString()
-                : ex.Message;
-
-            throw new InvalidPreprocessorException($"Error running Transform function inside template preprocessor: {message}");
+            throw BuildException(ex.Message);
         }
+
+        Exception BuildException(string message) =>
+            new InvalidPreprocessorException($"Error running Transform function inside template preprocessor: {message}");
     }
 }
diff --git a/src/Docfx.Build/TemplateProcessors/Template.cs b/src/Docfx.Build/TemplateProcessors/Template.cs
index eeb48b51fd3..83315ee2338 100644
--- a/src/Docfx.Build/TemplateProcessors/Template.cs
+++ b/src/Docfx.Build/TemplateProcessors/Template.cs
@@ -116,7 +116,7 @@ public string Transform(object model)
     /// <param name="template"></param>
     private IEnumerable<TemplateResourceInfo> ExtractDependentResources(string templateName)
     {
-        if (Renderer == null || Renderer.Dependencies == null)
+        if (Renderer?.Dependencies == null)
         {
             yield break;
         }
diff --git a/src/Docfx.Build/TemplateProcessors/TemplateManager.cs b/src/Docfx.Build/TemplateProcessors/TemplateManager.cs
index 760989cb1f8..0cb5d0836a2 100644
--- a/src/Docfx.Build/TemplateProcessors/TemplateManager.cs
+++ b/src/Docfx.Build/TemplateProcessors/TemplateManager.cs
@@ -78,21 +78,16 @@ private IEnumerable<string> GetTemplateDirectories(IEnumerable<string> names)
 
     public void ProcessTheme(string outputDirectory, bool overwrite)
     {
-        if (_themes != null && _themes.Count > 0)
+        if (_themes is {Count: > 0})
         {
             TryExportResourceFiles(_themes, outputDirectory, overwrite);
             Logger.LogInfo($"Theme(s) {_themes.ToDelimitedString()} applied.");
         }
     }
 
-    private bool TryExportResourceFiles(IEnumerable<string> resourceNames, string outputDirectory, bool overwrite, string? regexFilter = null)
+    private bool TryExportResourceFiles(List<string> resourceNames, string outputDirectory, bool overwrite, string? regexFilter = null)
     {
-#if NET7_0_OR_GREATER
         ArgumentException.ThrowIfNullOrEmpty(outputDirectory);
-#else
-        if (string.IsNullOrEmpty(outputDirectory))
-            throw new ArgumentNullException(nameof(outputDirectory));
-#endif
 
         if (!resourceNames.Any())
             return false;
diff --git a/src/Docfx.Build/TemplateProcessors/TemplateModelTransformer.cs b/src/Docfx.Build/TemplateProcessors/TemplateModelTransformer.cs
index 217e60765d1..57483f41930 100644
--- a/src/Docfx.Build/TemplateProcessors/TemplateModelTransformer.cs
+++ b/src/Docfx.Build/TemplateProcessors/TemplateModelTransformer.cs
@@ -38,7 +38,7 @@ public TemplateModelTransformer(DocumentBuildContext context, TemplateCollection
     /// <returns></returns>
     internal ManifestItem Transform(InternalManifestItem item)
     {
-        if (item == null || item.Content == null)
+        if (item?.Content == null)
         {
             throw new ArgumentNullException(nameof(item), "Content for item.Model should not be null!");
         }
@@ -59,7 +59,6 @@ internal ManifestItem Transform(InternalManifestItem item)
             Version = _context.VersionName,
             Group = _context.GroupInfo?.Name,
         };
-        var outputDirectory = _settings.OutputFolder ?? Directory.GetCurrentDirectory();
 
         // 1. process resource
         if (item.ResourceFile != null)
@@ -92,7 +91,7 @@ internal ManifestItem Transform(InternalManifestItem item)
 
             var extension = template.Extension;
             string outputFile = item.FileWithoutExtension + extension;
-            object viewModel = null;
+            object viewModel;
             try
             {
                 viewModel = template.TransformModel(model);
@@ -260,7 +259,7 @@ private static string ExportModel(object model, string modelFileRelativePath, Ex
         var outputFolder = settings.OutputFolder ?? string.Empty;
         var modelPath = Path.GetFullPath(Path.Combine(outputFolder, settings.PathRewriter(modelFileRelativePath)));
 
-        JsonUtility.Serialize(modelPath, model, Formatting.Indented);
+        JsonUtility.Serialize(modelPath, model, indented: true);
         return StringExtension.ToDisplayPath(modelPath);
     }
 
diff --git a/src/Docfx.Build/TemplateProcessors/TemplateProcessor.cs b/src/Docfx.Build/TemplateProcessors/TemplateProcessor.cs
index 6e2f4680c11..b4e9c8f30a5 100644
--- a/src/Docfx.Build/TemplateProcessors/TemplateProcessor.cs
+++ b/src/Docfx.Build/TemplateProcessors/TemplateProcessor.cs
@@ -44,21 +44,15 @@ public TemplateProcessor(ResourceFileReader resourceProvider, DocumentBuildConte
 
     public TemplateBundle GetTemplateBundle(string documentType)
     {
-#if NET7_0_OR_GREATER
         ArgumentException.ThrowIfNullOrEmpty(documentType);
-#else
-        if (string.IsNullOrEmpty(documentType)) throw new ArgumentNullException(nameof(documentType));
-#endif
+
         return _templateCollection[documentType];
     }
 
     public bool TryGetFileExtension(string documentType, out string fileExtension)
     {
-#if NET7_0_OR_GREATER
         ArgumentException.ThrowIfNullOrEmpty(documentType);
-#else
-        if (string.IsNullOrEmpty(documentType)) throw new ArgumentNullException(nameof(documentType));
-#endif
+
         fileExtension = string.Empty;
         if (_templateCollection.Count == 0) return false;
         var templateBundle = _templateCollection[documentType];
@@ -104,6 +98,8 @@ private void CopyTemplateResources(string outputDirectory, IEnumerable<TemplateB
     {
         foreach (var resourceInfo in templateBundles.SelectMany(s => s.Resources).Distinct())
         {
+            _context.CancellationToken.ThrowIfCancellationRequested();
+
             var resourceKey = resourceInfo.ResourceKey;
 
             try
@@ -194,7 +190,8 @@ private List<ManifestItem> ProcessCore(List<InternalManifestItem> items, ApplyTe
                     manifest.Add(transformer.Transform(item));
                 }
             },
-            _maxParallelism);
+            _maxParallelism,
+            _context.CancellationToken);
         return manifest.ToList();
 
     }
diff --git a/src/Docfx.Build/XRefMaps/XRefArchiveBuilder.cs b/src/Docfx.Build/XRefMaps/XRefArchiveBuilder.cs
index 515cec49607..61d2f99d36e 100644
--- a/src/Docfx.Build/XRefMaps/XRefArchiveBuilder.cs
+++ b/src/Docfx.Build/XRefMaps/XRefArchiveBuilder.cs
@@ -1,6 +1,7 @@
 // Licensed to the .NET Foundation under one or more agreements.
 // The .NET Foundation licenses this file to you under the MIT license.
 
+using System.Threading;
 using Docfx.Common;
 
 namespace Docfx.Build.Engine;
@@ -10,7 +11,7 @@ public class XRefArchiveBuilder
     private readonly object _syncRoot = new();
     private readonly XRefMapDownloader _downloader = new();
 
-    public async Task<bool> DownloadAsync(Uri uri, string outputFile)
+    public async Task<bool> DownloadAsync(Uri uri, string outputFile, CancellationToken cancellationToken = default)
     {
         ArgumentNullException.ThrowIfNull(uri);
 
@@ -24,7 +25,7 @@ public async Task<bool> DownloadAsync(Uri uri, string outputFile)
             try
             {
                 using var xa = XRefArchive.Open(outputFile, XRefArchiveMode.Create);
-                await DownloadCoreAsync(uri, xa);
+                await DownloadCoreAsync(uri, xa, cancellationToken);
             }
             catch (Exception ex)
             {
@@ -36,10 +37,10 @@ public async Task<bool> DownloadAsync(Uri uri, string outputFile)
         }
     }
 
-    private async Task<string> DownloadCoreAsync(Uri uri, XRefArchive xa)
+    private async Task<string> DownloadCoreAsync(Uri uri, XRefArchive xa, CancellationToken cancellationToken)
     {
         IXRefContainer container;
-        container = await _downloader.DownloadAsync(uri);
+        container = await _downloader.DownloadAsync(uri, cancellationToken);
         if (container is not XRefMap map)
         {
             // XRefArchive is not supported by `docfx download`.
@@ -52,7 +53,7 @@ private async Task<string> DownloadCoreAsync(Uri uri, XRefArchive xa)
         //   Sort is not needed if `map.Sorted == true`.
         //   But there are some xrefmap files that is not propery sorted by using InvariantCulture.
         //   (e.g. Unity xrefmap that maintained by community)
-        if (map.References != null && map.References.Count > 0)
+        if (map.References is {Count: > 0})
         {
             map.References.Sort(XRefSpecUidComparer.Instance);
             map.Sorted = true;
diff --git a/src/Docfx.Build/XRefMaps/XRefCollection.cs b/src/Docfx.Build/XRefMaps/XRefCollection.cs
index dbcc34e0499..357a313bb99 100644
--- a/src/Docfx.Build/XRefMaps/XRefCollection.cs
+++ b/src/Docfx.Build/XRefMaps/XRefCollection.cs
@@ -20,10 +20,10 @@ public XRefCollection(IEnumerable<Uri> uris)
 
     public ImmutableList<Uri> Uris { get; set; }
 
-    public Task<IXRefContainerReader> GetReaderAsync(string baseFolder, IReadOnlyList<string> fallbackFolders = null)
+    public Task<IXRefContainerReader> GetReaderAsync(string baseFolder, IReadOnlyList<string> fallbackFolders = null, CancellationToken cancellationToken = default)
     {
         var creator = new ReaderCreator(Uris, MaxParallelism, baseFolder, fallbackFolders);
-        return creator.CreateAsync();
+        return creator.CreateAsync(cancellationToken);
     }
 
     private sealed class ReaderCreator
@@ -39,13 +39,18 @@ public ReaderCreator(ImmutableList<Uri> uris, int maxParallelism, string baseFol
             _downloader = new XRefMapDownloader(baseFolder, fallbackFolders, maxParallelism);
         }
 
-        public async Task<IXRefContainerReader> CreateAsync()
+        public async Task<IXRefContainerReader> CreateAsync(CancellationToken cancellationToken)
         {
-            AddToDownloadList(_uris);
+            AddToDownloadList(_uris, cancellationToken);
             var dict = new Dictionary<string, IXRefContainer>();
+
             while (_processing.Any())
             {
-                Task<IXRefContainer> task = await Task.WhenAny(_processing.Keys);
+                Task<IXRefContainer> task = await Task.WhenAny(_processing.Keys)
+                                                      .WaitAsync(cancellationToken);
+
+                cancellationToken.ThrowIfCancellationRequested();
+
                 Uri uri = _processing[task];
                 _processing.Remove(task);
                 try
@@ -58,7 +63,8 @@ from r in container.GetRedirections()
                             where r != null
                             select GetUri(uri, r.Href) into u
                             where u != null
-                            select u);
+                            select u,
+                            cancellationToken);
                     }
                     dict[uri.IsAbsoluteUri ? uri.AbsoluteUri : uri.OriginalString] = container;
                 }
@@ -97,7 +103,7 @@ private static Uri GetUri(Uri baseUri, string href)
             return new Uri(baseUri, uri);
         }
 
-        private void AddToDownloadList(IEnumerable<Uri> uris)
+        private void AddToDownloadList(IEnumerable<Uri> uris, CancellationToken cancellationToken)
         {
             foreach (var uri in uris)
             {
@@ -105,13 +111,13 @@ private void AddToDownloadList(IEnumerable<Uri> uris)
                 {
                     if (_set.Add(uri.AbsoluteUri))
                     {
-                        var task = _downloader.DownloadAsync(uri);
+                        var task = _downloader.DownloadAsync(uri, cancellationToken);
                         _processing[task] = uri;
                     }
                 }
                 else if (_set.Add(uri.OriginalString))
                 {
-                    var task = _downloader.DownloadAsync(uri);
+                    var task = _downloader.DownloadAsync(uri, cancellationToken);
                     _processing[task] = uri;
                 }
             }
diff --git a/src/Docfx.Build/XRefMaps/XRefMapDownloader.cs b/src/Docfx.Build/XRefMaps/XRefMapDownloader.cs
index 567a7ecab4d..5a83901afd8 100644
--- a/src/Docfx.Build/XRefMaps/XRefMapDownloader.cs
+++ b/src/Docfx.Build/XRefMaps/XRefMapDownloader.cs
@@ -128,7 +128,7 @@ private static async ValueTask<IXRefContainer> ReadLocalFileAsync(string filePat
                     switch (Path.GetExtension(Path.GetFileNameWithoutExtension(filePath)).ToLowerInvariant())
                     {
                         case ".json":
-                            return await SystemTextJsonUtility.DeserializeAsync<XRefMap>(stream, token);
+                            return await JsonUtility.DeserializeAsync<XRefMap>(stream, token);
                         case ".yml":
                         default:
                             {
@@ -141,7 +141,7 @@ private static async ValueTask<IXRefContainer> ReadLocalFileAsync(string filePat
             case ".json":
                 {
                     using var stream = File.OpenRead(filePath);
-                    return await SystemTextJsonUtility.DeserializeAsync<XRefMap>(stream, token);
+                    return await JsonUtility.DeserializeAsync<XRefMap>(stream, token);
                 }
 
             case ".yml":
@@ -172,7 +172,7 @@ private static async Task<XRefMap> DownloadFromWebAsync(Uri uri, CancellationTok
         {
             case ".json":
                 {
-                    var xrefMap = await SystemTextJsonUtility.DeserializeAsync<XRefMap>(stream, token);
+                    var xrefMap = await JsonUtility.DeserializeAsync<XRefMap>(stream, token);
                     xrefMap.BaseUrl = ResolveBaseUrl(xrefMap, uri);
                     return xrefMap;
                 }
diff --git a/src/Docfx.Common/CompositeDictionary.cs b/src/Docfx.Common/CompositeDictionary.cs
index 9077f5fdfa2..5415854b216 100644
--- a/src/Docfx.Common/CompositeDictionary.cs
+++ b/src/Docfx.Common/CompositeDictionary.cs
@@ -13,7 +13,7 @@ public class CompositeDictionary
 
     public CompositeDictionary()
     {
-        _entries = ImmutableArray<Entry>.Empty;
+        _entries = [];
     }
 
     private CompositeDictionary(ImmutableArray<Entry> entries)
diff --git a/src/Docfx.Common/Docfx.Common.csproj b/src/Docfx.Common/Docfx.Common.csproj
index 3c6c3ad494b..0a8bbc436c0 100644
--- a/src/Docfx.Common/Docfx.Common.csproj
+++ b/src/Docfx.Common/Docfx.Common.csproj
@@ -10,13 +10,13 @@
   </ItemGroup>
 
   <ItemGroup>
-    <InternalsVisibleTo Include="Docfx.Build.ManagedReference"/>
-    <InternalsVisibleTo Include="Docfx.Dotnet"/>
+    <InternalsVisibleTo Include="docfx.Build" />
+    <InternalsVisibleTo Include="Docfx.Dotnet" />
   </ItemGroup>
 
   <!-- TODO: Following settings will be removed after NewtonsoftJson dependencies are removed. -->
   <ItemGroup>
-    <InternalsVisibleTo Include="docfx.Build" />
     <InternalsVisibleTo Include="Docfx.Build.Tests" />
+    <InternalsVisibleTo Include="docfx.Tests" />
   </ItemGroup>
 </Project>
diff --git a/src/Docfx.Common/EntityMergers/IMergeContext.cs b/src/Docfx.Common/EntityMergers/IMergeContext.cs
index a439d8a5e36..f9aeae802bf 100644
--- a/src/Docfx.Common/EntityMergers/IMergeContext.cs
+++ b/src/Docfx.Common/EntityMergers/IMergeContext.cs
@@ -1,4 +1,7 @@
-namespace Docfx.Common.EntityMergers;
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+namespace Docfx.Common.EntityMergers;
 
 public interface IMergeContext
 {
diff --git a/src/Docfx.Common/EntityMergers/IMergeHandler.cs b/src/Docfx.Common/EntityMergers/IMergeHandler.cs
index 76b882ac08a..0bc280c4535 100644
--- a/src/Docfx.Common/EntityMergers/IMergeHandler.cs
+++ b/src/Docfx.Common/EntityMergers/IMergeHandler.cs
@@ -1,4 +1,7 @@
-namespace Docfx.Common.EntityMergers;
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+namespace Docfx.Common.EntityMergers;
 
 public interface IMergeHandler
 {
diff --git a/src/Docfx.Common/EntityMergers/MergeContext.cs b/src/Docfx.Common/EntityMergers/MergeContext.cs
index 93960dbf705..514db422613 100644
--- a/src/Docfx.Common/EntityMergers/MergeContext.cs
+++ b/src/Docfx.Common/EntityMergers/MergeContext.cs
@@ -1,4 +1,7 @@
-namespace Docfx.Common.EntityMergers;
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+namespace Docfx.Common.EntityMergers;
 
 internal sealed class MergeContext : IMergeContext
 {
diff --git a/src/Docfx.Common/EntityMergers/MergePlacement.cs b/src/Docfx.Common/EntityMergers/MergePlacement.cs
index 44c92c44ad7..c9af9c9a36e 100644
--- a/src/Docfx.Common/EntityMergers/MergePlacement.cs
+++ b/src/Docfx.Common/EntityMergers/MergePlacement.cs
@@ -1,4 +1,4 @@
-// Licensed to the .NET Foundation under one or more agreements.\r
+// Licensed to the .NET Foundation under one or more agreements.
 // The .NET Foundation licenses this file to you under the MIT license.
 
 
diff --git a/src/Docfx.Common/EntityMergers/ReflectionEntityMerger.cs b/src/Docfx.Common/EntityMergers/ReflectionEntityMerger.cs
index 505d307c55b..b18f6f463ec 100644
--- a/src/Docfx.Common/EntityMergers/ReflectionEntityMerger.cs
+++ b/src/Docfx.Common/EntityMergers/ReflectionEntityMerger.cs
@@ -92,10 +92,10 @@ public void Merge(ref object source, object overrides, IMergeContext context)
                     placement =
                         placementValue switch
                         {
-                            "after"   => MergePlacement.After,
-                            "before"  => MergePlacement.Before,
+                            "after" => MergePlacement.After,
+                            "before" => MergePlacement.Before,
                             "replace" => MergePlacement.Replace,
-                            _         => MergePlacement.None
+                            _ => MergePlacement.None
                         };
                 }
             }
@@ -117,8 +117,8 @@ public void Merge(ref object source, object overrides, IMergeContext context)
 
                     s = placement switch
                     {
-                        MergePlacement.After   => $"{s}{o}",
-                        MergePlacement.Before  => $"{o}{s}",
+                        MergePlacement.After => $"{s}{o}",
+                        MergePlacement.Before => $"{o}{s}",
                         MergePlacement.Replace => o.ToString()
                     };
 
@@ -142,9 +142,11 @@ public void Merge(ref object source, object overrides, IMergeContext context)
                                 {
                                     continue;
                                 }
-                                if (o.GetType().IsValueType)
+
+                                var type = o.GetType();
+                                if (type.IsValueType)
                                 {
-                                    var defaultValue = Activator.CreateInstance(o.GetType());
+                                    var defaultValue = Activator.CreateInstance(type);
                                     if (object.Equals(defaultValue, o))
                                     {
                                         continue;
@@ -173,7 +175,6 @@ public void Merge(ref object source, object overrides, IMergeContext context)
                     case MergeOption.Replace:
                     case MergeOption.ReplaceNullOrDefault:
                         {
-                            var s = prop.Prop.GetValue(source);
                             var o = prop.Prop.GetValue(overrides);
                             if (prop.Option == MergeOption.Replace)
                             {
@@ -181,9 +182,11 @@ public void Merge(ref object source, object overrides, IMergeContext context)
                                 {
                                     continue;
                                 }
-                                if (o.GetType().IsValueType)
+
+                                var type = o.GetType();
+                                if (type.IsValueType)
                                 {
-                                    var defaultValue = Activator.CreateInstance(o.GetType());
+                                    var defaultValue = Activator.CreateInstance(type);
                                     if (object.Equals(defaultValue, o))
                                     {
                                         continue;
diff --git a/src/Docfx.Common/FileAbstractLayer/RealFileReader.cs b/src/Docfx.Common/FileAbstractLayer/RealFileReader.cs
index bd53379d61f..d9de5639a03 100644
--- a/src/Docfx.Common/FileAbstractLayer/RealFileReader.cs
+++ b/src/Docfx.Common/FileAbstractLayer/RealFileReader.cs
@@ -18,8 +18,8 @@ public RealFileReader(string inputFolder)
             throw new DirectoryNotFoundException($"Directory ({inputFolder}) not found.");
         }
         if (inputFolder.Length > 0 &&
-            !inputFolder.EndsWith("\\", StringComparison.Ordinal) &&
-            !inputFolder.EndsWith("/", StringComparison.Ordinal))
+            !inputFolder.EndsWith('\\') &&
+            !inputFolder.EndsWith('/'))
         {
             inputFolder += "/";
         }
diff --git a/src/Docfx.Common/FileItems.cs b/src/Docfx.Common/FileItems.cs
index c0d470961f3..6258167b28d 100644
--- a/src/Docfx.Common/FileItems.cs
+++ b/src/Docfx.Common/FileItems.cs
@@ -3,10 +3,11 @@
 
 namespace Docfx;
 
+[System.Text.Json.Serialization.JsonConverter(typeof(FileItemsConverter))]
 public class FileItems : List<string>
 {
     private static readonly IEnumerable<string> Empty = new List<string>();
-    public FileItems(string file) : base()
+    public FileItems(string file)
     {
         Add(file);
     }
diff --git a/src/Docfx.Common/FileItemsConverter.cs b/src/Docfx.Common/FileItemsConverter.cs
new file mode 100644
index 00000000000..9a92342feee
--- /dev/null
+++ b/src/Docfx.Common/FileItemsConverter.cs
@@ -0,0 +1,38 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.Text.Json;
+using System.Text.Json.Serialization;
+
+#nullable enable
+
+namespace Docfx;
+
+internal class FileItemsConverter : JsonConverter<FileItems>
+{
+    public override FileItems Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+    {
+        if (reader.TokenType == JsonTokenType.String)
+        {
+            return new FileItems(reader.GetString());
+        }
+
+        if (reader.TokenType == JsonTokenType.StartArray)
+        {
+            var items = JsonSerializer.Deserialize<string[]>(ref reader, options);
+            return new FileItems(items);
+        }
+
+        throw new JsonException("Expected string or array of strings.");
+    }
+
+    public override void Write(Utf8JsonWriter writer, FileItems value, JsonSerializerOptions options)
+    {
+        writer.WriteStartArray();
+        foreach (var item in value)
+        {
+            writer.WriteStringValue(item);
+        }
+        writer.WriteEndArray();
+    }
+}
diff --git a/src/Docfx.Common/FileMapping.cs b/src/Docfx.Common/FileMapping.cs
index 3eb53094e04..451e2288289 100644
--- a/src/Docfx.Common/FileMapping.cs
+++ b/src/Docfx.Common/FileMapping.cs
@@ -24,7 +24,8 @@ namespace Docfx;
 ///     If the Array form contains only one item, it can be shortened to an object
 ///     e.g. <code>projects: ["file1", "file2"]</code>
 /// </summary>
-[Newtonsoft.Json.JsonConverter(typeof(FileMappingConverter))]
+[Newtonsoft.Json.JsonConverter(typeof(FileMappingConverter.NewtonsoftJsonConverter))]
+[System.Text.Json.Serialization.JsonConverter(typeof(FileMappingConverter.SystemTextJsonConverter))]
 public class FileMapping
 {
     private readonly List<FileMappingItem> _items = new();
@@ -45,7 +46,8 @@ public IReadOnlyList<FileMappingItem> Items
     /// <summary>
     /// Initializes a new instance of the <see cref="FileMapping"/> class.
     /// </summary>
-    public FileMapping() : base() { }
+    public FileMapping()
+    { }
 
     /// <summary>
     /// Initializes a new instance of the <see cref="FileMapping"/> class.
@@ -69,7 +71,7 @@ public FileMapping(FileMappingItem item)
     /// <param name="item"></param>
     public void Add(FileMappingItem item)
     {
-        if (item == null || item.Files == null || item.Files.Count == 0) return;
+        if (item?.Files == null || item.Files.Count == 0) return;
 
         _items.Add(item);
     }
diff --git a/src/Docfx.Common/FileMappingConverter.cs b/src/Docfx.Common/FileMappingConverter.cs
deleted file mode 100644
index 5884f0bc9f7..00000000000
--- a/src/Docfx.Common/FileMappingConverter.cs
+++ /dev/null
@@ -1,58 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using Newtonsoft.Json;
-using Newtonsoft.Json.Linq;
-
-namespace Docfx;
-
-internal class FileMappingConverter : JsonConverter
-{
-    public override bool CanConvert(Type objectType)
-    {
-        return objectType == typeof(FileMapping);
-    }
-
-    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
-    {
-        var model = new FileMapping();
-        var value = reader.Value;
-        IEnumerable<JToken> jItems;
-        if (reader.TokenType == JsonToken.StartArray)
-        {
-            jItems = JArray.Load(reader);
-        }
-        else if (reader.TokenType == JsonToken.String)
-        {
-            jItems = JRaw.Load(reader);
-        }
-        else
-        {
-            jItems = JObject.Load(reader);
-        }
-
-        if (jItems is JValue)
-        {
-            model.Add(FileModelParser.ParseItem(jItems.ToString()));
-        }
-        else if (jItems is JObject)
-        {
-            model.Add(FileModelParser.ParseItem((JToken)jItems));
-        }
-        else
-        {
-            foreach (var item in jItems)
-            {
-                FileMappingItem itemModel = FileModelParser.ParseItem(item);
-                model.Add(itemModel);
-            }
-        }
-
-        return model;
-    }
-
-    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
-    {
-        serializer.Serialize(writer, ((FileMapping)value).Items);
-    }
-}
diff --git a/src/Docfx.Common/Git/GitUtility.cs b/src/Docfx.Common/Git/GitUtility.cs
index 9bc3587500c..dd3368e15ef 100644
--- a/src/Docfx.Common/Git/GitUtility.cs
+++ b/src/Docfx.Common/Git/GitUtility.cs
@@ -11,7 +11,7 @@ namespace Docfx.Common.Git;
 
 public record GitSource(string Repo, string Branch, string Path, int Line);
 
-public static class GitUtility
+public static partial class GitUtility
 {
     record Repo(string path, string url, string branch);
 
@@ -51,14 +51,14 @@ record Repo(string path, string url, string branch);
     public static string? RawContentUrlToContentUrl(string rawUrl)
     {
         // GitHub
-        var url = Regex.Replace(
-            rawUrl,
-            @"^https://raw\.githubusercontent\.com/([^/]+)/([^/]+)/([^/]+)/(.+)$",
-            string.IsNullOrEmpty(s_branch) ? "https://github.com/$1/$2/blob/$3/$4" : $"https://github.com/$1/$2/blob/{s_branch}/$4");
+        var url = GitHubUserContentRegex().Replace(rawUrl, string.IsNullOrEmpty(s_branch) ? "https://github.com/$1/$2/blob/$3/$4" : $"https://github.com/$1/$2/blob/{s_branch}/$4");
 
         return ResolveDocfxSourceRepoUrl(url);
     }
 
+    [GeneratedRegex(@"^https://raw\.githubusercontent\.com/([^/]+)/([^/]+)/([^/]+)/(.+)$")]
+    private static partial Regex GitHubUserContentRegex();
+
     public static string? GetSourceUrl(GitSource source)
     {
         var repo = source.Repo.StartsWith("git") ? GitUrlToHttps(source.Repo) : source.Repo;
@@ -155,7 +155,6 @@ static string GitUrlToHttps(string url)
             }
 
             return null;
-
         }
 
         static IEnumerable<(string key, string value)> ParseRemoteUrls(string gitRoot)
@@ -171,7 +170,7 @@ static string GitUrlToHttps(string url)
                 var line = text.Trim();
                 if (line.StartsWith("["))
                 {
-                    var remote = Regex.Replace(line, @"\[remote\s+\""(.+)?\""\]", "$1");
+                    var remote = RemoteRegex().Replace(line, "$1");
                     key = remote != line ? remote : "";
                 }
                 else if (line.StartsWith("url = ") && !string.IsNullOrEmpty(key))
@@ -182,6 +181,8 @@ static string GitUrlToHttps(string url)
             }
         }
     }
+    [GeneratedRegex(@"\[remote\s+\""(.+)?\""\]")]
+    private static partial Regex RemoteRegex();
 
     /// <summary>
     /// Rewrite path if `DOCFX_SOURCE_REPOSITORY_URL` environment variable is specified.
@@ -215,7 +216,7 @@ private static string ResolveDocfxSourceRepoUrl(string originalUrl)
                 {
                     // Replace `/{orgName}/{repoName}` and remove `.git` suffix.
                     var builder = new UriBuilder(parsedOriginalUrl);
-                    builder.Path = Regex.Replace(builder.Path.TrimEnd(".git"), "^/[^/]+/[^/]+", $"/{orgName}/{repoName}");
+                    builder.Path = OrgRepoRegex().Replace(builder.Path.TrimEnd(".git"), $"/{orgName}/{repoName}");
                     return builder.Uri.ToString();
                 }
 
@@ -224,4 +225,7 @@ private static string ResolveDocfxSourceRepoUrl(string originalUrl)
                 return originalUrl;
         }
     }
+
+    [GeneratedRegex("^/[^/]+/[^/]+")]
+    private static partial Regex OrgRepoRegex();
 }
diff --git a/src/Docfx.Common/IItemWithMetadata.cs b/src/Docfx.Common/IItemWithMetadata.cs
index 8968a3552a8..d9313405e41 100644
--- a/src/Docfx.Common/IItemWithMetadata.cs
+++ b/src/Docfx.Common/IItemWithMetadata.cs
@@ -1,4 +1,4 @@
-// Licensed to the .NET Foundation under one or more agreements.\r
+// Licensed to the .NET Foundation under one or more agreements.
 // The .NET Foundation licenses this file to you under the MIT license.
 
 
diff --git a/src/Docfx.Common/Json/FileMappingConverter.NewtonsoftJson.cs b/src/Docfx.Common/Json/FileMappingConverter.NewtonsoftJson.cs
new file mode 100644
index 00000000000..e232c1be8e0
--- /dev/null
+++ b/src/Docfx.Common/Json/FileMappingConverter.NewtonsoftJson.cs
@@ -0,0 +1,61 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Docfx;
+
+internal partial class FileMappingConverter
+{
+    internal class NewtonsoftJsonConverter : JsonConverter
+    {
+        public override bool CanConvert(Type objectType)
+        {
+            return objectType == typeof(FileMapping);
+        }
+
+        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
+        {
+            var model = new FileMapping();
+            var value = reader.Value;
+            IEnumerable<JToken> jItems;
+            if (reader.TokenType == JsonToken.StartArray)
+            {
+                jItems = JArray.Load(reader);
+            }
+            else if (reader.TokenType == JsonToken.String)
+            {
+                jItems = JRaw.Load(reader);
+            }
+            else
+            {
+                jItems = JObject.Load(reader);
+            }
+
+            if (jItems is JValue)
+            {
+                model.Add(FileModelParser.ParseItem(jItems.ToString()));
+            }
+            else if (jItems is JObject)
+            {
+                model.Add(FileModelParser.ParseItem((JToken)jItems));
+            }
+            else
+            {
+                foreach (var item in jItems)
+                {
+                    FileMappingItem itemModel = FileModelParser.ParseItem(item);
+                    model.Add(itemModel);
+                }
+            }
+
+            return model;
+        }
+
+        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
+        {
+            serializer.Serialize(writer, ((FileMapping)value).Items);
+        }
+    }
+}
diff --git a/src/Docfx.Common/Json/FileMappingConverter.SystemTextJson.cs b/src/Docfx.Common/Json/FileMappingConverter.SystemTextJson.cs
new file mode 100644
index 00000000000..286cded2d1e
--- /dev/null
+++ b/src/Docfx.Common/Json/FileMappingConverter.SystemTextJson.cs
@@ -0,0 +1,63 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.Collections.Generic;
+using System.Text.Json;
+using System.Text.Json.Serialization;
+
+#nullable enable
+
+namespace Docfx;
+
+internal partial class FileMappingConverter
+{
+    internal class SystemTextJsonConverter : JsonConverter<FileMapping>
+    {
+        public override FileMapping? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                // Compact Form
+                case JsonTokenType.String:
+                    return new FileMapping(new FileMappingItem
+                    {
+                        Files = new FileItems(reader.GetString()),
+                    });
+                // Object form
+                case JsonTokenType.StartObject:
+                    return new FileMapping(JsonSerializer.Deserialize<FileMappingItem>(ref reader, options));
+
+                // Array form
+                case JsonTokenType.StartArray:
+                    var items = new List<FileMappingItem>();
+                    while (reader.Read() && reader.TokenType != JsonTokenType.EndArray)
+                    {
+                        switch (reader.TokenType)
+                        {
+                            case JsonTokenType.String:
+                                items.Add(new FileMappingItem
+                                {
+                                    Files = new FileItems(reader.GetString()),
+                                });
+                                break;
+                            case JsonTokenType.StartObject:
+                                items.Add(JsonSerializer.Deserialize<FileMappingItem>(ref reader, options)!);
+                                break;
+                            default:
+                                throw new JsonException($"Unsupported token type({reader.TokenType}).");
+                        }
+                    }
+                    return new FileMapping(items);
+
+                default:
+                    throw new JsonException($"Unsupported token type({reader.TokenType}).");
+            }
+        }
+
+        public override void Write(Utf8JsonWriter writer, FileMapping value, JsonSerializerOptions options)
+        {
+            var items = value.Items;
+            JsonSerializer.Serialize(writer, items, options);
+        }
+    }
+}
diff --git a/src/Docfx.Common/Json/FileMappingConverter.cs b/src/Docfx.Common/Json/FileMappingConverter.cs
new file mode 100644
index 00000000000..65a4cd2dbe8
--- /dev/null
+++ b/src/Docfx.Common/Json/FileMappingConverter.cs
@@ -0,0 +1,11 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Docfx;
+
+internal partial class FileMappingConverter
+{
+}
diff --git a/src/Docfx.Common/Json/JsonUtility.cs b/src/Docfx.Common/Json/JsonUtility.cs
new file mode 100644
index 00000000000..b0c4d7ca1ac
--- /dev/null
+++ b/src/Docfx.Common/Json/JsonUtility.cs
@@ -0,0 +1,111 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.Collections.Generic;
+using System.IO;
+using System.Reflection.PortableExecutable;
+using System.Text.RegularExpressions;
+using Docfx.Plugins;
+using Newtonsoft.Json;
+using YamlDotNet.Serialization;
+
+namespace Docfx.Common;
+
+public static class JsonUtility
+{
+    public static string Serialize<T>(T graph, bool indented = false)
+    {
+        if (IsSystemTextJsonSupported(graph))
+            return SystemTextJsonUtility.Serialize(graph, indented);
+        else
+            return NewtonsoftJsonUtility.Serialize(graph, indented ? Formatting.Indented : Formatting.None);
+    }
+
+    public static void Serialize<T>(string path, T graph, bool indented = false)
+    {
+        if (IsSystemTextJsonSupported(graph))
+            SystemTextJsonUtility.SerializeToFile(path, graph, indented);
+        else
+            NewtonsoftJsonUtility.Serialize(path, graph, indented ? Formatting.Indented : Formatting.None);
+    }
+
+    public static T Deserialize<T>(string path)
+    {
+        if (IsSystemTextJsonSupported<T>())
+            return SystemTextJsonUtility.DeserializeFromFile<T>(path);
+        else
+            return NewtonsoftJsonUtility.Deserialize<T>(path);
+    }
+
+    public static T Deserialize<T>(TextReader reader)
+    {
+        if (IsSystemTextJsonSupported<T>())
+            return SystemTextJsonUtility.Deserialize<T>(reader.ReadToEnd());
+        else
+            return NewtonsoftJsonUtility.Deserialize<T>(reader);
+    }
+
+    internal static ValueTask<T> DeserializeAsync<T>(Stream stream, CancellationToken cancellationToken)
+    {
+        if (IsSystemTextJsonSupported<T>())
+            return SystemTextJsonUtility.DeserializeAsync<T>(stream, cancellationToken);
+        else
+            throw new NotSupportedException();
+    }
+
+    public static string ToJsonString<T>(this T graph)
+    {
+        if (IsSystemTextJsonSupported<T>())
+            return SystemTextJsonUtility.Serialize<T>(graph);
+        else
+            return NewtonsoftJsonUtility.ToJsonString(graph);
+    }
+
+    public static T FromJsonString<T>(this string json)
+    {
+        if (IsSystemTextJsonSupported<T>())
+            return SystemTextJsonUtility.Deserialize<T>(json);
+        else
+            return NewtonsoftJsonUtility.FromJsonString<T>(json);
+    }
+
+    internal static bool IsSystemTextJsonSupported<T>()
+    {
+        return StaticTypeCache<T>.Supported;
+    }
+
+    internal static bool IsSystemTextJsonSupported<T>(T obj)
+    {
+        if (typeof(T) == typeof(object) && obj.GetType().FullName.StartsWith("Newtonsoft.", StringComparison.Ordinal))
+            return false;
+
+        return StaticTypeCache<T>.Supported;
+    }
+
+    private static class StaticTypeCache<T>
+    {
+        public static readonly bool Supported;
+
+        static StaticTypeCache()
+        {
+            Supported = IsSupported();
+        }
+
+        private static bool IsSupported()
+        {
+            var fullName = typeof(T).FullName;
+            switch (fullName)
+            {
+                // Use Newtonsoft.Json for RestAPI models.
+                case "Docfx.DataContracts.RestApi.RestApiRootItemViewModel":
+
+                // Some unit tests using Newtonsoft.Json types.
+                case "Newtonsoft.Json.Linq.JObject":
+                    return false;
+
+                default:
+                    return true;
+            }
+        }
+    }
+}
diff --git a/src/Docfx.Common/ConvertToObjectHelper.cs b/src/Docfx.Common/Json/NewtonsoftJson/ConvertToObjectHelper.cs
similarity index 98%
rename from src/Docfx.Common/ConvertToObjectHelper.cs
rename to src/Docfx.Common/Json/NewtonsoftJson/ConvertToObjectHelper.cs
index b328db56cce..7e05c239676 100644
--- a/src/Docfx.Common/ConvertToObjectHelper.cs
+++ b/src/Docfx.Common/Json/NewtonsoftJson/ConvertToObjectHelper.cs
@@ -3,9 +3,8 @@
 
 using System.Diagnostics.CodeAnalysis;
 using System.Dynamic;
-
-using Newtonsoft.Json.Linq;
 using System.Runtime.CompilerServices;
+using Newtonsoft.Json.Linq;
 
 namespace Docfx.Common;
 
@@ -72,7 +71,7 @@ public static object ConvertStrongTypeToJObject(object raw)
             return raw;
         }
 
-        return JToken.FromObject(raw, JsonUtility.DefaultSerializer.Value);
+        return JToken.FromObject(raw, NewtonsoftJsonUtility.DefaultSerializer.Value);
     }
 
     public static object ConvertExpandoObjectToObject(object raw)
diff --git a/src/Docfx.Common/JObjectDictionaryToObjectDictionaryConverter.cs b/src/Docfx.Common/Json/NewtonsoftJson/JObjectDictionaryToObjectDictionaryConverter.cs
similarity index 93%
rename from src/Docfx.Common/JObjectDictionaryToObjectDictionaryConverter.cs
rename to src/Docfx.Common/Json/NewtonsoftJson/JObjectDictionaryToObjectDictionaryConverter.cs
index 635c90819b2..ba5df2acde6 100644
--- a/src/Docfx.Common/JObjectDictionaryToObjectDictionaryConverter.cs
+++ b/src/Docfx.Common/Json/NewtonsoftJson/JObjectDictionaryToObjectDictionaryConverter.cs
@@ -23,7 +23,7 @@ public override object ReadJson(JsonReader reader, Type objectType, object exist
     public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
     {
         writer.WriteStartObject();
-        foreach (var item in ((Dictionary<string, object>)value))
+        foreach (var item in (Dictionary<string, object>)value)
         {
             writer.WritePropertyName(item.Key);
             serializer.Serialize(writer, item.Value);
diff --git a/src/Docfx.Common/JsonUtility.cs b/src/Docfx.Common/Json/NewtonsoftJson/NewtonsoftJsonUtility.cs
similarity index 90%
rename from src/Docfx.Common/JsonUtility.cs
rename to src/Docfx.Common/Json/NewtonsoftJson/NewtonsoftJsonUtility.cs
index 8a7873103f4..c75121a3e3c 100644
--- a/src/Docfx.Common/JsonUtility.cs
+++ b/src/Docfx.Common/Json/NewtonsoftJson/NewtonsoftJsonUtility.cs
@@ -8,7 +8,7 @@
 
 namespace Docfx.Common;
 
-public static class JsonUtility
+internal static class NewtonsoftJsonUtility
 {
     public static readonly ThreadLocal<JsonSerializer> DefaultSerializer = new(
         () => new JsonSerializer
@@ -55,14 +55,14 @@ public static T Deserialize<T>(TextReader reader, JsonSerializer serializer = nu
         return (serializer ?? DefaultSerializer.Value).Deserialize<T>(json);
     }
 
-    public static string ToJsonString(this object graph, Formatting formatting = Formatting.None, JsonSerializer serializer = null)
+    public static string ToJsonString(object graph, Formatting formatting = Formatting.None, JsonSerializer serializer = null)
     {
         var sw = new StringWriter();
         Serialize(sw, graph, formatting, serializer);
         return sw.ToString();
     }
 
-    public static T FromJsonString<T>(this string json, JsonSerializer serializer = null)
+    public static T FromJsonString<T>(string json, JsonSerializer serializer = null)
     {
         return Deserialize<T>(new StringReader(json), serializer);
     }
diff --git a/src/Docfx.Common/Json/System.Text.Json/SystemTextJsonUtility.cs b/src/Docfx.Common/Json/System.Text.Json/SystemTextJsonUtility.cs
index e952067a491..e16fa005d79 100644
--- a/src/Docfx.Common/Json/System.Text.Json/SystemTextJsonUtility.cs
+++ b/src/Docfx.Common/Json/System.Text.Json/SystemTextJsonUtility.cs
@@ -1,8 +1,11 @@
 // Licensed to the .NET Foundation under one or more agreements.
 // The .NET Foundation licenses this file to you under the MIT license.
 
+using System.IO;
+using System.Text.Encodings.Web;
 using System.Text.Json;
 using System.Text.Json.Serialization;
+using Docfx.Plugins;
 
 #nullable enable
 
@@ -29,14 +32,16 @@ static SystemTextJsonUtility()
         {
             // DefaultBufferSize = 1024 * 16, // TODO: Set appropriate buffer size based on benchmark.(Default: 16KB)
             AllowTrailingCommas = true,
+            ReadCommentHandling = JsonCommentHandling.Skip,
             DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull,
+            Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping, // TODO: Replace with custom encoder that encode minimal chars (https://github.com/dotnet/runtime/issues/87153)
             PropertyNameCaseInsensitive = true,
             PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
             // DictionaryKeyPolicy = JsonNamingPolicy.CamelCase, // This setting is not compatible to `Newtonsoft.Json` serialize result.
             NumberHandling = JsonNumberHandling.AllowReadingFromString,
             Converters =
             {
-                new JsonStringEnumConverter(),
+                new JsonStringEnumConverter(JsonNamingPolicy.CamelCase),
                 new ObjectToInferredTypesConverter(), // Required for `Dictionary<string, object>` type deserialization.
             },
             WriteIndented = false,
@@ -49,7 +54,7 @@ static SystemTextJsonUtility()
     }
 
     /// <summary>
-    /// Converts the value of a type specified by a generic type parameter into a JSON string.
+    /// Serialize model to JSON string.
     /// </summary>
     public static string Serialize<T>(T model, bool indented = false)
     {
@@ -61,7 +66,7 @@ public static string Serialize<T>(T model, bool indented = false)
     }
 
     /// <summary>
-    /// Converts the value of a type specified by a generic type parameter into a JSON string.
+    /// Serialize stream to JSON string.
     /// </summary>
     public static string Serialize<T>(Stream stream, bool indented = false)
     {
@@ -73,8 +78,7 @@ public static string Serialize<T>(Stream stream, bool indented = false)
     }
 
     /// <summary>
-    /// Reads the UTF-8 encoded text representing a single JSON value into a TValue.
-    /// The Stream will be read to completion.
+    /// Deserialize model from JSON string.
     /// </summary>
     public static T? Deserialize<T>(string json)
     {
@@ -82,8 +86,7 @@ public static string Serialize<T>(Stream stream, bool indented = false)
     }
 
     /// <summary>
-    /// Reads the UTF-8 encoded text representing a single JSON value into a TValue.
-    /// The Stream will be read to completion.
+    /// Deserialize model from stream.
     /// </summary>
     public static T? Deserialize<T>(Stream stream)
     {
@@ -91,11 +94,31 @@ public static string Serialize<T>(Stream stream, bool indented = false)
     }
 
     /// <summary>
-    /// Asynchronously reads the UTF-8 encoded text representing a single JSON value
-    //  into an instance of a type specified by a generic type parameter. The stream
-    //  will be read to completion.
+    /// Deserialize model from stream.
+    /// </summary>
     public static async ValueTask<T?> DeserializeAsync<T>(Stream stream, CancellationToken token = default)
     {
         return await JsonSerializer.DeserializeAsync<T>(stream, DefaultSerializerOptions, cancellationToken: token);
     }
+
+    /// <summary>
+    /// Serialize specified model to file.
+    /// </summary>
+    public static void SerializeToFile<T>(string path, T model, bool indented = false)
+    {
+        var options = indented
+            ? IndentedSerializerOptions
+            : DefaultSerializerOptions;
+        using var stream = EnvironmentContext.FileAbstractLayer.Create(path);
+        JsonSerializer.Serialize(stream, model, options);
+    }
+
+    /// <summary>
+    /// Deserialize specified model from JSON file.
+    /// </summary>
+    public static T? DeserializeFromFile<T>(string path)
+    {
+        using var stream = EnvironmentContext.FileAbstractLayer.OpenRead(path);
+        return JsonSerializer.Deserialize<T>(stream, DefaultSerializerOptions);
+    }
 }
diff --git a/src/Docfx.Common/LruList.cs b/src/Docfx.Common/LruList.cs
index 97a217e38e4..7c73eca7334 100644
--- a/src/Docfx.Common/LruList.cs
+++ b/src/Docfx.Common/LruList.cs
@@ -1,4 +1,7 @@
-namespace Docfx.Common;
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+namespace Docfx.Common;
 
 public class LruList<T>
 {
diff --git a/src/Docfx.Common/Path/PathUtility.cs b/src/Docfx.Common/Path/PathUtility.cs
index 0b7435f999b..08437417e0a 100644
--- a/src/Docfx.Common/Path/PathUtility.cs
+++ b/src/Docfx.Common/Path/PathUtility.cs
@@ -71,7 +71,7 @@ public static string MakeRelativePath(string basePath, string absolutePath)
 
         if (toUri.IsFile && !toUri.OriginalString.StartsWith("file://", StringComparison.InvariantCultureIgnoreCase))
         {
-           return Path.GetRelativePath(basePath, absolutePath).BackSlashToForwardSlash();
+            return Path.GetRelativePath(basePath, absolutePath).BackSlashToForwardSlash();
         }
 
         Uri relativeUri = fromUri.MakeRelativeUri(toUri);
diff --git a/src/Docfx.Common/Path/RelativePath.cs b/src/Docfx.Common/Path/RelativePath.cs
index a804d5db46f..be23480f3a3 100644
--- a/src/Docfx.Common/Path/RelativePath.cs
+++ b/src/Docfx.Common/Path/RelativePath.cs
@@ -54,11 +54,10 @@ public static RelativePath FromUrl(string path)
     public static bool IsRelativePath(string path)
     {
         // TODO : to merge with the PathUtility one
-        return path != null &&
-            path.Length > 0 &&
-            path[0] != '/' &&
-            path[0] != '\\' &&
-            path.IndexOfAny(PathUtility.InvalidPathChars) == -1;
+        return path is {Length: > 0} &&
+               path[0] != '/' &&
+               path[0] != '\\' &&
+               path.IndexOfAny(PathUtility.InvalidPathChars) == -1;
     }
 
     public static RelativePath Parse(string path) => TryParseCore(path, true);
@@ -188,14 +187,7 @@ public string GetFileNameWithoutExtension()
 
     public RelativePath ChangeFileName(string fileName)
     {
-#if NET7_0_OR_GREATER
         ArgumentException.ThrowIfNullOrEmpty(fileName);
-#else
-        if (string.IsNullOrEmpty(fileName))
-        {
-            throw new ArgumentNullException(nameof(fileName));
-        }
-#endif
 
         if (fileName.Contains('\\') || fileName.Contains('/') || fileName == ".." || fileName == ".")
         {
diff --git a/src/Docfx.Common/YamlMime.cs b/src/Docfx.Common/YamlMime.cs
index 59a3c69bfbe..5a04ad6108a 100644
--- a/src/Docfx.Common/YamlMime.cs
+++ b/src/Docfx.Common/YamlMime.cs
@@ -19,7 +19,7 @@ public static class YamlMime
         ArgumentNullException.ThrowIfNull(reader);
 
         var line = reader.ReadLine();
-        if (line == null || !line.StartsWith("#", StringComparison.Ordinal))
+        if (line == null || !line.StartsWith('#'))
         {
             return null;
         }
diff --git a/src/Docfx.DataContracts.Common/Docfx.DataContracts.Common.csproj b/src/Docfx.DataContracts.Common/Docfx.DataContracts.Common.csproj
index fafa6a9259a..a89ab8e2e8f 100644
--- a/src/Docfx.DataContracts.Common/Docfx.DataContracts.Common.csproj
+++ b/src/Docfx.DataContracts.Common/Docfx.DataContracts.Common.csproj
@@ -1,4 +1,4 @@
-<Project Sdk="Microsoft.NET.Sdk">
+<Project Sdk="Microsoft.NET.Sdk">
   <ItemGroup>
     <ProjectReference Include="..\Docfx.Common\Docfx.Common.csproj" />
   </ItemGroup>
diff --git a/src/Docfx.DataContracts.Common/ExternalReferences/ExternalReferencePackageCollection.cs b/src/Docfx.DataContracts.Common/ExternalReferences/ExternalReferencePackageCollection.cs
index 75f907339f8..47f55ee6d3d 100644
--- a/src/Docfx.DataContracts.Common/ExternalReferences/ExternalReferencePackageCollection.cs
+++ b/src/Docfx.DataContracts.Common/ExternalReferences/ExternalReferencePackageCollection.cs
@@ -1,4 +1,7 @@
-using System.Collections.Immutable;
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.Collections.Immutable;
 
 using Docfx.Common;
 
@@ -8,17 +11,20 @@ public class ExternalReferencePackageCollection : IDisposable
 {
     private readonly LruList<ReferenceViewModelCacheItem> _cache = LruList<ReferenceViewModelCacheItem>.Create(0x100);
 
-    public ExternalReferencePackageCollection(IEnumerable<string> packageFiles, int maxParallelism)
+    public ExternalReferencePackageCollection(IEnumerable<string> packageFiles, int maxParallelism, CancellationToken cancellationToken)
     {
         ArgumentNullException.ThrowIfNull(packageFiles);
 
-        Readers = (from file in packageFiles.AsParallel().WithDegreeOfParallelism(maxParallelism).AsOrdered()
+        Readers = (from file in packageFiles.AsParallel()
+                                            .WithDegreeOfParallelism(maxParallelism)
+                                            .WithCancellation(cancellationToken)
+                                            .AsOrdered()
                    let reader = ExternalReferencePackageReader.CreateNoThrow(file)
                    where reader != null
                    select reader).ToImmutableList();
     }
 
-    public ImmutableList<ExternalReferencePackageReader> Readers { get; private set; }
+    public ImmutableList<ExternalReferencePackageReader> Readers { get; }
 
     public bool TryGetReference(string uid, out ReferenceViewModel vm)
     {
diff --git a/src/Docfx.DataContracts.Common/JTokenConverter.cs b/src/Docfx.DataContracts.Common/JTokenConverter.cs
index d8d170127e8..64564775551 100644
--- a/src/Docfx.DataContracts.Common/JTokenConverter.cs
+++ b/src/Docfx.DataContracts.Common/JTokenConverter.cs
@@ -1,6 +1,8 @@
 // Licensed to the .NET Foundation under one or more agreements.
 // The .NET Foundation licenses this file to you under the MIT license.
 
+using System.Reflection;
+using Docfx.Common;
 using Newtonsoft.Json.Linq;
 
 namespace Docfx.DataContracts.Common;
@@ -18,6 +20,24 @@ public static T Convert<T>(object obj)
         {
             return jToken.ToObject<T>();
         }
+
+        // Custom code path for `System.Text.Json` deserialization.
+        // `ObjectToInferredTypesConverter` deserialize items as `List<object>`.
+        // So it need to convert `List<object>` to `List<TItem>`.
+        if (obj is List<object> list && IsListType<T>())
+        {
+            var json = JsonUtility.Serialize(list);
+            var result = JsonUtility.Deserialize<T>(new StringReader(json));
+            return result;
+        }
+
         throw new InvalidCastException();
     }
+
+    private static bool IsListType<T>()
+    {
+        var type = typeof(T);
+        return type.GetTypeInfo().IsGenericType
+            && type.GetGenericTypeDefinition() == typeof(List<>);
+    }
 }
diff --git a/src/Docfx.DataContracts.Common/ReferenceViewModel.cs b/src/Docfx.DataContracts.Common/ReferenceViewModel.cs
index 71e1f36b81a..7810640f850 100644
--- a/src/Docfx.DataContracts.Common/ReferenceViewModel.cs
+++ b/src/Docfx.DataContracts.Common/ReferenceViewModel.cs
@@ -86,10 +86,14 @@ public class ReferenceViewModel
     [YamlIgnore]
     [Newtonsoft.Json.JsonExtensionData]
     [System.Text.Json.Serialization.JsonExtensionData]
+    [System.Text.Json.Serialization.JsonInclude]
     [UniqueIdentityReferenceIgnore]
     [MarkdownContentIgnore]
-    public CompositeDictionary AdditionalJson =>
-        CompositeDictionary
+    public CompositeDictionary AdditionalJson
+    {
+        get
+        {
+            return CompositeDictionary
             .CreateBuilder()
             .Add(Constants.ExtensionMemberPrefix.Name, NameInDevLangs, JTokenConverter.Convert<string>)
             .Add(Constants.ExtensionMemberPrefix.NameWithType, NameWithTypeInDevLangs, JTokenConverter.Convert<string>)
@@ -97,6 +101,12 @@ public class ReferenceViewModel
             .Add(Constants.ExtensionMemberPrefix.Spec, Specs, JTokenConverter.Convert<List<SpecViewModel>>)
             .Add(string.Empty, Additional)
             .Create();
+        }
+        private init
+        {
+            // init or getter is required for deserialize data with System.Text.Json.
+        }
+    }
 
     public ReferenceViewModel Clone()
     {
diff --git a/src/Docfx.DataContracts.Common/TocItemViewModel.cs b/src/Docfx.DataContracts.Common/TocItemViewModel.cs
index 7c4710bb920..81937c34265 100644
--- a/src/Docfx.DataContracts.Common/TocItemViewModel.cs
+++ b/src/Docfx.DataContracts.Common/TocItemViewModel.cs
@@ -115,13 +115,25 @@ public class TocItemViewModel
     [ExtensibleMember]
     [Newtonsoft.Json.JsonIgnore]
     [System.Text.Json.Serialization.JsonIgnore]
+    [System.Text.Json.Serialization.JsonPropertyName("__metadata__")]
     public Dictionary<string, object> Metadata { get; set; } = new();
 
     [EditorBrowsable(EditorBrowsableState.Never)]
     [YamlIgnore]
     [Newtonsoft.Json.JsonExtensionData]
     [System.Text.Json.Serialization.JsonExtensionData]
-    public CompositeDictionary MetadataJson => CompositeDictionary.CreateBuilder().Add(string.Empty, Metadata).Create();
+    [System.Text.Json.Serialization.JsonInclude]
+    public CompositeDictionary MetadataJson
+    {
+        get
+        {
+            return CompositeDictionary.CreateBuilder().Add(string.Empty, Metadata).Create();
+        }
+        private init
+        {
+            // init or getter is required for deserialize data with System.Text.Json.
+        }
+    }
 
     public TocItemViewModel Clone()
     {
diff --git a/src/Docfx.DataContracts.RestApi/Docfx.DataContracts.RestApi.csproj b/src/Docfx.DataContracts.RestApi/Docfx.DataContracts.RestApi.csproj
index 6c17eaf9cd0..d814b16b816 100644
--- a/src/Docfx.DataContracts.RestApi/Docfx.DataContracts.RestApi.csproj
+++ b/src/Docfx.DataContracts.RestApi/Docfx.DataContracts.RestApi.csproj
@@ -1,4 +1,4 @@
-<Project Sdk="Microsoft.NET.Sdk">
+<Project Sdk="Microsoft.NET.Sdk">
   <ItemGroup>
     <ProjectReference Include="..\Docfx.DataContracts.Common\Docfx.DataContracts.Common.csproj" />
     <ProjectReference Include="..\Docfx.Common\Docfx.Common.csproj" />
diff --git a/src/Docfx.DataContracts.UniversalReference/Docfx.DataContracts.UniversalReference.csproj b/src/Docfx.DataContracts.UniversalReference/Docfx.DataContracts.UniversalReference.csproj
index 9a8454b8e26..2a9d93fe773 100644
--- a/src/Docfx.DataContracts.UniversalReference/Docfx.DataContracts.UniversalReference.csproj
+++ b/src/Docfx.DataContracts.UniversalReference/Docfx.DataContracts.UniversalReference.csproj
@@ -1,4 +1,4 @@
-<Project Sdk="Microsoft.NET.Sdk">
+<Project Sdk="Microsoft.NET.Sdk">
   <ItemGroup>
     <ProjectReference Include="..\Docfx.Common\Docfx.Common.csproj" />
     <ProjectReference Include="..\Docfx.YamlSerialization\Docfx.YamlSerialization.csproj" />
diff --git a/src/Docfx.DataContracts.UniversalReference/ItemViewModel.cs b/src/Docfx.DataContracts.UniversalReference/ItemViewModel.cs
index f4eb502560b..7e81cbf246f 100644
--- a/src/Docfx.DataContracts.UniversalReference/ItemViewModel.cs
+++ b/src/Docfx.DataContracts.UniversalReference/ItemViewModel.cs
@@ -357,16 +357,21 @@ public class ItemViewModel : IOverwriteDocumentViewModel
     [ExtensibleMember]
     [Newtonsoft.Json.JsonIgnore]
     [System.Text.Json.Serialization.JsonIgnore]
+    [System.Text.Json.Serialization.JsonPropertyName("__metadata__")]
     public Dictionary<string, object> Metadata { get; set; } = new();
 
     [EditorBrowsable(EditorBrowsableState.Never)]
     [YamlIgnore]
     [Newtonsoft.Json.JsonExtensionData]
     [System.Text.Json.Serialization.JsonExtensionData]
+    [System.Text.Json.Serialization.JsonInclude]
     [UniqueIdentityReferenceIgnore]
     [MarkdownContentIgnore]
-    public CompositeDictionary ExtensionData =>
-        CompositeDictionary
+    public CompositeDictionary ExtensionData
+    {
+        get
+        {
+            return CompositeDictionary
             .CreateBuilder()
             .Add(Constants.ExtensionMemberPrefix.Parent, ParentInDevLangs, JTokenConverter.Convert<string>)
             .Add("package" + Constants.PrefixSeparator, PackageInDevLangs, JTokenConverter.Convert<string>)
@@ -387,6 +392,12 @@ public class ItemViewModel : IOverwriteDocumentViewModel
             .Add(Constants.ExtensionMemberPrefix.FullName, FullNames, JTokenConverter.Convert<string>)
             .Add(string.Empty, Metadata)
             .Create();
+        }
+        private init
+        {
+            // init or getter is required for deserialize data with System.Text.Json.
+        }
+    }
 
     private IEnumerable<string> GetInheritanceUidReference(List<InheritanceTree> items)
     {
diff --git a/src/Docfx.DataContracts.UniversalReference/SyntaxDetailViewModel.cs b/src/Docfx.DataContracts.UniversalReference/SyntaxDetailViewModel.cs
index 7ab5e2fa0aa..34c11f2770b 100644
--- a/src/Docfx.DataContracts.UniversalReference/SyntaxDetailViewModel.cs
+++ b/src/Docfx.DataContracts.UniversalReference/SyntaxDetailViewModel.cs
@@ -22,7 +22,7 @@ public class SyntaxDetailViewModel
     [ExtensibleMember(Constants.ExtensionMemberPrefix.Content)]
     [Newtonsoft.Json.JsonIgnore]
     [System.Text.Json.Serialization.JsonIgnore]
-    public SortedList<string, string> Contents { get; set; } = new SortedList<string, string>();
+    public SortedList<string, string> Contents { get; set; } = [];
 
     [YamlMember(Alias = "parameters")]
     [JsonProperty("parameters")]
@@ -52,19 +52,30 @@ public class SyntaxDetailViewModel
     [ExtensibleMember]
     [Newtonsoft.Json.JsonIgnore]
     [System.Text.Json.Serialization.JsonIgnore]
+    [System.Text.Json.Serialization.JsonPropertyName("__metadata__")]
     public Dictionary<string, object> Metadata { get; set; } = new();
 
     [EditorBrowsable(EditorBrowsableState.Never)]
     [YamlIgnore]
     [Newtonsoft.Json.JsonExtensionData]
     [System.Text.Json.Serialization.JsonExtensionData]
+    [System.Text.Json.Serialization.JsonInclude]
     [UniqueIdentityReferenceIgnore]
     [MarkdownContentIgnore]
-    public CompositeDictionary ExtensionData =>
-        CompositeDictionary
+    public CompositeDictionary ExtensionData
+    {
+        get
+        {
+            return CompositeDictionary
             .CreateBuilder()
             .Add(Constants.ExtensionMemberPrefix.Content, Contents, JTokenConverter.Convert<string>)
             .Add(Constants.ExtensionMemberPrefix.Return, ReturnInDevLangs, JTokenConverter.Convert<ApiParameter>)
             .Add(string.Empty, Metadata)
             .Create();
+        }
+        private init
+        {
+            // init or getter is required for deserialize data with System.Text.Json.
+        }
+    }
 }
diff --git a/src/Docfx.Dotnet/CompilationHelper.cs b/src/Docfx.Dotnet/CompilationHelper.cs
index 47da38b3fcb..a8af3d50dd3 100644
--- a/src/Docfx.Dotnet/CompilationHelper.cs
+++ b/src/Docfx.Dotnet/CompilationHelper.cs
@@ -62,7 +62,7 @@ public static Compilation CreateCompilationFromCSharpFiles(IEnumerable<string> f
 
         return CS.CSharpCompilation.Create(
             assemblyName: null,
-            options: new CS.CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary, xmlReferenceResolver: XmlFileResolver.Default),
+            options: GetCSharpCompilationOptions(msbuildProperties),
             syntaxTrees: syntaxTrees,
             references: GetDefaultMetadataReferences("C#").Concat(references));
     }
@@ -74,7 +74,7 @@ public static Compilation CreateCompilationFromCSharpCode(string code, IDictiona
 
         return CS.CSharpCompilation.Create(
             name,
-            options: new CS.CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary, xmlReferenceResolver: XmlFileResolver.Default),
+            options: GetCSharpCompilationOptions(msbuildProperties),
             syntaxTrees: [syntaxTree],
             references: GetDefaultMetadataReferences("C#").Concat(references ?? []));
     }
@@ -86,7 +86,7 @@ public static Compilation CreateCompilationFromVBFiles(IEnumerable<string> files
 
         return VB.VisualBasicCompilation.Create(
             assemblyName: null,
-            options: new VB.VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary, globalImports: GetVBGlobalImports(), xmlReferenceResolver: XmlFileResolver.Default),
+            options: GetVisualBasicCompilationOptions(msbuildProperties),
             syntaxTrees: syntaxTrees,
             references: GetDefaultMetadataReferences("VB").Concat(references));
     }
@@ -98,7 +98,7 @@ public static Compilation CreateCompilationFromVBCode(string code, IDictionary<s
 
         return VB.VisualBasicCompilation.Create(
             name,
-            options: new VB.VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary, globalImports: GetVBGlobalImports(), xmlReferenceResolver: XmlFileResolver.Default),
+            options: GetVisualBasicCompilationOptions(msbuildProperties),
             syntaxTrees: [syntaxTree],
             references: GetDefaultMetadataReferences("VB").Concat(references ?? []));
     }
@@ -109,8 +109,8 @@ public static (Compilation, IAssemblySymbol) CreateCompilationFromAssembly(strin
         var compilation = CS.CSharpCompilation.Create(
             assemblyName: null,
             options: new CS.CSharpCompilationOptions(
-                outputKind            : OutputKind.DynamicallyLinkedLibrary,
-                metadataImportOptions : includePrivateMembers
+                outputKind: OutputKind.DynamicallyLinkedLibrary,
+                metadataImportOptions: includePrivateMembers
                     ? MetadataImportOptions.All
                     : MetadataImportOptions.Public
             ),
@@ -179,7 +179,12 @@ void GetReferenceAssembliesCore(PEFile assembly)
                 var file = assemblyResolver.FindAssemblyFile(reference);
                 if (file is null)
                 {
-                    Logger.LogWarning($"Unable to resolve assembly reference {reference}", code: "InvalidAssemblyReference");
+                    // Skip warning for some weired assembly references: https://github.com/dotnet/docfx/issues/9459
+                    if (reference.Version?.ToString() != "0.0.0.0")
+                    {
+                        Logger.LogWarning($"Unable to resolve assembly reference {reference}", code: "InvalidAssemblyReference");
+                    }
+
                     continue;
                 }
 
@@ -204,7 +209,7 @@ private static MetadataReference CreateMetadataReference(string assemblyPath)
 
     private static CS.CSharpParseOptions GetCSharpParseOptions(IDictionary<string, string> msbuildProperties)
     {
-        var preprocessorSymbols = (msbuildProperties.TryGetValue("DefineConstants", out var defineConstants))
+        var preprocessorSymbols = msbuildProperties.TryGetValue("DefineConstants", out var defineConstants)
             ? defineConstants.Split(';', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries)
             : null;
 
@@ -213,8 +218,8 @@ private static CS.CSharpParseOptions GetCSharpParseOptions(IDictionary<string, s
 
     private static VB.VisualBasicParseOptions GetVisualBasicParseOptions(IDictionary<string, string> msbuildProperties)
     {
-        IEnumerable<KeyValuePair<string, object>>? preprocessorSymbols = null;
-        if ((msbuildProperties.TryGetValue("DefineConstants", out var defineConstants)))
+        IEnumerable<KeyValuePair<string, object>>? preprocessorSymbols;
+        if (msbuildProperties.TryGetValue("DefineConstants", out var defineConstants))
         {
             // Visual Basic use symbol/value pairs that are separated by semicolons. And are `key = value` pair syntax:
             // https://learn.microsoft.com/en-us/visualstudio/msbuild/vbc-task?view=vs-2022
@@ -231,4 +236,26 @@ private static VB.VisualBasicParseOptions GetVisualBasicParseOptions(IDictionary
 
         return new VB.VisualBasicParseOptions(preprocessorSymbols: preprocessorSymbols);
     }
+
+    private static CS.CSharpCompilationOptions GetCSharpCompilationOptions(IDictionary<string, string> msbuildProperties)
+    {
+        var options = new CS.CSharpCompilationOptions(
+            OutputKind.DynamicallyLinkedLibrary,
+            xmlReferenceResolver: XmlFileResolver.Default);
+
+        if (msbuildProperties.TryGetValue("AllowUnsafeBlocks", out var valueText) && bool.TryParse(valueText, out var allowUnsafe))
+        {
+            options = options.WithAllowUnsafe(allowUnsafe);
+        }
+
+        return options;
+    }
+
+    private static VB.VisualBasicCompilationOptions GetVisualBasicCompilationOptions(IDictionary<string, string> msbuildProperties)
+    {
+        return new VB.VisualBasicCompilationOptions(
+            OutputKind.DynamicallyLinkedLibrary,
+            globalImports: GetVBGlobalImports(),
+            xmlReferenceResolver: XmlFileResolver.Default);
+    }
 }
diff --git a/src/Docfx.Dotnet/Docfx.Dotnet.csproj b/src/Docfx.Dotnet/Docfx.Dotnet.csproj
index 2864dce696b..9dbc6ec171a 100644
--- a/src/Docfx.Dotnet/Docfx.Dotnet.csproj
+++ b/src/Docfx.Dotnet/Docfx.Dotnet.csproj
@@ -28,18 +28,13 @@
     <ProjectReference Include="..\Docfx.Plugins\Docfx.Plugins.csproj" />
   </ItemGroup>
 
-  <ItemGroup Condition="'$(TargetFramework)' == 'net6.0'">
-    <PackageReference Include="Microsoft.Build" ExcludeAssets="runtime" />
-    <PackageReference Include="Microsoft.Build.Locator" />
-  </ItemGroup>
-
   <ItemGroup>
     <PackageReference Include="System.Formats.Asn1" />
     <PackageReference Include="HtmlAgilityPack" />
     <PackageReference Include="ICSharpCode.Decompiler" />
     <PackageReference Include="IgnoresAccessChecksToGenerator" PrivateAssets="All" />
     <PackageReference Include="OneOf" />
-    <PackageReference Include="OneOf.SourceGenerator" />
+    <PackageReference Include="OneOf.SourceGenerator" PrivateAssets="All" />
     <PackageReference Include="Markdig" />
     <PackageReference Include="Microsoft.CodeAnalysis" />
     <PackageReference Include="Microsoft.CodeAnalysis.Common" />
diff --git a/src/Docfx.Dotnet/DotnetApiCatalog.ApiPage.cs b/src/Docfx.Dotnet/DotnetApiCatalog.ApiPage.cs
index 7842c8b625f..7540da20dc2 100644
--- a/src/Docfx.Dotnet/DotnetApiCatalog.ApiPage.cs
+++ b/src/Docfx.Dotnet/DotnetApiCatalog.ApiPage.cs
@@ -126,7 +126,7 @@ void Api(int level, string title, ISymbol symbol, Compilation compilation)
                 var id = Regex.Replace(uid, @"\W", "_");
                 var commentId = VisitorHelper.GetCommentId(symbol);
                 var source = config.DisableGitFeatures ? null : VisitorHelper.GetSourceDetail(symbol, compilation);
-                var git = source is null || source.Remote is null ? null
+                var git = source?.Remote is null ? null
                     : new GitSource(source.Remote.Repo, source.Remote.Branch, source.Remote.Path, source.StartLine + 1);
                 var src = git is null ? null : options.SourceUrl?.Invoke(git) ?? GitUtility.GetSourceUrl(git);
                 var deprecated = Deprecated(symbol);
@@ -707,14 +707,14 @@ Inline Cref(string commentId)
         Inline ShortLink(ISymbol symbol, Compilation compilation)
         {
             var title = SymbolFormatter.GetNameWithType(symbol, SyntaxLanguage.CSharp);
-            var url = SymbolUrlResolver.GetSymbolUrl(symbol, compilation, config.MemberLayout, symbolUrlKind, allAssemblies);
+            var url = SymbolUrlResolver.GetSymbolUrl(symbol, compilation, config.MemberLayout, symbolUrlKind, allAssemblies, filter);
             return Link(title, url);
         }
 
         Inline FullLink(ISymbol symbol, Compilation compilation)
         {
             var parts = SymbolFormatter.GetNameWithTypeParts(symbol, SyntaxLanguage.CSharp);
-            var linkItems = SymbolFormatter.ToLinkItems(parts, compilation, config.MemberLayout, allAssemblies, overload: false, symbolUrlKind);
+            var linkItems = SymbolFormatter.ToLinkItems(parts, compilation, config.MemberLayout, allAssemblies, overload: false, filter, symbolUrlKind);
 
             return linkItems.Select(i => Link(i.DisplayName, i.Href)).ToArray();
         }
@@ -722,7 +722,7 @@ Inline FullLink(ISymbol symbol, Compilation compilation)
         Inline NameOnlyLink(ISymbol symbol, Compilation compilation)
         {
             var title = SymbolFormatter.GetName(symbol, SyntaxLanguage.CSharp);
-            var url = SymbolUrlResolver.GetSymbolUrl(symbol, compilation, config.MemberLayout, symbolUrlKind, allAssemblies);
+            var url = SymbolUrlResolver.GetSymbolUrl(symbol, compilation, config.MemberLayout, symbolUrlKind, allAssemblies, filter);
             return Link(title, url);
         }
 
diff --git a/src/Docfx.Dotnet/DotnetApiCatalog.Compile.cs b/src/Docfx.Dotnet/DotnetApiCatalog.Compile.cs
index baabab65bd3..480849fcfcb 100644
--- a/src/Docfx.Dotnet/DotnetApiCatalog.Compile.cs
+++ b/src/Docfx.Dotnet/DotnetApiCatalog.Compile.cs
@@ -142,7 +142,8 @@ await LoadCompilationFromProject(project.AbsolutePath) is { } compilation)
                 Logger.LogInfo($"Loading project {path}");
                 if (!config.NoRestore)
                 {
-                    await Process.Start("dotnet", $"restore \"{path}\"").WaitForExitAsync();
+                    using var process = Process.Start("dotnet", $"restore \"{path}\"");
+                    await process.WaitForExitAsync();
                 }
                 project = await workspace.OpenProjectAsync(path, msbuildLogger);
 
diff --git a/src/Docfx.Dotnet/DotnetApiCatalog.ManagedReference.cs b/src/Docfx.Dotnet/DotnetApiCatalog.ManagedReference.cs
index 3a8e0fd6b2f..3612add070e 100644
--- a/src/Docfx.Dotnet/DotnetApiCatalog.ManagedReference.cs
+++ b/src/Docfx.Dotnet/DotnetApiCatalog.ManagedReference.cs
@@ -84,7 +84,7 @@ void ResolveAndExportYamlMetadata(
             }
 
             // generate manifest file
-            JsonUtility.Serialize(Path.Combine(config.OutputFolder, ".manifest"), indexer, Newtonsoft.Json.Formatting.Indented);
+            JsonUtility.Serialize(Path.Combine(config.OutputFolder, ".manifest"), indexer, indented: true);
         }
     }
 
@@ -185,13 +185,13 @@ private static void MergeReferences(Dictionary<string, ReferenceItem> result, Li
             {
                 foreach (var pair in project.References)
                 {
-                    if (!result.ContainsKey(pair.Key))
+                    if (result.TryGetValue(pair.Key, out var value))
                     {
-                        result[pair.Key] = pair.Value;
+                        value.Merge(pair.Value);
                     }
                     else
                     {
-                        result[pair.Key].Merge(pair.Value);
+                        result[pair.Key] = pair.Value;
                     }
                 }
             }
diff --git a/src/Docfx.Dotnet/DotnetApiCatalog.Toc.cs b/src/Docfx.Dotnet/DotnetApiCatalog.Toc.cs
index e6bb7fb6a29..788da38ef94 100644
--- a/src/Docfx.Dotnet/DotnetApiCatalog.Toc.cs
+++ b/src/Docfx.Dotnet/DotnetApiCatalog.Toc.cs
@@ -61,7 +61,7 @@ IEnumerable<TocNode> CreateToc(ISymbol symbol, Compilation compilation)
 
             switch (symbol)
             {
-                case INamespaceSymbol ns when ns.IsGlobalNamespace:
+                case INamespaceSymbol {IsGlobalNamespace: true} ns:
                     foreach (var child in ns.GetNamespaceMembers())
                         foreach (var item in CreateToc(child, compilation))
                             yield return item;
@@ -248,7 +248,7 @@ void InsertCategory(TocNodeType type, string name)
                     case CategoryLayout.Nested:
                         {
                             // Skip when parent node is category node.
-                            if (parentTocNode != null && parentTocNode.type == TocNodeType.None)
+                            if (parentTocNode is {type: TocNodeType.None})
                                 return;
 
                             // If items contains specified type node. Create new TocNode for category. and move related node to child node.
@@ -263,7 +263,7 @@ void InsertCategory(TocNodeType type, string name)
 
                     // Insert category as text label.
                     case CategoryLayout.Flattened:
-                    default:                    
+                    default:
                         {
                             if (items.FirstOrDefault(i => i.type == type) is { } node)
                                 items.Insert(items.IndexOf(node), new() { name = name });
diff --git a/src/Docfx.Dotnet/DotnetApiCatalog.cs b/src/Docfx.Dotnet/DotnetApiCatalog.cs
index 948cb23cf8c..1a1ffe66aae 100644
--- a/src/Docfx.Dotnet/DotnetApiCatalog.cs
+++ b/src/Docfx.Dotnet/DotnetApiCatalog.cs
@@ -38,11 +38,11 @@ public static async Task GenerateManagedReferenceYamlFiles(string configPath, Do
         try
         {
             var configDirectory = Path.GetDirectoryName(Path.GetFullPath(configPath));
-            var config = JObject.Parse(File.ReadAllText(configPath));
+            var config = JObject.Parse(await File.ReadAllTextAsync(configPath));
             if (config.TryGetValue("metadata", out var value))
             {
                 Logger.Rules = config["rules"]?.ToObject<Dictionary<string, LogLevel>>();
-                await Exec(value.ToObject<MetadataJsonConfig>(JsonUtility.DefaultSerializer.Value), options, configDirectory);
+                await Exec(value.ToObject<MetadataJsonConfig>(NewtonsoftJsonUtility.DefaultSerializer.Value), options, configDirectory);
             }
         }
         finally
@@ -57,8 +57,6 @@ internal static async Task Exec(MetadataJsonConfig config, DotnetApiOptions opti
     {
         var stopwatch = Stopwatch.StartNew();
 
-        EnsureMSBuildLocator();
-
         try
         {
             string originalGlobalNamespaceId = VisitorHelper.GlobalNamespaceId;
@@ -116,26 +114,6 @@ void WriteYaml(string outputFolder, string id, Build.ApiPage.ApiPage apiPage)
         }
     }
 
-    private static void EnsureMSBuildLocator()
-    {
-#if NET6_0
-        try
-        {
-            if (!Microsoft.Build.Locator.MSBuildLocator.IsRegistered)
-            {
-                var vs = Microsoft.Build.Locator.MSBuildLocator.RegisterDefaults() ?? throw new Docfx.Exceptions.ExtractMetadataException(
-                    $"Cannot find a supported .NET Core SDK. Install .NET Core SDK {Environment.Version.Major}.{Environment.Version.Minor}.x to build .NET API docs.");
-
-                Logger.LogInfo($"Using {vs.Name} {vs.Version}");
-            }
-        }
-        catch (Exception e)
-        {
-            throw new Docfx.Exceptions.ExtractMetadataException(e.Message, e);
-        }
-#endif
-    }
-
     private static ExtractMetadataConfig ConvertConfig(MetadataJsonItemConfig configModel, string configDirectory, string outputDirectory)
     {
         var projects = configModel.Src;
diff --git a/src/Docfx.Dotnet/Filters/ConfigFilterRule.cs b/src/Docfx.Dotnet/Filters/ConfigFilterRule.cs
index 83d70d0292f..e07f033e7ef 100644
--- a/src/Docfx.Dotnet/Filters/ConfigFilterRule.cs
+++ b/src/Docfx.Dotnet/Filters/ConfigFilterRule.cs
@@ -46,7 +46,7 @@ public static ConfigFilterRule Load(string configFile)
         }
         if (!File.Exists(configFile)) throw new FileNotFoundException($"Filter Config file {configFile} does not exist!");
 
-        ConfigFilterRule rule = null;
+        ConfigFilterRule rule;
         try
         {
             rule = YamlUtility.Deserialize<ConfigFilterRule>(configFile);
diff --git a/src/Docfx.Dotnet/Filters/ConfigFilterRuleItemUnion.cs b/src/Docfx.Dotnet/Filters/ConfigFilterRuleItemUnion.cs
index 2ee947681c1..acb2cc10a92 100644
--- a/src/Docfx.Dotnet/Filters/ConfigFilterRuleItemUnion.cs
+++ b/src/Docfx.Dotnet/Filters/ConfigFilterRuleItemUnion.cs
@@ -1,6 +1,7 @@
 // Licensed to the .NET Foundation under one or more agreements.
 // The .NET Foundation licenses this file to you under the MIT license.
 
+using System.Text.Json.Serialization;
 using YamlDotNet.Serialization;
 
 namespace Docfx.Dotnet;
@@ -44,6 +45,7 @@ public ConfigFilterRuleExcludeItem Exclude
         }
     }
 
+    [YamlIgnore]
     public ConfigFilterRuleItem Rule
     {
         get
diff --git a/src/Docfx.Dotnet/ManagedReference/Models/AdditionalNotes.cs b/src/Docfx.Dotnet/ManagedReference/Models/AdditionalNotes.cs
index ba1067dd0b7..df79f85cb75 100644
--- a/src/Docfx.Dotnet/ManagedReference/Models/AdditionalNotes.cs
+++ b/src/Docfx.Dotnet/ManagedReference/Models/AdditionalNotes.cs
@@ -10,13 +10,13 @@
 namespace Docfx.DataContracts.ManagedReference;
 
 public class AdditionalNotes
-{   
+{
     [YamlMember(Alias = "caller")]
     [JsonProperty("caller")]
     [JsonPropertyName("caller")]
     [MarkdownContent]
     public string Caller { get; set; }
-        
+
     [YamlMember(Alias = "implementer")]
     [JsonProperty("implementer")]
     [JsonPropertyName("implementer")]
diff --git a/src/Docfx.Dotnet/ManagedReference/Models/ItemViewModel.cs b/src/Docfx.Dotnet/ManagedReference/Models/ItemViewModel.cs
index 80252839716..406d47e1aaa 100644
--- a/src/Docfx.Dotnet/ManagedReference/Models/ItemViewModel.cs
+++ b/src/Docfx.Dotnet/ManagedReference/Models/ItemViewModel.cs
@@ -372,20 +372,31 @@ public string FullNameForVB
     [ExtensibleMember]
     [Newtonsoft.Json.JsonIgnore]
     [System.Text.Json.Serialization.JsonIgnore]
+    [System.Text.Json.Serialization.JsonPropertyName("__metadata__")]
     public Dictionary<string, object> Metadata { get; set; } = new();
 
     [EditorBrowsable(EditorBrowsableState.Never)]
     [YamlIgnore]
     [Newtonsoft.Json.JsonExtensionData]
     [System.Text.Json.Serialization.JsonExtensionData]
+    [System.Text.Json.Serialization.JsonInclude]
     [UniqueIdentityReferenceIgnore]
     [MarkdownContentIgnore]
-    public IDictionary<string, object> ExtensionData =>
-        CompositeDictionary
+    public IDictionary<string, object> ExtensionData
+    {
+        get
+        {
+            return CompositeDictionary
             .CreateBuilder()
             .Add(Constants.ExtensionMemberPrefix.Name, Names, JTokenConverter.Convert<string>)
             .Add(Constants.ExtensionMemberPrefix.NameWithType, NamesWithType, JTokenConverter.Convert<string>)
             .Add(Constants.ExtensionMemberPrefix.FullName, FullNames, JTokenConverter.Convert<string>)
             .Add(string.Empty, Metadata)
             .Create();
+        }
+        private init
+        {
+            // init or getter is required for deserialize data with System.Text.Json.
+        }
+    }
 }
diff --git a/src/Docfx.Dotnet/ManagedReference/Models/SyntaxDetailViewModel.cs b/src/Docfx.Dotnet/ManagedReference/Models/SyntaxDetailViewModel.cs
index 330470f034b..8aa49b39a22 100644
--- a/src/Docfx.Dotnet/ManagedReference/Models/SyntaxDetailViewModel.cs
+++ b/src/Docfx.Dotnet/ManagedReference/Models/SyntaxDetailViewModel.cs
@@ -89,11 +89,21 @@ public string ContentForVB
     [YamlIgnore]
     [Newtonsoft.Json.JsonExtensionData]
     [System.Text.Json.Serialization.JsonExtensionData]
+    [System.Text.Json.Serialization.JsonInclude]
     [UniqueIdentityReferenceIgnore]
     [MarkdownContentIgnore]
-    public IDictionary<string, object> ExtensionData =>
-        CompositeDictionary
+    public IDictionary<string, object> ExtensionData
+    {
+        get
+        {
+            return CompositeDictionary
             .CreateBuilder()
             .Add(Constants.ExtensionMemberPrefix.Content, Contents, JTokenConverter.Convert<string>)
             .Create();
+        }
+        private init
+        {
+            // init or getter is required for deserialize data with System.Text.Json.
+        }
+    }
 }
diff --git a/src/Docfx.Dotnet/ManagedReference/Resolvers/NormalizeSyntax.cs b/src/Docfx.Dotnet/ManagedReference/Resolvers/NormalizeSyntax.cs
index 1fe8e00c895..61794226839 100644
--- a/src/Docfx.Dotnet/ManagedReference/Resolvers/NormalizeSyntax.cs
+++ b/src/Docfx.Dotnet/ManagedReference/Resolvers/NormalizeSyntax.cs
@@ -17,7 +17,7 @@ public void Run(MetadataModel yaml, ResolverContext context)
             (member, parent) =>
             {
                 // get all the possible places where link is possible
-                if (member.Syntax != null && member.Syntax.Content != null)
+                if (member.Syntax is {Content: not null})
                 {
                     SyntaxLanguage[] keys = new SyntaxLanguage[member.Syntax.Content.Count];
                     member.Syntax.Content.Keys.CopyTo(keys, 0);
diff --git a/src/Docfx.Dotnet/ManagedReference/Resolvers/ResolveReference.cs b/src/Docfx.Dotnet/ManagedReference/Resolvers/ResolveReference.cs
index 2d61267a482..1b59b26ee8c 100644
--- a/src/Docfx.Dotnet/ManagedReference/Resolvers/ResolveReference.cs
+++ b/src/Docfx.Dotnet/ManagedReference/Resolvers/ResolveReference.cs
@@ -27,7 +27,7 @@ public void Run(MetadataModel yaml, ResolverContext context)
                     page = parent;
                     current.References = null;
                 }
-                if (documentReferences != null && documentReferences.Count > 0)
+                if (documentReferences is {Count: > 0})
                 {
                     foreach (var key in documentReferences.Keys)
                     {
@@ -56,7 +56,7 @@ private static void TryAddReference(ResolverContext context, MetadataItem page,
         {
             if (context.References.TryGetValue(key, out ReferenceItem item))
             {
-                var reference = context.References[key].Clone();
+                var reference = item.Clone();
                 page.References.Add(key, reference);
                 addingReferences.Add(reference);
             }
diff --git a/src/Docfx.Dotnet/ManagedReference/Resolvers/SetDerivedClass.cs b/src/Docfx.Dotnet/ManagedReference/Resolvers/SetDerivedClass.cs
index 8a9401b2a32..c812f1a6e0d 100644
--- a/src/Docfx.Dotnet/ManagedReference/Resolvers/SetDerivedClass.cs
+++ b/src/Docfx.Dotnet/ManagedReference/Resolvers/SetDerivedClass.cs
@@ -11,7 +11,7 @@ internal class SetDerivedClass : IResolverPipeline
 
     public void Run(MetadataModel yaml, ResolverContext context)
     {
-        if (yaml.Members != null && yaml.Members.Count > 0)
+        if (yaml.Members is {Count: > 0})
         {
             UpdateDerivedClassMapping(yaml.Members, context.References);
             AppendDerivedClass(yaml.Members);
@@ -23,7 +23,7 @@ private void UpdateDerivedClassMapping(List<MetadataItem> items, Dictionary<stri
         foreach (var item in items ?? Enumerable.Empty<MetadataItem>())
         {
             var inheritance = item.Inheritance;
-            if (inheritance != null && inheritance.Count > 0)
+            if (inheritance is {Count: > 0})
             {
                 var superClass = inheritance[inheritance.Count - 1];
 
diff --git a/src/Docfx.Dotnet/ManagedReference/Visitors/SymbolVisitorAdapter.cs b/src/Docfx.Dotnet/ManagedReference/Visitors/SymbolVisitorAdapter.cs
index bf44f4f0c41..0ede8bde10a 100644
--- a/src/Docfx.Dotnet/ManagedReference/Visitors/SymbolVisitorAdapter.cs
+++ b/src/Docfx.Dotnet/ManagedReference/Visitors/SymbolVisitorAdapter.cs
@@ -96,7 +96,7 @@ public override MetadataItem VisitAssembly(IAssemblySymbol symbol)
             {
                 { SyntaxLanguage.Default, symbol.MetadataName },
             },
-                DisplayQualifiedNames = new SortedList<SyntaxLanguage, string>
+            DisplayQualifiedNames = new SortedList<SyntaxLanguage, string>
             {
                 { SyntaxLanguage.Default, symbol.MetadataName },
             },
@@ -185,7 +185,7 @@ public override MetadataItem VisitNamedType(INamedTypeSymbol symbol)
             var member in symbol.GetMembers()
             .Where(static s =>
                 s is not INamedTypeSymbol
-                && ! s.Name.StartsWith('<')
+                && !s.Name.StartsWith('<')
                 && (s is not IMethodSymbol ms || ms.MethodKind != MethodKind.StaticConstructor)
             ))
         {
@@ -238,7 +238,7 @@ public override MetadataItem VisitMethod(IMethodSymbol symbol)
         }
         _generator.GenerateSyntax(symbol, result.Syntax, _filter);
 
-        if (symbol.IsOverride && symbol.OverriddenMethod != null)
+        if (symbol is {IsOverride: true, OverriddenMethod: not null})
         {
             result.Overridden = AddSpecReference(symbol.OverriddenMethod, typeGenericParameters, methodGenericParameters);
         }
@@ -296,7 +296,7 @@ public override MetadataItem VisitEvent(IEventSymbol symbol)
 
         var typeGenericParameters = symbol.ContainingType.IsGenericType ? symbol.ContainingType.Accept(TypeGenericParameterNameVisitor.Instance) : EmptyListOfString;
 
-        if (symbol.IsOverride && symbol.OverriddenEvent != null)
+        if (symbol is {IsOverride: true, OverriddenEvent: not null})
         {
             result.Overridden = AddSpecReference(symbol.OverriddenEvent, typeGenericParameters);
         }
@@ -350,7 +350,7 @@ public override MetadataItem VisitProperty(IPropertySymbol symbol)
             Debug.Assert(result.Syntax.Return.Type != null);
         }
 
-        if (symbol.IsOverride && symbol.OverriddenProperty != null)
+        if (symbol is {IsOverride: true, OverriddenProperty: not null})
         {
             result.Overridden = AddSpecReference(symbol.OverriddenProperty, typeGenericParameters);
         }
@@ -374,7 +374,7 @@ public string AddReference(ISymbol symbol)
             Debug.Fail("Unexpected member type.");
             throw new InvalidOperationException("Unexpected member type.");
         }
-        return _generator.AddReference(symbol, _references);
+        return _generator.AddReference(symbol, _references, _filter);
     }
 
     public string AddReference(string id, string commentId)
@@ -390,7 +390,7 @@ public string AddReference(string id, string commentId)
             reference.QualifiedNameParts = new();
             reference.IsDefinition = symbol.IsDefinition;
 
-            _generator.GenerateReference(symbol, reference, asOverload: false);
+            _generator.GenerateReference(symbol, reference, asOverload: false, _filter);
         }
 
         _references[id] = reference;
@@ -406,7 +406,7 @@ public string AddOverloadReference(ISymbol symbol)
             case MemberType.Constructor:
             case MemberType.Method:
             case MemberType.Operator:
-                return _generator.AddOverloadReference(symbol, _references);
+                return _generator.AddOverloadReference(symbol, _references, _filter);
             default:
                 Debug.Fail("Unexpected member type.");
                 throw new InvalidOperationException("Unexpected member type.");
@@ -418,7 +418,7 @@ public string AddSpecReference(
         IReadOnlyList<string> typeGenericParameters = null,
         IReadOnlyList<string> methodGenericParameters = null)
     {
-        return _generator.AddSpecReference(symbol, typeGenericParameters, methodGenericParameters, _references, this);
+        return _generator.AddSpecReference(symbol, typeGenericParameters, methodGenericParameters, _references, _filter);
     }
 
     private static MemberType GetMemberTypeFromSymbol(ISymbol symbol)
diff --git a/src/Docfx.Dotnet/ManagedReference/Visitors/VisitorHelper.cs b/src/Docfx.Dotnet/ManagedReference/Visitors/VisitorHelper.cs
index 0e55d5666b9..0db6a1a587f 100644
--- a/src/Docfx.Dotnet/ManagedReference/Visitors/VisitorHelper.cs
+++ b/src/Docfx.Dotnet/ManagedReference/Visitors/VisitorHelper.cs
@@ -29,7 +29,7 @@ public static string GetId(ISymbol symbol)
             return null;
         }
 
-        if (symbol is INamespaceSymbol namespaceSymbol && namespaceSymbol.IsGlobalNamespace)
+        if (symbol is INamespaceSymbol {IsGlobalNamespace: true})
         {
             return GlobalNamespaceId;
         }
@@ -68,8 +68,8 @@ private static string GetDocumentationCommentId(ISymbol symbol)
 
         if (InGlobalNamespace(symbol) && !string.IsNullOrEmpty(GlobalNamespaceId))
         {
-            bool isNamespace = (symbol is INamespaceSymbol);
-            bool isTypeParameter = (symbol is ITypeParameterSymbol);
+            bool isNamespace = symbol is INamespaceSymbol;
+            bool isTypeParameter = symbol is ITypeParameterSymbol;
             if (!isNamespace && !isTypeParameter)
             {
                 str = str.Insert(2, GlobalNamespaceId + ".");
diff --git a/src/Docfx.Dotnet/ManagedReference/Visitors/YamlModelGenerator.cs b/src/Docfx.Dotnet/ManagedReference/Visitors/YamlModelGenerator.cs
index 2517ffe2526..79d205e1f36 100644
--- a/src/Docfx.Dotnet/ManagedReference/Visitors/YamlModelGenerator.cs
+++ b/src/Docfx.Dotnet/ManagedReference/Visitors/YamlModelGenerator.cs
@@ -30,7 +30,7 @@ public void DefaultVisit(ISymbol symbol, MetadataItem item)
         item.DisplayQualifiedNames[SyntaxLanguage.VB] = SymbolFormatter.GetQualifiedName(symbol, SyntaxLanguage.VB);
     }
 
-    public void GenerateReference(ISymbol symbol, ReferenceItem reference, bool asOverload)
+    public void GenerateReference(ISymbol symbol, ReferenceItem reference, bool asOverload, SymbolFilter filter)
     {
         if (!reference.NameParts.ContainsKey(SyntaxLanguage.CSharp))
             reference.NameParts.Add(SyntaxLanguage.CSharp, new());
@@ -39,9 +39,9 @@ public void GenerateReference(ISymbol symbol, ReferenceItem reference, bool asOv
         if (!reference.QualifiedNameParts.ContainsKey(SyntaxLanguage.CSharp))
             reference.QualifiedNameParts.Add(SyntaxLanguage.CSharp, new());
 
-        reference.NameParts[SyntaxLanguage.CSharp] = SymbolFormatter.GetNameParts(symbol, SyntaxLanguage.CSharp, nullableReferenceType: false, asOverload).ToLinkItems(_compilation, _memberLayout, _allAssemblies, asOverload);
-        reference.NameWithTypeParts[SyntaxLanguage.CSharp] = SymbolFormatter.GetNameWithTypeParts(symbol, SyntaxLanguage.CSharp, nullableReferenceType: false, asOverload).ToLinkItems(_compilation, _memberLayout, _allAssemblies, asOverload);
-        reference.QualifiedNameParts[SyntaxLanguage.CSharp] = SymbolFormatter.GetQualifiedNameParts(symbol, SyntaxLanguage.CSharp, nullableReferenceType: false, asOverload).ToLinkItems(_compilation, _memberLayout, _allAssemblies, asOverload);
+        reference.NameParts[SyntaxLanguage.CSharp] = SymbolFormatter.GetNameParts(symbol, SyntaxLanguage.CSharp, nullableReferenceType: false, asOverload).ToLinkItems(_compilation, _memberLayout, _allAssemblies, asOverload, filter);
+        reference.NameWithTypeParts[SyntaxLanguage.CSharp] = SymbolFormatter.GetNameWithTypeParts(symbol, SyntaxLanguage.CSharp, nullableReferenceType: false, asOverload).ToLinkItems(_compilation, _memberLayout, _allAssemblies, asOverload, filter);
+        reference.QualifiedNameParts[SyntaxLanguage.CSharp] = SymbolFormatter.GetQualifiedNameParts(symbol, SyntaxLanguage.CSharp, nullableReferenceType: false, asOverload).ToLinkItems(_compilation, _memberLayout, _allAssemblies, asOverload, filter);
 
         if (!reference.NameParts.ContainsKey(SyntaxLanguage.VB))
             reference.NameParts.Add(SyntaxLanguage.VB, new());
@@ -50,9 +50,9 @@ public void GenerateReference(ISymbol symbol, ReferenceItem reference, bool asOv
         if (!reference.QualifiedNameParts.ContainsKey(SyntaxLanguage.VB))
             reference.QualifiedNameParts.Add(SyntaxLanguage.VB, new());
 
-        reference.NameParts[SyntaxLanguage.VB] = SymbolFormatter.GetNameParts(symbol, SyntaxLanguage.VB, nullableReferenceType: false, asOverload).ToLinkItems(_compilation, _memberLayout, _allAssemblies, asOverload);
-        reference.NameWithTypeParts[SyntaxLanguage.VB] = SymbolFormatter.GetNameWithTypeParts(symbol, SyntaxLanguage.VB, nullableReferenceType: false, asOverload).ToLinkItems(_compilation, _memberLayout, _allAssemblies, asOverload);
-        reference.QualifiedNameParts[SyntaxLanguage.VB] = SymbolFormatter.GetQualifiedNameParts(symbol, SyntaxLanguage.VB, nullableReferenceType: false, asOverload).ToLinkItems(_compilation, _memberLayout, _allAssemblies, asOverload);
+        reference.NameParts[SyntaxLanguage.VB] = SymbolFormatter.GetNameParts(symbol, SyntaxLanguage.VB, nullableReferenceType: false, asOverload).ToLinkItems(_compilation, _memberLayout, _allAssemblies, asOverload, filter);
+        reference.NameWithTypeParts[SyntaxLanguage.VB] = SymbolFormatter.GetNameWithTypeParts(symbol, SyntaxLanguage.VB, nullableReferenceType: false, asOverload).ToLinkItems(_compilation, _memberLayout, _allAssemblies, asOverload, filter);
+        reference.QualifiedNameParts[SyntaxLanguage.VB] = SymbolFormatter.GetQualifiedNameParts(symbol, SyntaxLanguage.VB, nullableReferenceType: false, asOverload).ToLinkItems(_compilation, _memberLayout, _allAssemblies, asOverload, filter);
     }
 
     public void GenerateSyntax(ISymbol symbol, SyntaxDetail syntax, SymbolFilter filter)
@@ -61,7 +61,7 @@ public void GenerateSyntax(ISymbol symbol, SyntaxDetail syntax, SymbolFilter fil
         syntax.Content[SyntaxLanguage.VB] = SymbolFormatter.GetSyntax(symbol, SyntaxLanguage.VB, filter);
     }
 
-    public string AddReference(ISymbol symbol, Dictionary<string, ReferenceItem> references)
+    public string AddReference(ISymbol symbol, Dictionary<string, ReferenceItem> references, SymbolFilter filter)
     {
         var id = VisitorHelper.GetId(symbol);
         var reference = new ReferenceItem
@@ -72,7 +72,7 @@ public string AddReference(ISymbol symbol, Dictionary<string, ReferenceItem> ref
             IsDefinition = symbol.IsDefinition,
             CommentId = VisitorHelper.GetCommentId(symbol)
         };
-        GenerateReference(symbol, reference, false);
+        GenerateReference(symbol, reference, false, filter);
 
         if (!references.TryAdd(id, reference))
         {
@@ -82,7 +82,7 @@ public string AddReference(ISymbol symbol, Dictionary<string, ReferenceItem> ref
         return id;
     }
 
-    public string AddOverloadReference(ISymbol symbol, Dictionary<string, ReferenceItem> references)
+    public string AddOverloadReference(ISymbol symbol, Dictionary<string, ReferenceItem> references, SymbolFilter filter)
     {
         var uidBody = VisitorHelper.GetOverloadIdBody(symbol);
         var reference = new ReferenceItem
@@ -94,7 +94,7 @@ public string AddOverloadReference(ISymbol symbol, Dictionary<string, ReferenceI
             CommentId = "Overload:" + uidBody
         };
 
-        GenerateReference(symbol, reference, true);
+        GenerateReference(symbol, reference, true, filter);
 
         var uid = uidBody + "*";
         if (!references.TryAdd(uid, reference))
@@ -110,7 +110,7 @@ public string AddSpecReference(
         IReadOnlyList<string> typeGenericParameters,
         IReadOnlyList<string> methodGenericParameters,
         Dictionary<string, ReferenceItem> references,
-        SymbolVisitorAdapter adapter)
+        SymbolFilter filter)
     {
         var rawId = VisitorHelper.GetId(symbol);
         var id = SpecIdHelper.GetSpecId(symbol, typeGenericParameters, methodGenericParameters);
@@ -124,7 +124,7 @@ public string AddSpecReference(
             NameWithTypeParts = new(),
             QualifiedNameParts = new(),
         };
-        GenerateReference(symbol, reference, false);
+        GenerateReference(symbol, reference, false, filter);
         var originalSymbol = symbol;
         var reducedFrom = (symbol as IMethodSymbol)?.ReducedFrom;
         if (reducedFrom != null)
@@ -135,10 +135,10 @@ public string AddSpecReference(
 
         if (!reference.IsDefinition.Value && rawId != null)
         {
-            reference.Definition = AddReference(originalSymbol.OriginalDefinition, references);
+            reference.Definition = AddReference(originalSymbol.OriginalDefinition, references, filter);
         }
 
-        reference.Parent = GetReferenceParent(originalSymbol, typeGenericParameters, methodGenericParameters, references, adapter);
+        reference.Parent = GetReferenceParent(originalSymbol, typeGenericParameters, methodGenericParameters, references, filter);
         reference.CommentId = VisitorHelper.GetCommentId(originalSymbol);
 
         if (!references.TryAdd(id, reference))
@@ -153,7 +153,7 @@ private string GetReferenceParent(ISymbol symbol,
         IReadOnlyList<string> typeGenericParameters,
         IReadOnlyList<string> methodGenericParameters,
         Dictionary<string, ReferenceItem> references,
-        SymbolVisitorAdapter adapter)
+        SymbolFilter filter)
     {
         switch (symbol.Kind)
         {
@@ -172,7 +172,7 @@ private string GetReferenceParent(ISymbol symbol,
                     {
                         return null;
                     }
-                    return AddSpecReference(parentSymbol, typeGenericParameters, methodGenericParameters, references, adapter); ;
+                    return AddSpecReference(parentSymbol, typeGenericParameters, methodGenericParameters, references, filter);
                 }
             default:
                 return null;
diff --git a/src/Docfx.Dotnet/MetadataJsonConfig.cs b/src/Docfx.Dotnet/MetadataJsonConfig.cs
index 1bf92029531..3bf5e79957f 100644
--- a/src/Docfx.Dotnet/MetadataJsonConfig.cs
+++ b/src/Docfx.Dotnet/MetadataJsonConfig.cs
@@ -272,6 +272,9 @@ internal class MetadataJsonItemConfig
 /// </summary>
 internal class MetadataJsonConfig : List<MetadataJsonItemConfig>
 {
+    // Constructor that required for System.Text.Json deserialization.
+    public MetadataJsonConfig() { }
+
     /// <summary>
     /// Initializes a new instance of the <see cref="MetadataJsonConfig"/> class.
     /// </summary>
diff --git a/src/Docfx.Dotnet/Parsers/XHtmlWriter.cs b/src/Docfx.Dotnet/Parsers/XHtmlWriter.cs
index 7ed0ba882dc..02baa717eb7 100644
--- a/src/Docfx.Dotnet/Parsers/XHtmlWriter.cs
+++ b/src/Docfx.Dotnet/Parsers/XHtmlWriter.cs
@@ -1,4 +1,7 @@
-using System.Xml;
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.Xml;
 
 /// Licensed to the .NET Foundation under one or more agreements.
 // The .NET Foundation licenses this file to you under the MIT license.
diff --git a/src/Docfx.Dotnet/Parsers/XmlComment.cs b/src/Docfx.Dotnet/Parsers/XmlComment.cs
index 05a8b4d7716..20afb45bf3a 100644
--- a/src/Docfx.Dotnet/Parsers/XmlComment.cs
+++ b/src/Docfx.Dotnet/Parsers/XmlComment.cs
@@ -42,9 +42,9 @@ internal class XmlComment
 
     public List<string> Examples { get; private set; }
 
-    public Dictionary<string, string> Parameters { get; private set; }
+    public Dictionary<string, string> Parameters { get; }
 
-    public Dictionary<string, string> TypeParameters { get; private set; }
+    public Dictionary<string, string> TypeParameters { get; }
 
     private XmlComment(string xml, XmlCommentParserContext context)
     {
@@ -356,7 +356,7 @@ private void ResolveCrefLink(XNode node, string nodeSelector, Action<string, str
             if (!success)
             {
                 var detailedInfo = new StringBuilder();
-                if (_context != null && _context.Source != null)
+                if (_context is {Source: not null})
                 {
                     if (!string.IsNullOrEmpty(_context.Source.Name))
                     {
@@ -374,9 +374,9 @@ private void ResolveCrefLink(XNode node, string nodeSelector, Action<string, str
 
                 if (detailedInfo.Length == 0 && node is XDocument doc)
                 {
-                    var memberName = (string) doc.Element("member")?.Attribute("name");
+                    var memberName = (string)doc.Element("member")?.Attribute("name");
 
-                    if (! string.IsNullOrEmpty(memberName))
+                    if (!string.IsNullOrEmpty(memberName))
                     {
                         detailedInfo.Append(", member name is ");
                         detailedInfo.Append(memberName);
@@ -631,7 +631,7 @@ static void MarkdownXmlDecode(MarkdownObject node)
                         MarkdownXmlDecode(child);
                     break;
 
-                case LeafBlock leafBlock when leafBlock.Inline is not null:
+                case LeafBlock {Inline: not null} leafBlock:
                     foreach (var child in leafBlock.Inline)
                         MarkdownXmlDecode(child);
                     break;
diff --git a/src/Docfx.Dotnet/SourceLink/PortableCustomDebugInfoKinds.cs b/src/Docfx.Dotnet/SourceLink/PortableCustomDebugInfoKinds.cs
index 400d4c35062..d9857577ca3 100644
--- a/src/Docfx.Dotnet/SourceLink/PortableCustomDebugInfoKinds.cs
+++ b/src/Docfx.Dotnet/SourceLink/PortableCustomDebugInfoKinds.cs
@@ -1,6 +1,5 @@
 // Licensed to the .NET Foundation under one or more agreements.
 // The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
 
 namespace Microsoft.CodeAnalysis.Debugging;
 
diff --git a/src/Docfx.Dotnet/SourceLink/SourceLinkMap.cs b/src/Docfx.Dotnet/SourceLink/SourceLinkMap.cs
index 8c05b28d44c..a65b97499bf 100644
--- a/src/Docfx.Dotnet/SourceLink/SourceLinkMap.cs
+++ b/src/Docfx.Dotnet/SourceLink/SourceLinkMap.cs
@@ -1,14 +1,10 @@
 // Licensed to the .NET Foundation under one or more agreements.
 // The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
 
 using System.Collections.ObjectModel;
 using System.Diagnostics;
 using System.Text.Json;
-
-#if NETCOREAPP
 using System.Diagnostics.CodeAnalysis;
-#endif
 
 #nullable enable
 
@@ -180,9 +176,7 @@ private static bool TryParseEntry(string key, string value, out Entry entry)
     /// <exception cref="ArgumentNullException"><paramref name="path"/> is null.</exception>
     public bool TryGetUri(
         string path,
-#if NETCOREAPP
         [NotNullWhen(true)]
-#endif
         out string? uri)
     {
         ArgumentNullException.ThrowIfNull(path);
diff --git a/src/Docfx.Dotnet/SourceLink/SymbolSourceDocumentFinder.cs b/src/Docfx.Dotnet/SourceLink/SymbolSourceDocumentFinder.cs
index 1701f1581b7..4e25efc4499 100644
--- a/src/Docfx.Dotnet/SourceLink/SymbolSourceDocumentFinder.cs
+++ b/src/Docfx.Dotnet/SourceLink/SymbolSourceDocumentFinder.cs
@@ -1,6 +1,5 @@
 // Licensed to the .NET Foundation under one or more agreements.
 // The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
 
 using System.Reflection.Metadata;
 using System.Reflection.Metadata.Ecma335;
diff --git a/src/Docfx.Dotnet/SymbolFilter.cs b/src/Docfx.Dotnet/SymbolFilter.cs
index d0ce53fabc4..47685377b9d 100644
--- a/src/Docfx.Dotnet/SymbolFilter.cs
+++ b/src/Docfx.Dotnet/SymbolFilter.cs
@@ -95,7 +95,7 @@ bool IncludeAttributeDefault(ISymbol symbol)
     private bool IsSymbolAccessible(ISymbol symbol)
     {
         // TODO: should we include implicitly declared members like constructors? They are part of the API contract.
-        if (symbol.IsImplicitlyDeclared && symbol.Kind is not SymbolKind.Namespace)
+        if (symbol is {IsImplicitlyDeclared: true, Kind: not SymbolKind.Namespace})
             return false;
 
         if (_config.IncludeExplicitInterfaceImplementations &&
diff --git a/src/Docfx.Dotnet/SymbolFormatter.Symbols.cs b/src/Docfx.Dotnet/SymbolFormatter.Symbols.cs
index f4b5decea86..4ed64f8862b 100644
--- a/src/Docfx.Dotnet/SymbolFormatter.Symbols.cs
+++ b/src/Docfx.Dotnet/SymbolFormatter.Symbols.cs
@@ -1,4 +1,7 @@
-using System.Collections.Immutable;
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.Collections.Immutable;
 using System.Diagnostics.CodeAnalysis;
 using System.Globalization;
 using System.Reflection;
@@ -33,9 +36,9 @@ private class ParameterSymbol : IParameterSymbol
 
         public NullableAnnotation NullableAnnotation => default;
 
-        public ImmutableArray<CustomModifier> CustomModifiers => ImmutableArray<CustomModifier>.Empty;
+        public ImmutableArray<CustomModifier> CustomModifiers => [];
 
-        public ImmutableArray<CustomModifier> RefCustomModifiers => ImmutableArray<CustomModifier>.Empty;
+        public ImmutableArray<CustomModifier> RefCustomModifiers => [];
 
         public int Ordinal => 0;
 
@@ -211,12 +214,9 @@ private class PropertySymbol : IPropertySymbol
         public string ToDisplayString(SymbolDisplayFormat format = null) => Inner.ToDisplayString(format);
         public ImmutableArray<SymbolDisplayPart> ToMinimalDisplayParts(SemanticModel semanticModel, int position, SymbolDisplayFormat format = null) => Inner.ToMinimalDisplayParts(semanticModel, position, format);
         public string ToMinimalDisplayString(SemanticModel semanticModel, int position, SymbolDisplayFormat format = null) => Inner.ToMinimalDisplayString(semanticModel, position, format);
-
-#if NET8_0_OR_GREATER
         public IPropertySymbol PartialDefinitionPart => Inner.PartialDefinitionPart;
         public IPropertySymbol PartialImplementationPart => Inner.PartialImplementationPart;
         public bool IsPartialDefinition => Inner.IsPartialDefinition;
-#endif
     }
 
     public class MethodSymbol : IMethodSymbol
diff --git a/src/Docfx.Dotnet/SymbolFormatter.Syntax.cs b/src/Docfx.Dotnet/SymbolFormatter.Syntax.cs
index 0a5dac67529..9e8db3d1da9 100644
--- a/src/Docfx.Dotnet/SymbolFormatter.Syntax.cs
+++ b/src/Docfx.Dotnet/SymbolFormatter.Syntax.cs
@@ -1,4 +1,7 @@
-using System.Collections.Immutable;
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.Collections.Immutable;
 using Docfx.DataContracts.ManagedReference;
 using Microsoft.CodeAnalysis;
 using CS = Microsoft.CodeAnalysis.CSharp;
@@ -178,7 +181,7 @@ private void AddModifiersIfNeeded(ISymbol symbol)
         private ImmutableArray<SymbolDisplayPart> RemoveNamedTypeConstraints(ISymbol symbol)
         {
             if (symbol.Kind is not SymbolKind.NamedType)
-                return ImmutableArray<SymbolDisplayPart>.Empty;
+                return [];
 
             var result = ImmutableArray.CreateBuilder<SymbolDisplayPart>();
 
@@ -365,7 +368,7 @@ private void AddTypedConstant(TypedConstant typedConstant)
                     AddPunctuation(")");
                     break;
 
-                case TypedConstantKind.Array when !typedConstant.IsNull && typedConstant.Type is not null:
+                case TypedConstantKind.Array when typedConstant is {IsNull: false, Type: not null}:
                     AddKeyword("new", "New");
                     AddSpace();
                     AddTypeName(typedConstant.Type);
@@ -457,7 +460,7 @@ private void AddEnumConstant(TypedConstant typedConstant)
 
         private bool ExpandEnumClassName(ISymbol symbol, SymbolDisplayPart part)
         {
-            if (symbol.Kind != SymbolKind.Field && part.Kind == SymbolDisplayPartKind.EnumMemberName && part.Symbol is not null)
+            if (symbol.Kind != SymbolKind.Field && part is {Kind: SymbolDisplayPartKind.EnumMemberName, Symbol: not null})
             {
                 _parts.Add(new(SymbolDisplayPartKind.EnumName, part.Symbol.ContainingSymbol, part.Symbol.ContainingSymbol.Name));
                 _parts.Add(new(SymbolDisplayPartKind.Punctuation, null, "."));
@@ -469,7 +472,7 @@ private bool ExpandEnumClassName(ISymbol symbol, SymbolDisplayPart part)
 
         private bool StaticClassToVBModule(ISymbol symbol, SymbolDisplayPart part)
         {
-            if (Language is SyntaxLanguage.VB && symbol.IsStatic && symbol.Kind is SymbolKind.NamedType &&
+            if (Language is SyntaxLanguage.VB && symbol is {IsStatic: true, Kind: SymbolKind.NamedType} &&
                 part.Kind == SymbolDisplayPartKind.Keyword && part.ToString() == "Class")
             {
                 _parts.Add(new(SymbolDisplayPartKind.Keyword, null, "Module"));
@@ -521,7 +524,7 @@ private ImmutableArray<SymbolDisplayPart> GetDisplayParts(ISymbol symbol, Symbol
             }
             catch
             {
-                return ImmutableArray<SymbolDisplayPart>.Empty;
+                return [];
             }
         }
     }
diff --git a/src/Docfx.Dotnet/SymbolFormatter.cs b/src/Docfx.Dotnet/SymbolFormatter.cs
index d6fc9c4eac4..0e6bf1b496d 100644
--- a/src/Docfx.Dotnet/SymbolFormatter.cs
+++ b/src/Docfx.Dotnet/SymbolFormatter.cs
@@ -1,4 +1,7 @@
-using System.Collections.Immutable;
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.Collections.Immutable;
 using Docfx.DataContracts.ManagedReference;
 using Microsoft.CodeAnalysis;
 using CS = Microsoft.CodeAnalysis.CSharp;
@@ -105,12 +108,12 @@ public static ImmutableArray<SymbolDisplayPart> GetSyntaxParts(ISymbol symbol, S
         }
         catch (InvalidOperationException)
         {
-            return ImmutableArray<SymbolDisplayPart>.Empty;
+            return [];
         }
     }
 
     public static List<LinkItem> ToLinkItems(this ImmutableArray<SymbolDisplayPart> parts,
-        Compilation compilation, MemberLayout memberLayout, HashSet<IAssemblySymbol> allAssemblies, bool overload, SymbolUrlKind urlKind = SymbolUrlKind.Html)
+        Compilation compilation, MemberLayout memberLayout, HashSet<IAssemblySymbol> allAssemblies, bool overload, SymbolFilter filter, SymbolUrlKind urlKind = SymbolUrlKind.Html)
     {
         var result = new List<LinkItem>();
         foreach (var part in parts)
@@ -128,14 +131,14 @@ LinkItem ToLinkItem(SymbolDisplayPart part)
             if (symbol is null || part.Kind is SymbolDisplayPartKind.TypeParameterName)
                 return new() { DisplayName = part.ToString() };
 
-            if (symbol is INamedTypeSymbol type && type.IsGenericType)
+            if (symbol is INamedTypeSymbol {IsGenericType: true} type)
                 symbol = type.ConstructedFrom;
 
             return new()
             {
                 Name = overload ? VisitorHelper.GetOverloadId(symbol) : VisitorHelper.GetId(symbol),
                 DisplayName = part.ToString(),
-                Href = SymbolUrlResolver.GetSymbolUrl(symbol, compilation, memberLayout, urlKind, allAssemblies),
+                Href = SymbolUrlResolver.GetSymbolUrl(symbol, compilation, memberLayout, urlKind, allAssemblies, filter),
                 IsExternalPath = symbol.IsExtern || symbol.DeclaringSyntaxReferences.Length == 0,
             };
         }
@@ -165,7 +168,7 @@ private static ImmutableArray<SymbolDisplayPart> GetDisplayParts(
         }
         catch
         {
-            return ImmutableArray<SymbolDisplayPart>.Empty;
+            return [];
         }
 
         static ImmutableArray<SymbolDisplayPart> GetCastOperatorOverloadDisplayParts(ImmutableArray<SymbolDisplayPart> parts)
diff --git a/src/Docfx.Dotnet/SymbolHelper.cs b/src/Docfx.Dotnet/SymbolHelper.cs
index 4620ae88d21..d49889a6a32 100644
--- a/src/Docfx.Dotnet/SymbolHelper.cs
+++ b/src/Docfx.Dotnet/SymbolHelper.cs
@@ -1,4 +1,7 @@
-using System.Diagnostics.CodeAnalysis;
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.Diagnostics.CodeAnalysis;
 using Microsoft.CodeAnalysis;
 
 #nullable enable
@@ -30,7 +33,7 @@ public static bool IsMember(this ISymbol symbol)
 
     public static bool IsClass(this ISymbol symbol)
     {
-        return symbol.Kind is SymbolKind.NamedType && symbol is INamedTypeSymbol type && type.TypeKind is TypeKind.Class;
+        return symbol.Kind is SymbolKind.NamedType && symbol is INamedTypeSymbol {TypeKind: TypeKind.Class};
     }
 
     public static bool IsEnumMember(this ISymbol symbol)
diff --git a/src/Docfx.Dotnet/SymbolUrlResolver.Langword.cs b/src/Docfx.Dotnet/SymbolUrlResolver.Langword.cs
index 2a570548dbf..5b252a05514 100644
--- a/src/Docfx.Dotnet/SymbolUrlResolver.Langword.cs
+++ b/src/Docfx.Dotnet/SymbolUrlResolver.Langword.cs
@@ -1,4 +1,7 @@
-#nullable enable
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+#nullable enable
 
 using System.Text.Json;
 
diff --git a/src/Docfx.Dotnet/SymbolUrlResolver.MSLearn.cs b/src/Docfx.Dotnet/SymbolUrlResolver.MSLearn.cs
index 2fe50df2a46..0faf52089ff 100644
--- a/src/Docfx.Dotnet/SymbolUrlResolver.MSLearn.cs
+++ b/src/Docfx.Dotnet/SymbolUrlResolver.MSLearn.cs
@@ -1,4 +1,7 @@
-using System.Text;
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.Text;
 using Microsoft.CodeAnalysis;
 
 #nullable enable
@@ -106,7 +109,7 @@ internal static string GetUrlFragmentFromUid(string uid)
                 case '}':
                     sb.Append("))");
                     break;
-                case char c when (c >= 'a' && c <= 'z') || (c >= '0' && c <= '9'):
+                case char and (>= 'a' and <= 'z' or >= '0' and <= '9'):
                 case '(' or ')' or '*' or '@':
                     sb.Append(ch);
                     break;
diff --git a/src/Docfx.Dotnet/SymbolUrlResolver.MSLearnAssemblies.cs b/src/Docfx.Dotnet/SymbolUrlResolver.MSLearnAssemblies.cs
index 3f7fdb9e998..36ba972743b 100644
--- a/src/Docfx.Dotnet/SymbolUrlResolver.MSLearnAssemblies.cs
+++ b/src/Docfx.Dotnet/SymbolUrlResolver.MSLearnAssemblies.cs
@@ -1,4 +1,7 @@
-using System.Text.Json;
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.Text.Json;
 
 namespace Docfx.Dotnet;
 
diff --git a/src/Docfx.Dotnet/SymbolUrlResolver.SourceLink.cs b/src/Docfx.Dotnet/SymbolUrlResolver.SourceLink.cs
index a5b9ebbdb68..adc14d64930 100644
--- a/src/Docfx.Dotnet/SymbolUrlResolver.SourceLink.cs
+++ b/src/Docfx.Dotnet/SymbolUrlResolver.SourceLink.cs
@@ -1,4 +1,7 @@
-using System.Reflection.Metadata;
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.Reflection.Metadata;
 using System.Reflection.Metadata.Ecma335;
 using System.Reflection.PortableExecutable;
 using System.Runtime.CompilerServices;
diff --git a/src/Docfx.Dotnet/SymbolUrlResolver.cs b/src/Docfx.Dotnet/SymbolUrlResolver.cs
index d95738a4422..98fca2734af 100644
--- a/src/Docfx.Dotnet/SymbolUrlResolver.cs
+++ b/src/Docfx.Dotnet/SymbolUrlResolver.cs
@@ -1,4 +1,7 @@
-using System.Text.RegularExpressions;
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.Text.RegularExpressions;
 using Microsoft.CodeAnalysis;
 
 #nullable enable
@@ -13,12 +16,15 @@ enum SymbolUrlKind
 
 internal static partial class SymbolUrlResolver
 {
-    public static string? GetSymbolUrl(ISymbol symbol, Compilation compilation, MemberLayout memberLayout, SymbolUrlKind urlKind, HashSet<IAssemblySymbol> allAssemblies)
+    public static string? GetSymbolUrl(ISymbol symbol, Compilation compilation, MemberLayout memberLayout, SymbolUrlKind urlKind, HashSet<IAssemblySymbol> allAssemblies, SymbolFilter filter)
     {
         // Reduce symbol into generic definitions
         symbol = symbol is IMethodSymbol method ? method.ReducedFrom ?? symbol : symbol;
         symbol = symbol.OriginalDefinition ?? symbol;
 
+        if (!filter.IncludeApi(symbol))
+            return null;
+
         return GetDocfxUrl(symbol, memberLayout, urlKind, allAssemblies)
             ?? GetMicrosoftLearnUrl(symbol)
             ?? GetPdbSourceLinkUrl(compilation, symbol);
diff --git a/src/Docfx.Dotnet/YamlViewModelExtensions.cs b/src/Docfx.Dotnet/YamlViewModelExtensions.cs
index b24dba95762..e1690b0bce4 100644
--- a/src/Docfx.Dotnet/YamlViewModelExtensions.cs
+++ b/src/Docfx.Dotnet/YamlViewModelExtensions.cs
@@ -180,7 +180,7 @@ private static ReferenceViewModel ToReferenceViewModel(KeyValuePair<string, Refe
             Parent = model.Value.Parent,
             Definition = model.Value.Definition,
         };
-        if (model.Value.NameParts != null && model.Value.NameParts.Count > 0)
+        if (model.Value.NameParts is {Count: > 0})
         {
             result.Name = GetName(model.Value.NameParts, SyntaxLanguage.Default);
             var nameForCSharp = GetName(model.Value.NameParts, SyntaxLanguage.CSharp);
@@ -270,7 +270,7 @@ public static ItemViewModel ToItemViewModel(this MetadataItem model, ExtractMeta
             Attributes = model.Attributes,
         };
 
-        if (model.Parent != null && model.Parent.Name != null && !model.Name.StartsWith(model.Parent.Name))
+        if (model.Parent is {Name: not null} && !model.Name.StartsWith(model.Parent.Name))
         {
             result.Id = model.Name.Substring(model.Name.LastIndexOf('.') + 1);
         }
@@ -330,7 +330,7 @@ public static SyntaxDetailViewModel ToSyntaxDetailViewModel(this SyntaxDetail mo
             TypeParameters = model.TypeParameters,
             Return = model.Return,
         };
-        if (model.Content != null && model.Content.Count > 0)
+        if (model.Content is {Count: > 0})
         {
             result.Content = model.Content.GetLanguageProperty(SyntaxLanguage.Default);
             var contentForCSharp = model.Content.GetLanguageProperty(SyntaxLanguage.CSharp);
@@ -379,7 +379,7 @@ public static TValue GetLanguageProperty<TValue>(this SortedList<SyntaxLanguage,
 
     private static void AddChildren(MetadataItem model, PageViewModel result, ExtractMetadataConfig config)
     {
-        if (model.Items != null && model.Items.Count > 0)
+        if (model.Items is {Count: > 0})
         {
             foreach (var item in model.Items)
             {
diff --git a/src/Docfx.Glob/Docfx.Glob.csproj b/src/Docfx.Glob/Docfx.Glob.csproj
index fafa6a9259a..a89ab8e2e8f 100644
--- a/src/Docfx.Glob/Docfx.Glob.csproj
+++ b/src/Docfx.Glob/Docfx.Glob.csproj
@@ -1,4 +1,4 @@
-<Project Sdk="Microsoft.NET.Sdk">
+<Project Sdk="Microsoft.NET.Sdk">
   <ItemGroup>
     <ProjectReference Include="..\Docfx.Common\Docfx.Common.csproj" />
   </ItemGroup>
diff --git a/src/Docfx.Glob/GlobMatcher.cs b/src/Docfx.Glob/GlobMatcher.cs
index 5fee9fcaf26..9e83ac95a83 100644
--- a/src/Docfx.Glob/GlobMatcher.cs
+++ b/src/Docfx.Glob/GlobMatcher.cs
@@ -137,7 +137,7 @@ private static IEnumerable<string> Split(string path, params char[] splitter)
             yield return parts[i] + "/";
         }
 
-        yield return path.EndsWith("/", StringComparison.Ordinal) ? parts[parts.Length - 1] + "/" : parts[parts.Length - 1];
+        yield return path.EndsWith('/') ? parts[parts.Length - 1] + "/" : parts[parts.Length - 1];
     }
 
     private string ConvertSingleGlob(IEnumerable<GlobRegexItem> regexItems)
@@ -148,7 +148,7 @@ private string ConvertSingleGlob(IEnumerable<GlobRegexItem> regexItems)
 
     private static bool IsFolderPath(string path)
     {
-        return path.EndsWith("/", StringComparison.Ordinal);
+        return path.EndsWith('/');
     }
 
     /// <summary>
@@ -165,10 +165,8 @@ private GlobRegexItem ConvertSingleGlobPart(string globPart)
         }
 
         StringBuilder builder = new();
-        bool escaping = false;
         bool disableEscape = !Options.HasFlag(GlobMatcherOptions.AllowEscape);
         bool hasMagic = false;
-        CharClass currentCharClass = null;
         string patternStart = string.Empty;
 
         // .abc will not be matched unless . is explicitly specified
@@ -215,8 +213,8 @@ private GlobRegexItem ConvertSingleGlobPart(string globPart)
                     hasMagic = true;
                     break;
                 case '[':
-                    escaping = false;
-                    currentCharClass = new CharClass();
+                    bool escaping = false;
+                    CharClass currentCharClass = new();
                     int cur = i + 1;
                     while (cur < globPart.Length)
                     {
@@ -408,14 +406,9 @@ private bool MatchOne(string[] fileParts, GlobRegexItem[] globParts, bool matchP
 
     private bool DisallowedMatchExists(string filePart)
     {
-        if (filePart == "."
-            || filePart == ".."
-            || (!_allowDotMatch && filePart.StartsWith(".", StringComparison.Ordinal)))
-        {
-            return true;
-        }
-
-        return false;
+        return filePart == "."
+               || filePart == ".."
+               || (!_allowDotMatch && filePart.StartsWith('.'));
     }
 
     private static string UnescapeGlob(string s)
@@ -728,7 +721,7 @@ public override string ToString()
         }
     }
 
-        private sealed class GlobRegexItem
+    private sealed class GlobRegexItem
     {
         public static readonly GlobRegexItem GlobStar = new(GlobRegexItemType.GlobStar);
         public static readonly GlobRegexItem GlobStarForFileOnly = new(GlobRegexItemType.GlobStarForFileOnly);
diff --git a/src/Docfx.Glob/GlobUtility.cs b/src/Docfx.Glob/GlobUtility.cs
index b21093933f9..449df83ea3d 100644
--- a/src/Docfx.Glob/GlobUtility.cs
+++ b/src/Docfx.Glob/GlobUtility.cs
@@ -59,7 +59,7 @@ private static GlobMatcherOptions GetMatchOptionsFromItem(FileMappingItem item)
         return options;
     }
 
-    private static void CheckPatterns(IEnumerable<string> patterns)
+    private static void CheckPatterns(IReadOnlyCollection<string> patterns)
     {
         if (patterns.Any(s => s.Contains('\\')))
         {
diff --git a/src/Docfx.MarkdigEngine.Extensions/Aggregator/TabGroupAggregator.cs b/src/Docfx.MarkdigEngine.Extensions/Aggregator/TabGroupAggregator.cs
index 6c10611f183..b2d531fccd1 100644
--- a/src/Docfx.MarkdigEngine.Extensions/Aggregator/TabGroupAggregator.cs
+++ b/src/Docfx.MarkdigEngine.Extensions/Aggregator/TabGroupAggregator.cs
@@ -106,7 +106,7 @@ private static TabItemBlock CreateTabItem(
     private static Tuple<string, string, LinkInline> ParseHeading(HeadingBlock block)
     {
         var child = block.Inline.FirstChild;
-        if (child != null && child.NextSibling == null && child is LinkInline link)
+        if (child is {NextSibling: null} and LinkInline link)
         {
             var m = HrefRegex.Match(link.Url);
             if (m.Success)
diff --git a/src/Docfx.MarkdigEngine.Extensions/CodeSnippet/CodeSnippetExtractor.cs b/src/Docfx.MarkdigEngine.Extensions/CodeSnippet/CodeSnippetExtractor.cs
index a3986c06d69..072a9b97d3d 100644
--- a/src/Docfx.MarkdigEngine.Extensions/CodeSnippet/CodeSnippetExtractor.cs
+++ b/src/Docfx.MarkdigEngine.Extensions/CodeSnippet/CodeSnippetExtractor.cs
@@ -39,12 +39,12 @@ public Dictionary<string, CodeRange> GetAllTags(string[] lines, ref HashSet<int>
                     tagName = tagStack.Count > 0 ? tagStack.Pop() : string.Empty;
                 }
 
-                if (result.ContainsKey(tagName))
+                if (result.TryGetValue(tagName, out var range))
                 {
-                    if (result[tagName].End == 0)
+                    if (range.End == 0)
                     {
                         // we meet the first end tag, ignore the following ones
-                        result[tagName].End = index;
+                        range.End = index;
                     }
                 }
 
@@ -68,7 +68,7 @@ private static bool MatchTag(string line, string template, out string tagName, b
         tagName = string.Empty;
         if (string.IsNullOrEmpty(line) || string.IsNullOrEmpty(template)) return false;
 
-        var splittedTemplate = template.Split(new[] { TagNamePlaceHolder }, StringSplitOptions.None);
+        var splittedTemplate = template.Split(TagNamePlaceHolder);
         var beforeTagName = splittedTemplate[0];
         var afterTagName = splittedTemplate.Length == 2 ? splittedTemplate[1] : string.Empty;
 
diff --git a/src/Docfx.MarkdigEngine.Extensions/CodeSnippet/HtmlCodeSnippetRenderer.cs b/src/Docfx.MarkdigEngine.Extensions/CodeSnippet/HtmlCodeSnippetRenderer.cs
index 6a8544d5ef6..7cbd512a00d 100644
--- a/src/Docfx.MarkdigEngine.Extensions/CodeSnippet/HtmlCodeSnippetRenderer.cs
+++ b/src/Docfx.MarkdigEngine.Extensions/CodeSnippet/HtmlCodeSnippetRenderer.cs
@@ -233,7 +233,7 @@ protected override void Write(HtmlRenderer renderer, CodeSnippet codeSnippet)
 
     private string GetNoteBookContent(string content, string tagName, CodeSnippet obj)
     {
-        JObject contentObject = null;
+        JObject contentObject;
         try
         {
             contentObject = JObject.Parse(content);
@@ -245,7 +245,7 @@ private string GetNoteBookContent(string content, string tagName, CodeSnippet ob
         }
 
         string sourceJsonPath = $"$..cells[?(@.metadata.name=='{tagName}')].source";
-        JToken sourceObject = null;
+        JToken sourceObject;
         try
         {
             sourceObject = contentObject.SelectToken(sourceJsonPath);
diff --git a/src/Docfx.MarkdigEngine.Extensions/Docfx.MarkdigEngine.Extensions.csproj b/src/Docfx.MarkdigEngine.Extensions/Docfx.MarkdigEngine.Extensions.csproj
index 5818d808afb..18a10cb1a23 100644
--- a/src/Docfx.MarkdigEngine.Extensions/Docfx.MarkdigEngine.Extensions.csproj
+++ b/src/Docfx.MarkdigEngine.Extensions/Docfx.MarkdigEngine.Extensions.csproj
@@ -1,4 +1,4 @@
-<Project Sdk="Microsoft.NET.Sdk">
+<Project Sdk="Microsoft.NET.Sdk">
   <ItemGroup>
     <PackageReference Include="Markdig" />
     <PackageReference Include="Newtonsoft.Json" />
diff --git a/src/Docfx.MarkdigEngine.Extensions/ExtensionsHelper.cs b/src/Docfx.MarkdigEngine.Extensions/ExtensionsHelper.cs
index b21f9348a98..1619e0bd5d2 100644
--- a/src/Docfx.MarkdigEngine.Extensions/ExtensionsHelper.cs
+++ b/src/Docfx.MarkdigEngine.Extensions/ExtensionsHelper.cs
@@ -266,14 +266,6 @@ private static bool MatchPath(ref StringSlice slice, ref string path)
             }
             else
             {
-                if (title.Length >= 2 && title.First() == '\'' && title.Last() == '\'')
-                {
-                    title = title.Substring(1, title.Length - 2).Trim();
-                }
-                else if (title.Length >= 2 && title.First() == '\"' && title.Last() == '\"')
-                {
-                    title = title.Substring(1, title.Length - 2).Trim();
-                }
                 path = includedFilePath;
                 slice.NextChar();
                 return true;
diff --git a/src/Docfx.MarkdigEngine.Extensions/MarkdigExtensionSetting.cs b/src/Docfx.MarkdigEngine.Extensions/MarkdigExtensionSetting.cs
index aee8908e57f..87cf1a0d20a 100644
--- a/src/Docfx.MarkdigEngine.Extensions/MarkdigExtensionSetting.cs
+++ b/src/Docfx.MarkdigEngine.Extensions/MarkdigExtensionSetting.cs
@@ -14,18 +14,10 @@ namespace Docfx.MarkdigEngine.Extensions;
 /// Markdig extension setting.
 /// </summary>
 [DebuggerDisplay("Name = {Name}")]
-[Newtonsoft.Json.JsonConverter(typeof(MarkdigExtensionSettingConverter))]
+[Newtonsoft.Json.JsonConverter(typeof(MarkdigExtensionSettingConverter.NewtonsoftJsonConverter))]
+[System.Text.Json.Serialization.JsonConverter(typeof(MarkdigExtensionSettingConverter.SystemTextJsonConverter))]
 public class MarkdigExtensionSetting
 {
-    private static readonly JsonSerializerOptions DefaultSerializerOptions = new()
-    {
-        AllowTrailingCommas = true,
-        PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
-        Converters = {
-                        new JsonStringEnumConverter()
-                     },
-    };
-
     /// <summary>
     /// Initializes a new instance of the <see cref="MarkdigExtensionSetting"/> class.
     /// </summary>
@@ -59,7 +51,7 @@ public MarkdigExtensionSetting(string name, JsonNode? options = null)
     public T GetOptions<T>(T fallbackValue)
     {
         return Options is null ? fallbackValue
-            : JsonSerializer.Deserialize<T>(JsonSerializer.Serialize(Options), DefaultSerializerOptions) ?? fallbackValue;
+            : Options.Value.Deserialize<T>(MarkdigExtensionSettingConverter.DefaultSerializerOptions) ?? fallbackValue;
     }
 
     /// <summary>
diff --git a/src/Docfx.MarkdigEngine.Extensions/MarkdigExtensionSettingConverter.NewtonsoftJson.cs b/src/Docfx.MarkdigEngine.Extensions/MarkdigExtensionSettingConverter.NewtonsoftJson.cs
new file mode 100644
index 00000000000..2b5b4b514d9
--- /dev/null
+++ b/src/Docfx.MarkdigEngine.Extensions/MarkdigExtensionSettingConverter.NewtonsoftJson.cs
@@ -0,0 +1,88 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using Newtonsoft.Json.Linq;
+using Newtonsoft.Json;
+
+namespace Docfx.MarkdigEngine.Extensions;
+
+internal partial class MarkdigExtensionSettingConverter
+{
+    internal class NewtonsoftJsonConverter : Newtonsoft.Json.JsonConverter
+    {
+        /// <inheritdoc/>
+        public override bool CanConvert(Type objectType)
+        {
+            return objectType == typeof(MarkdigExtensionSetting);
+        }
+
+        /// <inheritdoc/>
+        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
+        {
+            // var value = reader.Value;
+            switch (reader.TokenType)
+            {
+                case JsonToken.String:
+                    {
+                        var name = (string)reader.Value;
+                        return new MarkdigExtensionSetting(name);
+                    }
+                case JsonToken.StartObject:
+                    {
+                        var jObj = JObject.Load(reader);
+
+                        var props = jObj.Properties().ToArray();
+
+                        // Object key must be the name of markdig extension.
+                        if (props.Length != 1)
+                            return null;
+
+                        var prop = props[0];
+                        var name = prop.Name;
+
+                        var options = prop.Value;
+                        if (options.Count() == 0)
+                        {
+                            return new MarkdigExtensionSetting(name);
+                        }
+
+                        // Convert JToken to JsonElement.
+                        var json = options.ToString(Formatting.None);
+                        using var doc = System.Text.Json.JsonDocument.Parse(json);
+                        var jsonElement = doc.RootElement.Clone();
+
+                        return new MarkdigExtensionSetting(name)
+                        {
+                            Options = jsonElement,
+                        };
+                    }
+
+                default:
+                    return null;
+            }
+        }
+
+        /// <inheritdoc/>
+        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
+        {
+            if (value == null)
+                return;
+
+            var model = (MarkdigExtensionSetting)value;
+
+            if (model.Options == null || !model.Options.HasValue)
+            {
+                writer.WriteValue(model.Name);
+            }
+            else
+            {
+                writer.WriteStartObject();
+                writer.WritePropertyName(model.Name);
+                var json = System.Text.Json.JsonSerializer.Serialize(model.Options, DefaultSerializerOptions);
+                writer.WriteRawValue(json);
+                writer.WriteEndObject();
+            }
+        }
+    }
+}
+
diff --git a/src/Docfx.MarkdigEngine.Extensions/MarkdigExtensionSettingConverter.SystemTextJson.cs b/src/Docfx.MarkdigEngine.Extensions/MarkdigExtensionSettingConverter.SystemTextJson.cs
new file mode 100644
index 00000000000..bd903601a1b
--- /dev/null
+++ b/src/Docfx.MarkdigEngine.Extensions/MarkdigExtensionSettingConverter.SystemTextJson.cs
@@ -0,0 +1,74 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.Text.Json;
+using System.Text.Json.Serialization;
+using System.Text.Json.Nodes;
+using System.Xml.Linq;
+
+namespace Docfx.MarkdigEngine.Extensions;
+
+internal partial class MarkdigExtensionSettingConverter
+{
+    internal class SystemTextJsonConverter : JsonConverter<MarkdigExtensionSetting>
+    {
+        public override MarkdigExtensionSetting Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.String:
+                    {
+                        var name = reader.GetString();
+                        return new MarkdigExtensionSetting(name);
+                    }
+                case JsonTokenType.StartObject:
+                    {
+                        var elem = JsonElement.ParseValue(ref reader);
+
+                        var props = elem.EnumerateObject().ToArray();
+
+                        // Object key must be the name of markdig extension.
+                        if (props.Length != 1)
+                            return null;
+
+                        var prop = props[0];
+                        var name = prop.Name;
+                        var value = prop.Value;
+
+                        if (value.ValueKind != JsonValueKind.Object)
+                        {
+                            return new MarkdigExtensionSetting(name);
+                        }
+
+                        return new MarkdigExtensionSetting(name)
+                        {
+                            Options = value,
+                        };
+                    }
+                default:
+                    throw new JsonException($"TokenType({reader.TokenType}) is not supported.");
+            }
+        }
+
+        public override void Write(Utf8JsonWriter writer, MarkdigExtensionSetting value, JsonSerializerOptions options)
+        {
+            if (value == null)
+                return;
+
+            var model = (MarkdigExtensionSetting)value;
+
+            if (model.Options == null || !model.Options.HasValue)
+            {
+                writer.WriteStringValue(model.Name);
+            }
+            else
+            {
+                writer.WriteStartObject();
+                writer.WritePropertyName(model.Name);
+                var json = JsonSerializer.Serialize(model.Options, DefaultSerializerOptions);
+                writer.WriteRawValue(json);
+                writer.WriteEndObject();
+            }
+        }
+    }
+}
diff --git a/src/Docfx.MarkdigEngine.Extensions/MarkdigExtensionSettingConverter.cs b/src/Docfx.MarkdigEngine.Extensions/MarkdigExtensionSettingConverter.cs
index a8c9bf2a1be..34bd3056a9c 100644
--- a/src/Docfx.MarkdigEngine.Extensions/MarkdigExtensionSettingConverter.cs
+++ b/src/Docfx.MarkdigEngine.Extensions/MarkdigExtensionSettingConverter.cs
@@ -1,96 +1,25 @@
 // Licensed to the .NET Foundation under one or more agreements.
 // The .NET Foundation licenses this file to you under the MIT license.
 
-using Newtonsoft.Json.Linq;
-using Newtonsoft.Json;
+using System.Text.Json;
+using System.Text.Json.Serialization;
 
 namespace Docfx.MarkdigEngine.Extensions;
 
-internal class MarkdigExtensionSettingConverter : Newtonsoft.Json.JsonConverter
+internal partial class MarkdigExtensionSettingConverter
 {
-    // JsonSerializerOptions that used to deserialize MarkdigExtension options.
+    // Shared JsonSerializerOptions instance.
     internal static readonly System.Text.Json.JsonSerializerOptions DefaultSerializerOptions = new()
     {
-        IncludeFields = true,
         AllowTrailingCommas = true,
-        DictionaryKeyPolicy = System.Text.Json.JsonNamingPolicy.CamelCase,
-        PropertyNamingPolicy = System.Text.Json.JsonNamingPolicy.CamelCase,
+        ReadCommentHandling = JsonCommentHandling.Skip,
+        DictionaryKeyPolicy = JsonNamingPolicy.CamelCase,
+        PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
         PropertyNameCaseInsensitive = true,
         Converters = {
-                        new System.Text.Json.Serialization.JsonStringEnumConverter()
+                        new JsonStringEnumConverter(JsonNamingPolicy.CamelCase)
                      },
         WriteIndented = false,
     };
-
-    /// <inheritdoc/>
-    public override bool CanConvert(Type objectType)
-    {
-        return objectType == typeof(MarkdigExtensionSetting);
-    }
-
-    /// <inheritdoc/>
-    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
-    {
-        // var value = reader.Value;
-        switch (reader.TokenType)
-        {
-            case JsonToken.String:
-                {
-                    var name = (string)reader.Value;
-                    return new MarkdigExtensionSetting(name);
-                }
-            case JsonToken.StartObject:
-                {
-                    var jObj = JObject.Load(reader);
-
-                    var props = jObj.Properties().ToArray();
-
-                    // Object key must be the name of markdig extension.
-                    if (props.Length != 1)
-                        return null;
-
-                    var prop = props[0];
-                    var name = prop.Name;
-
-                    var options = prop.Value;
-                    if (options.Count() == 0)
-                    {
-                        return new MarkdigExtensionSetting(name);
-                    }
-
-                    // Serialize options to JsonElement.
-                    var jsonElement = System.Text.Json.JsonSerializer.SerializeToElement(options, DefaultSerializerOptions);
-
-                    return new MarkdigExtensionSetting(name)
-                    {
-                        Options = jsonElement,
-                    };
-                }
-
-            default:
-                return null;
-        }
-    }
-
-    /// <inheritdoc/>
-    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
-    {
-        if (value == null)
-            return;
-
-        var model = (MarkdigExtensionSetting)value;
-
-        if (model.Options == null || !model.Options.HasValue)
-        {
-            writer.WriteValue(model.Name);
-        }
-        else
-        {
-            writer.WriteStartObject();
-            writer.WritePropertyName(model.Name);
-            var json = model.Options.ToString();
-            writer.WriteRawValue(json);
-            writer.WriteEndObject();
-        }
-    }
 }
+
diff --git a/src/Docfx.MarkdigEngine.Extensions/MonikerRange/MonikerRangeParser.cs b/src/Docfx.MarkdigEngine.Extensions/MonikerRange/MonikerRangeParser.cs
index 7a0f3e7e480..3e8a92f5756 100644
--- a/src/Docfx.MarkdigEngine.Extensions/MonikerRange/MonikerRangeParser.cs
+++ b/src/Docfx.MarkdigEngine.Extensions/MonikerRange/MonikerRangeParser.cs
@@ -142,7 +142,7 @@ public override BlockState TryContinue(BlockProcessor processor, Block block)
     public override bool Close(BlockProcessor processor, Block block)
     {
         var monikerRange = (MonikerRangeBlock)block;
-        if (monikerRange != null && monikerRange.Closed == false)
+        if (monikerRange is {Closed: false})
         {
             _context.LogWarning("invalid-moniker-range", $"No \"::: {EndString}\" found for \"{monikerRange.MonikerRange}\", MonikerRange does not end explicitly.", block);
         }
diff --git a/src/Docfx.MarkdigEngine.Extensions/Noloc/NolocInline.cs b/src/Docfx.MarkdigEngine.Extensions/Noloc/NolocInline.cs
index 03b4ff5207d..18fa5b509d3 100644
--- a/src/Docfx.MarkdigEngine.Extensions/Noloc/NolocInline.cs
+++ b/src/Docfx.MarkdigEngine.Extensions/Noloc/NolocInline.cs
@@ -1,4 +1,6 @@
-
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
 using Markdig.Syntax.Inlines;
 
 namespace Docfx.MarkdigEngine.Extensions;
diff --git a/src/Docfx.MarkdigEngine.Extensions/Noloc/NolocParser.cs b/src/Docfx.MarkdigEngine.Extensions/Noloc/NolocParser.cs
index eba328895f4..b7dfa65b018 100644
--- a/src/Docfx.MarkdigEngine.Extensions/Noloc/NolocParser.cs
+++ b/src/Docfx.MarkdigEngine.Extensions/Noloc/NolocParser.cs
@@ -1,4 +1,6 @@
-
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
 using Markdig.Helpers;
 using Markdig.Parsers;
 
diff --git a/src/Docfx.MarkdigEngine.Extensions/Noloc/NolocRender.cs b/src/Docfx.MarkdigEngine.Extensions/Noloc/NolocRender.cs
index 2ab95f358ed..68e8c62b742 100644
--- a/src/Docfx.MarkdigEngine.Extensions/Noloc/NolocRender.cs
+++ b/src/Docfx.MarkdigEngine.Extensions/Noloc/NolocRender.cs
@@ -1,4 +1,6 @@
-
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
 using Markdig.Renderers;
 using Markdig.Renderers.Html;
 
diff --git a/src/Docfx.MarkdigEngine.Extensions/PlantUml/PlantUmlCodeBlockRenderer.cs b/src/Docfx.MarkdigEngine.Extensions/PlantUml/PlantUmlCodeBlockRenderer.cs
index 0df8d1af379..5957c059df4 100644
--- a/src/Docfx.MarkdigEngine.Extensions/PlantUml/PlantUmlCodeBlockRenderer.cs
+++ b/src/Docfx.MarkdigEngine.Extensions/PlantUml/PlantUmlCodeBlockRenderer.cs
@@ -1,9 +1,11 @@
-using static System.Text.Encoding;
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
 
 using Markdig.Renderers;
-using Markdig.Syntax;
 using Markdig.Renderers.Html;
+using Markdig.Syntax;
 using PlantUml.Net;
+using static System.Text.Encoding;
 
 namespace Docfx.MarkdigEngine.Extensions;
 
@@ -42,9 +44,8 @@ public PlantUmlCodeBlockRenderer(MarkdownContext context, PlantUmlOptions settin
 
     protected override void Write(HtmlRenderer renderer, CodeBlock obj)
     {
-        if (obj is FencedCodeBlock fencedCodeBlock
-          && fencedCodeBlock.Info is string info
-          && info.Equals("plantuml", StringComparison.OrdinalIgnoreCase))
+        if (obj is FencedCodeBlock {Info: string info} fencedCodeBlock
+            && info.Equals("plantuml", StringComparison.OrdinalIgnoreCase))
         {
             IPlantUmlRenderer plantUmlRenderer = rendererFactory.CreateRenderer(_settings);
 
diff --git a/src/Docfx.MarkdigEngine.Extensions/PlantUml/PlantUmlExtension.cs b/src/Docfx.MarkdigEngine.Extensions/PlantUml/PlantUmlExtension.cs
index 3cf0d9d8f06..469d9bc73bc 100644
--- a/src/Docfx.MarkdigEngine.Extensions/PlantUml/PlantUmlExtension.cs
+++ b/src/Docfx.MarkdigEngine.Extensions/PlantUml/PlantUmlExtension.cs
@@ -1,3 +1,6 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
 using System.Text.Json.Serialization;
 using Markdig;
 using Markdig.Renderers;
diff --git a/src/Docfx.MarkdigEngine.Extensions/QuoteSectionNote/QuoteSectionNoteParser.cs b/src/Docfx.MarkdigEngine.Extensions/QuoteSectionNote/QuoteSectionNoteParser.cs
index a3ed7ea6cb5..e1bc6ade232 100644
--- a/src/Docfx.MarkdigEngine.Extensions/QuoteSectionNote/QuoteSectionNoteParser.cs
+++ b/src/Docfx.MarkdigEngine.Extensions/QuoteSectionNote/QuoteSectionNoteParser.cs
@@ -141,8 +141,8 @@ private bool TryParseFromLine(BlockProcessor processor, QuoteSectionNoteBlock bl
             while (processor.CurrentChar.IsSpaceOrTab())
                 processor.NextChar();
 
-            var isNoteVideoDiv = (infoString.StartsWith("[!div", StringComparison.OrdinalIgnoreCase)) ||
-                                 (infoString.StartsWith("[!Video", StringComparison.OrdinalIgnoreCase)) ||
+            var isNoteVideoDiv = infoString.StartsWith("[!div", StringComparison.OrdinalIgnoreCase) ||
+                                 infoString.StartsWith("[!Video", StringComparison.OrdinalIgnoreCase) ||
                                  IsNoteType(infoString);
             if (processor.CurrentChar != '\0' && isNoteVideoDiv)
             {
diff --git a/src/Docfx.MarkdigEngine.Extensions/ResolveLink/ResolveLinkExtension.cs b/src/Docfx.MarkdigEngine.Extensions/ResolveLink/ResolveLinkExtension.cs
index 2d7a45322b3..321d577d9ad 100644
--- a/src/Docfx.MarkdigEngine.Extensions/ResolveLink/ResolveLinkExtension.cs
+++ b/src/Docfx.MarkdigEngine.Extensions/ResolveLink/ResolveLinkExtension.cs
@@ -49,7 +49,7 @@ private void UpdateLinks(MarkdownObject markdownObject)
                 }
                 break;
 
-            case LeafBlock leafBlock when leafBlock.Inline != null:
+            case LeafBlock {Inline: not null} leafBlock:
                 foreach (var subInline in leafBlock.Inline)
                 {
                     UpdateLinks(subInline);
diff --git a/src/Docfx.MarkdigEngine.Extensions/Rewriter/MarkdownDocumentVisitor.cs b/src/Docfx.MarkdigEngine.Extensions/Rewriter/MarkdownDocumentVisitor.cs
index 04fd32e116d..fa3e396666e 100644
--- a/src/Docfx.MarkdigEngine.Extensions/Rewriter/MarkdownDocumentVisitor.cs
+++ b/src/Docfx.MarkdigEngine.Extensions/Rewriter/MarkdownDocumentVisitor.cs
@@ -43,7 +43,7 @@ private void RewriteContainerBlock(ContainerBlock blocks)
         for (var i = 0; i < blocks.Count; i++)
         {
             var block = blocks[i];
-            if (block is LeafBlock leafBlock && leafBlock.Inline != null)
+            if (block is LeafBlock {Inline: not null} leafBlock)
             {
                 RewriteContainerInline(leafBlock.Inline);
             }
diff --git a/src/Docfx.MarkdigEngine.Extensions/TripleColon/CodeExtension.cs b/src/Docfx.MarkdigEngine.Extensions/TripleColon/CodeExtension.cs
index 1d28701e1fd..a5135e944dd 100644
--- a/src/Docfx.MarkdigEngine.Extensions/TripleColon/CodeExtension.cs
+++ b/src/Docfx.MarkdigEngine.Extensions/TripleColon/CodeExtension.cs
@@ -70,8 +70,6 @@ public bool TryProcessAttributes(IDictionary<string, string> attributes, out Htm
     {
         htmlAttributes = null;
         var source = "";
-        var range = "";
-        var id = "";
         var highlight = "";
         var language = "";
         var interactive = "";
@@ -86,10 +84,7 @@ public bool TryProcessAttributes(IDictionary<string, string> attributes, out Htm
                     source = value;
                     break;
                 case "range":
-                    range = value;
-                    break;
                 case "id":
-                    id = value;
                     break;
                 case "highlight":
                     highlight = value;
diff --git a/src/Docfx.MarkdigEngine.Extensions/TripleColon/ImageExtension.cs b/src/Docfx.MarkdigEngine.Extensions/TripleColon/ImageExtension.cs
index 459076f8417..b8057c314ce 100644
--- a/src/Docfx.MarkdigEngine.Extensions/TripleColon/ImageExtension.cs
+++ b/src/Docfx.MarkdigEngine.Extensions/TripleColon/ImageExtension.cs
@@ -158,10 +158,9 @@ public bool Render(HtmlRenderer renderer, MarkdownObject obj, Action<string> log
         {
             renderer.Write("<img").WriteAttributes(htmlAttributes).WriteLine(">");
 
-            if (tripleColonObj is ContainerBlock
-                && (tripleColonObj as ContainerBlock).LastChild != null)
+            if (tripleColonObj is ContainerBlock {LastChild: not null} block)
             {
-                var inline = ((tripleColonObj as ContainerBlock).LastChild as ParagraphBlock).Inline;
+                var inline = (block.LastChild as ParagraphBlock).Inline;
                 renderer.WriteChildren(inline);
             }
         }
@@ -209,15 +208,8 @@ public static string GetHtmlId(MarkdownObject obj)
 
     public static bool RequiresClosingTripleColon(IDictionary<string, string> attributes)
     {
-        if (attributes != null
-           && attributes.ContainsKey("type")
-           && attributes["type"] == "complex")
-        {
-            return true;
-        }
-        else
-        {
-            return false;
-        }
+        return attributes != null
+               && attributes.TryGetValue("type", out string value)
+               && value == "complex";
     }
 }
diff --git a/src/Docfx.MarkdigEngine.Extensions/TripleColon/TripleColonBlockParser.cs b/src/Docfx.MarkdigEngine.Extensions/TripleColon/TripleColonBlockParser.cs
index 3a836f81b5d..69ed2936180 100644
--- a/src/Docfx.MarkdigEngine.Extensions/TripleColon/TripleColonBlockParser.cs
+++ b/src/Docfx.MarkdigEngine.Extensions/TripleColon/TripleColonBlockParser.cs
@@ -66,7 +66,8 @@ public override BlockState TryOpen(BlockProcessor processor)
             block.SetData(typeof(HtmlAttributes), htmlAttributes);
         }
 
-        if (extension.GetType() == typeof(ImageExtension))
+        var type = extension.GetType();
+        if (type == typeof(ImageExtension))
         {
             if (!ImageExtension.RequiresClosingTripleColon(attributes))
             {
@@ -77,7 +78,7 @@ public override BlockState TryOpen(BlockProcessor processor)
             block.EndingTripleColons = true;
             return BlockState.ContinueDiscard;
         }
-        else if (extension.GetType() == typeof(VideoExtension))
+        else if (type == typeof(VideoExtension))
         {
             if (!VideoExtension.RequiresClosingTripleColon(attributes))
             {
@@ -104,10 +105,11 @@ public override BlockState TryOpen(BlockProcessor processor)
     public override BlockState TryContinue(BlockProcessor processor, Block block)
     {
         var slice = processor.Line;
-        var endingTripleColons = ((TripleColonBlock)block).EndingTripleColons;
+        var colonBlock = (TripleColonBlock) block;
+        var endingTripleColons = colonBlock.EndingTripleColons;
 
-        if (((TripleColonBlock)block).Extension.GetType() != typeof(ImageExtension) || ((TripleColonBlock)block).Extension.GetType() != typeof(VideoExtension)
-            || endingTripleColons)
+        Type type = ((TripleColonBlock)block).Extension.GetType();
+        if (type != typeof(ImageExtension) || type != typeof(VideoExtension) || endingTripleColons)
         {
             if (processor.IsBlankLine)
             {
@@ -119,14 +121,14 @@ public override BlockState TryContinue(BlockProcessor processor, Block block)
             if (!ExtensionsHelper.MatchStart(ref slice, ":::"))
             {
                 // create a block for the image long description
-                ((TripleColonBlock)block).Body = slice.ToString();
+                colonBlock.Body = slice.ToString();
                 ExtensionsHelper.ResetLineIndent(processor);
                 return BlockState.Continue;
             }
 
             ExtensionsHelper.SkipSpaces(ref slice);
 
-            var extensionName = ((TripleColonBlock)block).Extension.Name;
+            var extensionName = colonBlock.Extension.Name;
 
             if (!ExtensionsHelper.MatchStart(ref slice, extensionName) || !ExtensionsHelper.MatchStart(ref slice, "-end"))
             {
@@ -155,13 +157,13 @@ public override BlockState TryContinue(BlockProcessor processor, Block block)
 
             block.UpdateSpanEnd(slice.End);
             block.IsOpen = false;
-            (block as TripleColonBlock).Closed = true;
+            colonBlock.Closed = true;
 
             return BlockState.BreakDiscard;
         }
 
         block.IsOpen = false;
-        (block as TripleColonBlock).Closed = true;
+        colonBlock.Closed = true;
 
         if (!processor.IsBlankLine)
         {
diff --git a/src/Docfx.MarkdigEngine.Extensions/TripleColon/TripleColonInline.cs b/src/Docfx.MarkdigEngine.Extensions/TripleColon/TripleColonInline.cs
index a70e3ecca9f..844bebf8628 100644
--- a/src/Docfx.MarkdigEngine.Extensions/TripleColon/TripleColonInline.cs
+++ b/src/Docfx.MarkdigEngine.Extensions/TripleColon/TripleColonInline.cs
@@ -12,7 +12,7 @@ public class TripleColonInline : Inline, ITripleColon
     public string Body { get; set; }
 
     public TripleColonInline()
-        : base() { }
+    { }
 
     public bool Closed { get; set; }
 
diff --git a/src/Docfx.MarkdigEngine.Extensions/TripleColon/VideoExtension.cs b/src/Docfx.MarkdigEngine.Extensions/TripleColon/VideoExtension.cs
index a93df1843e5..cf6be57a68d 100644
--- a/src/Docfx.MarkdigEngine.Extensions/TripleColon/VideoExtension.cs
+++ b/src/Docfx.MarkdigEngine.Extensions/TripleColon/VideoExtension.cs
@@ -155,10 +155,9 @@ public bool Render(HtmlRenderer renderer, MarkdownObject markdownObject, Action<
             renderer.WriteLine("<div class=\"embeddedvideo\">");
             renderer.Write($"<iframe").WriteAttributes(markdownObject).WriteLine("></iframe>");
             renderer.WriteLine("</div>");
-            if (tripleColonObj is ContainerBlock
-                && (tripleColonObj as ContainerBlock).LastChild != null)
+            if (tripleColonObj is ContainerBlock {LastChild: not null} block)
             {
-                var inline = ((tripleColonObj as ContainerBlock).LastChild as ParagraphBlock).Inline;
+                var inline = (block.LastChild as ParagraphBlock).Inline;
                 renderer.WriteChildren(inline);
             }
         }
@@ -201,15 +200,8 @@ public static string GetHtmlId(MarkdownObject obj)
 
     public static bool RequiresClosingTripleColon(IDictionary<string, string> attributes)
     {
-        if (attributes != null
-           && attributes.ContainsKey("type")
-           && attributes["type"] == "complex")
-        {
-            return true;
-        }
-        else
-        {
-            return false;
-        }
+        return attributes != null
+               && attributes.TryGetValue("type", out string value)
+               && value == "complex";
     }
 }
diff --git a/src/Docfx.MarkdigEngine/Docfx.MarkdigEngine.csproj b/src/Docfx.MarkdigEngine/Docfx.MarkdigEngine.csproj
index ed2a988828c..659c1aa904c 100644
--- a/src/Docfx.MarkdigEngine/Docfx.MarkdigEngine.csproj
+++ b/src/Docfx.MarkdigEngine/Docfx.MarkdigEngine.csproj
@@ -1,4 +1,4 @@
-<Project Sdk="Microsoft.NET.Sdk">
+<Project Sdk="Microsoft.NET.Sdk">
   <ItemGroup>
     <PackageReference Include="Markdig" />
     <PackageReference Include="Newtonsoft.Json" />
diff --git a/src/Docfx.MarkdigEngine/MarkdigMarkdownService.cs b/src/Docfx.MarkdigEngine/MarkdigMarkdownService.cs
index bb6062a9cfa..3a7ebcf566a 100644
--- a/src/Docfx.MarkdigEngine/MarkdigMarkdownService.cs
+++ b/src/Docfx.MarkdigEngine/MarkdigMarkdownService.cs
@@ -45,13 +45,7 @@ public MarkupResult Markup(string content, string filePath)
     public MarkupResult Markup(string content, string filePath, bool multipleYamlHeader)
     {
         ArgumentNullException.ThrowIfNull(content);
-
-#if NET7_0_OR_GREATER
         ArgumentException.ThrowIfNullOrEmpty(filePath);
-#else
-        if(string.IsNullOrEmpty(filePath))
-            throw new ArgumentNullException(nameof(filePath));
-#endif
 
         var pipeline = CreateMarkdownPipeline(isInline: false, multipleYamlHeader);
 
@@ -141,7 +135,7 @@ private MarkdownPipeline CreateMarkdownPipeline(bool isInline, bool multipleYaml
             builder.UseInlineOnly();
         }
 
-        if (_parameters?.Extensions?.MarkdigExtensions is { } extensions && extensions.Length > 0)
+        if (_parameters?.Extensions?.MarkdigExtensions is {Length: > 0} extensions)
         {
             builder.UseOptionalExtensions(extensions);
         }
@@ -179,7 +173,7 @@ private MarkdownPipeline CreateMarkdownPipeline(bool isInline, bool multipleYaml
 
     private static string GetLink(string path, MarkdownObject origin)
     {
-        if (InclusionContext.IsInclude && RelativePath.IsRelativePath(path) && PathUtility.IsRelativePath(path) && !RelativePath.IsPathFromWorkingFolder(path) && !path.StartsWith("#", StringComparison.Ordinal))
+        if (InclusionContext.IsInclude && RelativePath.IsRelativePath(path) && PathUtility.IsRelativePath(path) && !RelativePath.IsPathFromWorkingFolder(path) && !path.StartsWith('#'))
         {
             return ((RelativePath)InclusionContext.File + (RelativePath)path).GetPathFromWorkingFolder();
         }
diff --git a/src/Docfx.Plugins/Docfx.Plugins.csproj b/src/Docfx.Plugins/Docfx.Plugins.csproj
index b906dab4380..ca14a7a0327 100644
--- a/src/Docfx.Plugins/Docfx.Plugins.csproj
+++ b/src/Docfx.Plugins/Docfx.Plugins.csproj
@@ -1,4 +1,4 @@
-<Project Sdk="Microsoft.NET.Sdk">
+<Project Sdk="Microsoft.NET.Sdk">
   <ItemGroup>
     <PackageReference Include="System.Collections.Immutable" />
     <PackageReference Include="Newtonsoft.Json" />
diff --git a/src/Docfx.Plugins/DocumentException.cs b/src/Docfx.Plugins/DocumentException.cs
index fb63ba51ef2..e7cab06f5fa 100644
--- a/src/Docfx.Plugins/DocumentException.cs
+++ b/src/Docfx.Plugins/DocumentException.cs
@@ -1,4 +1,7 @@
-namespace Docfx.Plugins;
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+namespace Docfx.Plugins;
 
 public class DocumentException : Exception
 {
diff --git a/src/Docfx.Plugins/DocumentExceptionExtensions.cs b/src/Docfx.Plugins/DocumentExceptionExtensions.cs
index 9f4059d5c0a..6b2866a3b40 100644
--- a/src/Docfx.Plugins/DocumentExceptionExtensions.cs
+++ b/src/Docfx.Plugins/DocumentExceptionExtensions.cs
@@ -1,8 +1,13 @@
-namespace Docfx.Plugins;
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.Runtime.ExceptionServices;
+
+namespace Docfx.Plugins;
 
 public static class DocumentExceptionExtensions
 {
-    public static TResult[] RunAll<TElement, TResult>(this IReadOnlyList<TElement> elements, Func<TElement, TResult> func)
+    public static TResult[] RunAll<TElement, TResult>(this IReadOnlyList<TElement> elements, Func<TElement, TResult> func, CancellationToken cancellationToken = default)
     {
         ArgumentNullException.ThrowIfNull(elements);
         ArgumentNullException.ThrowIfNull(func);
@@ -11,6 +16,8 @@ public static TResult[] RunAll<TElement, TResult>(this IReadOnlyList<TElement> e
         DocumentException firstException = null;
         for (int i = 0; i < elements.Count; i++)
         {
+            cancellationToken.ThrowIfCancellationRequested();
+
             try
             {
                 results[i] = func(elements[i]);
@@ -27,12 +34,12 @@ public static TResult[] RunAll<TElement, TResult>(this IReadOnlyList<TElement> e
         return results;
     }
 
-    public static void RunAll<TElement>(this IReadOnlyList<TElement> elements, Action<TElement> action)
+    public static void RunAll<TElement>(this IReadOnlyList<TElement> elements, Action<TElement> action, CancellationToken cancellationToken = default)
     {
-        RunAll((IEnumerable<TElement>)elements, action);
+        RunAll((IEnumerable<TElement>)elements, action, cancellationToken);
     }
 
-    public static void RunAll<TElement>(this IEnumerable<TElement> elements, Action<TElement> action)
+    public static void RunAll<TElement>(this IEnumerable<TElement> elements, Action<TElement> action, CancellationToken cancellationToken = default)
     {
         ArgumentNullException.ThrowIfNull(elements);
         ArgumentNullException.ThrowIfNull(action);
@@ -40,6 +47,7 @@ public static void RunAll<TElement>(this IEnumerable<TElement> elements, Action<
         DocumentException firstException = null;
         foreach (var element in elements)
         {
+            cancellationToken.ThrowIfCancellationRequested();
             try
             {
                 action(element);
@@ -55,12 +63,12 @@ public static void RunAll<TElement>(this IEnumerable<TElement> elements, Action<
         }
     }
 
-    public static void RunAll<TElement>(this IReadOnlyList<TElement> elements, Action<TElement> action, int parallelism)
+    public static void RunAll<TElement>(this IReadOnlyList<TElement> elements, Action<TElement> action, int parallelism, CancellationToken cancellationToken = default)
     {
-        RunAll((IEnumerable<TElement>)elements, action, parallelism);
+        RunAll((IEnumerable<TElement>)elements, action, parallelism, cancellationToken);
     }
 
-    public static void RunAll<TElement>(this IEnumerable<TElement> elements, Action<TElement> action, int parallelism)
+    public static void RunAll<TElement>(this IEnumerable<TElement> elements, Action<TElement> action, int parallelism, CancellationToken cancellationToken = default)
     {
         ArgumentNullException.ThrowIfNull(elements);
         ArgumentNullException.ThrowIfNull(action);
@@ -69,24 +77,43 @@ public static void RunAll<TElement>(this IEnumerable<TElement> elements, Action<
         {
             throw new ArgumentOutOfRangeException(nameof(parallelism));
         }
-        DocumentException firstException = null;
-        Parallel.ForEach(
-            elements,
-            new ParallelOptions { MaxDegreeOfParallelism = parallelism },
-            s =>
-            {
-                try
+
+        try
+        {
+            DocumentException firstException = null;
+            Parallel.ForEach(
+                elements,
+                new ParallelOptions
                 {
-                    action(s);
-                }
-                catch (DocumentException ex)
+                    MaxDegreeOfParallelism = parallelism,
+                    CancellationToken = cancellationToken,
+                },
+                s =>
                 {
-                    Interlocked.CompareExchange(ref firstException, ex, null);
-                }
-            });
-        if (firstException != null)
+                    try
+                    {
+                        action(s);
+                    }
+                    catch (DocumentException ex)
+                    {
+                        Interlocked.CompareExchange(ref firstException, ex, null);
+                    }
+                });
+
+            if (firstException != null)
+            {
+                throw new DocumentException(firstException.Message, firstException);
+            }
+        }
+        catch (AggregateException ex)
         {
-            throw new DocumentException(firstException.Message, firstException);
+            // If exceptions are OperationCanceledException. throw only first exception.
+            var innerExceptions = ex.Flatten().InnerExceptions.ToArray();
+            if (innerExceptions.All(x => x is OperationCanceledException))
+                ExceptionDispatchInfo.Throw(innerExceptions[0]);
+
+            throw;
         }
+
     }
 }
diff --git a/src/Docfx.Plugins/FileModel.cs b/src/Docfx.Plugins/FileModel.cs
index ef1131c8616..6c5b6e7adc6 100644
--- a/src/Docfx.Plugins/FileModel.cs
+++ b/src/Docfx.Plugins/FileModel.cs
@@ -35,7 +35,7 @@ public FileModel(FileAndType ft, object content, FileAndType original, string ke
 
     public FileAndType FileAndType { get; private set; }
 
-    public FileAndType OriginalFileAndType { get; private set; }
+    public FileAndType OriginalFileAndType { get; }
 
     public object Content { get; set; }
 
@@ -85,5 +85,5 @@ public string File
 
     public string DocumentType { get; set; }
 
-    public ImmutableArray<UidDefinition> Uids { get; set; } = ImmutableArray<UidDefinition>.Empty;
+    public ImmutableArray<UidDefinition> Uids { get; set; } = [];
 }
diff --git a/src/Docfx.Plugins/IDocumentBuildContext.cs b/src/Docfx.Plugins/IDocumentBuildContext.cs
index dd59d17d555..be3aef4ea4f 100644
--- a/src/Docfx.Plugins/IDocumentBuildContext.cs
+++ b/src/Docfx.Plugins/IDocumentBuildContext.cs
@@ -94,4 +94,9 @@ public interface IDocumentBuildContext
     /// Custom href generator
     /// </summary>
     ICustomHrefGenerator HrefGenerator { get; }
+
+    /// <summary>
+    /// The token to cancel build operation.
+    /// </summary>
+    CancellationToken CancellationToken { get; }
 }
diff --git a/src/Docfx.Plugins/IPostProcessor.cs b/src/Docfx.Plugins/IPostProcessor.cs
index d881ee761a7..1b07a79e839 100644
--- a/src/Docfx.Plugins/IPostProcessor.cs
+++ b/src/Docfx.Plugins/IPostProcessor.cs
@@ -19,6 +19,7 @@ public interface IPostProcessor
     /// </summary>
     /// <param name="manifest"></param>
     /// <param name="outputFolder">The output folder where our static website will be placed</param>
+    /// <param name="cancellationToken">The token to cancel operation.</param>
     /// <returns></returns>
-    Manifest Process(Manifest manifest, string outputFolder);
+    Manifest Process(Manifest manifest, string outputFolder, CancellationToken cancellationToken);
 }
diff --git a/src/Docfx.Plugins/Manifest.cs b/src/Docfx.Plugins/Manifest.cs
index beaad995e78..729c8b853c6 100644
--- a/src/Docfx.Plugins/Manifest.cs
+++ b/src/Docfx.Plugins/Manifest.cs
@@ -27,7 +27,7 @@ public Manifest() { }
 
     [JsonProperty("files")]
     [JsonPropertyName("files")]
-    public List<ManifestItem> Files { get; } = new();
+    public List<ManifestItem> Files { get; init; } = new();
 
     [JsonProperty("groups")]
     [JsonPropertyName("groups")]
diff --git a/src/Docfx.Plugins/ManifestGroupInfo.cs b/src/Docfx.Plugins/ManifestGroupInfo.cs
index a5da47d05da..0bf3b2b5edf 100644
--- a/src/Docfx.Plugins/ManifestGroupInfo.cs
+++ b/src/Docfx.Plugins/ManifestGroupInfo.cs
@@ -24,6 +24,9 @@ public class ManifestGroupInfo
     [System.Text.Json.Serialization.JsonExtensionData]
     public Dictionary<string, object> Metadata { get; set; } = new();
 
+    // Default constructor for System.Text.Json deserialization
+    public ManifestGroupInfo() { }
+
     public ManifestGroupInfo(GroupInfo groupInfo)
     {
         if (groupInfo == null)
diff --git a/src/Docfx.Plugins/ManifestItem.cs b/src/Docfx.Plugins/ManifestItem.cs
index c9711556b65..003278e7a7a 100644
--- a/src/Docfx.Plugins/ManifestItem.cs
+++ b/src/Docfx.Plugins/ManifestItem.cs
@@ -18,7 +18,7 @@ public class ManifestItem
 
     [JsonProperty("output")]
     [JsonPropertyName("output")]
-    public Dictionary<string, OutputFileInfo> Output { get; } = new();
+    public Dictionary<string, OutputFileInfo> Output { get; init; } = new();
 
     [JsonProperty("version")]
     [JsonPropertyName("version")]
diff --git a/src/Docfx.Plugins/MarkupResult.cs b/src/Docfx.Plugins/MarkupResult.cs
index d2772b65560..3715d4a8d23 100644
--- a/src/Docfx.Plugins/MarkupResult.cs
+++ b/src/Docfx.Plugins/MarkupResult.cs
@@ -9,9 +9,9 @@ public class MarkupResult
 {
     public string Html { get; set; }
     public ImmutableDictionary<string, object> YamlHeader { get; set; } = ImmutableDictionary<string, object>.Empty;
-    public ImmutableArray<string> LinkToFiles { get; set; } = ImmutableArray<string>.Empty;
-    public ImmutableHashSet<string> LinkToUids { get; set; } = ImmutableHashSet<string>.Empty;
-    public ImmutableArray<string> Dependency { get; set; } = ImmutableArray<string>.Empty;
+    public ImmutableArray<string> LinkToFiles { get; set; } = [];
+    public ImmutableHashSet<string> LinkToUids { get; set; } = [];
+    public ImmutableArray<string> Dependency { get; set; } = [];
     public ImmutableDictionary<string, ImmutableList<LinkSourceInfo>> UidLinkSources { get; set; } = ImmutableDictionary<string, ImmutableList<LinkSourceInfo>>.Empty;
     public ImmutableDictionary<string, ImmutableList<LinkSourceInfo>> FileLinkSources { get; set; } = ImmutableDictionary<string, ImmutableList<LinkSourceInfo>>.Empty;
 
diff --git a/src/Docfx.Plugins/SaveResult.cs b/src/Docfx.Plugins/SaveResult.cs
index 93d9a5b8283..ae1b7083b26 100644
--- a/src/Docfx.Plugins/SaveResult.cs
+++ b/src/Docfx.Plugins/SaveResult.cs
@@ -10,10 +10,10 @@ public class SaveResult
     public string DocumentType { get; set; }
     public string FileWithoutExtension { get; set; }
     public string ResourceFile { get; set; }
-    public ImmutableHashSet<string> LinkToUids { get; set; } = ImmutableHashSet<string>.Empty;
-    public ImmutableArray<string> LinkToFiles { get; set; } = ImmutableArray<string>.Empty;
-    public ImmutableArray<XRefSpec> XRefSpecs { get; set; } = ImmutableArray<XRefSpec>.Empty;
-    public ImmutableArray<XRefSpec> ExternalXRefSpecs { get; set; } = ImmutableArray<XRefSpec>.Empty;
+    public ImmutableHashSet<string> LinkToUids { get; set; } = [];
+    public ImmutableArray<string> LinkToFiles { get; set; } = [];
+    public ImmutableArray<XRefSpec> XRefSpecs { get; set; } = [];
+    public ImmutableArray<XRefSpec> ExternalXRefSpecs { get; set; } = [];
     public ImmutableDictionary<string, ImmutableList<LinkSourceInfo>> UidLinkSources { get; set; } = ImmutableDictionary<string, ImmutableList<LinkSourceInfo>>.Empty;
     public ImmutableDictionary<string, ImmutableList<LinkSourceInfo>> FileLinkSources { get; set; } = ImmutableDictionary<string, ImmutableList<LinkSourceInfo>>.Empty;
 }
diff --git a/src/Docfx.Plugins/XRefSpec.cs b/src/Docfx.Plugins/XRefSpec.cs
index 2f411cf7193..7fad3792ed8 100644
--- a/src/Docfx.Plugins/XRefSpec.cs
+++ b/src/Docfx.Plugins/XRefSpec.cs
@@ -1,4 +1,7 @@
-using System.Collections;
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.Collections;
 
 namespace Docfx.Plugins;
 
diff --git a/src/Docfx.YamlSerialization/Docfx.YamlSerialization.csproj b/src/Docfx.YamlSerialization/Docfx.YamlSerialization.csproj
index 3c86b6fca1f..4fdad984229 100644
--- a/src/Docfx.YamlSerialization/Docfx.YamlSerialization.csproj
+++ b/src/Docfx.YamlSerialization/Docfx.YamlSerialization.csproj
@@ -1,4 +1,4 @@
-<Project Sdk="Microsoft.NET.Sdk">
+<Project Sdk="Microsoft.NET.Sdk">
   <ItemGroup>
     <PackageReference Include="YamlDotNet" />
   </ItemGroup>
diff --git a/src/Docfx.YamlSerialization/NodeTypeResolvers/ScalarYamlNodeTypeResolver.cs b/src/Docfx.YamlSerialization/NodeTypeResolvers/ScalarYamlNodeTypeResolver.cs
index b1e3f9c9ece..bca576600d1 100644
--- a/src/Docfx.YamlSerialization/NodeTypeResolvers/ScalarYamlNodeTypeResolver.cs
+++ b/src/Docfx.YamlSerialization/NodeTypeResolvers/ScalarYamlNodeTypeResolver.cs
@@ -13,7 +13,7 @@ bool INodeTypeResolver.Resolve(NodeEvent nodeEvent, ref Type currentType)
     {
         if (currentType == typeof(string) || currentType == typeof(object))
         {
-            if (nodeEvent is Scalar scalar && scalar.IsPlainImplicit)
+            if (nodeEvent is Scalar {IsPlainImplicit: true} scalar)
             {
                 if (Regexes.BooleanLike.IsMatch(scalar.Value))
                 {
diff --git a/src/Docfx.YamlSerialization/ObjectDescriptors/BetterObjectDescriptor.cs b/src/Docfx.YamlSerialization/ObjectDescriptors/BetterObjectDescriptor.cs
index 0e90f372e8e..6732bc80dda 100644
--- a/src/Docfx.YamlSerialization/ObjectDescriptors/BetterObjectDescriptor.cs
+++ b/src/Docfx.YamlSerialization/ObjectDescriptors/BetterObjectDescriptor.cs
@@ -30,8 +30,8 @@ static bool NeedQuote(object val)
                 || Regexes.NullLike.IsMatch(s)
                 || Regexes.IntegerLike.IsMatch(s)
                 || Regexes.FloatLike.IsMatch(s)
-                || s.StartsWith("'", StringComparison.Ordinal)
-                || s.StartsWith("\"", StringComparison.Ordinal)
+                || s.StartsWith('\'')
+                || s.StartsWith('"')
                 || s.Length > 0 && char.IsWhiteSpace(s[0]);
         }
     }
diff --git a/src/Docfx.YamlSerialization/ObjectFactories/DefaultEmitObjectFactory.cs b/src/Docfx.YamlSerialization/ObjectFactories/DefaultEmitObjectFactory.cs
index 0b6ab897df4..300a7cf9cbb 100644
--- a/src/Docfx.YamlSerialization/ObjectFactories/DefaultEmitObjectFactory.cs
+++ b/src/Docfx.YamlSerialization/ObjectFactories/DefaultEmitObjectFactory.cs
@@ -18,7 +18,7 @@ public override object Create(Type type)
         if (!_cache.TryGetValue(type, out Func<object> func))
         {
             var realType = type;
-            if (type.IsInterface && type.IsGenericType)
+            if (type is {IsInterface: true, IsGenericType: true})
             {
                 var def = type.GetGenericTypeDefinition();
                 var args = type.GetGenericArguments();
diff --git a/src/Docfx.YamlSerialization/TypeInspectors/EmitTypeInspector.cs b/src/Docfx.YamlSerialization/TypeInspectors/EmitTypeInspector.cs
index e10c23c5a03..e153787418e 100644
--- a/src/Docfx.YamlSerialization/TypeInspectors/EmitTypeInspector.cs
+++ b/src/Docfx.YamlSerialization/TypeInspectors/EmitTypeInspector.cs
@@ -184,8 +184,8 @@ private static Type GetGenericValueType(Type propertyType)
                 valueType = GetGenericValueTypeCore(propertyType);
             }
             valueType ??= (from t in propertyType.GetInterfaces()
-                 where t.IsVisible
-                 select GetGenericValueTypeCore(t)).FirstOrDefault(x => x != null);
+                           where t.IsVisible
+                           select GetGenericValueTypeCore(t)).FirstOrDefault(x => x != null);
             return valueType;
         }
 
diff --git a/src/Docfx.YamlSerialization/TypeInspectors/ExtensibleTypeInspectorSkeleton.cs b/src/Docfx.YamlSerialization/TypeInspectors/ExtensibleTypeInspectorSkeleton.cs
index 964b1ea8d7e..b31bf7a6977 100644
--- a/src/Docfx.YamlSerialization/TypeInspectors/ExtensibleTypeInspectorSkeleton.cs
+++ b/src/Docfx.YamlSerialization/TypeInspectors/ExtensibleTypeInspectorSkeleton.cs
@@ -14,9 +14,9 @@ public abstract class ExtensibleTypeInspectorSkeleton : ITypeInspector, IExtensi
     public IPropertyDescriptor GetProperty(Type type, object container, string name, bool ignoreUnmatched)
     {
         var candidates =
-            (from p in GetProperties(type, container)
-             where p.Name == name
-             select p);
+            from p in GetProperties(type, container)
+            where p.Name == name
+            select p;
 
         using var enumerator = candidates.GetEnumerator();
         if (!enumerator.MoveNext())
diff --git a/src/Docfx.YamlSerialization/TypeInspectors/ExtensibleYamlAttributesTypeInspector.cs b/src/Docfx.YamlSerialization/TypeInspectors/ExtensibleYamlAttributesTypeInspector.cs
index 23e5a3cd026..9897f36df56 100644
--- a/src/Docfx.YamlSerialization/TypeInspectors/ExtensibleYamlAttributesTypeInspector.cs
+++ b/src/Docfx.YamlSerialization/TypeInspectors/ExtensibleYamlAttributesTypeInspector.cs
@@ -1,4 +1,7 @@
-using YamlDotNet.Serialization;
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using YamlDotNet.Serialization;
 
 namespace Docfx.YamlSerialization.TypeInspectors;
 
diff --git a/src/Docfx.YamlSerialization/YamlDeserializer.cs b/src/Docfx.YamlSerialization/YamlDeserializer.cs
index 3a66e0a5330..fb8f374d27f 100644
--- a/src/Docfx.YamlSerialization/YamlDeserializer.cs
+++ b/src/Docfx.YamlSerialization/YamlDeserializer.cs
@@ -23,7 +23,7 @@ namespace Docfx.YamlSerialization;
 /// </summary>
 public sealed class YamlDeserializer
 {
-    private static Dictionary<TagName, Type> PredefinedTagMappings { get; } = new Dictionary<TagName, Type>
+    private static Dictionary<TagName, Type> PredefinedTagMappings { get; } = new()
     {
         { "tag:yaml.org,2002:map", typeof(Dictionary<object, object>) },
         { "tag:yaml.org,2002:bool", typeof(bool) },
@@ -39,8 +39,8 @@ public sealed class YamlDeserializer
     private readonly IValueDeserializer _valueDeserializer;
     private readonly ITypeConverter _reflectionTypeConverter = new ReflectionTypeConverter();
 
-    public IList<INodeDeserializer> NodeDeserializers { get; private set; }
-    public IList<INodeTypeResolver> TypeResolvers { get; private set; }
+    public IList<INodeDeserializer> NodeDeserializers { get; }
+    public IList<INodeTypeResolver> TypeResolvers { get; }
     public IValueDeserializer ValueDeserializer => _valueDeserializer;
 
     private sealed class TypeDescriptorProxy : ITypeInspector
diff --git a/src/docfx/Models/InitCommand.cs b/src/docfx/Models/InitCommand.cs
index 6e32307fdbc..3cb1e707637 100644
--- a/src/docfx/Models/InitCommand.cs
+++ b/src/docfx/Models/InitCommand.cs
@@ -33,6 +33,7 @@ This utility will walk you through creating a docfx project.
 
         var docfx = new
         {
+            schema = "https://raw.githubusercontent.com/dotnet/docfx/main/schemas/docfx.schema.json",
             metadata = dotnetApi ? new[]
             {
                 new
@@ -69,10 +70,10 @@ This utility will walk you through creating a docfx project.
         var files = new Dictionary<string, string>
         {
             ["docfx.json"] = JsonSerializer.Serialize(docfx, new JsonSerializerOptions()
-                {
-                    WriteIndented = true,
-                    DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull,
-                }),
+            {
+                WriteIndented = true,
+                DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull,
+            }).Replace("\"schema\"", "\"$schema\""),
 
             ["toc.yml"] = dotnetApi ?
                 $"""
diff --git a/src/docfx/docfx.csproj b/src/docfx/docfx.csproj
index 64677f8f063..0ea31d91aab 100644
--- a/src/docfx/docfx.csproj
+++ b/src/docfx/docfx.csproj
@@ -19,7 +19,7 @@
   -->
   <Target Name="RewriteDocfxTemplateFiles" AfterTargets="PackTool">
     <PropertyGroup>
-      <!-- Select first element of TargetFrameworks as template source (e.g. `net6.0` is selected when TargetFrameworks `net6.0;net7.0;net8.0`) -->
+      <!-- Select first element of TargetFrameworks as template source (e.g. `net8.0` is selected when TargetFrameworks `net8.0;9.0`) -->
       <DocfxTemplateSourceTargetFramework>$(TargetFrameworks.Split(";")[0])</DocfxTemplateSourceTargetFramework>
     </PropertyGroup>
     <!-- If TargetFramework is selected version. Rewrite template files PackagePath.-->
diff --git a/templates/build.js b/templates/build.js
index b962b5ab874..20f1cae68d5 100644
--- a/templates/build.js
+++ b/templates/build.js
@@ -113,8 +113,8 @@ function copyToDist() {
 }
 
 function buildContent() {
-  exec(`dotnet run -f net7.0 --project ../src/docfx/docfx.csproj -- metadata ${project}/docfx.json`)
-  exec(`dotnet run -f net7.0 --project ../src/docfx/docfx.csproj --no-build -- build ${project}/docfx.json`)
+  exec(`dotnet run -f net8.0 --project ../src/docfx/docfx.csproj -- metadata ${project}/docfx.json`)
+  exec(`dotnet run -f net8.0 --project ../src/docfx/docfx.csproj --no-build -- build ${project}/docfx.json`)
 
   function exec(cmd) {
     if (spawnSync(cmd, { stdio: 'inherit', shell: true }).status !== 0) {
diff --git a/templates/jest.config.js b/templates/jest.config.js
deleted file mode 100644
index b996758f681..00000000000
--- a/templates/jest.config.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */
-module.exports = {
-  preset: 'ts-jest',
-  testEnvironment: 'node',
-  transform: {
-    '^.+\\.[tj]s$': ['ts-jest', {
-      tsconfig: {
-        allowJs: true
-      }
-    }]
-  },
-  transformIgnorePatterns: [
-    '<rootDir>/node_modules/(?!lit-html)'
-  ]
-}
diff --git a/templates/modern/src/docfx.scss b/templates/modern/src/docfx.scss
index 17a001ce4ac..67c36fb035f 100644
--- a/templates/modern/src/docfx.scss
+++ b/templates/modern/src/docfx.scss
@@ -8,15 +8,15 @@ $container-max-widths: (
   xxl: 1768px
 ) !default;
 
-@import "mixins";
-@import "bootstrap/scss/bootstrap";
-@import "highlight";
-@import "layout";
-@import "nav";
-@import "toc";
-@import "markdown";
-@import "search";
-@import "dotnet";
+@use "mixins";
+@use "bootstrap/scss/bootstrap";
+@use "highlight";
+@use "layout";
+@use "nav";
+@use "toc";
+@use "markdown";
+@use "search";
+@use "dotnet";
 
 h1,
 h2,
diff --git a/templates/modern/src/dotnet.scss b/templates/modern/src/dotnet.scss
index 2f1aded842c..30cd952dbcc 100644
--- a/templates/modern/src/dotnet.scss
+++ b/templates/modern/src/dotnet.scss
@@ -67,7 +67,7 @@ body[data-yaml-mime="ManagedReference"] article, body[data-yaml-mime="ApiPage"]
   dl.parameters {
     >dt {
       margin: 1em 0;
-      
+
       &>code {
         margin-right: .2em;
         font-size: 1em;
diff --git a/templates/modern/src/helper.test.ts b/templates/modern/src/helper.test.ts
index 3e0a82f75c2..8e2baf10a15 100644
--- a/templates/modern/src/helper.test.ts
+++ b/templates/modern/src/helper.test.ts
@@ -1,25 +1,27 @@
 // Licensed to the .NET Foundation under one or more agreements.
 // The .NET Foundation licenses this file to you under the MIT license.
 
+import test from 'node:test'
+import assert from 'node:assert'
 import { breakWord, isSameURL } from './helper'
 
 test('break text', () => {
-  expect(breakWord('Other APIs')).toEqual(['Other APIs'])
-  expect(breakWord('System.CodeDom')).toEqual(['System.', 'Code', 'Dom'])
-  expect(breakWord('System.Collections.Dictionary<string, object>')).toEqual(['System.', 'Collections.', 'Dictionary<', 'string,', ' object>'])
-  expect(breakWord('https://github.com/dotnet/docfx')).toEqual(['https://github.', 'com/', 'dotnet/', 'docfx'])
+  assert.deepStrictEqual(breakWord('Other APIs'), ['Other APIs'])
+  assert.deepStrictEqual(breakWord('System.CodeDom'), ['System.', 'Code', 'Dom'])
+  assert.deepStrictEqual(breakWord('System.Collections.Dictionary<string, object>'), ['System.', 'Collections.', 'Dictionary<', 'string,', ' object>'])
+  assert.deepStrictEqual(breakWord('https://github.com/dotnet/docfx'), ['https://github.', 'com/', 'dotnet/', 'docfx'])
 })
 
 test('is same URL', () => {
-  expect(isSameURL({ pathname: '/' }, { pathname: '/' })).toBeTruthy()
-  expect(isSameURL({ pathname: '/index.html' }, { pathname: '/' })).toBeTruthy()
-  expect(isSameURL({ pathname: '/a/index.html' }, { pathname: '/a' })).toBeTruthy()
-  expect(isSameURL({ pathname: '/a/index.html' }, { pathname: '/a/' })).toBeTruthy()
-  expect(isSameURL({ pathname: '/a' }, { pathname: '/a/' })).toBeTruthy()
-  expect(isSameURL({ pathname: '/a/foo.html' }, { pathname: '/a/foo' })).toBeTruthy()
-  expect(isSameURL({ pathname: '/a/foo/' }, { pathname: '/a/foo' })).toBeTruthy()
-  expect(isSameURL({ pathname: '/a/foo/index.html' }, { pathname: '/a/foo' })).toBeTruthy()
-  expect(isSameURL({ pathname: '/a/index.html' }, { pathname: '/A/Index.html' })).toBeTruthy()
+  assert.ok(isSameURL({ pathname: '/' }, { pathname: '/' }))
+  assert.ok(isSameURL({ pathname: '/index.html' }, { pathname: '/' }))
+  assert.ok(isSameURL({ pathname: '/a/index.html' }, { pathname: '/a' }))
+  assert.ok(isSameURL({ pathname: '/a/index.html' }, { pathname: '/a/' }))
+  assert.ok(isSameURL({ pathname: '/a' }, { pathname: '/a/' }))
+  assert.ok(isSameURL({ pathname: '/a/foo.html' }, { pathname: '/a/foo' }))
+  assert.ok(isSameURL({ pathname: '/a/foo/' }, { pathname: '/a/foo' }))
+  assert.ok(isSameURL({ pathname: '/a/foo/index.html' }, { pathname: '/a/foo' }))
+  assert.ok(isSameURL({ pathname: '/a/index.html' }, { pathname: '/A/Index.html' }))
 
-  expect(isSameURL({ pathname: '/a/foo/index.html' }, { pathname: '/a/bar' })).toBeFalsy()
+  assert.ok(!isSameURL({ pathname: '/a/foo/index.html' }, { pathname: '/a/bar' }))
 })
diff --git a/templates/modern/src/highlight.scss b/templates/modern/src/highlight.scss
index fef6034461d..febc386cab1 100644
--- a/templates/modern/src/highlight.scss
+++ b/templates/modern/src/highlight.scss
@@ -3,11 +3,13 @@
  * The .NET Foundation licenses this file to you under the MIT license.
  */
 
-@import "highlight.js/scss/vs";
+@use "sass:meta";
+@use "highlight.js/scss/vs";
+@use "bootstrap/scss/bootstrap";
 
-@include color-mode(dark) {
+@include bootstrap.color-mode(dark) {
   /* stylelint-disable-next-line no-invalid-position-at-import-rule */
-  @import "highlight.js/scss/vs2015";
+  @include meta.load-css("highlight.js/scss/vs2015");
 }
 
 .hljs {
@@ -24,7 +26,7 @@ pre > code .line-highlight {
   background-color: yellow;
 }
 
-@include color-mode(dark) {
+@include bootstrap.color-mode(dark) {
   pre > code .line-highlight {
     background-color: #4a4a00;
   }
diff --git a/templates/modern/src/layout.scss b/templates/modern/src/layout.scss
index c053ea91821..fd0afa784db 100644
--- a/templates/modern/src/layout.scss
+++ b/templates/modern/src/layout.scss
@@ -3,6 +3,8 @@
  * The .NET Foundation licenses this file to you under the MIT license.
  */
 
+@use "bootstrap/scss/bootstrap";
+
 $header-height: 60px;
 $footer-height: 60px;
 $main-padding-top: 1.6rem;
@@ -10,7 +12,7 @@ $main-padding-bottom: 2rem;
 
 // Makes a div sticky to top
 @mixin sticky-top {
-  @include media-breakpoint-up(md) {
+  @include bootstrap.media-breakpoint-up(md) {
     position: sticky;
     top: 0;
     z-index: 1030;
@@ -18,7 +20,7 @@ $main-padding-bottom: 2rem;
 }
 
 @mixin stick-to-header {
-  @include media-breakpoint-up(md) {
+  @include bootstrap.media-breakpoint-up(md) {
     position: sticky;
     top: calc($header-height + $main-padding-top);
   }
@@ -43,7 +45,7 @@ body[data-layout="landing"] {
 
     @include sticky-top;
 
-    @include media-breakpoint-up(md) {
+    @include bootstrap.media-breakpoint-up(md) {
       height: $header-height;
     }
 
@@ -82,7 +84,7 @@ body[data-layout="landing"] {
         flex: 1;
       }
 
-      @include media-breakpoint-up(md) {
+      @include bootstrap.media-breakpoint-up(md) {
         >article [id] {
           scroll-margin-top: $header-height;
         }
@@ -140,7 +142,7 @@ body[data-layout="landing"] {
 
           @include stick-to-header;
 
-          @include media-breakpoint-down(md) {
+          @include bootstrap.media-breakpoint-down(md) {
             flex: 0;
           }
 
@@ -161,7 +163,7 @@ body[data-layout="landing"] {
             display: flex;
             align-items: flex-start;
             margin-top: .5rem;
-            
+
             >button {
               margin-top: -.65em;
               margin-left: -.8em
@@ -177,11 +179,11 @@ body[data-layout="landing"] {
             display: flex;
           }
 
-          @include media-breakpoint-down(lg) {
+          @include bootstrap.media-breakpoint-down(lg) {
             margin: 0 1rem;
           }
 
-          @include media-breakpoint-down(md) {
+          @include bootstrap.media-breakpoint-down(md) {
             margin: 0;
           }
         }
@@ -190,7 +192,10 @@ body[data-layout="landing"] {
           display: block;
           width: 230px;
           max-height: calc(100vh - $header-height - $main-padding-top);
+
+          /* stylelint-disable-next-line declaration-block-no-redundant-longhand-properties */
           overflow-x: hidden;
+          /* stylelint-disable-next-line declaration-block-no-redundant-longhand-properties */
           overflow-y: auto;
 
           @include stick-to-header;
diff --git a/templates/modern/src/markdown.scss b/templates/modern/src/markdown.scss
index 872d40b73b7..23c801606f4 100644
--- a/templates/modern/src/markdown.scss
+++ b/templates/modern/src/markdown.scss
@@ -3,6 +3,9 @@
  * The .NET Foundation licenses this file to you under the MIT license.
  */
 
+@use "bootstrap/scss/bootstrap";
+@use "mixins";
+
 /* External link icon */
 a.external[href]::after {
   font-family: bootstrap-icons;
@@ -16,15 +19,15 @@ a.external[href]::after {
 blockquote {
   border-style: solid;
   border-width: 0 0 0 3px;
-  border-color: $secondary-border-subtle;
+  border-color: bootstrap.$secondary-border-subtle;
   margin: 1.2em 0 2em;
   padding: 0 .8em;
   display: block
 }
 
-@include color-mode(dark) {
+@include bootstrap.color-mode(dark) {
   blockquote {
-    border-color: $secondary-border-subtle-dark;
+    border-color: bootstrap.$secondary-border-subtle-dark;
   }
 }
 
@@ -39,7 +42,7 @@ blockquote {
   font-size: 1rem;
 
   &::before {
-    @include adjust-icon;
+    @include mixins.adjust-icon;
   }
 }
 
diff --git a/templates/modern/src/nav.scss b/templates/modern/src/nav.scss
index dc2657bfab0..7b1447b5f43 100644
--- a/templates/modern/src/nav.scss
+++ b/templates/modern/src/nav.scss
@@ -3,11 +3,14 @@
  * The .NET Foundation licenses this file to you under the MIT license.
  */
 
+@use "bootstrap/scss/bootstrap";
+@use "mixins";
+
 .breadcrumb {
   font-size: 14px;
 
   a {
-    @include underline-on-hover;
+    @include mixins.underline-on-hover;
   }
 }
 
@@ -84,7 +87,7 @@
     }
   }
 
-  @include media-breakpoint-down(md) {
+  @include bootstrap.media-breakpoint-down(md) {
     #navbar {
       flex-direction: column;
       align-items: flex-start;
@@ -137,7 +140,7 @@
       margin: .4rem 0;
 
       a {
-        @include underline-on-hover;
+        @include mixins.underline-on-hover;
       }
     }
   }
@@ -147,13 +150,13 @@
   margin-top: 2rem;
 
   a.edit-link {
-    @include underline-on-hover;
+    @include mixins.underline-on-hover;
 
     &::before {
       content: "\F4CA";
       display: inline-block;
 
-      @include adjust-icon;
+      @include mixins.adjust-icon;
     }
   }
 }
diff --git a/templates/modern/src/nav.ts b/templates/modern/src/nav.ts
index 9660b0a5534..7ff75dcce26 100644
--- a/templates/modern/src/nav.ts
+++ b/templates/modern/src/nav.ts
@@ -142,7 +142,9 @@ function findActiveItem(items: (NavItem | NavItemContainer)[]): NavItem {
       continue
     }
     const prefix = commonUrlPrefix(url, item.href)
-    if (prefix > maxPrefix) {
+    if (prefix === maxPrefix) {
+      activeItem = undefined
+    } else if (prefix > maxPrefix) {
       maxPrefix = prefix
       activeItem = item
     }
diff --git a/templates/modern/src/search.scss b/templates/modern/src/search.scss
index 19b93549730..a385445e181 100644
--- a/templates/modern/src/search.scss
+++ b/templates/modern/src/search.scss
@@ -3,12 +3,14 @@
  * The .NET Foundation licenses this file to you under the MIT license.
  */
 
+@use "bootstrap/scss/bootstrap";
+
 #search-results {
   line-height: 1.8;
 
   >.search-list {
     font-size: .9em;
-    color: $secondary;
+    color: bootstrap.$secondary;
   }
 
   >.sr-items {
diff --git a/templates/modern/src/toc.scss b/templates/modern/src/toc.scss
index 22d112769a6..70a7a03a900 100644
--- a/templates/modern/src/toc.scss
+++ b/templates/modern/src/toc.scss
@@ -3,6 +3,9 @@
  * The .NET Foundation licenses this file to you under the MIT license.
  */
 
+@use "bootstrap/scss/bootstrap";
+@use "mixins";
+
 $expand-stub-width: .85rem;
 
 .toc {
@@ -30,7 +33,7 @@ $expand-stub-width: .85rem;
   li > a {
     display: inline;
 
-    @include underline-on-hover;
+    @include mixins.underline-on-hover;
   }
 
   li > ul {
@@ -90,17 +93,17 @@ $expand-stub-width: .85rem;
 
   >.no-result {
     font-size: .9em;
-    color: $secondary;
+    color: bootstrap.$secondary;
   }
   
   a.pdf-link {
-    @include underline-on-hover;
+    @include mixins.underline-on-hover;
 
     &::before {
       content: "\F756";
       display: inline-block;
 
-      @include adjust-icon;
+      @include mixins.adjust-icon;
     }
   }
 }
diff --git a/templates/modern/src/toc.ts b/templates/modern/src/toc.ts
index 390f8d4c75a..2d2904cdb7e 100644
--- a/templates/modern/src/toc.ts
+++ b/templates/modern/src/toc.ts
@@ -94,7 +94,7 @@ export async function renderToc(): Promise<TocNode[]> {
 
   function renderToc() {
     render(html`
-      ${renderTocFilter()} 
+      ${renderTocFilter()}
       <div class="flex-fill overflow-y-auto">${renderTocNodes(items) || renderNoFilterResult()}</div>
       ${renderDownloadPdf()}`, tocContainer)
   }
diff --git a/templates/package-lock.json b/templates/package-lock.json
index 7444c8f3821..2dd1fcb7bfb 100644
--- a/templates/package-lock.json
+++ b/templates/package-lock.json
@@ -1,7 +1,7 @@
 {
   "name": "@docfx/template",
   "version": "1.0.0",
-  "lockfileVersion": 2,
+  "lockfileVersion": 3,
   "requires": true,
   "packages": {
     "": {
@@ -23,66 +23,86 @@
         "highlight.js": "^11.10.0",
         "idb-keyval": "^6.2.1",
         "jquery": "3.7.0",
-        "lit-html": "^3.2.0",
+        "lit-html": "^3.2.1",
         "lunr": "2.3.9",
         "lunr-languages": "^1.14.0",
         "mathjax": "^3.2.2",
-        "mermaid": "^10.9.1"
+        "mermaid": "^11.4.0",
+        "tsx": "^4.19.2"
       },
       "devDependencies": {
-        "@types/jest": "^29.5.12",
         "@types/lunr": "^2.3.7",
-        "@typescript-eslint/eslint-plugin": "^8.4.0",
-        "@typescript-eslint/parser": "^8.4.0",
-        "browser-sync": "^3.0.2",
-        "esbuild": "~0.23.1",
+        "@typescript-eslint/eslint-plugin": "^8.12.2",
+        "@typescript-eslint/parser": "^8.12.2",
+        "browser-sync": "^3.0.3",
+        "esbuild": "~0.24.0",
         "esbuild-sass-plugin": "~3.3.1",
-        "eslint": "^8.57.0",
+        "eslint": "^8.57.1",
         "eslint-config-standard": "^17.1.0",
-        "jest": "^29.7.0",
-        "stylelint": "^15.10.3",
-        "stylelint-config-standard-scss": "^11.1.0",
-        "ts-jest": "^29.2.5",
-        "typescript": "^5.5.4",
+        "stylelint": "^16.10.0",
+        "stylelint-config-standard-scss": "^13.1.0",
+        "typescript": "^5.6.3",
         "yargs": "^17.7.2"
       }
     },
-    "node_modules/@aashutoshrathi/word-wrap": {
-      "version": "1.2.6",
-      "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz",
-      "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
+    "node_modules/@antfu/install-pkg": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmjs.org/@antfu/install-pkg/-/install-pkg-0.4.1.tgz",
+      "integrity": "sha512-T7yB5QNG29afhWVkVq7XeIMBa5U/vs9mX69YqayXypPRmYzUmzwnYltplHmPtZ4HPCn+sQKeXW8I47wCbuBOjw==",
+      "dependencies": {
+        "package-manager-detector": "^0.2.0",
+        "tinyexec": "^0.3.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/antfu"
       }
     },
-    "node_modules/@ampproject/remapping": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz",
-      "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==",
+    "node_modules/@antfu/utils": {
+      "version": "0.7.10",
+      "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-0.7.10.tgz",
+      "integrity": "sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==",
+      "funding": {
+        "url": "https://github.com/sponsors/antfu"
+      }
+    },
+    "node_modules/@babel/code-frame": {
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.25.7.tgz",
+      "integrity": "sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==",
       "dev": true,
       "dependencies": {
-        "@jridgewell/gen-mapping": "^0.1.0",
-        "@jridgewell/trace-mapping": "^0.3.9"
+        "@babel/highlight": "^7.25.7",
+        "picocolors": "^1.0.0"
       },
       "engines": {
-        "node": ">=6.0.0"
+        "node": ">=6.9.0"
       }
     },
-    "node_modules/@babel/code-frame": {
-      "version": "7.22.13",
-      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz",
-      "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==",
+    "node_modules/@babel/helper-validator-identifier": {
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.7.tgz",
+      "integrity": "sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==",
+      "dev": true,
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/highlight": {
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.25.7.tgz",
+      "integrity": "sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==",
       "dev": true,
       "dependencies": {
-        "@babel/highlight": "^7.22.13",
-        "chalk": "^2.4.2"
+        "@babel/helper-validator-identifier": "^7.25.7",
+        "chalk": "^2.4.2",
+        "js-tokens": "^4.0.0",
+        "picocolors": "^1.0.0"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
-    "node_modules/@babel/code-frame/node_modules/ansi-styles": {
+    "node_modules/@babel/highlight/node_modules/ansi-styles": {
       "version": "3.2.1",
       "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
       "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
@@ -94,7 +114,7 @@
         "node": ">=4"
       }
     },
-    "node_modules/@babel/code-frame/node_modules/chalk": {
+    "node_modules/@babel/highlight/node_modules/chalk": {
       "version": "2.4.2",
       "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
       "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
@@ -108,7 +128,7 @@
         "node": ">=4"
       }
     },
-    "node_modules/@babel/code-frame/node_modules/color-convert": {
+    "node_modules/@babel/highlight/node_modules/color-convert": {
       "version": "1.9.3",
       "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
       "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
@@ -117,13 +137,22 @@
         "color-name": "1.1.3"
       }
     },
-    "node_modules/@babel/code-frame/node_modules/color-name": {
+    "node_modules/@babel/highlight/node_modules/color-name": {
       "version": "1.1.3",
       "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
       "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
       "dev": true
     },
-    "node_modules/@babel/code-frame/node_modules/has-flag": {
+    "node_modules/@babel/highlight/node_modules/escape-string-regexp": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+      "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.8.0"
+      }
+    },
+    "node_modules/@babel/highlight/node_modules/has-flag": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
       "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
@@ -132,7 +161,7 @@
         "node": ">=4"
       }
     },
-    "node_modules/@babel/code-frame/node_modules/supports-color": {
+    "node_modules/@babel/highlight/node_modules/supports-color": {
       "version": "5.5.0",
       "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
       "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
@@ -144,12261 +173,887 @@
         "node": ">=4"
       }
     },
-    "node_modules/@babel/compat-data": {
-      "version": "7.21.0",
-      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.0.tgz",
-      "integrity": "sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==",
+    "node_modules/@braintree/sanitize-url": {
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-7.1.0.tgz",
+      "integrity": "sha512-o+UlMLt49RvtCASlOMW0AkHnabN9wR9rwCCherxO0yG4Npy34GkvrAqdXQvrhNs+jh+gkK8gB8Lf05qL/O7KWg=="
+    },
+    "node_modules/@bufbuild/protobuf": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.2.0.tgz",
+      "integrity": "sha512-+imAQkHf7U/Rwvu0wk1XWgsP3WnpCWmK7B48f0XqSNzgk64+grljTKC7pnO/xBiEMUziF7vKRfbBnOQhg126qQ==",
       "dev": true,
-      "engines": {
-        "node": ">=6.9.0"
+      "peer": true
+    },
+    "node_modules/@chevrotain/cst-dts-gen": {
+      "version": "11.0.3",
+      "resolved": "https://registry.npmjs.org/@chevrotain/cst-dts-gen/-/cst-dts-gen-11.0.3.tgz",
+      "integrity": "sha512-BvIKpRLeS/8UbfxXxgC33xOumsacaeCKAjAeLyOn7Pcp95HiRbrpl14S+9vaZLolnbssPIUuiUd8IvgkRyt6NQ==",
+      "dependencies": {
+        "@chevrotain/gast": "11.0.3",
+        "@chevrotain/types": "11.0.3",
+        "lodash-es": "4.17.21"
       }
     },
-    "node_modules/@babel/core": {
-      "version": "7.21.3",
-      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.3.tgz",
-      "integrity": "sha512-qIJONzoa/qiHghnm0l1n4i/6IIziDpzqc36FBs4pzMhDUraHqponwJLiAKm1hGLP3OSB/TVNz6rMwVGpwxxySw==",
-      "dev": true,
+    "node_modules/@chevrotain/gast": {
+      "version": "11.0.3",
+      "resolved": "https://registry.npmjs.org/@chevrotain/gast/-/gast-11.0.3.tgz",
+      "integrity": "sha512-+qNfcoNk70PyS/uxmj3li5NiECO+2YKZZQMbmjTqRI3Qchu8Hig/Q9vgkHpI3alNjr7M+a2St5pw5w5F6NL5/Q==",
       "dependencies": {
-        "@ampproject/remapping": "^2.2.0",
-        "@babel/code-frame": "^7.18.6",
-        "@babel/generator": "^7.21.3",
-        "@babel/helper-compilation-targets": "^7.20.7",
-        "@babel/helper-module-transforms": "^7.21.2",
-        "@babel/helpers": "^7.21.0",
-        "@babel/parser": "^7.21.3",
-        "@babel/template": "^7.20.7",
-        "@babel/traverse": "^7.21.3",
-        "@babel/types": "^7.21.3",
-        "convert-source-map": "^1.7.0",
-        "debug": "^4.1.0",
-        "gensync": "^1.0.0-beta.2",
-        "json5": "^2.2.2",
-        "semver": "^6.3.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/babel"
+        "@chevrotain/types": "11.0.3",
+        "lodash-es": "4.17.21"
       }
     },
-    "node_modules/@babel/core/node_modules/convert-source-map": {
-      "version": "1.9.0",
-      "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
-      "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
-      "dev": true
+    "node_modules/@chevrotain/regexp-to-ast": {
+      "version": "11.0.3",
+      "resolved": "https://registry.npmjs.org/@chevrotain/regexp-to-ast/-/regexp-to-ast-11.0.3.tgz",
+      "integrity": "sha512-1fMHaBZxLFvWI067AVbGJav1eRY7N8DDvYCTwGBiE/ytKBgP8azTdgyrKyWZ9Mfh09eHWb5PgTSO8wi7U824RA=="
     },
-    "node_modules/@babel/core/node_modules/debug": {
-      "version": "4.3.4",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
-      "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+    "node_modules/@chevrotain/types": {
+      "version": "11.0.3",
+      "resolved": "https://registry.npmjs.org/@chevrotain/types/-/types-11.0.3.tgz",
+      "integrity": "sha512-gsiM3G8b58kZC2HaWR50gu6Y1440cHiJ+i3JUvcp/35JchYejb2+5MVeJK0iKThYpAa/P2PYFV4hoi44HD+aHQ=="
+    },
+    "node_modules/@chevrotain/utils": {
+      "version": "11.0.3",
+      "resolved": "https://registry.npmjs.org/@chevrotain/utils/-/utils-11.0.3.tgz",
+      "integrity": "sha512-YslZMgtJUyuMbZ+aKvfF3x1f5liK4mWNxghFRv7jqRR9C3R3fAOGTTKvxXDa2Y1s9zSbcpuO0cAxDYsc9SrXoQ=="
+    },
+    "node_modules/@csstools/css-parser-algorithms": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.2.tgz",
+      "integrity": "sha512-6tC/MnlEvs5suR4Ahef4YlBccJDHZuxGsAlxXmybWjZ5jPxlzLSMlRZ9mVHSRvlD+CmtE7+hJ+UQbfXrws/rUQ==",
       "dev": true,
-      "dependencies": {
-        "ms": "2.1.2"
-      },
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/csstools"
+        },
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/csstools"
+        }
+      ],
       "engines": {
-        "node": ">=6.0"
+        "node": ">=18"
       },
-      "peerDependenciesMeta": {
-        "supports-color": {
-          "optional": true
-        }
+      "peerDependencies": {
+        "@csstools/css-tokenizer": "^3.0.2"
       }
     },
-    "node_modules/@babel/core/node_modules/json5": {
-      "version": "2.2.3",
-      "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
-      "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+    "node_modules/@csstools/css-tokenizer": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.2.tgz",
+      "integrity": "sha512-IuTRcD53WHsXPCZ6W7ubfGqReTJ9Ra0yRRFmXYP/Re8hFYYfoIYIK4080X5luslVLWimhIeFq0hj09urVMQzTw==",
       "dev": true,
-      "bin": {
-        "json5": "lib/cli.js"
-      },
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/csstools"
+        },
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/csstools"
+        }
+      ],
       "engines": {
-        "node": ">=6"
+        "node": ">=18"
       }
     },
-    "node_modules/@babel/core/node_modules/ms": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-      "dev": true
-    },
-    "node_modules/@babel/core/node_modules/semver": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
-      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+    "node_modules/@csstools/media-query-list-parser": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-3.0.1.tgz",
+      "integrity": "sha512-HNo8gGD02kHmcbX6PvCoUuOQvn4szyB9ca63vZHKX5A81QytgDG4oxG4IaEfHTlEZSZ6MjPEMWIVU+zF2PZcgw==",
       "dev": true,
-      "bin": {
-        "semver": "bin/semver.js"
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/csstools"
+        },
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/csstools"
+        }
+      ],
+      "engines": {
+        "node": ">=18"
+      },
+      "peerDependencies": {
+        "@csstools/css-parser-algorithms": "^3.0.1",
+        "@csstools/css-tokenizer": "^3.0.1"
       }
     },
-    "node_modules/@babel/generator": {
-      "version": "7.23.0",
-      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz",
-      "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==",
+    "node_modules/@csstools/selector-specificity": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-4.0.0.tgz",
+      "integrity": "sha512-189nelqtPd8++phaHNwYovKZI0FOzH1vQEE3QhHHkNIGrg5fSs9CbYP3RvfEH5geztnIA9Jwq91wyOIwAW5JIQ==",
       "dev": true,
-      "dependencies": {
-        "@babel/types": "^7.23.0",
-        "@jridgewell/gen-mapping": "^0.3.2",
-        "@jridgewell/trace-mapping": "^0.3.17",
-        "jsesc": "^2.5.1"
-      },
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/csstools"
+        },
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/csstools"
+        }
+      ],
       "engines": {
-        "node": ">=6.9.0"
+        "node": ">=18"
+      },
+      "peerDependencies": {
+        "postcss-selector-parser": "^6.1.0"
       }
     },
-    "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": {
-      "version": "0.3.2",
-      "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
-      "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
-      "dev": true,
-      "dependencies": {
-        "@jridgewell/set-array": "^1.0.1",
-        "@jridgewell/sourcemap-codec": "^1.4.10",
-        "@jridgewell/trace-mapping": "^0.3.9"
-      },
+    "node_modules/@default/anchor-js": {
+      "name": "anchor-js",
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/anchor-js/-/anchor-js-5.0.0.tgz",
+      "integrity": "sha512-2bOqCsBIXAYhjAN3iI4QevoAJtB2gRWAiY9P3P7CVW8lIjA3Dl6ldhDlWeeQvCHif+V5vIndfLOag/5I8tzTzA=="
+    },
+    "node_modules/@default/bootstrap": {
+      "name": "bootstrap",
+      "version": "3.4.1",
+      "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-3.4.1.tgz",
+      "integrity": "sha512-yN5oZVmRCwe5aKwzRj6736nSmKDX7pLYwsXiCj/EYmo16hODaBiT4En5btW/jhBF/seV+XMx3aYwukYC3A49DA==",
       "engines": {
-        "node": ">=6.0.0"
+        "node": ">=6"
       }
     },
-    "node_modules/@babel/helper-compilation-targets": {
-      "version": "7.20.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz",
-      "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==",
-      "dev": true,
-      "dependencies": {
-        "@babel/compat-data": "^7.20.5",
-        "@babel/helper-validator-option": "^7.18.6",
-        "browserslist": "^4.21.3",
-        "lru-cache": "^5.1.1",
-        "semver": "^6.3.0"
-      },
+    "node_modules/@default/highlight.js": {
+      "name": "highlight.js",
+      "version": "11.8.0",
+      "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.8.0.tgz",
+      "integrity": "sha512-MedQhoqVdr0U6SSnWPzfiadUcDHfN/Wzq25AkXiQv9oiOO/sG0S7XkvpFIqWBl9Yq1UYyYOOVORs5UW2XlPyzg==",
       "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0"
+        "node": ">=12.0.0"
       }
     },
-    "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
-      "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
-      "dev": true,
+    "node_modules/@default/lunr": {
+      "name": "lunr",
+      "version": "2.3.9",
+      "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz",
+      "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow=="
+    },
+    "node_modules/@default/mark.js": {
+      "name": "mark.js",
+      "version": "8.11.1",
+      "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz",
+      "integrity": "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ=="
+    },
+    "node_modules/@default/twbs-pagination": {
+      "name": "twbs-pagination",
+      "version": "1.3.1",
+      "resolved": "git+ssh://git@github.com/josecebe/twbs-pagination.git#a0ceda4b492030ca12081ce08c1acca1d295c0ed",
       "dependencies": {
-        "yallist": "^3.0.2"
+        "jquery": ">=1.7.0"
       }
     },
-    "node_modules/@babel/helper-compilation-targets/node_modules/semver": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
-      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+    "node_modules/@default/url": {
+      "name": "@websanova/url",
+      "version": "2.6.3",
+      "resolved": "https://registry.npmjs.org/@websanova/url/-/url-2.6.3.tgz",
+      "integrity": "sha512-+gLI+9nIVPg3X4VcC30MUrGd9/DmYPla2ryzl7qKzIbH07wgsgy99H2WRsSFweVgV4FLkTHEpClj1//t0u+FLw=="
+    },
+    "node_modules/@dual-bundle/import-meta-resolve": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz",
+      "integrity": "sha512-+nxncfwHM5SgAtrVzgpzJOI1ol0PkumhVo469KCf9lUi21IGcY90G98VuHm9VRrUypmAzawAHO9bs6hqeADaVg==",
       "dev": true,
-      "bin": {
-        "semver": "bin/semver.js"
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
       }
     },
-    "node_modules/@babel/helper-compilation-targets/node_modules/yallist": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
-      "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
-      "dev": true
-    },
-    "node_modules/@babel/helper-environment-visitor": {
-      "version": "7.22.20",
-      "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
-      "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==",
+    "node_modules/@esbuild/win32-x64": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.0.tgz",
+      "integrity": "sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==",
+      "cpu": [
+        "x64"
+      ],
       "dev": true,
+      "optional": true,
+      "os": [
+        "win32"
+      ],
       "engines": {
-        "node": ">=6.9.0"
+        "node": ">=18"
       }
     },
-    "node_modules/@babel/helper-function-name": {
-      "version": "7.23.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz",
-      "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==",
+    "node_modules/@eslint-community/eslint-utils": {
+      "version": "4.4.0",
+      "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
+      "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
       "dev": true,
       "dependencies": {
-        "@babel/template": "^7.22.15",
-        "@babel/types": "^7.23.0"
+        "eslint-visitor-keys": "^3.3.0"
       },
       "engines": {
-        "node": ">=6.9.0"
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "peerDependencies": {
+        "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
       }
     },
-    "node_modules/@babel/helper-hoist-variables": {
-      "version": "7.22.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
-      "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
+    "node_modules/@eslint-community/regexpp": {
+      "version": "4.11.1",
+      "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.1.tgz",
+      "integrity": "sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==",
       "dev": true,
-      "dependencies": {
-        "@babel/types": "^7.22.5"
-      },
       "engines": {
-        "node": ">=6.9.0"
+        "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
       }
     },
-    "node_modules/@babel/helper-module-imports": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz",
-      "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==",
+    "node_modules/@eslint/eslintrc": {
+      "version": "2.1.4",
+      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
+      "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
       "dev": true,
       "dependencies": {
-        "@babel/types": "^7.18.6"
+        "ajv": "^6.12.4",
+        "debug": "^4.3.2",
+        "espree": "^9.6.0",
+        "globals": "^13.19.0",
+        "ignore": "^5.2.0",
+        "import-fresh": "^3.2.1",
+        "js-yaml": "^4.1.0",
+        "minimatch": "^3.1.2",
+        "strip-json-comments": "^3.1.1"
       },
       "engines": {
-        "node": ">=6.9.0"
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
       }
     },
-    "node_modules/@babel/helper-module-transforms": {
-      "version": "7.21.2",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz",
-      "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==",
+    "node_modules/@eslint/eslintrc/node_modules/brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-environment-visitor": "^7.18.9",
-        "@babel/helper-module-imports": "^7.18.6",
-        "@babel/helper-simple-access": "^7.20.2",
-        "@babel/helper-split-export-declaration": "^7.18.6",
-        "@babel/helper-validator-identifier": "^7.19.1",
-        "@babel/template": "^7.20.7",
-        "@babel/traverse": "^7.21.2",
-        "@babel/types": "^7.21.2"
-      },
-      "engines": {
-        "node": ">=6.9.0"
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
       }
     },
-    "node_modules/@babel/helper-plugin-utils": {
-      "version": "7.22.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz",
-      "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==",
-      "dev": true,
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-simple-access": {
-      "version": "7.20.2",
-      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz",
-      "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==",
-      "dev": true,
-      "dependencies": {
-        "@babel/types": "^7.20.2"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-split-export-declaration": {
-      "version": "7.22.6",
-      "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
-      "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
+    "node_modules/@eslint/eslintrc/node_modules/minimatch": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
       "dev": true,
       "dependencies": {
-        "@babel/types": "^7.22.5"
+        "brace-expansion": "^1.1.7"
       },
       "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-string-parser": {
-      "version": "7.22.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz",
-      "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==",
-      "dev": true,
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-validator-identifier": {
-      "version": "7.22.20",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
-      "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
-      "dev": true,
-      "engines": {
-        "node": ">=6.9.0"
+        "node": "*"
       }
     },
-    "node_modules/@babel/helper-validator-option": {
-      "version": "7.21.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz",
-      "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==",
+    "node_modules/@eslint/js": {
+      "version": "8.57.1",
+      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz",
+      "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==",
       "dev": true,
       "engines": {
-        "node": ">=6.9.0"
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
       }
     },
-    "node_modules/@babel/helpers": {
-      "version": "7.21.0",
-      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz",
-      "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==",
+    "node_modules/@humanwhocodes/config-array": {
+      "version": "0.13.0",
+      "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz",
+      "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==",
+      "deprecated": "Use @eslint/config-array instead",
       "dev": true,
       "dependencies": {
-        "@babel/template": "^7.20.7",
-        "@babel/traverse": "^7.21.0",
-        "@babel/types": "^7.21.0"
+        "@humanwhocodes/object-schema": "^2.0.3",
+        "debug": "^4.3.1",
+        "minimatch": "^3.0.5"
       },
       "engines": {
-        "node": ">=6.9.0"
+        "node": ">=10.10.0"
       }
     },
-    "node_modules/@babel/highlight": {
-      "version": "7.22.20",
-      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz",
-      "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==",
+    "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-validator-identifier": "^7.22.20",
-        "chalk": "^2.4.2",
-        "js-tokens": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
       }
     },
-    "node_modules/@babel/highlight/node_modules/ansi-styles": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
-      "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+    "node_modules/@humanwhocodes/config-array/node_modules/minimatch": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
       "dev": true,
       "dependencies": {
-        "color-convert": "^1.9.0"
+        "brace-expansion": "^1.1.7"
       },
       "engines": {
-        "node": ">=4"
+        "node": "*"
       }
     },
-    "node_modules/@babel/highlight/node_modules/chalk": {
-      "version": "2.4.2",
-      "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
-      "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+    "node_modules/@humanwhocodes/module-importer": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+      "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
       "dev": true,
-      "dependencies": {
-        "ansi-styles": "^3.2.1",
-        "escape-string-regexp": "^1.0.5",
-        "supports-color": "^5.3.0"
-      },
       "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/@babel/highlight/node_modules/color-convert": {
-      "version": "1.9.3",
-      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
-      "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
-      "dev": true,
-      "dependencies": {
-        "color-name": "1.1.3"
+        "node": ">=12.22"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/nzakas"
       }
     },
-    "node_modules/@babel/highlight/node_modules/color-name": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
-      "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+    "node_modules/@humanwhocodes/object-schema": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz",
+      "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==",
+      "deprecated": "Use @eslint/object-schema instead",
       "dev": true
     },
-    "node_modules/@babel/highlight/node_modules/has-flag": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
-      "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
+    "node_modules/@iconify/types": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz",
+      "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg=="
     },
-    "node_modules/@babel/highlight/node_modules/supports-color": {
-      "version": "5.5.0",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
-      "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
-      "dev": true,
+    "node_modules/@iconify/utils": {
+      "version": "2.1.33",
+      "resolved": "https://registry.npmjs.org/@iconify/utils/-/utils-2.1.33.tgz",
+      "integrity": "sha512-jP9h6v/g0BIZx0p7XGJJVtkVnydtbgTgt9mVNcGDYwaa7UhdHdI9dvoq+gKj9sijMSJKxUPEG2JyjsgXjxL7Kw==",
       "dependencies": {
-        "has-flag": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/@babel/parser": {
-      "version": "7.23.0",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz",
-      "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==",
-      "dev": true,
-      "bin": {
-        "parser": "bin/babel-parser.js"
-      },
-      "engines": {
-        "node": ">=6.0.0"
+        "@antfu/install-pkg": "^0.4.0",
+        "@antfu/utils": "^0.7.10",
+        "@iconify/types": "^2.0.0",
+        "debug": "^4.3.6",
+        "kolorist": "^1.8.0",
+        "local-pkg": "^0.5.0",
+        "mlly": "^1.7.1"
       }
     },
-    "node_modules/@babel/plugin-syntax-async-generators": {
-      "version": "7.8.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
-      "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
-      "dev": true,
+    "node_modules/@mermaid-js/parser": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/@mermaid-js/parser/-/parser-0.3.0.tgz",
+      "integrity": "sha512-HsvL6zgE5sUPGgkIDlmAWR1HTNHz2Iy11BAWPTa4Jjabkpguy4Ze2gzfLrg6pdRuBvFwgUYyxiaNqZwrEEXepA==",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.8.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
+        "langium": "3.0.0"
       }
     },
-    "node_modules/@babel/plugin-syntax-bigint": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz",
-      "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==",
+    "node_modules/@nodelib/fs.scandir": {
+      "version": "2.1.5",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+      "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.8.0"
+        "@nodelib/fs.stat": "2.0.5",
+        "run-parallel": "^1.1.9"
       },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
+      "engines": {
+        "node": ">= 8"
       }
     },
-    "node_modules/@babel/plugin-syntax-class-properties": {
-      "version": "7.12.13",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
-      "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
+    "node_modules/@nodelib/fs.stat": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+      "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
       "dev": true,
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.12.13"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
+      "engines": {
+        "node": ">= 8"
       }
     },
-    "node_modules/@babel/plugin-syntax-import-meta": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
-      "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
+    "node_modules/@nodelib/fs.walk": {
+      "version": "1.2.8",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+      "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.10.4"
+        "@nodelib/fs.scandir": "2.1.5",
+        "fastq": "^1.6.0"
       },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
+      "engines": {
+        "node": ">= 8"
       }
     },
-    "node_modules/@babel/plugin-syntax-json-strings": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
-      "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
+    "node_modules/@parcel/watcher": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.4.1.tgz",
+      "integrity": "sha512-HNjmfLQEVRZmHRET336f20H/8kOozUGwk7yajvsonjNxbj2wBTK1WsQuHkD5yYh9RxFGL2EyDHryOihOwUoKDA==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.8.0"
+        "detect-libc": "^1.0.3",
+        "is-glob": "^4.0.3",
+        "micromatch": "^4.0.5",
+        "node-addon-api": "^7.0.0"
       },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-syntax-jsx": {
-      "version": "7.22.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz",
-      "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.22.5"
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
       },
+      "optionalDependencies": {
+        "@parcel/watcher-android-arm64": "2.4.1",
+        "@parcel/watcher-darwin-arm64": "2.4.1",
+        "@parcel/watcher-darwin-x64": "2.4.1",
+        "@parcel/watcher-freebsd-x64": "2.4.1",
+        "@parcel/watcher-linux-arm-glibc": "2.4.1",
+        "@parcel/watcher-linux-arm64-glibc": "2.4.1",
+        "@parcel/watcher-linux-arm64-musl": "2.4.1",
+        "@parcel/watcher-linux-x64-glibc": "2.4.1",
+        "@parcel/watcher-linux-x64-musl": "2.4.1",
+        "@parcel/watcher-win32-arm64": "2.4.1",
+        "@parcel/watcher-win32-ia32": "2.4.1",
+        "@parcel/watcher-win32-x64": "2.4.1"
+      }
+    },
+    "node_modules/@parcel/watcher-win32-x64": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.4.1.tgz",
+      "integrity": "sha512-+DvS92F9ezicfswqrvIRM2njcYJbd5mb9CUgtrHCHmvn7pPPa+nMDRu1o1bYYz/l5IB2NVGNJWiH7h1E58IF2A==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "win32"
+      ],
       "engines": {
-        "node": ">=6.9.0"
+        "node": ">= 10.0.0"
       },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
       }
     },
-    "node_modules/@babel/plugin-syntax-logical-assignment-operators": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
-      "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
+    "node_modules/@popperjs/core": {
+      "version": "2.11.8",
+      "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz",
+      "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==",
+      "peer": true,
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/popperjs"
       }
     },
-    "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
-      "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
+    "node_modules/@rtsao/scc": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz",
+      "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==",
       "dev": true,
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.8.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
+      "peer": true
+    },
+    "node_modules/@socket.io/component-emitter": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz",
+      "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==",
+      "dev": true
+    },
+    "node_modules/@types/cookie": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz",
+      "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==",
+      "dev": true
     },
-    "node_modules/@babel/plugin-syntax-numeric-separator": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
-      "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
+    "node_modules/@types/cors": {
+      "version": "2.8.17",
+      "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz",
+      "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
+        "@types/node": "*"
       }
     },
-    "node_modules/@babel/plugin-syntax-object-rest-spread": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
-      "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
-      "dev": true,
+    "node_modules/@types/d3": {
+      "version": "7.4.3",
+      "resolved": "https://registry.npmjs.org/@types/d3/-/d3-7.4.3.tgz",
+      "integrity": "sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==",
+      "dependencies": {
+        "@types/d3-array": "*",
+        "@types/d3-axis": "*",
+        "@types/d3-brush": "*",
+        "@types/d3-chord": "*",
+        "@types/d3-color": "*",
+        "@types/d3-contour": "*",
+        "@types/d3-delaunay": "*",
+        "@types/d3-dispatch": "*",
+        "@types/d3-drag": "*",
+        "@types/d3-dsv": "*",
+        "@types/d3-ease": "*",
+        "@types/d3-fetch": "*",
+        "@types/d3-force": "*",
+        "@types/d3-format": "*",
+        "@types/d3-geo": "*",
+        "@types/d3-hierarchy": "*",
+        "@types/d3-interpolate": "*",
+        "@types/d3-path": "*",
+        "@types/d3-polygon": "*",
+        "@types/d3-quadtree": "*",
+        "@types/d3-random": "*",
+        "@types/d3-scale": "*",
+        "@types/d3-scale-chromatic": "*",
+        "@types/d3-selection": "*",
+        "@types/d3-shape": "*",
+        "@types/d3-time": "*",
+        "@types/d3-time-format": "*",
+        "@types/d3-timer": "*",
+        "@types/d3-transition": "*",
+        "@types/d3-zoom": "*"
+      }
+    },
+    "node_modules/@types/d3-array": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz",
+      "integrity": "sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg=="
+    },
+    "node_modules/@types/d3-axis": {
+      "version": "3.0.6",
+      "resolved": "https://registry.npmjs.org/@types/d3-axis/-/d3-axis-3.0.6.tgz",
+      "integrity": "sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.8.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
+        "@types/d3-selection": "*"
       }
     },
-    "node_modules/@babel/plugin-syntax-optional-catch-binding": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
-      "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
-      "dev": true,
+    "node_modules/@types/d3-brush": {
+      "version": "3.0.6",
+      "resolved": "https://registry.npmjs.org/@types/d3-brush/-/d3-brush-3.0.6.tgz",
+      "integrity": "sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.8.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
+        "@types/d3-selection": "*"
       }
     },
-    "node_modules/@babel/plugin-syntax-optional-chaining": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
-      "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
-      "dev": true,
+    "node_modules/@types/d3-chord": {
+      "version": "3.0.6",
+      "resolved": "https://registry.npmjs.org/@types/d3-chord/-/d3-chord-3.0.6.tgz",
+      "integrity": "sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg=="
+    },
+    "node_modules/@types/d3-color": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz",
+      "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A=="
+    },
+    "node_modules/@types/d3-contour": {
+      "version": "3.0.6",
+      "resolved": "https://registry.npmjs.org/@types/d3-contour/-/d3-contour-3.0.6.tgz",
+      "integrity": "sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.8.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
+        "@types/d3-array": "*",
+        "@types/geojson": "*"
       }
     },
-    "node_modules/@babel/plugin-syntax-top-level-await": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
-      "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
-      "dev": true,
+    "node_modules/@types/d3-delaunay": {
+      "version": "6.0.4",
+      "resolved": "https://registry.npmjs.org/@types/d3-delaunay/-/d3-delaunay-6.0.4.tgz",
+      "integrity": "sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw=="
+    },
+    "node_modules/@types/d3-dispatch": {
+      "version": "3.0.6",
+      "resolved": "https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-3.0.6.tgz",
+      "integrity": "sha512-4fvZhzMeeuBJYZXRXrRIQnvUYfyXwYmLsdiN7XXmVNQKKw1cM8a5WdID0g1hVFZDqT9ZqZEY5pD44p24VS7iZQ=="
+    },
+    "node_modules/@types/d3-drag": {
+      "version": "3.0.7",
+      "resolved": "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-3.0.7.tgz",
+      "integrity": "sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.14.5"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
+        "@types/d3-selection": "*"
       }
     },
-    "node_modules/@babel/plugin-syntax-typescript": {
-      "version": "7.22.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz",
-      "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==",
-      "dev": true,
+    "node_modules/@types/d3-dsv": {
+      "version": "3.0.7",
+      "resolved": "https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-3.0.7.tgz",
+      "integrity": "sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g=="
+    },
+    "node_modules/@types/d3-ease": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz",
+      "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA=="
+    },
+    "node_modules/@types/d3-fetch": {
+      "version": "3.0.7",
+      "resolved": "https://registry.npmjs.org/@types/d3-fetch/-/d3-fetch-3.0.7.tgz",
+      "integrity": "sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.22.5"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
+        "@types/d3-dsv": "*"
       }
     },
-    "node_modules/@babel/template": {
-      "version": "7.22.15",
-      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz",
-      "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==",
-      "dev": true,
+    "node_modules/@types/d3-force": {
+      "version": "3.0.10",
+      "resolved": "https://registry.npmjs.org/@types/d3-force/-/d3-force-3.0.10.tgz",
+      "integrity": "sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw=="
+    },
+    "node_modules/@types/d3-format": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/@types/d3-format/-/d3-format-3.0.4.tgz",
+      "integrity": "sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g=="
+    },
+    "node_modules/@types/d3-geo": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/@types/d3-geo/-/d3-geo-3.1.0.tgz",
+      "integrity": "sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==",
       "dependencies": {
-        "@babel/code-frame": "^7.22.13",
-        "@babel/parser": "^7.22.15",
-        "@babel/types": "^7.22.15"
-      },
-      "engines": {
-        "node": ">=6.9.0"
+        "@types/geojson": "*"
       }
     },
-    "node_modules/@babel/traverse": {
-      "version": "7.23.2",
-      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz",
-      "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==",
-      "dev": true,
+    "node_modules/@types/d3-hierarchy": {
+      "version": "3.1.7",
+      "resolved": "https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-3.1.7.tgz",
+      "integrity": "sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg=="
+    },
+    "node_modules/@types/d3-interpolate": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz",
+      "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==",
       "dependencies": {
-        "@babel/code-frame": "^7.22.13",
-        "@babel/generator": "^7.23.0",
-        "@babel/helper-environment-visitor": "^7.22.20",
-        "@babel/helper-function-name": "^7.23.0",
-        "@babel/helper-hoist-variables": "^7.22.5",
-        "@babel/helper-split-export-declaration": "^7.22.6",
-        "@babel/parser": "^7.23.0",
-        "@babel/types": "^7.23.0",
-        "debug": "^4.1.0",
-        "globals": "^11.1.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
+        "@types/d3-color": "*"
       }
     },
-    "node_modules/@babel/traverse/node_modules/debug": {
-      "version": "4.3.4",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
-      "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
-      "dev": true,
-      "dependencies": {
-        "ms": "2.1.2"
-      },
-      "engines": {
-        "node": ">=6.0"
-      },
-      "peerDependenciesMeta": {
-        "supports-color": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@babel/traverse/node_modules/globals": {
-      "version": "11.12.0",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
-      "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/@babel/traverse/node_modules/ms": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-      "dev": true
-    },
-    "node_modules/@babel/types": {
-      "version": "7.23.0",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz",
-      "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-string-parser": "^7.22.5",
-        "@babel/helper-validator-identifier": "^7.22.20",
-        "to-fast-properties": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@bcoe/v8-coverage": {
-      "version": "0.2.3",
-      "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz",
-      "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
-      "dev": true
-    },
-    "node_modules/@braintree/sanitize-url": {
-      "version": "6.0.2",
-      "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-6.0.2.tgz",
-      "integrity": "sha512-Tbsj02wXCbqGmzdnXNk0SOF19ChhRU70BsroIi4Pm6Ehp56in6vch94mfbdQ17DozxkL3BAVjbZ4Qc1a0HFRAg=="
-    },
-    "node_modules/@bufbuild/protobuf": {
-      "version": "1.7.2",
-      "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-1.7.2.tgz",
-      "integrity": "sha512-i5GE2Dk5ekdlK1TR7SugY4LWRrKSfb5T1Qn4unpIMbfxoeGKERKQ59HG3iYewacGD10SR7UzevfPnh6my4tNmQ==",
-      "dev": true,
-      "peer": true
-    },
-    "node_modules/@csstools/css-parser-algorithms": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.3.1.tgz",
-      "integrity": "sha512-xrvsmVUtefWMWQsGgFffqWSK03pZ1vfDki4IVIIUxxDKnGBzqNgv0A7SB1oXtVNEkcVO8xi1ZrTL29HhSu5kGA==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/csstools"
-        },
-        {
-          "type": "opencollective",
-          "url": "https://opencollective.com/csstools"
-        }
-      ],
-      "engines": {
-        "node": "^14 || ^16 || >=18"
-      },
-      "peerDependencies": {
-        "@csstools/css-tokenizer": "^2.2.0"
-      }
-    },
-    "node_modules/@csstools/css-tokenizer": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.0.tgz",
-      "integrity": "sha512-wErmsWCbsmig8sQKkM6pFhr/oPha1bHfvxsUY5CYSQxwyhA9Ulrs8EqCgClhg4Tgg2XapVstGqSVcz0xOYizZA==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/csstools"
-        },
-        {
-          "type": "opencollective",
-          "url": "https://opencollective.com/csstools"
-        }
-      ],
-      "engines": {
-        "node": "^14 || ^16 || >=18"
-      }
-    },
-    "node_modules/@csstools/media-query-list-parser": {
-      "version": "2.1.4",
-      "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.4.tgz",
-      "integrity": "sha512-V/OUXYX91tAC1CDsiY+HotIcJR+vPtzrX8pCplCpT++i8ThZZsq5F5dzZh/bDM3WUOjrvC1ljed1oSJxMfjqhw==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/csstools"
-        },
-        {
-          "type": "opencollective",
-          "url": "https://opencollective.com/csstools"
-        }
-      ],
-      "engines": {
-        "node": "^14 || ^16 || >=18"
-      },
-      "peerDependencies": {
-        "@csstools/css-parser-algorithms": "^2.3.1",
-        "@csstools/css-tokenizer": "^2.2.0"
-      }
-    },
-    "node_modules/@csstools/selector-specificity": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.0.tgz",
-      "integrity": "sha512-hBI9tfBtuPIi885ZsZ32IMEU/5nlZH/KOVYJCOh7gyMxaVLGmLedYqFN6Ui1LXkI8JlC8IsuC0rF0btcRZKd5g==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/csstools"
-        },
-        {
-          "type": "opencollective",
-          "url": "https://opencollective.com/csstools"
-        }
-      ],
-      "engines": {
-        "node": "^14 || ^16 || >=18"
-      },
-      "peerDependencies": {
-        "postcss-selector-parser": "^6.0.13"
-      }
-    },
-    "node_modules/@default/anchor-js": {
-      "name": "anchor-js",
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/anchor-js/-/anchor-js-5.0.0.tgz",
-      "integrity": "sha512-2bOqCsBIXAYhjAN3iI4QevoAJtB2gRWAiY9P3P7CVW8lIjA3Dl6ldhDlWeeQvCHif+V5vIndfLOag/5I8tzTzA=="
-    },
-    "node_modules/@default/bootstrap": {
-      "name": "bootstrap",
-      "version": "3.4.1",
-      "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-3.4.1.tgz",
-      "integrity": "sha512-yN5oZVmRCwe5aKwzRj6736nSmKDX7pLYwsXiCj/EYmo16hODaBiT4En5btW/jhBF/seV+XMx3aYwukYC3A49DA==",
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/@default/highlight.js": {
-      "name": "highlight.js",
-      "version": "11.8.0",
-      "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.8.0.tgz",
-      "integrity": "sha512-MedQhoqVdr0U6SSnWPzfiadUcDHfN/Wzq25AkXiQv9oiOO/sG0S7XkvpFIqWBl9Yq1UYyYOOVORs5UW2XlPyzg==",
-      "engines": {
-        "node": ">=12.0.0"
-      }
-    },
-    "node_modules/@default/lunr": {
-      "name": "lunr",
-      "version": "2.3.9",
-      "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz",
-      "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow=="
-    },
-    "node_modules/@default/mark.js": {
-      "name": "mark.js",
-      "version": "8.11.1",
-      "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz",
-      "integrity": "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ=="
-    },
-    "node_modules/@default/twbs-pagination": {
-      "name": "twbs-pagination",
-      "version": "1.3.1",
-      "resolved": "git+ssh://git@github.com/josecebe/twbs-pagination.git#a0ceda4b492030ca12081ce08c1acca1d295c0ed",
-      "license": "Apache 2.0",
-      "dependencies": {
-        "jquery": ">=1.7.0"
-      }
-    },
-    "node_modules/@default/url": {
-      "name": "@websanova/url",
-      "version": "2.6.3",
-      "resolved": "https://registry.npmjs.org/@websanova/url/-/url-2.6.3.tgz",
-      "integrity": "sha512-+gLI+9nIVPg3X4VcC30MUrGd9/DmYPla2ryzl7qKzIbH07wgsgy99H2WRsSFweVgV4FLkTHEpClj1//t0u+FLw=="
-    },
-    "node_modules/@esbuild/aix-ppc64": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz",
-      "integrity": "sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==",
-      "cpu": [
-        "ppc64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "aix"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/android-arm": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.1.tgz",
-      "integrity": "sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==",
-      "cpu": [
-        "arm"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "android"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/android-arm64": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz",
-      "integrity": "sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "android"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/android-x64": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.1.tgz",
-      "integrity": "sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "android"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/darwin-arm64": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz",
-      "integrity": "sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/darwin-x64": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz",
-      "integrity": "sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/freebsd-arm64": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz",
-      "integrity": "sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "freebsd"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/freebsd-x64": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz",
-      "integrity": "sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "freebsd"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/linux-arm": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz",
-      "integrity": "sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==",
-      "cpu": [
-        "arm"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/linux-arm64": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz",
-      "integrity": "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/linux-ia32": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz",
-      "integrity": "sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==",
-      "cpu": [
-        "ia32"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/linux-loong64": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz",
-      "integrity": "sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==",
-      "cpu": [
-        "loong64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/linux-mips64el": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz",
-      "integrity": "sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==",
-      "cpu": [
-        "mips64el"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/linux-ppc64": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz",
-      "integrity": "sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==",
-      "cpu": [
-        "ppc64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/linux-riscv64": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz",
-      "integrity": "sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==",
-      "cpu": [
-        "riscv64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/linux-s390x": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz",
-      "integrity": "sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==",
-      "cpu": [
-        "s390x"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/linux-x64": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz",
-      "integrity": "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/netbsd-x64": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz",
-      "integrity": "sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "netbsd"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/openbsd-arm64": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz",
-      "integrity": "sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "openbsd"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/openbsd-x64": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz",
-      "integrity": "sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "openbsd"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/sunos-x64": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz",
-      "integrity": "sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "sunos"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/win32-arm64": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz",
-      "integrity": "sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "win32"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/win32-ia32": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz",
-      "integrity": "sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==",
-      "cpu": [
-        "ia32"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "win32"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/win32-x64": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz",
-      "integrity": "sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "win32"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@eslint-community/eslint-utils": {
-      "version": "4.4.0",
-      "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
-      "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
-      "dev": true,
-      "dependencies": {
-        "eslint-visitor-keys": "^3.3.0"
-      },
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "peerDependencies": {
-        "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
-      }
-    },
-    "node_modules/@eslint-community/regexpp": {
-      "version": "4.10.0",
-      "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz",
-      "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==",
-      "dev": true,
-      "engines": {
-        "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
-      }
-    },
-    "node_modules/@eslint/eslintrc": {
-      "version": "2.1.4",
-      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
-      "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
-      "dev": true,
-      "dependencies": {
-        "ajv": "^6.12.4",
-        "debug": "^4.3.2",
-        "espree": "^9.6.0",
-        "globals": "^13.19.0",
-        "ignore": "^5.2.0",
-        "import-fresh": "^3.2.1",
-        "js-yaml": "^4.1.0",
-        "minimatch": "^3.1.2",
-        "strip-json-comments": "^3.1.1"
-      },
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      }
-    },
-    "node_modules/@eslint/eslintrc/node_modules/debug": {
-      "version": "4.3.4",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
-      "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
-      "dev": true,
-      "dependencies": {
-        "ms": "2.1.2"
-      },
-      "engines": {
-        "node": ">=6.0"
-      },
-      "peerDependenciesMeta": {
-        "supports-color": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@eslint/eslintrc/node_modules/ms": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-      "dev": true
-    },
-    "node_modules/@eslint/js": {
-      "version": "8.57.0",
-      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz",
-      "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==",
-      "dev": true,
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      }
-    },
-    "node_modules/@humanwhocodes/config-array": {
-      "version": "0.11.14",
-      "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz",
-      "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==",
-      "dev": true,
-      "dependencies": {
-        "@humanwhocodes/object-schema": "^2.0.2",
-        "debug": "^4.3.1",
-        "minimatch": "^3.0.5"
-      },
-      "engines": {
-        "node": ">=10.10.0"
-      }
-    },
-    "node_modules/@humanwhocodes/config-array/node_modules/debug": {
-      "version": "4.3.4",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
-      "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
-      "dev": true,
-      "dependencies": {
-        "ms": "2.1.2"
-      },
-      "engines": {
-        "node": ">=6.0"
-      },
-      "peerDependenciesMeta": {
-        "supports-color": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@humanwhocodes/config-array/node_modules/ms": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-      "dev": true
-    },
-    "node_modules/@humanwhocodes/module-importer": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
-      "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
-      "dev": true,
-      "engines": {
-        "node": ">=12.22"
-      },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/nzakas"
-      }
-    },
-    "node_modules/@humanwhocodes/object-schema": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz",
-      "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==",
-      "dev": true
-    },
-    "node_modules/@istanbuljs/load-nyc-config": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
-      "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==",
-      "dev": true,
-      "dependencies": {
-        "camelcase": "^5.3.1",
-        "find-up": "^4.1.0",
-        "get-package-type": "^0.1.0",
-        "js-yaml": "^3.13.1",
-        "resolve-from": "^5.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": {
-      "version": "1.0.10",
-      "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
-      "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
-      "dev": true,
-      "dependencies": {
-        "sprintf-js": "~1.0.2"
-      }
-    },
-    "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
-      "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
-      "dev": true,
-      "dependencies": {
-        "locate-path": "^5.0.0",
-        "path-exists": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": {
-      "version": "3.14.1",
-      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
-      "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
-      "dev": true,
-      "dependencies": {
-        "argparse": "^1.0.7",
-        "esprima": "^4.0.0"
-      },
-      "bin": {
-        "js-yaml": "bin/js-yaml.js"
-      }
-    },
-    "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
-      "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
-      "dev": true,
-      "dependencies": {
-        "p-locate": "^4.1.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
-      "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
-      "dev": true,
-      "dependencies": {
-        "p-try": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=6"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
-      "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
-      "dev": true,
-      "dependencies": {
-        "p-limit": "^2.2.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
-      "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/@istanbuljs/schema": {
-      "version": "0.1.3",
-      "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
-      "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/@jest/console": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz",
-      "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==",
-      "dev": true,
-      "dependencies": {
-        "@jest/types": "^29.6.3",
-        "@types/node": "*",
-        "chalk": "^4.0.0",
-        "jest-message-util": "^29.7.0",
-        "jest-util": "^29.7.0",
-        "slash": "^3.0.0"
-      },
-      "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
-      }
-    },
-    "node_modules/@jest/core": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz",
-      "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==",
-      "dev": true,
-      "dependencies": {
-        "@jest/console": "^29.7.0",
-        "@jest/reporters": "^29.7.0",
-        "@jest/test-result": "^29.7.0",
-        "@jest/transform": "^29.7.0",
-        "@jest/types": "^29.6.3",
-        "@types/node": "*",
-        "ansi-escapes": "^4.2.1",
-        "chalk": "^4.0.0",
-        "ci-info": "^3.2.0",
-        "exit": "^0.1.2",
-        "graceful-fs": "^4.2.9",
-        "jest-changed-files": "^29.7.0",
-        "jest-config": "^29.7.0",
-        "jest-haste-map": "^29.7.0",
-        "jest-message-util": "^29.7.0",
-        "jest-regex-util": "^29.6.3",
-        "jest-resolve": "^29.7.0",
-        "jest-resolve-dependencies": "^29.7.0",
-        "jest-runner": "^29.7.0",
-        "jest-runtime": "^29.7.0",
-        "jest-snapshot": "^29.7.0",
-        "jest-util": "^29.7.0",
-        "jest-validate": "^29.7.0",
-        "jest-watcher": "^29.7.0",
-        "micromatch": "^4.0.4",
-        "pretty-format": "^29.7.0",
-        "slash": "^3.0.0",
-        "strip-ansi": "^6.0.0"
-      },
-      "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
-      },
-      "peerDependencies": {
-        "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
-      },
-      "peerDependenciesMeta": {
-        "node-notifier": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@jest/environment": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz",
-      "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==",
-      "dev": true,
-      "dependencies": {
-        "@jest/fake-timers": "^29.7.0",
-        "@jest/types": "^29.6.3",
-        "@types/node": "*",
-        "jest-mock": "^29.7.0"
-      },
-      "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
-      }
-    },
-    "node_modules/@jest/expect": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz",
-      "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==",
-      "dev": true,
-      "dependencies": {
-        "expect": "^29.7.0",
-        "jest-snapshot": "^29.7.0"
-      },
-      "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
-      }
-    },
-    "node_modules/@jest/expect-utils": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz",
-      "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==",
-      "dev": true,
-      "dependencies": {
-        "jest-get-type": "^29.6.3"
-      },
-      "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
-      }
-    },
-    "node_modules/@jest/fake-timers": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz",
-      "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==",
-      "dev": true,
-      "dependencies": {
-        "@jest/types": "^29.6.3",
-        "@sinonjs/fake-timers": "^10.0.2",
-        "@types/node": "*",
-        "jest-message-util": "^29.7.0",
-        "jest-mock": "^29.7.0",
-        "jest-util": "^29.7.0"
-      },
-      "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
-      }
-    },
-    "node_modules/@jest/globals": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz",
-      "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==",
-      "dev": true,
-      "dependencies": {
-        "@jest/environment": "^29.7.0",
-        "@jest/expect": "^29.7.0",
-        "@jest/types": "^29.6.3",
-        "jest-mock": "^29.7.0"
-      },
-      "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
-      }
-    },
-    "node_modules/@jest/reporters": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz",
-      "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==",
-      "dev": true,
-      "dependencies": {
-        "@bcoe/v8-coverage": "^0.2.3",
-        "@jest/console": "^29.7.0",
-        "@jest/test-result": "^29.7.0",
-        "@jest/transform": "^29.7.0",
-        "@jest/types": "^29.6.3",
-        "@jridgewell/trace-mapping": "^0.3.18",
-        "@types/node": "*",
-        "chalk": "^4.0.0",
-        "collect-v8-coverage": "^1.0.0",
-        "exit": "^0.1.2",
-        "glob": "^7.1.3",
-        "graceful-fs": "^4.2.9",
-        "istanbul-lib-coverage": "^3.0.0",
-        "istanbul-lib-instrument": "^6.0.0",
-        "istanbul-lib-report": "^3.0.0",
-        "istanbul-lib-source-maps": "^4.0.0",
-        "istanbul-reports": "^3.1.3",
-        "jest-message-util": "^29.7.0",
-        "jest-util": "^29.7.0",
-        "jest-worker": "^29.7.0",
-        "slash": "^3.0.0",
-        "string-length": "^4.0.1",
-        "strip-ansi": "^6.0.0",
-        "v8-to-istanbul": "^9.0.1"
-      },
-      "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
-      },
-      "peerDependencies": {
-        "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
-      },
-      "peerDependenciesMeta": {
-        "node-notifier": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@jest/reporters/node_modules/istanbul-lib-instrument": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.0.tgz",
-      "integrity": "sha512-x58orMzEVfzPUKqlbLd1hXCnySCxKdDKa6Rjg97CwuLLRI4g3FHTdnExu1OqffVFay6zeMW+T6/DowFLndWnIw==",
-      "dev": true,
-      "dependencies": {
-        "@babel/core": "^7.12.3",
-        "@babel/parser": "^7.14.7",
-        "@istanbuljs/schema": "^0.1.2",
-        "istanbul-lib-coverage": "^3.2.0",
-        "semver": "^7.5.4"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/@jest/schemas": {
-      "version": "29.6.3",
-      "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz",
-      "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==",
-      "dev": true,
-      "dependencies": {
-        "@sinclair/typebox": "^0.27.8"
-      },
-      "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
-      }
-    },
-    "node_modules/@jest/source-map": {
-      "version": "29.6.3",
-      "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz",
-      "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==",
-      "dev": true,
-      "dependencies": {
-        "@jridgewell/trace-mapping": "^0.3.18",
-        "callsites": "^3.0.0",
-        "graceful-fs": "^4.2.9"
-      },
-      "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
-      }
-    },
-    "node_modules/@jest/test-result": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz",
-      "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==",
-      "dev": true,
-      "dependencies": {
-        "@jest/console": "^29.7.0",
-        "@jest/types": "^29.6.3",
-        "@types/istanbul-lib-coverage": "^2.0.0",
-        "collect-v8-coverage": "^1.0.0"
-      },
-      "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
-      }
-    },
-    "node_modules/@jest/test-sequencer": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz",
-      "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==",
-      "dev": true,
-      "dependencies": {
-        "@jest/test-result": "^29.7.0",
-        "graceful-fs": "^4.2.9",
-        "jest-haste-map": "^29.7.0",
-        "slash": "^3.0.0"
-      },
-      "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
-      }
-    },
-    "node_modules/@jest/transform": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz",
-      "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==",
-      "dev": true,
-      "dependencies": {
-        "@babel/core": "^7.11.6",
-        "@jest/types": "^29.6.3",
-        "@jridgewell/trace-mapping": "^0.3.18",
-        "babel-plugin-istanbul": "^6.1.1",
-        "chalk": "^4.0.0",
-        "convert-source-map": "^2.0.0",
-        "fast-json-stable-stringify": "^2.1.0",
-        "graceful-fs": "^4.2.9",
-        "jest-haste-map": "^29.7.0",
-        "jest-regex-util": "^29.6.3",
-        "jest-util": "^29.7.0",
-        "micromatch": "^4.0.4",
-        "pirates": "^4.0.4",
-        "slash": "^3.0.0",
-        "write-file-atomic": "^4.0.2"
-      },
-      "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
-      }
-    },
-    "node_modules/@jest/transform/node_modules/write-file-atomic": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz",
-      "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==",
-      "dev": true,
-      "dependencies": {
-        "imurmurhash": "^0.1.4",
-        "signal-exit": "^3.0.7"
-      },
-      "engines": {
-        "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
-      }
-    },
-    "node_modules/@jest/types": {
-      "version": "29.6.3",
-      "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
-      "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
-      "dev": true,
-      "dependencies": {
-        "@jest/schemas": "^29.6.3",
-        "@types/istanbul-lib-coverage": "^2.0.0",
-        "@types/istanbul-reports": "^3.0.0",
-        "@types/node": "*",
-        "@types/yargs": "^17.0.8",
-        "chalk": "^4.0.0"
-      },
-      "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
-      }
-    },
-    "node_modules/@jridgewell/gen-mapping": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz",
-      "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==",
-      "dev": true,
-      "dependencies": {
-        "@jridgewell/set-array": "^1.0.0",
-        "@jridgewell/sourcemap-codec": "^1.4.10"
-      },
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
-    "node_modules/@jridgewell/resolve-uri": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
-      "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
-      "dev": true,
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
-    "node_modules/@jridgewell/set-array": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
-      "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
-      "dev": true,
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
-    "node_modules/@jridgewell/sourcemap-codec": {
-      "version": "1.4.14",
-      "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
-      "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==",
-      "dev": true
-    },
-    "node_modules/@jridgewell/trace-mapping": {
-      "version": "0.3.18",
-      "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz",
-      "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==",
-      "dev": true,
-      "dependencies": {
-        "@jridgewell/resolve-uri": "3.1.0",
-        "@jridgewell/sourcemap-codec": "1.4.14"
-      }
-    },
-    "node_modules/@nodelib/fs.scandir": {
-      "version": "2.1.5",
-      "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
-      "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
-      "dev": true,
-      "dependencies": {
-        "@nodelib/fs.stat": "2.0.5",
-        "run-parallel": "^1.1.9"
-      },
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/@nodelib/fs.stat": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
-      "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
-      "dev": true,
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/@nodelib/fs.walk": {
-      "version": "1.2.8",
-      "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
-      "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
-      "dev": true,
-      "dependencies": {
-        "@nodelib/fs.scandir": "2.1.5",
-        "fastq": "^1.6.0"
-      },
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/@popperjs/core": {
-      "version": "2.11.8",
-      "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz",
-      "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==",
-      "peer": true,
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/popperjs"
-      }
-    },
-    "node_modules/@sinclair/typebox": {
-      "version": "0.27.8",
-      "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz",
-      "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==",
-      "dev": true
-    },
-    "node_modules/@sinonjs/commons": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz",
-      "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==",
-      "dev": true,
-      "dependencies": {
-        "type-detect": "4.0.8"
-      }
-    },
-    "node_modules/@sinonjs/fake-timers": {
-      "version": "10.3.0",
-      "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz",
-      "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==",
-      "dev": true,
-      "dependencies": {
-        "@sinonjs/commons": "^3.0.0"
-      }
-    },
-    "node_modules/@socket.io/component-emitter": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz",
-      "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==",
-      "dev": true
-    },
-    "node_modules/@types/babel__core": {
-      "version": "7.20.1",
-      "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz",
-      "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==",
-      "dev": true,
-      "dependencies": {
-        "@babel/parser": "^7.20.7",
-        "@babel/types": "^7.20.7",
-        "@types/babel__generator": "*",
-        "@types/babel__template": "*",
-        "@types/babel__traverse": "*"
-      }
-    },
-    "node_modules/@types/babel__generator": {
-      "version": "7.6.4",
-      "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz",
-      "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==",
-      "dev": true,
-      "dependencies": {
-        "@babel/types": "^7.0.0"
-      }
-    },
-    "node_modules/@types/babel__template": {
-      "version": "7.4.1",
-      "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz",
-      "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==",
-      "dev": true,
-      "dependencies": {
-        "@babel/parser": "^7.1.0",
-        "@babel/types": "^7.0.0"
-      }
-    },
-    "node_modules/@types/babel__traverse": {
-      "version": "7.20.1",
-      "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz",
-      "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==",
-      "dev": true,
-      "dependencies": {
-        "@babel/types": "^7.20.7"
-      }
-    },
-    "node_modules/@types/cookie": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz",
-      "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==",
-      "dev": true
-    },
-    "node_modules/@types/cors": {
-      "version": "2.8.17",
-      "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz",
-      "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==",
-      "dev": true,
-      "dependencies": {
-        "@types/node": "*"
-      }
-    },
-    "node_modules/@types/d3-scale": {
-      "version": "4.0.3",
-      "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.3.tgz",
-      "integrity": "sha512-PATBiMCpvHJSMtZAMEhc2WyL+hnzarKzI6wAHYjhsonjWJYGq5BXTzQjv4l8m2jO183/4wZ90rKvSeT7o72xNQ==",
-      "dependencies": {
-        "@types/d3-time": "*"
-      }
-    },
-    "node_modules/@types/d3-scale-chromatic": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz",
-      "integrity": "sha512-dsoJGEIShosKVRBZB0Vo3C8nqSDqVGujJU6tPznsBJxNJNwMF8utmS83nvCBKQYPpjCzaaHcrf66iTRpZosLPw=="
-    },
-    "node_modules/@types/d3-time": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.0.tgz",
-      "integrity": "sha512-sZLCdHvBUcNby1cB6Fd3ZBrABbjz3v1Vm90nysCQ6Vt7vd6e/h9Lt7SiJUoEX0l4Dzc7P5llKyhqSi1ycSf1Hg=="
-    },
-    "node_modules/@types/debug": {
-      "version": "4.1.8",
-      "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.8.tgz",
-      "integrity": "sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==",
-      "dependencies": {
-        "@types/ms": "*"
-      }
-    },
-    "node_modules/@types/graceful-fs": {
-      "version": "4.1.6",
-      "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz",
-      "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==",
-      "dev": true,
-      "dependencies": {
-        "@types/node": "*"
-      }
-    },
-    "node_modules/@types/istanbul-lib-coverage": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz",
-      "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==",
-      "dev": true
-    },
-    "node_modules/@types/istanbul-lib-report": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
-      "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==",
-      "dev": true,
-      "dependencies": {
-        "@types/istanbul-lib-coverage": "*"
-      }
-    },
-    "node_modules/@types/istanbul-reports": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz",
-      "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==",
-      "dev": true,
-      "dependencies": {
-        "@types/istanbul-lib-report": "*"
-      }
-    },
-    "node_modules/@types/jest": {
-      "version": "29.5.12",
-      "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.12.tgz",
-      "integrity": "sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==",
-      "dev": true,
-      "dependencies": {
-        "expect": "^29.0.0",
-        "pretty-format": "^29.0.0"
-      }
-    },
-    "node_modules/@types/json5": {
-      "version": "0.0.29",
-      "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
-      "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
-      "dev": true,
-      "peer": true
-    },
-    "node_modules/@types/lunr": {
-      "version": "2.3.7",
-      "resolved": "https://registry.npmjs.org/@types/lunr/-/lunr-2.3.7.tgz",
-      "integrity": "sha512-Tb/kUm38e8gmjahQzdCKhbdsvQ9/ppzHFfsJ0dMs3ckqQsRj+P5IkSAwFTBrBxdyr3E/LoMUUrZngjDYAjiE3A==",
-      "dev": true
-    },
-    "node_modules/@types/mdast": {
-      "version": "3.0.11",
-      "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.11.tgz",
-      "integrity": "sha512-Y/uImid8aAwrEA24/1tcRZwpxX3pIFTSilcNDKSPn+Y2iDywSEachzRuvgAYYLR3wpGXAsMbv5lvKLDZLeYPAw==",
-      "dependencies": {
-        "@types/unist": "*"
-      }
-    },
-    "node_modules/@types/minimist": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz",
-      "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==",
-      "dev": true
-    },
-    "node_modules/@types/ms": {
-      "version": "0.7.31",
-      "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz",
-      "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA=="
-    },
-    "node_modules/@types/node": {
-      "version": "18.14.0",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.0.tgz",
-      "integrity": "sha512-5EWrvLmglK+imbCJY0+INViFWUHg1AHel1sq4ZVSfdcNqGy9Edv3UB9IIzzg+xPaUcAgZYcfVs2fBcwDeZzU0A==",
-      "dev": true
-    },
-    "node_modules/@types/normalize-package-data": {
-      "version": "2.4.1",
-      "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz",
-      "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==",
-      "dev": true
-    },
-    "node_modules/@types/stack-utils": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz",
-      "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==",
-      "dev": true
-    },
-    "node_modules/@types/trusted-types": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.3.tgz",
-      "integrity": "sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g=="
-    },
-    "node_modules/@types/unist": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz",
-      "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ=="
-    },
-    "node_modules/@types/yargs": {
-      "version": "17.0.22",
-      "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
-      "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
-      "dev": true,
-      "dependencies": {
-        "@types/yargs-parser": "*"
-      }
-    },
-    "node_modules/@types/yargs-parser": {
-      "version": "21.0.0",
-      "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz",
-      "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==",
-      "dev": true
-    },
-    "node_modules/@typescript-eslint/eslint-plugin": {
-      "version": "8.4.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.4.0.tgz",
-      "integrity": "sha512-rg8LGdv7ri3oAlenMACk9e+AR4wUV0yrrG+XKsGKOK0EVgeEDqurkXMPILG2836fW4ibokTB5v4b6Z9+GYQDEw==",
-      "dev": true,
-      "dependencies": {
-        "@eslint-community/regexpp": "^4.10.0",
-        "@typescript-eslint/scope-manager": "8.4.0",
-        "@typescript-eslint/type-utils": "8.4.0",
-        "@typescript-eslint/utils": "8.4.0",
-        "@typescript-eslint/visitor-keys": "8.4.0",
-        "graphemer": "^1.4.0",
-        "ignore": "^5.3.1",
-        "natural-compare": "^1.4.0",
-        "ts-api-utils": "^1.3.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependencies": {
-        "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0",
-        "eslint": "^8.57.0 || ^9.0.0"
-      },
-      "peerDependenciesMeta": {
-        "typescript": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@typescript-eslint/parser": {
-      "version": "8.4.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.4.0.tgz",
-      "integrity": "sha512-NHgWmKSgJk5K9N16GIhQ4jSobBoJwrmURaLErad0qlLjrpP5bECYg+wxVTGlGZmJbU03jj/dfnb6V9bw+5icsA==",
-      "dev": true,
-      "dependencies": {
-        "@typescript-eslint/scope-manager": "8.4.0",
-        "@typescript-eslint/types": "8.4.0",
-        "@typescript-eslint/typescript-estree": "8.4.0",
-        "@typescript-eslint/visitor-keys": "8.4.0",
-        "debug": "^4.3.4"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependencies": {
-        "eslint": "^8.57.0 || ^9.0.0"
-      },
-      "peerDependenciesMeta": {
-        "typescript": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@typescript-eslint/parser/node_modules/debug": {
-      "version": "4.3.4",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
-      "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
-      "dev": true,
-      "dependencies": {
-        "ms": "2.1.2"
-      },
-      "engines": {
-        "node": ">=6.0"
-      },
-      "peerDependenciesMeta": {
-        "supports-color": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@typescript-eslint/parser/node_modules/ms": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-      "dev": true
-    },
-    "node_modules/@typescript-eslint/scope-manager": {
-      "version": "8.4.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.4.0.tgz",
-      "integrity": "sha512-n2jFxLeY0JmKfUqy3P70rs6vdoPjHK8P/w+zJcV3fk0b0BwRXC/zxRTEnAsgYT7MwdQDt/ZEbtdzdVC+hcpF0A==",
-      "dev": true,
-      "dependencies": {
-        "@typescript-eslint/types": "8.4.0",
-        "@typescript-eslint/visitor-keys": "8.4.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/@typescript-eslint/type-utils": {
-      "version": "8.4.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.4.0.tgz",
-      "integrity": "sha512-pu2PAmNrl9KX6TtirVOrbLPLwDmASpZhK/XU7WvoKoCUkdtq9zF7qQ7gna0GBZFN0hci0vHaSusiL2WpsQk37A==",
-      "dev": true,
-      "dependencies": {
-        "@typescript-eslint/typescript-estree": "8.4.0",
-        "@typescript-eslint/utils": "8.4.0",
-        "debug": "^4.3.4",
-        "ts-api-utils": "^1.3.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependenciesMeta": {
-        "typescript": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@typescript-eslint/type-utils/node_modules/debug": {
-      "version": "4.3.6",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz",
-      "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==",
-      "dev": true,
-      "dependencies": {
-        "ms": "2.1.2"
-      },
-      "engines": {
-        "node": ">=6.0"
-      },
-      "peerDependenciesMeta": {
-        "supports-color": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@typescript-eslint/type-utils/node_modules/ms": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-      "dev": true
-    },
-    "node_modules/@typescript-eslint/types": {
-      "version": "8.4.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.4.0.tgz",
-      "integrity": "sha512-T1RB3KQdskh9t3v/qv7niK6P8yvn7ja1mS7QK7XfRVL6wtZ8/mFs/FHf4fKvTA0rKnqnYxl/uHFNbnEt0phgbw==",
-      "dev": true,
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/@typescript-eslint/typescript-estree": {
-      "version": "8.4.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.4.0.tgz",
-      "integrity": "sha512-kJ2OIP4dQw5gdI4uXsaxUZHRwWAGpREJ9Zq6D5L0BweyOrWsL6Sz0YcAZGWhvKnH7fm1J5YFE1JrQL0c9dd53A==",
-      "dev": true,
-      "dependencies": {
-        "@typescript-eslint/types": "8.4.0",
-        "@typescript-eslint/visitor-keys": "8.4.0",
-        "debug": "^4.3.4",
-        "fast-glob": "^3.3.2",
-        "is-glob": "^4.0.3",
-        "minimatch": "^9.0.4",
-        "semver": "^7.6.0",
-        "ts-api-utils": "^1.3.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependenciesMeta": {
-        "typescript": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
-      "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
-      "dev": true,
-      "dependencies": {
-        "balanced-match": "^1.0.0"
-      }
-    },
-    "node_modules/@typescript-eslint/typescript-estree/node_modules/debug": {
-      "version": "4.3.6",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz",
-      "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==",
-      "dev": true,
-      "dependencies": {
-        "ms": "2.1.2"
-      },
-      "engines": {
-        "node": ">=6.0"
-      },
-      "peerDependenciesMeta": {
-        "supports-color": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
-      "version": "9.0.5",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
-      "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
-      "dev": true,
-      "dependencies": {
-        "brace-expansion": "^2.0.1"
-      },
-      "engines": {
-        "node": ">=16 || 14 >=14.17"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "node_modules/@typescript-eslint/typescript-estree/node_modules/ms": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-      "dev": true
-    },
-    "node_modules/@typescript-eslint/utils": {
-      "version": "8.4.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.4.0.tgz",
-      "integrity": "sha512-swULW8n1IKLjRAgciCkTCafyTHHfwVQFt8DovmaF69sKbOxTSFMmIZaSHjqO9i/RV0wIblaawhzvtva8Nmm7lQ==",
-      "dev": true,
-      "dependencies": {
-        "@eslint-community/eslint-utils": "^4.4.0",
-        "@typescript-eslint/scope-manager": "8.4.0",
-        "@typescript-eslint/types": "8.4.0",
-        "@typescript-eslint/typescript-estree": "8.4.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependencies": {
-        "eslint": "^8.57.0 || ^9.0.0"
-      }
-    },
-    "node_modules/@typescript-eslint/visitor-keys": {
-      "version": "8.4.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.4.0.tgz",
-      "integrity": "sha512-zTQD6WLNTre1hj5wp09nBIDiOc2U5r/qmzo7wxPn4ZgAjHql09EofqhF9WF+fZHzL5aCyaIpPcT2hyxl73kr9A==",
-      "dev": true,
-      "dependencies": {
-        "@typescript-eslint/types": "8.4.0",
-        "eslint-visitor-keys": "^3.4.3"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/@ungap/structured-clone": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
-      "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==",
-      "dev": true
-    },
-    "node_modules/@websanova/url": {
-      "version": "2.6.3",
-      "resolved": "https://registry.npmjs.org/@websanova/url/-/url-2.6.3.tgz",
-      "integrity": "sha512-+gLI+9nIVPg3X4VcC30MUrGd9/DmYPla2ryzl7qKzIbH07wgsgy99H2WRsSFweVgV4FLkTHEpClj1//t0u+FLw=="
-    },
-    "node_modules/accepts": {
-      "version": "1.3.8",
-      "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
-      "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
-      "dev": true,
-      "dependencies": {
-        "mime-types": "~2.1.34",
-        "negotiator": "0.6.3"
-      },
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/acorn": {
-      "version": "8.11.2",
-      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz",
-      "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==",
-      "dev": true,
-      "bin": {
-        "acorn": "bin/acorn"
-      },
-      "engines": {
-        "node": ">=0.4.0"
-      }
-    },
-    "node_modules/acorn-jsx": {
-      "version": "5.3.2",
-      "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
-      "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
-      "dev": true,
-      "peerDependencies": {
-        "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
-      }
-    },
-    "node_modules/ajv": {
-      "version": "6.12.6",
-      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
-      "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
-      "dev": true,
-      "dependencies": {
-        "fast-deep-equal": "^3.1.1",
-        "fast-json-stable-stringify": "^2.0.0",
-        "json-schema-traverse": "^0.4.1",
-        "uri-js": "^4.2.2"
-      },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/epoberezkin"
-      }
-    },
-    "node_modules/anchor-js": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/anchor-js/-/anchor-js-5.0.0.tgz",
-      "integrity": "sha512-2bOqCsBIXAYhjAN3iI4QevoAJtB2gRWAiY9P3P7CVW8lIjA3Dl6ldhDlWeeQvCHif+V5vIndfLOag/5I8tzTzA=="
-    },
-    "node_modules/ansi-escapes": {
-      "version": "4.3.2",
-      "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
-      "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
-      "dev": true,
-      "dependencies": {
-        "type-fest": "^0.21.3"
-      },
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/ansi-escapes/node_modules/type-fest": {
-      "version": "0.21.3",
-      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
-      "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/ansi-regex": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
-      "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/ansi-styles": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-      "dev": true,
-      "dependencies": {
-        "color-convert": "^2.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-      }
-    },
-    "node_modules/anymatch": {
-      "version": "3.1.3",
-      "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
-      "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
-      "dev": true,
-      "dependencies": {
-        "normalize-path": "^3.0.0",
-        "picomatch": "^2.0.4"
-      },
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/argparse": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
-      "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
-      "dev": true
-    },
-    "node_modules/array-includes": {
-      "version": "3.1.6",
-      "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz",
-      "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==",
-      "dev": true,
-      "peer": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.4",
-        "es-abstract": "^1.20.4",
-        "get-intrinsic": "^1.1.3",
-        "is-string": "^1.0.7"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/array-union": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
-      "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/array.prototype.flat": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz",
-      "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==",
-      "dev": true,
-      "peer": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.4",
-        "es-abstract": "^1.20.4",
-        "es-shim-unscopables": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/array.prototype.flatmap": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz",
-      "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==",
-      "dev": true,
-      "peer": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.4",
-        "es-abstract": "^1.20.4",
-        "es-shim-unscopables": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/arrify": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
-      "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/astral-regex": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
-      "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/async": {
-      "version": "2.6.4",
-      "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz",
-      "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==",
-      "dev": true,
-      "dependencies": {
-        "lodash": "^4.17.14"
-      }
-    },
-    "node_modules/async-each-series": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz",
-      "integrity": "sha512-p4jj6Fws4Iy2m0iCmI2am2ZNZCgbdgE+P8F/8csmn2vx7ixXrO2zGcuNsD46X5uZSVecmkEy/M06X2vG8KD6dQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/available-typed-arrays": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz",
-      "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==",
-      "dev": true,
-      "peer": true,
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/babel-jest": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz",
-      "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==",
-      "dev": true,
-      "dependencies": {
-        "@jest/transform": "^29.7.0",
-        "@types/babel__core": "^7.1.14",
-        "babel-plugin-istanbul": "^6.1.1",
-        "babel-preset-jest": "^29.6.3",
-        "chalk": "^4.0.0",
-        "graceful-fs": "^4.2.9",
-        "slash": "^3.0.0"
-      },
-      "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.8.0"
-      }
-    },
-    "node_modules/babel-plugin-istanbul": {
-      "version": "6.1.1",
-      "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz",
-      "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.0.0",
-        "@istanbuljs/load-nyc-config": "^1.0.0",
-        "@istanbuljs/schema": "^0.1.2",
-        "istanbul-lib-instrument": "^5.0.4",
-        "test-exclude": "^6.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/babel-plugin-jest-hoist": {
-      "version": "29.6.3",
-      "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz",
-      "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==",
-      "dev": true,
-      "dependencies": {
-        "@babel/template": "^7.3.3",
-        "@babel/types": "^7.3.3",
-        "@types/babel__core": "^7.1.14",
-        "@types/babel__traverse": "^7.0.6"
-      },
-      "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
-      }
-    },
-    "node_modules/babel-preset-current-node-syntax": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz",
-      "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==",
-      "dev": true,
-      "dependencies": {
-        "@babel/plugin-syntax-async-generators": "^7.8.4",
-        "@babel/plugin-syntax-bigint": "^7.8.3",
-        "@babel/plugin-syntax-class-properties": "^7.8.3",
-        "@babel/plugin-syntax-import-meta": "^7.8.3",
-        "@babel/plugin-syntax-json-strings": "^7.8.3",
-        "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3",
-        "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
-        "@babel/plugin-syntax-numeric-separator": "^7.8.3",
-        "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
-        "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
-        "@babel/plugin-syntax-optional-chaining": "^7.8.3",
-        "@babel/plugin-syntax-top-level-await": "^7.8.3"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0"
-      }
-    },
-    "node_modules/babel-preset-jest": {
-      "version": "29.6.3",
-      "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz",
-      "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==",
-      "dev": true,
-      "dependencies": {
-        "babel-plugin-jest-hoist": "^29.6.3",
-        "babel-preset-current-node-syntax": "^1.0.0"
-      },
-      "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0"
-      }
-    },
-    "node_modules/balanced-match": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
-      "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
-      "dev": true
-    },
-    "node_modules/base64id": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz",
-      "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==",
-      "dev": true,
-      "engines": {
-        "node": "^4.5.0 || >= 5.9"
-      }
-    },
-    "node_modules/batch": {
-      "version": "0.6.1",
-      "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
-      "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==",
-      "dev": true
-    },
-    "node_modules/binary-extensions": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
-      "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/bootstrap": {
-      "version": "5.3.3",
-      "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.3.tgz",
-      "integrity": "sha512-8HLCdWgyoMguSO9o+aH+iuZ+aht+mzW0u3HIMzVu7Srrpv7EBBxTnrFlSCskwdY1+EOFQSm7uMJhNQHkdPcmjg==",
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/twbs"
-        },
-        {
-          "type": "opencollective",
-          "url": "https://opencollective.com/bootstrap"
-        }
-      ],
-      "peerDependencies": {
-        "@popperjs/core": "^2.11.8"
-      }
-    },
-    "node_modules/bootstrap-icons": {
-      "version": "1.11.3",
-      "resolved": "https://registry.npmjs.org/bootstrap-icons/-/bootstrap-icons-1.11.3.tgz",
-      "integrity": "sha512-+3lpHrCw/it2/7lBL15VR0HEumaBss0+f/Lb6ZvHISn1mlK83jjFpooTLsMWbIjJMDjDjOExMsTxnXSIT4k4ww==",
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/twbs"
-        },
-        {
-          "type": "opencollective",
-          "url": "https://opencollective.com/bootstrap"
-        }
-      ]
-    },
-    "node_modules/brace-expansion": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
-      "dev": true,
-      "dependencies": {
-        "balanced-match": "^1.0.0",
-        "concat-map": "0.0.1"
-      }
-    },
-    "node_modules/braces": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
-      "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
-      "dev": true,
-      "dependencies": {
-        "fill-range": "^7.1.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/browser-sync": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-3.0.2.tgz",
-      "integrity": "sha512-PC9c7aWJFVR4IFySrJxOqLwB9ENn3/TaXCXtAa0SzLwocLN3qMjN+IatbjvtCX92BjNXsY6YWg9Eb7F3Wy255g==",
-      "dev": true,
-      "dependencies": {
-        "browser-sync-client": "^3.0.2",
-        "browser-sync-ui": "^3.0.2",
-        "bs-recipes": "1.3.4",
-        "chalk": "4.1.2",
-        "chokidar": "^3.5.1",
-        "connect": "3.6.6",
-        "connect-history-api-fallback": "^1",
-        "dev-ip": "^1.0.1",
-        "easy-extender": "^2.3.4",
-        "eazy-logger": "^4.0.1",
-        "etag": "^1.8.1",
-        "fresh": "^0.5.2",
-        "fs-extra": "3.0.1",
-        "http-proxy": "^1.18.1",
-        "immutable": "^3",
-        "micromatch": "^4.0.2",
-        "opn": "5.3.0",
-        "portscanner": "2.2.0",
-        "raw-body": "^2.3.2",
-        "resp-modifier": "6.0.2",
-        "rx": "4.1.0",
-        "send": "0.16.2",
-        "serve-index": "1.9.1",
-        "serve-static": "1.13.2",
-        "server-destroy": "1.0.1",
-        "socket.io": "^4.4.1",
-        "ua-parser-js": "^1.0.33",
-        "yargs": "^17.3.1"
-      },
-      "bin": {
-        "browser-sync": "dist/bin.js"
-      },
-      "engines": {
-        "node": ">= 8.0.0"
-      }
-    },
-    "node_modules/browser-sync-client": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-3.0.2.tgz",
-      "integrity": "sha512-tBWdfn9L0wd2Pjuz/NWHtNEKthVb1Y67vg8/qyGNtCqetNz5lkDkFnrsx5UhPNPYUO8vci50IWC/BhYaQskDiQ==",
-      "dev": true,
-      "dependencies": {
-        "etag": "1.8.1",
-        "fresh": "0.5.2",
-        "mitt": "^1.1.3"
-      },
-      "engines": {
-        "node": ">=8.0.0"
-      }
-    },
-    "node_modules/browser-sync-ui": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-3.0.2.tgz",
-      "integrity": "sha512-V3FwWAI+abVbFLTyJjXJlCMBwjc3GXf/BPGfwO2fMFACWbIGW9/4SrBOFYEOOtqzCjQE0Di+U3VIb7eES4omNA==",
-      "dev": true,
-      "dependencies": {
-        "async-each-series": "0.1.1",
-        "chalk": "4.1.2",
-        "connect-history-api-fallback": "^1",
-        "immutable": "^3",
-        "server-destroy": "1.0.1",
-        "socket.io-client": "^4.4.1",
-        "stream-throttle": "^0.1.3"
-      }
-    },
-    "node_modules/browserslist": {
-      "version": "4.21.5",
-      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz",
-      "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "opencollective",
-          "url": "https://opencollective.com/browserslist"
-        },
-        {
-          "type": "tidelift",
-          "url": "https://tidelift.com/funding/github/npm/browserslist"
-        }
-      ],
-      "dependencies": {
-        "caniuse-lite": "^1.0.30001449",
-        "electron-to-chromium": "^1.4.284",
-        "node-releases": "^2.0.8",
-        "update-browserslist-db": "^1.0.10"
-      },
-      "bin": {
-        "browserslist": "cli.js"
-      },
-      "engines": {
-        "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
-      }
-    },
-    "node_modules/bs-logger": {
-      "version": "0.2.6",
-      "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz",
-      "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==",
-      "dev": true,
-      "dependencies": {
-        "fast-json-stable-stringify": "2.x"
-      },
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "node_modules/bs-recipes": {
-      "version": "1.3.4",
-      "resolved": "https://registry.npmjs.org/bs-recipes/-/bs-recipes-1.3.4.tgz",
-      "integrity": "sha512-BXvDkqhDNxXEjeGM8LFkSbR+jzmP/CYpCiVKYn+soB1dDldeU15EBNDkwVXndKuX35wnNUaPd0qSoQEAkmQtMw==",
-      "dev": true
-    },
-    "node_modules/bser": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz",
-      "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==",
-      "dev": true,
-      "dependencies": {
-        "node-int64": "^0.4.0"
-      }
-    },
-    "node_modules/buffer-builder": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npmjs.org/buffer-builder/-/buffer-builder-0.2.0.tgz",
-      "integrity": "sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg==",
-      "dev": true,
-      "peer": true
-    },
-    "node_modules/buffer-from": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
-      "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
-      "dev": true
-    },
-    "node_modules/builtins": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz",
-      "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==",
-      "dev": true,
-      "peer": true,
-      "dependencies": {
-        "semver": "^7.0.0"
-      }
-    },
-    "node_modules/bytes": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
-      "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.8"
-      }
-    },
-    "node_modules/call-bind": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
-      "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
-      "dev": true,
-      "peer": true,
-      "dependencies": {
-        "function-bind": "^1.1.1",
-        "get-intrinsic": "^1.0.2"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/callsites": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
-      "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/camelcase": {
-      "version": "5.3.1",
-      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
-      "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
-      "dev": true,
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/camelcase-keys": {
-      "version": "7.0.2",
-      "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-7.0.2.tgz",
-      "integrity": "sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==",
-      "dev": true,
-      "dependencies": {
-        "camelcase": "^6.3.0",
-        "map-obj": "^4.1.0",
-        "quick-lru": "^5.1.1",
-        "type-fest": "^1.2.1"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/camelcase-keys/node_modules/camelcase": {
-      "version": "6.3.0",
-      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
-      "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/camelcase-keys/node_modules/type-fest": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
-      "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/caniuse-lite": {
-      "version": "1.0.30001466",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001466.tgz",
-      "integrity": "sha512-ewtFBSfWjEmxUgNBSZItFSmVtvk9zkwkl1OfRZlKA8slltRN+/C/tuGVrF9styXkN36Yu3+SeJ1qkXxDEyNZ5w==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "opencollective",
-          "url": "https://opencollective.com/browserslist"
-        },
-        {
-          "type": "tidelift",
-          "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
-        }
-      ]
-    },
-    "node_modules/chalk": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^4.1.0",
-        "supports-color": "^7.1.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/chalk?sponsor=1"
-      }
-    },
-    "node_modules/char-regex": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz",
-      "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/character-entities": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz",
-      "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==",
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/wooorm"
-      }
-    },
-    "node_modules/chokidar": {
-      "version": "3.5.3",
-      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
-      "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "individual",
-          "url": "https://paulmillr.com/funding/"
-        }
-      ],
-      "dependencies": {
-        "anymatch": "~3.1.2",
-        "braces": "~3.0.2",
-        "glob-parent": "~5.1.2",
-        "is-binary-path": "~2.1.0",
-        "is-glob": "~4.0.1",
-        "normalize-path": "~3.0.0",
-        "readdirp": "~3.6.0"
-      },
-      "engines": {
-        "node": ">= 8.10.0"
-      },
-      "optionalDependencies": {
-        "fsevents": "~2.3.2"
-      }
-    },
-    "node_modules/ci-info": {
-      "version": "3.8.0",
-      "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz",
-      "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/sibiraj-s"
-        }
-      ],
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/cjs-module-lexer": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz",
-      "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==",
-      "dev": true
-    },
-    "node_modules/cliui": {
-      "version": "8.0.1",
-      "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
-      "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
-      "dev": true,
-      "dependencies": {
-        "string-width": "^4.2.0",
-        "strip-ansi": "^6.0.1",
-        "wrap-ansi": "^7.0.0"
-      },
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/co": {
-      "version": "4.6.0",
-      "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
-      "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==",
-      "dev": true,
-      "engines": {
-        "iojs": ">= 1.0.0",
-        "node": ">= 0.12.0"
-      }
-    },
-    "node_modules/collect-v8-coverage": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz",
-      "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==",
-      "dev": true
-    },
-    "node_modules/color-convert": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-      "dev": true,
-      "dependencies": {
-        "color-name": "~1.1.4"
-      },
-      "engines": {
-        "node": ">=7.0.0"
-      }
-    },
-    "node_modules/color-name": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
-      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
-      "dev": true
-    },
-    "node_modules/colord": {
-      "version": "2.9.3",
-      "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz",
-      "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==",
-      "dev": true
-    },
-    "node_modules/commander": {
-      "version": "2.20.3",
-      "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
-      "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
-      "dev": true
-    },
-    "node_modules/concat-map": {
-      "version": "0.0.1",
-      "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
-      "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
-      "dev": true
-    },
-    "node_modules/connect": {
-      "version": "3.6.6",
-      "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz",
-      "integrity": "sha512-OO7axMmPpu/2XuX1+2Yrg0ddju31B6xLZMWkJ5rYBu4YRmRVlOjvlY6kw2FJKiAzyxGwnrDUAG4s1Pf0sbBMCQ==",
-      "dev": true,
-      "dependencies": {
-        "debug": "2.6.9",
-        "finalhandler": "1.1.0",
-        "parseurl": "~1.3.2",
-        "utils-merge": "1.0.1"
-      },
-      "engines": {
-        "node": ">= 0.10.0"
-      }
-    },
-    "node_modules/connect-history-api-fallback": {
-      "version": "1.6.0",
-      "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz",
-      "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.8"
-      }
-    },
-    "node_modules/convert-source-map": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
-      "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
-      "dev": true
-    },
-    "node_modules/cookie": {
-      "version": "0.4.2",
-      "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz",
-      "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/cors": {
-      "version": "2.8.5",
-      "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
-      "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
-      "dev": true,
-      "dependencies": {
-        "object-assign": "^4",
-        "vary": "^1"
-      },
-      "engines": {
-        "node": ">= 0.10"
-      }
-    },
-    "node_modules/cose-base": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-1.0.3.tgz",
-      "integrity": "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==",
-      "dependencies": {
-        "layout-base": "^1.0.0"
-      }
-    },
-    "node_modules/cosmiconfig": {
-      "version": "8.2.0",
-      "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz",
-      "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==",
-      "dev": true,
-      "dependencies": {
-        "import-fresh": "^3.2.1",
-        "js-yaml": "^4.1.0",
-        "parse-json": "^5.0.0",
-        "path-type": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=14"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/d-fischer"
-      }
-    },
-    "node_modules/create-jest": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz",
-      "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==",
-      "dev": true,
-      "dependencies": {
-        "@jest/types": "^29.6.3",
-        "chalk": "^4.0.0",
-        "exit": "^0.1.2",
-        "graceful-fs": "^4.2.9",
-        "jest-config": "^29.7.0",
-        "jest-util": "^29.7.0",
-        "prompts": "^2.0.1"
-      },
-      "bin": {
-        "create-jest": "bin/create-jest.js"
-      },
-      "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
-      }
-    },
-    "node_modules/cross-spawn": {
-      "version": "7.0.3",
-      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
-      "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
-      "dev": true,
-      "dependencies": {
-        "path-key": "^3.1.0",
-        "shebang-command": "^2.0.0",
-        "which": "^2.0.1"
-      },
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/css-functions-list": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.0.tgz",
-      "integrity": "sha512-d/jBMPyYybkkLVypgtGv12R+pIFw4/f/IHtCTxWpZc8ofTYOPigIgmA6vu5rMHartZC+WuXhBUHfnyNUIQSYrg==",
-      "dev": true,
-      "engines": {
-        "node": ">=12.22"
-      }
-    },
-    "node_modules/css-tree": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz",
-      "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==",
-      "dev": true,
-      "dependencies": {
-        "mdn-data": "2.0.30",
-        "source-map-js": "^1.0.1"
-      },
-      "engines": {
-        "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
-      }
-    },
-    "node_modules/cssesc": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
-      "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
-      "dev": true,
-      "bin": {
-        "cssesc": "bin/cssesc"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/cytoscape": {
-      "version": "3.28.1",
-      "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.28.1.tgz",
-      "integrity": "sha512-xyItz4O/4zp9/239wCcH8ZcFuuZooEeF8KHRmzjDfGdXsj3OG9MFSMA0pJE0uX3uCN/ygof6hHf4L7lst+JaDg==",
-      "dependencies": {
-        "heap": "^0.2.6",
-        "lodash": "^4.17.21"
-      },
-      "engines": {
-        "node": ">=0.10"
-      }
-    },
-    "node_modules/cytoscape-cose-bilkent": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-4.1.0.tgz",
-      "integrity": "sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==",
-      "dependencies": {
-        "cose-base": "^1.0.0"
-      },
-      "peerDependencies": {
-        "cytoscape": "^3.2.0"
-      }
-    },
-    "node_modules/d3": {
-      "version": "7.8.4",
-      "resolved": "https://registry.npmjs.org/d3/-/d3-7.8.4.tgz",
-      "integrity": "sha512-q2WHStdhiBtD8DMmhDPyJmXUxr6VWRngKyiJ5EfXMxPw+tqT6BhNjhJZ4w3BHsNm3QoVfZLY8Orq/qPFczwKRA==",
-      "dependencies": {
-        "d3-array": "3",
-        "d3-axis": "3",
-        "d3-brush": "3",
-        "d3-chord": "3",
-        "d3-color": "3",
-        "d3-contour": "4",
-        "d3-delaunay": "6",
-        "d3-dispatch": "3",
-        "d3-drag": "3",
-        "d3-dsv": "3",
-        "d3-ease": "3",
-        "d3-fetch": "3",
-        "d3-force": "3",
-        "d3-format": "3",
-        "d3-geo": "3",
-        "d3-hierarchy": "3",
-        "d3-interpolate": "3",
-        "d3-path": "3",
-        "d3-polygon": "3",
-        "d3-quadtree": "3",
-        "d3-random": "3",
-        "d3-scale": "4",
-        "d3-scale-chromatic": "3",
-        "d3-selection": "3",
-        "d3-shape": "3",
-        "d3-time": "3",
-        "d3-time-format": "4",
-        "d3-timer": "3",
-        "d3-transition": "3",
-        "d3-zoom": "3"
-      },
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/d3-array": {
-      "version": "3.2.3",
-      "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.3.tgz",
-      "integrity": "sha512-JRHwbQQ84XuAESWhvIPaUV4/1UYTBOLiOPGWqgFDHZS1D5QN9c57FbH3QpEnQMYiOXNzKUQyGTZf+EVO7RT5TQ==",
-      "dependencies": {
-        "internmap": "1 - 2"
-      },
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/d3-axis": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz",
-      "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==",
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/d3-brush": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz",
-      "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==",
-      "dependencies": {
-        "d3-dispatch": "1 - 3",
-        "d3-drag": "2 - 3",
-        "d3-interpolate": "1 - 3",
-        "d3-selection": "3",
-        "d3-transition": "3"
-      },
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/d3-chord": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz",
-      "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==",
-      "dependencies": {
-        "d3-path": "1 - 3"
-      },
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/d3-color": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz",
-      "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==",
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/d3-contour": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz",
-      "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==",
-      "dependencies": {
-        "d3-array": "^3.2.0"
-      },
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/d3-delaunay": {
-      "version": "6.0.4",
-      "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz",
-      "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==",
-      "dependencies": {
-        "delaunator": "5"
-      },
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/d3-dispatch": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz",
-      "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==",
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/d3-drag": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz",
-      "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==",
-      "dependencies": {
-        "d3-dispatch": "1 - 3",
-        "d3-selection": "3"
-      },
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/d3-dsv": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz",
-      "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==",
-      "dependencies": {
-        "commander": "7",
-        "iconv-lite": "0.6",
-        "rw": "1"
-      },
-      "bin": {
-        "csv2json": "bin/dsv2json.js",
-        "csv2tsv": "bin/dsv2dsv.js",
-        "dsv2dsv": "bin/dsv2dsv.js",
-        "dsv2json": "bin/dsv2json.js",
-        "json2csv": "bin/json2dsv.js",
-        "json2dsv": "bin/json2dsv.js",
-        "json2tsv": "bin/json2dsv.js",
-        "tsv2csv": "bin/dsv2dsv.js",
-        "tsv2json": "bin/dsv2json.js"
-      },
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/d3-dsv/node_modules/commander": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
-      "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/d3-dsv/node_modules/iconv-lite": {
-      "version": "0.6.3",
-      "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
-      "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
-      "dependencies": {
-        "safer-buffer": ">= 2.1.2 < 3.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/d3-ease": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz",
-      "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==",
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/d3-fetch": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz",
-      "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==",
-      "dependencies": {
-        "d3-dsv": "1 - 3"
-      },
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/d3-force": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz",
-      "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==",
-      "dependencies": {
-        "d3-dispatch": "1 - 3",
-        "d3-quadtree": "1 - 3",
-        "d3-timer": "1 - 3"
-      },
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/d3-format": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz",
-      "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==",
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/d3-geo": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.0.tgz",
-      "integrity": "sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==",
-      "dependencies": {
-        "d3-array": "2.5.0 - 3"
-      },
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/d3-hierarchy": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz",
-      "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==",
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/d3-interpolate": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz",
-      "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==",
-      "dependencies": {
-        "d3-color": "1 - 3"
-      },
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/d3-path": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz",
-      "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==",
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/d3-polygon": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz",
-      "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==",
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/d3-quadtree": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz",
-      "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==",
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/d3-random": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz",
-      "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==",
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/d3-sankey": {
-      "version": "0.12.3",
-      "resolved": "https://registry.npmjs.org/d3-sankey/-/d3-sankey-0.12.3.tgz",
-      "integrity": "sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==",
-      "dependencies": {
-        "d3-array": "1 - 2",
-        "d3-shape": "^1.2.0"
-      }
-    },
-    "node_modules/d3-sankey/node_modules/d3-array": {
-      "version": "2.12.1",
-      "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz",
-      "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==",
-      "dependencies": {
-        "internmap": "^1.0.0"
-      }
-    },
-    "node_modules/d3-sankey/node_modules/d3-path": {
-      "version": "1.0.9",
-      "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz",
-      "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg=="
-    },
-    "node_modules/d3-sankey/node_modules/d3-shape": {
-      "version": "1.3.7",
-      "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz",
-      "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==",
-      "dependencies": {
-        "d3-path": "1"
-      }
-    },
-    "node_modules/d3-sankey/node_modules/internmap": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz",
-      "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw=="
-    },
-    "node_modules/d3-scale": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz",
-      "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==",
-      "dependencies": {
-        "d3-array": "2.10.0 - 3",
-        "d3-format": "1 - 3",
-        "d3-interpolate": "1.2.0 - 3",
-        "d3-time": "2.1.1 - 3",
-        "d3-time-format": "2 - 4"
-      },
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/d3-scale-chromatic": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz",
-      "integrity": "sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==",
-      "dependencies": {
-        "d3-color": "1 - 3",
-        "d3-interpolate": "1 - 3"
-      },
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/d3-selection": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz",
-      "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==",
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/d3-shape": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz",
-      "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==",
-      "dependencies": {
-        "d3-path": "^3.1.0"
-      },
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/d3-time": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz",
-      "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==",
-      "dependencies": {
-        "d3-array": "2 - 3"
-      },
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/d3-time-format": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz",
-      "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==",
-      "dependencies": {
-        "d3-time": "1 - 3"
-      },
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/d3-timer": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz",
-      "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==",
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/d3-transition": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz",
-      "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==",
-      "dependencies": {
-        "d3-color": "1 - 3",
-        "d3-dispatch": "1 - 3",
-        "d3-ease": "1 - 3",
-        "d3-interpolate": "1 - 3",
-        "d3-timer": "1 - 3"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "peerDependencies": {
-        "d3-selection": "2 - 3"
-      }
-    },
-    "node_modules/d3-zoom": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz",
-      "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==",
-      "dependencies": {
-        "d3-dispatch": "1 - 3",
-        "d3-drag": "2 - 3",
-        "d3-interpolate": "1 - 3",
-        "d3-selection": "2 - 3",
-        "d3-transition": "2 - 3"
-      },
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/dagre-d3-es": {
-      "version": "7.0.10",
-      "resolved": "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.10.tgz",
-      "integrity": "sha512-qTCQmEhcynucuaZgY5/+ti3X/rnszKZhEQH/ZdWdtP1tA/y3VoHJzcVrO9pjjJCNpigfscAtoUB5ONcd2wNn0A==",
-      "dependencies": {
-        "d3": "^7.8.2",
-        "lodash-es": "^4.17.21"
-      }
-    },
-    "node_modules/dayjs": {
-      "version": "1.11.7",
-      "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.7.tgz",
-      "integrity": "sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ=="
-    },
-    "node_modules/debug": {
-      "version": "2.6.9",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-      "dev": true,
-      "dependencies": {
-        "ms": "2.0.0"
-      }
-    },
-    "node_modules/decamelize": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz",
-      "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/decamelize-keys": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz",
-      "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==",
-      "dev": true,
-      "dependencies": {
-        "decamelize": "^1.1.0",
-        "map-obj": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/decamelize-keys/node_modules/decamelize": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
-      "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/decamelize-keys/node_modules/map-obj": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
-      "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/decode-named-character-reference": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz",
-      "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==",
-      "dependencies": {
-        "character-entities": "^2.0.0"
-      },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/wooorm"
-      }
-    },
-    "node_modules/dedent": {
-      "version": "1.5.1",
-      "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz",
-      "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==",
-      "dev": true,
-      "peerDependencies": {
-        "babel-plugin-macros": "^3.1.0"
-      },
-      "peerDependenciesMeta": {
-        "babel-plugin-macros": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/deep-is": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
-      "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
-      "dev": true
-    },
-    "node_modules/deepmerge": {
-      "version": "4.3.1",
-      "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
-      "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/define-properties": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz",
-      "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==",
-      "dev": true,
-      "peer": true,
-      "dependencies": {
-        "has-property-descriptors": "^1.0.0",
-        "object-keys": "^1.1.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/delaunator": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.0.tgz",
-      "integrity": "sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==",
-      "dependencies": {
-        "robust-predicates": "^3.0.0"
-      }
-    },
-    "node_modules/depd": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
-      "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.8"
-      }
-    },
-    "node_modules/dequal": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
-      "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/destroy": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
-      "integrity": "sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==",
-      "dev": true
-    },
-    "node_modules/detect-newline": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz",
-      "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/dev-ip": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz",
-      "integrity": "sha512-LmVkry/oDShEgSZPNgqCIp2/TlqtExeGmymru3uCELnfyjY11IzpAproLYs+1X88fXO6DBoYP3ul2Xo2yz2j6A==",
-      "dev": true,
-      "bin": {
-        "dev-ip": "lib/dev-ip.js"
-      },
-      "engines": {
-        "node": ">= 0.8.0"
-      }
-    },
-    "node_modules/diff": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz",
-      "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==",
-      "engines": {
-        "node": ">=0.3.1"
-      }
-    },
-    "node_modules/diff-sequences": {
-      "version": "29.6.3",
-      "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz",
-      "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==",
-      "dev": true,
-      "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
-      }
-    },
-    "node_modules/dir-glob": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
-      "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
-      "dev": true,
-      "dependencies": {
-        "path-type": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/doctrine": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
-      "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
-      "dev": true,
-      "dependencies": {
-        "esutils": "^2.0.2"
-      },
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
-    "node_modules/dompurify": {
-      "version": "3.0.5",
-      "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.0.5.tgz",
-      "integrity": "sha512-F9e6wPGtY+8KNMRAVfxeCOHU0/NPWMSENNq4pQctuXRqqdEPW7q3CrLbR5Nse044WwacyjHGOMlvNsBe1y6z9A=="
-    },
-    "node_modules/easy-extender": {
-      "version": "2.3.4",
-      "resolved": "https://registry.npmjs.org/easy-extender/-/easy-extender-2.3.4.tgz",
-      "integrity": "sha512-8cAwm6md1YTiPpOvDULYJL4ZS6WfM5/cTeVVh4JsvyYZAoqlRVUpHL9Gr5Fy7HA6xcSZicUia3DeAgO3Us8E+Q==",
-      "dev": true,
-      "dependencies": {
-        "lodash": "^4.17.10"
-      },
-      "engines": {
-        "node": ">= 4.0.0"
-      }
-    },
-    "node_modules/eazy-logger": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-4.0.1.tgz",
-      "integrity": "sha512-2GSFtnnC6U4IEKhEI7+PvdxrmjJ04mdsj3wHZTFiw0tUtG4HCWzTr13ZYTk8XOGnA1xQMaDljoBOYlk3D/MMSw==",
-      "dev": true,
-      "dependencies": {
-        "chalk": "4.1.2"
-      },
-      "engines": {
-        "node": ">= 0.8.0"
-      }
-    },
-    "node_modules/ee-first": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
-      "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
-      "dev": true
-    },
-    "node_modules/ejs": {
-      "version": "3.1.10",
-      "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz",
-      "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==",
-      "dev": true,
-      "dependencies": {
-        "jake": "^10.8.5"
-      },
-      "bin": {
-        "ejs": "bin/cli.js"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/electron-to-chromium": {
-      "version": "1.4.331",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.331.tgz",
-      "integrity": "sha512-tdtr9y9oJl8VDiS+HeB6e/JDJqdDGjIk3yRfEMHm5rDnWQ/D5SbafybAayInxolbfbH6pouV5g7ZUAwE/WVtHw==",
-      "dev": true
-    },
-    "node_modules/elkjs": {
-      "version": "0.9.1",
-      "resolved": "https://registry.npmjs.org/elkjs/-/elkjs-0.9.1.tgz",
-      "integrity": "sha512-JWKDyqAdltuUcyxaECtYG6H4sqysXSLeoXuGUBfRNESMTkj+w+qdb0jya8Z/WI0jVd03WQtCGhS6FOFtlhD5FQ=="
-    },
-    "node_modules/emittery": {
-      "version": "0.13.1",
-      "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz",
-      "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sindresorhus/emittery?sponsor=1"
-      }
-    },
-    "node_modules/emoji-regex": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
-      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
-      "dev": true
-    },
-    "node_modules/encodeurl": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
-      "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.8"
-      }
-    },
-    "node_modules/engine.io": {
-      "version": "6.5.5",
-      "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.5.tgz",
-      "integrity": "sha512-C5Pn8Wk+1vKBoHghJODM63yk8MvrO9EWZUfkAt5HAqIgPE4/8FF0PEGHXtEd40l223+cE5ABWuPzm38PHFXfMA==",
-      "dev": true,
-      "dependencies": {
-        "@types/cookie": "^0.4.1",
-        "@types/cors": "^2.8.12",
-        "@types/node": ">=10.0.0",
-        "accepts": "~1.3.4",
-        "base64id": "2.0.0",
-        "cookie": "~0.4.1",
-        "cors": "~2.8.5",
-        "debug": "~4.3.1",
-        "engine.io-parser": "~5.2.1",
-        "ws": "~8.17.1"
-      },
-      "engines": {
-        "node": ">=10.2.0"
-      }
-    },
-    "node_modules/engine.io-client": {
-      "version": "6.5.4",
-      "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.4.tgz",
-      "integrity": "sha512-GeZeeRjpD2qf49cZQ0Wvh/8NJNfeXkXXcoGh+F77oEAgo9gUHwT1fCRxSNU+YEEaysOJTnsFHmM5oAcPy4ntvQ==",
-      "dev": true,
-      "dependencies": {
-        "@socket.io/component-emitter": "~3.1.0",
-        "debug": "~4.3.1",
-        "engine.io-parser": "~5.2.1",
-        "ws": "~8.17.1",
-        "xmlhttprequest-ssl": "~2.0.0"
-      }
-    },
-    "node_modules/engine.io-client/node_modules/debug": {
-      "version": "4.3.4",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
-      "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
-      "dev": true,
-      "dependencies": {
-        "ms": "2.1.2"
-      },
-      "engines": {
-        "node": ">=6.0"
-      },
-      "peerDependenciesMeta": {
-        "supports-color": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/engine.io-client/node_modules/ms": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-      "dev": true
-    },
-    "node_modules/engine.io-parser": {
-      "version": "5.2.2",
-      "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.2.tgz",
-      "integrity": "sha512-RcyUFKA93/CXH20l4SoVvzZfrSDMOTUS3bWVpTt2FuFP+XYrL8i8oonHP7WInRyVHXh0n/ORtoeiE1os+8qkSw==",
-      "dev": true,
-      "engines": {
-        "node": ">=10.0.0"
-      }
-    },
-    "node_modules/engine.io/node_modules/debug": {
-      "version": "4.3.5",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz",
-      "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==",
-      "dev": true,
-      "dependencies": {
-        "ms": "2.1.2"
-      },
-      "engines": {
-        "node": ">=6.0"
-      },
-      "peerDependenciesMeta": {
-        "supports-color": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/engine.io/node_modules/ms": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-      "dev": true
-    },
-    "node_modules/error-ex": {
-      "version": "1.3.2",
-      "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
-      "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
-      "dev": true,
-      "dependencies": {
-        "is-arrayish": "^0.2.1"
-      }
-    },
-    "node_modules/es-abstract": {
-      "version": "1.21.1",
-      "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.1.tgz",
-      "integrity": "sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==",
-      "dev": true,
-      "peer": true,
-      "dependencies": {
-        "available-typed-arrays": "^1.0.5",
-        "call-bind": "^1.0.2",
-        "es-set-tostringtag": "^2.0.1",
-        "es-to-primitive": "^1.2.1",
-        "function-bind": "^1.1.1",
-        "function.prototype.name": "^1.1.5",
-        "get-intrinsic": "^1.1.3",
-        "get-symbol-description": "^1.0.0",
-        "globalthis": "^1.0.3",
-        "gopd": "^1.0.1",
-        "has": "^1.0.3",
-        "has-property-descriptors": "^1.0.0",
-        "has-proto": "^1.0.1",
-        "has-symbols": "^1.0.3",
-        "internal-slot": "^1.0.4",
-        "is-array-buffer": "^3.0.1",
-        "is-callable": "^1.2.7",
-        "is-negative-zero": "^2.0.2",
-        "is-regex": "^1.1.4",
-        "is-shared-array-buffer": "^1.0.2",
-        "is-string": "^1.0.7",
-        "is-typed-array": "^1.1.10",
-        "is-weakref": "^1.0.2",
-        "object-inspect": "^1.12.2",
-        "object-keys": "^1.1.1",
-        "object.assign": "^4.1.4",
-        "regexp.prototype.flags": "^1.4.3",
-        "safe-regex-test": "^1.0.0",
-        "string.prototype.trimend": "^1.0.6",
-        "string.prototype.trimstart": "^1.0.6",
-        "typed-array-length": "^1.0.4",
-        "unbox-primitive": "^1.0.2",
-        "which-typed-array": "^1.1.9"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/es-set-tostringtag": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz",
-      "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==",
-      "dev": true,
-      "peer": true,
-      "dependencies": {
-        "get-intrinsic": "^1.1.3",
-        "has": "^1.0.3",
-        "has-tostringtag": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/es-shim-unscopables": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz",
-      "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==",
-      "dev": true,
-      "peer": true,
-      "dependencies": {
-        "has": "^1.0.3"
-      }
-    },
-    "node_modules/es-to-primitive": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
-      "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
-      "dev": true,
-      "peer": true,
-      "dependencies": {
-        "is-callable": "^1.1.4",
-        "is-date-object": "^1.0.1",
-        "is-symbol": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/esbuild": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.1.tgz",
-      "integrity": "sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==",
-      "dev": true,
-      "hasInstallScript": true,
-      "bin": {
-        "esbuild": "bin/esbuild"
-      },
-      "engines": {
-        "node": ">=18"
-      },
-      "optionalDependencies": {
-        "@esbuild/aix-ppc64": "0.23.1",
-        "@esbuild/android-arm": "0.23.1",
-        "@esbuild/android-arm64": "0.23.1",
-        "@esbuild/android-x64": "0.23.1",
-        "@esbuild/darwin-arm64": "0.23.1",
-        "@esbuild/darwin-x64": "0.23.1",
-        "@esbuild/freebsd-arm64": "0.23.1",
-        "@esbuild/freebsd-x64": "0.23.1",
-        "@esbuild/linux-arm": "0.23.1",
-        "@esbuild/linux-arm64": "0.23.1",
-        "@esbuild/linux-ia32": "0.23.1",
-        "@esbuild/linux-loong64": "0.23.1",
-        "@esbuild/linux-mips64el": "0.23.1",
-        "@esbuild/linux-ppc64": "0.23.1",
-        "@esbuild/linux-riscv64": "0.23.1",
-        "@esbuild/linux-s390x": "0.23.1",
-        "@esbuild/linux-x64": "0.23.1",
-        "@esbuild/netbsd-x64": "0.23.1",
-        "@esbuild/openbsd-arm64": "0.23.1",
-        "@esbuild/openbsd-x64": "0.23.1",
-        "@esbuild/sunos-x64": "0.23.1",
-        "@esbuild/win32-arm64": "0.23.1",
-        "@esbuild/win32-ia32": "0.23.1",
-        "@esbuild/win32-x64": "0.23.1"
-      }
-    },
-    "node_modules/esbuild-sass-plugin": {
-      "version": "3.3.1",
-      "resolved": "https://registry.npmjs.org/esbuild-sass-plugin/-/esbuild-sass-plugin-3.3.1.tgz",
-      "integrity": "sha512-SnO1ls+d52n6j8gRRpjexXI8MsHEaumS0IdDHaYM29Y6gakzZYMls6i9ql9+AWMSQk/eryndmUpXEgT34QrX1A==",
-      "dev": true,
-      "dependencies": {
-        "resolve": "^1.22.8",
-        "safe-identifier": "^0.4.2",
-        "sass": "^1.71.1"
-      },
-      "peerDependencies": {
-        "esbuild": ">=0.20.1",
-        "sass-embedded": "^1.71.1"
-      }
-    },
-    "node_modules/escalade": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
-      "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
-      "dev": true,
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/escape-html": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
-      "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
-      "dev": true
-    },
-    "node_modules/escape-string-regexp": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
-      "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/eslint": {
-      "version": "8.57.0",
-      "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz",
-      "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==",
-      "dev": true,
-      "dependencies": {
-        "@eslint-community/eslint-utils": "^4.2.0",
-        "@eslint-community/regexpp": "^4.6.1",
-        "@eslint/eslintrc": "^2.1.4",
-        "@eslint/js": "8.57.0",
-        "@humanwhocodes/config-array": "^0.11.14",
-        "@humanwhocodes/module-importer": "^1.0.1",
-        "@nodelib/fs.walk": "^1.2.8",
-        "@ungap/structured-clone": "^1.2.0",
-        "ajv": "^6.12.4",
-        "chalk": "^4.0.0",
-        "cross-spawn": "^7.0.2",
-        "debug": "^4.3.2",
-        "doctrine": "^3.0.0",
-        "escape-string-regexp": "^4.0.0",
-        "eslint-scope": "^7.2.2",
-        "eslint-visitor-keys": "^3.4.3",
-        "espree": "^9.6.1",
-        "esquery": "^1.4.2",
-        "esutils": "^2.0.2",
-        "fast-deep-equal": "^3.1.3",
-        "file-entry-cache": "^6.0.1",
-        "find-up": "^5.0.0",
-        "glob-parent": "^6.0.2",
-        "globals": "^13.19.0",
-        "graphemer": "^1.4.0",
-        "ignore": "^5.2.0",
-        "imurmurhash": "^0.1.4",
-        "is-glob": "^4.0.0",
-        "is-path-inside": "^3.0.3",
-        "js-yaml": "^4.1.0",
-        "json-stable-stringify-without-jsonify": "^1.0.1",
-        "levn": "^0.4.1",
-        "lodash.merge": "^4.6.2",
-        "minimatch": "^3.1.2",
-        "natural-compare": "^1.4.0",
-        "optionator": "^0.9.3",
-        "strip-ansi": "^6.0.1",
-        "text-table": "^0.2.0"
-      },
-      "bin": {
-        "eslint": "bin/eslint.js"
-      },
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      }
-    },
-    "node_modules/eslint-config-standard": {
-      "version": "17.1.0",
-      "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz",
-      "integrity": "sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/feross"
-        },
-        {
-          "type": "patreon",
-          "url": "https://www.patreon.com/feross"
-        },
-        {
-          "type": "consulting",
-          "url": "https://feross.org/support"
-        }
-      ],
-      "engines": {
-        "node": ">=12.0.0"
-      },
-      "peerDependencies": {
-        "eslint": "^8.0.1",
-        "eslint-plugin-import": "^2.25.2",
-        "eslint-plugin-n": "^15.0.0 || ^16.0.0 ",
-        "eslint-plugin-promise": "^6.0.0"
-      }
-    },
-    "node_modules/eslint-import-resolver-node": {
-      "version": "0.3.7",
-      "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz",
-      "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==",
-      "dev": true,
-      "peer": true,
-      "dependencies": {
-        "debug": "^3.2.7",
-        "is-core-module": "^2.11.0",
-        "resolve": "^1.22.1"
-      }
-    },
-    "node_modules/eslint-import-resolver-node/node_modules/debug": {
-      "version": "3.2.7",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
-      "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
-      "dev": true,
-      "peer": true,
-      "dependencies": {
-        "ms": "^2.1.1"
-      }
-    },
-    "node_modules/eslint-import-resolver-node/node_modules/ms": {
-      "version": "2.1.3",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
-      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
-      "dev": true,
-      "peer": true
-    },
-    "node_modules/eslint-module-utils": {
-      "version": "2.7.4",
-      "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz",
-      "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==",
-      "dev": true,
-      "peer": true,
-      "dependencies": {
-        "debug": "^3.2.7"
-      },
-      "engines": {
-        "node": ">=4"
-      },
-      "peerDependenciesMeta": {
-        "eslint": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/eslint-module-utils/node_modules/debug": {
-      "version": "3.2.7",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
-      "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
-      "dev": true,
-      "peer": true,
-      "dependencies": {
-        "ms": "^2.1.1"
-      }
-    },
-    "node_modules/eslint-module-utils/node_modules/ms": {
-      "version": "2.1.3",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
-      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
-      "dev": true,
-      "peer": true
-    },
-    "node_modules/eslint-plugin-es": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz",
-      "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==",
-      "dev": true,
-      "peer": true,
-      "dependencies": {
-        "eslint-utils": "^2.0.0",
-        "regexpp": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=8.10.0"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/mysticatea"
-      },
-      "peerDependencies": {
-        "eslint": ">=4.19.1"
-      }
-    },
-    "node_modules/eslint-plugin-es/node_modules/eslint-utils": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
-      "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
-      "dev": true,
-      "peer": true,
-      "dependencies": {
-        "eslint-visitor-keys": "^1.1.0"
-      },
-      "engines": {
-        "node": ">=6"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/mysticatea"
-      }
-    },
-    "node_modules/eslint-plugin-es/node_modules/eslint-visitor-keys": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
-      "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
-      "dev": true,
-      "peer": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/eslint-plugin-import": {
-      "version": "2.27.5",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz",
-      "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==",
-      "dev": true,
-      "peer": true,
-      "dependencies": {
-        "array-includes": "^3.1.6",
-        "array.prototype.flat": "^1.3.1",
-        "array.prototype.flatmap": "^1.3.1",
-        "debug": "^3.2.7",
-        "doctrine": "^2.1.0",
-        "eslint-import-resolver-node": "^0.3.7",
-        "eslint-module-utils": "^2.7.4",
-        "has": "^1.0.3",
-        "is-core-module": "^2.11.0",
-        "is-glob": "^4.0.3",
-        "minimatch": "^3.1.2",
-        "object.values": "^1.1.6",
-        "resolve": "^1.22.1",
-        "semver": "^6.3.0",
-        "tsconfig-paths": "^3.14.1"
-      },
-      "engines": {
-        "node": ">=4"
-      },
-      "peerDependencies": {
-        "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8"
-      }
-    },
-    "node_modules/eslint-plugin-import/node_modules/debug": {
-      "version": "3.2.7",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
-      "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
-      "dev": true,
-      "peer": true,
-      "dependencies": {
-        "ms": "^2.1.1"
-      }
-    },
-    "node_modules/eslint-plugin-import/node_modules/doctrine": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
-      "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
-      "dev": true,
-      "peer": true,
-      "dependencies": {
-        "esutils": "^2.0.2"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/eslint-plugin-import/node_modules/ms": {
-      "version": "2.1.3",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
-      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
-      "dev": true,
-      "peer": true
-    },
-    "node_modules/eslint-plugin-import/node_modules/semver": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
-      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
-      "dev": true,
-      "peer": true,
-      "bin": {
-        "semver": "bin/semver.js"
-      }
-    },
-    "node_modules/eslint-plugin-n": {
-      "version": "15.6.1",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.6.1.tgz",
-      "integrity": "sha512-R9xw9OtCRxxaxaszTQmQAlPgM+RdGjaL1akWuY/Fv9fRAi8Wj4CUKc6iYVG8QNRjRuo8/BqVYIpfqberJUEacA==",
-      "dev": true,
-      "peer": true,
-      "dependencies": {
-        "builtins": "^5.0.1",
-        "eslint-plugin-es": "^4.1.0",
-        "eslint-utils": "^3.0.0",
-        "ignore": "^5.1.1",
-        "is-core-module": "^2.11.0",
-        "minimatch": "^3.1.2",
-        "resolve": "^1.22.1",
-        "semver": "^7.3.8"
-      },
-      "engines": {
-        "node": ">=12.22.0"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/mysticatea"
-      },
-      "peerDependencies": {
-        "eslint": ">=7.0.0"
-      }
-    },
-    "node_modules/eslint-plugin-promise": {
-      "version": "6.1.1",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz",
-      "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==",
-      "dev": true,
-      "peer": true,
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "peerDependencies": {
-        "eslint": "^7.0.0 || ^8.0.0"
-      }
-    },
-    "node_modules/eslint-scope": {
-      "version": "7.2.2",
-      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
-      "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
-      "dev": true,
-      "dependencies": {
-        "esrecurse": "^4.3.0",
-        "estraverse": "^5.2.0"
-      },
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      }
-    },
-    "node_modules/eslint-utils": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
-      "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
-      "dev": true,
-      "peer": true,
-      "dependencies": {
-        "eslint-visitor-keys": "^2.0.0"
-      },
-      "engines": {
-        "node": "^10.0.0 || ^12.0.0 || >= 14.0.0"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/mysticatea"
-      },
-      "peerDependencies": {
-        "eslint": ">=5"
-      }
-    },
-    "node_modules/eslint-utils/node_modules/eslint-visitor-keys": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
-      "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
-      "dev": true,
-      "peer": true,
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/eslint-visitor-keys": {
-      "version": "3.4.3",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
-      "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
-      "dev": true,
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      }
-    },
-    "node_modules/eslint/node_modules/debug": {
-      "version": "4.3.4",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
-      "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
-      "dev": true,
-      "dependencies": {
-        "ms": "2.1.2"
-      },
-      "engines": {
-        "node": ">=6.0"
-      },
-      "peerDependenciesMeta": {
-        "supports-color": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/eslint/node_modules/escape-string-regexp": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
-      "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/eslint/node_modules/glob-parent": {
-      "version": "6.0.2",
-      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
-      "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
-      "dev": true,
-      "dependencies": {
-        "is-glob": "^4.0.3"
-      },
-      "engines": {
-        "node": ">=10.13.0"
-      }
-    },
-    "node_modules/eslint/node_modules/ms": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-      "dev": true
-    },
-    "node_modules/espree": {
-      "version": "9.6.1",
-      "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
-      "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
-      "dev": true,
-      "dependencies": {
-        "acorn": "^8.9.0",
-        "acorn-jsx": "^5.3.2",
-        "eslint-visitor-keys": "^3.4.1"
-      },
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      }
-    },
-    "node_modules/esprima": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
-      "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
-      "dev": true,
-      "bin": {
-        "esparse": "bin/esparse.js",
-        "esvalidate": "bin/esvalidate.js"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/esquery": {
-      "version": "1.4.2",
-      "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.2.tgz",
-      "integrity": "sha512-JVSoLdTlTDkmjFmab7H/9SL9qGSyjElT3myyKp7krqjVFQCDLmj1QFaCLRFBszBKI0XVZaiiXvuPIX3ZwHe1Ng==",
-      "dev": true,
-      "dependencies": {
-        "estraverse": "^5.1.0"
-      },
-      "engines": {
-        "node": ">=0.10"
-      }
-    },
-    "node_modules/esrecurse": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
-      "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
-      "dev": true,
-      "dependencies": {
-        "estraverse": "^5.2.0"
-      },
-      "engines": {
-        "node": ">=4.0"
-      }
-    },
-    "node_modules/estraverse": {
-      "version": "5.3.0",
-      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
-      "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
-      "dev": true,
-      "engines": {
-        "node": ">=4.0"
-      }
-    },
-    "node_modules/esutils": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
-      "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/etag": {
-      "version": "1.8.1",
-      "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
-      "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/eventemitter3": {
-      "version": "4.0.7",
-      "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
-      "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
-      "dev": true
-    },
-    "node_modules/execa": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
-      "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
-      "dev": true,
-      "dependencies": {
-        "cross-spawn": "^7.0.3",
-        "get-stream": "^6.0.0",
-        "human-signals": "^2.1.0",
-        "is-stream": "^2.0.0",
-        "merge-stream": "^2.0.0",
-        "npm-run-path": "^4.0.1",
-        "onetime": "^5.1.2",
-        "signal-exit": "^3.0.3",
-        "strip-final-newline": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sindresorhus/execa?sponsor=1"
-      }
-    },
-    "node_modules/exit": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
-      "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.8.0"
-      }
-    },
-    "node_modules/expect": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz",
-      "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==",
-      "dev": true,
-      "dependencies": {
-        "@jest/expect-utils": "^29.7.0",
-        "jest-get-type": "^29.6.3",
-        "jest-matcher-utils": "^29.7.0",
-        "jest-message-util": "^29.7.0",
-        "jest-util": "^29.7.0"
-      },
-      "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
-      }
-    },
-    "node_modules/fast-deep-equal": {
-      "version": "3.1.3",
-      "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
-      "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
-      "dev": true
-    },
-    "node_modules/fast-glob": {
-      "version": "3.3.2",
-      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
-      "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
-      "dev": true,
-      "dependencies": {
-        "@nodelib/fs.stat": "^2.0.2",
-        "@nodelib/fs.walk": "^1.2.3",
-        "glob-parent": "^5.1.2",
-        "merge2": "^1.3.0",
-        "micromatch": "^4.0.4"
-      },
-      "engines": {
-        "node": ">=8.6.0"
-      }
-    },
-    "node_modules/fast-json-stable-stringify": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
-      "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
-      "dev": true
-    },
-    "node_modules/fast-levenshtein": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
-      "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
-      "dev": true
-    },
-    "node_modules/fastest-levenshtein": {
-      "version": "1.0.16",
-      "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz",
-      "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==",
-      "dev": true,
-      "engines": {
-        "node": ">= 4.9.1"
-      }
-    },
-    "node_modules/fastq": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
-      "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
-      "dev": true,
-      "dependencies": {
-        "reusify": "^1.0.4"
-      }
-    },
-    "node_modules/fb-watchman": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz",
-      "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==",
-      "dev": true,
-      "dependencies": {
-        "bser": "2.1.1"
-      }
-    },
-    "node_modules/file-entry-cache": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
-      "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
-      "dev": true,
-      "dependencies": {
-        "flat-cache": "^3.0.4"
-      },
-      "engines": {
-        "node": "^10.12.0 || >=12.0.0"
-      }
-    },
-    "node_modules/filelist": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz",
-      "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==",
-      "dev": true,
-      "dependencies": {
-        "minimatch": "^5.0.1"
-      }
-    },
-    "node_modules/filelist/node_modules/brace-expansion": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
-      "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
-      "dev": true,
-      "dependencies": {
-        "balanced-match": "^1.0.0"
-      }
-    },
-    "node_modules/filelist/node_modules/minimatch": {
-      "version": "5.1.6",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
-      "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
-      "dev": true,
-      "dependencies": {
-        "brace-expansion": "^2.0.1"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/fill-range": {
-      "version": "7.1.1",
-      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
-      "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
-      "dev": true,
-      "dependencies": {
-        "to-regex-range": "^5.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/finalhandler": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz",
-      "integrity": "sha512-ejnvM9ZXYzp6PUPUyQBMBf0Co5VX2gr5H2VQe2Ui2jWXNlxv+PYZo8wpAymJNJdLsG1R4p+M4aynF8KuoUEwRw==",
-      "dev": true,
-      "dependencies": {
-        "debug": "2.6.9",
-        "encodeurl": "~1.0.1",
-        "escape-html": "~1.0.3",
-        "on-finished": "~2.3.0",
-        "parseurl": "~1.3.2",
-        "statuses": "~1.3.1",
-        "unpipe": "~1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.8"
-      }
-    },
-    "node_modules/find-up": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
-      "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
-      "dev": true,
-      "dependencies": {
-        "locate-path": "^6.0.0",
-        "path-exists": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/flat-cache": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
-      "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
-      "dev": true,
-      "dependencies": {
-        "flatted": "^3.1.0",
-        "rimraf": "^3.0.2"
-      },
-      "engines": {
-        "node": "^10.12.0 || >=12.0.0"
-      }
-    },
-    "node_modules/flatted": {
-      "version": "3.2.7",
-      "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz",
-      "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==",
-      "dev": true
-    },
-    "node_modules/follow-redirects": {
-      "version": "1.15.6",
-      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
-      "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "individual",
-          "url": "https://github.com/sponsors/RubenVerborgh"
-        }
-      ],
-      "engines": {
-        "node": ">=4.0"
-      },
-      "peerDependenciesMeta": {
-        "debug": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/for-each": {
-      "version": "0.3.3",
-      "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
-      "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
-      "dev": true,
-      "peer": true,
-      "dependencies": {
-        "is-callable": "^1.1.3"
-      }
-    },
-    "node_modules/fresh": {
-      "version": "0.5.2",
-      "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
-      "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/fs-extra": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz",
-      "integrity": "sha512-V3Z3WZWVUYd8hoCL5xfXJCaHWYzmtwW5XWYSlLgERi8PWd8bx1kUHUk8L1BT57e49oKnDDD180mjfrHc1yA9rg==",
-      "dev": true,
-      "dependencies": {
-        "graceful-fs": "^4.1.2",
-        "jsonfile": "^3.0.0",
-        "universalify": "^0.1.0"
-      }
-    },
-    "node_modules/fs.realpath": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
-      "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
-      "dev": true
-    },
-    "node_modules/fsevents": {
-      "version": "2.3.2",
-      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
-      "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
-      "dev": true,
-      "hasInstallScript": true,
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
-      }
-    },
-    "node_modules/function-bind": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
-      "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
-      "dev": true
-    },
-    "node_modules/function.prototype.name": {
-      "version": "1.1.5",
-      "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz",
-      "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==",
-      "dev": true,
-      "peer": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.19.0",
-        "functions-have-names": "^1.2.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/functions-have-names": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
-      "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
-      "dev": true,
-      "peer": true,
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/gensync": {
-      "version": "1.0.0-beta.2",
-      "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
-      "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
-      "dev": true,
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/get-caller-file": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
-      "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
-      "dev": true,
-      "engines": {
-        "node": "6.* || 8.* || >= 10.*"
-      }
-    },
-    "node_modules/get-intrinsic": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz",
-      "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==",
-      "dev": true,
-      "peer": true,
-      "dependencies": {
-        "function-bind": "^1.1.1",
-        "has": "^1.0.3",
-        "has-symbols": "^1.0.3"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/get-package-type": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
-      "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==",
-      "dev": true,
-      "engines": {
-        "node": ">=8.0.0"
-      }
-    },
-    "node_modules/get-stream": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
-      "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/get-symbol-description": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
-      "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
-      "dev": true,
-      "peer": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "get-intrinsic": "^1.1.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/glob": {
-      "version": "7.2.3",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
-      "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
-      "dev": true,
-      "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^3.1.1",
-        "once": "^1.3.0",
-        "path-is-absolute": "^1.0.0"
-      },
-      "engines": {
-        "node": "*"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "node_modules/glob-parent": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
-      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
-      "dev": true,
-      "dependencies": {
-        "is-glob": "^4.0.1"
-      },
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "node_modules/global-modules": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz",
-      "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==",
-      "dev": true,
-      "dependencies": {
-        "global-prefix": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/global-prefix": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz",
-      "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==",
-      "dev": true,
-      "dependencies": {
-        "ini": "^1.3.5",
-        "kind-of": "^6.0.2",
-        "which": "^1.3.1"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/global-prefix/node_modules/which": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
-      "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
-      "dev": true,
-      "dependencies": {
-        "isexe": "^2.0.0"
-      },
-      "bin": {
-        "which": "bin/which"
-      }
-    },
-    "node_modules/globals": {
-      "version": "13.24.0",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
-      "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
-      "dev": true,
-      "dependencies": {
-        "type-fest": "^0.20.2"
-      },
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/globalthis": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz",
-      "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==",
-      "dev": true,
-      "peer": true,
-      "dependencies": {
-        "define-properties": "^1.1.3"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/globby": {
-      "version": "11.1.0",
-      "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
-      "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
-      "dev": true,
-      "dependencies": {
-        "array-union": "^2.1.0",
-        "dir-glob": "^3.0.1",
-        "fast-glob": "^3.2.9",
-        "ignore": "^5.2.0",
-        "merge2": "^1.4.1",
-        "slash": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/globjoin": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz",
-      "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==",
-      "dev": true
-    },
-    "node_modules/gopd": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
-      "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
-      "dev": true,
-      "peer": true,
-      "dependencies": {
-        "get-intrinsic": "^1.1.3"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/graceful-fs": {
-      "version": "4.2.10",
-      "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
-      "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==",
-      "dev": true
-    },
-    "node_modules/graphemer": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
-      "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
-      "dev": true
-    },
-    "node_modules/hard-rejection": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz",
-      "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==",
-      "dev": true,
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/has": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-      "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-      "dev": true,
-      "dependencies": {
-        "function-bind": "^1.1.1"
-      },
-      "engines": {
-        "node": ">= 0.4.0"
-      }
-    },
-    "node_modules/has-bigints": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
-      "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
-      "dev": true,
-      "peer": true,
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/has-flag": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
-      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/has-property-descriptors": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
-      "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
-      "dev": true,
-      "peer": true,
-      "dependencies": {
-        "get-intrinsic": "^1.1.1"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/has-proto": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
-      "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==",
-      "dev": true,
-      "peer": true,
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/has-symbols": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
-      "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
-      "dev": true,
-      "peer": true,
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/has-tostringtag": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
-      "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
-      "dev": true,
-      "peer": true,
-      "dependencies": {
-        "has-symbols": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/heap": {
-      "version": "0.2.7",
-      "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz",
-      "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg=="
-    },
-    "node_modules/highlight.js": {
-      "version": "11.10.0",
-      "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.10.0.tgz",
-      "integrity": "sha512-SYVnVFswQER+zu1laSya563s+F8VDGt7o35d4utbamowvUNLLMovFqwCLSocpZTz3MgaSRA1IbqRWZv97dtErQ==",
-      "engines": {
-        "node": ">=12.0.0"
-      }
-    },
-    "node_modules/hosted-git-info": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz",
-      "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==",
-      "dev": true,
-      "dependencies": {
-        "lru-cache": "^6.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/html-escaper": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
-      "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
-      "dev": true
-    },
-    "node_modules/html-tags": {
-      "version": "3.3.1",
-      "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz",
-      "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/http-errors": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
-      "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
-      "dev": true,
-      "dependencies": {
-        "depd": "2.0.0",
-        "inherits": "2.0.4",
-        "setprototypeof": "1.2.0",
-        "statuses": "2.0.1",
-        "toidentifier": "1.0.1"
-      },
-      "engines": {
-        "node": ">= 0.8"
-      }
-    },
-    "node_modules/http-errors/node_modules/statuses": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
-      "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.8"
-      }
-    },
-    "node_modules/http-proxy": {
-      "version": "1.18.1",
-      "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz",
-      "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==",
-      "dev": true,
-      "dependencies": {
-        "eventemitter3": "^4.0.0",
-        "follow-redirects": "^1.0.0",
-        "requires-port": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=8.0.0"
-      }
-    },
-    "node_modules/human-signals": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
-      "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
-      "dev": true,
-      "engines": {
-        "node": ">=10.17.0"
-      }
-    },
-    "node_modules/iconv-lite": {
-      "version": "0.4.24",
-      "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
-      "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
-      "dev": true,
-      "dependencies": {
-        "safer-buffer": ">= 2.1.2 < 3"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/idb-keyval": {
-      "version": "6.2.1",
-      "resolved": "https://registry.npmjs.org/idb-keyval/-/idb-keyval-6.2.1.tgz",
-      "integrity": "sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg=="
-    },
-    "node_modules/ignore": {
-      "version": "5.3.1",
-      "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz",
-      "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==",
-      "dev": true,
-      "engines": {
-        "node": ">= 4"
-      }
-    },
-    "node_modules/immutable": {
-      "version": "3.8.2",
-      "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz",
-      "integrity": "sha512-15gZoQ38eYjEjxkorfbcgBKBL6R7T459OuK+CpcWt7O3KF4uPCx2tD0uFETlUDIyo+1789crbMhTvQBSR5yBMg==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/import-fresh": {
-      "version": "3.3.0",
-      "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
-      "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
-      "dev": true,
-      "dependencies": {
-        "parent-module": "^1.0.0",
-        "resolve-from": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=6"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/import-lazy": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz",
-      "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/import-local": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz",
-      "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==",
-      "dev": true,
-      "dependencies": {
-        "pkg-dir": "^4.2.0",
-        "resolve-cwd": "^3.0.0"
-      },
-      "bin": {
-        "import-local-fixture": "fixtures/cli.js"
-      },
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/imurmurhash": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
-      "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.8.19"
-      }
-    },
-    "node_modules/indent-string": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz",
-      "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==",
-      "dev": true,
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/inflight": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
-      "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
-      "dev": true,
-      "dependencies": {
-        "once": "^1.3.0",
-        "wrappy": "1"
-      }
-    },
-    "node_modules/inherits": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
-      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
-      "dev": true
-    },
-    "node_modules/ini": {
-      "version": "1.3.8",
-      "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
-      "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
-      "dev": true
-    },
-    "node_modules/internal-slot": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz",
-      "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==",
-      "dev": true,
-      "peer": true,
-      "dependencies": {
-        "get-intrinsic": "^1.2.0",
-        "has": "^1.0.3",
-        "side-channel": "^1.0.4"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/internmap": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz",
-      "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==",
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/is-array-buffer": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.1.tgz",
-      "integrity": "sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==",
-      "dev": true,
-      "peer": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "get-intrinsic": "^1.1.3",
-        "is-typed-array": "^1.1.10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-arrayish": {
-      "version": "0.2.1",
-      "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
-      "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
-      "dev": true
-    },
-    "node_modules/is-bigint": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
-      "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
-      "dev": true,
-      "peer": true,
-      "dependencies": {
-        "has-bigints": "^1.0.1"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-binary-path": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
-      "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
-      "dev": true,
-      "dependencies": {
-        "binary-extensions": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/is-boolean-object": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
-      "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
-      "dev": true,
-      "peer": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "has-tostringtag": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-callable": {
-      "version": "1.2.7",
-      "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
-      "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
-      "dev": true,
-      "peer": true,
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-core-module": {
-      "version": "2.13.0",
-      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz",
-      "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==",
-      "dev": true,
-      "dependencies": {
-        "has": "^1.0.3"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-date-object": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
-      "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
-      "dev": true,
-      "peer": true,
-      "dependencies": {
-        "has-tostringtag": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-extglob": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
-      "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/is-fullwidth-code-point": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
-      "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/is-generator-fn": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz",
-      "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/is-glob": {
-      "version": "4.0.3",
-      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
-      "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
-      "dev": true,
-      "dependencies": {
-        "is-extglob": "^2.1.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/is-negative-zero": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
-      "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
-      "dev": true,
-      "peer": true,
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-number": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
-      "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.12.0"
-      }
-    },
-    "node_modules/is-number-like": {
-      "version": "1.0.8",
-      "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz",
-      "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==",
-      "dev": true,
-      "dependencies": {
-        "lodash.isfinite": "^3.3.2"
-      }
-    },
-    "node_modules/is-number-object": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
-      "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
-      "dev": true,
-      "peer": true,
-      "dependencies": {
-        "has-tostringtag": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-path-inside": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
-      "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/is-plain-obj": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
-      "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/is-plain-object": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
-      "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/is-regex": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
-      "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
-      "dev": true,
-      "peer": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "has-tostringtag": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-shared-array-buffer": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
-      "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
-      "dev": true,
-      "peer": true,
-      "dependencies": {
-        "call-bind": "^1.0.2"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-stream": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
-      "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/is-string": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
-      "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
-      "dev": true,
-      "peer": true,
-      "dependencies": {
-        "has-tostringtag": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-symbol": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
-      "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
-      "dev": true,
-      "peer": true,
-      "dependencies": {
-        "has-symbols": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-typed-array": {
-      "version": "1.1.10",
-      "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz",
-      "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==",
-      "dev": true,
-      "peer": true,
-      "dependencies": {
-        "available-typed-arrays": "^1.0.5",
-        "call-bind": "^1.0.2",
-        "for-each": "^0.3.3",
-        "gopd": "^1.0.1",
-        "has-tostringtag": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-weakref": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
-      "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
-      "dev": true,
-      "peer": true,
-      "dependencies": {
-        "call-bind": "^1.0.2"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-wsl": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
-      "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/isexe": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
-      "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
-      "dev": true
-    },
-    "node_modules/istanbul-lib-coverage": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz",
-      "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/istanbul-lib-instrument": {
-      "version": "5.2.1",
-      "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz",
-      "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==",
-      "dev": true,
-      "dependencies": {
-        "@babel/core": "^7.12.3",
-        "@babel/parser": "^7.14.7",
-        "@istanbuljs/schema": "^0.1.2",
-        "istanbul-lib-coverage": "^3.2.0",
-        "semver": "^6.3.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/istanbul-lib-instrument/node_modules/semver": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
-      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
-      "dev": true,
-      "bin": {
-        "semver": "bin/semver.js"
-      }
-    },
-    "node_modules/istanbul-lib-report": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz",
-      "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==",
-      "dev": true,
-      "dependencies": {
-        "istanbul-lib-coverage": "^3.0.0",
-        "make-dir": "^4.0.0",
-        "supports-color": "^7.1.0"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/istanbul-lib-source-maps": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz",
-      "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==",
-      "dev": true,
-      "dependencies": {
-        "debug": "^4.1.1",
-        "istanbul-lib-coverage": "^3.0.0",
-        "source-map": "^0.6.1"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/istanbul-lib-source-maps/node_modules/debug": {
-      "version": "4.3.4",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
-      "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
-      "dev": true,
-      "dependencies": {
-        "ms": "2.1.2"
-      },
-      "engines": {
-        "node": ">=6.0"
-      },
-      "peerDependenciesMeta": {
-        "supports-color": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/istanbul-lib-source-maps/node_modules/ms": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-      "dev": true
-    },
-    "node_modules/istanbul-reports": {
-      "version": "3.1.6",
-      "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz",
-      "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==",
-      "dev": true,
-      "dependencies": {
-        "html-escaper": "^2.0.0",
-        "istanbul-lib-report": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/jake": {
-      "version": "10.9.1",
-      "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.1.tgz",
-      "integrity": "sha512-61btcOHNnLnsOdtLgA5efqQWjnSi/vow5HbI7HMdKKWqvrKR1bLK3BPlJn9gcSaP2ewuamUSMB5XEy76KUIS2w==",
-      "dev": true,
-      "dependencies": {
-        "async": "^3.2.3",
-        "chalk": "^4.0.2",
-        "filelist": "^1.0.4",
-        "minimatch": "^3.1.2"
-      },
-      "bin": {
-        "jake": "bin/cli.js"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/jake/node_modules/async": {
-      "version": "3.2.5",
-      "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz",
-      "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==",
-      "dev": true
-    },
-    "node_modules/jest": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz",
-      "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==",
-      "dev": true,
-      "dependencies": {
-        "@jest/core": "^29.7.0",
-        "@jest/types": "^29.6.3",
-        "import-local": "^3.0.2",
-        "jest-cli": "^29.7.0"
-      },
-      "bin": {
-        "jest": "bin/jest.js"
-      },
-      "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
-      },
-      "peerDependencies": {
-        "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
-      },
-      "peerDependenciesMeta": {
-        "node-notifier": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/jest-changed-files": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz",
-      "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==",
-      "dev": true,
-      "dependencies": {
-        "execa": "^5.0.0",
-        "jest-util": "^29.7.0",
-        "p-limit": "^3.1.0"
-      },
-      "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
-      }
-    },
-    "node_modules/jest-circus": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz",
-      "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==",
-      "dev": true,
-      "dependencies": {
-        "@jest/environment": "^29.7.0",
-        "@jest/expect": "^29.7.0",
-        "@jest/test-result": "^29.7.0",
-        "@jest/types": "^29.6.3",
-        "@types/node": "*",
-        "chalk": "^4.0.0",
-        "co": "^4.6.0",
-        "dedent": "^1.0.0",
-        "is-generator-fn": "^2.0.0",
-        "jest-each": "^29.7.0",
-        "jest-matcher-utils": "^29.7.0",
-        "jest-message-util": "^29.7.0",
-        "jest-runtime": "^29.7.0",
-        "jest-snapshot": "^29.7.0",
-        "jest-util": "^29.7.0",
-        "p-limit": "^3.1.0",
-        "pretty-format": "^29.7.0",
-        "pure-rand": "^6.0.0",
-        "slash": "^3.0.0",
-        "stack-utils": "^2.0.3"
-      },
-      "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
-      }
-    },
-    "node_modules/jest-cli": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz",
-      "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==",
-      "dev": true,
-      "dependencies": {
-        "@jest/core": "^29.7.0",
-        "@jest/test-result": "^29.7.0",
-        "@jest/types": "^29.6.3",
-        "chalk": "^4.0.0",
-        "create-jest": "^29.7.0",
-        "exit": "^0.1.2",
-        "import-local": "^3.0.2",
-        "jest-config": "^29.7.0",
-        "jest-util": "^29.7.0",
-        "jest-validate": "^29.7.0",
-        "yargs": "^17.3.1"
-      },
-      "bin": {
-        "jest": "bin/jest.js"
-      },
-      "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
-      },
-      "peerDependencies": {
-        "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
-      },
-      "peerDependenciesMeta": {
-        "node-notifier": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/jest-config": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz",
-      "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==",
-      "dev": true,
-      "dependencies": {
-        "@babel/core": "^7.11.6",
-        "@jest/test-sequencer": "^29.7.0",
-        "@jest/types": "^29.6.3",
-        "babel-jest": "^29.7.0",
-        "chalk": "^4.0.0",
-        "ci-info": "^3.2.0",
-        "deepmerge": "^4.2.2",
-        "glob": "^7.1.3",
-        "graceful-fs": "^4.2.9",
-        "jest-circus": "^29.7.0",
-        "jest-environment-node": "^29.7.0",
-        "jest-get-type": "^29.6.3",
-        "jest-regex-util": "^29.6.3",
-        "jest-resolve": "^29.7.0",
-        "jest-runner": "^29.7.0",
-        "jest-util": "^29.7.0",
-        "jest-validate": "^29.7.0",
-        "micromatch": "^4.0.4",
-        "parse-json": "^5.2.0",
-        "pretty-format": "^29.7.0",
-        "slash": "^3.0.0",
-        "strip-json-comments": "^3.1.1"
-      },
-      "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
-      },
-      "peerDependencies": {
-        "@types/node": "*",
-        "ts-node": ">=9.0.0"
-      },
-      "peerDependenciesMeta": {
-        "@types/node": {
-          "optional": true
-        },
-        "ts-node": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/jest-diff": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz",
-      "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==",
-      "dev": true,
-      "dependencies": {
-        "chalk": "^4.0.0",
-        "diff-sequences": "^29.6.3",
-        "jest-get-type": "^29.6.3",
-        "pretty-format": "^29.7.0"
-      },
-      "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
-      }
-    },
-    "node_modules/jest-docblock": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz",
-      "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==",
-      "dev": true,
-      "dependencies": {
-        "detect-newline": "^3.0.0"
-      },
-      "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
-      }
-    },
-    "node_modules/jest-each": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz",
-      "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==",
-      "dev": true,
-      "dependencies": {
-        "@jest/types": "^29.6.3",
-        "chalk": "^4.0.0",
-        "jest-get-type": "^29.6.3",
-        "jest-util": "^29.7.0",
-        "pretty-format": "^29.7.0"
-      },
-      "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
-      }
-    },
-    "node_modules/jest-environment-node": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz",
-      "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==",
-      "dev": true,
-      "dependencies": {
-        "@jest/environment": "^29.7.0",
-        "@jest/fake-timers": "^29.7.0",
-        "@jest/types": "^29.6.3",
-        "@types/node": "*",
-        "jest-mock": "^29.7.0",
-        "jest-util": "^29.7.0"
-      },
-      "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
-      }
-    },
-    "node_modules/jest-get-type": {
-      "version": "29.6.3",
-      "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz",
-      "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==",
-      "dev": true,
-      "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
-      }
-    },
-    "node_modules/jest-haste-map": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz",
-      "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==",
-      "dev": true,
-      "dependencies": {
-        "@jest/types": "^29.6.3",
-        "@types/graceful-fs": "^4.1.3",
-        "@types/node": "*",
-        "anymatch": "^3.0.3",
-        "fb-watchman": "^2.0.0",
-        "graceful-fs": "^4.2.9",
-        "jest-regex-util": "^29.6.3",
-        "jest-util": "^29.7.0",
-        "jest-worker": "^29.7.0",
-        "micromatch": "^4.0.4",
-        "walker": "^1.0.8"
-      },
-      "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
-      },
-      "optionalDependencies": {
-        "fsevents": "^2.3.2"
-      }
-    },
-    "node_modules/jest-leak-detector": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz",
-      "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==",
-      "dev": true,
-      "dependencies": {
-        "jest-get-type": "^29.6.3",
-        "pretty-format": "^29.7.0"
-      },
-      "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
-      }
-    },
-    "node_modules/jest-matcher-utils": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz",
-      "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==",
-      "dev": true,
-      "dependencies": {
-        "chalk": "^4.0.0",
-        "jest-diff": "^29.7.0",
-        "jest-get-type": "^29.6.3",
-        "pretty-format": "^29.7.0"
-      },
-      "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
-      }
-    },
-    "node_modules/jest-message-util": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz",
-      "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==",
-      "dev": true,
-      "dependencies": {
-        "@babel/code-frame": "^7.12.13",
-        "@jest/types": "^29.6.3",
-        "@types/stack-utils": "^2.0.0",
-        "chalk": "^4.0.0",
-        "graceful-fs": "^4.2.9",
-        "micromatch": "^4.0.4",
-        "pretty-format": "^29.7.0",
-        "slash": "^3.0.0",
-        "stack-utils": "^2.0.3"
-      },
-      "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
-      }
-    },
-    "node_modules/jest-mock": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz",
-      "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==",
-      "dev": true,
-      "dependencies": {
-        "@jest/types": "^29.6.3",
-        "@types/node": "*",
-        "jest-util": "^29.7.0"
-      },
-      "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
-      }
-    },
-    "node_modules/jest-pnp-resolver": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz",
-      "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==",
-      "dev": true,
-      "engines": {
-        "node": ">=6"
-      },
-      "peerDependencies": {
-        "jest-resolve": "*"
-      },
-      "peerDependenciesMeta": {
-        "jest-resolve": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/jest-regex-util": {
-      "version": "29.6.3",
-      "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz",
-      "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==",
-      "dev": true,
-      "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
-      }
-    },
-    "node_modules/jest-resolve": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz",
-      "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==",
-      "dev": true,
-      "dependencies": {
-        "chalk": "^4.0.0",
-        "graceful-fs": "^4.2.9",
-        "jest-haste-map": "^29.7.0",
-        "jest-pnp-resolver": "^1.2.2",
-        "jest-util": "^29.7.0",
-        "jest-validate": "^29.7.0",
-        "resolve": "^1.20.0",
-        "resolve.exports": "^2.0.0",
-        "slash": "^3.0.0"
-      },
-      "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
-      }
-    },
-    "node_modules/jest-resolve-dependencies": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz",
-      "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==",
-      "dev": true,
-      "dependencies": {
-        "jest-regex-util": "^29.6.3",
-        "jest-snapshot": "^29.7.0"
-      },
-      "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
-      }
-    },
-    "node_modules/jest-runner": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz",
-      "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==",
-      "dev": true,
-      "dependencies": {
-        "@jest/console": "^29.7.0",
-        "@jest/environment": "^29.7.0",
-        "@jest/test-result": "^29.7.0",
-        "@jest/transform": "^29.7.0",
-        "@jest/types": "^29.6.3",
-        "@types/node": "*",
-        "chalk": "^4.0.0",
-        "emittery": "^0.13.1",
-        "graceful-fs": "^4.2.9",
-        "jest-docblock": "^29.7.0",
-        "jest-environment-node": "^29.7.0",
-        "jest-haste-map": "^29.7.0",
-        "jest-leak-detector": "^29.7.0",
-        "jest-message-util": "^29.7.0",
-        "jest-resolve": "^29.7.0",
-        "jest-runtime": "^29.7.0",
-        "jest-util": "^29.7.0",
-        "jest-watcher": "^29.7.0",
-        "jest-worker": "^29.7.0",
-        "p-limit": "^3.1.0",
-        "source-map-support": "0.5.13"
-      },
-      "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
-      }
-    },
-    "node_modules/jest-runtime": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz",
-      "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==",
-      "dev": true,
-      "dependencies": {
-        "@jest/environment": "^29.7.0",
-        "@jest/fake-timers": "^29.7.0",
-        "@jest/globals": "^29.7.0",
-        "@jest/source-map": "^29.6.3",
-        "@jest/test-result": "^29.7.0",
-        "@jest/transform": "^29.7.0",
-        "@jest/types": "^29.6.3",
-        "@types/node": "*",
-        "chalk": "^4.0.0",
-        "cjs-module-lexer": "^1.0.0",
-        "collect-v8-coverage": "^1.0.0",
-        "glob": "^7.1.3",
-        "graceful-fs": "^4.2.9",
-        "jest-haste-map": "^29.7.0",
-        "jest-message-util": "^29.7.0",
-        "jest-mock": "^29.7.0",
-        "jest-regex-util": "^29.6.3",
-        "jest-resolve": "^29.7.0",
-        "jest-snapshot": "^29.7.0",
-        "jest-util": "^29.7.0",
-        "slash": "^3.0.0",
-        "strip-bom": "^4.0.0"
-      },
-      "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
-      }
-    },
-    "node_modules/jest-runtime/node_modules/strip-bom": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
-      "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/jest-snapshot": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz",
-      "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==",
-      "dev": true,
-      "dependencies": {
-        "@babel/core": "^7.11.6",
-        "@babel/generator": "^7.7.2",
-        "@babel/plugin-syntax-jsx": "^7.7.2",
-        "@babel/plugin-syntax-typescript": "^7.7.2",
-        "@babel/types": "^7.3.3",
-        "@jest/expect-utils": "^29.7.0",
-        "@jest/transform": "^29.7.0",
-        "@jest/types": "^29.6.3",
-        "babel-preset-current-node-syntax": "^1.0.0",
-        "chalk": "^4.0.0",
-        "expect": "^29.7.0",
-        "graceful-fs": "^4.2.9",
-        "jest-diff": "^29.7.0",
-        "jest-get-type": "^29.6.3",
-        "jest-matcher-utils": "^29.7.0",
-        "jest-message-util": "^29.7.0",
-        "jest-util": "^29.7.0",
-        "natural-compare": "^1.4.0",
-        "pretty-format": "^29.7.0",
-        "semver": "^7.5.3"
-      },
-      "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
-      }
-    },
-    "node_modules/jest-util": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz",
-      "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==",
-      "dev": true,
-      "dependencies": {
-        "@jest/types": "^29.6.3",
-        "@types/node": "*",
-        "chalk": "^4.0.0",
-        "ci-info": "^3.2.0",
-        "graceful-fs": "^4.2.9",
-        "picomatch": "^2.2.3"
-      },
-      "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
-      }
-    },
-    "node_modules/jest-validate": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz",
-      "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==",
-      "dev": true,
-      "dependencies": {
-        "@jest/types": "^29.6.3",
-        "camelcase": "^6.2.0",
-        "chalk": "^4.0.0",
-        "jest-get-type": "^29.6.3",
-        "leven": "^3.1.0",
-        "pretty-format": "^29.7.0"
-      },
-      "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
-      }
-    },
-    "node_modules/jest-validate/node_modules/camelcase": {
-      "version": "6.3.0",
-      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
-      "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/jest-watcher": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz",
-      "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==",
-      "dev": true,
-      "dependencies": {
-        "@jest/test-result": "^29.7.0",
-        "@jest/types": "^29.6.3",
-        "@types/node": "*",
-        "ansi-escapes": "^4.2.1",
-        "chalk": "^4.0.0",
-        "emittery": "^0.13.1",
-        "jest-util": "^29.7.0",
-        "string-length": "^4.0.1"
-      },
-      "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
-      }
-    },
-    "node_modules/jest-worker": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz",
-      "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==",
-      "dev": true,
-      "dependencies": {
-        "@types/node": "*",
-        "jest-util": "^29.7.0",
-        "merge-stream": "^2.0.0",
-        "supports-color": "^8.0.0"
-      },
-      "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
-      }
-    },
-    "node_modules/jest-worker/node_modules/supports-color": {
-      "version": "8.1.1",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
-      "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/supports-color?sponsor=1"
-      }
-    },
-    "node_modules/jquery": {
-      "version": "3.7.0",
-      "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.0.tgz",
-      "integrity": "sha512-umpJ0/k8X0MvD1ds0P9SfowREz2LenHsQaxSohMZ5OMNEU2r0tf8pdeEFTHMFxWVxKNyU9rTtK3CWzUCTKJUeQ=="
-    },
-    "node_modules/js-tokens": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
-      "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
-      "dev": true
-    },
-    "node_modules/js-yaml": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
-      "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
-      "dev": true,
-      "dependencies": {
-        "argparse": "^2.0.1"
-      },
-      "bin": {
-        "js-yaml": "bin/js-yaml.js"
-      }
-    },
-    "node_modules/jsesc": {
-      "version": "2.5.2",
-      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
-      "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
-      "dev": true,
-      "bin": {
-        "jsesc": "bin/jsesc"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/json-parse-even-better-errors": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
-      "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
-      "dev": true
-    },
-    "node_modules/json-schema-traverse": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
-      "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
-      "dev": true
-    },
-    "node_modules/json-stable-stringify-without-jsonify": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
-      "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
-      "dev": true
-    },
-    "node_modules/json5": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
-      "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
-      "dev": true,
-      "peer": true,
-      "dependencies": {
-        "minimist": "^1.2.0"
-      },
-      "bin": {
-        "json5": "lib/cli.js"
-      }
-    },
-    "node_modules/jsonfile": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz",
-      "integrity": "sha512-oBko6ZHlubVB5mRFkur5vgYR1UyqX+S6Y/oCfLhqNdcc2fYFlDpIoNc7AfKS1KOGcnNAkvsr0grLck9ANM815w==",
-      "dev": true,
-      "optionalDependencies": {
-        "graceful-fs": "^4.1.6"
-      }
-    },
-    "node_modules/katex": {
-      "version": "0.16.10",
-      "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.10.tgz",
-      "integrity": "sha512-ZiqaC04tp2O5utMsl2TEZTXxa6WSC4yo0fv5ML++D3QZv/vx2Mct0mTlRx3O+uUkjfuAgOkzsCmq5MiUEsDDdA==",
-      "funding": [
-        "https://opencollective.com/katex",
-        "https://github.com/sponsors/katex"
-      ],
-      "dependencies": {
-        "commander": "^8.3.0"
-      },
-      "bin": {
-        "katex": "cli.js"
-      }
-    },
-    "node_modules/katex/node_modules/commander": {
-      "version": "8.3.0",
-      "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
-      "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==",
-      "engines": {
-        "node": ">= 12"
-      }
-    },
-    "node_modules/khroma": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/khroma/-/khroma-2.0.0.tgz",
-      "integrity": "sha512-2J8rDNlQWbtiNYThZRvmMv5yt44ZakX+Tz5ZIp/mN1pt4snn+m030Va5Z4v8xA0cQFDXBwO/8i42xL4QPsVk3g=="
-    },
-    "node_modules/kind-of": {
-      "version": "6.0.3",
-      "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
-      "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/kleur": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
-      "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
-      "dev": true,
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/known-css-properties": {
-      "version": "0.28.0",
-      "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.28.0.tgz",
-      "integrity": "sha512-9pSL5XB4J+ifHP0e0jmmC98OGC1nL8/JjS+fi6mnTlIf//yt/MfVLtKg7S6nCtj/8KTcWX7nRlY0XywoYY1ISQ==",
-      "dev": true
-    },
-    "node_modules/layout-base": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-1.0.2.tgz",
-      "integrity": "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg=="
-    },
-    "node_modules/leven": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
-      "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
-      "dev": true,
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/levn": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
-      "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
-      "dev": true,
-      "dependencies": {
-        "prelude-ls": "^1.2.1",
-        "type-check": "~0.4.0"
-      },
-      "engines": {
-        "node": ">= 0.8.0"
-      }
-    },
-    "node_modules/limiter": {
-      "version": "1.1.5",
-      "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz",
-      "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==",
-      "dev": true
-    },
-    "node_modules/lines-and-columns": {
-      "version": "1.2.4",
-      "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
-      "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
-      "dev": true
-    },
-    "node_modules/lit-html": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.2.0.tgz",
-      "integrity": "sha512-pwT/HwoxqI9FggTrYVarkBKFN9MlTUpLrDHubTmW4SrkL3kkqW5gxwbxMMUnbbRHBC0WTZnYHcjDSCM559VyfA==",
-      "dependencies": {
-        "@types/trusted-types": "^2.0.2"
-      }
-    },
-    "node_modules/locate-path": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
-      "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
-      "dev": true,
-      "dependencies": {
-        "p-locate": "^5.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/lodash": {
-      "version": "4.17.21",
-      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
-      "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
-    },
-    "node_modules/lodash-es": {
-      "version": "4.17.21",
-      "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
-      "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw=="
-    },
-    "node_modules/lodash.isfinite": {
-      "version": "3.3.2",
-      "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz",
-      "integrity": "sha512-7FGG40uhC8Mm633uKW1r58aElFlBlxCrg9JfSi3P6aYiWmfiWF0PgMd86ZUsxE5GwWPdHoS2+48bwTh2VPkIQA==",
-      "dev": true
-    },
-    "node_modules/lodash.memoize": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
-      "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==",
-      "dev": true
-    },
-    "node_modules/lodash.merge": {
-      "version": "4.6.2",
-      "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
-      "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
-      "dev": true
-    },
-    "node_modules/lodash.truncate": {
-      "version": "4.4.2",
-      "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz",
-      "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==",
-      "dev": true
-    },
-    "node_modules/lru-cache": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
-      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
-      "dev": true,
-      "dependencies": {
-        "yallist": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/lunr": {
-      "version": "2.3.9",
-      "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz",
-      "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow=="
-    },
-    "node_modules/lunr-languages": {
-      "version": "1.14.0",
-      "resolved": "https://registry.npmjs.org/lunr-languages/-/lunr-languages-1.14.0.tgz",
-      "integrity": "sha512-hWUAb2KqM3L7J5bcrngszzISY4BxrXn/Xhbb9TTCJYEGqlR1nG67/M14sp09+PTIRklobrn57IAxcdcO/ZFyNA=="
-    },
-    "node_modules/make-dir": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz",
-      "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==",
-      "dev": true,
-      "dependencies": {
-        "semver": "^7.5.3"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/make-error": {
-      "version": "1.3.6",
-      "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
-      "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
-      "dev": true
-    },
-    "node_modules/makeerror": {
-      "version": "1.0.12",
-      "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz",
-      "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==",
-      "dev": true,
-      "dependencies": {
-        "tmpl": "1.0.5"
-      }
-    },
-    "node_modules/map-obj": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz",
-      "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/mathjax": {
-      "version": "3.2.2",
-      "resolved": "https://registry.npmjs.org/mathjax/-/mathjax-3.2.2.tgz",
-      "integrity": "sha512-Bt+SSVU8eBG27zChVewOicYs7Xsdt40qm4+UpHyX7k0/O9NliPc+x77k1/FEsPsjKPZGJvtRZM1vO+geW0OhGw=="
-    },
-    "node_modules/mathml-tag-names": {
-      "version": "2.1.3",
-      "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz",
-      "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==",
-      "dev": true,
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/wooorm"
-      }
-    },
-    "node_modules/mdast-util-from-markdown": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.0.tgz",
-      "integrity": "sha512-HN3W1gRIuN/ZW295c7zi7g9lVBllMgZE40RxCX37wrTPWXCWtpvOZdfnuK+1WNpvZje6XuJeI3Wnb4TJEUem+g==",
-      "dependencies": {
-        "@types/mdast": "^3.0.0",
-        "@types/unist": "^2.0.0",
-        "decode-named-character-reference": "^1.0.0",
-        "mdast-util-to-string": "^3.1.0",
-        "micromark": "^3.0.0",
-        "micromark-util-decode-numeric-character-reference": "^1.0.0",
-        "micromark-util-decode-string": "^1.0.0",
-        "micromark-util-normalize-identifier": "^1.0.0",
-        "micromark-util-symbol": "^1.0.0",
-        "micromark-util-types": "^1.0.0",
-        "unist-util-stringify-position": "^3.0.0",
-        "uvu": "^0.5.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      }
-    },
-    "node_modules/mdast-util-to-string": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz",
-      "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==",
-      "dependencies": {
-        "@types/mdast": "^3.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      }
-    },
-    "node_modules/mdn-data": {
-      "version": "2.0.30",
-      "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
-      "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==",
-      "dev": true
-    },
-    "node_modules/meow": {
-      "version": "10.1.5",
-      "resolved": "https://registry.npmjs.org/meow/-/meow-10.1.5.tgz",
-      "integrity": "sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==",
-      "dev": true,
-      "dependencies": {
-        "@types/minimist": "^1.2.2",
-        "camelcase-keys": "^7.0.0",
-        "decamelize": "^5.0.0",
-        "decamelize-keys": "^1.1.0",
-        "hard-rejection": "^2.1.0",
-        "minimist-options": "4.1.0",
-        "normalize-package-data": "^3.0.2",
-        "read-pkg-up": "^8.0.0",
-        "redent": "^4.0.0",
-        "trim-newlines": "^4.0.2",
-        "type-fest": "^1.2.2",
-        "yargs-parser": "^20.2.9"
-      },
-      "engines": {
-        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/meow/node_modules/type-fest": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
-      "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/meow/node_modules/yargs-parser": {
-      "version": "20.2.9",
-      "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
-      "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/merge-stream": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
-      "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
-      "dev": true
-    },
-    "node_modules/merge2": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
-      "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
-      "dev": true,
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/mermaid": {
-      "version": "10.9.1",
-      "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-10.9.1.tgz",
-      "integrity": "sha512-Mx45Obds5W1UkW1nv/7dHRsbfMM1aOKA2+Pxs/IGHNonygDHwmng8xTHyS9z4KWVi0rbko8gjiBmuwwXQ7tiNA==",
-      "dependencies": {
-        "@braintree/sanitize-url": "^6.0.1",
-        "@types/d3-scale": "^4.0.3",
-        "@types/d3-scale-chromatic": "^3.0.0",
-        "cytoscape": "^3.28.1",
-        "cytoscape-cose-bilkent": "^4.1.0",
-        "d3": "^7.4.0",
-        "d3-sankey": "^0.12.3",
-        "dagre-d3-es": "7.0.10",
-        "dayjs": "^1.11.7",
-        "dompurify": "^3.0.5",
-        "elkjs": "^0.9.0",
-        "katex": "^0.16.9",
-        "khroma": "^2.0.0",
-        "lodash-es": "^4.17.21",
-        "mdast-util-from-markdown": "^1.3.0",
-        "non-layered-tidy-tree-layout": "^2.0.2",
-        "stylis": "^4.1.3",
-        "ts-dedent": "^2.2.0",
-        "uuid": "^9.0.0",
-        "web-worker": "^1.2.0"
-      }
-    },
-    "node_modules/micromark": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.1.0.tgz",
-      "integrity": "sha512-6Mj0yHLdUZjHnOPgr5xfWIMqMWS12zDN6iws9SLuSz76W8jTtAv24MN4/CL7gJrl5vtxGInkkqDv/JIoRsQOvA==",
-      "funding": [
-        {
-          "type": "GitHub Sponsors",
-          "url": "https://github.com/sponsors/unifiedjs"
-        },
-        {
-          "type": "OpenCollective",
-          "url": "https://opencollective.com/unified"
-        }
-      ],
-      "dependencies": {
-        "@types/debug": "^4.0.0",
-        "debug": "^4.0.0",
-        "decode-named-character-reference": "^1.0.0",
-        "micromark-core-commonmark": "^1.0.1",
-        "micromark-factory-space": "^1.0.0",
-        "micromark-util-character": "^1.0.0",
-        "micromark-util-chunked": "^1.0.0",
-        "micromark-util-combine-extensions": "^1.0.0",
-        "micromark-util-decode-numeric-character-reference": "^1.0.0",
-        "micromark-util-encode": "^1.0.0",
-        "micromark-util-normalize-identifier": "^1.0.0",
-        "micromark-util-resolve-all": "^1.0.0",
-        "micromark-util-sanitize-uri": "^1.0.0",
-        "micromark-util-subtokenize": "^1.0.0",
-        "micromark-util-symbol": "^1.0.0",
-        "micromark-util-types": "^1.0.1",
-        "uvu": "^0.5.0"
-      }
-    },
-    "node_modules/micromark-core-commonmark": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.0.6.tgz",
-      "integrity": "sha512-K+PkJTxqjFfSNkfAhp4GB+cZPfQd6dxtTXnf+RjZOV7T4EEXnvgzOcnp+eSTmpGk9d1S9sL6/lqrgSNn/s0HZA==",
-      "funding": [
-        {
-          "type": "GitHub Sponsors",
-          "url": "https://github.com/sponsors/unifiedjs"
-        },
-        {
-          "type": "OpenCollective",
-          "url": "https://opencollective.com/unified"
-        }
-      ],
-      "dependencies": {
-        "decode-named-character-reference": "^1.0.0",
-        "micromark-factory-destination": "^1.0.0",
-        "micromark-factory-label": "^1.0.0",
-        "micromark-factory-space": "^1.0.0",
-        "micromark-factory-title": "^1.0.0",
-        "micromark-factory-whitespace": "^1.0.0",
-        "micromark-util-character": "^1.0.0",
-        "micromark-util-chunked": "^1.0.0",
-        "micromark-util-classify-character": "^1.0.0",
-        "micromark-util-html-tag-name": "^1.0.0",
-        "micromark-util-normalize-identifier": "^1.0.0",
-        "micromark-util-resolve-all": "^1.0.0",
-        "micromark-util-subtokenize": "^1.0.0",
-        "micromark-util-symbol": "^1.0.0",
-        "micromark-util-types": "^1.0.1",
-        "uvu": "^0.5.0"
-      }
-    },
-    "node_modules/micromark-factory-destination": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.0.0.tgz",
-      "integrity": "sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw==",
-      "funding": [
-        {
-          "type": "GitHub Sponsors",
-          "url": "https://github.com/sponsors/unifiedjs"
-        },
-        {
-          "type": "OpenCollective",
-          "url": "https://opencollective.com/unified"
-        }
-      ],
-      "dependencies": {
-        "micromark-util-character": "^1.0.0",
-        "micromark-util-symbol": "^1.0.0",
-        "micromark-util-types": "^1.0.0"
-      }
-    },
-    "node_modules/micromark-factory-label": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.0.2.tgz",
-      "integrity": "sha512-CTIwxlOnU7dEshXDQ+dsr2n+yxpP0+fn271pu0bwDIS8uqfFcumXpj5mLn3hSC8iw2MUr6Gx8EcKng1dD7i6hg==",
-      "funding": [
-        {
-          "type": "GitHub Sponsors",
-          "url": "https://github.com/sponsors/unifiedjs"
-        },
-        {
-          "type": "OpenCollective",
-          "url": "https://opencollective.com/unified"
-        }
-      ],
-      "dependencies": {
-        "micromark-util-character": "^1.0.0",
-        "micromark-util-symbol": "^1.0.0",
-        "micromark-util-types": "^1.0.0",
-        "uvu": "^0.5.0"
-      }
-    },
-    "node_modules/micromark-factory-space": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.0.0.tgz",
-      "integrity": "sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew==",
-      "funding": [
-        {
-          "type": "GitHub Sponsors",
-          "url": "https://github.com/sponsors/unifiedjs"
-        },
-        {
-          "type": "OpenCollective",
-          "url": "https://opencollective.com/unified"
-        }
-      ],
-      "dependencies": {
-        "micromark-util-character": "^1.0.0",
-        "micromark-util-types": "^1.0.0"
-      }
-    },
-    "node_modules/micromark-factory-title": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.0.2.tgz",
-      "integrity": "sha512-zily+Nr4yFqgMGRKLpTVsNl5L4PMu485fGFDOQJQBl2NFpjGte1e86zC0da93wf97jrc4+2G2GQudFMHn3IX+A==",
-      "funding": [
-        {
-          "type": "GitHub Sponsors",
-          "url": "https://github.com/sponsors/unifiedjs"
-        },
-        {
-          "type": "OpenCollective",
-          "url": "https://opencollective.com/unified"
-        }
-      ],
-      "dependencies": {
-        "micromark-factory-space": "^1.0.0",
-        "micromark-util-character": "^1.0.0",
-        "micromark-util-symbol": "^1.0.0",
-        "micromark-util-types": "^1.0.0",
-        "uvu": "^0.5.0"
-      }
-    },
-    "node_modules/micromark-factory-whitespace": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.0.0.tgz",
-      "integrity": "sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A==",
-      "funding": [
-        {
-          "type": "GitHub Sponsors",
-          "url": "https://github.com/sponsors/unifiedjs"
-        },
-        {
-          "type": "OpenCollective",
-          "url": "https://opencollective.com/unified"
-        }
-      ],
-      "dependencies": {
-        "micromark-factory-space": "^1.0.0",
-        "micromark-util-character": "^1.0.0",
-        "micromark-util-symbol": "^1.0.0",
-        "micromark-util-types": "^1.0.0"
-      }
-    },
-    "node_modules/micromark-util-character": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.1.0.tgz",
-      "integrity": "sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg==",
-      "funding": [
-        {
-          "type": "GitHub Sponsors",
-          "url": "https://github.com/sponsors/unifiedjs"
-        },
-        {
-          "type": "OpenCollective",
-          "url": "https://opencollective.com/unified"
-        }
-      ],
-      "dependencies": {
-        "micromark-util-symbol": "^1.0.0",
-        "micromark-util-types": "^1.0.0"
-      }
-    },
-    "node_modules/micromark-util-chunked": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.0.0.tgz",
-      "integrity": "sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g==",
-      "funding": [
-        {
-          "type": "GitHub Sponsors",
-          "url": "https://github.com/sponsors/unifiedjs"
-        },
-        {
-          "type": "OpenCollective",
-          "url": "https://opencollective.com/unified"
-        }
-      ],
-      "dependencies": {
-        "micromark-util-symbol": "^1.0.0"
-      }
-    },
-    "node_modules/micromark-util-classify-character": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.0.0.tgz",
-      "integrity": "sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA==",
-      "funding": [
-        {
-          "type": "GitHub Sponsors",
-          "url": "https://github.com/sponsors/unifiedjs"
-        },
-        {
-          "type": "OpenCollective",
-          "url": "https://opencollective.com/unified"
-        }
-      ],
-      "dependencies": {
-        "micromark-util-character": "^1.0.0",
-        "micromark-util-symbol": "^1.0.0",
-        "micromark-util-types": "^1.0.0"
-      }
-    },
-    "node_modules/micromark-util-combine-extensions": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.0.0.tgz",
-      "integrity": "sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA==",
-      "funding": [
-        {
-          "type": "GitHub Sponsors",
-          "url": "https://github.com/sponsors/unifiedjs"
-        },
-        {
-          "type": "OpenCollective",
-          "url": "https://opencollective.com/unified"
-        }
-      ],
-      "dependencies": {
-        "micromark-util-chunked": "^1.0.0",
-        "micromark-util-types": "^1.0.0"
-      }
-    },
-    "node_modules/micromark-util-decode-numeric-character-reference": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.0.0.tgz",
-      "integrity": "sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w==",
-      "funding": [
-        {
-          "type": "GitHub Sponsors",
-          "url": "https://github.com/sponsors/unifiedjs"
-        },
-        {
-          "type": "OpenCollective",
-          "url": "https://opencollective.com/unified"
-        }
-      ],
-      "dependencies": {
-        "micromark-util-symbol": "^1.0.0"
-      }
-    },
-    "node_modules/micromark-util-decode-string": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.0.2.tgz",
-      "integrity": "sha512-DLT5Ho02qr6QWVNYbRZ3RYOSSWWFuH3tJexd3dgN1odEuPNxCngTCXJum7+ViRAd9BbdxCvMToPOD/IvVhzG6Q==",
-      "funding": [
-        {
-          "type": "GitHub Sponsors",
-          "url": "https://github.com/sponsors/unifiedjs"
-        },
-        {
-          "type": "OpenCollective",
-          "url": "https://opencollective.com/unified"
-        }
-      ],
-      "dependencies": {
-        "decode-named-character-reference": "^1.0.0",
-        "micromark-util-character": "^1.0.0",
-        "micromark-util-decode-numeric-character-reference": "^1.0.0",
-        "micromark-util-symbol": "^1.0.0"
-      }
-    },
-    "node_modules/micromark-util-encode": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.0.1.tgz",
-      "integrity": "sha512-U2s5YdnAYexjKDel31SVMPbfi+eF8y1U4pfiRW/Y8EFVCy/vgxk/2wWTxzcqE71LHtCuCzlBDRU2a5CQ5j+mQA==",
-      "funding": [
-        {
-          "type": "GitHub Sponsors",
-          "url": "https://github.com/sponsors/unifiedjs"
-        },
-        {
-          "type": "OpenCollective",
-          "url": "https://opencollective.com/unified"
-        }
-      ]
-    },
-    "node_modules/micromark-util-html-tag-name": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.1.0.tgz",
-      "integrity": "sha512-BKlClMmYROy9UiV03SwNmckkjn8QHVaWkqoAqzivabvdGcwNGMMMH/5szAnywmsTBUzDsU57/mFi0sp4BQO6dA==",
-      "funding": [
-        {
-          "type": "GitHub Sponsors",
-          "url": "https://github.com/sponsors/unifiedjs"
-        },
-        {
-          "type": "OpenCollective",
-          "url": "https://opencollective.com/unified"
-        }
-      ]
-    },
-    "node_modules/micromark-util-normalize-identifier": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.0.0.tgz",
-      "integrity": "sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg==",
-      "funding": [
-        {
-          "type": "GitHub Sponsors",
-          "url": "https://github.com/sponsors/unifiedjs"
-        },
-        {
-          "type": "OpenCollective",
-          "url": "https://opencollective.com/unified"
-        }
-      ],
-      "dependencies": {
-        "micromark-util-symbol": "^1.0.0"
-      }
-    },
-    "node_modules/micromark-util-resolve-all": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.0.0.tgz",
-      "integrity": "sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw==",
-      "funding": [
-        {
-          "type": "GitHub Sponsors",
-          "url": "https://github.com/sponsors/unifiedjs"
-        },
-        {
-          "type": "OpenCollective",
-          "url": "https://opencollective.com/unified"
-        }
-      ],
-      "dependencies": {
-        "micromark-util-types": "^1.0.0"
-      }
-    },
-    "node_modules/micromark-util-sanitize-uri": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.1.0.tgz",
-      "integrity": "sha512-RoxtuSCX6sUNtxhbmsEFQfWzs8VN7cTctmBPvYivo98xb/kDEoTCtJQX5wyzIYEmk/lvNFTat4hL8oW0KndFpg==",
-      "funding": [
-        {
-          "type": "GitHub Sponsors",
-          "url": "https://github.com/sponsors/unifiedjs"
-        },
-        {
-          "type": "OpenCollective",
-          "url": "https://opencollective.com/unified"
-        }
-      ],
-      "dependencies": {
-        "micromark-util-character": "^1.0.0",
-        "micromark-util-encode": "^1.0.0",
-        "micromark-util-symbol": "^1.0.0"
-      }
-    },
-    "node_modules/micromark-util-subtokenize": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.0.2.tgz",
-      "integrity": "sha512-d90uqCnXp/cy4G881Ub4psE57Sf8YD0pim9QdjCRNjfas2M1u6Lbt+XZK9gnHL2XFhnozZiEdCa9CNfXSfQ6xA==",
-      "funding": [
-        {
-          "type": "GitHub Sponsors",
-          "url": "https://github.com/sponsors/unifiedjs"
-        },
-        {
-          "type": "OpenCollective",
-          "url": "https://opencollective.com/unified"
-        }
-      ],
-      "dependencies": {
-        "micromark-util-chunked": "^1.0.0",
-        "micromark-util-symbol": "^1.0.0",
-        "micromark-util-types": "^1.0.0",
-        "uvu": "^0.5.0"
-      }
-    },
-    "node_modules/micromark-util-symbol": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.0.1.tgz",
-      "integrity": "sha512-oKDEMK2u5qqAptasDAwWDXq0tG9AssVwAx3E9bBF3t/shRIGsWIRG+cGafs2p/SnDSOecnt6hZPCE2o6lHfFmQ==",
-      "funding": [
-        {
-          "type": "GitHub Sponsors",
-          "url": "https://github.com/sponsors/unifiedjs"
-        },
-        {
-          "type": "OpenCollective",
-          "url": "https://opencollective.com/unified"
-        }
-      ]
-    },
-    "node_modules/micromark-util-types": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.0.2.tgz",
-      "integrity": "sha512-DCfg/T8fcrhrRKTPjRrw/5LLvdGV7BHySf/1LOZx7TzWZdYRjogNtyNq885z3nNallwr3QUKARjqvHqX1/7t+w==",
-      "funding": [
-        {
-          "type": "GitHub Sponsors",
-          "url": "https://github.com/sponsors/unifiedjs"
-        },
-        {
-          "type": "OpenCollective",
-          "url": "https://opencollective.com/unified"
-        }
-      ]
-    },
-    "node_modules/micromark/node_modules/debug": {
-      "version": "4.3.4",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
-      "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
-      "dependencies": {
-        "ms": "2.1.2"
-      },
-      "engines": {
-        "node": ">=6.0"
-      },
-      "peerDependenciesMeta": {
-        "supports-color": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/micromark/node_modules/ms": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
-    },
-    "node_modules/micromatch": {
-      "version": "4.0.5",
-      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
-      "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
-      "dev": true,
-      "dependencies": {
-        "braces": "^3.0.2",
-        "picomatch": "^2.3.1"
-      },
-      "engines": {
-        "node": ">=8.6"
-      }
-    },
-    "node_modules/mime": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
-      "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==",
-      "dev": true,
-      "bin": {
-        "mime": "cli.js"
-      }
-    },
-    "node_modules/mime-db": {
-      "version": "1.52.0",
-      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
-      "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/mime-types": {
-      "version": "2.1.35",
-      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
-      "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
-      "dev": true,
-      "dependencies": {
-        "mime-db": "1.52.0"
-      },
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/mimic-fn": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
-      "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
-      "dev": true,
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/min-indent": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz",
-      "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/minimatch": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
-      "dev": true,
-      "dependencies": {
-        "brace-expansion": "^1.1.7"
-      },
-      "engines": {
-        "node": "*"
-      }
-    },
-    "node_modules/minimist": {
-      "version": "1.2.8",
-      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
-      "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
-      "dev": true,
-      "peer": true,
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/minimist-options": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz",
-      "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==",
-      "dev": true,
-      "dependencies": {
-        "arrify": "^1.0.1",
-        "is-plain-obj": "^1.1.0",
-        "kind-of": "^6.0.3"
-      },
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "node_modules/mitt": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.2.0.tgz",
-      "integrity": "sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw==",
-      "dev": true
-    },
-    "node_modules/mri": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz",
-      "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==",
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/ms": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
-      "dev": true
-    },
-    "node_modules/nanoid": {
-      "version": "3.3.6",
-      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
-      "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/ai"
-        }
-      ],
-      "bin": {
-        "nanoid": "bin/nanoid.cjs"
-      },
-      "engines": {
-        "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
-      }
-    },
-    "node_modules/natural-compare": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
-      "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
-      "dev": true
-    },
-    "node_modules/negotiator": {
-      "version": "0.6.3",
-      "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
-      "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/node-int64": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
-      "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==",
-      "dev": true
-    },
-    "node_modules/node-releases": {
-      "version": "2.0.10",
-      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz",
-      "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==",
-      "dev": true
-    },
-    "node_modules/non-layered-tidy-tree-layout": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz",
-      "integrity": "sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw=="
-    },
-    "node_modules/normalize-package-data": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz",
-      "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==",
-      "dev": true,
-      "dependencies": {
-        "hosted-git-info": "^4.0.1",
-        "is-core-module": "^2.5.0",
-        "semver": "^7.3.4",
-        "validate-npm-package-license": "^3.0.1"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/normalize-path": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
-      "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/npm-run-path": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
-      "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
-      "dev": true,
-      "dependencies": {
-        "path-key": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/object-assign": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
-      "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/object-inspect": {
-      "version": "1.12.3",
-      "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
-      "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==",
-      "dev": true,
-      "peer": true,
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/object-keys": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
-      "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
-      "dev": true,
-      "peer": true,
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/object.assign": {
-      "version": "4.1.4",
-      "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz",
-      "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==",
-      "dev": true,
-      "peer": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.4",
-        "has-symbols": "^1.0.3",
-        "object-keys": "^1.1.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/object.values": {
-      "version": "1.1.6",
-      "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz",
-      "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==",
-      "dev": true,
-      "peer": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.4",
-        "es-abstract": "^1.20.4"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/on-finished": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
-      "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==",
-      "dev": true,
-      "dependencies": {
-        "ee-first": "1.1.1"
-      },
-      "engines": {
-        "node": ">= 0.8"
-      }
-    },
-    "node_modules/once": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
-      "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
-      "dev": true,
-      "dependencies": {
-        "wrappy": "1"
-      }
-    },
-    "node_modules/onetime": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
-      "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
-      "dev": true,
-      "dependencies": {
-        "mimic-fn": "^2.1.0"
-      },
-      "engines": {
-        "node": ">=6"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/opn": {
-      "version": "5.3.0",
-      "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz",
-      "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==",
-      "dev": true,
-      "dependencies": {
-        "is-wsl": "^1.1.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/optionator": {
-      "version": "0.9.3",
-      "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz",
-      "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==",
-      "dev": true,
-      "dependencies": {
-        "@aashutoshrathi/word-wrap": "^1.2.3",
-        "deep-is": "^0.1.3",
-        "fast-levenshtein": "^2.0.6",
-        "levn": "^0.4.1",
-        "prelude-ls": "^1.2.1",
-        "type-check": "^0.4.0"
-      },
-      "engines": {
-        "node": ">= 0.8.0"
-      }
-    },
-    "node_modules/p-limit": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
-      "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
-      "dev": true,
-      "dependencies": {
-        "yocto-queue": "^0.1.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/p-locate": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
-      "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
-      "dev": true,
-      "dependencies": {
-        "p-limit": "^3.0.2"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/p-try": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
-      "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/parent-module": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
-      "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
-      "dev": true,
-      "dependencies": {
-        "callsites": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/parse-json": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
-      "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
-      "dev": true,
-      "dependencies": {
-        "@babel/code-frame": "^7.0.0",
-        "error-ex": "^1.3.1",
-        "json-parse-even-better-errors": "^2.3.0",
-        "lines-and-columns": "^1.1.6"
-      },
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/parseurl": {
-      "version": "1.3.3",
-      "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
-      "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.8"
-      }
-    },
-    "node_modules/path-exists": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
-      "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/path-is-absolute": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
-      "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/path-key": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
-      "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/path-parse": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
-      "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
-      "dev": true
-    },
-    "node_modules/path-type": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
-      "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/picocolors": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
-      "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
-      "dev": true
-    },
-    "node_modules/picomatch": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
-      "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
-      "dev": true,
-      "engines": {
-        "node": ">=8.6"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/jonschlinkert"
-      }
-    },
-    "node_modules/pirates": {
-      "version": "4.0.5",
-      "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz",
-      "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==",
-      "dev": true,
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "node_modules/pkg-dir": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
-      "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
-      "dev": true,
-      "dependencies": {
-        "find-up": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/pkg-dir/node_modules/find-up": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
-      "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
-      "dev": true,
-      "dependencies": {
-        "locate-path": "^5.0.0",
-        "path-exists": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/pkg-dir/node_modules/locate-path": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
-      "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
-      "dev": true,
-      "dependencies": {
-        "p-locate": "^4.1.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/pkg-dir/node_modules/p-limit": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
-      "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
-      "dev": true,
-      "dependencies": {
-        "p-try": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=6"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/pkg-dir/node_modules/p-locate": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
-      "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
-      "dev": true,
-      "dependencies": {
-        "p-limit": "^2.2.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/portscanner": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.2.0.tgz",
-      "integrity": "sha512-IFroCz/59Lqa2uBvzK3bKDbDDIEaAY8XJ1jFxcLWTqosrsc32//P4VuSB2vZXoHiHqOmx8B5L5hnKOxL/7FlPw==",
-      "dev": true,
-      "dependencies": {
-        "async": "^2.6.0",
-        "is-number-like": "^1.0.3"
-      },
-      "engines": {
-        "node": ">=0.4",
-        "npm": ">=1.0.0"
-      }
-    },
-    "node_modules/postcss": {
-      "version": "8.4.31",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
-      "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "opencollective",
-          "url": "https://opencollective.com/postcss/"
-        },
-        {
-          "type": "tidelift",
-          "url": "https://tidelift.com/funding/github/npm/postcss"
-        },
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/ai"
-        }
-      ],
-      "dependencies": {
-        "nanoid": "^3.3.6",
-        "picocolors": "^1.0.0",
-        "source-map-js": "^1.0.2"
-      },
-      "engines": {
-        "node": "^10 || ^12 || >=14"
-      }
-    },
-    "node_modules/postcss-media-query-parser": {
-      "version": "0.2.3",
-      "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz",
-      "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==",
-      "dev": true
-    },
-    "node_modules/postcss-resolve-nested-selector": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz",
-      "integrity": "sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==",
-      "dev": true
-    },
-    "node_modules/postcss-safe-parser": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz",
-      "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=12.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/postcss/"
-      },
-      "peerDependencies": {
-        "postcss": "^8.3.3"
-      }
-    },
-    "node_modules/postcss-scss": {
-      "version": "4.0.9",
-      "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.9.tgz",
-      "integrity": "sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "opencollective",
-          "url": "https://opencollective.com/postcss/"
-        },
-        {
-          "type": "tidelift",
-          "url": "https://tidelift.com/funding/github/npm/postcss-scss"
-        },
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/ai"
-        }
-      ],
-      "engines": {
-        "node": ">=12.0"
-      },
-      "peerDependencies": {
-        "postcss": "^8.4.29"
-      }
-    },
-    "node_modules/postcss-selector-parser": {
-      "version": "6.0.13",
-      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz",
-      "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==",
-      "dev": true,
-      "dependencies": {
-        "cssesc": "^3.0.0",
-        "util-deprecate": "^1.0.2"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/postcss-value-parser": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
-      "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
-      "dev": true
-    },
-    "node_modules/prelude-ls": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
-      "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.8.0"
-      }
-    },
-    "node_modules/pretty-format": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
-      "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
-      "dev": true,
-      "dependencies": {
-        "@jest/schemas": "^29.6.3",
-        "ansi-styles": "^5.0.0",
-        "react-is": "^18.0.0"
-      },
-      "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
-      }
-    },
-    "node_modules/pretty-format/node_modules/ansi-styles": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
-      "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-      }
-    },
-    "node_modules/prompts": {
-      "version": "2.4.2",
-      "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
-      "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==",
-      "dev": true,
-      "dependencies": {
-        "kleur": "^3.0.3",
-        "sisteransi": "^1.0.5"
-      },
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "node_modules/punycode": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
-      "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
-      "dev": true,
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/pure-rand": {
-      "version": "6.0.3",
-      "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.3.tgz",
-      "integrity": "sha512-KddyFewCsO0j3+np81IQ+SweXLDnDQTs5s67BOnrYmYe/yNmUhttQyGsYzy8yUnoljGAQ9sl38YB4vH8ur7Y+w==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "individual",
-          "url": "https://github.com/sponsors/dubzzz"
-        },
-        {
-          "type": "opencollective",
-          "url": "https://opencollective.com/fast-check"
-        }
-      ]
-    },
-    "node_modules/queue-microtask": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
-      "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/feross"
-        },
-        {
-          "type": "patreon",
-          "url": "https://www.patreon.com/feross"
-        },
-        {
-          "type": "consulting",
-          "url": "https://feross.org/support"
-        }
-      ]
-    },
-    "node_modules/quick-lru": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
-      "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/range-parser": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
-      "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/raw-body": {
-      "version": "2.5.1",
-      "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz",
-      "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==",
-      "dev": true,
-      "dependencies": {
-        "bytes": "3.1.2",
-        "http-errors": "2.0.0",
-        "iconv-lite": "0.4.24",
-        "unpipe": "1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.8"
-      }
-    },
-    "node_modules/react-is": {
-      "version": "18.2.0",
-      "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
-      "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==",
-      "dev": true
-    },
-    "node_modules/read-pkg": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz",
-      "integrity": "sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==",
-      "dev": true,
-      "dependencies": {
-        "@types/normalize-package-data": "^2.4.0",
-        "normalize-package-data": "^3.0.2",
-        "parse-json": "^5.2.0",
-        "type-fest": "^1.0.1"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/read-pkg-up": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-8.0.0.tgz",
-      "integrity": "sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==",
-      "dev": true,
-      "dependencies": {
-        "find-up": "^5.0.0",
-        "read-pkg": "^6.0.0",
-        "type-fest": "^1.0.1"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/read-pkg-up/node_modules/type-fest": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
-      "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/read-pkg/node_modules/type-fest": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
-      "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/readdirp": {
-      "version": "3.6.0",
-      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
-      "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
-      "dev": true,
-      "dependencies": {
-        "picomatch": "^2.2.1"
-      },
-      "engines": {
-        "node": ">=8.10.0"
-      }
-    },
-    "node_modules/redent": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/redent/-/redent-4.0.0.tgz",
-      "integrity": "sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==",
-      "dev": true,
-      "dependencies": {
-        "indent-string": "^5.0.0",
-        "strip-indent": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/regexp.prototype.flags": {
-      "version": "1.4.3",
-      "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz",
-      "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==",
-      "dev": true,
-      "peer": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.3",
-        "functions-have-names": "^1.2.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/regexpp": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
-      "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
-      "dev": true,
-      "peer": true,
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/mysticatea"
-      }
-    },
-    "node_modules/require-directory": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
-      "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/require-from-string": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
-      "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/requires-port": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
-      "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
-      "dev": true
-    },
-    "node_modules/resolve": {
-      "version": "1.22.8",
-      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
-      "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
-      "dev": true,
-      "dependencies": {
-        "is-core-module": "^2.13.0",
-        "path-parse": "^1.0.7",
-        "supports-preserve-symlinks-flag": "^1.0.0"
-      },
-      "bin": {
-        "resolve": "bin/resolve"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/resolve-cwd": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
-      "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
-      "dev": true,
-      "dependencies": {
-        "resolve-from": "^5.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/resolve-cwd/node_modules/resolve-from": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
-      "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/resolve-from": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
-      "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/resolve.exports": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz",
-      "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/resp-modifier": {
-      "version": "6.0.2",
-      "resolved": "https://registry.npmjs.org/resp-modifier/-/resp-modifier-6.0.2.tgz",
-      "integrity": "sha512-U1+0kWC/+4ncRFYqQWTx/3qkfE6a4B/h3XXgmXypfa0SPZ3t7cbbaFk297PjQS/yov24R18h6OZe6iZwj3NSLw==",
-      "dev": true,
-      "dependencies": {
-        "debug": "^2.2.0",
-        "minimatch": "^3.0.2"
-      },
-      "engines": {
-        "node": ">= 0.8.0"
-      }
-    },
-    "node_modules/reusify": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
-      "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
-      "dev": true,
-      "engines": {
-        "iojs": ">=1.0.0",
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/rimraf": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
-      "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
-      "dev": true,
-      "dependencies": {
-        "glob": "^7.1.3"
-      },
-      "bin": {
-        "rimraf": "bin.js"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "node_modules/robust-predicates": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.1.tgz",
-      "integrity": "sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g=="
-    },
-    "node_modules/run-parallel": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
-      "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/feross"
-        },
-        {
-          "type": "patreon",
-          "url": "https://www.patreon.com/feross"
-        },
-        {
-          "type": "consulting",
-          "url": "https://feross.org/support"
-        }
-      ],
-      "dependencies": {
-        "queue-microtask": "^1.2.2"
-      }
-    },
-    "node_modules/rw": {
-      "version": "1.3.3",
-      "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz",
-      "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ=="
-    },
-    "node_modules/rx": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz",
-      "integrity": "sha512-CiaiuN6gapkdl+cZUr67W6I8jquN4lkak3vtIsIWCl4XIPP8ffsoyN6/+PuGXnQy8Cu8W2y9Xxh31Rq4M6wUug==",
-      "dev": true
-    },
-    "node_modules/rxjs": {
-      "version": "7.8.1",
-      "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
-      "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==",
-      "dev": true,
-      "peer": true,
-      "dependencies": {
-        "tslib": "^2.1.0"
-      }
-    },
-    "node_modules/sade": {
-      "version": "1.8.1",
-      "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz",
-      "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==",
-      "dependencies": {
-        "mri": "^1.1.0"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/safe-identifier": {
-      "version": "0.4.2",
-      "resolved": "https://registry.npmjs.org/safe-identifier/-/safe-identifier-0.4.2.tgz",
-      "integrity": "sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w==",
-      "dev": true
-    },
-    "node_modules/safe-regex-test": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz",
-      "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==",
-      "dev": true,
-      "peer": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "get-intrinsic": "^1.1.3",
-        "is-regex": "^1.1.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/safer-buffer": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
-      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
-    },
-    "node_modules/sass": {
-      "version": "1.71.1",
-      "resolved": "https://registry.npmjs.org/sass/-/sass-1.71.1.tgz",
-      "integrity": "sha512-wovtnV2PxzteLlfNzbgm1tFXPLoZILYAMJtvoXXkD7/+1uP41eKkIt1ypWq5/q2uT94qHjXehEYfmjKOvjL9sg==",
-      "dev": true,
-      "dependencies": {
-        "chokidar": ">=3.0.0 <4.0.0",
-        "immutable": "^4.0.0",
-        "source-map-js": ">=0.6.2 <2.0.0"
-      },
-      "bin": {
-        "sass": "sass.js"
-      },
-      "engines": {
-        "node": ">=14.0.0"
-      }
-    },
-    "node_modules/sass-embedded": {
-      "version": "1.71.1",
-      "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.71.1.tgz",
-      "integrity": "sha512-nOmqErO1zd1wjvTbDscLZZ3fv5JPeQfaKuo0UCjYm7qPbpQcycp0l3nFZHxovjLjCetJ9IrLOADdznFYKV0f1A==",
-      "dev": true,
-      "peer": true,
-      "dependencies": {
-        "@bufbuild/protobuf": "^1.0.0",
-        "buffer-builder": "^0.2.0",
-        "immutable": "^4.0.0",
-        "rxjs": "^7.4.0",
-        "supports-color": "^8.1.1",
-        "varint": "^6.0.0"
-      },
-      "engines": {
-        "node": ">=16.0.0"
-      },
-      "optionalDependencies": {
-        "sass-embedded-android-arm": "1.71.1",
-        "sass-embedded-android-arm64": "1.71.1",
-        "sass-embedded-android-ia32": "1.71.1",
-        "sass-embedded-android-x64": "1.71.1",
-        "sass-embedded-darwin-arm64": "1.71.1",
-        "sass-embedded-darwin-x64": "1.71.1",
-        "sass-embedded-linux-arm": "1.71.1",
-        "sass-embedded-linux-arm64": "1.71.1",
-        "sass-embedded-linux-ia32": "1.71.1",
-        "sass-embedded-linux-musl-arm": "1.71.1",
-        "sass-embedded-linux-musl-arm64": "1.71.1",
-        "sass-embedded-linux-musl-ia32": "1.71.1",
-        "sass-embedded-linux-musl-x64": "1.71.1",
-        "sass-embedded-linux-x64": "1.71.1",
-        "sass-embedded-win32-ia32": "1.71.1",
-        "sass-embedded-win32-x64": "1.71.1"
-      }
-    },
-    "node_modules/sass-embedded-android-arm": {
-      "version": "1.71.1",
-      "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.71.1.tgz",
-      "integrity": "sha512-Pq6TlRg9lIYsZDo9XNQZnSg6grQKzBG3ssdv0W1SnYS1BzGKwbg8XnlUA/pVxK76BKEm8i+0DA4y8cZ8A3tmpw==",
-      "cpu": [
-        "arm"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "android"
-      ],
-      "peer": true,
-      "bin": {
-        "sass": "dart-sass/sass"
-      },
-      "engines": {
-        "node": ">=14.0.0"
-      }
-    },
-    "node_modules/sass-embedded-android-arm64": {
-      "version": "1.71.1",
-      "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.71.1.tgz",
-      "integrity": "sha512-a7wJ1MM6sBwcM/8vIvvnwc9spoeNimNeXZpN9baSV4Ylthmr4GkTYYtf96Z/XYLdG5KBgYlxMs5T3OgqafdUMg==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "android"
-      ],
-      "peer": true,
-      "bin": {
-        "sass": "dart-sass/sass"
-      },
-      "engines": {
-        "node": ">=14.0.0"
-      }
-    },
-    "node_modules/sass-embedded-android-ia32": {
-      "version": "1.71.1",
-      "resolved": "https://registry.npmjs.org/sass-embedded-android-ia32/-/sass-embedded-android-ia32-1.71.1.tgz",
-      "integrity": "sha512-tn3WZNdKQtr/DSzl4cQIDZkTO3JuuMxPvM/T+U7gBFyhU62NyF5wvwBnuh+BN3iaMowfkSknzCZCjyJDwnkDjw==",
-      "cpu": [
-        "ia32"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "android"
-      ],
-      "peer": true,
-      "bin": {
-        "sass": "dart-sass/sass"
-      },
-      "engines": {
-        "node": ">=14.0.0"
-      }
-    },
-    "node_modules/sass-embedded-android-x64": {
-      "version": "1.71.1",
-      "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.71.1.tgz",
-      "integrity": "sha512-l72Pqxfb/pArpOLyWsuL9s8ODWupRGATWTPwUT/GjVdSQJO/lQL5DopXb55Cwh2T7t2G10e+uXTEMKz0qngoWQ==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "android"
-      ],
-      "peer": true,
-      "bin": {
-        "sass": "dart-sass/sass"
-      },
-      "engines": {
-        "node": ">=14.0.0"
-      }
-    },
-    "node_modules/sass-embedded-darwin-arm64": {
-      "version": "1.71.1",
-      "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.71.1.tgz",
-      "integrity": "sha512-3eZDAcJBwoG0Kyasa/EbaKt1Jn2y0GHvCd0Oas/VtMsYL+/6abiCO1l8YltdxER4jvuHUKE2Ow7J6T6sC+vVQQ==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "peer": true,
-      "bin": {
-        "sass": "dart-sass/sass"
-      },
-      "engines": {
-        "node": ">=14.0.0"
-      }
-    },
-    "node_modules/sass-embedded-darwin-x64": {
-      "version": "1.71.1",
-      "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.71.1.tgz",
-      "integrity": "sha512-/9FtMPVdQalhsRCD9opNIlZqJKe7veCjWsdj0J9utbc2bNCTYswXNQtC/jWJTjE9/gQ0+w5zwg9+fQzltdYh1w==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "peer": true,
-      "bin": {
-        "sass": "dart-sass/sass"
-      },
-      "engines": {
-        "node": ">=14.0.0"
-      }
-    },
-    "node_modules/sass-embedded-linux-arm": {
-      "version": "1.71.1",
-      "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.71.1.tgz",
-      "integrity": "sha512-l7NEn0gji6GTN+p00DP2zZl9SE501Zy5obTA3beiD6+vQy7lCEC6vpNi/ZrlC6eRmgY2OKSBB2lfW7KSej9Hkg==",
-      "cpu": [
-        "arm"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "peer": true,
-      "bin": {
-        "sass": "dart-sass/sass"
-      },
-      "engines": {
-        "node": ">=14.0.0"
-      }
-    },
-    "node_modules/sass-embedded-linux-arm64": {
-      "version": "1.71.1",
-      "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.71.1.tgz",
-      "integrity": "sha512-zUSmqeqcgTb3VjZggk9a9xB2ZGaAe/TYAi/vYRPNLY/f7dZSrsa9Ejo+LUm2aNl6V8hFzMz7BpoKsaRQJnb9GQ==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "peer": true,
-      "bin": {
-        "sass": "dart-sass/sass"
-      },
-      "engines": {
-        "node": ">=14.0.0"
-      }
-    },
-    "node_modules/sass-embedded-linux-ia32": {
-      "version": "1.71.1",
-      "resolved": "https://registry.npmjs.org/sass-embedded-linux-ia32/-/sass-embedded-linux-ia32-1.71.1.tgz",
-      "integrity": "sha512-NvzSljfc/Kw9/0CSn91AsINV2nh8vxhFe2cKexPMwvAqv/etU84dJMfJejxPJ39PmMqT1KvC4G+Qt2+6Mpe7oQ==",
-      "cpu": [
-        "ia32"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "peer": true,
-      "bin": {
-        "sass": "dart-sass/sass"
-      },
-      "engines": {
-        "node": ">=14.0.0"
-      }
-    },
-    "node_modules/sass-embedded-linux-musl-arm": {
-      "version": "1.71.1",
-      "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.71.1.tgz",
-      "integrity": "sha512-1O37K5EgSeQjCBizIF9xdZJw3mh5XYHOnsB4+65CLZg4ac84ragjFv9d9rYhwGs9QSgg1MoOv7VWnEIxQ8Pp9Q==",
-      "cpu": [
-        "arm"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "peer": true,
-      "engines": {
-        "node": ">=14.0.0"
-      }
-    },
-    "node_modules/sass-embedded-linux-musl-arm64": {
-      "version": "1.71.1",
-      "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.71.1.tgz",
-      "integrity": "sha512-Agtf6BcYQ0mt+jVDcRcN7bDPrMAQOWMeX15NTlQH1rO8voObLo6ThVl2NUkiZyyVmu7a6YOrCxpGBVAK1cLGOg==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "peer": true,
-      "engines": {
-        "node": ">=14.0.0"
-      }
-    },
-    "node_modules/sass-embedded-linux-musl-ia32": {
-      "version": "1.71.1",
-      "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-ia32/-/sass-embedded-linux-musl-ia32-1.71.1.tgz",
-      "integrity": "sha512-Cd5sJkt70bSlYEXUSj9mPMKZLzDL8LGcBKUIfQRrcBKjmzD2Va2eLq4Zati9Xzt54unuDp4bAUUTyvQmjLzFmA==",
-      "cpu": [
-        "ia32"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "peer": true,
-      "engines": {
-        "node": ">=14.0.0"
-      }
-    },
-    "node_modules/sass-embedded-linux-musl-x64": {
-      "version": "1.71.1",
-      "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.71.1.tgz",
-      "integrity": "sha512-uVfYms/lf4QVSvtQXkSm+Bq3wVsvkRMI30ca82rRwpwebxSaTbUr+uLnskh8QvbyfsbMyrzZQU0SCrO3uCua1A==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "peer": true,
-      "engines": {
-        "node": ">=14.0.0"
-      }
-    },
-    "node_modules/sass-embedded-linux-x64": {
-      "version": "1.71.1",
-      "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.71.1.tgz",
-      "integrity": "sha512-7BXniYic16+MQx0InyH8OXburLPGMRYRWf0l/t/fRkNkUHWFl7NQPAX0yvj73c/PKOdaYEUY6isNB4OGUGtZHQ==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "peer": true,
-      "bin": {
-        "sass": "dart-sass/sass"
-      },
-      "engines": {
-        "node": ">=14.0.0"
-      }
-    },
-    "node_modules/sass-embedded-win32-ia32": {
-      "version": "1.71.1",
-      "resolved": "https://registry.npmjs.org/sass-embedded-win32-ia32/-/sass-embedded-win32-ia32-1.71.1.tgz",
-      "integrity": "sha512-ZDhL6hvekeKDkZ1wUj6wN0thrB/7wOO8HaQoagk+pKaHoa0Py7OLR/m9mQM8S13mZpUQduNsznmXV1fOss4GOg==",
-      "cpu": [
-        "ia32"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "win32"
-      ],
-      "peer": true,
-      "bin": {
-        "sass": "dart-sass/sass.bat"
-      },
-      "engines": {
-        "node": ">=14.0.0"
-      }
-    },
-    "node_modules/sass-embedded-win32-x64": {
-      "version": "1.71.1",
-      "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.71.1.tgz",
-      "integrity": "sha512-ecWP1TFUA9ujOuOTJfWC1iZsSZOdQy5OxIEHqoERxunyjwzkiTxfN8J7Y4bNQ5uwb4K0brxWyIM8Fq+UgDqcZA==",
-      "cpu": [
-        "arm64",
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "win32"
-      ],
-      "peer": true,
-      "bin": {
-        "sass": "dart-sass/sass.bat"
-      },
-      "engines": {
-        "node": ">=14.0.0"
-      }
-    },
-    "node_modules/sass-embedded/node_modules/immutable": {
-      "version": "4.3.5",
-      "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.5.tgz",
-      "integrity": "sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==",
-      "dev": true,
-      "peer": true
-    },
-    "node_modules/sass-embedded/node_modules/supports-color": {
-      "version": "8.1.1",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
-      "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
-      "dev": true,
-      "peer": true,
-      "dependencies": {
-        "has-flag": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/supports-color?sponsor=1"
-      }
-    },
-    "node_modules/sass/node_modules/immutable": {
-      "version": "4.3.5",
-      "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.5.tgz",
-      "integrity": "sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==",
-      "dev": true
-    },
-    "node_modules/semver": {
-      "version": "7.6.3",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
-      "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
-      "dev": true,
-      "bin": {
-        "semver": "bin/semver.js"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/send": {
-      "version": "0.16.2",
-      "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
-      "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==",
-      "dev": true,
-      "dependencies": {
-        "debug": "2.6.9",
-        "depd": "~1.1.2",
-        "destroy": "~1.0.4",
-        "encodeurl": "~1.0.2",
-        "escape-html": "~1.0.3",
-        "etag": "~1.8.1",
-        "fresh": "0.5.2",
-        "http-errors": "~1.6.2",
-        "mime": "1.4.1",
-        "ms": "2.0.0",
-        "on-finished": "~2.3.0",
-        "range-parser": "~1.2.0",
-        "statuses": "~1.4.0"
-      },
-      "engines": {
-        "node": ">= 0.8.0"
-      }
-    },
-    "node_modules/send/node_modules/depd": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
-      "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/send/node_modules/http-errors": {
-      "version": "1.6.3",
-      "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
-      "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==",
-      "dev": true,
-      "dependencies": {
-        "depd": "~1.1.2",
-        "inherits": "2.0.3",
-        "setprototypeof": "1.1.0",
-        "statuses": ">= 1.4.0 < 2"
-      },
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/send/node_modules/inherits": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
-      "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==",
-      "dev": true
-    },
-    "node_modules/send/node_modules/setprototypeof": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
-      "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",
-      "dev": true
-    },
-    "node_modules/send/node_modules/statuses": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
-      "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/serve-index": {
-      "version": "1.9.1",
-      "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz",
-      "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==",
-      "dev": true,
-      "dependencies": {
-        "accepts": "~1.3.4",
-        "batch": "0.6.1",
-        "debug": "2.6.9",
-        "escape-html": "~1.0.3",
-        "http-errors": "~1.6.2",
-        "mime-types": "~2.1.17",
-        "parseurl": "~1.3.2"
-      },
-      "engines": {
-        "node": ">= 0.8.0"
-      }
-    },
-    "node_modules/serve-index/node_modules/depd": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
-      "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/serve-index/node_modules/http-errors": {
-      "version": "1.6.3",
-      "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
-      "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==",
-      "dev": true,
-      "dependencies": {
-        "depd": "~1.1.2",
-        "inherits": "2.0.3",
-        "setprototypeof": "1.1.0",
-        "statuses": ">= 1.4.0 < 2"
-      },
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/serve-index/node_modules/inherits": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
-      "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==",
-      "dev": true
-    },
-    "node_modules/serve-index/node_modules/setprototypeof": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
-      "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",
-      "dev": true
-    },
-    "node_modules/serve-index/node_modules/statuses": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
-      "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/serve-static": {
-      "version": "1.13.2",
-      "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz",
-      "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==",
-      "dev": true,
-      "dependencies": {
-        "encodeurl": "~1.0.2",
-        "escape-html": "~1.0.3",
-        "parseurl": "~1.3.2",
-        "send": "0.16.2"
-      },
-      "engines": {
-        "node": ">= 0.8.0"
-      }
-    },
-    "node_modules/server-destroy": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz",
-      "integrity": "sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==",
-      "dev": true
-    },
-    "node_modules/setprototypeof": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
-      "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
-      "dev": true
-    },
-    "node_modules/shebang-command": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
-      "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
-      "dev": true,
-      "dependencies": {
-        "shebang-regex": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/shebang-regex": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
-      "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/side-channel": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
-      "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
-      "dev": true,
-      "peer": true,
-      "dependencies": {
-        "call-bind": "^1.0.0",
-        "get-intrinsic": "^1.0.2",
-        "object-inspect": "^1.9.0"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/signal-exit": {
-      "version": "3.0.7",
-      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
-      "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
-      "dev": true
-    },
-    "node_modules/sisteransi": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
-      "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
-      "dev": true
-    },
-    "node_modules/slash": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
-      "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/slice-ansi": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
-      "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^4.0.0",
-        "astral-regex": "^2.0.0",
-        "is-fullwidth-code-point": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/slice-ansi?sponsor=1"
-      }
-    },
-    "node_modules/socket.io": {
-      "version": "4.7.5",
-      "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.5.tgz",
-      "integrity": "sha512-DmeAkF6cwM9jSfmp6Dr/5/mfMwb5Z5qRrSXLpo3Fq5SqyU8CMF15jIN4ZhfSwu35ksM1qmHZDQ/DK5XTccSTvA==",
-      "dev": true,
-      "dependencies": {
-        "accepts": "~1.3.4",
-        "base64id": "~2.0.0",
-        "cors": "~2.8.5",
-        "debug": "~4.3.2",
-        "engine.io": "~6.5.2",
-        "socket.io-adapter": "~2.5.2",
-        "socket.io-parser": "~4.2.4"
-      },
-      "engines": {
-        "node": ">=10.2.0"
-      }
-    },
-    "node_modules/socket.io-adapter": {
-      "version": "2.5.5",
-      "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz",
-      "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==",
-      "dev": true,
-      "dependencies": {
-        "debug": "~4.3.4",
-        "ws": "~8.17.1"
-      }
-    },
-    "node_modules/socket.io-adapter/node_modules/debug": {
-      "version": "4.3.5",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz",
-      "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==",
-      "dev": true,
-      "dependencies": {
-        "ms": "2.1.2"
-      },
-      "engines": {
-        "node": ">=6.0"
-      },
-      "peerDependenciesMeta": {
-        "supports-color": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/socket.io-adapter/node_modules/ms": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-      "dev": true
-    },
-    "node_modules/socket.io-client": {
-      "version": "4.7.2",
-      "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.7.2.tgz",
-      "integrity": "sha512-vtA0uD4ibrYD793SOIAwlo8cj6haOeMHrGvwPxJsxH7CeIksqJ+3Zc06RvWTIFgiSqx4A3sOnTXpfAEE2Zyz6w==",
-      "dev": true,
-      "dependencies": {
-        "@socket.io/component-emitter": "~3.1.0",
-        "debug": "~4.3.2",
-        "engine.io-client": "~6.5.2",
-        "socket.io-parser": "~4.2.4"
-      },
-      "engines": {
-        "node": ">=10.0.0"
-      }
-    },
-    "node_modules/socket.io-client/node_modules/debug": {
-      "version": "4.3.4",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
-      "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
-      "dev": true,
-      "dependencies": {
-        "ms": "2.1.2"
-      },
-      "engines": {
-        "node": ">=6.0"
-      },
-      "peerDependenciesMeta": {
-        "supports-color": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/socket.io-client/node_modules/ms": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-      "dev": true
-    },
-    "node_modules/socket.io-parser": {
-      "version": "4.2.4",
-      "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz",
-      "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==",
-      "dev": true,
-      "dependencies": {
-        "@socket.io/component-emitter": "~3.1.0",
-        "debug": "~4.3.1"
-      },
-      "engines": {
-        "node": ">=10.0.0"
-      }
-    },
-    "node_modules/socket.io-parser/node_modules/debug": {
-      "version": "4.3.4",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
-      "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
-      "dev": true,
-      "dependencies": {
-        "ms": "2.1.2"
-      },
-      "engines": {
-        "node": ">=6.0"
-      },
-      "peerDependenciesMeta": {
-        "supports-color": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/socket.io-parser/node_modules/ms": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-      "dev": true
-    },
-    "node_modules/socket.io/node_modules/debug": {
-      "version": "4.3.4",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
-      "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
-      "dev": true,
-      "dependencies": {
-        "ms": "2.1.2"
-      },
-      "engines": {
-        "node": ">=6.0"
-      },
-      "peerDependenciesMeta": {
-        "supports-color": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/socket.io/node_modules/ms": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-      "dev": true
-    },
-    "node_modules/source-map": {
-      "version": "0.6.1",
-      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-      "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/source-map-js": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
-      "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/source-map-support": {
-      "version": "0.5.13",
-      "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz",
-      "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==",
-      "dev": true,
-      "dependencies": {
-        "buffer-from": "^1.0.0",
-        "source-map": "^0.6.0"
-      }
-    },
-    "node_modules/spdx-correct": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
-      "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==",
-      "dev": true,
-      "dependencies": {
-        "spdx-expression-parse": "^3.0.0",
-        "spdx-license-ids": "^3.0.0"
-      }
-    },
-    "node_modules/spdx-exceptions": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
-      "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
-      "dev": true
-    },
-    "node_modules/spdx-expression-parse": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
-      "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
-      "dev": true,
-      "dependencies": {
-        "spdx-exceptions": "^2.1.0",
-        "spdx-license-ids": "^3.0.0"
-      }
-    },
-    "node_modules/spdx-license-ids": {
-      "version": "3.0.13",
-      "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz",
-      "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==",
-      "dev": true
-    },
-    "node_modules/sprintf-js": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
-      "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
-      "dev": true
-    },
-    "node_modules/stack-utils": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz",
-      "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==",
-      "dev": true,
-      "dependencies": {
-        "escape-string-regexp": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/stack-utils/node_modules/escape-string-regexp": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
-      "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/statuses": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
-      "integrity": "sha512-wuTCPGlJONk/a1kqZ4fQM2+908lC7fa7nPYpTC1EhnvqLX/IICbeP1OZGDtA374trpSq68YubKUMo8oRhN46yg==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/stream-throttle": {
-      "version": "0.1.3",
-      "resolved": "https://registry.npmjs.org/stream-throttle/-/stream-throttle-0.1.3.tgz",
-      "integrity": "sha512-889+B9vN9dq7/vLbGyuHeZ6/ctf5sNuGWsDy89uNxkFTAgzy0eK7+w5fL3KLNRTkLle7EgZGvHUphZW0Q26MnQ==",
-      "dev": true,
-      "dependencies": {
-        "commander": "^2.2.0",
-        "limiter": "^1.0.5"
-      },
-      "bin": {
-        "throttleproxy": "bin/throttleproxy.js"
-      },
-      "engines": {
-        "node": ">= 0.10.0"
-      }
-    },
-    "node_modules/string-length": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz",
-      "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==",
-      "dev": true,
-      "dependencies": {
-        "char-regex": "^1.0.2",
-        "strip-ansi": "^6.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/string-width": {
-      "version": "4.2.3",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
-      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
-      "dev": true,
-      "dependencies": {
-        "emoji-regex": "^8.0.0",
-        "is-fullwidth-code-point": "^3.0.0",
-        "strip-ansi": "^6.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/string.prototype.trimend": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz",
-      "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==",
-      "dev": true,
-      "peer": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.4",
-        "es-abstract": "^1.20.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/string.prototype.trimstart": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz",
-      "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==",
-      "dev": true,
-      "peer": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.4",
-        "es-abstract": "^1.20.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/strip-ansi": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
-      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
-      "dev": true,
-      "dependencies": {
-        "ansi-regex": "^5.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/strip-bom": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
-      "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
-      "dev": true,
-      "peer": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/strip-final-newline": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
-      "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
-      "dev": true,
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/strip-indent": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.0.0.tgz",
-      "integrity": "sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==",
-      "dev": true,
-      "dependencies": {
-        "min-indent": "^1.0.1"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/strip-json-comments": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
-      "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/style-search": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz",
-      "integrity": "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==",
-      "dev": true
-    },
-    "node_modules/stylelint": {
-      "version": "15.10.3",
-      "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-15.10.3.tgz",
-      "integrity": "sha512-aBQMMxYvFzJJwkmg+BUUg3YfPyeuCuKo2f+LOw7yYbU8AZMblibwzp9OV4srHVeQldxvSFdz0/Xu8blq2AesiA==",
-      "dev": true,
-      "dependencies": {
-        "@csstools/css-parser-algorithms": "^2.3.1",
-        "@csstools/css-tokenizer": "^2.2.0",
-        "@csstools/media-query-list-parser": "^2.1.4",
-        "@csstools/selector-specificity": "^3.0.0",
-        "balanced-match": "^2.0.0",
-        "colord": "^2.9.3",
-        "cosmiconfig": "^8.2.0",
-        "css-functions-list": "^3.2.0",
-        "css-tree": "^2.3.1",
-        "debug": "^4.3.4",
-        "fast-glob": "^3.3.1",
-        "fastest-levenshtein": "^1.0.16",
-        "file-entry-cache": "^6.0.1",
-        "global-modules": "^2.0.0",
-        "globby": "^11.1.0",
-        "globjoin": "^0.1.4",
-        "html-tags": "^3.3.1",
-        "ignore": "^5.2.4",
-        "import-lazy": "^4.0.0",
-        "imurmurhash": "^0.1.4",
-        "is-plain-object": "^5.0.0",
-        "known-css-properties": "^0.28.0",
-        "mathml-tag-names": "^2.1.3",
-        "meow": "^10.1.5",
-        "micromatch": "^4.0.5",
-        "normalize-path": "^3.0.0",
-        "picocolors": "^1.0.0",
-        "postcss": "^8.4.27",
-        "postcss-resolve-nested-selector": "^0.1.1",
-        "postcss-safe-parser": "^6.0.0",
-        "postcss-selector-parser": "^6.0.13",
-        "postcss-value-parser": "^4.2.0",
-        "resolve-from": "^5.0.0",
-        "string-width": "^4.2.3",
-        "strip-ansi": "^6.0.1",
-        "style-search": "^0.1.0",
-        "supports-hyperlinks": "^3.0.0",
-        "svg-tags": "^1.0.0",
-        "table": "^6.8.1",
-        "write-file-atomic": "^5.0.1"
-      },
-      "bin": {
-        "stylelint": "bin/stylelint.mjs"
-      },
-      "engines": {
-        "node": "^14.13.1 || >=16.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/stylelint"
-      }
-    },
-    "node_modules/stylelint-config-recommended": {
-      "version": "13.0.0",
-      "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-13.0.0.tgz",
-      "integrity": "sha512-EH+yRj6h3GAe/fRiyaoO2F9l9Tgg50AOFhaszyfov9v6ayXJ1IkSHwTxd7lB48FmOeSGDPLjatjO11fJpmarkQ==",
-      "dev": true,
-      "engines": {
-        "node": "^14.13.1 || >=16.0.0"
-      },
-      "peerDependencies": {
-        "stylelint": "^15.10.0"
-      }
-    },
-    "node_modules/stylelint-config-recommended-scss": {
-      "version": "13.1.0",
-      "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-13.1.0.tgz",
-      "integrity": "sha512-8L5nDfd+YH6AOoBGKmhH8pLWF1dpfY816JtGMePcBqqSsLU+Ysawx44fQSlMOJ2xTfI9yTGpup5JU77c17w1Ww==",
-      "dev": true,
-      "dependencies": {
-        "postcss-scss": "^4.0.9",
-        "stylelint-config-recommended": "^13.0.0",
-        "stylelint-scss": "^5.3.0"
-      },
-      "peerDependencies": {
-        "postcss": "^8.3.3",
-        "stylelint": "^15.10.0"
-      },
-      "peerDependenciesMeta": {
-        "postcss": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/stylelint-config-standard": {
-      "version": "34.0.0",
-      "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-34.0.0.tgz",
-      "integrity": "sha512-u0VSZnVyW9VSryBG2LSO+OQTjN7zF9XJaAJRX/4EwkmU0R2jYwmBSN10acqZisDitS0CLiEiGjX7+Hrq8TAhfQ==",
-      "dev": true,
-      "dependencies": {
-        "stylelint-config-recommended": "^13.0.0"
-      },
-      "engines": {
-        "node": "^14.13.1 || >=16.0.0"
-      },
-      "peerDependencies": {
-        "stylelint": "^15.10.0"
-      }
-    },
-    "node_modules/stylelint-config-standard-scss": {
-      "version": "11.1.0",
-      "resolved": "https://registry.npmjs.org/stylelint-config-standard-scss/-/stylelint-config-standard-scss-11.1.0.tgz",
-      "integrity": "sha512-5gnBgeNTgRVdchMwiFQPuBOtj9QefYtfXiddrOMJA2pI22zxt6ddI2s+e5Oh7/6QYl7QLJujGnaUR5YyGq72ow==",
-      "dev": true,
-      "dependencies": {
-        "stylelint-config-recommended-scss": "^13.1.0",
-        "stylelint-config-standard": "^34.0.0"
-      },
-      "peerDependencies": {
-        "postcss": "^8.3.3",
-        "stylelint": "^15.10.0"
-      },
-      "peerDependenciesMeta": {
-        "postcss": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/stylelint-scss": {
-      "version": "5.3.0",
-      "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-5.3.0.tgz",
-      "integrity": "sha512-Sc7S1uWqStMc99NREsHNxpxHHFRvjo2pWILNl/UCwWO8PxhODK8qbJH0GHWIALxl6BD5rwJL4cSm4jk36hi6fg==",
-      "dev": true,
-      "dependencies": {
-        "known-css-properties": "^0.28.0",
-        "postcss-media-query-parser": "^0.2.3",
-        "postcss-resolve-nested-selector": "^0.1.1",
-        "postcss-selector-parser": "^6.0.13",
-        "postcss-value-parser": "^4.2.0"
-      },
-      "peerDependencies": {
-        "stylelint": "^14.5.1 || ^15.0.0"
-      }
-    },
-    "node_modules/stylelint/node_modules/balanced-match": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz",
-      "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==",
-      "dev": true
-    },
-    "node_modules/stylelint/node_modules/debug": {
-      "version": "4.3.4",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
-      "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
-      "dev": true,
-      "dependencies": {
-        "ms": "2.1.2"
-      },
-      "engines": {
-        "node": ">=6.0"
-      },
-      "peerDependenciesMeta": {
-        "supports-color": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/stylelint/node_modules/ms": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-      "dev": true
-    },
-    "node_modules/stylelint/node_modules/resolve-from": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
-      "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/stylis": {
-      "version": "4.1.3",
-      "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.3.tgz",
-      "integrity": "sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA=="
-    },
-    "node_modules/supports-color": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
-      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/supports-hyperlinks": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.0.0.tgz",
-      "integrity": "sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA==",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^4.0.0",
-        "supports-color": "^7.0.0"
-      },
-      "engines": {
-        "node": ">=14.18"
-      }
-    },
-    "node_modules/supports-preserve-symlinks-flag": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
-      "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/svg-tags": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz",
-      "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==",
-      "dev": true
-    },
-    "node_modules/table": {
-      "version": "6.8.1",
-      "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz",
-      "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==",
-      "dev": true,
-      "dependencies": {
-        "ajv": "^8.0.1",
-        "lodash.truncate": "^4.4.2",
-        "slice-ansi": "^4.0.0",
-        "string-width": "^4.2.3",
-        "strip-ansi": "^6.0.1"
-      },
-      "engines": {
-        "node": ">=10.0.0"
-      }
-    },
-    "node_modules/table/node_modules/ajv": {
-      "version": "8.12.0",
-      "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
-      "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
-      "dev": true,
-      "dependencies": {
-        "fast-deep-equal": "^3.1.1",
-        "json-schema-traverse": "^1.0.0",
-        "require-from-string": "^2.0.2",
-        "uri-js": "^4.2.2"
-      },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/epoberezkin"
-      }
-    },
-    "node_modules/table/node_modules/json-schema-traverse": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
-      "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
-      "dev": true
-    },
-    "node_modules/test-exclude": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
-      "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
-      "dev": true,
-      "dependencies": {
-        "@istanbuljs/schema": "^0.1.2",
-        "glob": "^7.1.4",
-        "minimatch": "^3.0.4"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/text-table": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
-      "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
-      "dev": true
-    },
-    "node_modules/tmpl": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
-      "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==",
-      "dev": true
-    },
-    "node_modules/to-fast-properties": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
-      "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/to-regex-range": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
-      "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
-      "dev": true,
-      "dependencies": {
-        "is-number": "^7.0.0"
-      },
-      "engines": {
-        "node": ">=8.0"
-      }
-    },
-    "node_modules/toidentifier": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
-      "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.6"
-      }
-    },
-    "node_modules/trim-newlines": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-4.1.1.tgz",
-      "integrity": "sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/ts-api-utils": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz",
-      "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=16"
-      },
-      "peerDependencies": {
-        "typescript": ">=4.2.0"
-      }
-    },
-    "node_modules/ts-dedent": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz",
-      "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==",
-      "engines": {
-        "node": ">=6.10"
-      }
-    },
-    "node_modules/ts-jest": {
-      "version": "29.2.5",
-      "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.5.tgz",
-      "integrity": "sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==",
-      "dev": true,
-      "dependencies": {
-        "bs-logger": "^0.2.6",
-        "ejs": "^3.1.10",
-        "fast-json-stable-stringify": "^2.1.0",
-        "jest-util": "^29.0.0",
-        "json5": "^2.2.3",
-        "lodash.memoize": "^4.1.2",
-        "make-error": "^1.3.6",
-        "semver": "^7.6.3",
-        "yargs-parser": "^21.1.1"
-      },
-      "bin": {
-        "ts-jest": "cli.js"
-      },
-      "engines": {
-        "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0"
-      },
-      "peerDependencies": {
-        "@babel/core": ">=7.0.0-beta.0 <8",
-        "@jest/transform": "^29.0.0",
-        "@jest/types": "^29.0.0",
-        "babel-jest": "^29.0.0",
-        "jest": "^29.0.0",
-        "typescript": ">=4.3 <6"
-      },
-      "peerDependenciesMeta": {
-        "@babel/core": {
-          "optional": true
-        },
-        "@jest/transform": {
-          "optional": true
-        },
-        "@jest/types": {
-          "optional": true
-        },
-        "babel-jest": {
-          "optional": true
-        },
-        "esbuild": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/ts-jest/node_modules/json5": {
-      "version": "2.2.3",
-      "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
-      "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
-      "dev": true,
-      "bin": {
-        "json5": "lib/cli.js"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/tsconfig-paths": {
-      "version": "3.14.1",
-      "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz",
-      "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==",
-      "dev": true,
-      "peer": true,
-      "dependencies": {
-        "@types/json5": "^0.0.29",
-        "json5": "^1.0.1",
-        "minimist": "^1.2.6",
-        "strip-bom": "^3.0.0"
-      }
-    },
-    "node_modules/tslib": {
-      "version": "2.6.2",
-      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
-      "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==",
-      "dev": true,
-      "peer": true
-    },
-    "node_modules/type-check": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
-      "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
-      "dev": true,
-      "dependencies": {
-        "prelude-ls": "^1.2.1"
-      },
-      "engines": {
-        "node": ">= 0.8.0"
-      }
-    },
-    "node_modules/type-detect": {
-      "version": "4.0.8",
-      "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
-      "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/type-fest": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
-      "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/typed-array-length": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz",
-      "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==",
-      "dev": true,
-      "peer": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "for-each": "^0.3.3",
-        "is-typed-array": "^1.1.9"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/typescript": {
-      "version": "5.5.4",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz",
-      "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==",
-      "dev": true,
-      "bin": {
-        "tsc": "bin/tsc",
-        "tsserver": "bin/tsserver"
-      },
-      "engines": {
-        "node": ">=14.17"
-      }
-    },
-    "node_modules/ua-parser-js": {
-      "version": "1.0.33",
-      "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.33.tgz",
-      "integrity": "sha512-RqshF7TPTE0XLYAqmjlu5cLLuGdKrNu9O1KLA/qp39QtbZwuzwv1dT46DZSopoUMsYgXpB3Cv8a03FI8b74oFQ==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "opencollective",
-          "url": "https://opencollective.com/ua-parser-js"
-        },
-        {
-          "type": "paypal",
-          "url": "https://paypal.me/faisalman"
-        }
-      ],
-      "engines": {
-        "node": "*"
-      }
-    },
-    "node_modules/unbox-primitive": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
-      "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
-      "dev": true,
-      "peer": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "has-bigints": "^1.0.2",
-        "has-symbols": "^1.0.3",
-        "which-boxed-primitive": "^1.0.2"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/unist-util-stringify-position": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz",
-      "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==",
-      "dependencies": {
-        "@types/unist": "^2.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      }
-    },
-    "node_modules/universalify": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
-      "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
-      "dev": true,
-      "engines": {
-        "node": ">= 4.0.0"
-      }
-    },
-    "node_modules/unpipe": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
-      "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.8"
-      }
-    },
-    "node_modules/update-browserslist-db": {
-      "version": "1.0.10",
-      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz",
-      "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "opencollective",
-          "url": "https://opencollective.com/browserslist"
-        },
-        {
-          "type": "tidelift",
-          "url": "https://tidelift.com/funding/github/npm/browserslist"
-        }
-      ],
-      "dependencies": {
-        "escalade": "^3.1.1",
-        "picocolors": "^1.0.0"
-      },
-      "bin": {
-        "browserslist-lint": "cli.js"
-      },
-      "peerDependencies": {
-        "browserslist": ">= 4.21.0"
-      }
-    },
-    "node_modules/uri-js": {
-      "version": "4.4.1",
-      "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
-      "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
-      "dev": true,
-      "dependencies": {
-        "punycode": "^2.1.0"
-      }
-    },
-    "node_modules/util-deprecate": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
-      "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
-      "dev": true
-    },
-    "node_modules/utils-merge": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
-      "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.4.0"
-      }
-    },
-    "node_modules/uuid": {
-      "version": "9.0.0",
-      "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz",
-      "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==",
-      "bin": {
-        "uuid": "dist/bin/uuid"
-      }
-    },
-    "node_modules/uvu": {
-      "version": "0.5.6",
-      "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz",
-      "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==",
-      "dependencies": {
-        "dequal": "^2.0.0",
-        "diff": "^5.0.0",
-        "kleur": "^4.0.3",
-        "sade": "^1.7.3"
-      },
-      "bin": {
-        "uvu": "bin.js"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/uvu/node_modules/kleur": {
-      "version": "4.1.5",
-      "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz",
-      "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==",
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/v8-to-istanbul": {
-      "version": "9.1.0",
-      "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz",
-      "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==",
-      "dev": true,
-      "dependencies": {
-        "@jridgewell/trace-mapping": "^0.3.12",
-        "@types/istanbul-lib-coverage": "^2.0.1",
-        "convert-source-map": "^1.6.0"
-      },
-      "engines": {
-        "node": ">=10.12.0"
-      }
-    },
-    "node_modules/v8-to-istanbul/node_modules/convert-source-map": {
-      "version": "1.9.0",
-      "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
-      "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
-      "dev": true
-    },
-    "node_modules/validate-npm-package-license": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
-      "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
-      "dev": true,
-      "dependencies": {
-        "spdx-correct": "^3.0.0",
-        "spdx-expression-parse": "^3.0.0"
-      }
-    },
-    "node_modules/varint": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz",
-      "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==",
-      "dev": true,
-      "peer": true
-    },
-    "node_modules/vary": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
-      "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.8"
-      }
-    },
-    "node_modules/walker": {
-      "version": "1.0.8",
-      "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz",
-      "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==",
-      "dev": true,
-      "dependencies": {
-        "makeerror": "1.0.12"
-      }
-    },
-    "node_modules/web-worker": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.2.0.tgz",
-      "integrity": "sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA=="
-    },
-    "node_modules/which": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
-      "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
-      "dev": true,
-      "dependencies": {
-        "isexe": "^2.0.0"
-      },
-      "bin": {
-        "node-which": "bin/node-which"
-      },
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/which-boxed-primitive": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
-      "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
-      "dev": true,
-      "peer": true,
-      "dependencies": {
-        "is-bigint": "^1.0.1",
-        "is-boolean-object": "^1.1.0",
-        "is-number-object": "^1.0.4",
-        "is-string": "^1.0.5",
-        "is-symbol": "^1.0.3"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/which-typed-array": {
-      "version": "1.1.9",
-      "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz",
-      "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==",
-      "dev": true,
-      "peer": true,
-      "dependencies": {
-        "available-typed-arrays": "^1.0.5",
-        "call-bind": "^1.0.2",
-        "for-each": "^0.3.3",
-        "gopd": "^1.0.1",
-        "has-tostringtag": "^1.0.0",
-        "is-typed-array": "^1.1.10"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/wrap-ansi": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
-      "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^4.0.0",
-        "string-width": "^4.1.0",
-        "strip-ansi": "^6.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
-      }
-    },
-    "node_modules/wrappy": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
-      "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
-      "dev": true
-    },
-    "node_modules/write-file-atomic": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz",
-      "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==",
-      "dev": true,
-      "dependencies": {
-        "imurmurhash": "^0.1.4",
-        "signal-exit": "^4.0.1"
-      },
-      "engines": {
-        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-      }
-    },
-    "node_modules/write-file-atomic/node_modules/signal-exit": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.1.tgz",
-      "integrity": "sha512-uUWsN4aOxJAS8KOuf3QMyFtgm1pkb6I+KRZbRF/ghdf5T7sM+B1lLLzPDxswUjkmHyxQAVzEgG35E3NzDM9GVw==",
-      "dev": true,
-      "engines": {
-        "node": ">=14"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "node_modules/ws": {
-      "version": "8.17.1",
-      "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz",
-      "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=10.0.0"
-      },
-      "peerDependencies": {
-        "bufferutil": "^4.0.1",
-        "utf-8-validate": ">=5.0.2"
-      },
-      "peerDependenciesMeta": {
-        "bufferutil": {
-          "optional": true
-        },
-        "utf-8-validate": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/xmlhttprequest-ssl": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz",
-      "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.4.0"
-      }
-    },
-    "node_modules/y18n": {
-      "version": "5.0.8",
-      "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
-      "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/yallist": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-      "dev": true
-    },
-    "node_modules/yargs": {
-      "version": "17.7.2",
-      "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
-      "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
-      "dev": true,
-      "dependencies": {
-        "cliui": "^8.0.1",
-        "escalade": "^3.1.1",
-        "get-caller-file": "^2.0.5",
-        "require-directory": "^2.1.1",
-        "string-width": "^4.2.3",
-        "y18n": "^5.0.5",
-        "yargs-parser": "^21.1.1"
-      },
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/yargs-parser": {
-      "version": "21.1.1",
-      "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
-      "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
-      "dev": true,
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/yocto-queue": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
-      "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    }
-  },
-  "dependencies": {
-    "@aashutoshrathi/word-wrap": {
-      "version": "1.2.6",
-      "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz",
-      "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==",
-      "dev": true
-    },
-    "@ampproject/remapping": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz",
-      "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==",
-      "dev": true,
-      "requires": {
-        "@jridgewell/gen-mapping": "^0.1.0",
-        "@jridgewell/trace-mapping": "^0.3.9"
-      }
-    },
-    "@babel/code-frame": {
-      "version": "7.22.13",
-      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz",
-      "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==",
-      "dev": true,
-      "requires": {
-        "@babel/highlight": "^7.22.13",
-        "chalk": "^2.4.2"
-      },
-      "dependencies": {
-        "ansi-styles": {
-          "version": "3.2.1",
-          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
-          "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
-          "dev": true,
-          "requires": {
-            "color-convert": "^1.9.0"
-          }
-        },
-        "chalk": {
-          "version": "2.4.2",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
-          "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^3.2.1",
-            "escape-string-regexp": "^1.0.5",
-            "supports-color": "^5.3.0"
-          }
-        },
-        "color-convert": {
-          "version": "1.9.3",
-          "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
-          "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
-          "dev": true,
-          "requires": {
-            "color-name": "1.1.3"
-          }
-        },
-        "color-name": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
-          "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
-          "dev": true
-        },
-        "has-flag": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
-          "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
-          "dev": true
-        },
-        "supports-color": {
-          "version": "5.5.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
-          "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
-          "dev": true,
-          "requires": {
-            "has-flag": "^3.0.0"
-          }
-        }
-      }
-    },
-    "@babel/compat-data": {
-      "version": "7.21.0",
-      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.0.tgz",
-      "integrity": "sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==",
-      "dev": true
-    },
-    "@babel/core": {
-      "version": "7.21.3",
-      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.3.tgz",
-      "integrity": "sha512-qIJONzoa/qiHghnm0l1n4i/6IIziDpzqc36FBs4pzMhDUraHqponwJLiAKm1hGLP3OSB/TVNz6rMwVGpwxxySw==",
-      "dev": true,
-      "requires": {
-        "@ampproject/remapping": "^2.2.0",
-        "@babel/code-frame": "^7.18.6",
-        "@babel/generator": "^7.21.3",
-        "@babel/helper-compilation-targets": "^7.20.7",
-        "@babel/helper-module-transforms": "^7.21.2",
-        "@babel/helpers": "^7.21.0",
-        "@babel/parser": "^7.21.3",
-        "@babel/template": "^7.20.7",
-        "@babel/traverse": "^7.21.3",
-        "@babel/types": "^7.21.3",
-        "convert-source-map": "^1.7.0",
-        "debug": "^4.1.0",
-        "gensync": "^1.0.0-beta.2",
-        "json5": "^2.2.2",
-        "semver": "^6.3.0"
-      },
-      "dependencies": {
-        "convert-source-map": {
-          "version": "1.9.0",
-          "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
-          "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
-          "dev": true
-        },
-        "debug": {
-          "version": "4.3.4",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
-          "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
-          "dev": true,
-          "requires": {
-            "ms": "2.1.2"
-          }
-        },
-        "json5": {
-          "version": "2.2.3",
-          "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
-          "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
-          "dev": true
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-          "dev": true
-        },
-        "semver": {
-          "version": "6.3.1",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
-          "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
-          "dev": true
-        }
-      }
-    },
-    "@babel/generator": {
-      "version": "7.23.0",
-      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz",
-      "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==",
-      "dev": true,
-      "requires": {
-        "@babel/types": "^7.23.0",
-        "@jridgewell/gen-mapping": "^0.3.2",
-        "@jridgewell/trace-mapping": "^0.3.17",
-        "jsesc": "^2.5.1"
-      },
-      "dependencies": {
-        "@jridgewell/gen-mapping": {
-          "version": "0.3.2",
-          "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
-          "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
-          "dev": true,
-          "requires": {
-            "@jridgewell/set-array": "^1.0.1",
-            "@jridgewell/sourcemap-codec": "^1.4.10",
-            "@jridgewell/trace-mapping": "^0.3.9"
-          }
-        }
-      }
-    },
-    "@babel/helper-compilation-targets": {
-      "version": "7.20.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz",
-      "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==",
-      "dev": true,
-      "requires": {
-        "@babel/compat-data": "^7.20.5",
-        "@babel/helper-validator-option": "^7.18.6",
-        "browserslist": "^4.21.3",
-        "lru-cache": "^5.1.1",
-        "semver": "^6.3.0"
-      },
-      "dependencies": {
-        "lru-cache": {
-          "version": "5.1.1",
-          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
-          "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
-          "dev": true,
-          "requires": {
-            "yallist": "^3.0.2"
-          }
-        },
-        "semver": {
-          "version": "6.3.1",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
-          "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
-          "dev": true
-        },
-        "yallist": {
-          "version": "3.1.1",
-          "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
-          "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
-          "dev": true
-        }
-      }
-    },
-    "@babel/helper-environment-visitor": {
-      "version": "7.22.20",
-      "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
-      "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==",
-      "dev": true
-    },
-    "@babel/helper-function-name": {
-      "version": "7.23.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz",
-      "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==",
-      "dev": true,
-      "requires": {
-        "@babel/template": "^7.22.15",
-        "@babel/types": "^7.23.0"
-      }
-    },
-    "@babel/helper-hoist-variables": {
-      "version": "7.22.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
-      "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
-      "dev": true,
-      "requires": {
-        "@babel/types": "^7.22.5"
-      }
-    },
-    "@babel/helper-module-imports": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz",
-      "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==",
-      "dev": true,
-      "requires": {
-        "@babel/types": "^7.18.6"
-      }
-    },
-    "@babel/helper-module-transforms": {
-      "version": "7.21.2",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz",
-      "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==",
-      "dev": true,
-      "requires": {
-        "@babel/helper-environment-visitor": "^7.18.9",
-        "@babel/helper-module-imports": "^7.18.6",
-        "@babel/helper-simple-access": "^7.20.2",
-        "@babel/helper-split-export-declaration": "^7.18.6",
-        "@babel/helper-validator-identifier": "^7.19.1",
-        "@babel/template": "^7.20.7",
-        "@babel/traverse": "^7.21.2",
-        "@babel/types": "^7.21.2"
-      }
-    },
-    "@babel/helper-plugin-utils": {
-      "version": "7.22.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz",
-      "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==",
-      "dev": true
-    },
-    "@babel/helper-simple-access": {
-      "version": "7.20.2",
-      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz",
-      "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==",
-      "dev": true,
-      "requires": {
-        "@babel/types": "^7.20.2"
-      }
-    },
-    "@babel/helper-split-export-declaration": {
-      "version": "7.22.6",
-      "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
-      "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
-      "dev": true,
-      "requires": {
-        "@babel/types": "^7.22.5"
-      }
-    },
-    "@babel/helper-string-parser": {
-      "version": "7.22.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz",
-      "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==",
-      "dev": true
-    },
-    "@babel/helper-validator-identifier": {
-      "version": "7.22.20",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
-      "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
-      "dev": true
-    },
-    "@babel/helper-validator-option": {
-      "version": "7.21.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz",
-      "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==",
-      "dev": true
-    },
-    "@babel/helpers": {
-      "version": "7.21.0",
-      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz",
-      "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==",
-      "dev": true,
-      "requires": {
-        "@babel/template": "^7.20.7",
-        "@babel/traverse": "^7.21.0",
-        "@babel/types": "^7.21.0"
-      }
-    },
-    "@babel/highlight": {
-      "version": "7.22.20",
-      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz",
-      "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==",
-      "dev": true,
-      "requires": {
-        "@babel/helper-validator-identifier": "^7.22.20",
-        "chalk": "^2.4.2",
-        "js-tokens": "^4.0.0"
-      },
-      "dependencies": {
-        "ansi-styles": {
-          "version": "3.2.1",
-          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
-          "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
-          "dev": true,
-          "requires": {
-            "color-convert": "^1.9.0"
-          }
-        },
-        "chalk": {
-          "version": "2.4.2",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
-          "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^3.2.1",
-            "escape-string-regexp": "^1.0.5",
-            "supports-color": "^5.3.0"
-          }
-        },
-        "color-convert": {
-          "version": "1.9.3",
-          "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
-          "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
-          "dev": true,
-          "requires": {
-            "color-name": "1.1.3"
-          }
-        },
-        "color-name": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
-          "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
-          "dev": true
-        },
-        "has-flag": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
-          "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
-          "dev": true
-        },
-        "supports-color": {
-          "version": "5.5.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
-          "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
-          "dev": true,
-          "requires": {
-            "has-flag": "^3.0.0"
-          }
-        }
-      }
-    },
-    "@babel/parser": {
-      "version": "7.23.0",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz",
-      "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==",
-      "dev": true
-    },
-    "@babel/plugin-syntax-async-generators": {
-      "version": "7.8.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
-      "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
-      "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.8.0"
-      }
-    },
-    "@babel/plugin-syntax-bigint": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz",
-      "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==",
-      "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.8.0"
-      }
-    },
-    "@babel/plugin-syntax-class-properties": {
-      "version": "7.12.13",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
-      "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
-      "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.12.13"
-      }
-    },
-    "@babel/plugin-syntax-import-meta": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
-      "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
-      "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
-      }
-    },
-    "@babel/plugin-syntax-json-strings": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
-      "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
-      "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.8.0"
-      }
-    },
-    "@babel/plugin-syntax-jsx": {
-      "version": "7.22.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz",
-      "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==",
-      "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.22.5"
-      }
-    },
-    "@babel/plugin-syntax-logical-assignment-operators": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
-      "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
-      "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
-      }
-    },
-    "@babel/plugin-syntax-nullish-coalescing-operator": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
-      "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
-      "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.8.0"
-      }
-    },
-    "@babel/plugin-syntax-numeric-separator": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
-      "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
-      "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
-      }
-    },
-    "@babel/plugin-syntax-object-rest-spread": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
-      "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
-      "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.8.0"
-      }
-    },
-    "@babel/plugin-syntax-optional-catch-binding": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
-      "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
-      "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.8.0"
-      }
-    },
-    "@babel/plugin-syntax-optional-chaining": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
-      "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
-      "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.8.0"
-      }
-    },
-    "@babel/plugin-syntax-top-level-await": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
-      "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
-      "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.14.5"
-      }
-    },
-    "@babel/plugin-syntax-typescript": {
-      "version": "7.22.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz",
-      "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==",
-      "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.22.5"
-      }
-    },
-    "@babel/template": {
-      "version": "7.22.15",
-      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz",
-      "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==",
-      "dev": true,
-      "requires": {
-        "@babel/code-frame": "^7.22.13",
-        "@babel/parser": "^7.22.15",
-        "@babel/types": "^7.22.15"
-      }
-    },
-    "@babel/traverse": {
-      "version": "7.23.2",
-      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz",
-      "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==",
-      "dev": true,
-      "requires": {
-        "@babel/code-frame": "^7.22.13",
-        "@babel/generator": "^7.23.0",
-        "@babel/helper-environment-visitor": "^7.22.20",
-        "@babel/helper-function-name": "^7.23.0",
-        "@babel/helper-hoist-variables": "^7.22.5",
-        "@babel/helper-split-export-declaration": "^7.22.6",
-        "@babel/parser": "^7.23.0",
-        "@babel/types": "^7.23.0",
-        "debug": "^4.1.0",
-        "globals": "^11.1.0"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "4.3.4",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
-          "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
-          "dev": true,
-          "requires": {
-            "ms": "2.1.2"
-          }
-        },
-        "globals": {
-          "version": "11.12.0",
-          "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
-          "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
-          "dev": true
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-          "dev": true
-        }
-      }
-    },
-    "@babel/types": {
-      "version": "7.23.0",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz",
-      "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==",
-      "dev": true,
-      "requires": {
-        "@babel/helper-string-parser": "^7.22.5",
-        "@babel/helper-validator-identifier": "^7.22.20",
-        "to-fast-properties": "^2.0.0"
-      }
-    },
-    "@bcoe/v8-coverage": {
-      "version": "0.2.3",
-      "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz",
-      "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
-      "dev": true
-    },
-    "@braintree/sanitize-url": {
-      "version": "6.0.2",
-      "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-6.0.2.tgz",
-      "integrity": "sha512-Tbsj02wXCbqGmzdnXNk0SOF19ChhRU70BsroIi4Pm6Ehp56in6vch94mfbdQ17DozxkL3BAVjbZ4Qc1a0HFRAg=="
-    },
-    "@bufbuild/protobuf": {
-      "version": "1.7.2",
-      "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-1.7.2.tgz",
-      "integrity": "sha512-i5GE2Dk5ekdlK1TR7SugY4LWRrKSfb5T1Qn4unpIMbfxoeGKERKQ59HG3iYewacGD10SR7UzevfPnh6my4tNmQ==",
-      "dev": true,
-      "peer": true
-    },
-    "@csstools/css-parser-algorithms": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.3.1.tgz",
-      "integrity": "sha512-xrvsmVUtefWMWQsGgFffqWSK03pZ1vfDki4IVIIUxxDKnGBzqNgv0A7SB1oXtVNEkcVO8xi1ZrTL29HhSu5kGA==",
-      "dev": true,
-      "requires": {}
-    },
-    "@csstools/css-tokenizer": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.0.tgz",
-      "integrity": "sha512-wErmsWCbsmig8sQKkM6pFhr/oPha1bHfvxsUY5CYSQxwyhA9Ulrs8EqCgClhg4Tgg2XapVstGqSVcz0xOYizZA==",
-      "dev": true
-    },
-    "@csstools/media-query-list-parser": {
-      "version": "2.1.4",
-      "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.4.tgz",
-      "integrity": "sha512-V/OUXYX91tAC1CDsiY+HotIcJR+vPtzrX8pCplCpT++i8ThZZsq5F5dzZh/bDM3WUOjrvC1ljed1oSJxMfjqhw==",
-      "dev": true,
-      "requires": {}
-    },
-    "@csstools/selector-specificity": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.0.tgz",
-      "integrity": "sha512-hBI9tfBtuPIi885ZsZ32IMEU/5nlZH/KOVYJCOh7gyMxaVLGmLedYqFN6Ui1LXkI8JlC8IsuC0rF0btcRZKd5g==",
-      "dev": true,
-      "requires": {}
-    },
-    "@default/anchor-js": {
-      "version": "npm:anchor-js@5.0.0",
-      "resolved": "https://registry.npmjs.org/anchor-js/-/anchor-js-5.0.0.tgz",
-      "integrity": "sha512-2bOqCsBIXAYhjAN3iI4QevoAJtB2gRWAiY9P3P7CVW8lIjA3Dl6ldhDlWeeQvCHif+V5vIndfLOag/5I8tzTzA=="
-    },
-    "@default/bootstrap": {
-      "version": "npm:bootstrap@3.4.1",
-      "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-3.4.1.tgz",
-      "integrity": "sha512-yN5oZVmRCwe5aKwzRj6736nSmKDX7pLYwsXiCj/EYmo16hODaBiT4En5btW/jhBF/seV+XMx3aYwukYC3A49DA=="
-    },
-    "@default/highlight.js": {
-      "version": "npm:highlight.js@11.8.0",
-      "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.8.0.tgz",
-      "integrity": "sha512-MedQhoqVdr0U6SSnWPzfiadUcDHfN/Wzq25AkXiQv9oiOO/sG0S7XkvpFIqWBl9Yq1UYyYOOVORs5UW2XlPyzg=="
-    },
-    "@default/lunr": {
-      "version": "npm:lunr@2.3.9",
-      "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz",
-      "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow=="
-    },
-    "@default/mark.js": {
-      "version": "npm:mark.js@8.11.1",
-      "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz",
-      "integrity": "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ=="
-    },
-    "@default/twbs-pagination": {
-      "version": "git+ssh://git@github.com/josecebe/twbs-pagination.git#a0ceda4b492030ca12081ce08c1acca1d295c0ed",
-      "from": "@default/twbs-pagination@josecebe/twbs-pagination#1.3.1",
-      "requires": {
-        "jquery": ">=1.7.0"
-      }
-    },
-    "@default/url": {
-      "version": "npm:@websanova/url@2.6.3",
-      "resolved": "https://registry.npmjs.org/@websanova/url/-/url-2.6.3.tgz",
-      "integrity": "sha512-+gLI+9nIVPg3X4VcC30MUrGd9/DmYPla2ryzl7qKzIbH07wgsgy99H2WRsSFweVgV4FLkTHEpClj1//t0u+FLw=="
-    },
-    "@esbuild/aix-ppc64": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz",
-      "integrity": "sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==",
-      "dev": true,
-      "optional": true
-    },
-    "@esbuild/android-arm": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.1.tgz",
-      "integrity": "sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==",
-      "dev": true,
-      "optional": true
-    },
-    "@esbuild/android-arm64": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz",
-      "integrity": "sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==",
-      "dev": true,
-      "optional": true
-    },
-    "@esbuild/android-x64": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.1.tgz",
-      "integrity": "sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==",
-      "dev": true,
-      "optional": true
-    },
-    "@esbuild/darwin-arm64": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz",
-      "integrity": "sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==",
-      "dev": true,
-      "optional": true
-    },
-    "@esbuild/darwin-x64": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz",
-      "integrity": "sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==",
-      "dev": true,
-      "optional": true
-    },
-    "@esbuild/freebsd-arm64": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz",
-      "integrity": "sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==",
-      "dev": true,
-      "optional": true
-    },
-    "@esbuild/freebsd-x64": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz",
-      "integrity": "sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==",
-      "dev": true,
-      "optional": true
-    },
-    "@esbuild/linux-arm": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz",
-      "integrity": "sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==",
-      "dev": true,
-      "optional": true
-    },
-    "@esbuild/linux-arm64": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz",
-      "integrity": "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==",
-      "dev": true,
-      "optional": true
-    },
-    "@esbuild/linux-ia32": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz",
-      "integrity": "sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==",
-      "dev": true,
-      "optional": true
-    },
-    "@esbuild/linux-loong64": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz",
-      "integrity": "sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==",
-      "dev": true,
-      "optional": true
-    },
-    "@esbuild/linux-mips64el": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz",
-      "integrity": "sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==",
-      "dev": true,
-      "optional": true
-    },
-    "@esbuild/linux-ppc64": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz",
-      "integrity": "sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==",
-      "dev": true,
-      "optional": true
-    },
-    "@esbuild/linux-riscv64": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz",
-      "integrity": "sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==",
-      "dev": true,
-      "optional": true
-    },
-    "@esbuild/linux-s390x": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz",
-      "integrity": "sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==",
-      "dev": true,
-      "optional": true
-    },
-    "@esbuild/linux-x64": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz",
-      "integrity": "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==",
-      "dev": true,
-      "optional": true
-    },
-    "@esbuild/netbsd-x64": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz",
-      "integrity": "sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==",
-      "dev": true,
-      "optional": true
-    },
-    "@esbuild/openbsd-arm64": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz",
-      "integrity": "sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==",
-      "dev": true,
-      "optional": true
-    },
-    "@esbuild/openbsd-x64": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz",
-      "integrity": "sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==",
-      "dev": true,
-      "optional": true
-    },
-    "@esbuild/sunos-x64": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz",
-      "integrity": "sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==",
-      "dev": true,
-      "optional": true
-    },
-    "@esbuild/win32-arm64": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz",
-      "integrity": "sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==",
-      "dev": true,
-      "optional": true
-    },
-    "@esbuild/win32-ia32": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz",
-      "integrity": "sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==",
-      "dev": true,
-      "optional": true
-    },
-    "@esbuild/win32-x64": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz",
-      "integrity": "sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==",
-      "dev": true,
-      "optional": true
-    },
-    "@eslint-community/eslint-utils": {
-      "version": "4.4.0",
-      "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
-      "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
-      "dev": true,
-      "requires": {
-        "eslint-visitor-keys": "^3.3.0"
-      }
-    },
-    "@eslint-community/regexpp": {
-      "version": "4.10.0",
-      "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz",
-      "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==",
-      "dev": true
-    },
-    "@eslint/eslintrc": {
-      "version": "2.1.4",
-      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
-      "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
-      "dev": true,
-      "requires": {
-        "ajv": "^6.12.4",
-        "debug": "^4.3.2",
-        "espree": "^9.6.0",
-        "globals": "^13.19.0",
-        "ignore": "^5.2.0",
-        "import-fresh": "^3.2.1",
-        "js-yaml": "^4.1.0",
-        "minimatch": "^3.1.2",
-        "strip-json-comments": "^3.1.1"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "4.3.4",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
-          "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
-          "dev": true,
-          "requires": {
-            "ms": "2.1.2"
-          }
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-          "dev": true
-        }
-      }
-    },
-    "@eslint/js": {
-      "version": "8.57.0",
-      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz",
-      "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==",
-      "dev": true
-    },
-    "@humanwhocodes/config-array": {
-      "version": "0.11.14",
-      "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz",
-      "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==",
-      "dev": true,
-      "requires": {
-        "@humanwhocodes/object-schema": "^2.0.2",
-        "debug": "^4.3.1",
-        "minimatch": "^3.0.5"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "4.3.4",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
-          "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
-          "dev": true,
-          "requires": {
-            "ms": "2.1.2"
-          }
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-          "dev": true
-        }
-      }
-    },
-    "@humanwhocodes/module-importer": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
-      "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
-      "dev": true
-    },
-    "@humanwhocodes/object-schema": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz",
-      "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==",
-      "dev": true
-    },
-    "@istanbuljs/load-nyc-config": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
-      "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==",
-      "dev": true,
-      "requires": {
-        "camelcase": "^5.3.1",
-        "find-up": "^4.1.0",
-        "get-package-type": "^0.1.0",
-        "js-yaml": "^3.13.1",
-        "resolve-from": "^5.0.0"
-      },
-      "dependencies": {
-        "argparse": {
-          "version": "1.0.10",
-          "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
-          "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
-          "dev": true,
-          "requires": {
-            "sprintf-js": "~1.0.2"
-          }
-        },
-        "find-up": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
-          "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
-          "dev": true,
-          "requires": {
-            "locate-path": "^5.0.0",
-            "path-exists": "^4.0.0"
-          }
-        },
-        "js-yaml": {
-          "version": "3.14.1",
-          "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
-          "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
-          "dev": true,
-          "requires": {
-            "argparse": "^1.0.7",
-            "esprima": "^4.0.0"
-          }
-        },
-        "locate-path": {
-          "version": "5.0.0",
-          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
-          "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
-          "dev": true,
-          "requires": {
-            "p-locate": "^4.1.0"
-          }
-        },
-        "p-limit": {
-          "version": "2.3.0",
-          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
-          "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
-          "dev": true,
-          "requires": {
-            "p-try": "^2.0.0"
-          }
-        },
-        "p-locate": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
-          "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
-          "dev": true,
-          "requires": {
-            "p-limit": "^2.2.0"
-          }
-        },
-        "resolve-from": {
-          "version": "5.0.0",
-          "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
-          "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
-          "dev": true
-        }
-      }
-    },
-    "@istanbuljs/schema": {
-      "version": "0.1.3",
-      "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
-      "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
-      "dev": true
-    },
-    "@jest/console": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz",
-      "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==",
-      "dev": true,
-      "requires": {
-        "@jest/types": "^29.6.3",
-        "@types/node": "*",
-        "chalk": "^4.0.0",
-        "jest-message-util": "^29.7.0",
-        "jest-util": "^29.7.0",
-        "slash": "^3.0.0"
-      }
-    },
-    "@jest/core": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz",
-      "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==",
-      "dev": true,
-      "requires": {
-        "@jest/console": "^29.7.0",
-        "@jest/reporters": "^29.7.0",
-        "@jest/test-result": "^29.7.0",
-        "@jest/transform": "^29.7.0",
-        "@jest/types": "^29.6.3",
-        "@types/node": "*",
-        "ansi-escapes": "^4.2.1",
-        "chalk": "^4.0.0",
-        "ci-info": "^3.2.0",
-        "exit": "^0.1.2",
-        "graceful-fs": "^4.2.9",
-        "jest-changed-files": "^29.7.0",
-        "jest-config": "^29.7.0",
-        "jest-haste-map": "^29.7.0",
-        "jest-message-util": "^29.7.0",
-        "jest-regex-util": "^29.6.3",
-        "jest-resolve": "^29.7.0",
-        "jest-resolve-dependencies": "^29.7.0",
-        "jest-runner": "^29.7.0",
-        "jest-runtime": "^29.7.0",
-        "jest-snapshot": "^29.7.0",
-        "jest-util": "^29.7.0",
-        "jest-validate": "^29.7.0",
-        "jest-watcher": "^29.7.0",
-        "micromatch": "^4.0.4",
-        "pretty-format": "^29.7.0",
-        "slash": "^3.0.0",
-        "strip-ansi": "^6.0.0"
-      }
-    },
-    "@jest/environment": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz",
-      "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==",
-      "dev": true,
-      "requires": {
-        "@jest/fake-timers": "^29.7.0",
-        "@jest/types": "^29.6.3",
-        "@types/node": "*",
-        "jest-mock": "^29.7.0"
-      }
-    },
-    "@jest/expect": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz",
-      "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==",
-      "dev": true,
-      "requires": {
-        "expect": "^29.7.0",
-        "jest-snapshot": "^29.7.0"
-      }
-    },
-    "@jest/expect-utils": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz",
-      "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==",
-      "dev": true,
-      "requires": {
-        "jest-get-type": "^29.6.3"
-      }
-    },
-    "@jest/fake-timers": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz",
-      "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==",
-      "dev": true,
-      "requires": {
-        "@jest/types": "^29.6.3",
-        "@sinonjs/fake-timers": "^10.0.2",
-        "@types/node": "*",
-        "jest-message-util": "^29.7.0",
-        "jest-mock": "^29.7.0",
-        "jest-util": "^29.7.0"
-      }
-    },
-    "@jest/globals": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz",
-      "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==",
-      "dev": true,
-      "requires": {
-        "@jest/environment": "^29.7.0",
-        "@jest/expect": "^29.7.0",
-        "@jest/types": "^29.6.3",
-        "jest-mock": "^29.7.0"
-      }
-    },
-    "@jest/reporters": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz",
-      "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==",
-      "dev": true,
-      "requires": {
-        "@bcoe/v8-coverage": "^0.2.3",
-        "@jest/console": "^29.7.0",
-        "@jest/test-result": "^29.7.0",
-        "@jest/transform": "^29.7.0",
-        "@jest/types": "^29.6.3",
-        "@jridgewell/trace-mapping": "^0.3.18",
-        "@types/node": "*",
-        "chalk": "^4.0.0",
-        "collect-v8-coverage": "^1.0.0",
-        "exit": "^0.1.2",
-        "glob": "^7.1.3",
-        "graceful-fs": "^4.2.9",
-        "istanbul-lib-coverage": "^3.0.0",
-        "istanbul-lib-instrument": "^6.0.0",
-        "istanbul-lib-report": "^3.0.0",
-        "istanbul-lib-source-maps": "^4.0.0",
-        "istanbul-reports": "^3.1.3",
-        "jest-message-util": "^29.7.0",
-        "jest-util": "^29.7.0",
-        "jest-worker": "^29.7.0",
-        "slash": "^3.0.0",
-        "string-length": "^4.0.1",
-        "strip-ansi": "^6.0.0",
-        "v8-to-istanbul": "^9.0.1"
-      },
-      "dependencies": {
-        "istanbul-lib-instrument": {
-          "version": "6.0.0",
-          "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.0.tgz",
-          "integrity": "sha512-x58orMzEVfzPUKqlbLd1hXCnySCxKdDKa6Rjg97CwuLLRI4g3FHTdnExu1OqffVFay6zeMW+T6/DowFLndWnIw==",
-          "dev": true,
-          "requires": {
-            "@babel/core": "^7.12.3",
-            "@babel/parser": "^7.14.7",
-            "@istanbuljs/schema": "^0.1.2",
-            "istanbul-lib-coverage": "^3.2.0",
-            "semver": "^7.5.4"
-          }
-        }
-      }
-    },
-    "@jest/schemas": {
-      "version": "29.6.3",
-      "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz",
-      "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==",
-      "dev": true,
-      "requires": {
-        "@sinclair/typebox": "^0.27.8"
-      }
-    },
-    "@jest/source-map": {
-      "version": "29.6.3",
-      "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz",
-      "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==",
-      "dev": true,
-      "requires": {
-        "@jridgewell/trace-mapping": "^0.3.18",
-        "callsites": "^3.0.0",
-        "graceful-fs": "^4.2.9"
-      }
-    },
-    "@jest/test-result": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz",
-      "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==",
-      "dev": true,
-      "requires": {
-        "@jest/console": "^29.7.0",
-        "@jest/types": "^29.6.3",
-        "@types/istanbul-lib-coverage": "^2.0.0",
-        "collect-v8-coverage": "^1.0.0"
-      }
-    },
-    "@jest/test-sequencer": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz",
-      "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==",
-      "dev": true,
-      "requires": {
-        "@jest/test-result": "^29.7.0",
-        "graceful-fs": "^4.2.9",
-        "jest-haste-map": "^29.7.0",
-        "slash": "^3.0.0"
-      }
-    },
-    "@jest/transform": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz",
-      "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==",
-      "dev": true,
-      "requires": {
-        "@babel/core": "^7.11.6",
-        "@jest/types": "^29.6.3",
-        "@jridgewell/trace-mapping": "^0.3.18",
-        "babel-plugin-istanbul": "^6.1.1",
-        "chalk": "^4.0.0",
-        "convert-source-map": "^2.0.0",
-        "fast-json-stable-stringify": "^2.1.0",
-        "graceful-fs": "^4.2.9",
-        "jest-haste-map": "^29.7.0",
-        "jest-regex-util": "^29.6.3",
-        "jest-util": "^29.7.0",
-        "micromatch": "^4.0.4",
-        "pirates": "^4.0.4",
-        "slash": "^3.0.0",
-        "write-file-atomic": "^4.0.2"
-      },
-      "dependencies": {
-        "write-file-atomic": {
-          "version": "4.0.2",
-          "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz",
-          "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==",
-          "dev": true,
-          "requires": {
-            "imurmurhash": "^0.1.4",
-            "signal-exit": "^3.0.7"
-          }
-        }
-      }
-    },
-    "@jest/types": {
-      "version": "29.6.3",
-      "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
-      "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
-      "dev": true,
-      "requires": {
-        "@jest/schemas": "^29.6.3",
-        "@types/istanbul-lib-coverage": "^2.0.0",
-        "@types/istanbul-reports": "^3.0.0",
-        "@types/node": "*",
-        "@types/yargs": "^17.0.8",
-        "chalk": "^4.0.0"
-      }
-    },
-    "@jridgewell/gen-mapping": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz",
-      "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==",
-      "dev": true,
-      "requires": {
-        "@jridgewell/set-array": "^1.0.0",
-        "@jridgewell/sourcemap-codec": "^1.4.10"
-      }
-    },
-    "@jridgewell/resolve-uri": {
+    "node_modules/@types/d3-path": {
       "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
-      "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
-      "dev": true
-    },
-    "@jridgewell/set-array": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
-      "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
-      "dev": true
-    },
-    "@jridgewell/sourcemap-codec": {
-      "version": "1.4.14",
-      "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
-      "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==",
-      "dev": true
-    },
-    "@jridgewell/trace-mapping": {
-      "version": "0.3.18",
-      "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz",
-      "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==",
-      "dev": true,
-      "requires": {
-        "@jridgewell/resolve-uri": "3.1.0",
-        "@jridgewell/sourcemap-codec": "1.4.14"
-      }
-    },
-    "@nodelib/fs.scandir": {
-      "version": "2.1.5",
-      "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
-      "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
-      "dev": true,
-      "requires": {
-        "@nodelib/fs.stat": "2.0.5",
-        "run-parallel": "^1.1.9"
-      }
-    },
-    "@nodelib/fs.stat": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
-      "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
-      "dev": true
-    },
-    "@nodelib/fs.walk": {
-      "version": "1.2.8",
-      "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
-      "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
-      "dev": true,
-      "requires": {
-        "@nodelib/fs.scandir": "2.1.5",
-        "fastq": "^1.6.0"
-      }
-    },
-    "@popperjs/core": {
-      "version": "2.11.8",
-      "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz",
-      "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==",
-      "peer": true
+      "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.0.tgz",
+      "integrity": "sha512-P2dlU/q51fkOc/Gfl3Ul9kicV7l+ra934qBFXCFhrZMOL6du1TM0pm1ThYvENukyOn5h9v+yMJ9Fn5JK4QozrQ=="
     },
-    "@sinclair/typebox": {
-      "version": "0.27.8",
-      "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz",
-      "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==",
-      "dev": true
-    },
-    "@sinonjs/commons": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz",
-      "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==",
-      "dev": true,
-      "requires": {
-        "type-detect": "4.0.8"
-      }
+    "node_modules/@types/d3-polygon": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/@types/d3-polygon/-/d3-polygon-3.0.2.tgz",
+      "integrity": "sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA=="
     },
-    "@sinonjs/fake-timers": {
-      "version": "10.3.0",
-      "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz",
-      "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==",
-      "dev": true,
-      "requires": {
-        "@sinonjs/commons": "^3.0.0"
-      }
+    "node_modules/@types/d3-quadtree": {
+      "version": "3.0.6",
+      "resolved": "https://registry.npmjs.org/@types/d3-quadtree/-/d3-quadtree-3.0.6.tgz",
+      "integrity": "sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg=="
     },
-    "@socket.io/component-emitter": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz",
-      "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==",
-      "dev": true
+    "node_modules/@types/d3-random": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/@types/d3-random/-/d3-random-3.0.3.tgz",
+      "integrity": "sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ=="
     },
-    "@types/babel__core": {
-      "version": "7.20.1",
-      "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz",
-      "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==",
-      "dev": true,
-      "requires": {
-        "@babel/parser": "^7.20.7",
-        "@babel/types": "^7.20.7",
-        "@types/babel__generator": "*",
-        "@types/babel__template": "*",
-        "@types/babel__traverse": "*"
+    "node_modules/@types/d3-scale": {
+      "version": "4.0.8",
+      "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.8.tgz",
+      "integrity": "sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ==",
+      "dependencies": {
+        "@types/d3-time": "*"
       }
     },
-    "@types/babel__generator": {
-      "version": "7.6.4",
-      "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz",
-      "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==",
-      "dev": true,
-      "requires": {
-        "@babel/types": "^7.0.0"
-      }
+    "node_modules/@types/d3-scale-chromatic": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.0.3.tgz",
+      "integrity": "sha512-laXM4+1o5ImZv3RpFAsTRn3TEkzqkytiOY0Dz0sq5cnd1dtNlk6sHLon4OvqaiJb28T0S/TdsBI3Sjsy+keJrw=="
     },
-    "@types/babel__template": {
-      "version": "7.4.1",
-      "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz",
-      "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==",
-      "dev": true,
-      "requires": {
-        "@babel/parser": "^7.1.0",
-        "@babel/types": "^7.0.0"
-      }
+    "node_modules/@types/d3-selection": {
+      "version": "3.0.11",
+      "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.11.tgz",
+      "integrity": "sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w=="
     },
-    "@types/babel__traverse": {
-      "version": "7.20.1",
-      "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz",
-      "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==",
-      "dev": true,
-      "requires": {
-        "@babel/types": "^7.20.7"
+    "node_modules/@types/d3-shape": {
+      "version": "3.1.6",
+      "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.6.tgz",
+      "integrity": "sha512-5KKk5aKGu2I+O6SONMYSNflgiP0WfZIQvVUMan50wHsLG1G94JlxEVnCpQARfTtzytuY0p/9PXXZb3I7giofIA==",
+      "dependencies": {
+        "@types/d3-path": "*"
       }
     },
-    "@types/cookie": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz",
-      "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==",
-      "dev": true
-    },
-    "@types/cors": {
-      "version": "2.8.17",
-      "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz",
-      "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==",
-      "dev": true,
-      "requires": {
-        "@types/node": "*"
-      }
+    "node_modules/@types/d3-time": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.3.tgz",
+      "integrity": "sha512-2p6olUZ4w3s+07q3Tm2dbiMZy5pCDfYwtLXXHUnVzXgQlZ/OyPtUz6OL382BkOuGlLXqfT+wqv8Fw2v8/0geBw=="
     },
-    "@types/d3-scale": {
+    "node_modules/@types/d3-time-format": {
       "version": "4.0.3",
-      "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.3.tgz",
-      "integrity": "sha512-PATBiMCpvHJSMtZAMEhc2WyL+hnzarKzI6wAHYjhsonjWJYGq5BXTzQjv4l8m2jO183/4wZ90rKvSeT7o72xNQ==",
-      "requires": {
-        "@types/d3-time": "*"
-      }
-    },
-    "@types/d3-scale-chromatic": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz",
-      "integrity": "sha512-dsoJGEIShosKVRBZB0Vo3C8nqSDqVGujJU6tPznsBJxNJNwMF8utmS83nvCBKQYPpjCzaaHcrf66iTRpZosLPw=="
-    },
-    "@types/d3-time": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.0.tgz",
-      "integrity": "sha512-sZLCdHvBUcNby1cB6Fd3ZBrABbjz3v1Vm90nysCQ6Vt7vd6e/h9Lt7SiJUoEX0l4Dzc7P5llKyhqSi1ycSf1Hg=="
+      "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-4.0.3.tgz",
+      "integrity": "sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg=="
     },
-    "@types/debug": {
-      "version": "4.1.8",
-      "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.8.tgz",
-      "integrity": "sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==",
-      "requires": {
-        "@types/ms": "*"
-      }
+    "node_modules/@types/d3-timer": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz",
+      "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw=="
     },
-    "@types/graceful-fs": {
-      "version": "4.1.6",
-      "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz",
-      "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==",
-      "dev": true,
-      "requires": {
-        "@types/node": "*"
+    "node_modules/@types/d3-transition": {
+      "version": "3.0.9",
+      "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.9.tgz",
+      "integrity": "sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==",
+      "dependencies": {
+        "@types/d3-selection": "*"
       }
     },
-    "@types/istanbul-lib-coverage": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz",
-      "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==",
-      "dev": true
-    },
-    "@types/istanbul-lib-report": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
-      "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==",
-      "dev": true,
-      "requires": {
-        "@types/istanbul-lib-coverage": "*"
+    "node_modules/@types/d3-zoom": {
+      "version": "3.0.8",
+      "resolved": "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-3.0.8.tgz",
+      "integrity": "sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==",
+      "dependencies": {
+        "@types/d3-interpolate": "*",
+        "@types/d3-selection": "*"
       }
     },
-    "@types/istanbul-reports": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz",
-      "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==",
-      "dev": true,
-      "requires": {
-        "@types/istanbul-lib-report": "*"
+    "node_modules/@types/dompurify": {
+      "version": "3.0.5",
+      "resolved": "https://registry.npmjs.org/@types/dompurify/-/dompurify-3.0.5.tgz",
+      "integrity": "sha512-1Wg0g3BtQF7sSb27fJQAKck1HECM6zV1EB66j8JH9i3LCjYabJa0FSdiSgsD5K/RbrsR0SiraKacLB+T8ZVYAg==",
+      "dependencies": {
+        "@types/trusted-types": "*"
       }
     },
-    "@types/jest": {
-      "version": "29.5.12",
-      "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.12.tgz",
-      "integrity": "sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==",
-      "dev": true,
-      "requires": {
-        "expect": "^29.0.0",
-        "pretty-format": "^29.0.0"
-      }
+    "node_modules/@types/geojson": {
+      "version": "7946.0.14",
+      "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.14.tgz",
+      "integrity": "sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg=="
     },
-    "@types/json5": {
+    "node_modules/@types/json5": {
       "version": "0.0.29",
       "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
       "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
       "dev": true,
       "peer": true
     },
-    "@types/lunr": {
+    "node_modules/@types/lunr": {
       "version": "2.3.7",
       "resolved": "https://registry.npmjs.org/@types/lunr/-/lunr-2.3.7.tgz",
       "integrity": "sha512-Tb/kUm38e8gmjahQzdCKhbdsvQ9/ppzHFfsJ0dMs3ckqQsRj+P5IkSAwFTBrBxdyr3E/LoMUUrZngjDYAjiE3A==",
       "dev": true
     },
-    "@types/mdast": {
-      "version": "3.0.11",
-      "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.11.tgz",
-      "integrity": "sha512-Y/uImid8aAwrEA24/1tcRZwpxX3pIFTSilcNDKSPn+Y2iDywSEachzRuvgAYYLR3wpGXAsMbv5lvKLDZLeYPAw==",
-      "requires": {
-        "@types/unist": "*"
-      }
-    },
-    "@types/minimist": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz",
-      "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==",
-      "dev": true
-    },
-    "@types/ms": {
-      "version": "0.7.31",
-      "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz",
-      "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA=="
-    },
-    "@types/node": {
-      "version": "18.14.0",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.0.tgz",
-      "integrity": "sha512-5EWrvLmglK+imbCJY0+INViFWUHg1AHel1sq4ZVSfdcNqGy9Edv3UB9IIzzg+xPaUcAgZYcfVs2fBcwDeZzU0A==",
-      "dev": true
-    },
-    "@types/normalize-package-data": {
-      "version": "2.4.1",
-      "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz",
-      "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==",
-      "dev": true
-    },
-    "@types/stack-utils": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz",
-      "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==",
-      "dev": true
-    },
-    "@types/trusted-types": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.3.tgz",
-      "integrity": "sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g=="
-    },
-    "@types/unist": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz",
-      "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ=="
-    },
-    "@types/yargs": {
-      "version": "17.0.22",
-      "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
-      "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+    "node_modules/@types/node": {
+      "version": "22.7.7",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.7.tgz",
+      "integrity": "sha512-SRxCrrg9CL/y54aiMCG3edPKdprgMVGDXjA3gB8UmmBW5TcXzRUYAh8EWzTnSJFAd1rgImPELza+A3bJ+qxz8Q==",
       "dev": true,
-      "requires": {
-        "@types/yargs-parser": "*"
+      "dependencies": {
+        "undici-types": "~6.19.2"
       }
     },
-    "@types/yargs-parser": {
-      "version": "21.0.0",
-      "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz",
-      "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==",
-      "dev": true
+    "node_modules/@types/trusted-types": {
+      "version": "2.0.7",
+      "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz",
+      "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw=="
     },
-    "@typescript-eslint/eslint-plugin": {
-      "version": "8.4.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.4.0.tgz",
-      "integrity": "sha512-rg8LGdv7ri3oAlenMACk9e+AR4wUV0yrrG+XKsGKOK0EVgeEDqurkXMPILG2836fW4ibokTB5v4b6Z9+GYQDEw==",
+    "node_modules/@typescript-eslint/eslint-plugin": {
+      "version": "8.12.2",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.12.2.tgz",
+      "integrity": "sha512-gQxbxM8mcxBwaEmWdtLCIGLfixBMHhQjBqR8sVWNTPpcj45WlYL2IObS/DNMLH1DBP0n8qz+aiiLTGfopPEebw==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "@eslint-community/regexpp": "^4.10.0",
-        "@typescript-eslint/scope-manager": "8.4.0",
-        "@typescript-eslint/type-utils": "8.4.0",
-        "@typescript-eslint/utils": "8.4.0",
-        "@typescript-eslint/visitor-keys": "8.4.0",
+        "@typescript-eslint/scope-manager": "8.12.2",
+        "@typescript-eslint/type-utils": "8.12.2",
+        "@typescript-eslint/utils": "8.12.2",
+        "@typescript-eslint/visitor-keys": "8.12.2",
         "graphemer": "^1.4.0",
         "ignore": "^5.3.1",
         "natural-compare": "^1.4.0",
         "ts-api-utils": "^1.3.0"
+      },
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      },
+      "peerDependencies": {
+        "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0",
+        "eslint": "^8.57.0 || ^9.0.0"
+      },
+      "peerDependenciesMeta": {
+        "typescript": {
+          "optional": true
+        }
       }
     },
-    "@typescript-eslint/parser": {
-      "version": "8.4.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.4.0.tgz",
-      "integrity": "sha512-NHgWmKSgJk5K9N16GIhQ4jSobBoJwrmURaLErad0qlLjrpP5bECYg+wxVTGlGZmJbU03jj/dfnb6V9bw+5icsA==",
+    "node_modules/@typescript-eslint/parser": {
+      "version": "8.12.2",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.12.2.tgz",
+      "integrity": "sha512-MrvlXNfGPLH3Z+r7Tk+Z5moZAc0dzdVjTgUgwsdGweH7lydysQsnSww3nAmsq8blFuRD5VRlAr9YdEFw3e6PBw==",
       "dev": true,
-      "requires": {
-        "@typescript-eslint/scope-manager": "8.4.0",
-        "@typescript-eslint/types": "8.4.0",
-        "@typescript-eslint/typescript-estree": "8.4.0",
-        "@typescript-eslint/visitor-keys": "8.4.0",
+      "dependencies": {
+        "@typescript-eslint/scope-manager": "8.12.2",
+        "@typescript-eslint/types": "8.12.2",
+        "@typescript-eslint/typescript-estree": "8.12.2",
+        "@typescript-eslint/visitor-keys": "8.12.2",
         "debug": "^4.3.4"
       },
-      "dependencies": {
-        "debug": {
-          "version": "4.3.4",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
-          "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
-          "dev": true,
-          "requires": {
-            "ms": "2.1.2"
-          }
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-          "dev": true
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      },
+      "peerDependencies": {
+        "eslint": "^8.57.0 || ^9.0.0"
+      },
+      "peerDependenciesMeta": {
+        "typescript": {
+          "optional": true
         }
       }
     },
-    "@typescript-eslint/scope-manager": {
-      "version": "8.4.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.4.0.tgz",
-      "integrity": "sha512-n2jFxLeY0JmKfUqy3P70rs6vdoPjHK8P/w+zJcV3fk0b0BwRXC/zxRTEnAsgYT7MwdQDt/ZEbtdzdVC+hcpF0A==",
+    "node_modules/@typescript-eslint/scope-manager": {
+      "version": "8.12.2",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.12.2.tgz",
+      "integrity": "sha512-gPLpLtrj9aMHOvxJkSbDBmbRuYdtiEbnvO25bCMza3DhMjTQw0u7Y1M+YR5JPbMsXXnSPuCf5hfq0nEkQDL/JQ==",
       "dev": true,
-      "requires": {
-        "@typescript-eslint/types": "8.4.0",
-        "@typescript-eslint/visitor-keys": "8.4.0"
+      "dependencies": {
+        "@typescript-eslint/types": "8.12.2",
+        "@typescript-eslint/visitor-keys": "8.12.2"
+      },
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
       }
     },
-    "@typescript-eslint/type-utils": {
-      "version": "8.4.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.4.0.tgz",
-      "integrity": "sha512-pu2PAmNrl9KX6TtirVOrbLPLwDmASpZhK/XU7WvoKoCUkdtq9zF7qQ7gna0GBZFN0hci0vHaSusiL2WpsQk37A==",
+    "node_modules/@typescript-eslint/type-utils": {
+      "version": "8.12.2",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.12.2.tgz",
+      "integrity": "sha512-bwuU4TAogPI+1q/IJSKuD4shBLc/d2vGcRT588q+jzayQyjVK2X6v/fbR4InY2U2sgf8MEvVCqEWUzYzgBNcGQ==",
       "dev": true,
-      "requires": {
-        "@typescript-eslint/typescript-estree": "8.4.0",
-        "@typescript-eslint/utils": "8.4.0",
+      "dependencies": {
+        "@typescript-eslint/typescript-estree": "8.12.2",
+        "@typescript-eslint/utils": "8.12.2",
         "debug": "^4.3.4",
         "ts-api-utils": "^1.3.0"
       },
-      "dependencies": {
-        "debug": {
-          "version": "4.3.6",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz",
-          "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==",
-          "dev": true,
-          "requires": {
-            "ms": "2.1.2"
-          }
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-          "dev": true
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      },
+      "peerDependenciesMeta": {
+        "typescript": {
+          "optional": true
         }
       }
     },
-    "@typescript-eslint/types": {
-      "version": "8.4.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.4.0.tgz",
-      "integrity": "sha512-T1RB3KQdskh9t3v/qv7niK6P8yvn7ja1mS7QK7XfRVL6wtZ8/mFs/FHf4fKvTA0rKnqnYxl/uHFNbnEt0phgbw==",
-      "dev": true
+    "node_modules/@typescript-eslint/types": {
+      "version": "8.12.2",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.12.2.tgz",
+      "integrity": "sha512-VwDwMF1SZ7wPBUZwmMdnDJ6sIFk4K4s+ALKLP6aIQsISkPv8jhiw65sAK6SuWODN/ix+m+HgbYDkH+zLjrzvOA==",
+      "dev": true,
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      }
     },
-    "@typescript-eslint/typescript-estree": {
-      "version": "8.4.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.4.0.tgz",
-      "integrity": "sha512-kJ2OIP4dQw5gdI4uXsaxUZHRwWAGpREJ9Zq6D5L0BweyOrWsL6Sz0YcAZGWhvKnH7fm1J5YFE1JrQL0c9dd53A==",
+    "node_modules/@typescript-eslint/typescript-estree": {
+      "version": "8.12.2",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.12.2.tgz",
+      "integrity": "sha512-mME5MDwGe30Pq9zKPvyduyU86PH7aixwqYR2grTglAdB+AN8xXQ1vFGpYaUSJ5o5P/5znsSBeNcs5g5/2aQwow==",
       "dev": true,
-      "requires": {
-        "@typescript-eslint/types": "8.4.0",
-        "@typescript-eslint/visitor-keys": "8.4.0",
+      "dependencies": {
+        "@typescript-eslint/types": "8.12.2",
+        "@typescript-eslint/visitor-keys": "8.12.2",
         "debug": "^4.3.4",
         "fast-glob": "^3.3.2",
         "is-glob": "^4.0.3",
@@ -12406,375 +1061,433 @@
         "semver": "^7.6.0",
         "ts-api-utils": "^1.3.0"
       },
-      "dependencies": {
-        "brace-expansion": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
-          "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
-          "dev": true,
-          "requires": {
-            "balanced-match": "^1.0.0"
-          }
-        },
-        "debug": {
-          "version": "4.3.6",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz",
-          "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==",
-          "dev": true,
-          "requires": {
-            "ms": "2.1.2"
-          }
-        },
-        "minimatch": {
-          "version": "9.0.5",
-          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
-          "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
-          "dev": true,
-          "requires": {
-            "brace-expansion": "^2.0.1"
-          }
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-          "dev": true
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      },
+      "peerDependenciesMeta": {
+        "typescript": {
+          "optional": true
         }
       }
     },
-    "@typescript-eslint/utils": {
-      "version": "8.4.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.4.0.tgz",
-      "integrity": "sha512-swULW8n1IKLjRAgciCkTCafyTHHfwVQFt8DovmaF69sKbOxTSFMmIZaSHjqO9i/RV0wIblaawhzvtva8Nmm7lQ==",
+    "node_modules/@typescript-eslint/utils": {
+      "version": "8.12.2",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.12.2.tgz",
+      "integrity": "sha512-UTTuDIX3fkfAz6iSVa5rTuSfWIYZ6ATtEocQ/umkRSyC9O919lbZ8dcH7mysshrCdrAM03skJOEYaBugxN+M6A==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "@eslint-community/eslint-utils": "^4.4.0",
-        "@typescript-eslint/scope-manager": "8.4.0",
-        "@typescript-eslint/types": "8.4.0",
-        "@typescript-eslint/typescript-estree": "8.4.0"
+        "@typescript-eslint/scope-manager": "8.12.2",
+        "@typescript-eslint/types": "8.12.2",
+        "@typescript-eslint/typescript-estree": "8.12.2"
+      },
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      },
+      "peerDependencies": {
+        "eslint": "^8.57.0 || ^9.0.0"
       }
     },
-    "@typescript-eslint/visitor-keys": {
-      "version": "8.4.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.4.0.tgz",
-      "integrity": "sha512-zTQD6WLNTre1hj5wp09nBIDiOc2U5r/qmzo7wxPn4ZgAjHql09EofqhF9WF+fZHzL5aCyaIpPcT2hyxl73kr9A==",
+    "node_modules/@typescript-eslint/visitor-keys": {
+      "version": "8.12.2",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.12.2.tgz",
+      "integrity": "sha512-PChz8UaKQAVNHghsHcPyx1OMHoFRUEA7rJSK/mDhdq85bk+PLsUHUBqTQTFt18VJZbmxBovM65fezlheQRsSDA==",
       "dev": true,
-      "requires": {
-        "@typescript-eslint/types": "8.4.0",
+      "dependencies": {
+        "@typescript-eslint/types": "8.12.2",
         "eslint-visitor-keys": "^3.4.3"
+      },
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
       }
     },
-    "@ungap/structured-clone": {
+    "node_modules/@ungap/structured-clone": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
       "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==",
       "dev": true
     },
-    "@websanova/url": {
+    "node_modules/@websanova/url": {
       "version": "2.6.3",
       "resolved": "https://registry.npmjs.org/@websanova/url/-/url-2.6.3.tgz",
       "integrity": "sha512-+gLI+9nIVPg3X4VcC30MUrGd9/DmYPla2ryzl7qKzIbH07wgsgy99H2WRsSFweVgV4FLkTHEpClj1//t0u+FLw=="
     },
-    "accepts": {
+    "node_modules/accepts": {
       "version": "1.3.8",
       "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
       "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "mime-types": "~2.1.34",
         "negotiator": "0.6.3"
+      },
+      "engines": {
+        "node": ">= 0.6"
       }
     },
-    "acorn": {
-      "version": "8.11.2",
-      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz",
-      "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==",
-      "dev": true
+    "node_modules/acorn": {
+      "version": "8.13.0",
+      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.13.0.tgz",
+      "integrity": "sha512-8zSiw54Oxrdym50NlZ9sUusyO1Z1ZchgRLWRaK6c86XJFClyCgFKetdowBg5bKxyp/u+CDBJG4Mpp0m3HLZl9w==",
+      "bin": {
+        "acorn": "bin/acorn"
+      },
+      "engines": {
+        "node": ">=0.4.0"
+      }
     },
-    "acorn-jsx": {
+    "node_modules/acorn-jsx": {
       "version": "5.3.2",
       "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
       "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
       "dev": true,
-      "requires": {}
+      "peerDependencies": {
+        "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+      }
     },
-    "ajv": {
+    "node_modules/ajv": {
       "version": "6.12.6",
       "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
       "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "fast-deep-equal": "^3.1.1",
         "fast-json-stable-stringify": "^2.0.0",
         "json-schema-traverse": "^0.4.1",
         "uri-js": "^4.2.2"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/epoberezkin"
       }
     },
-    "anchor-js": {
+    "node_modules/anchor-js": {
       "version": "5.0.0",
       "resolved": "https://registry.npmjs.org/anchor-js/-/anchor-js-5.0.0.tgz",
       "integrity": "sha512-2bOqCsBIXAYhjAN3iI4QevoAJtB2gRWAiY9P3P7CVW8lIjA3Dl6ldhDlWeeQvCHif+V5vIndfLOag/5I8tzTzA=="
     },
-    "ansi-escapes": {
-      "version": "4.3.2",
-      "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
-      "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
-      "dev": true,
-      "requires": {
-        "type-fest": "^0.21.3"
-      },
-      "dependencies": {
-        "type-fest": {
-          "version": "0.21.3",
-          "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
-          "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
-          "dev": true
-        }
-      }
-    },
-    "ansi-regex": {
+    "node_modules/ansi-regex": {
       "version": "5.0.1",
       "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
       "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
     },
-    "ansi-styles": {
+    "node_modules/ansi-styles": {
       "version": "4.3.0",
       "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
       "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "color-convert": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
       }
     },
-    "anymatch": {
+    "node_modules/anymatch": {
       "version": "3.1.3",
       "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
       "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "normalize-path": "^3.0.0",
         "picomatch": "^2.0.4"
+      },
+      "engines": {
+        "node": ">= 8"
       }
     },
-    "argparse": {
+    "node_modules/argparse": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
       "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
       "dev": true
     },
-    "array-includes": {
-      "version": "3.1.6",
-      "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz",
-      "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==",
+    "node_modules/array-buffer-byte-length": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz",
+      "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==",
       "dev": true,
       "peer": true,
-      "requires": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.4",
-        "es-abstract": "^1.20.4",
-        "get-intrinsic": "^1.1.3",
+      "dependencies": {
+        "call-bind": "^1.0.5",
+        "is-array-buffer": "^3.0.4"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/array-includes": {
+      "version": "3.1.8",
+      "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz",
+      "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "call-bind": "^1.0.7",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.23.2",
+        "es-object-atoms": "^1.0.0",
+        "get-intrinsic": "^1.2.4",
         "is-string": "^1.0.7"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "array-union": {
+    "node_modules/array-union": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
       "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
     },
-    "array.prototype.flat": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz",
-      "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==",
+    "node_modules/array.prototype.findlastindex": {
+      "version": "1.2.5",
+      "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz",
+      "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "call-bind": "^1.0.7",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.23.2",
+        "es-errors": "^1.3.0",
+        "es-object-atoms": "^1.0.0",
+        "es-shim-unscopables": "^1.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/array.prototype.flat": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz",
+      "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==",
       "dev": true,
       "peer": true,
-      "requires": {
+      "dependencies": {
         "call-bind": "^1.0.2",
-        "define-properties": "^1.1.4",
-        "es-abstract": "^1.20.4",
+        "define-properties": "^1.2.0",
+        "es-abstract": "^1.22.1",
         "es-shim-unscopables": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "array.prototype.flatmap": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz",
-      "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==",
+    "node_modules/array.prototype.flatmap": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz",
+      "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==",
       "dev": true,
       "peer": true,
-      "requires": {
+      "dependencies": {
         "call-bind": "^1.0.2",
-        "define-properties": "^1.1.4",
-        "es-abstract": "^1.20.4",
+        "define-properties": "^1.2.0",
+        "es-abstract": "^1.22.1",
         "es-shim-unscopables": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "arrify": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
-      "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==",
-      "dev": true
+    "node_modules/arraybuffer.prototype.slice": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz",
+      "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "array-buffer-byte-length": "^1.0.1",
+        "call-bind": "^1.0.5",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.22.3",
+        "es-errors": "^1.2.1",
+        "get-intrinsic": "^1.2.3",
+        "is-array-buffer": "^3.0.4",
+        "is-shared-array-buffer": "^1.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
     },
-    "astral-regex": {
+    "node_modules/astral-regex": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
       "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
     },
-    "async": {
+    "node_modules/async": {
       "version": "2.6.4",
       "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz",
       "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "lodash": "^4.17.14"
       }
     },
-    "async-each-series": {
+    "node_modules/async-each-series": {
       "version": "0.1.1",
       "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz",
       "integrity": "sha512-p4jj6Fws4Iy2m0iCmI2am2ZNZCgbdgE+P8F/8csmn2vx7ixXrO2zGcuNsD46X5uZSVecmkEy/M06X2vG8KD6dQ==",
-      "dev": true
-    },
-    "available-typed-arrays": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz",
-      "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==",
-      "dev": true,
-      "peer": true
-    },
-    "babel-jest": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz",
-      "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==",
-      "dev": true,
-      "requires": {
-        "@jest/transform": "^29.7.0",
-        "@types/babel__core": "^7.1.14",
-        "babel-plugin-istanbul": "^6.1.1",
-        "babel-preset-jest": "^29.6.3",
-        "chalk": "^4.0.0",
-        "graceful-fs": "^4.2.9",
-        "slash": "^3.0.0"
-      }
-    },
-    "babel-plugin-istanbul": {
-      "version": "6.1.1",
-      "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz",
-      "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==",
       "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.0.0",
-        "@istanbuljs/load-nyc-config": "^1.0.0",
-        "@istanbuljs/schema": "^0.1.2",
-        "istanbul-lib-instrument": "^5.0.4",
-        "test-exclude": "^6.0.0"
+      "engines": {
+        "node": ">=0.8.0"
       }
     },
-    "babel-plugin-jest-hoist": {
-      "version": "29.6.3",
-      "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz",
-      "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==",
+    "node_modules/available-typed-arrays": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
+      "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
       "dev": true,
-      "requires": {
-        "@babel/template": "^7.3.3",
-        "@babel/types": "^7.3.3",
-        "@types/babel__core": "^7.1.14",
-        "@types/babel__traverse": "^7.0.6"
+      "peer": true,
+      "dependencies": {
+        "possible-typed-array-names": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "babel-preset-current-node-syntax": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz",
-      "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==",
-      "dev": true,
-      "requires": {
-        "@babel/plugin-syntax-async-generators": "^7.8.4",
-        "@babel/plugin-syntax-bigint": "^7.8.3",
-        "@babel/plugin-syntax-class-properties": "^7.8.3",
-        "@babel/plugin-syntax-import-meta": "^7.8.3",
-        "@babel/plugin-syntax-json-strings": "^7.8.3",
-        "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3",
-        "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
-        "@babel/plugin-syntax-numeric-separator": "^7.8.3",
-        "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
-        "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
-        "@babel/plugin-syntax-optional-chaining": "^7.8.3",
-        "@babel/plugin-syntax-top-level-await": "^7.8.3"
-      }
-    },
-    "babel-preset-jest": {
-      "version": "29.6.3",
-      "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz",
-      "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==",
-      "dev": true,
-      "requires": {
-        "babel-plugin-jest-hoist": "^29.6.3",
-        "babel-preset-current-node-syntax": "^1.0.0"
-      }
-    },
-    "balanced-match": {
+    "node_modules/balanced-match": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
       "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
       "dev": true
     },
-    "base64id": {
+    "node_modules/base64id": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz",
       "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": "^4.5.0 || >= 5.9"
+      }
     },
-    "batch": {
+    "node_modules/batch": {
       "version": "0.6.1",
       "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
       "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==",
       "dev": true
     },
-    "binary-extensions": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
-      "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
-      "dev": true
+    "node_modules/binary-extensions": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
+      "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
     },
-    "bootstrap": {
+    "node_modules/bootstrap": {
       "version": "5.3.3",
       "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.3.tgz",
       "integrity": "sha512-8HLCdWgyoMguSO9o+aH+iuZ+aht+mzW0u3HIMzVu7Srrpv7EBBxTnrFlSCskwdY1+EOFQSm7uMJhNQHkdPcmjg==",
-      "requires": {}
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/twbs"
+        },
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/bootstrap"
+        }
+      ],
+      "peerDependencies": {
+        "@popperjs/core": "^2.11.8"
+      }
     },
-    "bootstrap-icons": {
+    "node_modules/bootstrap-icons": {
       "version": "1.11.3",
       "resolved": "https://registry.npmjs.org/bootstrap-icons/-/bootstrap-icons-1.11.3.tgz",
-      "integrity": "sha512-+3lpHrCw/it2/7lBL15VR0HEumaBss0+f/Lb6ZvHISn1mlK83jjFpooTLsMWbIjJMDjDjOExMsTxnXSIT4k4ww=="
+      "integrity": "sha512-+3lpHrCw/it2/7lBL15VR0HEumaBss0+f/Lb6ZvHISn1mlK83jjFpooTLsMWbIjJMDjDjOExMsTxnXSIT4k4ww==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/twbs"
+        },
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/bootstrap"
+        }
+      ]
     },
-    "brace-expansion": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+    "node_modules/brace-expansion": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+      "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
       "dev": true,
-      "requires": {
-        "balanced-match": "^1.0.0",
-        "concat-map": "0.0.1"
+      "dependencies": {
+        "balanced-match": "^1.0.0"
       }
     },
-    "braces": {
+    "node_modules/braces": {
       "version": "3.0.3",
       "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
       "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "fill-range": "^7.1.1"
+      },
+      "engines": {
+        "node": ">=8"
       }
     },
-    "browser-sync": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-3.0.2.tgz",
-      "integrity": "sha512-PC9c7aWJFVR4IFySrJxOqLwB9ENn3/TaXCXtAa0SzLwocLN3qMjN+IatbjvtCX92BjNXsY6YWg9Eb7F3Wy255g==",
+    "node_modules/browser-sync": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-3.0.3.tgz",
+      "integrity": "sha512-91hoBHKk1C4pGeD+oE9Ld222k2GNQEAsI5AElqR8iLLWNrmZR2LPP8B0h8dpld9u7kro5IEUB3pUb0DJ3n1cRQ==",
       "dev": true,
-      "requires": {
-        "browser-sync-client": "^3.0.2",
-        "browser-sync-ui": "^3.0.2",
+      "dependencies": {
+        "browser-sync-client": "^3.0.3",
+        "browser-sync-ui": "^3.0.3",
         "bs-recipes": "1.3.4",
         "chalk": "4.1.2",
         "chokidar": "^3.5.1",
@@ -12788,38 +1501,47 @@
         "fs-extra": "3.0.1",
         "http-proxy": "^1.18.1",
         "immutable": "^3",
-        "micromatch": "^4.0.2",
+        "micromatch": "^4.0.8",
         "opn": "5.3.0",
         "portscanner": "2.2.0",
         "raw-body": "^2.3.2",
         "resp-modifier": "6.0.2",
         "rx": "4.1.0",
-        "send": "0.16.2",
-        "serve-index": "1.9.1",
-        "serve-static": "1.13.2",
+        "send": "^0.19.0",
+        "serve-index": "^1.9.1",
+        "serve-static": "^1.16.2",
         "server-destroy": "1.0.1",
         "socket.io": "^4.4.1",
         "ua-parser-js": "^1.0.33",
         "yargs": "^17.3.1"
+      },
+      "bin": {
+        "browser-sync": "dist/bin.js"
+      },
+      "engines": {
+        "node": ">= 8.0.0"
       }
     },
-    "browser-sync-client": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-3.0.2.tgz",
-      "integrity": "sha512-tBWdfn9L0wd2Pjuz/NWHtNEKthVb1Y67vg8/qyGNtCqetNz5lkDkFnrsx5UhPNPYUO8vci50IWC/BhYaQskDiQ==",
+    "node_modules/browser-sync-client": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-3.0.3.tgz",
+      "integrity": "sha512-TOEXaMgYNjBYIcmX5zDlOdjEqCeCN/d7opf/fuyUD/hhGVCfP54iQIDhENCi012AqzYZm3BvuFl57vbwSTwkSQ==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "etag": "1.8.1",
         "fresh": "0.5.2",
         "mitt": "^1.1.3"
+      },
+      "engines": {
+        "node": ">=8.0.0"
       }
     },
-    "browser-sync-ui": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-3.0.2.tgz",
-      "integrity": "sha512-V3FwWAI+abVbFLTyJjXJlCMBwjc3GXf/BPGfwO2fMFACWbIGW9/4SrBOFYEOOtqzCjQE0Di+U3VIb7eES4omNA==",
+    "node_modules/browser-sync-ui": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-3.0.3.tgz",
+      "integrity": "sha512-FcGWo5lP5VodPY6O/f4pXQy5FFh4JK0f2/fTBsp0Lx1NtyBWs/IfPPJbW8m1ujTW/2r07oUXKTF2LYZlCZktjw==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "async-each-series": "0.1.1",
         "chalk": "4.1.2",
         "connect-history-api-fallback": "^1",
@@ -12829,361 +1551,399 @@
         "stream-throttle": "^0.1.3"
       }
     },
-    "browserslist": {
-      "version": "4.21.5",
-      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz",
-      "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==",
-      "dev": true,
-      "requires": {
-        "caniuse-lite": "^1.0.30001449",
-        "electron-to-chromium": "^1.4.284",
-        "node-releases": "^2.0.8",
-        "update-browserslist-db": "^1.0.10"
-      }
-    },
-    "bs-logger": {
-      "version": "0.2.6",
-      "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz",
-      "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==",
-      "dev": true,
-      "requires": {
-        "fast-json-stable-stringify": "2.x"
-      }
-    },
-    "bs-recipes": {
+    "node_modules/bs-recipes": {
       "version": "1.3.4",
-      "resolved": "https://registry.npmjs.org/bs-recipes/-/bs-recipes-1.3.4.tgz",
-      "integrity": "sha512-BXvDkqhDNxXEjeGM8LFkSbR+jzmP/CYpCiVKYn+soB1dDldeU15EBNDkwVXndKuX35wnNUaPd0qSoQEAkmQtMw==",
-      "dev": true
-    },
-    "bser": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz",
-      "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==",
-      "dev": true,
-      "requires": {
-        "node-int64": "^0.4.0"
-      }
+      "resolved": "https://registry.npmjs.org/bs-recipes/-/bs-recipes-1.3.4.tgz",
+      "integrity": "sha512-BXvDkqhDNxXEjeGM8LFkSbR+jzmP/CYpCiVKYn+soB1dDldeU15EBNDkwVXndKuX35wnNUaPd0qSoQEAkmQtMw==",
+      "dev": true
     },
-    "buffer-builder": {
+    "node_modules/buffer-builder": {
       "version": "0.2.0",
       "resolved": "https://registry.npmjs.org/buffer-builder/-/buffer-builder-0.2.0.tgz",
       "integrity": "sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg==",
       "dev": true,
       "peer": true
     },
-    "buffer-from": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
-      "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
-      "dev": true
+    "node_modules/builtin-modules": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz",
+      "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
     },
-    "builtins": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz",
-      "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==",
+    "node_modules/builtins": {
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.1.0.tgz",
+      "integrity": "sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==",
       "dev": true,
       "peer": true,
-      "requires": {
+      "dependencies": {
         "semver": "^7.0.0"
       }
     },
-    "bytes": {
+    "node_modules/bytes": {
       "version": "3.1.2",
       "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
       "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">= 0.8"
+      }
     },
-    "call-bind": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
-      "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+    "node_modules/call-bind": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
+      "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
       "dev": true,
       "peer": true,
-      "requires": {
-        "function-bind": "^1.1.1",
-        "get-intrinsic": "^1.0.2"
+      "dependencies": {
+        "es-define-property": "^1.0.0",
+        "es-errors": "^1.3.0",
+        "function-bind": "^1.1.2",
+        "get-intrinsic": "^1.2.4",
+        "set-function-length": "^1.2.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "callsites": {
+    "node_modules/callsites": {
       "version": "3.1.0",
       "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
       "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
-      "dev": true
-    },
-    "camelcase": {
-      "version": "5.3.1",
-      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
-      "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
-      "dev": true
-    },
-    "camelcase-keys": {
-      "version": "7.0.2",
-      "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-7.0.2.tgz",
-      "integrity": "sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==",
       "dev": true,
-      "requires": {
-        "camelcase": "^6.3.0",
-        "map-obj": "^4.1.0",
-        "quick-lru": "^5.1.1",
-        "type-fest": "^1.2.1"
-      },
-      "dependencies": {
-        "camelcase": {
-          "version": "6.3.0",
-          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
-          "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
-          "dev": true
-        },
-        "type-fest": {
-          "version": "1.4.0",
-          "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
-          "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==",
-          "dev": true
-        }
+      "engines": {
+        "node": ">=6"
       }
     },
-    "caniuse-lite": {
-      "version": "1.0.30001466",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001466.tgz",
-      "integrity": "sha512-ewtFBSfWjEmxUgNBSZItFSmVtvk9zkwkl1OfRZlKA8slltRN+/C/tuGVrF9styXkN36Yu3+SeJ1qkXxDEyNZ5w==",
-      "dev": true
-    },
-    "chalk": {
+    "node_modules/chalk": {
       "version": "4.1.2",
       "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
       "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "ansi-styles": "^4.1.0",
         "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
       }
     },
-    "char-regex": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz",
-      "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==",
-      "dev": true
+    "node_modules/chevrotain": {
+      "version": "11.0.3",
+      "resolved": "https://registry.npmjs.org/chevrotain/-/chevrotain-11.0.3.tgz",
+      "integrity": "sha512-ci2iJH6LeIkvP9eJW6gpueU8cnZhv85ELY8w8WiFtNjMHA5ad6pQLaJo9mEly/9qUyCpvqX8/POVUTf18/HFdw==",
+      "dependencies": {
+        "@chevrotain/cst-dts-gen": "11.0.3",
+        "@chevrotain/gast": "11.0.3",
+        "@chevrotain/regexp-to-ast": "11.0.3",
+        "@chevrotain/types": "11.0.3",
+        "@chevrotain/utils": "11.0.3",
+        "lodash-es": "4.17.21"
+      }
     },
-    "character-entities": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz",
-      "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ=="
+    "node_modules/chevrotain-allstar": {
+      "version": "0.3.1",
+      "resolved": "https://registry.npmjs.org/chevrotain-allstar/-/chevrotain-allstar-0.3.1.tgz",
+      "integrity": "sha512-b7g+y9A0v4mxCW1qUhf3BSVPg+/NvGErk/dOkrDaHA0nQIQGAtrOjlX//9OQtRlSCy+x9rfB5N8yC71lH1nvMw==",
+      "dependencies": {
+        "lodash-es": "^4.17.21"
+      },
+      "peerDependencies": {
+        "chevrotain": "^11.0.0"
+      }
     },
-    "chokidar": {
-      "version": "3.5.3",
-      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
-      "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+    "node_modules/chokidar": {
+      "version": "3.6.0",
+      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+      "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "anymatch": "~3.1.2",
         "braces": "~3.0.2",
-        "fsevents": "~2.3.2",
         "glob-parent": "~5.1.2",
         "is-binary-path": "~2.1.0",
         "is-glob": "~4.0.1",
         "normalize-path": "~3.0.0",
         "readdirp": "~3.6.0"
+      },
+      "engines": {
+        "node": ">= 8.10.0"
+      },
+      "funding": {
+        "url": "https://paulmillr.com/funding/"
+      },
+      "optionalDependencies": {
+        "fsevents": "~2.3.2"
       }
     },
-    "ci-info": {
-      "version": "3.8.0",
-      "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz",
-      "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==",
-      "dev": true
-    },
-    "cjs-module-lexer": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz",
-      "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==",
-      "dev": true
-    },
-    "cliui": {
+    "node_modules/cliui": {
       "version": "8.0.1",
       "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
       "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "string-width": "^4.2.0",
         "strip-ansi": "^6.0.1",
         "wrap-ansi": "^7.0.0"
+      },
+      "engines": {
+        "node": ">=12"
       }
     },
-    "co": {
-      "version": "4.6.0",
-      "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
-      "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==",
-      "dev": true
-    },
-    "collect-v8-coverage": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz",
-      "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==",
-      "dev": true
-    },
-    "color-convert": {
+    "node_modules/color-convert": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
       "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "color-name": "~1.1.4"
+      },
+      "engines": {
+        "node": ">=7.0.0"
       }
     },
-    "color-name": {
+    "node_modules/color-name": {
       "version": "1.1.4",
       "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
       "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
       "dev": true
     },
-    "colord": {
+    "node_modules/colord": {
       "version": "2.9.3",
       "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz",
       "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==",
       "dev": true
     },
-    "commander": {
-      "version": "2.20.3",
-      "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
-      "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
-      "dev": true
+    "node_modules/colorjs.io": {
+      "version": "0.5.2",
+      "resolved": "https://registry.npmjs.org/colorjs.io/-/colorjs.io-0.5.2.tgz",
+      "integrity": "sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/commander": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
+      "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
+      "engines": {
+        "node": ">= 10"
+      }
     },
-    "concat-map": {
+    "node_modules/concat-map": {
       "version": "0.0.1",
       "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
       "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
       "dev": true
     },
-    "connect": {
+    "node_modules/confbox": {
+      "version": "0.1.8",
+      "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz",
+      "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w=="
+    },
+    "node_modules/connect": {
       "version": "3.6.6",
       "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz",
       "integrity": "sha512-OO7axMmPpu/2XuX1+2Yrg0ddju31B6xLZMWkJ5rYBu4YRmRVlOjvlY6kw2FJKiAzyxGwnrDUAG4s1Pf0sbBMCQ==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "debug": "2.6.9",
         "finalhandler": "1.1.0",
         "parseurl": "~1.3.2",
         "utils-merge": "1.0.1"
+      },
+      "engines": {
+        "node": ">= 0.10.0"
       }
     },
-    "connect-history-api-fallback": {
+    "node_modules/connect-history-api-fallback": {
       "version": "1.6.0",
       "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz",
       "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=0.8"
+      }
+    },
+    "node_modules/connect/node_modules/debug": {
+      "version": "2.6.9",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+      "dev": true,
+      "dependencies": {
+        "ms": "2.0.0"
+      }
     },
-    "convert-source-map": {
+    "node_modules/connect/node_modules/ms": {
       "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
-      "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
       "dev": true
     },
-    "cookie": {
-      "version": "0.4.2",
-      "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz",
-      "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==",
-      "dev": true
+    "node_modules/cookie": {
+      "version": "0.7.2",
+      "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz",
+      "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.6"
+      }
     },
-    "cors": {
+    "node_modules/cors": {
       "version": "2.8.5",
       "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
       "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "object-assign": "^4",
         "vary": "^1"
+      },
+      "engines": {
+        "node": ">= 0.10"
       }
     },
-    "cose-base": {
+    "node_modules/cose-base": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-1.0.3.tgz",
       "integrity": "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==",
-      "requires": {
+      "dependencies": {
         "layout-base": "^1.0.0"
       }
     },
-    "cosmiconfig": {
-      "version": "8.2.0",
-      "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz",
-      "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==",
+    "node_modules/cosmiconfig": {
+      "version": "9.0.0",
+      "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz",
+      "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==",
       "dev": true,
-      "requires": {
-        "import-fresh": "^3.2.1",
+      "dependencies": {
+        "env-paths": "^2.2.1",
+        "import-fresh": "^3.3.0",
         "js-yaml": "^4.1.0",
-        "parse-json": "^5.0.0",
-        "path-type": "^4.0.0"
-      }
-    },
-    "create-jest": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz",
-      "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==",
-      "dev": true,
-      "requires": {
-        "@jest/types": "^29.6.3",
-        "chalk": "^4.0.0",
-        "exit": "^0.1.2",
-        "graceful-fs": "^4.2.9",
-        "jest-config": "^29.7.0",
-        "jest-util": "^29.7.0",
-        "prompts": "^2.0.1"
+        "parse-json": "^5.2.0"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/d-fischer"
+      },
+      "peerDependencies": {
+        "typescript": ">=4.9.5"
+      },
+      "peerDependenciesMeta": {
+        "typescript": {
+          "optional": true
+        }
       }
     },
-    "cross-spawn": {
+    "node_modules/cross-spawn": {
       "version": "7.0.3",
       "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
       "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "path-key": "^3.1.0",
         "shebang-command": "^2.0.0",
         "which": "^2.0.1"
+      },
+      "engines": {
+        "node": ">= 8"
       }
     },
-    "css-functions-list": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.0.tgz",
-      "integrity": "sha512-d/jBMPyYybkkLVypgtGv12R+pIFw4/f/IHtCTxWpZc8ofTYOPigIgmA6vu5rMHartZC+WuXhBUHfnyNUIQSYrg==",
-      "dev": true
+    "node_modules/css-functions-list": {
+      "version": "3.2.3",
+      "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.3.tgz",
+      "integrity": "sha512-IQOkD3hbR5KrN93MtcYuad6YPuTSUhntLHDuLEbFWE+ff2/XSZNdZG+LcbbIW5AXKg/WFIfYItIzVoHngHXZzA==",
+      "dev": true,
+      "engines": {
+        "node": ">=12 || >=16"
+      }
     },
-    "css-tree": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz",
-      "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==",
+    "node_modules/css-tree": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.0.0.tgz",
+      "integrity": "sha512-o88DVQ6GzsABn1+6+zo2ct801dBO5OASVyxbbvA2W20ue2puSh/VOuqUj90eUeMSX/xqGqBmOKiRQN7tJOuBXw==",
       "dev": true,
-      "requires": {
-        "mdn-data": "2.0.30",
+      "dependencies": {
+        "mdn-data": "2.10.0",
         "source-map-js": "^1.0.1"
+      },
+      "engines": {
+        "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
       }
     },
-    "cssesc": {
+    "node_modules/cssesc": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
       "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
-      "dev": true
+      "dev": true,
+      "bin": {
+        "cssesc": "bin/cssesc"
+      },
+      "engines": {
+        "node": ">=4"
+      }
     },
-    "cytoscape": {
-      "version": "3.28.1",
-      "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.28.1.tgz",
-      "integrity": "sha512-xyItz4O/4zp9/239wCcH8ZcFuuZooEeF8KHRmzjDfGdXsj3OG9MFSMA0pJE0uX3uCN/ygof6hHf4L7lst+JaDg==",
-      "requires": {
-        "heap": "^0.2.6",
-        "lodash": "^4.17.21"
+    "node_modules/cytoscape": {
+      "version": "3.30.2",
+      "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.30.2.tgz",
+      "integrity": "sha512-oICxQsjW8uSaRmn4UK/jkczKOqTrVqt5/1WL0POiJUT2EKNc9STM4hYFHv917yu55aTBMFNRzymlJhVAiWPCxw==",
+      "engines": {
+        "node": ">=0.10"
       }
     },
-    "cytoscape-cose-bilkent": {
+    "node_modules/cytoscape-cose-bilkent": {
       "version": "4.1.0",
       "resolved": "https://registry.npmjs.org/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-4.1.0.tgz",
       "integrity": "sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==",
-      "requires": {
+      "dependencies": {
         "cose-base": "^1.0.0"
+      },
+      "peerDependencies": {
+        "cytoscape": "^3.2.0"
+      }
+    },
+    "node_modules/cytoscape-fcose": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/cytoscape-fcose/-/cytoscape-fcose-2.2.0.tgz",
+      "integrity": "sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==",
+      "dependencies": {
+        "cose-base": "^2.2.0"
+      },
+      "peerDependencies": {
+        "cytoscape": "^3.2.0"
+      }
+    },
+    "node_modules/cytoscape-fcose/node_modules/cose-base": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-2.2.0.tgz",
+      "integrity": "sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==",
+      "dependencies": {
+        "layout-base": "^2.0.0"
       }
     },
-    "d3": {
-      "version": "7.8.4",
-      "resolved": "https://registry.npmjs.org/d3/-/d3-7.8.4.tgz",
-      "integrity": "sha512-q2WHStdhiBtD8DMmhDPyJmXUxr6VWRngKyiJ5EfXMxPw+tqT6BhNjhJZ4w3BHsNm3QoVfZLY8Orq/qPFczwKRA==",
-      "requires": {
+    "node_modules/cytoscape-fcose/node_modules/layout-base": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-2.0.1.tgz",
+      "integrity": "sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg=="
+    },
+    "node_modules/d3": {
+      "version": "7.9.0",
+      "resolved": "https://registry.npmjs.org/d3/-/d3-7.9.0.tgz",
+      "integrity": "sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==",
+      "dependencies": {
         "d3-array": "3",
         "d3-axis": "3",
         "d3-brush": "3",
@@ -13214,738 +1974,921 @@
         "d3-timer": "3",
         "d3-transition": "3",
         "d3-zoom": "3"
+      },
+      "engines": {
+        "node": ">=12"
       }
     },
-    "d3-array": {
-      "version": "3.2.3",
-      "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.3.tgz",
-      "integrity": "sha512-JRHwbQQ84XuAESWhvIPaUV4/1UYTBOLiOPGWqgFDHZS1D5QN9c57FbH3QpEnQMYiOXNzKUQyGTZf+EVO7RT5TQ==",
-      "requires": {
+    "node_modules/d3-array": {
+      "version": "3.2.4",
+      "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz",
+      "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==",
+      "dependencies": {
         "internmap": "1 - 2"
+      },
+      "engines": {
+        "node": ">=12"
       }
     },
-    "d3-axis": {
+    "node_modules/d3-axis": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz",
-      "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw=="
+      "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==",
+      "engines": {
+        "node": ">=12"
+      }
     },
-    "d3-brush": {
+    "node_modules/d3-brush": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz",
       "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==",
-      "requires": {
+      "dependencies": {
         "d3-dispatch": "1 - 3",
         "d3-drag": "2 - 3",
         "d3-interpolate": "1 - 3",
         "d3-selection": "3",
         "d3-transition": "3"
+      },
+      "engines": {
+        "node": ">=12"
       }
     },
-    "d3-chord": {
+    "node_modules/d3-chord": {
       "version": "3.0.1",
       "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz",
       "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==",
-      "requires": {
+      "dependencies": {
         "d3-path": "1 - 3"
+      },
+      "engines": {
+        "node": ">=12"
       }
     },
-    "d3-color": {
+    "node_modules/d3-color": {
       "version": "3.1.0",
       "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz",
-      "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA=="
+      "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==",
+      "engines": {
+        "node": ">=12"
+      }
     },
-    "d3-contour": {
+    "node_modules/d3-contour": {
       "version": "4.0.2",
       "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz",
       "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==",
-      "requires": {
+      "dependencies": {
         "d3-array": "^3.2.0"
+      },
+      "engines": {
+        "node": ">=12"
       }
     },
-    "d3-delaunay": {
+    "node_modules/d3-delaunay": {
       "version": "6.0.4",
       "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz",
       "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==",
-      "requires": {
+      "dependencies": {
         "delaunator": "5"
+      },
+      "engines": {
+        "node": ">=12"
       }
     },
-    "d3-dispatch": {
+    "node_modules/d3-dispatch": {
       "version": "3.0.1",
       "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz",
-      "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg=="
+      "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==",
+      "engines": {
+        "node": ">=12"
+      }
     },
-    "d3-drag": {
+    "node_modules/d3-drag": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz",
       "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==",
-      "requires": {
+      "dependencies": {
         "d3-dispatch": "1 - 3",
         "d3-selection": "3"
+      },
+      "engines": {
+        "node": ">=12"
       }
     },
-    "d3-dsv": {
+    "node_modules/d3-dsv": {
       "version": "3.0.1",
       "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz",
       "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==",
-      "requires": {
+      "dependencies": {
         "commander": "7",
         "iconv-lite": "0.6",
         "rw": "1"
       },
-      "dependencies": {
-        "commander": {
-          "version": "7.2.0",
-          "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
-          "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw=="
-        },
-        "iconv-lite": {
-          "version": "0.6.3",
-          "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
-          "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
-          "requires": {
-            "safer-buffer": ">= 2.1.2 < 3.0.0"
-          }
-        }
+      "bin": {
+        "csv2json": "bin/dsv2json.js",
+        "csv2tsv": "bin/dsv2dsv.js",
+        "dsv2dsv": "bin/dsv2dsv.js",
+        "dsv2json": "bin/dsv2json.js",
+        "json2csv": "bin/json2dsv.js",
+        "json2dsv": "bin/json2dsv.js",
+        "json2tsv": "bin/json2dsv.js",
+        "tsv2csv": "bin/dsv2dsv.js",
+        "tsv2json": "bin/dsv2json.js"
+      },
+      "engines": {
+        "node": ">=12"
       }
     },
-    "d3-ease": {
+    "node_modules/d3-ease": {
       "version": "3.0.1",
       "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz",
-      "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w=="
+      "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==",
+      "engines": {
+        "node": ">=12"
+      }
     },
-    "d3-fetch": {
+    "node_modules/d3-fetch": {
       "version": "3.0.1",
       "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz",
       "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==",
-      "requires": {
+      "dependencies": {
         "d3-dsv": "1 - 3"
+      },
+      "engines": {
+        "node": ">=12"
       }
     },
-    "d3-force": {
+    "node_modules/d3-force": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz",
       "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==",
-      "requires": {
+      "dependencies": {
         "d3-dispatch": "1 - 3",
         "d3-quadtree": "1 - 3",
         "d3-timer": "1 - 3"
+      },
+      "engines": {
+        "node": ">=12"
       }
     },
-    "d3-format": {
+    "node_modules/d3-format": {
       "version": "3.1.0",
       "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz",
-      "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA=="
+      "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==",
+      "engines": {
+        "node": ">=12"
+      }
     },
-    "d3-geo": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.0.tgz",
-      "integrity": "sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==",
-      "requires": {
+    "node_modules/d3-geo": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.1.tgz",
+      "integrity": "sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==",
+      "dependencies": {
         "d3-array": "2.5.0 - 3"
+      },
+      "engines": {
+        "node": ">=12"
       }
     },
-    "d3-hierarchy": {
+    "node_modules/d3-hierarchy": {
       "version": "3.1.2",
       "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz",
-      "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA=="
+      "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==",
+      "engines": {
+        "node": ">=12"
+      }
     },
-    "d3-interpolate": {
+    "node_modules/d3-interpolate": {
       "version": "3.0.1",
       "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz",
       "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==",
-      "requires": {
+      "dependencies": {
         "d3-color": "1 - 3"
+      },
+      "engines": {
+        "node": ">=12"
       }
     },
-    "d3-path": {
+    "node_modules/d3-path": {
       "version": "3.1.0",
       "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz",
-      "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ=="
+      "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==",
+      "engines": {
+        "node": ">=12"
+      }
     },
-    "d3-polygon": {
+    "node_modules/d3-polygon": {
       "version": "3.0.1",
       "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz",
-      "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg=="
+      "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==",
+      "engines": {
+        "node": ">=12"
+      }
     },
-    "d3-quadtree": {
+    "node_modules/d3-quadtree": {
       "version": "3.0.1",
       "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz",
-      "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw=="
+      "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==",
+      "engines": {
+        "node": ">=12"
+      }
     },
-    "d3-random": {
+    "node_modules/d3-random": {
       "version": "3.0.1",
       "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz",
-      "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ=="
+      "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==",
+      "engines": {
+        "node": ">=12"
+      }
     },
-    "d3-sankey": {
+    "node_modules/d3-sankey": {
       "version": "0.12.3",
       "resolved": "https://registry.npmjs.org/d3-sankey/-/d3-sankey-0.12.3.tgz",
       "integrity": "sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==",
-      "requires": {
+      "dependencies": {
         "d3-array": "1 - 2",
         "d3-shape": "^1.2.0"
-      },
+      }
+    },
+    "node_modules/d3-sankey/node_modules/d3-array": {
+      "version": "2.12.1",
+      "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz",
+      "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==",
       "dependencies": {
-        "d3-array": {
-          "version": "2.12.1",
-          "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz",
-          "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==",
-          "requires": {
-            "internmap": "^1.0.0"
-          }
-        },
-        "d3-path": {
-          "version": "1.0.9",
-          "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz",
-          "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg=="
-        },
-        "d3-shape": {
-          "version": "1.3.7",
-          "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz",
-          "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==",
-          "requires": {
-            "d3-path": "1"
-          }
-        },
-        "internmap": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz",
-          "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw=="
-        }
+        "internmap": "^1.0.0"
+      }
+    },
+    "node_modules/d3-sankey/node_modules/d3-path": {
+      "version": "1.0.9",
+      "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz",
+      "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg=="
+    },
+    "node_modules/d3-sankey/node_modules/d3-shape": {
+      "version": "1.3.7",
+      "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz",
+      "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==",
+      "dependencies": {
+        "d3-path": "1"
       }
     },
-    "d3-scale": {
+    "node_modules/d3-sankey/node_modules/internmap": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz",
+      "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw=="
+    },
+    "node_modules/d3-scale": {
       "version": "4.0.2",
       "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz",
       "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==",
-      "requires": {
+      "dependencies": {
         "d3-array": "2.10.0 - 3",
         "d3-format": "1 - 3",
         "d3-interpolate": "1.2.0 - 3",
         "d3-time": "2.1.1 - 3",
         "d3-time-format": "2 - 4"
+      },
+      "engines": {
+        "node": ">=12"
       }
     },
-    "d3-scale-chromatic": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz",
-      "integrity": "sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==",
-      "requires": {
+    "node_modules/d3-scale-chromatic": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz",
+      "integrity": "sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==",
+      "dependencies": {
         "d3-color": "1 - 3",
         "d3-interpolate": "1 - 3"
+      },
+      "engines": {
+        "node": ">=12"
       }
     },
-    "d3-selection": {
+    "node_modules/d3-selection": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz",
-      "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ=="
+      "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==",
+      "engines": {
+        "node": ">=12"
+      }
     },
-    "d3-shape": {
+    "node_modules/d3-shape": {
       "version": "3.2.0",
       "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz",
       "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==",
-      "requires": {
+      "dependencies": {
         "d3-path": "^3.1.0"
+      },
+      "engines": {
+        "node": ">=12"
       }
     },
-    "d3-time": {
+    "node_modules/d3-time": {
       "version": "3.1.0",
       "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz",
       "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==",
-      "requires": {
+      "dependencies": {
         "d3-array": "2 - 3"
+      },
+      "engines": {
+        "node": ">=12"
       }
     },
-    "d3-time-format": {
+    "node_modules/d3-time-format": {
       "version": "4.1.0",
       "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz",
       "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==",
-      "requires": {
+      "dependencies": {
         "d3-time": "1 - 3"
+      },
+      "engines": {
+        "node": ">=12"
       }
     },
-    "d3-timer": {
+    "node_modules/d3-timer": {
       "version": "3.0.1",
       "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz",
-      "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA=="
+      "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==",
+      "engines": {
+        "node": ">=12"
+      }
     },
-    "d3-transition": {
+    "node_modules/d3-transition": {
       "version": "3.0.1",
       "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz",
       "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==",
-      "requires": {
+      "dependencies": {
         "d3-color": "1 - 3",
         "d3-dispatch": "1 - 3",
         "d3-ease": "1 - 3",
         "d3-interpolate": "1 - 3",
         "d3-timer": "1 - 3"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "peerDependencies": {
+        "d3-selection": "2 - 3"
       }
     },
-    "d3-zoom": {
+    "node_modules/d3-zoom": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz",
       "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==",
-      "requires": {
+      "dependencies": {
         "d3-dispatch": "1 - 3",
         "d3-drag": "2 - 3",
         "d3-interpolate": "1 - 3",
         "d3-selection": "2 - 3",
         "d3-transition": "2 - 3"
+      },
+      "engines": {
+        "node": ">=12"
       }
     },
-    "dagre-d3-es": {
-      "version": "7.0.10",
-      "resolved": "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.10.tgz",
-      "integrity": "sha512-qTCQmEhcynucuaZgY5/+ti3X/rnszKZhEQH/ZdWdtP1tA/y3VoHJzcVrO9pjjJCNpigfscAtoUB5ONcd2wNn0A==",
-      "requires": {
-        "d3": "^7.8.2",
+    "node_modules/dagre-d3-es": {
+      "version": "7.0.11",
+      "resolved": "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.11.tgz",
+      "integrity": "sha512-tvlJLyQf834SylNKax8Wkzco/1ias1OPw8DcUMDE7oUIoSEW25riQVuiu/0OWEFqT0cxHT3Pa9/D82Jr47IONw==",
+      "dependencies": {
+        "d3": "^7.9.0",
         "lodash-es": "^4.17.21"
       }
     },
-    "dayjs": {
-      "version": "1.11.7",
-      "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.7.tgz",
-      "integrity": "sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ=="
-    },
-    "debug": {
-      "version": "2.6.9",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+    "node_modules/data-view-buffer": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz",
+      "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==",
       "dev": true,
-      "requires": {
-        "ms": "2.0.0"
+      "peer": true,
+      "dependencies": {
+        "call-bind": "^1.0.6",
+        "es-errors": "^1.3.0",
+        "is-data-view": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "decamelize": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz",
-      "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==",
-      "dev": true
-    },
-    "decamelize-keys": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz",
-      "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==",
+    "node_modules/data-view-byte-length": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz",
+      "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==",
       "dev": true,
-      "requires": {
-        "decamelize": "^1.1.0",
-        "map-obj": "^1.0.0"
-      },
+      "peer": true,
       "dependencies": {
-        "decamelize": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
-          "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==",
-          "dev": true
-        },
-        "map-obj": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
-          "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==",
-          "dev": true
-        }
+        "call-bind": "^1.0.7",
+        "es-errors": "^1.3.0",
+        "is-data-view": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "decode-named-character-reference": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz",
-      "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==",
-      "requires": {
-        "character-entities": "^2.0.0"
+    "node_modules/data-view-byte-offset": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz",
+      "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "call-bind": "^1.0.6",
+        "es-errors": "^1.3.0",
+        "is-data-view": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "dedent": {
-      "version": "1.5.1",
-      "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz",
-      "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==",
-      "dev": true,
-      "requires": {}
+    "node_modules/dayjs": {
+      "version": "1.11.13",
+      "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz",
+      "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg=="
+    },
+    "node_modules/debug": {
+      "version": "4.3.7",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
+      "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
+      "dependencies": {
+        "ms": "^2.1.3"
+      },
+      "engines": {
+        "node": ">=6.0"
+      },
+      "peerDependenciesMeta": {
+        "supports-color": {
+          "optional": true
+        }
+      }
     },
-    "deep-is": {
+    "node_modules/deep-is": {
       "version": "0.1.4",
       "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
       "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
       "dev": true
     },
-    "deepmerge": {
-      "version": "4.3.1",
-      "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
-      "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
-      "dev": true
+    "node_modules/define-data-property": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
+      "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "es-define-property": "^1.0.0",
+        "es-errors": "^1.3.0",
+        "gopd": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
     },
-    "define-properties": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz",
-      "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==",
+    "node_modules/define-properties": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
+      "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
       "dev": true,
       "peer": true,
-      "requires": {
+      "dependencies": {
+        "define-data-property": "^1.0.1",
         "has-property-descriptors": "^1.0.0",
         "object-keys": "^1.1.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "delaunator": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.0.tgz",
-      "integrity": "sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==",
-      "requires": {
-        "robust-predicates": "^3.0.0"
+    "node_modules/delaunator": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.1.tgz",
+      "integrity": "sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==",
+      "dependencies": {
+        "robust-predicates": "^3.0.2"
       }
     },
-    "depd": {
+    "node_modules/depd": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
       "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
-      "dev": true
-    },
-    "dequal": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
-      "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA=="
+      "dev": true,
+      "engines": {
+        "node": ">= 0.8"
+      }
     },
-    "destroy": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
-      "integrity": "sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==",
-      "dev": true
+    "node_modules/destroy": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
+      "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.8",
+        "npm": "1.2.8000 || >= 1.4.16"
+      }
     },
-    "detect-newline": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz",
-      "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==",
-      "dev": true
+    "node_modules/detect-libc": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
+      "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==",
+      "dev": true,
+      "bin": {
+        "detect-libc": "bin/detect-libc.js"
+      },
+      "engines": {
+        "node": ">=0.10"
+      }
     },
-    "dev-ip": {
+    "node_modules/dev-ip": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz",
       "integrity": "sha512-LmVkry/oDShEgSZPNgqCIp2/TlqtExeGmymru3uCELnfyjY11IzpAproLYs+1X88fXO6DBoYP3ul2Xo2yz2j6A==",
-      "dev": true
-    },
-    "diff": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz",
-      "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw=="
-    },
-    "diff-sequences": {
-      "version": "29.6.3",
-      "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz",
-      "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==",
-      "dev": true
+      "dev": true,
+      "bin": {
+        "dev-ip": "lib/dev-ip.js"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
+      }
     },
-    "dir-glob": {
+    "node_modules/dir-glob": {
       "version": "3.0.1",
       "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
       "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "path-type": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
       }
     },
-    "doctrine": {
+    "node_modules/doctrine": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
       "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "esutils": "^2.0.2"
+      },
+      "engines": {
+        "node": ">=6.0.0"
       }
     },
-    "dompurify": {
-      "version": "3.0.5",
-      "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.0.5.tgz",
-      "integrity": "sha512-F9e6wPGtY+8KNMRAVfxeCOHU0/NPWMSENNq4pQctuXRqqdEPW7q3CrLbR5Nse044WwacyjHGOMlvNsBe1y6z9A=="
+    "node_modules/dompurify": {
+      "version": "3.1.6",
+      "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.1.6.tgz",
+      "integrity": "sha512-cTOAhc36AalkjtBpfG6O8JimdTMWNXjiePT2xQH/ppBGi/4uIpmj8eKyIkMJErXWARyINV/sB38yf8JCLF5pbQ=="
     },
-    "easy-extender": {
+    "node_modules/easy-extender": {
       "version": "2.3.4",
       "resolved": "https://registry.npmjs.org/easy-extender/-/easy-extender-2.3.4.tgz",
       "integrity": "sha512-8cAwm6md1YTiPpOvDULYJL4ZS6WfM5/cTeVVh4JsvyYZAoqlRVUpHL9Gr5Fy7HA6xcSZicUia3DeAgO3Us8E+Q==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "lodash": "^4.17.10"
+      },
+      "engines": {
+        "node": ">= 4.0.0"
       }
     },
-    "eazy-logger": {
+    "node_modules/eazy-logger": {
       "version": "4.0.1",
       "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-4.0.1.tgz",
       "integrity": "sha512-2GSFtnnC6U4IEKhEI7+PvdxrmjJ04mdsj3wHZTFiw0tUtG4HCWzTr13ZYTk8XOGnA1xQMaDljoBOYlk3D/MMSw==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "chalk": "4.1.2"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
       }
     },
-    "ee-first": {
+    "node_modules/ee-first": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
       "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
       "dev": true
     },
-    "ejs": {
-      "version": "3.1.10",
-      "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz",
-      "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==",
-      "dev": true,
-      "requires": {
-        "jake": "^10.8.5"
-      }
-    },
-    "electron-to-chromium": {
-      "version": "1.4.331",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.331.tgz",
-      "integrity": "sha512-tdtr9y9oJl8VDiS+HeB6e/JDJqdDGjIk3yRfEMHm5rDnWQ/D5SbafybAayInxolbfbH6pouV5g7ZUAwE/WVtHw==",
-      "dev": true
-    },
-    "elkjs": {
-      "version": "0.9.1",
-      "resolved": "https://registry.npmjs.org/elkjs/-/elkjs-0.9.1.tgz",
-      "integrity": "sha512-JWKDyqAdltuUcyxaECtYG6H4sqysXSLeoXuGUBfRNESMTkj+w+qdb0jya8Z/WI0jVd03WQtCGhS6FOFtlhD5FQ=="
-    },
-    "emittery": {
-      "version": "0.13.1",
-      "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz",
-      "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==",
-      "dev": true
-    },
-    "emoji-regex": {
+    "node_modules/emoji-regex": {
       "version": "8.0.0",
       "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
       "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
       "dev": true
     },
-    "encodeurl": {
+    "node_modules/encodeurl": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
       "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">= 0.8"
+      }
     },
-    "engine.io": {
-      "version": "6.5.5",
-      "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.5.tgz",
-      "integrity": "sha512-C5Pn8Wk+1vKBoHghJODM63yk8MvrO9EWZUfkAt5HAqIgPE4/8FF0PEGHXtEd40l223+cE5ABWuPzm38PHFXfMA==",
+    "node_modules/engine.io": {
+      "version": "6.6.2",
+      "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.2.tgz",
+      "integrity": "sha512-gmNvsYi9C8iErnZdVcJnvCpSKbWTt1E8+JZo8b+daLninywUWi5NQ5STSHZ9rFjFO7imNcvb8Pc5pe/wMR5xEw==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "@types/cookie": "^0.4.1",
         "@types/cors": "^2.8.12",
         "@types/node": ">=10.0.0",
         "accepts": "~1.3.4",
         "base64id": "2.0.0",
-        "cookie": "~0.4.1",
+        "cookie": "~0.7.2",
         "cors": "~2.8.5",
         "debug": "~4.3.1",
         "engine.io-parser": "~5.2.1",
         "ws": "~8.17.1"
       },
-      "dependencies": {
-        "debug": {
-          "version": "4.3.5",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz",
-          "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==",
-          "dev": true,
-          "requires": {
-            "ms": "2.1.2"
-          }
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-          "dev": true
-        }
+      "engines": {
+        "node": ">=10.2.0"
       }
     },
-    "engine.io-client": {
-      "version": "6.5.4",
-      "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.4.tgz",
-      "integrity": "sha512-GeZeeRjpD2qf49cZQ0Wvh/8NJNfeXkXXcoGh+F77oEAgo9gUHwT1fCRxSNU+YEEaysOJTnsFHmM5oAcPy4ntvQ==",
+    "node_modules/engine.io-client": {
+      "version": "6.6.1",
+      "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.1.tgz",
+      "integrity": "sha512-aYuoak7I+R83M/BBPIOs2to51BmFIpC1wZe6zZzMrT2llVsHy5cvcmdsJgP2Qz6smHu+sD9oexiSUAVd8OfBPw==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "@socket.io/component-emitter": "~3.1.0",
         "debug": "~4.3.1",
         "engine.io-parser": "~5.2.1",
         "ws": "~8.17.1",
-        "xmlhttprequest-ssl": "~2.0.0"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "4.3.4",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
-          "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
-          "dev": true,
-          "requires": {
-            "ms": "2.1.2"
-          }
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-          "dev": true
-        }
+        "xmlhttprequest-ssl": "~2.1.1"
       }
     },
-    "engine.io-parser": {
-      "version": "5.2.2",
-      "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.2.tgz",
-      "integrity": "sha512-RcyUFKA93/CXH20l4SoVvzZfrSDMOTUS3bWVpTt2FuFP+XYrL8i8oonHP7WInRyVHXh0n/ORtoeiE1os+8qkSw==",
-      "dev": true
+    "node_modules/engine.io-parser": {
+      "version": "5.2.3",
+      "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz",
+      "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==",
+      "dev": true,
+      "engines": {
+        "node": ">=10.0.0"
+      }
+    },
+    "node_modules/env-paths": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
+      "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
+      "dev": true,
+      "engines": {
+        "node": ">=6"
+      }
     },
-    "error-ex": {
+    "node_modules/error-ex": {
       "version": "1.3.2",
       "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
       "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "is-arrayish": "^0.2.1"
       }
     },
-    "es-abstract": {
-      "version": "1.21.1",
-      "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.1.tgz",
-      "integrity": "sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==",
-      "dev": true,
-      "peer": true,
-      "requires": {
-        "available-typed-arrays": "^1.0.5",
-        "call-bind": "^1.0.2",
-        "es-set-tostringtag": "^2.0.1",
+    "node_modules/es-abstract": {
+      "version": "1.23.3",
+      "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz",
+      "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "array-buffer-byte-length": "^1.0.1",
+        "arraybuffer.prototype.slice": "^1.0.3",
+        "available-typed-arrays": "^1.0.7",
+        "call-bind": "^1.0.7",
+        "data-view-buffer": "^1.0.1",
+        "data-view-byte-length": "^1.0.1",
+        "data-view-byte-offset": "^1.0.0",
+        "es-define-property": "^1.0.0",
+        "es-errors": "^1.3.0",
+        "es-object-atoms": "^1.0.0",
+        "es-set-tostringtag": "^2.0.3",
         "es-to-primitive": "^1.2.1",
-        "function-bind": "^1.1.1",
-        "function.prototype.name": "^1.1.5",
-        "get-intrinsic": "^1.1.3",
-        "get-symbol-description": "^1.0.0",
+        "function.prototype.name": "^1.1.6",
+        "get-intrinsic": "^1.2.4",
+        "get-symbol-description": "^1.0.2",
         "globalthis": "^1.0.3",
         "gopd": "^1.0.1",
-        "has": "^1.0.3",
-        "has-property-descriptors": "^1.0.0",
-        "has-proto": "^1.0.1",
+        "has-property-descriptors": "^1.0.2",
+        "has-proto": "^1.0.3",
         "has-symbols": "^1.0.3",
-        "internal-slot": "^1.0.4",
-        "is-array-buffer": "^3.0.1",
+        "hasown": "^2.0.2",
+        "internal-slot": "^1.0.7",
+        "is-array-buffer": "^3.0.4",
         "is-callable": "^1.2.7",
-        "is-negative-zero": "^2.0.2",
+        "is-data-view": "^1.0.1",
+        "is-negative-zero": "^2.0.3",
         "is-regex": "^1.1.4",
-        "is-shared-array-buffer": "^1.0.2",
+        "is-shared-array-buffer": "^1.0.3",
         "is-string": "^1.0.7",
-        "is-typed-array": "^1.1.10",
+        "is-typed-array": "^1.1.13",
         "is-weakref": "^1.0.2",
-        "object-inspect": "^1.12.2",
+        "object-inspect": "^1.13.1",
         "object-keys": "^1.1.1",
-        "object.assign": "^4.1.4",
-        "regexp.prototype.flags": "^1.4.3",
-        "safe-regex-test": "^1.0.0",
-        "string.prototype.trimend": "^1.0.6",
-        "string.prototype.trimstart": "^1.0.6",
-        "typed-array-length": "^1.0.4",
+        "object.assign": "^4.1.5",
+        "regexp.prototype.flags": "^1.5.2",
+        "safe-array-concat": "^1.1.2",
+        "safe-regex-test": "^1.0.3",
+        "string.prototype.trim": "^1.2.9",
+        "string.prototype.trimend": "^1.0.8",
+        "string.prototype.trimstart": "^1.0.8",
+        "typed-array-buffer": "^1.0.2",
+        "typed-array-byte-length": "^1.0.1",
+        "typed-array-byte-offset": "^1.0.2",
+        "typed-array-length": "^1.0.6",
         "unbox-primitive": "^1.0.2",
-        "which-typed-array": "^1.1.9"
+        "which-typed-array": "^1.1.15"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "es-set-tostringtag": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz",
-      "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==",
+    "node_modules/es-define-property": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
+      "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
       "dev": true,
       "peer": true,
-      "requires": {
-        "get-intrinsic": "^1.1.3",
-        "has": "^1.0.3",
-        "has-tostringtag": "^1.0.0"
+      "dependencies": {
+        "get-intrinsic": "^1.2.4"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/es-errors": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+      "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">= 0.4"
       }
     },
-    "es-shim-unscopables": {
+    "node_modules/es-object-atoms": {
       "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz",
-      "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==",
+      "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz",
+      "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "es-errors": "^1.3.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/es-set-tostringtag": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz",
+      "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "get-intrinsic": "^1.2.4",
+        "has-tostringtag": "^1.0.2",
+        "hasown": "^2.0.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/es-shim-unscopables": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz",
+      "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==",
       "dev": true,
       "peer": true,
-      "requires": {
-        "has": "^1.0.3"
+      "dependencies": {
+        "hasown": "^2.0.0"
       }
     },
-    "es-to-primitive": {
+    "node_modules/es-to-primitive": {
       "version": "1.2.1",
       "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
       "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
       "dev": true,
       "peer": true,
-      "requires": {
+      "dependencies": {
         "is-callable": "^1.1.4",
         "is-date-object": "^1.0.1",
         "is-symbol": "^1.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "esbuild": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.1.tgz",
-      "integrity": "sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==",
+    "node_modules/esbuild": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.0.tgz",
+      "integrity": "sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==",
       "dev": true,
-      "requires": {
-        "@esbuild/aix-ppc64": "0.23.1",
-        "@esbuild/android-arm": "0.23.1",
-        "@esbuild/android-arm64": "0.23.1",
-        "@esbuild/android-x64": "0.23.1",
-        "@esbuild/darwin-arm64": "0.23.1",
-        "@esbuild/darwin-x64": "0.23.1",
-        "@esbuild/freebsd-arm64": "0.23.1",
-        "@esbuild/freebsd-x64": "0.23.1",
-        "@esbuild/linux-arm": "0.23.1",
-        "@esbuild/linux-arm64": "0.23.1",
-        "@esbuild/linux-ia32": "0.23.1",
-        "@esbuild/linux-loong64": "0.23.1",
-        "@esbuild/linux-mips64el": "0.23.1",
-        "@esbuild/linux-ppc64": "0.23.1",
-        "@esbuild/linux-riscv64": "0.23.1",
-        "@esbuild/linux-s390x": "0.23.1",
-        "@esbuild/linux-x64": "0.23.1",
-        "@esbuild/netbsd-x64": "0.23.1",
-        "@esbuild/openbsd-arm64": "0.23.1",
-        "@esbuild/openbsd-x64": "0.23.1",
-        "@esbuild/sunos-x64": "0.23.1",
-        "@esbuild/win32-arm64": "0.23.1",
-        "@esbuild/win32-ia32": "0.23.1",
-        "@esbuild/win32-x64": "0.23.1"
+      "hasInstallScript": true,
+      "bin": {
+        "esbuild": "bin/esbuild"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "optionalDependencies": {
+        "@esbuild/aix-ppc64": "0.24.0",
+        "@esbuild/android-arm": "0.24.0",
+        "@esbuild/android-arm64": "0.24.0",
+        "@esbuild/android-x64": "0.24.0",
+        "@esbuild/darwin-arm64": "0.24.0",
+        "@esbuild/darwin-x64": "0.24.0",
+        "@esbuild/freebsd-arm64": "0.24.0",
+        "@esbuild/freebsd-x64": "0.24.0",
+        "@esbuild/linux-arm": "0.24.0",
+        "@esbuild/linux-arm64": "0.24.0",
+        "@esbuild/linux-ia32": "0.24.0",
+        "@esbuild/linux-loong64": "0.24.0",
+        "@esbuild/linux-mips64el": "0.24.0",
+        "@esbuild/linux-ppc64": "0.24.0",
+        "@esbuild/linux-riscv64": "0.24.0",
+        "@esbuild/linux-s390x": "0.24.0",
+        "@esbuild/linux-x64": "0.24.0",
+        "@esbuild/netbsd-x64": "0.24.0",
+        "@esbuild/openbsd-arm64": "0.24.0",
+        "@esbuild/openbsd-x64": "0.24.0",
+        "@esbuild/sunos-x64": "0.24.0",
+        "@esbuild/win32-arm64": "0.24.0",
+        "@esbuild/win32-ia32": "0.24.0",
+        "@esbuild/win32-x64": "0.24.0"
       }
     },
-    "esbuild-sass-plugin": {
+    "node_modules/esbuild-sass-plugin": {
       "version": "3.3.1",
       "resolved": "https://registry.npmjs.org/esbuild-sass-plugin/-/esbuild-sass-plugin-3.3.1.tgz",
       "integrity": "sha512-SnO1ls+d52n6j8gRRpjexXI8MsHEaumS0IdDHaYM29Y6gakzZYMls6i9ql9+AWMSQk/eryndmUpXEgT34QrX1A==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "resolve": "^1.22.8",
         "safe-identifier": "^0.4.2",
         "sass": "^1.71.1"
+      },
+      "peerDependencies": {
+        "esbuild": ">=0.20.1",
+        "sass-embedded": "^1.71.1"
       }
     },
-    "escalade": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
-      "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
-      "dev": true
+    "node_modules/escalade": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+      "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+      "dev": true,
+      "engines": {
+        "node": ">=6"
+      }
     },
-    "escape-html": {
+    "node_modules/escape-html": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
       "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
       "dev": true
     },
-    "escape-string-regexp": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
-      "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
-      "dev": true
+    "node_modules/escape-string-regexp": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+      "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+      "dev": true,
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
     },
-    "eslint": {
-      "version": "8.57.0",
-      "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz",
-      "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==",
+    "node_modules/eslint": {
+      "version": "8.57.1",
+      "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz",
+      "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==",
+      "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "@eslint-community/eslint-utils": "^4.2.0",
         "@eslint-community/regexpp": "^4.6.1",
         "@eslint/eslintrc": "^2.1.4",
-        "@eslint/js": "8.57.0",
-        "@humanwhocodes/config-array": "^0.11.14",
+        "@eslint/js": "8.57.1",
+        "@humanwhocodes/config-array": "^0.13.0",
         "@humanwhocodes/module-importer": "^1.0.1",
         "@nodelib/fs.walk": "^1.2.8",
         "@ungap/structured-clone": "^1.2.0",
@@ -13980,459 +2923,517 @@
         "strip-ansi": "^6.0.1",
         "text-table": "^0.2.0"
       },
+      "bin": {
+        "eslint": "bin/eslint.js"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
+    "node_modules/eslint-compat-utils": {
+      "version": "0.5.1",
+      "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz",
+      "integrity": "sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==",
+      "dev": true,
+      "peer": true,
       "dependencies": {
-        "debug": {
-          "version": "4.3.4",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
-          "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
-          "dev": true,
-          "requires": {
-            "ms": "2.1.2"
-          }
-        },
-        "escape-string-regexp": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
-          "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
-          "dev": true
+        "semver": "^7.5.4"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "peerDependencies": {
+        "eslint": ">=6.0.0"
+      }
+    },
+    "node_modules/eslint-config-standard": {
+      "version": "17.1.0",
+      "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz",
+      "integrity": "sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
         },
-        "glob-parent": {
-          "version": "6.0.2",
-          "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
-          "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
-          "dev": true,
-          "requires": {
-            "is-glob": "^4.0.3"
-          }
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
         },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-          "dev": true
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
         }
+      ],
+      "engines": {
+        "node": ">=12.0.0"
+      },
+      "peerDependencies": {
+        "eslint": "^8.0.1",
+        "eslint-plugin-import": "^2.25.2",
+        "eslint-plugin-n": "^15.0.0 || ^16.0.0 ",
+        "eslint-plugin-promise": "^6.0.0"
       }
     },
-    "eslint-config-standard": {
-      "version": "17.1.0",
-      "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz",
-      "integrity": "sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==",
+    "node_modules/eslint-import-resolver-node": {
+      "version": "0.3.9",
+      "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz",
+      "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==",
       "dev": true,
-      "requires": {}
+      "peer": true,
+      "dependencies": {
+        "debug": "^3.2.7",
+        "is-core-module": "^2.13.0",
+        "resolve": "^1.22.4"
+      }
     },
-    "eslint-import-resolver-node": {
-      "version": "0.3.7",
-      "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz",
-      "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==",
+    "node_modules/eslint-import-resolver-node/node_modules/debug": {
+      "version": "3.2.7",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+      "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
       "dev": true,
       "peer": true,
-      "requires": {
-        "debug": "^3.2.7",
-        "is-core-module": "^2.11.0",
-        "resolve": "^1.22.1"
-      },
       "dependencies": {
-        "debug": {
-          "version": "3.2.7",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
-          "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
-          "dev": true,
-          "peer": true,
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "ms": {
-          "version": "2.1.3",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
-          "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
-          "dev": true,
-          "peer": true
-        }
+        "ms": "^2.1.1"
       }
     },
-    "eslint-module-utils": {
-      "version": "2.7.4",
-      "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz",
-      "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==",
+    "node_modules/eslint-module-utils": {
+      "version": "2.12.0",
+      "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz",
+      "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==",
       "dev": true,
       "peer": true,
-      "requires": {
+      "dependencies": {
         "debug": "^3.2.7"
       },
-      "dependencies": {
-        "debug": {
-          "version": "3.2.7",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
-          "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
-          "dev": true,
-          "peer": true,
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "ms": {
-          "version": "2.1.3",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
-          "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
-          "dev": true,
-          "peer": true
+      "engines": {
+        "node": ">=4"
+      },
+      "peerDependenciesMeta": {
+        "eslint": {
+          "optional": true
         }
       }
     },
-    "eslint-plugin-es": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz",
-      "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==",
+    "node_modules/eslint-module-utils/node_modules/debug": {
+      "version": "3.2.7",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+      "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
       "dev": true,
       "peer": true,
-      "requires": {
-        "eslint-utils": "^2.0.0",
-        "regexpp": "^3.0.0"
-      },
-      "dependencies": {
-        "eslint-utils": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
-          "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
-          "dev": true,
-          "peer": true,
-          "requires": {
-            "eslint-visitor-keys": "^1.1.0"
-          }
-        },
-        "eslint-visitor-keys": {
-          "version": "1.3.0",
-          "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
-          "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
-          "dev": true,
-          "peer": true
-        }
+      "dependencies": {
+        "ms": "^2.1.1"
+      }
+    },
+    "node_modules/eslint-plugin-es-x": {
+      "version": "7.8.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.8.0.tgz",
+      "integrity": "sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==",
+      "dev": true,
+      "funding": [
+        "https://github.com/sponsors/ota-meshi",
+        "https://opencollective.com/eslint"
+      ],
+      "peer": true,
+      "dependencies": {
+        "@eslint-community/eslint-utils": "^4.1.2",
+        "@eslint-community/regexpp": "^4.11.0",
+        "eslint-compat-utils": "^0.5.1"
+      },
+      "engines": {
+        "node": "^14.18.0 || >=16.0.0"
+      },
+      "peerDependencies": {
+        "eslint": ">=8"
       }
     },
-    "eslint-plugin-import": {
-      "version": "2.27.5",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz",
-      "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==",
+    "node_modules/eslint-plugin-import": {
+      "version": "2.31.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz",
+      "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==",
       "dev": true,
       "peer": true,
-      "requires": {
-        "array-includes": "^3.1.6",
-        "array.prototype.flat": "^1.3.1",
-        "array.prototype.flatmap": "^1.3.1",
+      "dependencies": {
+        "@rtsao/scc": "^1.1.0",
+        "array-includes": "^3.1.8",
+        "array.prototype.findlastindex": "^1.2.5",
+        "array.prototype.flat": "^1.3.2",
+        "array.prototype.flatmap": "^1.3.2",
         "debug": "^3.2.7",
         "doctrine": "^2.1.0",
-        "eslint-import-resolver-node": "^0.3.7",
-        "eslint-module-utils": "^2.7.4",
-        "has": "^1.0.3",
-        "is-core-module": "^2.11.0",
+        "eslint-import-resolver-node": "^0.3.9",
+        "eslint-module-utils": "^2.12.0",
+        "hasown": "^2.0.2",
+        "is-core-module": "^2.15.1",
         "is-glob": "^4.0.3",
         "minimatch": "^3.1.2",
-        "object.values": "^1.1.6",
-        "resolve": "^1.22.1",
-        "semver": "^6.3.0",
-        "tsconfig-paths": "^3.14.1"
+        "object.fromentries": "^2.0.8",
+        "object.groupby": "^1.0.3",
+        "object.values": "^1.2.0",
+        "semver": "^6.3.1",
+        "string.prototype.trimend": "^1.0.8",
+        "tsconfig-paths": "^3.15.0"
+      },
+      "engines": {
+        "node": ">=4"
       },
+      "peerDependencies": {
+        "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9"
+      }
+    },
+    "node_modules/eslint-plugin-import/node_modules/brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+      "dev": true,
+      "peer": true,
       "dependencies": {
-        "debug": {
-          "version": "3.2.7",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
-          "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
-          "dev": true,
-          "peer": true,
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "doctrine": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
-          "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
-          "dev": true,
-          "peer": true,
-          "requires": {
-            "esutils": "^2.0.2"
-          }
-        },
-        "ms": {
-          "version": "2.1.3",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
-          "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
-          "dev": true,
-          "peer": true
-        },
-        "semver": {
-          "version": "6.3.1",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
-          "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
-          "dev": true,
-          "peer": true
-        }
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
+      }
+    },
+    "node_modules/eslint-plugin-import/node_modules/debug": {
+      "version": "3.2.7",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+      "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "ms": "^2.1.1"
+      }
+    },
+    "node_modules/eslint-plugin-import/node_modules/doctrine": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+      "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "esutils": "^2.0.2"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/eslint-plugin-import/node_modules/minimatch": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "brace-expansion": "^1.1.7"
+      },
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/eslint-plugin-import/node_modules/semver": {
+      "version": "6.3.1",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+      "dev": true,
+      "peer": true,
+      "bin": {
+        "semver": "bin/semver.js"
       }
     },
-    "eslint-plugin-n": {
-      "version": "15.6.1",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.6.1.tgz",
-      "integrity": "sha512-R9xw9OtCRxxaxaszTQmQAlPgM+RdGjaL1akWuY/Fv9fRAi8Wj4CUKc6iYVG8QNRjRuo8/BqVYIpfqberJUEacA==",
+    "node_modules/eslint-plugin-n": {
+      "version": "16.6.2",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.6.2.tgz",
+      "integrity": "sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ==",
       "dev": true,
       "peer": true,
-      "requires": {
+      "dependencies": {
+        "@eslint-community/eslint-utils": "^4.4.0",
         "builtins": "^5.0.1",
-        "eslint-plugin-es": "^4.1.0",
-        "eslint-utils": "^3.0.0",
-        "ignore": "^5.1.1",
-        "is-core-module": "^2.11.0",
+        "eslint-plugin-es-x": "^7.5.0",
+        "get-tsconfig": "^4.7.0",
+        "globals": "^13.24.0",
+        "ignore": "^5.2.4",
+        "is-builtin-module": "^3.2.1",
+        "is-core-module": "^2.12.1",
         "minimatch": "^3.1.2",
-        "resolve": "^1.22.1",
-        "semver": "^7.3.8"
+        "resolve": "^1.22.2",
+        "semver": "^7.5.3"
+      },
+      "engines": {
+        "node": ">=16.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/mysticatea"
+      },
+      "peerDependencies": {
+        "eslint": ">=7.0.0"
+      }
+    },
+    "node_modules/eslint-plugin-n/node_modules/brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
+      }
+    },
+    "node_modules/eslint-plugin-n/node_modules/minimatch": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "brace-expansion": "^1.1.7"
+      },
+      "engines": {
+        "node": "*"
       }
     },
-    "eslint-plugin-promise": {
-      "version": "6.1.1",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz",
-      "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==",
+    "node_modules/eslint-plugin-promise": {
+      "version": "6.6.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.6.0.tgz",
+      "integrity": "sha512-57Zzfw8G6+Gq7axm2Pdo3gW/Rx3h9Yywgn61uE/3elTCOePEHVrn2i5CdfBwA1BLK0Q0WqctICIUSqXZW/VprQ==",
       "dev": true,
       "peer": true,
-      "requires": {}
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      },
+      "peerDependencies": {
+        "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0"
+      }
     },
-    "eslint-scope": {
+    "node_modules/eslint-scope": {
       "version": "7.2.2",
       "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
       "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "esrecurse": "^4.3.0",
         "estraverse": "^5.2.0"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
       }
     },
-    "eslint-utils": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
-      "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
+    "node_modules/eslint-visitor-keys": {
+      "version": "3.4.3",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+      "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
       "dev": true,
-      "peer": true,
-      "requires": {
-        "eslint-visitor-keys": "^2.0.0"
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
       },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
+    "node_modules/eslint/node_modules/brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+      "dev": true,
       "dependencies": {
-        "eslint-visitor-keys": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
-          "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
-          "dev": true,
-          "peer": true
-        }
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
       }
     },
-    "eslint-visitor-keys": {
-      "version": "3.4.3",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
-      "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
-      "dev": true
+    "node_modules/eslint/node_modules/glob-parent": {
+      "version": "6.0.2",
+      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+      "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+      "dev": true,
+      "dependencies": {
+        "is-glob": "^4.0.3"
+      },
+      "engines": {
+        "node": ">=10.13.0"
+      }
+    },
+    "node_modules/eslint/node_modules/minimatch": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+      "dev": true,
+      "dependencies": {
+        "brace-expansion": "^1.1.7"
+      },
+      "engines": {
+        "node": "*"
+      }
     },
-    "espree": {
+    "node_modules/espree": {
       "version": "9.6.1",
       "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
       "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "acorn": "^8.9.0",
         "acorn-jsx": "^5.3.2",
         "eslint-visitor-keys": "^3.4.1"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
       }
     },
-    "esprima": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
-      "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
-      "dev": true
-    },
-    "esquery": {
-      "version": "1.4.2",
-      "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.2.tgz",
-      "integrity": "sha512-JVSoLdTlTDkmjFmab7H/9SL9qGSyjElT3myyKp7krqjVFQCDLmj1QFaCLRFBszBKI0XVZaiiXvuPIX3ZwHe1Ng==",
+    "node_modules/esquery": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
+      "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "estraverse": "^5.1.0"
+      },
+      "engines": {
+        "node": ">=0.10"
       }
     },
-    "esrecurse": {
+    "node_modules/esrecurse": {
       "version": "4.3.0",
       "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
       "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "estraverse": "^5.2.0"
+      },
+      "engines": {
+        "node": ">=4.0"
       }
     },
-    "estraverse": {
+    "node_modules/estraverse": {
       "version": "5.3.0",
       "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
       "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=4.0"
+      }
     },
-    "esutils": {
+    "node_modules/esutils": {
       "version": "2.0.3",
       "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
       "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
     },
-    "etag": {
+    "node_modules/etag": {
       "version": "1.8.1",
       "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
       "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">= 0.6"
+      }
     },
-    "eventemitter3": {
+    "node_modules/eventemitter3": {
       "version": "4.0.7",
       "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
       "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
       "dev": true
     },
-    "execa": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
-      "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
-      "dev": true,
-      "requires": {
-        "cross-spawn": "^7.0.3",
-        "get-stream": "^6.0.0",
-        "human-signals": "^2.1.0",
-        "is-stream": "^2.0.0",
-        "merge-stream": "^2.0.0",
-        "npm-run-path": "^4.0.1",
-        "onetime": "^5.1.2",
-        "signal-exit": "^3.0.3",
-        "strip-final-newline": "^2.0.0"
-      }
-    },
-    "exit": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
-      "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==",
-      "dev": true
-    },
-    "expect": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz",
-      "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==",
-      "dev": true,
-      "requires": {
-        "@jest/expect-utils": "^29.7.0",
-        "jest-get-type": "^29.6.3",
-        "jest-matcher-utils": "^29.7.0",
-        "jest-message-util": "^29.7.0",
-        "jest-util": "^29.7.0"
-      }
-    },
-    "fast-deep-equal": {
+    "node_modules/fast-deep-equal": {
       "version": "3.1.3",
       "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
       "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
       "dev": true
     },
-    "fast-glob": {
+    "node_modules/fast-glob": {
       "version": "3.3.2",
       "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
       "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "@nodelib/fs.stat": "^2.0.2",
         "@nodelib/fs.walk": "^1.2.3",
         "glob-parent": "^5.1.2",
         "merge2": "^1.3.0",
         "micromatch": "^4.0.4"
+      },
+      "engines": {
+        "node": ">=8.6.0"
       }
     },
-    "fast-json-stable-stringify": {
+    "node_modules/fast-json-stable-stringify": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
       "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
       "dev": true
     },
-    "fast-levenshtein": {
+    "node_modules/fast-levenshtein": {
       "version": "2.0.6",
       "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
       "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
       "dev": true
     },
-    "fastest-levenshtein": {
+    "node_modules/fast-uri": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz",
+      "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==",
+      "dev": true
+    },
+    "node_modules/fastest-levenshtein": {
       "version": "1.0.16",
       "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz",
       "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==",
-      "dev": true
-    },
-    "fastq": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
-      "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
       "dev": true,
-      "requires": {
-        "reusify": "^1.0.4"
+      "engines": {
+        "node": ">= 4.9.1"
       }
     },
-    "fb-watchman": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz",
-      "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==",
+    "node_modules/fastq": {
+      "version": "1.17.1",
+      "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
+      "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
       "dev": true,
-      "requires": {
-        "bser": "2.1.1"
+      "dependencies": {
+        "reusify": "^1.0.4"
       }
     },
-    "file-entry-cache": {
+    "node_modules/file-entry-cache": {
       "version": "6.0.1",
       "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
       "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "flat-cache": "^3.0.4"
-      }
-    },
-    "filelist": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz",
-      "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==",
-      "dev": true,
-      "requires": {
-        "minimatch": "^5.0.1"
       },
-      "dependencies": {
-        "brace-expansion": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
-          "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
-          "dev": true,
-          "requires": {
-            "balanced-match": "^1.0.0"
-          }
-        },
-        "minimatch": {
-          "version": "5.1.6",
-          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
-          "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
-          "dev": true,
-          "requires": {
-            "brace-expansion": "^2.0.1"
-          }
-        }
+      "engines": {
+        "node": "^10.12.0 || >=12.0.0"
       }
     },
-    "fill-range": {
+    "node_modules/fill-range": {
       "version": "7.1.1",
       "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
       "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "to-regex-range": "^5.0.1"
+      },
+      "engines": {
+        "node": ">=8"
       }
     },
-    "finalhandler": {
+    "node_modules/finalhandler": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz",
       "integrity": "sha512-ejnvM9ZXYzp6PUPUyQBMBf0Co5VX2gr5H2VQe2Ui2jWXNlxv+PYZo8wpAymJNJdLsG1R4p+M4aynF8KuoUEwRw==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "debug": "2.6.9",
         "encodeurl": "~1.0.1",
         "escape-html": "~1.0.3",
@@ -14440,3893 +3441,3876 @@
         "parseurl": "~1.3.2",
         "statuses": "~1.3.1",
         "unpipe": "~1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/finalhandler/node_modules/debug": {
+      "version": "2.6.9",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+      "dev": true,
+      "dependencies": {
+        "ms": "2.0.0"
       }
     },
-    "find-up": {
+    "node_modules/finalhandler/node_modules/ms": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+      "dev": true
+    },
+    "node_modules/find-up": {
       "version": "5.0.0",
       "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
       "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "locate-path": "^6.0.0",
         "path-exists": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "flat-cache": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
-      "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
+    "node_modules/flat-cache": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz",
+      "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==",
       "dev": true,
-      "requires": {
-        "flatted": "^3.1.0",
+      "dependencies": {
+        "flatted": "^3.2.9",
+        "keyv": "^4.5.3",
         "rimraf": "^3.0.2"
+      },
+      "engines": {
+        "node": "^10.12.0 || >=12.0.0"
       }
     },
-    "flatted": {
-      "version": "3.2.7",
-      "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz",
-      "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==",
+    "node_modules/flatted": {
+      "version": "3.3.1",
+      "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz",
+      "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==",
       "dev": true
     },
-    "follow-redirects": {
-      "version": "1.15.6",
-      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
-      "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
-      "dev": true
+    "node_modules/follow-redirects": {
+      "version": "1.15.9",
+      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz",
+      "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "individual",
+          "url": "https://github.com/sponsors/RubenVerborgh"
+        }
+      ],
+      "engines": {
+        "node": ">=4.0"
+      },
+      "peerDependenciesMeta": {
+        "debug": {
+          "optional": true
+        }
+      }
     },
-    "for-each": {
+    "node_modules/for-each": {
       "version": "0.3.3",
       "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
       "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
       "dev": true,
       "peer": true,
-      "requires": {
+      "dependencies": {
         "is-callable": "^1.1.3"
       }
     },
-    "fresh": {
+    "node_modules/fresh": {
       "version": "0.5.2",
       "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
       "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">= 0.6"
+      }
     },
-    "fs-extra": {
+    "node_modules/fs-extra": {
       "version": "3.0.1",
       "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz",
       "integrity": "sha512-V3Z3WZWVUYd8hoCL5xfXJCaHWYzmtwW5XWYSlLgERi8PWd8bx1kUHUk8L1BT57e49oKnDDD180mjfrHc1yA9rg==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "graceful-fs": "^4.1.2",
         "jsonfile": "^3.0.0",
         "universalify": "^0.1.0"
       }
     },
-    "fs.realpath": {
+    "node_modules/fs.realpath": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
       "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
       "dev": true
     },
-    "fsevents": {
-      "version": "2.3.2",
-      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
-      "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
-      "dev": true,
-      "optional": true
+    "node_modules/fsevents": {
+      "version": "2.3.3",
+      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+      "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+      "hasInstallScript": true,
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+      }
     },
-    "function-bind": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
-      "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
-      "dev": true
+    "node_modules/function-bind": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+      "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+      "dev": true,
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
     },
-    "function.prototype.name": {
-      "version": "1.1.5",
-      "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz",
-      "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==",
+    "node_modules/function.prototype.name": {
+      "version": "1.1.6",
+      "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz",
+      "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==",
       "dev": true,
       "peer": true,
-      "requires": {
+      "dependencies": {
         "call-bind": "^1.0.2",
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.19.0",
-        "functions-have-names": "^1.2.2"
+        "define-properties": "^1.2.0",
+        "es-abstract": "^1.22.1",
+        "functions-have-names": "^1.2.3"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "functions-have-names": {
+    "node_modules/functions-have-names": {
       "version": "1.2.3",
       "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
       "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
       "dev": true,
-      "peer": true
-    },
-    "gensync": {
-      "version": "1.0.0-beta.2",
-      "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
-      "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
-      "dev": true
+      "peer": true,
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
     },
-    "get-caller-file": {
+    "node_modules/get-caller-file": {
       "version": "2.0.5",
       "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
       "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": "6.* || 8.* || >= 10.*"
+      }
     },
-    "get-intrinsic": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz",
-      "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==",
+    "node_modules/get-intrinsic": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
+      "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
       "dev": true,
       "peer": true,
-      "requires": {
-        "function-bind": "^1.1.1",
-        "has": "^1.0.3",
-        "has-symbols": "^1.0.3"
+      "dependencies": {
+        "es-errors": "^1.3.0",
+        "function-bind": "^1.1.2",
+        "has-proto": "^1.0.1",
+        "has-symbols": "^1.0.3",
+        "hasown": "^2.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "get-package-type": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
-      "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==",
-      "dev": true
-    },
-    "get-stream": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
-      "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
-      "dev": true
-    },
-    "get-symbol-description": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
-      "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
+    "node_modules/get-symbol-description": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz",
+      "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==",
       "dev": true,
       "peer": true,
-      "requires": {
-        "call-bind": "^1.0.2",
-        "get-intrinsic": "^1.1.1"
+      "dependencies": {
+        "call-bind": "^1.0.5",
+        "es-errors": "^1.3.0",
+        "get-intrinsic": "^1.2.4"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/get-tsconfig": {
+      "version": "4.8.1",
+      "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.8.1.tgz",
+      "integrity": "sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==",
+      "dependencies": {
+        "resolve-pkg-maps": "^1.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
       }
     },
-    "glob": {
+    "node_modules/glob": {
       "version": "7.2.3",
       "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
       "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+      "deprecated": "Glob versions prior to v9 are no longer supported",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "fs.realpath": "^1.0.0",
         "inflight": "^1.0.4",
         "inherits": "2",
         "minimatch": "^3.1.1",
         "once": "^1.3.0",
         "path-is-absolute": "^1.0.0"
+      },
+      "engines": {
+        "node": "*"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
       }
     },
-    "glob-parent": {
+    "node_modules/glob-parent": {
       "version": "5.1.2",
       "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
       "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "is-glob": "^4.0.1"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/glob/node_modules/brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+      "dev": true,
+      "dependencies": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
+      }
+    },
+    "node_modules/glob/node_modules/minimatch": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+      "dev": true,
+      "dependencies": {
+        "brace-expansion": "^1.1.7"
+      },
+      "engines": {
+        "node": "*"
       }
     },
-    "global-modules": {
+    "node_modules/global-modules": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz",
       "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "global-prefix": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=6"
       }
     },
-    "global-prefix": {
+    "node_modules/global-prefix": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz",
       "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==",
       "dev": true,
-      "requires": {
-        "ini": "^1.3.5",
-        "kind-of": "^6.0.2",
-        "which": "^1.3.1"
-      },
       "dependencies": {
-        "which": {
-          "version": "1.3.1",
-          "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
-          "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
-          "dev": true,
-          "requires": {
-            "isexe": "^2.0.0"
-          }
-        }
+        "ini": "^1.3.5",
+        "kind-of": "^6.0.2",
+        "which": "^1.3.1"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/global-prefix/node_modules/which": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+      "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+      "dev": true,
+      "dependencies": {
+        "isexe": "^2.0.0"
+      },
+      "bin": {
+        "which": "bin/which"
       }
     },
-    "globals": {
+    "node_modules/globals": {
       "version": "13.24.0",
       "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
       "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "type-fest": "^0.20.2"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "globalthis": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz",
-      "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==",
+    "node_modules/globalthis": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz",
+      "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==",
       "dev": true,
       "peer": true,
-      "requires": {
-        "define-properties": "^1.1.3"
+      "dependencies": {
+        "define-properties": "^1.2.1",
+        "gopd": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "globby": {
+    "node_modules/globby": {
       "version": "11.1.0",
       "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
       "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "array-union": "^2.1.0",
         "dir-glob": "^3.0.1",
         "fast-glob": "^3.2.9",
         "ignore": "^5.2.0",
         "merge2": "^1.4.1",
         "slash": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "globjoin": {
+    "node_modules/globjoin": {
       "version": "0.1.4",
       "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz",
       "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==",
       "dev": true
     },
-    "gopd": {
+    "node_modules/gopd": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
       "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
       "dev": true,
       "peer": true,
-      "requires": {
+      "dependencies": {
         "get-intrinsic": "^1.1.3"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "graceful-fs": {
-      "version": "4.2.10",
-      "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
-      "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==",
+    "node_modules/graceful-fs": {
+      "version": "4.2.11",
+      "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+      "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
       "dev": true
     },
-    "graphemer": {
+    "node_modules/graphemer": {
       "version": "1.4.0",
       "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
       "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
       "dev": true
     },
-    "hard-rejection": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz",
-      "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==",
-      "dev": true
-    },
-    "has": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-      "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-      "dev": true,
-      "requires": {
-        "function-bind": "^1.1.1"
-      }
+    "node_modules/hachure-fill": {
+      "version": "0.5.2",
+      "resolved": "https://registry.npmjs.org/hachure-fill/-/hachure-fill-0.5.2.tgz",
+      "integrity": "sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg=="
     },
-    "has-bigints": {
+    "node_modules/has-bigints": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
       "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
       "dev": true,
-      "peer": true
+      "peer": true,
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
     },
-    "has-flag": {
+    "node_modules/has-flag": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
       "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
     },
-    "has-property-descriptors": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
-      "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
+    "node_modules/has-property-descriptors": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
+      "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
       "dev": true,
       "peer": true,
-      "requires": {
-        "get-intrinsic": "^1.1.1"
+      "dependencies": {
+        "es-define-property": "^1.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "has-proto": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
-      "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==",
+    "node_modules/has-proto": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
+      "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
       "dev": true,
-      "peer": true
+      "peer": true,
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
     },
-    "has-symbols": {
+    "node_modules/has-symbols": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
       "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
       "dev": true,
-      "peer": true
+      "peer": true,
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
     },
-    "has-tostringtag": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
-      "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
+    "node_modules/has-tostringtag": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
+      "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
       "dev": true,
       "peer": true,
-      "requires": {
-        "has-symbols": "^1.0.2"
+      "dependencies": {
+        "has-symbols": "^1.0.3"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "heap": {
-      "version": "0.2.7",
-      "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz",
-      "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg=="
+    "node_modules/hasown": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+      "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+      "dev": true,
+      "dependencies": {
+        "function-bind": "^1.1.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
     },
-    "highlight.js": {
+    "node_modules/highlight.js": {
       "version": "11.10.0",
       "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.10.0.tgz",
-      "integrity": "sha512-SYVnVFswQER+zu1laSya563s+F8VDGt7o35d4utbamowvUNLLMovFqwCLSocpZTz3MgaSRA1IbqRWZv97dtErQ=="
-    },
-    "hosted-git-info": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz",
-      "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==",
-      "dev": true,
-      "requires": {
-        "lru-cache": "^6.0.0"
+      "integrity": "sha512-SYVnVFswQER+zu1laSya563s+F8VDGt7o35d4utbamowvUNLLMovFqwCLSocpZTz3MgaSRA1IbqRWZv97dtErQ==",
+      "engines": {
+        "node": ">=12.0.0"
       }
     },
-    "html-escaper": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
-      "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
-      "dev": true
-    },
-    "html-tags": {
+    "node_modules/html-tags": {
       "version": "3.3.1",
       "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz",
       "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
     },
-    "http-errors": {
+    "node_modules/http-errors": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
       "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "depd": "2.0.0",
         "inherits": "2.0.4",
         "setprototypeof": "1.2.0",
         "statuses": "2.0.1",
         "toidentifier": "1.0.1"
       },
-      "dependencies": {
-        "statuses": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
-          "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
-          "dev": true
-        }
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/http-errors/node_modules/statuses": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
+      "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.8"
       }
     },
-    "http-proxy": {
+    "node_modules/http-proxy": {
       "version": "1.18.1",
       "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz",
       "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "eventemitter3": "^4.0.0",
         "follow-redirects": "^1.0.0",
         "requires-port": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=8.0.0"
       }
     },
-    "human-signals": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
-      "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
-      "dev": true
-    },
-    "iconv-lite": {
-      "version": "0.4.24",
-      "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
-      "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
-      "dev": true,
-      "requires": {
-        "safer-buffer": ">= 2.1.2 < 3"
+    "node_modules/iconv-lite": {
+      "version": "0.6.3",
+      "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+      "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+      "dependencies": {
+        "safer-buffer": ">= 2.1.2 < 3.0.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "idb-keyval": {
+    "node_modules/idb-keyval": {
       "version": "6.2.1",
       "resolved": "https://registry.npmjs.org/idb-keyval/-/idb-keyval-6.2.1.tgz",
       "integrity": "sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg=="
     },
-    "ignore": {
-      "version": "5.3.1",
-      "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz",
-      "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==",
-      "dev": true
+    "node_modules/ignore": {
+      "version": "5.3.2",
+      "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
+      "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
+      "dev": true,
+      "engines": {
+        "node": ">= 4"
+      }
     },
-    "immutable": {
+    "node_modules/immutable": {
       "version": "3.8.2",
       "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz",
       "integrity": "sha512-15gZoQ38eYjEjxkorfbcgBKBL6R7T459OuK+CpcWt7O3KF4uPCx2tD0uFETlUDIyo+1789crbMhTvQBSR5yBMg==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
     },
-    "import-fresh": {
+    "node_modules/import-fresh": {
       "version": "3.3.0",
       "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
       "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "parent-module": "^1.0.0",
         "resolve-from": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "import-lazy": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz",
-      "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==",
-      "dev": true
-    },
-    "import-local": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz",
-      "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==",
-      "dev": true,
-      "requires": {
-        "pkg-dir": "^4.2.0",
-        "resolve-cwd": "^3.0.0"
-      }
-    },
-    "imurmurhash": {
+    "node_modules/imurmurhash": {
       "version": "0.1.4",
       "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
       "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
-      "dev": true
-    },
-    "indent-string": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz",
-      "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=0.8.19"
+      }
     },
-    "inflight": {
+    "node_modules/inflight": {
       "version": "1.0.6",
       "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
       "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+      "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "once": "^1.3.0",
         "wrappy": "1"
       }
     },
-    "inherits": {
+    "node_modules/inherits": {
       "version": "2.0.4",
       "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
       "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
       "dev": true
     },
-    "ini": {
+    "node_modules/ini": {
       "version": "1.3.8",
       "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
       "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
       "dev": true
     },
-    "internal-slot": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz",
-      "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==",
+    "node_modules/internal-slot": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz",
+      "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==",
       "dev": true,
       "peer": true,
-      "requires": {
-        "get-intrinsic": "^1.2.0",
-        "has": "^1.0.3",
+      "dependencies": {
+        "es-errors": "^1.3.0",
+        "hasown": "^2.0.0",
         "side-channel": "^1.0.4"
+      },
+      "engines": {
+        "node": ">= 0.4"
       }
     },
-    "internmap": {
+    "node_modules/internmap": {
       "version": "2.0.3",
       "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz",
-      "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg=="
+      "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==",
+      "engines": {
+        "node": ">=12"
+      }
     },
-    "is-array-buffer": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.1.tgz",
-      "integrity": "sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==",
+    "node_modules/is-array-buffer": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz",
+      "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==",
       "dev": true,
       "peer": true,
-      "requires": {
+      "dependencies": {
         "call-bind": "^1.0.2",
-        "get-intrinsic": "^1.1.3",
-        "is-typed-array": "^1.1.10"
+        "get-intrinsic": "^1.2.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "is-arrayish": {
+    "node_modules/is-arrayish": {
       "version": "0.2.1",
       "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
       "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
       "dev": true
     },
-    "is-bigint": {
+    "node_modules/is-bigint": {
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
       "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
       "dev": true,
       "peer": true,
-      "requires": {
+      "dependencies": {
         "has-bigints": "^1.0.1"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "is-binary-path": {
+    "node_modules/is-binary-path": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
       "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "binary-extensions": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=8"
       }
     },
-    "is-boolean-object": {
+    "node_modules/is-boolean-object": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
       "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
       "dev": true,
       "peer": true,
-      "requires": {
+      "dependencies": {
         "call-bind": "^1.0.2",
         "has-tostringtag": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/is-builtin-module": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz",
+      "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "builtin-modules": "^3.3.0"
+      },
+      "engines": {
+        "node": ">=6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "is-callable": {
+    "node_modules/is-callable": {
       "version": "1.2.7",
       "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
       "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
       "dev": true,
-      "peer": true
+      "peer": true,
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/is-core-module": {
+      "version": "2.15.1",
+      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz",
+      "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==",
+      "dev": true,
+      "dependencies": {
+        "hasown": "^2.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
     },
-    "is-core-module": {
-      "version": "2.13.0",
-      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz",
-      "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==",
+    "node_modules/is-data-view": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz",
+      "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==",
       "dev": true,
-      "requires": {
-        "has": "^1.0.3"
+      "peer": true,
+      "dependencies": {
+        "is-typed-array": "^1.1.13"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "is-date-object": {
+    "node_modules/is-date-object": {
       "version": "1.0.5",
       "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
       "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
       "dev": true,
       "peer": true,
-      "requires": {
+      "dependencies": {
         "has-tostringtag": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "is-extglob": {
+    "node_modules/is-extglob": {
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
       "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
     },
-    "is-fullwidth-code-point": {
+    "node_modules/is-fullwidth-code-point": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
       "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
-      "dev": true
-    },
-    "is-generator-fn": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz",
-      "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
     },
-    "is-glob": {
+    "node_modules/is-glob": {
       "version": "4.0.3",
       "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
       "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "is-extglob": "^2.1.1"
+      },
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "is-negative-zero": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
-      "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
+    "node_modules/is-negative-zero": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz",
+      "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==",
       "dev": true,
-      "peer": true
+      "peer": true,
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
     },
-    "is-number": {
+    "node_modules/is-number": {
       "version": "7.0.0",
       "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
       "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=0.12.0"
+      }
     },
-    "is-number-like": {
+    "node_modules/is-number-like": {
       "version": "1.0.8",
       "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz",
       "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "lodash.isfinite": "^3.3.2"
       }
     },
-    "is-number-object": {
+    "node_modules/is-number-object": {
       "version": "1.0.7",
       "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
       "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
       "dev": true,
       "peer": true,
-      "requires": {
+      "dependencies": {
         "has-tostringtag": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "is-path-inside": {
+    "node_modules/is-path-inside": {
       "version": "3.0.3",
       "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
       "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
-      "dev": true
-    },
-    "is-plain-obj": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
-      "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
     },
-    "is-plain-object": {
+    "node_modules/is-plain-object": {
       "version": "5.0.0",
       "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
       "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
     },
-    "is-regex": {
+    "node_modules/is-regex": {
       "version": "1.1.4",
       "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
       "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
       "dev": true,
       "peer": true,
-      "requires": {
+      "dependencies": {
         "call-bind": "^1.0.2",
         "has-tostringtag": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "is-shared-array-buffer": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
-      "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
+    "node_modules/is-shared-array-buffer": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz",
+      "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==",
       "dev": true,
       "peer": true,
-      "requires": {
-        "call-bind": "^1.0.2"
+      "dependencies": {
+        "call-bind": "^1.0.7"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "is-stream": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
-      "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
-      "dev": true
-    },
-    "is-string": {
+    "node_modules/is-string": {
       "version": "1.0.7",
       "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
       "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
       "dev": true,
       "peer": true,
-      "requires": {
-        "has-tostringtag": "^1.0.0"
-      }
-    },
-    "is-symbol": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
-      "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
-      "dev": true,
-      "peer": true,
-      "requires": {
-        "has-symbols": "^1.0.2"
-      }
-    },
-    "is-typed-array": {
-      "version": "1.1.10",
-      "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz",
-      "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==",
-      "dev": true,
-      "peer": true,
-      "requires": {
-        "available-typed-arrays": "^1.0.5",
-        "call-bind": "^1.0.2",
-        "for-each": "^0.3.3",
-        "gopd": "^1.0.1",
-        "has-tostringtag": "^1.0.0"
-      }
-    },
-    "is-weakref": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
-      "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
-      "dev": true,
-      "peer": true,
-      "requires": {
-        "call-bind": "^1.0.2"
-      }
-    },
-    "is-wsl": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
-      "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==",
-      "dev": true
-    },
-    "isexe": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
-      "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
-      "dev": true
-    },
-    "istanbul-lib-coverage": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz",
-      "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==",
-      "dev": true
-    },
-    "istanbul-lib-instrument": {
-      "version": "5.2.1",
-      "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz",
-      "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==",
-      "dev": true,
-      "requires": {
-        "@babel/core": "^7.12.3",
-        "@babel/parser": "^7.14.7",
-        "@istanbuljs/schema": "^0.1.2",
-        "istanbul-lib-coverage": "^3.2.0",
-        "semver": "^6.3.0"
-      },
       "dependencies": {
-        "semver": {
-          "version": "6.3.1",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
-          "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
-          "dev": true
-        }
-      }
-    },
-    "istanbul-lib-report": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz",
-      "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==",
-      "dev": true,
-      "requires": {
-        "istanbul-lib-coverage": "^3.0.0",
-        "make-dir": "^4.0.0",
-        "supports-color": "^7.1.0"
-      }
-    },
-    "istanbul-lib-source-maps": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz",
-      "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==",
-      "dev": true,
-      "requires": {
-        "debug": "^4.1.1",
-        "istanbul-lib-coverage": "^3.0.0",
-        "source-map": "^0.6.1"
+        "has-tostringtag": "^1.0.0"
       },
-      "dependencies": {
-        "debug": {
-          "version": "4.3.4",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
-          "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
-          "dev": true,
-          "requires": {
-            "ms": "2.1.2"
-          }
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-          "dev": true
-        }
-      }
-    },
-    "istanbul-reports": {
-      "version": "3.1.6",
-      "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz",
-      "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==",
-      "dev": true,
-      "requires": {
-        "html-escaper": "^2.0.0",
-        "istanbul-lib-report": "^3.0.0"
-      }
-    },
-    "jake": {
-      "version": "10.9.1",
-      "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.1.tgz",
-      "integrity": "sha512-61btcOHNnLnsOdtLgA5efqQWjnSi/vow5HbI7HMdKKWqvrKR1bLK3BPlJn9gcSaP2ewuamUSMB5XEy76KUIS2w==",
-      "dev": true,
-      "requires": {
-        "async": "^3.2.3",
-        "chalk": "^4.0.2",
-        "filelist": "^1.0.4",
-        "minimatch": "^3.1.2"
+      "engines": {
+        "node": ">= 0.4"
       },
-      "dependencies": {
-        "async": {
-          "version": "3.2.5",
-          "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz",
-          "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==",
-          "dev": true
-        }
-      }
-    },
-    "jest": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz",
-      "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==",
-      "dev": true,
-      "requires": {
-        "@jest/core": "^29.7.0",
-        "@jest/types": "^29.6.3",
-        "import-local": "^3.0.2",
-        "jest-cli": "^29.7.0"
-      }
-    },
-    "jest-changed-files": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz",
-      "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==",
-      "dev": true,
-      "requires": {
-        "execa": "^5.0.0",
-        "jest-util": "^29.7.0",
-        "p-limit": "^3.1.0"
-      }
-    },
-    "jest-circus": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz",
-      "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==",
-      "dev": true,
-      "requires": {
-        "@jest/environment": "^29.7.0",
-        "@jest/expect": "^29.7.0",
-        "@jest/test-result": "^29.7.0",
-        "@jest/types": "^29.6.3",
-        "@types/node": "*",
-        "chalk": "^4.0.0",
-        "co": "^4.6.0",
-        "dedent": "^1.0.0",
-        "is-generator-fn": "^2.0.0",
-        "jest-each": "^29.7.0",
-        "jest-matcher-utils": "^29.7.0",
-        "jest-message-util": "^29.7.0",
-        "jest-runtime": "^29.7.0",
-        "jest-snapshot": "^29.7.0",
-        "jest-util": "^29.7.0",
-        "p-limit": "^3.1.0",
-        "pretty-format": "^29.7.0",
-        "pure-rand": "^6.0.0",
-        "slash": "^3.0.0",
-        "stack-utils": "^2.0.3"
-      }
-    },
-    "jest-cli": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz",
-      "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==",
-      "dev": true,
-      "requires": {
-        "@jest/core": "^29.7.0",
-        "@jest/test-result": "^29.7.0",
-        "@jest/types": "^29.6.3",
-        "chalk": "^4.0.0",
-        "create-jest": "^29.7.0",
-        "exit": "^0.1.2",
-        "import-local": "^3.0.2",
-        "jest-config": "^29.7.0",
-        "jest-util": "^29.7.0",
-        "jest-validate": "^29.7.0",
-        "yargs": "^17.3.1"
-      }
-    },
-    "jest-config": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz",
-      "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==",
-      "dev": true,
-      "requires": {
-        "@babel/core": "^7.11.6",
-        "@jest/test-sequencer": "^29.7.0",
-        "@jest/types": "^29.6.3",
-        "babel-jest": "^29.7.0",
-        "chalk": "^4.0.0",
-        "ci-info": "^3.2.0",
-        "deepmerge": "^4.2.2",
-        "glob": "^7.1.3",
-        "graceful-fs": "^4.2.9",
-        "jest-circus": "^29.7.0",
-        "jest-environment-node": "^29.7.0",
-        "jest-get-type": "^29.6.3",
-        "jest-regex-util": "^29.6.3",
-        "jest-resolve": "^29.7.0",
-        "jest-runner": "^29.7.0",
-        "jest-util": "^29.7.0",
-        "jest-validate": "^29.7.0",
-        "micromatch": "^4.0.4",
-        "parse-json": "^5.2.0",
-        "pretty-format": "^29.7.0",
-        "slash": "^3.0.0",
-        "strip-json-comments": "^3.1.1"
-      }
-    },
-    "jest-diff": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz",
-      "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==",
-      "dev": true,
-      "requires": {
-        "chalk": "^4.0.0",
-        "diff-sequences": "^29.6.3",
-        "jest-get-type": "^29.6.3",
-        "pretty-format": "^29.7.0"
-      }
-    },
-    "jest-docblock": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz",
-      "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==",
-      "dev": true,
-      "requires": {
-        "detect-newline": "^3.0.0"
-      }
-    },
-    "jest-each": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz",
-      "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==",
-      "dev": true,
-      "requires": {
-        "@jest/types": "^29.6.3",
-        "chalk": "^4.0.0",
-        "jest-get-type": "^29.6.3",
-        "jest-util": "^29.7.0",
-        "pretty-format": "^29.7.0"
-      }
-    },
-    "jest-environment-node": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz",
-      "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==",
-      "dev": true,
-      "requires": {
-        "@jest/environment": "^29.7.0",
-        "@jest/fake-timers": "^29.7.0",
-        "@jest/types": "^29.6.3",
-        "@types/node": "*",
-        "jest-mock": "^29.7.0",
-        "jest-util": "^29.7.0"
-      }
-    },
-    "jest-get-type": {
-      "version": "29.6.3",
-      "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz",
-      "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==",
-      "dev": true
-    },
-    "jest-haste-map": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz",
-      "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==",
-      "dev": true,
-      "requires": {
-        "@jest/types": "^29.6.3",
-        "@types/graceful-fs": "^4.1.3",
-        "@types/node": "*",
-        "anymatch": "^3.0.3",
-        "fb-watchman": "^2.0.0",
-        "fsevents": "^2.3.2",
-        "graceful-fs": "^4.2.9",
-        "jest-regex-util": "^29.6.3",
-        "jest-util": "^29.7.0",
-        "jest-worker": "^29.7.0",
-        "micromatch": "^4.0.4",
-        "walker": "^1.0.8"
-      }
-    },
-    "jest-leak-detector": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz",
-      "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==",
-      "dev": true,
-      "requires": {
-        "jest-get-type": "^29.6.3",
-        "pretty-format": "^29.7.0"
-      }
-    },
-    "jest-matcher-utils": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz",
-      "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==",
-      "dev": true,
-      "requires": {
-        "chalk": "^4.0.0",
-        "jest-diff": "^29.7.0",
-        "jest-get-type": "^29.6.3",
-        "pretty-format": "^29.7.0"
-      }
-    },
-    "jest-message-util": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz",
-      "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==",
-      "dev": true,
-      "requires": {
-        "@babel/code-frame": "^7.12.13",
-        "@jest/types": "^29.6.3",
-        "@types/stack-utils": "^2.0.0",
-        "chalk": "^4.0.0",
-        "graceful-fs": "^4.2.9",
-        "micromatch": "^4.0.4",
-        "pretty-format": "^29.7.0",
-        "slash": "^3.0.0",
-        "stack-utils": "^2.0.3"
-      }
-    },
-    "jest-mock": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz",
-      "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==",
-      "dev": true,
-      "requires": {
-        "@jest/types": "^29.6.3",
-        "@types/node": "*",
-        "jest-util": "^29.7.0"
-      }
-    },
-    "jest-pnp-resolver": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz",
-      "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==",
-      "dev": true,
-      "requires": {}
-    },
-    "jest-regex-util": {
-      "version": "29.6.3",
-      "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz",
-      "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==",
-      "dev": true
-    },
-    "jest-resolve": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz",
-      "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==",
-      "dev": true,
-      "requires": {
-        "chalk": "^4.0.0",
-        "graceful-fs": "^4.2.9",
-        "jest-haste-map": "^29.7.0",
-        "jest-pnp-resolver": "^1.2.2",
-        "jest-util": "^29.7.0",
-        "jest-validate": "^29.7.0",
-        "resolve": "^1.20.0",
-        "resolve.exports": "^2.0.0",
-        "slash": "^3.0.0"
-      }
-    },
-    "jest-resolve-dependencies": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz",
-      "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==",
-      "dev": true,
-      "requires": {
-        "jest-regex-util": "^29.6.3",
-        "jest-snapshot": "^29.7.0"
-      }
-    },
-    "jest-runner": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz",
-      "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==",
-      "dev": true,
-      "requires": {
-        "@jest/console": "^29.7.0",
-        "@jest/environment": "^29.7.0",
-        "@jest/test-result": "^29.7.0",
-        "@jest/transform": "^29.7.0",
-        "@jest/types": "^29.6.3",
-        "@types/node": "*",
-        "chalk": "^4.0.0",
-        "emittery": "^0.13.1",
-        "graceful-fs": "^4.2.9",
-        "jest-docblock": "^29.7.0",
-        "jest-environment-node": "^29.7.0",
-        "jest-haste-map": "^29.7.0",
-        "jest-leak-detector": "^29.7.0",
-        "jest-message-util": "^29.7.0",
-        "jest-resolve": "^29.7.0",
-        "jest-runtime": "^29.7.0",
-        "jest-util": "^29.7.0",
-        "jest-watcher": "^29.7.0",
-        "jest-worker": "^29.7.0",
-        "p-limit": "^3.1.0",
-        "source-map-support": "0.5.13"
-      }
-    },
-    "jest-runtime": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz",
-      "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==",
-      "dev": true,
-      "requires": {
-        "@jest/environment": "^29.7.0",
-        "@jest/fake-timers": "^29.7.0",
-        "@jest/globals": "^29.7.0",
-        "@jest/source-map": "^29.6.3",
-        "@jest/test-result": "^29.7.0",
-        "@jest/transform": "^29.7.0",
-        "@jest/types": "^29.6.3",
-        "@types/node": "*",
-        "chalk": "^4.0.0",
-        "cjs-module-lexer": "^1.0.0",
-        "collect-v8-coverage": "^1.0.0",
-        "glob": "^7.1.3",
-        "graceful-fs": "^4.2.9",
-        "jest-haste-map": "^29.7.0",
-        "jest-message-util": "^29.7.0",
-        "jest-mock": "^29.7.0",
-        "jest-regex-util": "^29.6.3",
-        "jest-resolve": "^29.7.0",
-        "jest-snapshot": "^29.7.0",
-        "jest-util": "^29.7.0",
-        "slash": "^3.0.0",
-        "strip-bom": "^4.0.0"
-      },
-      "dependencies": {
-        "strip-bom": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
-          "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
-          "dev": true
-        }
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "jest-snapshot": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz",
-      "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==",
-      "dev": true,
-      "requires": {
-        "@babel/core": "^7.11.6",
-        "@babel/generator": "^7.7.2",
-        "@babel/plugin-syntax-jsx": "^7.7.2",
-        "@babel/plugin-syntax-typescript": "^7.7.2",
-        "@babel/types": "^7.3.3",
-        "@jest/expect-utils": "^29.7.0",
-        "@jest/transform": "^29.7.0",
-        "@jest/types": "^29.6.3",
-        "babel-preset-current-node-syntax": "^1.0.0",
-        "chalk": "^4.0.0",
-        "expect": "^29.7.0",
-        "graceful-fs": "^4.2.9",
-        "jest-diff": "^29.7.0",
-        "jest-get-type": "^29.6.3",
-        "jest-matcher-utils": "^29.7.0",
-        "jest-message-util": "^29.7.0",
-        "jest-util": "^29.7.0",
-        "natural-compare": "^1.4.0",
-        "pretty-format": "^29.7.0",
-        "semver": "^7.5.3"
+    "node_modules/is-symbol": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
+      "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "has-symbols": "^1.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "jest-util": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz",
-      "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==",
+    "node_modules/is-typed-array": {
+      "version": "1.1.13",
+      "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz",
+      "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==",
       "dev": true,
-      "requires": {
-        "@jest/types": "^29.6.3",
-        "@types/node": "*",
-        "chalk": "^4.0.0",
-        "ci-info": "^3.2.0",
-        "graceful-fs": "^4.2.9",
-        "picomatch": "^2.2.3"
+      "peer": true,
+      "dependencies": {
+        "which-typed-array": "^1.1.14"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "jest-validate": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz",
-      "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==",
+    "node_modules/is-weakref": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
+      "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
       "dev": true,
-      "requires": {
-        "@jest/types": "^29.6.3",
-        "camelcase": "^6.2.0",
-        "chalk": "^4.0.0",
-        "jest-get-type": "^29.6.3",
-        "leven": "^3.1.0",
-        "pretty-format": "^29.7.0"
-      },
+      "peer": true,
       "dependencies": {
-        "camelcase": {
-          "version": "6.3.0",
-          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
-          "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
-          "dev": true
-        }
+        "call-bind": "^1.0.2"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "jest-watcher": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz",
-      "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==",
+    "node_modules/is-wsl": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
+      "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==",
       "dev": true,
-      "requires": {
-        "@jest/test-result": "^29.7.0",
-        "@jest/types": "^29.6.3",
-        "@types/node": "*",
-        "ansi-escapes": "^4.2.1",
-        "chalk": "^4.0.0",
-        "emittery": "^0.13.1",
-        "jest-util": "^29.7.0",
-        "string-length": "^4.0.1"
+      "engines": {
+        "node": ">=4"
       }
     },
-    "jest-worker": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz",
-      "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==",
+    "node_modules/isarray": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
+      "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
       "dev": true,
-      "requires": {
-        "@types/node": "*",
-        "jest-util": "^29.7.0",
-        "merge-stream": "^2.0.0",
-        "supports-color": "^8.0.0"
-      },
-      "dependencies": {
-        "supports-color": {
-          "version": "8.1.1",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
-          "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
-          "dev": true,
-          "requires": {
-            "has-flag": "^4.0.0"
-          }
-        }
-      }
+      "peer": true
+    },
+    "node_modules/isexe": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+      "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+      "dev": true
     },
-    "jquery": {
+    "node_modules/jquery": {
       "version": "3.7.0",
       "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.0.tgz",
       "integrity": "sha512-umpJ0/k8X0MvD1ds0P9SfowREz2LenHsQaxSohMZ5OMNEU2r0tf8pdeEFTHMFxWVxKNyU9rTtK3CWzUCTKJUeQ=="
     },
-    "js-tokens": {
+    "node_modules/js-tokens": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
       "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
       "dev": true
     },
-    "js-yaml": {
+    "node_modules/js-yaml": {
       "version": "4.1.0",
       "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
       "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "argparse": "^2.0.1"
+      },
+      "bin": {
+        "js-yaml": "bin/js-yaml.js"
       }
     },
-    "jsesc": {
-      "version": "2.5.2",
-      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
-      "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+    "node_modules/json-buffer": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
+      "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
       "dev": true
     },
-    "json-parse-even-better-errors": {
+    "node_modules/json-parse-even-better-errors": {
       "version": "2.3.1",
       "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
       "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
       "dev": true
     },
-    "json-schema-traverse": {
+    "node_modules/json-schema-traverse": {
       "version": "0.4.1",
       "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
       "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
       "dev": true
     },
-    "json-stable-stringify-without-jsonify": {
+    "node_modules/json-stable-stringify-without-jsonify": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
       "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
       "dev": true
     },
-    "json5": {
+    "node_modules/json5": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
       "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
       "dev": true,
       "peer": true,
-      "requires": {
+      "dependencies": {
         "minimist": "^1.2.0"
+      },
+      "bin": {
+        "json5": "lib/cli.js"
       }
     },
-    "jsonfile": {
+    "node_modules/jsonfile": {
       "version": "3.0.1",
       "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz",
       "integrity": "sha512-oBko6ZHlubVB5mRFkur5vgYR1UyqX+S6Y/oCfLhqNdcc2fYFlDpIoNc7AfKS1KOGcnNAkvsr0grLck9ANM815w==",
       "dev": true,
-      "requires": {
+      "optionalDependencies": {
         "graceful-fs": "^4.1.6"
       }
     },
-    "katex": {
-      "version": "0.16.10",
-      "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.10.tgz",
-      "integrity": "sha512-ZiqaC04tp2O5utMsl2TEZTXxa6WSC4yo0fv5ML++D3QZv/vx2Mct0mTlRx3O+uUkjfuAgOkzsCmq5MiUEsDDdA==",
-      "requires": {
+    "node_modules/katex": {
+      "version": "0.16.11",
+      "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.11.tgz",
+      "integrity": "sha512-RQrI8rlHY92OLf3rho/Ts8i/XvjgguEjOkO1BEXcU3N8BqPpSzBNwV/G0Ukr+P/l3ivvJUE/Fa/CwbS6HesGNQ==",
+      "funding": [
+        "https://opencollective.com/katex",
+        "https://github.com/sponsors/katex"
+      ],
+      "dependencies": {
         "commander": "^8.3.0"
       },
+      "bin": {
+        "katex": "cli.js"
+      }
+    },
+    "node_modules/katex/node_modules/commander": {
+      "version": "8.3.0",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
+      "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==",
+      "engines": {
+        "node": ">= 12"
+      }
+    },
+    "node_modules/keyv": {
+      "version": "4.5.4",
+      "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
+      "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
+      "dev": true,
       "dependencies": {
-        "commander": {
-          "version": "8.3.0",
-          "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
-          "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww=="
-        }
+        "json-buffer": "3.0.1"
       }
     },
-    "khroma": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/khroma/-/khroma-2.0.0.tgz",
-      "integrity": "sha512-2J8rDNlQWbtiNYThZRvmMv5yt44ZakX+Tz5ZIp/mN1pt4snn+m030Va5Z4v8xA0cQFDXBwO/8i42xL4QPsVk3g=="
+    "node_modules/khroma": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/khroma/-/khroma-2.1.0.tgz",
+      "integrity": "sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw=="
     },
-    "kind-of": {
+    "node_modules/kind-of": {
       "version": "6.0.3",
       "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
       "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
     },
-    "kleur": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
-      "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
+    "node_modules/known-css-properties": {
+      "version": "0.34.0",
+      "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.34.0.tgz",
+      "integrity": "sha512-tBECoUqNFbyAY4RrbqsBQqDFpGXAEbdD5QKr8kACx3+rnArmuuR22nKQWKazvp07N9yjTyDZaw/20UIH8tL9DQ==",
       "dev": true
     },
-    "known-css-properties": {
-      "version": "0.28.0",
-      "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.28.0.tgz",
-      "integrity": "sha512-9pSL5XB4J+ifHP0e0jmmC98OGC1nL8/JjS+fi6mnTlIf//yt/MfVLtKg7S6nCtj/8KTcWX7nRlY0XywoYY1ISQ==",
-      "dev": true
+    "node_modules/kolorist": {
+      "version": "1.8.0",
+      "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz",
+      "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ=="
     },
-    "layout-base": {
+    "node_modules/langium": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/langium/-/langium-3.0.0.tgz",
+      "integrity": "sha512-+Ez9EoiByeoTu/2BXmEaZ06iPNXM6thWJp02KfBO/raSMyCJ4jw7AkWWa+zBCTm0+Tw1Fj9FOxdqSskyN5nAwg==",
+      "dependencies": {
+        "chevrotain": "~11.0.3",
+        "chevrotain-allstar": "~0.3.0",
+        "vscode-languageserver": "~9.0.1",
+        "vscode-languageserver-textdocument": "~1.0.11",
+        "vscode-uri": "~3.0.8"
+      },
+      "engines": {
+        "node": ">=16.0.0"
+      }
+    },
+    "node_modules/layout-base": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-1.0.2.tgz",
       "integrity": "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg=="
     },
-    "leven": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
-      "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
-      "dev": true
-    },
-    "levn": {
+    "node_modules/levn": {
       "version": "0.4.1",
       "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
       "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "prelude-ls": "^1.2.1",
         "type-check": "~0.4.0"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
       }
     },
-    "limiter": {
+    "node_modules/limiter": {
       "version": "1.1.5",
       "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz",
       "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==",
       "dev": true
     },
-    "lines-and-columns": {
+    "node_modules/lines-and-columns": {
       "version": "1.2.4",
       "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
       "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
       "dev": true
     },
-    "lit-html": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.2.0.tgz",
-      "integrity": "sha512-pwT/HwoxqI9FggTrYVarkBKFN9MlTUpLrDHubTmW4SrkL3kkqW5gxwbxMMUnbbRHBC0WTZnYHcjDSCM559VyfA==",
-      "requires": {
+    "node_modules/lit-html": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.2.1.tgz",
+      "integrity": "sha512-qI/3lziaPMSKsrwlxH/xMgikhQ0EGOX2ICU73Bi/YHFvz2j/yMCIrw4+puF2IpQ4+upd3EWbvnHM9+PnJn48YA==",
+      "dependencies": {
         "@types/trusted-types": "^2.0.2"
       }
     },
-    "locate-path": {
+    "node_modules/local-pkg": {
+      "version": "0.5.0",
+      "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz",
+      "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==",
+      "dependencies": {
+        "mlly": "^1.4.2",
+        "pkg-types": "^1.0.3"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/antfu"
+      }
+    },
+    "node_modules/locate-path": {
       "version": "6.0.0",
       "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
       "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "p-locate": "^5.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "lodash": {
+    "node_modules/lodash": {
       "version": "4.17.21",
       "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
-      "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
+      "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+      "dev": true
     },
-    "lodash-es": {
+    "node_modules/lodash-es": {
       "version": "4.17.21",
       "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
       "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw=="
     },
-    "lodash.isfinite": {
+    "node_modules/lodash.isfinite": {
       "version": "3.3.2",
       "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz",
       "integrity": "sha512-7FGG40uhC8Mm633uKW1r58aElFlBlxCrg9JfSi3P6aYiWmfiWF0PgMd86ZUsxE5GwWPdHoS2+48bwTh2VPkIQA==",
       "dev": true
     },
-    "lodash.memoize": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
-      "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==",
-      "dev": true
-    },
-    "lodash.merge": {
+    "node_modules/lodash.merge": {
       "version": "4.6.2",
-      "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
-      "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
-      "dev": true
-    },
-    "lodash.truncate": {
-      "version": "4.4.2",
-      "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz",
-      "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==",
-      "dev": true
-    },
-    "lru-cache": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
-      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
-      "dev": true,
-      "requires": {
-        "yallist": "^4.0.0"
-      }
-    },
-    "lunr": {
-      "version": "2.3.9",
-      "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz",
-      "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow=="
-    },
-    "lunr-languages": {
-      "version": "1.14.0",
-      "resolved": "https://registry.npmjs.org/lunr-languages/-/lunr-languages-1.14.0.tgz",
-      "integrity": "sha512-hWUAb2KqM3L7J5bcrngszzISY4BxrXn/Xhbb9TTCJYEGqlR1nG67/M14sp09+PTIRklobrn57IAxcdcO/ZFyNA=="
-    },
-    "make-dir": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz",
-      "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==",
-      "dev": true,
-      "requires": {
-        "semver": "^7.5.3"
-      }
-    },
-    "make-error": {
-      "version": "1.3.6",
-      "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
-      "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
-      "dev": true
-    },
-    "makeerror": {
-      "version": "1.0.12",
-      "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz",
-      "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==",
-      "dev": true,
-      "requires": {
-        "tmpl": "1.0.5"
-      }
-    },
-    "map-obj": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz",
-      "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==",
-      "dev": true
-    },
-    "mathjax": {
-      "version": "3.2.2",
-      "resolved": "https://registry.npmjs.org/mathjax/-/mathjax-3.2.2.tgz",
-      "integrity": "sha512-Bt+SSVU8eBG27zChVewOicYs7Xsdt40qm4+UpHyX7k0/O9NliPc+x77k1/FEsPsjKPZGJvtRZM1vO+geW0OhGw=="
-    },
-    "mathml-tag-names": {
-      "version": "2.1.3",
-      "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz",
-      "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==",
-      "dev": true
-    },
-    "mdast-util-from-markdown": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.0.tgz",
-      "integrity": "sha512-HN3W1gRIuN/ZW295c7zi7g9lVBllMgZE40RxCX37wrTPWXCWtpvOZdfnuK+1WNpvZje6XuJeI3Wnb4TJEUem+g==",
-      "requires": {
-        "@types/mdast": "^3.0.0",
-        "@types/unist": "^2.0.0",
-        "decode-named-character-reference": "^1.0.0",
-        "mdast-util-to-string": "^3.1.0",
-        "micromark": "^3.0.0",
-        "micromark-util-decode-numeric-character-reference": "^1.0.0",
-        "micromark-util-decode-string": "^1.0.0",
-        "micromark-util-normalize-identifier": "^1.0.0",
-        "micromark-util-symbol": "^1.0.0",
-        "micromark-util-types": "^1.0.0",
-        "unist-util-stringify-position": "^3.0.0",
-        "uvu": "^0.5.0"
-      }
-    },
-    "mdast-util-to-string": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz",
-      "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==",
-      "requires": {
-        "@types/mdast": "^3.0.0"
-      }
-    },
-    "mdn-data": {
-      "version": "2.0.30",
-      "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
-      "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==",
-      "dev": true
-    },
-    "meow": {
-      "version": "10.1.5",
-      "resolved": "https://registry.npmjs.org/meow/-/meow-10.1.5.tgz",
-      "integrity": "sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==",
-      "dev": true,
-      "requires": {
-        "@types/minimist": "^1.2.2",
-        "camelcase-keys": "^7.0.0",
-        "decamelize": "^5.0.0",
-        "decamelize-keys": "^1.1.0",
-        "hard-rejection": "^2.1.0",
-        "minimist-options": "4.1.0",
-        "normalize-package-data": "^3.0.2",
-        "read-pkg-up": "^8.0.0",
-        "redent": "^4.0.0",
-        "trim-newlines": "^4.0.2",
-        "type-fest": "^1.2.2",
-        "yargs-parser": "^20.2.9"
-      },
-      "dependencies": {
-        "type-fest": {
-          "version": "1.4.0",
-          "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
-          "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==",
-          "dev": true
-        },
-        "yargs-parser": {
-          "version": "20.2.9",
-          "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
-          "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
-          "dev": true
-        }
-      }
-    },
-    "merge-stream": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
-      "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
-      "dev": true
-    },
-    "merge2": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
-      "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
-      "dev": true
-    },
-    "mermaid": {
-      "version": "10.9.1",
-      "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-10.9.1.tgz",
-      "integrity": "sha512-Mx45Obds5W1UkW1nv/7dHRsbfMM1aOKA2+Pxs/IGHNonygDHwmng8xTHyS9z4KWVi0rbko8gjiBmuwwXQ7tiNA==",
-      "requires": {
-        "@braintree/sanitize-url": "^6.0.1",
-        "@types/d3-scale": "^4.0.3",
-        "@types/d3-scale-chromatic": "^3.0.0",
-        "cytoscape": "^3.28.1",
-        "cytoscape-cose-bilkent": "^4.1.0",
-        "d3": "^7.4.0",
-        "d3-sankey": "^0.12.3",
-        "dagre-d3-es": "7.0.10",
-        "dayjs": "^1.11.7",
-        "dompurify": "^3.0.5",
-        "elkjs": "^0.9.0",
-        "katex": "^0.16.9",
-        "khroma": "^2.0.0",
-        "lodash-es": "^4.17.21",
-        "mdast-util-from-markdown": "^1.3.0",
-        "non-layered-tidy-tree-layout": "^2.0.2",
-        "stylis": "^4.1.3",
-        "ts-dedent": "^2.2.0",
-        "uuid": "^9.0.0",
-        "web-worker": "^1.2.0"
-      }
-    },
-    "micromark": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.1.0.tgz",
-      "integrity": "sha512-6Mj0yHLdUZjHnOPgr5xfWIMqMWS12zDN6iws9SLuSz76W8jTtAv24MN4/CL7gJrl5vtxGInkkqDv/JIoRsQOvA==",
-      "requires": {
-        "@types/debug": "^4.0.0",
-        "debug": "^4.0.0",
-        "decode-named-character-reference": "^1.0.0",
-        "micromark-core-commonmark": "^1.0.1",
-        "micromark-factory-space": "^1.0.0",
-        "micromark-util-character": "^1.0.0",
-        "micromark-util-chunked": "^1.0.0",
-        "micromark-util-combine-extensions": "^1.0.0",
-        "micromark-util-decode-numeric-character-reference": "^1.0.0",
-        "micromark-util-encode": "^1.0.0",
-        "micromark-util-normalize-identifier": "^1.0.0",
-        "micromark-util-resolve-all": "^1.0.0",
-        "micromark-util-sanitize-uri": "^1.0.0",
-        "micromark-util-subtokenize": "^1.0.0",
-        "micromark-util-symbol": "^1.0.0",
-        "micromark-util-types": "^1.0.1",
-        "uvu": "^0.5.0"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "4.3.4",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
-          "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
-          "requires": {
-            "ms": "2.1.2"
-          }
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
-        }
-      }
-    },
-    "micromark-core-commonmark": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.0.6.tgz",
-      "integrity": "sha512-K+PkJTxqjFfSNkfAhp4GB+cZPfQd6dxtTXnf+RjZOV7T4EEXnvgzOcnp+eSTmpGk9d1S9sL6/lqrgSNn/s0HZA==",
-      "requires": {
-        "decode-named-character-reference": "^1.0.0",
-        "micromark-factory-destination": "^1.0.0",
-        "micromark-factory-label": "^1.0.0",
-        "micromark-factory-space": "^1.0.0",
-        "micromark-factory-title": "^1.0.0",
-        "micromark-factory-whitespace": "^1.0.0",
-        "micromark-util-character": "^1.0.0",
-        "micromark-util-chunked": "^1.0.0",
-        "micromark-util-classify-character": "^1.0.0",
-        "micromark-util-html-tag-name": "^1.0.0",
-        "micromark-util-normalize-identifier": "^1.0.0",
-        "micromark-util-resolve-all": "^1.0.0",
-        "micromark-util-subtokenize": "^1.0.0",
-        "micromark-util-symbol": "^1.0.0",
-        "micromark-util-types": "^1.0.1",
-        "uvu": "^0.5.0"
-      }
-    },
-    "micromark-factory-destination": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.0.0.tgz",
-      "integrity": "sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw==",
-      "requires": {
-        "micromark-util-character": "^1.0.0",
-        "micromark-util-symbol": "^1.0.0",
-        "micromark-util-types": "^1.0.0"
-      }
-    },
-    "micromark-factory-label": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.0.2.tgz",
-      "integrity": "sha512-CTIwxlOnU7dEshXDQ+dsr2n+yxpP0+fn271pu0bwDIS8uqfFcumXpj5mLn3hSC8iw2MUr6Gx8EcKng1dD7i6hg==",
-      "requires": {
-        "micromark-util-character": "^1.0.0",
-        "micromark-util-symbol": "^1.0.0",
-        "micromark-util-types": "^1.0.0",
-        "uvu": "^0.5.0"
-      }
-    },
-    "micromark-factory-space": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.0.0.tgz",
-      "integrity": "sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew==",
-      "requires": {
-        "micromark-util-character": "^1.0.0",
-        "micromark-util-types": "^1.0.0"
-      }
-    },
-    "micromark-factory-title": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.0.2.tgz",
-      "integrity": "sha512-zily+Nr4yFqgMGRKLpTVsNl5L4PMu485fGFDOQJQBl2NFpjGte1e86zC0da93wf97jrc4+2G2GQudFMHn3IX+A==",
-      "requires": {
-        "micromark-factory-space": "^1.0.0",
-        "micromark-util-character": "^1.0.0",
-        "micromark-util-symbol": "^1.0.0",
-        "micromark-util-types": "^1.0.0",
-        "uvu": "^0.5.0"
-      }
-    },
-    "micromark-factory-whitespace": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.0.0.tgz",
-      "integrity": "sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A==",
-      "requires": {
-        "micromark-factory-space": "^1.0.0",
-        "micromark-util-character": "^1.0.0",
-        "micromark-util-symbol": "^1.0.0",
-        "micromark-util-types": "^1.0.0"
-      }
-    },
-    "micromark-util-character": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.1.0.tgz",
-      "integrity": "sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg==",
-      "requires": {
-        "micromark-util-symbol": "^1.0.0",
-        "micromark-util-types": "^1.0.0"
-      }
-    },
-    "micromark-util-chunked": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.0.0.tgz",
-      "integrity": "sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g==",
-      "requires": {
-        "micromark-util-symbol": "^1.0.0"
-      }
+      "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+      "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+      "dev": true
     },
-    "micromark-util-classify-character": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.0.0.tgz",
-      "integrity": "sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA==",
-      "requires": {
-        "micromark-util-character": "^1.0.0",
-        "micromark-util-symbol": "^1.0.0",
-        "micromark-util-types": "^1.0.0"
-      }
+    "node_modules/lodash.truncate": {
+      "version": "4.4.2",
+      "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz",
+      "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==",
+      "dev": true
     },
-    "micromark-util-combine-extensions": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.0.0.tgz",
-      "integrity": "sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA==",
-      "requires": {
-        "micromark-util-chunked": "^1.0.0",
-        "micromark-util-types": "^1.0.0"
-      }
+    "node_modules/lunr": {
+      "version": "2.3.9",
+      "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz",
+      "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow=="
     },
-    "micromark-util-decode-numeric-character-reference": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.0.0.tgz",
-      "integrity": "sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w==",
-      "requires": {
-        "micromark-util-symbol": "^1.0.0"
-      }
+    "node_modules/lunr-languages": {
+      "version": "1.14.0",
+      "resolved": "https://registry.npmjs.org/lunr-languages/-/lunr-languages-1.14.0.tgz",
+      "integrity": "sha512-hWUAb2KqM3L7J5bcrngszzISY4BxrXn/Xhbb9TTCJYEGqlR1nG67/M14sp09+PTIRklobrn57IAxcdcO/ZFyNA=="
     },
-    "micromark-util-decode-string": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.0.2.tgz",
-      "integrity": "sha512-DLT5Ho02qr6QWVNYbRZ3RYOSSWWFuH3tJexd3dgN1odEuPNxCngTCXJum7+ViRAd9BbdxCvMToPOD/IvVhzG6Q==",
-      "requires": {
-        "decode-named-character-reference": "^1.0.0",
-        "micromark-util-character": "^1.0.0",
-        "micromark-util-decode-numeric-character-reference": "^1.0.0",
-        "micromark-util-symbol": "^1.0.0"
+    "node_modules/marked": {
+      "version": "13.0.3",
+      "resolved": "https://registry.npmjs.org/marked/-/marked-13.0.3.tgz",
+      "integrity": "sha512-rqRix3/TWzE9rIoFGIn8JmsVfhiuC8VIQ8IdX5TfzmeBucdY05/0UlzKaw0eVtpcN/OdVFpBk7CjKGo9iHJ/zA==",
+      "bin": {
+        "marked": "bin/marked.js"
+      },
+      "engines": {
+        "node": ">= 18"
       }
     },
-    "micromark-util-encode": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.0.1.tgz",
-      "integrity": "sha512-U2s5YdnAYexjKDel31SVMPbfi+eF8y1U4pfiRW/Y8EFVCy/vgxk/2wWTxzcqE71LHtCuCzlBDRU2a5CQ5j+mQA=="
-    },
-    "micromark-util-html-tag-name": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.1.0.tgz",
-      "integrity": "sha512-BKlClMmYROy9UiV03SwNmckkjn8QHVaWkqoAqzivabvdGcwNGMMMH/5szAnywmsTBUzDsU57/mFi0sp4BQO6dA=="
+    "node_modules/mathjax": {
+      "version": "3.2.2",
+      "resolved": "https://registry.npmjs.org/mathjax/-/mathjax-3.2.2.tgz",
+      "integrity": "sha512-Bt+SSVU8eBG27zChVewOicYs7Xsdt40qm4+UpHyX7k0/O9NliPc+x77k1/FEsPsjKPZGJvtRZM1vO+geW0OhGw=="
     },
-    "micromark-util-normalize-identifier": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.0.0.tgz",
-      "integrity": "sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg==",
-      "requires": {
-        "micromark-util-symbol": "^1.0.0"
+    "node_modules/mathml-tag-names": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz",
+      "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==",
+      "dev": true,
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
       }
     },
-    "micromark-util-resolve-all": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.0.0.tgz",
-      "integrity": "sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw==",
-      "requires": {
-        "micromark-util-types": "^1.0.0"
-      }
+    "node_modules/mdn-data": {
+      "version": "2.10.0",
+      "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.10.0.tgz",
+      "integrity": "sha512-qq7C3EtK3yJXMwz1zAab65pjl+UhohqMOctTgcqjLOWABqmwj+me02LSsCuEUxnst9X1lCBpoE0WArGKgdGDzw==",
+      "dev": true
     },
-    "micromark-util-sanitize-uri": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.1.0.tgz",
-      "integrity": "sha512-RoxtuSCX6sUNtxhbmsEFQfWzs8VN7cTctmBPvYivo98xb/kDEoTCtJQX5wyzIYEmk/lvNFTat4hL8oW0KndFpg==",
-      "requires": {
-        "micromark-util-character": "^1.0.0",
-        "micromark-util-encode": "^1.0.0",
-        "micromark-util-symbol": "^1.0.0"
+    "node_modules/meow": {
+      "version": "13.2.0",
+      "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz",
+      "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==",
+      "dev": true,
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "micromark-util-subtokenize": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.0.2.tgz",
-      "integrity": "sha512-d90uqCnXp/cy4G881Ub4psE57Sf8YD0pim9QdjCRNjfas2M1u6Lbt+XZK9gnHL2XFhnozZiEdCa9CNfXSfQ6xA==",
-      "requires": {
-        "micromark-util-chunked": "^1.0.0",
-        "micromark-util-symbol": "^1.0.0",
-        "micromark-util-types": "^1.0.0",
-        "uvu": "^0.5.0"
+    "node_modules/merge2": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+      "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+      "dev": true,
+      "engines": {
+        "node": ">= 8"
       }
     },
-    "micromark-util-symbol": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.0.1.tgz",
-      "integrity": "sha512-oKDEMK2u5qqAptasDAwWDXq0tG9AssVwAx3E9bBF3t/shRIGsWIRG+cGafs2p/SnDSOecnt6hZPCE2o6lHfFmQ=="
-    },
-    "micromark-util-types": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.0.2.tgz",
-      "integrity": "sha512-DCfg/T8fcrhrRKTPjRrw/5LLvdGV7BHySf/1LOZx7TzWZdYRjogNtyNq885z3nNallwr3QUKARjqvHqX1/7t+w=="
+    "node_modules/mermaid": {
+      "version": "11.4.0",
+      "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-11.4.0.tgz",
+      "integrity": "sha512-mxCfEYvADJqOiHfGpJXLs4/fAjHz448rH0pfY5fAoxiz70rQiDSzUUy4dNET2T08i46IVpjohPd6WWbzmRHiPA==",
+      "dependencies": {
+        "@braintree/sanitize-url": "^7.0.1",
+        "@iconify/utils": "^2.1.32",
+        "@mermaid-js/parser": "^0.3.0",
+        "@types/d3": "^7.4.3",
+        "@types/dompurify": "^3.0.5",
+        "cytoscape": "^3.29.2",
+        "cytoscape-cose-bilkent": "^4.1.0",
+        "cytoscape-fcose": "^2.2.0",
+        "d3": "^7.9.0",
+        "d3-sankey": "^0.12.3",
+        "dagre-d3-es": "7.0.11",
+        "dayjs": "^1.11.10",
+        "dompurify": "^3.0.11 <3.1.7",
+        "katex": "^0.16.9",
+        "khroma": "^2.1.0",
+        "lodash-es": "^4.17.21",
+        "marked": "^13.0.2",
+        "roughjs": "^4.6.6",
+        "stylis": "^4.3.1",
+        "ts-dedent": "^2.2.0",
+        "uuid": "^9.0.1"
+      }
     },
-    "micromatch": {
-      "version": "4.0.5",
-      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
-      "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+    "node_modules/micromatch": {
+      "version": "4.0.8",
+      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+      "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
       "dev": true,
-      "requires": {
-        "braces": "^3.0.2",
+      "dependencies": {
+        "braces": "^3.0.3",
         "picomatch": "^2.3.1"
+      },
+      "engines": {
+        "node": ">=8.6"
       }
     },
-    "mime": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
-      "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==",
-      "dev": true
+    "node_modules/mime": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+      "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+      "dev": true,
+      "bin": {
+        "mime": "cli.js"
+      },
+      "engines": {
+        "node": ">=4"
+      }
     },
-    "mime-db": {
+    "node_modules/mime-db": {
       "version": "1.52.0",
       "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
       "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">= 0.6"
+      }
     },
-    "mime-types": {
+    "node_modules/mime-types": {
       "version": "2.1.35",
       "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
       "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "mime-db": "1.52.0"
+      },
+      "engines": {
+        "node": ">= 0.6"
       }
     },
-    "mimic-fn": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
-      "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
-      "dev": true
-    },
-    "min-indent": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz",
-      "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==",
-      "dev": true
-    },
-    "minimatch": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+    "node_modules/minimatch": {
+      "version": "9.0.5",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+      "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
       "dev": true,
-      "requires": {
-        "brace-expansion": "^1.1.7"
+      "dependencies": {
+        "brace-expansion": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=16 || 14 >=14.17"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
       }
     },
-    "minimist": {
+    "node_modules/minimist": {
       "version": "1.2.8",
       "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
       "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
       "dev": true,
-      "peer": true
-    },
-    "minimist-options": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz",
-      "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==",
-      "dev": true,
-      "requires": {
-        "arrify": "^1.0.1",
-        "is-plain-obj": "^1.1.0",
-        "kind-of": "^6.0.3"
+      "peer": true,
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "mitt": {
+    "node_modules/mitt": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.2.0.tgz",
       "integrity": "sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw==",
       "dev": true
     },
-    "mri": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz",
-      "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA=="
+    "node_modules/mlly": {
+      "version": "1.7.2",
+      "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.2.tgz",
+      "integrity": "sha512-tN3dvVHYVz4DhSXinXIk7u9syPYaJvio118uomkovAtWBT+RdbP6Lfh/5Lvo519YMmwBafwlh20IPTXIStscpA==",
+      "dependencies": {
+        "acorn": "^8.12.1",
+        "pathe": "^1.1.2",
+        "pkg-types": "^1.2.0",
+        "ufo": "^1.5.4"
+      }
     },
-    "ms": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
-      "dev": true
+    "node_modules/ms": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
     },
-    "nanoid": {
-      "version": "3.3.6",
-      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
-      "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==",
-      "dev": true
+    "node_modules/nanoid": {
+      "version": "3.3.7",
+      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
+      "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "bin": {
+        "nanoid": "bin/nanoid.cjs"
+      },
+      "engines": {
+        "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+      }
     },
-    "natural-compare": {
+    "node_modules/natural-compare": {
       "version": "1.4.0",
       "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
       "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
       "dev": true
     },
-    "negotiator": {
+    "node_modules/negotiator": {
       "version": "0.6.3",
       "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
       "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
-      "dev": true
-    },
-    "node-int64": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
-      "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==",
-      "dev": true
-    },
-    "node-releases": {
-      "version": "2.0.10",
-      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz",
-      "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==",
-      "dev": true
-    },
-    "non-layered-tidy-tree-layout": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz",
-      "integrity": "sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw=="
-    },
-    "normalize-package-data": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz",
-      "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==",
       "dev": true,
-      "requires": {
-        "hosted-git-info": "^4.0.1",
-        "is-core-module": "^2.5.0",
-        "semver": "^7.3.4",
-        "validate-npm-package-license": "^3.0.1"
+      "engines": {
+        "node": ">= 0.6"
       }
     },
-    "normalize-path": {
+    "node_modules/node-addon-api": {
+      "version": "7.1.1",
+      "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz",
+      "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==",
+      "dev": true
+    },
+    "node_modules/normalize-path": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
       "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
-      "dev": true
-    },
-    "npm-run-path": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
-      "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
       "dev": true,
-      "requires": {
-        "path-key": "^3.0.0"
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "object-assign": {
+    "node_modules/object-assign": {
       "version": "4.1.1",
       "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
       "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
     },
-    "object-inspect": {
-      "version": "1.12.3",
-      "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
-      "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==",
+    "node_modules/object-inspect": {
+      "version": "1.13.2",
+      "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz",
+      "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==",
       "dev": true,
-      "peer": true
+      "peer": true,
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
     },
-    "object-keys": {
+    "node_modules/object-keys": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
       "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
       "dev": true,
-      "peer": true
+      "peer": true,
+      "engines": {
+        "node": ">= 0.4"
+      }
     },
-    "object.assign": {
-      "version": "4.1.4",
-      "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz",
-      "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==",
+    "node_modules/object.assign": {
+      "version": "4.1.5",
+      "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz",
+      "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==",
       "dev": true,
       "peer": true,
-      "requires": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.4",
+      "dependencies": {
+        "call-bind": "^1.0.5",
+        "define-properties": "^1.2.1",
         "has-symbols": "^1.0.3",
         "object-keys": "^1.1.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "object.values": {
-      "version": "1.1.6",
-      "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz",
-      "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==",
+    "node_modules/object.fromentries": {
+      "version": "2.0.8",
+      "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz",
+      "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==",
       "dev": true,
       "peer": true,
-      "requires": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.4",
-        "es-abstract": "^1.20.4"
+      "dependencies": {
+        "call-bind": "^1.0.7",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.23.2",
+        "es-object-atoms": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/object.groupby": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz",
+      "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "call-bind": "^1.0.7",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.23.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/object.values": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz",
+      "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "call-bind": "^1.0.7",
+        "define-properties": "^1.2.1",
+        "es-object-atoms": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "on-finished": {
+    "node_modules/on-finished": {
       "version": "2.3.0",
       "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
       "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "ee-first": "1.1.1"
+      },
+      "engines": {
+        "node": ">= 0.8"
       }
     },
-    "once": {
+    "node_modules/once": {
       "version": "1.4.0",
       "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
       "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "wrappy": "1"
       }
     },
-    "onetime": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
-      "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
-      "dev": true,
-      "requires": {
-        "mimic-fn": "^2.1.0"
-      }
-    },
-    "opn": {
+    "node_modules/opn": {
       "version": "5.3.0",
       "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz",
       "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "is-wsl": "^1.1.0"
+      },
+      "engines": {
+        "node": ">=4"
       }
     },
-    "optionator": {
-      "version": "0.9.3",
-      "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz",
-      "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==",
+    "node_modules/optionator": {
+      "version": "0.9.4",
+      "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
+      "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
       "dev": true,
-      "requires": {
-        "@aashutoshrathi/word-wrap": "^1.2.3",
+      "dependencies": {
         "deep-is": "^0.1.3",
         "fast-levenshtein": "^2.0.6",
         "levn": "^0.4.1",
         "prelude-ls": "^1.2.1",
-        "type-check": "^0.4.0"
+        "type-check": "^0.4.0",
+        "word-wrap": "^1.2.5"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
       }
     },
-    "p-limit": {
+    "node_modules/p-limit": {
       "version": "3.1.0",
       "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
       "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "yocto-queue": "^0.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "p-locate": {
+    "node_modules/p-locate": {
       "version": "5.0.0",
       "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
       "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "p-limit": "^3.0.2"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "p-try": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
-      "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
-      "dev": true
+    "node_modules/package-manager-detector": {
+      "version": "0.2.2",
+      "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-0.2.2.tgz",
+      "integrity": "sha512-VgXbyrSNsml4eHWIvxxG/nTL4wgybMTXCV2Un/+yEc3aDKKU6nQBZjbeP3Pl3qm9Qg92X/1ng4ffvCeD/zwHgg=="
     },
-    "parent-module": {
+    "node_modules/parent-module": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
       "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "callsites": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=6"
       }
     },
-    "parse-json": {
+    "node_modules/parse-json": {
       "version": "5.2.0",
       "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
       "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "@babel/code-frame": "^7.0.0",
         "error-ex": "^1.3.1",
         "json-parse-even-better-errors": "^2.3.0",
         "lines-and-columns": "^1.1.6"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "parseurl": {
+    "node_modules/parseurl": {
       "version": "1.3.3",
       "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
       "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/path-data-parser": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/path-data-parser/-/path-data-parser-0.1.0.tgz",
+      "integrity": "sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w=="
     },
-    "path-exists": {
+    "node_modules/path-exists": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
       "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
     },
-    "path-is-absolute": {
+    "node_modules/path-is-absolute": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
       "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
     },
-    "path-key": {
+    "node_modules/path-key": {
       "version": "3.1.1",
       "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
       "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
     },
-    "path-parse": {
+    "node_modules/path-parse": {
       "version": "1.0.7",
       "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
       "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
       "dev": true
     },
-    "path-type": {
+    "node_modules/path-type": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
       "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
     },
-    "picocolors": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
-      "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
+    "node_modules/pathe": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz",
+      "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ=="
+    },
+    "node_modules/picocolors": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+      "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
       "dev": true
     },
-    "picomatch": {
+    "node_modules/picomatch": {
       "version": "2.3.1",
       "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
       "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=8.6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/jonschlinkert"
+      }
     },
-    "pirates": {
-      "version": "4.0.5",
-      "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz",
-      "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==",
-      "dev": true
+    "node_modules/pkg-types": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.2.1.tgz",
+      "integrity": "sha512-sQoqa8alT3nHjGuTjuKgOnvjo4cljkufdtLMnO2LBP/wRwuDlo1tkaEdMxCRhyGRPacv/ztlZgDPm2b7FAmEvw==",
+      "dependencies": {
+        "confbox": "^0.1.8",
+        "mlly": "^1.7.2",
+        "pathe": "^1.1.2"
+      }
     },
-    "pkg-dir": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
-      "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
-      "dev": true,
-      "requires": {
-        "find-up": "^4.0.0"
-      },
-      "dependencies": {
-        "find-up": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
-          "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
-          "dev": true,
-          "requires": {
-            "locate-path": "^5.0.0",
-            "path-exists": "^4.0.0"
-          }
-        },
-        "locate-path": {
-          "version": "5.0.0",
-          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
-          "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
-          "dev": true,
-          "requires": {
-            "p-locate": "^4.1.0"
-          }
-        },
-        "p-limit": {
-          "version": "2.3.0",
-          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
-          "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
-          "dev": true,
-          "requires": {
-            "p-try": "^2.0.0"
-          }
-        },
-        "p-locate": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
-          "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
-          "dev": true,
-          "requires": {
-            "p-limit": "^2.2.0"
-          }
-        }
+    "node_modules/points-on-curve": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/points-on-curve/-/points-on-curve-0.2.0.tgz",
+      "integrity": "sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A=="
+    },
+    "node_modules/points-on-path": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/points-on-path/-/points-on-path-0.2.1.tgz",
+      "integrity": "sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g==",
+      "dependencies": {
+        "path-data-parser": "0.1.0",
+        "points-on-curve": "0.2.0"
       }
     },
-    "portscanner": {
+    "node_modules/portscanner": {
       "version": "2.2.0",
       "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.2.0.tgz",
       "integrity": "sha512-IFroCz/59Lqa2uBvzK3bKDbDDIEaAY8XJ1jFxcLWTqosrsc32//P4VuSB2vZXoHiHqOmx8B5L5hnKOxL/7FlPw==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "async": "^2.6.0",
         "is-number-like": "^1.0.3"
+      },
+      "engines": {
+        "node": ">=0.4",
+        "npm": ">=1.0.0"
+      }
+    },
+    "node_modules/possible-typed-array-names": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz",
+      "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">= 0.4"
       }
     },
-    "postcss": {
-      "version": "8.4.31",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
-      "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
+    "node_modules/postcss": {
+      "version": "8.4.47",
+      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz",
+      "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==",
       "dev": true,
-      "requires": {
-        "nanoid": "^3.3.6",
-        "picocolors": "^1.0.0",
-        "source-map-js": "^1.0.2"
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/postcss/"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/postcss"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "dependencies": {
+        "nanoid": "^3.3.7",
+        "picocolors": "^1.1.0",
+        "source-map-js": "^1.2.1"
+      },
+      "engines": {
+        "node": "^10 || ^12 || >=14"
       }
     },
-    "postcss-media-query-parser": {
+    "node_modules/postcss-media-query-parser": {
       "version": "0.2.3",
       "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz",
       "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==",
       "dev": true
     },
-    "postcss-resolve-nested-selector": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz",
-      "integrity": "sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==",
+    "node_modules/postcss-resolve-nested-selector": {
+      "version": "0.1.6",
+      "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.6.tgz",
+      "integrity": "sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw==",
       "dev": true
     },
-    "postcss-safe-parser": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz",
-      "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==",
+    "node_modules/postcss-safe-parser": {
+      "version": "7.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.1.tgz",
+      "integrity": "sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==",
       "dev": true,
-      "requires": {}
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/postcss/"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/postcss-safe-parser"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "engines": {
+        "node": ">=18.0"
+      },
+      "peerDependencies": {
+        "postcss": "^8.4.31"
+      }
     },
-    "postcss-scss": {
+    "node_modules/postcss-scss": {
       "version": "4.0.9",
       "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.9.tgz",
       "integrity": "sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==",
       "dev": true,
-      "requires": {}
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/postcss/"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/postcss-scss"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "engines": {
+        "node": ">=12.0"
+      },
+      "peerDependencies": {
+        "postcss": "^8.4.29"
+      }
     },
-    "postcss-selector-parser": {
-      "version": "6.0.13",
-      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz",
-      "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==",
+    "node_modules/postcss-selector-parser": {
+      "version": "6.1.2",
+      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
+      "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "cssesc": "^3.0.0",
         "util-deprecate": "^1.0.2"
+      },
+      "engines": {
+        "node": ">=4"
       }
     },
-    "postcss-value-parser": {
+    "node_modules/postcss-value-parser": {
       "version": "4.2.0",
       "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
       "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
       "dev": true
     },
-    "prelude-ls": {
+    "node_modules/prelude-ls": {
       "version": "1.2.1",
       "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
       "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
-      "dev": true
-    },
-    "pretty-format": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
-      "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
       "dev": true,
-      "requires": {
-        "@jest/schemas": "^29.6.3",
-        "ansi-styles": "^5.0.0",
-        "react-is": "^18.0.0"
-      },
-      "dependencies": {
-        "ansi-styles": {
-          "version": "5.2.0",
-          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
-          "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
-          "dev": true
-        }
+      "engines": {
+        "node": ">= 0.8.0"
       }
     },
-    "prompts": {
-      "version": "2.4.2",
-      "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
-      "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==",
+    "node_modules/punycode": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+      "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
       "dev": true,
-      "requires": {
-        "kleur": "^3.0.3",
-        "sisteransi": "^1.0.5"
+      "engines": {
+        "node": ">=6"
       }
     },
-    "punycode": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
-      "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
-      "dev": true
-    },
-    "pure-rand": {
-      "version": "6.0.3",
-      "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.3.tgz",
-      "integrity": "sha512-KddyFewCsO0j3+np81IQ+SweXLDnDQTs5s67BOnrYmYe/yNmUhttQyGsYzy8yUnoljGAQ9sl38YB4vH8ur7Y+w==",
-      "dev": true
-    },
-    "queue-microtask": {
+    "node_modules/queue-microtask": {
       "version": "1.2.3",
       "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
       "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
-      "dev": true
-    },
-    "quick-lru": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
-      "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
-      "dev": true
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ]
     },
-    "range-parser": {
+    "node_modules/range-parser": {
       "version": "1.2.1",
       "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
       "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">= 0.6"
+      }
     },
-    "raw-body": {
-      "version": "2.5.1",
-      "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz",
-      "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==",
+    "node_modules/raw-body": {
+      "version": "2.5.2",
+      "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
+      "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "bytes": "3.1.2",
         "http-errors": "2.0.0",
         "iconv-lite": "0.4.24",
         "unpipe": "1.0.0"
-      }
-    },
-    "react-is": {
-      "version": "18.2.0",
-      "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
-      "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==",
-      "dev": true
-    },
-    "read-pkg": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz",
-      "integrity": "sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==",
-      "dev": true,
-      "requires": {
-        "@types/normalize-package-data": "^2.4.0",
-        "normalize-package-data": "^3.0.2",
-        "parse-json": "^5.2.0",
-        "type-fest": "^1.0.1"
       },
-      "dependencies": {
-        "type-fest": {
-          "version": "1.4.0",
-          "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
-          "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==",
-          "dev": true
-        }
+      "engines": {
+        "node": ">= 0.8"
       }
     },
-    "read-pkg-up": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-8.0.0.tgz",
-      "integrity": "sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==",
+    "node_modules/raw-body/node_modules/iconv-lite": {
+      "version": "0.4.24",
+      "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+      "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
       "dev": true,
-      "requires": {
-        "find-up": "^5.0.0",
-        "read-pkg": "^6.0.0",
-        "type-fest": "^1.0.1"
-      },
       "dependencies": {
-        "type-fest": {
-          "version": "1.4.0",
-          "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
-          "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==",
-          "dev": true
-        }
+        "safer-buffer": ">= 2.1.2 < 3"
+      },
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "readdirp": {
+    "node_modules/readdirp": {
       "version": "3.6.0",
       "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
       "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "picomatch": "^2.2.1"
+      },
+      "engines": {
+        "node": ">=8.10.0"
       }
     },
-    "redent": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/redent/-/redent-4.0.0.tgz",
-      "integrity": "sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==",
-      "dev": true,
-      "requires": {
-        "indent-string": "^5.0.0",
-        "strip-indent": "^4.0.0"
-      }
-    },
-    "regexp.prototype.flags": {
-      "version": "1.4.3",
-      "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz",
-      "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==",
+    "node_modules/regexp.prototype.flags": {
+      "version": "1.5.3",
+      "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz",
+      "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==",
       "dev": true,
       "peer": true,
-      "requires": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.3",
-        "functions-have-names": "^1.2.2"
+      "dependencies": {
+        "call-bind": "^1.0.7",
+        "define-properties": "^1.2.1",
+        "es-errors": "^1.3.0",
+        "set-function-name": "^2.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "regexpp": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
-      "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
-      "dev": true,
-      "peer": true
-    },
-    "require-directory": {
+    "node_modules/require-directory": {
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
       "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
     },
-    "require-from-string": {
+    "node_modules/require-from-string": {
       "version": "2.0.2",
       "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
       "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
     },
-    "requires-port": {
+    "node_modules/requires-port": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
       "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
       "dev": true
     },
-    "resolve": {
+    "node_modules/resolve": {
       "version": "1.22.8",
       "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
       "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "is-core-module": "^2.13.0",
         "path-parse": "^1.0.7",
         "supports-preserve-symlinks-flag": "^1.0.0"
-      }
-    },
-    "resolve-cwd": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
-      "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
-      "dev": true,
-      "requires": {
-        "resolve-from": "^5.0.0"
       },
-      "dependencies": {
-        "resolve-from": {
-          "version": "5.0.0",
-          "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
-          "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
-          "dev": true
-        }
+      "bin": {
+        "resolve": "bin/resolve"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "resolve-from": {
+    "node_modules/resolve-from": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
       "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=4"
+      }
     },
-    "resolve.exports": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz",
-      "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==",
-      "dev": true
+    "node_modules/resolve-pkg-maps": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
+      "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
+      "funding": {
+        "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
+      }
     },
-    "resp-modifier": {
+    "node_modules/resp-modifier": {
       "version": "6.0.2",
       "resolved": "https://registry.npmjs.org/resp-modifier/-/resp-modifier-6.0.2.tgz",
       "integrity": "sha512-U1+0kWC/+4ncRFYqQWTx/3qkfE6a4B/h3XXgmXypfa0SPZ3t7cbbaFk297PjQS/yov24R18h6OZe6iZwj3NSLw==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "debug": "^2.2.0",
         "minimatch": "^3.0.2"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
+      }
+    },
+    "node_modules/resp-modifier/node_modules/brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+      "dev": true,
+      "dependencies": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
+      }
+    },
+    "node_modules/resp-modifier/node_modules/debug": {
+      "version": "2.6.9",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+      "dev": true,
+      "dependencies": {
+        "ms": "2.0.0"
+      }
+    },
+    "node_modules/resp-modifier/node_modules/minimatch": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+      "dev": true,
+      "dependencies": {
+        "brace-expansion": "^1.1.7"
+      },
+      "engines": {
+        "node": "*"
       }
     },
-    "reusify": {
+    "node_modules/resp-modifier/node_modules/ms": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+      "dev": true
+    },
+    "node_modules/reusify": {
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
       "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "iojs": ">=1.0.0",
+        "node": ">=0.10.0"
+      }
     },
-    "rimraf": {
+    "node_modules/rimraf": {
       "version": "3.0.2",
       "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
       "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+      "deprecated": "Rimraf versions prior to v4 are no longer supported",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "glob": "^7.1.3"
+      },
+      "bin": {
+        "rimraf": "bin.js"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
       }
     },
-    "robust-predicates": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.1.tgz",
-      "integrity": "sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g=="
+    "node_modules/robust-predicates": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz",
+      "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg=="
+    },
+    "node_modules/roughjs": {
+      "version": "4.6.6",
+      "resolved": "https://registry.npmjs.org/roughjs/-/roughjs-4.6.6.tgz",
+      "integrity": "sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ==",
+      "dependencies": {
+        "hachure-fill": "^0.5.2",
+        "path-data-parser": "^0.1.0",
+        "points-on-curve": "^0.2.0",
+        "points-on-path": "^0.2.1"
+      }
     },
-    "run-parallel": {
+    "node_modules/run-parallel": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
       "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
       "dev": true,
-      "requires": {
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "dependencies": {
         "queue-microtask": "^1.2.2"
       }
     },
-    "rw": {
+    "node_modules/rw": {
       "version": "1.3.3",
       "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz",
       "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ=="
     },
-    "rx": {
+    "node_modules/rx": {
       "version": "4.1.0",
       "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz",
       "integrity": "sha512-CiaiuN6gapkdl+cZUr67W6I8jquN4lkak3vtIsIWCl4XIPP8ffsoyN6/+PuGXnQy8Cu8W2y9Xxh31Rq4M6wUug==",
       "dev": true
     },
-    "rxjs": {
+    "node_modules/rxjs": {
       "version": "7.8.1",
       "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
       "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==",
       "dev": true,
       "peer": true,
-      "requires": {
+      "dependencies": {
         "tslib": "^2.1.0"
       }
     },
-    "sade": {
-      "version": "1.8.1",
-      "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz",
-      "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==",
-      "requires": {
-        "mri": "^1.1.0"
+    "node_modules/safe-array-concat": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz",
+      "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "call-bind": "^1.0.7",
+        "get-intrinsic": "^1.2.4",
+        "has-symbols": "^1.0.3",
+        "isarray": "^2.0.5"
+      },
+      "engines": {
+        "node": ">=0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "safe-identifier": {
+    "node_modules/safe-identifier": {
       "version": "0.4.2",
       "resolved": "https://registry.npmjs.org/safe-identifier/-/safe-identifier-0.4.2.tgz",
       "integrity": "sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w==",
       "dev": true
     },
-    "safe-regex-test": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz",
-      "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==",
+    "node_modules/safe-regex-test": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz",
+      "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==",
       "dev": true,
       "peer": true,
-      "requires": {
-        "call-bind": "^1.0.2",
-        "get-intrinsic": "^1.1.3",
+      "dependencies": {
+        "call-bind": "^1.0.6",
+        "es-errors": "^1.3.0",
         "is-regex": "^1.1.4"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "safer-buffer": {
+    "node_modules/safer-buffer": {
       "version": "2.1.2",
       "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
       "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
     },
-    "sass": {
-      "version": "1.71.1",
-      "resolved": "https://registry.npmjs.org/sass/-/sass-1.71.1.tgz",
-      "integrity": "sha512-wovtnV2PxzteLlfNzbgm1tFXPLoZILYAMJtvoXXkD7/+1uP41eKkIt1ypWq5/q2uT94qHjXehEYfmjKOvjL9sg==",
+    "node_modules/sass": {
+      "version": "1.80.3",
+      "resolved": "https://registry.npmjs.org/sass/-/sass-1.80.3.tgz",
+      "integrity": "sha512-ptDWyVmDMVielpz/oWy3YP3nfs7LpJTHIJZboMVs8GEC9eUmtZTZhMHlTW98wY4aEorDfjN38+Wr/XjskFWcfA==",
       "dev": true,
-      "requires": {
-        "chokidar": ">=3.0.0 <4.0.0",
+      "dependencies": {
+        "@parcel/watcher": "^2.4.1",
+        "chokidar": "^4.0.0",
         "immutable": "^4.0.0",
         "source-map-js": ">=0.6.2 <2.0.0"
       },
-      "dependencies": {
-        "immutable": {
-          "version": "4.3.5",
-          "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.5.tgz",
-          "integrity": "sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==",
-          "dev": true
-        }
+      "bin": {
+        "sass": "sass.js"
+      },
+      "engines": {
+        "node": ">=14.0.0"
       }
     },
-    "sass-embedded": {
-      "version": "1.71.1",
-      "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.71.1.tgz",
-      "integrity": "sha512-nOmqErO1zd1wjvTbDscLZZ3fv5JPeQfaKuo0UCjYm7qPbpQcycp0l3nFZHxovjLjCetJ9IrLOADdznFYKV0f1A==",
+    "node_modules/sass-embedded": {
+      "version": "1.80.3",
+      "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.80.3.tgz",
+      "integrity": "sha512-aTxTl4ToSAWg7ILFgAe+kMenj+zNlwHmHK/ZNPrOM8+HTef1Q6zuxolptYLijmHdZHKSMOkWYHgo5MMN6+GIyg==",
       "dev": true,
       "peer": true,
-      "requires": {
-        "@bufbuild/protobuf": "^1.0.0",
+      "dependencies": {
+        "@bufbuild/protobuf": "^2.0.0",
         "buffer-builder": "^0.2.0",
+        "colorjs.io": "^0.5.0",
         "immutable": "^4.0.0",
         "rxjs": "^7.4.0",
-        "sass-embedded-android-arm": "1.71.1",
-        "sass-embedded-android-arm64": "1.71.1",
-        "sass-embedded-android-ia32": "1.71.1",
-        "sass-embedded-android-x64": "1.71.1",
-        "sass-embedded-darwin-arm64": "1.71.1",
-        "sass-embedded-darwin-x64": "1.71.1",
-        "sass-embedded-linux-arm": "1.71.1",
-        "sass-embedded-linux-arm64": "1.71.1",
-        "sass-embedded-linux-ia32": "1.71.1",
-        "sass-embedded-linux-musl-arm": "1.71.1",
-        "sass-embedded-linux-musl-arm64": "1.71.1",
-        "sass-embedded-linux-musl-ia32": "1.71.1",
-        "sass-embedded-linux-musl-x64": "1.71.1",
-        "sass-embedded-linux-x64": "1.71.1",
-        "sass-embedded-win32-ia32": "1.71.1",
-        "sass-embedded-win32-x64": "1.71.1",
         "supports-color": "^8.1.1",
         "varint": "^6.0.0"
       },
+      "bin": {
+        "sass": "dist/bin/sass.js"
+      },
+      "engines": {
+        "node": ">=16.0.0"
+      },
+      "optionalDependencies": {
+        "sass-embedded-android-arm": "1.80.3",
+        "sass-embedded-android-arm64": "1.80.3",
+        "sass-embedded-android-ia32": "1.80.3",
+        "sass-embedded-android-riscv64": "1.80.3",
+        "sass-embedded-android-x64": "1.80.3",
+        "sass-embedded-darwin-arm64": "1.80.3",
+        "sass-embedded-darwin-x64": "1.80.3",
+        "sass-embedded-linux-arm": "1.80.3",
+        "sass-embedded-linux-arm64": "1.80.3",
+        "sass-embedded-linux-ia32": "1.80.3",
+        "sass-embedded-linux-musl-arm": "1.80.3",
+        "sass-embedded-linux-musl-arm64": "1.80.3",
+        "sass-embedded-linux-musl-ia32": "1.80.3",
+        "sass-embedded-linux-musl-riscv64": "1.80.3",
+        "sass-embedded-linux-musl-x64": "1.80.3",
+        "sass-embedded-linux-riscv64": "1.80.3",
+        "sass-embedded-linux-x64": "1.80.3",
+        "sass-embedded-win32-arm64": "1.80.3",
+        "sass-embedded-win32-ia32": "1.80.3",
+        "sass-embedded-win32-x64": "1.80.3"
+      }
+    },
+    "node_modules/sass-embedded-win32-x64": {
+      "version": "1.80.3",
+      "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.80.3.tgz",
+      "integrity": "sha512-wehVA0atPloc6NKof/ctpW0agM+k7kiBLIpQs3/mi9FAlmTjxNnvntBPZIbl8n7AAExiLEir+x/LHC0yGhTfkg==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "peer": true,
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/sass-embedded/node_modules/immutable": {
+      "version": "4.3.7",
+      "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz",
+      "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/sass-embedded/node_modules/supports-color": {
+      "version": "8.1.1",
+      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+      "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/supports-color?sponsor=1"
+      }
+    },
+    "node_modules/sass/node_modules/chokidar": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.1.tgz",
+      "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==",
+      "dev": true,
+      "dependencies": {
+        "readdirp": "^4.0.1"
+      },
+      "engines": {
+        "node": ">= 14.16.0"
+      },
+      "funding": {
+        "url": "https://paulmillr.com/funding/"
+      }
+    },
+    "node_modules/sass/node_modules/immutable": {
+      "version": "4.3.7",
+      "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz",
+      "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==",
+      "dev": true
+    },
+    "node_modules/sass/node_modules/readdirp": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz",
+      "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==",
+      "dev": true,
+      "engines": {
+        "node": ">= 14.16.0"
+      },
+      "funding": {
+        "type": "individual",
+        "url": "https://paulmillr.com/funding/"
+      }
+    },
+    "node_modules/semver": {
+      "version": "7.6.3",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+      "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
+      "dev": true,
+      "bin": {
+        "semver": "bin/semver.js"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/send": {
+      "version": "0.19.1",
+      "resolved": "https://registry.npmjs.org/send/-/send-0.19.1.tgz",
+      "integrity": "sha512-p4rRk4f23ynFEfcD9LA0xRYngj+IyGiEYyqqOak8kaN0TvNmuxC2dcVeBn62GpCeR2CpWqyHCNScTP91QbAVFg==",
+      "dev": true,
+      "dependencies": {
+        "debug": "2.6.9",
+        "depd": "2.0.0",
+        "destroy": "1.2.0",
+        "encodeurl": "~2.0.0",
+        "escape-html": "~1.0.3",
+        "etag": "~1.8.1",
+        "fresh": "0.5.2",
+        "http-errors": "2.0.0",
+        "mime": "1.6.0",
+        "ms": "2.1.3",
+        "on-finished": "2.4.1",
+        "range-parser": "~1.2.1",
+        "statuses": "2.0.1"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
+      }
+    },
+    "node_modules/send/node_modules/debug": {
+      "version": "2.6.9",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+      "dev": true,
       "dependencies": {
-        "immutable": {
-          "version": "4.3.5",
-          "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.5.tgz",
-          "integrity": "sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==",
-          "dev": true,
-          "peer": true
-        },
-        "supports-color": {
-          "version": "8.1.1",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
-          "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
-          "dev": true,
-          "peer": true,
-          "requires": {
-            "has-flag": "^4.0.0"
-          }
-        }
+        "ms": "2.0.0"
       }
     },
-    "sass-embedded-android-arm": {
-      "version": "1.71.1",
-      "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.71.1.tgz",
-      "integrity": "sha512-Pq6TlRg9lIYsZDo9XNQZnSg6grQKzBG3ssdv0W1SnYS1BzGKwbg8XnlUA/pVxK76BKEm8i+0DA4y8cZ8A3tmpw==",
-      "dev": true,
-      "optional": true,
-      "peer": true
+    "node_modules/send/node_modules/debug/node_modules/ms": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+      "dev": true
     },
-    "sass-embedded-android-arm64": {
-      "version": "1.71.1",
-      "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.71.1.tgz",
-      "integrity": "sha512-a7wJ1MM6sBwcM/8vIvvnwc9spoeNimNeXZpN9baSV4Ylthmr4GkTYYtf96Z/XYLdG5KBgYlxMs5T3OgqafdUMg==",
+    "node_modules/send/node_modules/encodeurl": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
+      "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
       "dev": true,
-      "optional": true,
-      "peer": true
+      "engines": {
+        "node": ">= 0.8"
+      }
     },
-    "sass-embedded-android-ia32": {
-      "version": "1.71.1",
-      "resolved": "https://registry.npmjs.org/sass-embedded-android-ia32/-/sass-embedded-android-ia32-1.71.1.tgz",
-      "integrity": "sha512-tn3WZNdKQtr/DSzl4cQIDZkTO3JuuMxPvM/T+U7gBFyhU62NyF5wvwBnuh+BN3iaMowfkSknzCZCjyJDwnkDjw==",
+    "node_modules/send/node_modules/on-finished": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
+      "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
       "dev": true,
-      "optional": true,
-      "peer": true
+      "dependencies": {
+        "ee-first": "1.1.1"
+      },
+      "engines": {
+        "node": ">= 0.8"
+      }
     },
-    "sass-embedded-android-x64": {
-      "version": "1.71.1",
-      "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.71.1.tgz",
-      "integrity": "sha512-l72Pqxfb/pArpOLyWsuL9s8ODWupRGATWTPwUT/GjVdSQJO/lQL5DopXb55Cwh2T7t2G10e+uXTEMKz0qngoWQ==",
+    "node_modules/send/node_modules/statuses": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
+      "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
       "dev": true,
-      "optional": true,
-      "peer": true
+      "engines": {
+        "node": ">= 0.8"
+      }
     },
-    "sass-embedded-darwin-arm64": {
-      "version": "1.71.1",
-      "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.71.1.tgz",
-      "integrity": "sha512-3eZDAcJBwoG0Kyasa/EbaKt1Jn2y0GHvCd0Oas/VtMsYL+/6abiCO1l8YltdxER4jvuHUKE2Ow7J6T6sC+vVQQ==",
+    "node_modules/serve-index": {
+      "version": "1.9.1",
+      "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz",
+      "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==",
       "dev": true,
-      "optional": true,
-      "peer": true
+      "dependencies": {
+        "accepts": "~1.3.4",
+        "batch": "0.6.1",
+        "debug": "2.6.9",
+        "escape-html": "~1.0.3",
+        "http-errors": "~1.6.2",
+        "mime-types": "~2.1.17",
+        "parseurl": "~1.3.2"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
+      }
     },
-    "sass-embedded-darwin-x64": {
-      "version": "1.71.1",
-      "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.71.1.tgz",
-      "integrity": "sha512-/9FtMPVdQalhsRCD9opNIlZqJKe7veCjWsdj0J9utbc2bNCTYswXNQtC/jWJTjE9/gQ0+w5zwg9+fQzltdYh1w==",
+    "node_modules/serve-index/node_modules/debug": {
+      "version": "2.6.9",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
       "dev": true,
-      "optional": true,
-      "peer": true
+      "dependencies": {
+        "ms": "2.0.0"
+      }
     },
-    "sass-embedded-linux-arm": {
-      "version": "1.71.1",
-      "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.71.1.tgz",
-      "integrity": "sha512-l7NEn0gji6GTN+p00DP2zZl9SE501Zy5obTA3beiD6+vQy7lCEC6vpNi/ZrlC6eRmgY2OKSBB2lfW7KSej9Hkg==",
+    "node_modules/serve-index/node_modules/depd": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+      "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
       "dev": true,
-      "optional": true,
-      "peer": true
+      "engines": {
+        "node": ">= 0.6"
+      }
     },
-    "sass-embedded-linux-arm64": {
-      "version": "1.71.1",
-      "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.71.1.tgz",
-      "integrity": "sha512-zUSmqeqcgTb3VjZggk9a9xB2ZGaAe/TYAi/vYRPNLY/f7dZSrsa9Ejo+LUm2aNl6V8hFzMz7BpoKsaRQJnb9GQ==",
+    "node_modules/serve-index/node_modules/http-errors": {
+      "version": "1.6.3",
+      "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
+      "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==",
       "dev": true,
-      "optional": true,
-      "peer": true
+      "dependencies": {
+        "depd": "~1.1.2",
+        "inherits": "2.0.3",
+        "setprototypeof": "1.1.0",
+        "statuses": ">= 1.4.0 < 2"
+      },
+      "engines": {
+        "node": ">= 0.6"
+      }
     },
-    "sass-embedded-linux-ia32": {
-      "version": "1.71.1",
-      "resolved": "https://registry.npmjs.org/sass-embedded-linux-ia32/-/sass-embedded-linux-ia32-1.71.1.tgz",
-      "integrity": "sha512-NvzSljfc/Kw9/0CSn91AsINV2nh8vxhFe2cKexPMwvAqv/etU84dJMfJejxPJ39PmMqT1KvC4G+Qt2+6Mpe7oQ==",
-      "dev": true,
-      "optional": true,
-      "peer": true
+    "node_modules/serve-index/node_modules/inherits": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+      "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==",
+      "dev": true
     },
-    "sass-embedded-linux-musl-arm": {
-      "version": "1.71.1",
-      "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.71.1.tgz",
-      "integrity": "sha512-1O37K5EgSeQjCBizIF9xdZJw3mh5XYHOnsB4+65CLZg4ac84ragjFv9d9rYhwGs9QSgg1MoOv7VWnEIxQ8Pp9Q==",
-      "dev": true,
-      "optional": true,
-      "peer": true
+    "node_modules/serve-index/node_modules/ms": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+      "dev": true
     },
-    "sass-embedded-linux-musl-arm64": {
-      "version": "1.71.1",
-      "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.71.1.tgz",
-      "integrity": "sha512-Agtf6BcYQ0mt+jVDcRcN7bDPrMAQOWMeX15NTlQH1rO8voObLo6ThVl2NUkiZyyVmu7a6YOrCxpGBVAK1cLGOg==",
-      "dev": true,
-      "optional": true,
-      "peer": true
+    "node_modules/serve-index/node_modules/setprototypeof": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
+      "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",
+      "dev": true
     },
-    "sass-embedded-linux-musl-ia32": {
-      "version": "1.71.1",
-      "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-ia32/-/sass-embedded-linux-musl-ia32-1.71.1.tgz",
-      "integrity": "sha512-Cd5sJkt70bSlYEXUSj9mPMKZLzDL8LGcBKUIfQRrcBKjmzD2Va2eLq4Zati9Xzt54unuDp4bAUUTyvQmjLzFmA==",
+    "node_modules/serve-index/node_modules/statuses": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+      "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==",
       "dev": true,
-      "optional": true,
-      "peer": true
+      "engines": {
+        "node": ">= 0.6"
+      }
     },
-    "sass-embedded-linux-musl-x64": {
-      "version": "1.71.1",
-      "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.71.1.tgz",
-      "integrity": "sha512-uVfYms/lf4QVSvtQXkSm+Bq3wVsvkRMI30ca82rRwpwebxSaTbUr+uLnskh8QvbyfsbMyrzZQU0SCrO3uCua1A==",
+    "node_modules/serve-static": {
+      "version": "1.16.2",
+      "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz",
+      "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==",
       "dev": true,
-      "optional": true,
-      "peer": true
+      "dependencies": {
+        "encodeurl": "~2.0.0",
+        "escape-html": "~1.0.3",
+        "parseurl": "~1.3.3",
+        "send": "0.19.0"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
+      }
     },
-    "sass-embedded-linux-x64": {
-      "version": "1.71.1",
-      "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.71.1.tgz",
-      "integrity": "sha512-7BXniYic16+MQx0InyH8OXburLPGMRYRWf0l/t/fRkNkUHWFl7NQPAX0yvj73c/PKOdaYEUY6isNB4OGUGtZHQ==",
+    "node_modules/serve-static/node_modules/debug": {
+      "version": "2.6.9",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
       "dev": true,
-      "optional": true,
-      "peer": true
+      "dependencies": {
+        "ms": "2.0.0"
+      }
     },
-    "sass-embedded-win32-ia32": {
-      "version": "1.71.1",
-      "resolved": "https://registry.npmjs.org/sass-embedded-win32-ia32/-/sass-embedded-win32-ia32-1.71.1.tgz",
-      "integrity": "sha512-ZDhL6hvekeKDkZ1wUj6wN0thrB/7wOO8HaQoagk+pKaHoa0Py7OLR/m9mQM8S13mZpUQduNsznmXV1fOss4GOg==",
-      "dev": true,
-      "optional": true,
-      "peer": true
+    "node_modules/serve-static/node_modules/debug/node_modules/ms": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+      "dev": true
     },
-    "sass-embedded-win32-x64": {
-      "version": "1.71.1",
-      "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.71.1.tgz",
-      "integrity": "sha512-ecWP1TFUA9ujOuOTJfWC1iZsSZOdQy5OxIEHqoERxunyjwzkiTxfN8J7Y4bNQ5uwb4K0brxWyIM8Fq+UgDqcZA==",
+    "node_modules/serve-static/node_modules/encodeurl": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
+      "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
       "dev": true,
-      "optional": true,
-      "peer": true
+      "engines": {
+        "node": ">= 0.8"
+      }
     },
-    "semver": {
-      "version": "7.6.3",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
-      "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
-      "dev": true
+    "node_modules/serve-static/node_modules/on-finished": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
+      "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
+      "dev": true,
+      "dependencies": {
+        "ee-first": "1.1.1"
+      },
+      "engines": {
+        "node": ">= 0.8"
+      }
     },
-    "send": {
-      "version": "0.16.2",
-      "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
-      "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==",
+    "node_modules/serve-static/node_modules/send": {
+      "version": "0.19.0",
+      "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz",
+      "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "debug": "2.6.9",
-        "depd": "~1.1.2",
-        "destroy": "~1.0.4",
+        "depd": "2.0.0",
+        "destroy": "1.2.0",
         "encodeurl": "~1.0.2",
         "escape-html": "~1.0.3",
         "etag": "~1.8.1",
         "fresh": "0.5.2",
-        "http-errors": "~1.6.2",
-        "mime": "1.4.1",
-        "ms": "2.0.0",
-        "on-finished": "~2.3.0",
-        "range-parser": "~1.2.0",
-        "statuses": "~1.4.0"
+        "http-errors": "2.0.0",
+        "mime": "1.6.0",
+        "ms": "2.1.3",
+        "on-finished": "2.4.1",
+        "range-parser": "~1.2.1",
+        "statuses": "2.0.1"
       },
-      "dependencies": {
-        "depd": {
-          "version": "1.1.2",
-          "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
-          "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
-          "dev": true
-        },
-        "http-errors": {
-          "version": "1.6.3",
-          "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
-          "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==",
-          "dev": true,
-          "requires": {
-            "depd": "~1.1.2",
-            "inherits": "2.0.3",
-            "setprototypeof": "1.1.0",
-            "statuses": ">= 1.4.0 < 2"
-          }
-        },
-        "inherits": {
-          "version": "2.0.3",
-          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
-          "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==",
-          "dev": true
-        },
-        "setprototypeof": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
-          "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",
-          "dev": true
-        },
-        "statuses": {
-          "version": "1.4.0",
-          "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
-          "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==",
-          "dev": true
-        }
+      "engines": {
+        "node": ">= 0.8.0"
       }
     },
-    "serve-index": {
-      "version": "1.9.1",
-      "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz",
-      "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==",
+    "node_modules/serve-static/node_modules/send/node_modules/encodeurl": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+      "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
       "dev": true,
-      "requires": {
-        "accepts": "~1.3.4",
-        "batch": "0.6.1",
-        "debug": "2.6.9",
-        "escape-html": "~1.0.3",
-        "http-errors": "~1.6.2",
-        "mime-types": "~2.1.17",
-        "parseurl": "~1.3.2"
-      },
-      "dependencies": {
-        "depd": {
-          "version": "1.1.2",
-          "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
-          "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
-          "dev": true
-        },
-        "http-errors": {
-          "version": "1.6.3",
-          "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
-          "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==",
-          "dev": true,
-          "requires": {
-            "depd": "~1.1.2",
-            "inherits": "2.0.3",
-            "setprototypeof": "1.1.0",
-            "statuses": ">= 1.4.0 < 2"
-          }
-        },
-        "inherits": {
-          "version": "2.0.3",
-          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
-          "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==",
-          "dev": true
-        },
-        "setprototypeof": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
-          "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",
-          "dev": true
-        },
-        "statuses": {
-          "version": "1.5.0",
-          "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
-          "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==",
-          "dev": true
-        }
+      "engines": {
+        "node": ">= 0.8"
       }
     },
-    "serve-static": {
-      "version": "1.13.2",
-      "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz",
-      "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==",
+    "node_modules/serve-static/node_modules/statuses": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
+      "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
       "dev": true,
-      "requires": {
-        "encodeurl": "~1.0.2",
-        "escape-html": "~1.0.3",
-        "parseurl": "~1.3.2",
-        "send": "0.16.2"
+      "engines": {
+        "node": ">= 0.8"
       }
     },
-    "server-destroy": {
+    "node_modules/server-destroy": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz",
       "integrity": "sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==",
       "dev": true
     },
-    "setprototypeof": {
+    "node_modules/set-function-length": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
+      "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "define-data-property": "^1.1.4",
+        "es-errors": "^1.3.0",
+        "function-bind": "^1.1.2",
+        "get-intrinsic": "^1.2.4",
+        "gopd": "^1.0.1",
+        "has-property-descriptors": "^1.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/set-function-name": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz",
+      "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "define-data-property": "^1.1.4",
+        "es-errors": "^1.3.0",
+        "functions-have-names": "^1.2.3",
+        "has-property-descriptors": "^1.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/setprototypeof": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
       "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
       "dev": true
     },
-    "shebang-command": {
+    "node_modules/shebang-command": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
       "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "shebang-regex": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=8"
       }
     },
-    "shebang-regex": {
+    "node_modules/shebang-regex": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
       "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
     },
-    "side-channel": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
-      "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+    "node_modules/side-channel": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
+      "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
       "dev": true,
       "peer": true,
-      "requires": {
-        "call-bind": "^1.0.0",
-        "get-intrinsic": "^1.0.2",
-        "object-inspect": "^1.9.0"
+      "dependencies": {
+        "call-bind": "^1.0.7",
+        "es-errors": "^1.3.0",
+        "get-intrinsic": "^1.2.4",
+        "object-inspect": "^1.13.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "signal-exit": {
-      "version": "3.0.7",
-      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
-      "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
-      "dev": true
-    },
-    "sisteransi": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
-      "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
-      "dev": true
+    "node_modules/signal-exit": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+      "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+      "dev": true,
+      "engines": {
+        "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
     },
-    "slash": {
+    "node_modules/slash": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
       "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
     },
-    "slice-ansi": {
+    "node_modules/slice-ansi": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
       "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "ansi-styles": "^4.0.0",
         "astral-regex": "^2.0.0",
         "is-fullwidth-code-point": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/slice-ansi?sponsor=1"
       }
     },
-    "socket.io": {
-      "version": "4.7.5",
-      "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.5.tgz",
-      "integrity": "sha512-DmeAkF6cwM9jSfmp6Dr/5/mfMwb5Z5qRrSXLpo3Fq5SqyU8CMF15jIN4ZhfSwu35ksM1qmHZDQ/DK5XTccSTvA==",
+    "node_modules/socket.io": {
+      "version": "4.8.0",
+      "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.0.tgz",
+      "integrity": "sha512-8U6BEgGjQOfGz3HHTYaC/L1GaxDCJ/KM0XTkJly0EhZ5U/du9uNEZy4ZgYzEzIqlx2CMm25CrCqr1ck899eLNA==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "accepts": "~1.3.4",
         "base64id": "~2.0.0",
         "cors": "~2.8.5",
         "debug": "~4.3.2",
-        "engine.io": "~6.5.2",
+        "engine.io": "~6.6.0",
         "socket.io-adapter": "~2.5.2",
         "socket.io-parser": "~4.2.4"
       },
-      "dependencies": {
-        "debug": {
-          "version": "4.3.4",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
-          "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
-          "dev": true,
-          "requires": {
-            "ms": "2.1.2"
-          }
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-          "dev": true
-        }
+      "engines": {
+        "node": ">=10.2.0"
       }
     },
-    "socket.io-adapter": {
+    "node_modules/socket.io-adapter": {
       "version": "2.5.5",
       "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz",
       "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "debug": "~4.3.4",
         "ws": "~8.17.1"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "4.3.5",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz",
-          "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==",
-          "dev": true,
-          "requires": {
-            "ms": "2.1.2"
-          }
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-          "dev": true
-        }
       }
     },
-    "socket.io-client": {
-      "version": "4.7.2",
-      "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.7.2.tgz",
-      "integrity": "sha512-vtA0uD4ibrYD793SOIAwlo8cj6haOeMHrGvwPxJsxH7CeIksqJ+3Zc06RvWTIFgiSqx4A3sOnTXpfAEE2Zyz6w==",
+    "node_modules/socket.io-client": {
+      "version": "4.8.0",
+      "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.8.0.tgz",
+      "integrity": "sha512-C0jdhD5yQahMws9alf/yvtsMGTaIDBnZ8Rb5HU56svyq0l5LIrGzIDZZD5pHQlmzxLuU91Gz+VpQMKgCTNYtkw==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "@socket.io/component-emitter": "~3.1.0",
         "debug": "~4.3.2",
-        "engine.io-client": "~6.5.2",
+        "engine.io-client": "~6.6.1",
         "socket.io-parser": "~4.2.4"
       },
-      "dependencies": {
-        "debug": {
-          "version": "4.3.4",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
-          "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
-          "dev": true,
-          "requires": {
-            "ms": "2.1.2"
-          }
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-          "dev": true
-        }
+      "engines": {
+        "node": ">=10.0.0"
       }
     },
-    "socket.io-parser": {
+    "node_modules/socket.io-parser": {
       "version": "4.2.4",
       "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz",
       "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "@socket.io/component-emitter": "~3.1.0",
         "debug": "~4.3.1"
       },
-      "dependencies": {
-        "debug": {
-          "version": "4.3.4",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
-          "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
-          "dev": true,
-          "requires": {
-            "ms": "2.1.2"
-          }
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-          "dev": true
-        }
-      }
-    },
-    "source-map": {
-      "version": "0.6.1",
-      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-      "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-      "dev": true
-    },
-    "source-map-js": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
-      "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
-      "dev": true
-    },
-    "source-map-support": {
-      "version": "0.5.13",
-      "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz",
-      "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==",
-      "dev": true,
-      "requires": {
-        "buffer-from": "^1.0.0",
-        "source-map": "^0.6.0"
-      }
-    },
-    "spdx-correct": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
-      "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==",
-      "dev": true,
-      "requires": {
-        "spdx-expression-parse": "^3.0.0",
-        "spdx-license-ids": "^3.0.0"
-      }
-    },
-    "spdx-exceptions": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
-      "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
-      "dev": true
-    },
-    "spdx-expression-parse": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
-      "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
-      "dev": true,
-      "requires": {
-        "spdx-exceptions": "^2.1.0",
-        "spdx-license-ids": "^3.0.0"
+      "engines": {
+        "node": ">=10.0.0"
       }
     },
-    "spdx-license-ids": {
-      "version": "3.0.13",
-      "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz",
-      "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==",
-      "dev": true
-    },
-    "sprintf-js": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
-      "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
-      "dev": true
-    },
-    "stack-utils": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz",
-      "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==",
+    "node_modules/source-map-js": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
+      "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
       "dev": true,
-      "requires": {
-        "escape-string-regexp": "^2.0.0"
-      },
-      "dependencies": {
-        "escape-string-regexp": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
-          "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
-          "dev": true
-        }
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "statuses": {
+    "node_modules/statuses": {
       "version": "1.3.1",
       "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
       "integrity": "sha512-wuTCPGlJONk/a1kqZ4fQM2+908lC7fa7nPYpTC1EhnvqLX/IICbeP1OZGDtA374trpSq68YubKUMo8oRhN46yg==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">= 0.6"
+      }
     },
-    "stream-throttle": {
+    "node_modules/stream-throttle": {
       "version": "0.1.3",
       "resolved": "https://registry.npmjs.org/stream-throttle/-/stream-throttle-0.1.3.tgz",
       "integrity": "sha512-889+B9vN9dq7/vLbGyuHeZ6/ctf5sNuGWsDy89uNxkFTAgzy0eK7+w5fL3KLNRTkLle7EgZGvHUphZW0Q26MnQ==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "commander": "^2.2.0",
         "limiter": "^1.0.5"
+      },
+      "bin": {
+        "throttleproxy": "bin/throttleproxy.js"
+      },
+      "engines": {
+        "node": ">= 0.10.0"
       }
     },
-    "string-length": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz",
-      "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==",
-      "dev": true,
-      "requires": {
-        "char-regex": "^1.0.2",
-        "strip-ansi": "^6.0.0"
-      }
+    "node_modules/stream-throttle/node_modules/commander": {
+      "version": "2.20.3",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+      "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+      "dev": true
     },
-    "string-width": {
+    "node_modules/string-width": {
       "version": "4.2.3",
       "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
       "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "emoji-regex": "^8.0.0",
         "is-fullwidth-code-point": "^3.0.0",
         "strip-ansi": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=8"
       }
     },
-    "string.prototype.trimend": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz",
-      "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==",
+    "node_modules/string.prototype.trim": {
+      "version": "1.2.9",
+      "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz",
+      "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==",
       "dev": true,
       "peer": true,
-      "requires": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.4",
-        "es-abstract": "^1.20.4"
+      "dependencies": {
+        "call-bind": "^1.0.7",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.23.0",
+        "es-object-atoms": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "string.prototype.trimstart": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz",
-      "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==",
+    "node_modules/string.prototype.trimend": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz",
+      "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==",
       "dev": true,
       "peer": true,
-      "requires": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.4",
-        "es-abstract": "^1.20.4"
+      "dependencies": {
+        "call-bind": "^1.0.7",
+        "define-properties": "^1.2.1",
+        "es-object-atoms": "^1.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/string.prototype.trimstart": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz",
+      "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "call-bind": "^1.0.7",
+        "define-properties": "^1.2.1",
+        "es-object-atoms": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "strip-ansi": {
+    "node_modules/strip-ansi": {
       "version": "6.0.1",
       "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
       "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "ansi-regex": "^5.0.1"
+      },
+      "engines": {
+        "node": ">=8"
       }
     },
-    "strip-bom": {
+    "node_modules/strip-bom": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
       "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
       "dev": true,
-      "peer": true
+      "peer": true,
+      "engines": {
+        "node": ">=4"
+      }
     },
-    "strip-final-newline": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
-      "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
-      "dev": true
+    "node_modules/strip-json-comments": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+      "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/stylelint": {
+      "version": "16.10.0",
+      "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.10.0.tgz",
+      "integrity": "sha512-z/8X2rZ52dt2c0stVwI9QL2AFJhLhbPkyfpDFcizs200V/g7v+UYY6SNcB9hKOLcDDX/yGLDsY/pX08sLkz9xQ==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/stylelint"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/stylelint"
+        }
+      ],
+      "dependencies": {
+        "@csstools/css-parser-algorithms": "^3.0.1",
+        "@csstools/css-tokenizer": "^3.0.1",
+        "@csstools/media-query-list-parser": "^3.0.1",
+        "@csstools/selector-specificity": "^4.0.0",
+        "@dual-bundle/import-meta-resolve": "^4.1.0",
+        "balanced-match": "^2.0.0",
+        "colord": "^2.9.3",
+        "cosmiconfig": "^9.0.0",
+        "css-functions-list": "^3.2.3",
+        "css-tree": "^3.0.0",
+        "debug": "^4.3.7",
+        "fast-glob": "^3.3.2",
+        "fastest-levenshtein": "^1.0.16",
+        "file-entry-cache": "^9.1.0",
+        "global-modules": "^2.0.0",
+        "globby": "^11.1.0",
+        "globjoin": "^0.1.4",
+        "html-tags": "^3.3.1",
+        "ignore": "^6.0.2",
+        "imurmurhash": "^0.1.4",
+        "is-plain-object": "^5.0.0",
+        "known-css-properties": "^0.34.0",
+        "mathml-tag-names": "^2.1.3",
+        "meow": "^13.2.0",
+        "micromatch": "^4.0.8",
+        "normalize-path": "^3.0.0",
+        "picocolors": "^1.0.1",
+        "postcss": "^8.4.47",
+        "postcss-resolve-nested-selector": "^0.1.6",
+        "postcss-safe-parser": "^7.0.1",
+        "postcss-selector-parser": "^6.1.2",
+        "postcss-value-parser": "^4.2.0",
+        "resolve-from": "^5.0.0",
+        "string-width": "^4.2.3",
+        "supports-hyperlinks": "^3.1.0",
+        "svg-tags": "^1.0.0",
+        "table": "^6.8.2",
+        "write-file-atomic": "^5.0.1"
+      },
+      "bin": {
+        "stylelint": "bin/stylelint.mjs"
+      },
+      "engines": {
+        "node": ">=18.12.0"
+      }
+    },
+    "node_modules/stylelint-config-recommended": {
+      "version": "14.0.1",
+      "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-14.0.1.tgz",
+      "integrity": "sha512-bLvc1WOz/14aPImu/cufKAZYfXs/A/owZfSMZ4N+16WGXLoX5lOir53M6odBxvhgmgdxCVnNySJmZKx73T93cg==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/stylelint"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/stylelint"
+        }
+      ],
+      "engines": {
+        "node": ">=18.12.0"
+      },
+      "peerDependencies": {
+        "stylelint": "^16.1.0"
+      }
+    },
+    "node_modules/stylelint-config-recommended-scss": {
+      "version": "14.1.0",
+      "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-14.1.0.tgz",
+      "integrity": "sha512-bhaMhh1u5dQqSsf6ri2GVWWQW5iUjBYgcHkh7SgDDn92ijoItC/cfO/W+fpXshgTQWhwFkP1rVcewcv4jaftRg==",
+      "dev": true,
+      "dependencies": {
+        "postcss-scss": "^4.0.9",
+        "stylelint-config-recommended": "^14.0.1",
+        "stylelint-scss": "^6.4.0"
+      },
+      "engines": {
+        "node": ">=18.12.0"
+      },
+      "peerDependencies": {
+        "postcss": "^8.3.3",
+        "stylelint": "^16.6.1"
+      },
+      "peerDependenciesMeta": {
+        "postcss": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/stylelint-config-standard": {
+      "version": "36.0.1",
+      "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-36.0.1.tgz",
+      "integrity": "sha512-8aX8mTzJ6cuO8mmD5yon61CWuIM4UD8Q5aBcWKGSf6kg+EC3uhB+iOywpTK4ca6ZL7B49en8yanOFtUW0qNzyw==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/stylelint"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/stylelint"
+        }
+      ],
+      "dependencies": {
+        "stylelint-config-recommended": "^14.0.1"
+      },
+      "engines": {
+        "node": ">=18.12.0"
+      },
+      "peerDependencies": {
+        "stylelint": "^16.1.0"
+      }
+    },
+    "node_modules/stylelint-config-standard-scss": {
+      "version": "13.1.0",
+      "resolved": "https://registry.npmjs.org/stylelint-config-standard-scss/-/stylelint-config-standard-scss-13.1.0.tgz",
+      "integrity": "sha512-Eo5w7/XvwGHWkeGLtdm2FZLOMYoZl1omP2/jgFCXyl2x5yNz7/8vv4Tj6slHvMSSUNTaGoam/GAZ0ZhukvalfA==",
+      "dev": true,
+      "dependencies": {
+        "stylelint-config-recommended-scss": "^14.0.0",
+        "stylelint-config-standard": "^36.0.0"
+      },
+      "engines": {
+        "node": ">=18.12.0"
+      },
+      "peerDependencies": {
+        "postcss": "^8.3.3",
+        "stylelint": "^16.3.1"
+      },
+      "peerDependenciesMeta": {
+        "postcss": {
+          "optional": true
+        }
+      }
     },
-    "strip-indent": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.0.0.tgz",
-      "integrity": "sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==",
+    "node_modules/stylelint-scss": {
+      "version": "6.8.1",
+      "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-6.8.1.tgz",
+      "integrity": "sha512-al+5eRb72bKrFyVAY+CLWKUMX+k+wsDCgyooSfhISJA2exqnJq1PX1iIIpdrvhu3GtJgNJZl9/BIW6EVSMCxdg==",
       "dev": true,
-      "requires": {
-        "min-indent": "^1.0.1"
+      "dependencies": {
+        "css-tree": "^3.0.0",
+        "is-plain-object": "^5.0.0",
+        "known-css-properties": "^0.34.0",
+        "mdn-data": "^2.11.1",
+        "postcss-media-query-parser": "^0.2.3",
+        "postcss-resolve-nested-selector": "^0.1.6",
+        "postcss-selector-parser": "^6.1.2",
+        "postcss-value-parser": "^4.2.0"
+      },
+      "engines": {
+        "node": ">=18.12.0"
+      },
+      "peerDependencies": {
+        "stylelint": "^16.0.2"
       }
     },
-    "strip-json-comments": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
-      "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+    "node_modules/stylelint-scss/node_modules/mdn-data": {
+      "version": "2.11.1",
+      "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.11.1.tgz",
+      "integrity": "sha512-Hdx3wmyqPFrhd6YHVuSkUK2eIGAcxR0xlndcgZqjA68yMJTbfXrjJwbgsBOsNjI7LnBIVUQnmyMVSdi/ob0GpQ==",
       "dev": true
     },
-    "style-search": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz",
-      "integrity": "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==",
+    "node_modules/stylelint/node_modules/balanced-match": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz",
+      "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==",
       "dev": true
     },
-    "stylelint": {
-      "version": "15.10.3",
-      "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-15.10.3.tgz",
-      "integrity": "sha512-aBQMMxYvFzJJwkmg+BUUg3YfPyeuCuKo2f+LOw7yYbU8AZMblibwzp9OV4srHVeQldxvSFdz0/Xu8blq2AesiA==",
+    "node_modules/stylelint/node_modules/file-entry-cache": {
+      "version": "9.1.0",
+      "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-9.1.0.tgz",
+      "integrity": "sha512-/pqPFG+FdxWQj+/WSuzXSDaNzxgTLr/OrR1QuqfEZzDakpdYE70PwUxL7BPUa8hpjbvY1+qvCl8k+8Tq34xJgg==",
       "dev": true,
-      "requires": {
-        "@csstools/css-parser-algorithms": "^2.3.1",
-        "@csstools/css-tokenizer": "^2.2.0",
-        "@csstools/media-query-list-parser": "^2.1.4",
-        "@csstools/selector-specificity": "^3.0.0",
-        "balanced-match": "^2.0.0",
-        "colord": "^2.9.3",
-        "cosmiconfig": "^8.2.0",
-        "css-functions-list": "^3.2.0",
-        "css-tree": "^2.3.1",
-        "debug": "^4.3.4",
-        "fast-glob": "^3.3.1",
-        "fastest-levenshtein": "^1.0.16",
-        "file-entry-cache": "^6.0.1",
-        "global-modules": "^2.0.0",
-        "globby": "^11.1.0",
-        "globjoin": "^0.1.4",
-        "html-tags": "^3.3.1",
-        "ignore": "^5.2.4",
-        "import-lazy": "^4.0.0",
-        "imurmurhash": "^0.1.4",
-        "is-plain-object": "^5.0.0",
-        "known-css-properties": "^0.28.0",
-        "mathml-tag-names": "^2.1.3",
-        "meow": "^10.1.5",
-        "micromatch": "^4.0.5",
-        "normalize-path": "^3.0.0",
-        "picocolors": "^1.0.0",
-        "postcss": "^8.4.27",
-        "postcss-resolve-nested-selector": "^0.1.1",
-        "postcss-safe-parser": "^6.0.0",
-        "postcss-selector-parser": "^6.0.13",
-        "postcss-value-parser": "^4.2.0",
-        "resolve-from": "^5.0.0",
-        "string-width": "^4.2.3",
-        "strip-ansi": "^6.0.1",
-        "style-search": "^0.1.0",
-        "supports-hyperlinks": "^3.0.0",
-        "svg-tags": "^1.0.0",
-        "table": "^6.8.1",
-        "write-file-atomic": "^5.0.1"
-      },
       "dependencies": {
-        "balanced-match": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz",
-          "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==",
-          "dev": true
-        },
-        "debug": {
-          "version": "4.3.4",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
-          "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
-          "dev": true,
-          "requires": {
-            "ms": "2.1.2"
-          }
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-          "dev": true
-        },
-        "resolve-from": {
-          "version": "5.0.0",
-          "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
-          "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
-          "dev": true
-        }
-      }
-    },
-    "stylelint-config-recommended": {
-      "version": "13.0.0",
-      "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-13.0.0.tgz",
-      "integrity": "sha512-EH+yRj6h3GAe/fRiyaoO2F9l9Tgg50AOFhaszyfov9v6ayXJ1IkSHwTxd7lB48FmOeSGDPLjatjO11fJpmarkQ==",
-      "dev": true,
-      "requires": {}
-    },
-    "stylelint-config-recommended-scss": {
-      "version": "13.1.0",
-      "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-13.1.0.tgz",
-      "integrity": "sha512-8L5nDfd+YH6AOoBGKmhH8pLWF1dpfY816JtGMePcBqqSsLU+Ysawx44fQSlMOJ2xTfI9yTGpup5JU77c17w1Ww==",
-      "dev": true,
-      "requires": {
-        "postcss-scss": "^4.0.9",
-        "stylelint-config-recommended": "^13.0.0",
-        "stylelint-scss": "^5.3.0"
+        "flat-cache": "^5.0.0"
+      },
+      "engines": {
+        "node": ">=18"
       }
     },
-    "stylelint-config-standard": {
-      "version": "34.0.0",
-      "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-34.0.0.tgz",
-      "integrity": "sha512-u0VSZnVyW9VSryBG2LSO+OQTjN7zF9XJaAJRX/4EwkmU0R2jYwmBSN10acqZisDitS0CLiEiGjX7+Hrq8TAhfQ==",
+    "node_modules/stylelint/node_modules/flat-cache": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-5.0.0.tgz",
+      "integrity": "sha512-JrqFmyUl2PnPi1OvLyTVHnQvwQ0S+e6lGSwu8OkAZlSaNIZciTY2H/cOOROxsBA1m/LZNHDsqAgDZt6akWcjsQ==",
       "dev": true,
-      "requires": {
-        "stylelint-config-recommended": "^13.0.0"
+      "dependencies": {
+        "flatted": "^3.3.1",
+        "keyv": "^4.5.4"
+      },
+      "engines": {
+        "node": ">=18"
       }
     },
-    "stylelint-config-standard-scss": {
-      "version": "11.1.0",
-      "resolved": "https://registry.npmjs.org/stylelint-config-standard-scss/-/stylelint-config-standard-scss-11.1.0.tgz",
-      "integrity": "sha512-5gnBgeNTgRVdchMwiFQPuBOtj9QefYtfXiddrOMJA2pI22zxt6ddI2s+e5Oh7/6QYl7QLJujGnaUR5YyGq72ow==",
+    "node_modules/stylelint/node_modules/ignore": {
+      "version": "6.0.2",
+      "resolved": "https://registry.npmjs.org/ignore/-/ignore-6.0.2.tgz",
+      "integrity": "sha512-InwqeHHN2XpumIkMvpl/DCJVrAHgCsG5+cn1XlnLWGwtZBm8QJfSusItfrwx81CTp5agNZqpKU2J/ccC5nGT4A==",
       "dev": true,
-      "requires": {
-        "stylelint-config-recommended-scss": "^13.1.0",
-        "stylelint-config-standard": "^34.0.0"
+      "engines": {
+        "node": ">= 4"
       }
     },
-    "stylelint-scss": {
-      "version": "5.3.0",
-      "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-5.3.0.tgz",
-      "integrity": "sha512-Sc7S1uWqStMc99NREsHNxpxHHFRvjo2pWILNl/UCwWO8PxhODK8qbJH0GHWIALxl6BD5rwJL4cSm4jk36hi6fg==",
+    "node_modules/stylelint/node_modules/resolve-from": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+      "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
       "dev": true,
-      "requires": {
-        "known-css-properties": "^0.28.0",
-        "postcss-media-query-parser": "^0.2.3",
-        "postcss-resolve-nested-selector": "^0.1.1",
-        "postcss-selector-parser": "^6.0.13",
-        "postcss-value-parser": "^4.2.0"
+      "engines": {
+        "node": ">=8"
       }
     },
-    "stylis": {
-      "version": "4.1.3",
-      "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.3.tgz",
-      "integrity": "sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA=="
+    "node_modules/stylis": {
+      "version": "4.3.4",
+      "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.4.tgz",
+      "integrity": "sha512-osIBl6BGUmSfDkyH2mB7EFvCJntXDrLhKjHTRj/rK6xLH0yuPrHULDRQzKokSOD4VoorhtKpfcfW1GAntu8now=="
     },
-    "supports-color": {
+    "node_modules/supports-color": {
       "version": "7.2.0",
       "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
       "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
       }
     },
-    "supports-hyperlinks": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.0.0.tgz",
-      "integrity": "sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA==",
+    "node_modules/supports-hyperlinks": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.1.0.tgz",
+      "integrity": "sha512-2rn0BZ+/f7puLOHZm1HOJfwBggfaHXUpPUSSG/SWM4TWp5KCfmNYwnC3hruy2rZlMnmWZ+QAGpZfchu3f3695A==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "has-flag": "^4.0.0",
         "supports-color": "^7.0.0"
+      },
+      "engines": {
+        "node": ">=14.18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "supports-preserve-symlinks-flag": {
+    "node_modules/supports-preserve-symlinks-flag": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
       "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
     },
-    "svg-tags": {
+    "node_modules/svg-tags": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz",
       "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==",
       "dev": true
     },
-    "table": {
-      "version": "6.8.1",
-      "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz",
-      "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==",
+    "node_modules/table": {
+      "version": "6.8.2",
+      "resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz",
+      "integrity": "sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "ajv": "^8.0.1",
         "lodash.truncate": "^4.4.2",
         "slice-ansi": "^4.0.0",
         "string-width": "^4.2.3",
         "strip-ansi": "^6.0.1"
       },
-      "dependencies": {
-        "ajv": {
-          "version": "8.12.0",
-          "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
-          "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
-          "dev": true,
-          "requires": {
-            "fast-deep-equal": "^3.1.1",
-            "json-schema-traverse": "^1.0.0",
-            "require-from-string": "^2.0.2",
-            "uri-js": "^4.2.2"
-          }
-        },
-        "json-schema-traverse": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
-          "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
-          "dev": true
-        }
+      "engines": {
+        "node": ">=10.0.0"
       }
     },
-    "test-exclude": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
-      "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
+    "node_modules/table/node_modules/ajv": {
+      "version": "8.17.1",
+      "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
+      "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
       "dev": true,
-      "requires": {
-        "@istanbuljs/schema": "^0.1.2",
-        "glob": "^7.1.4",
-        "minimatch": "^3.0.4"
+      "dependencies": {
+        "fast-deep-equal": "^3.1.3",
+        "fast-uri": "^3.0.1",
+        "json-schema-traverse": "^1.0.0",
+        "require-from-string": "^2.0.2"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/epoberezkin"
       }
     },
-    "text-table": {
+    "node_modules/table/node_modules/json-schema-traverse": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+      "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+      "dev": true
+    },
+    "node_modules/text-table": {
       "version": "0.2.0",
       "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
       "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
       "dev": true
     },
-    "tmpl": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
-      "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==",
-      "dev": true
-    },
-    "to-fast-properties": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
-      "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
-      "dev": true
+    "node_modules/tinyexec": {
+      "version": "0.3.1",
+      "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.1.tgz",
+      "integrity": "sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ=="
     },
-    "to-regex-range": {
+    "node_modules/to-regex-range": {
       "version": "5.0.1",
       "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
       "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "is-number": "^7.0.0"
+      },
+      "engines": {
+        "node": ">=8.0"
       }
     },
-    "toidentifier": {
+    "node_modules/toidentifier": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
       "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
-      "dev": true
-    },
-    "trim-newlines": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-4.1.1.tgz",
-      "integrity": "sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=0.6"
+      }
     },
-    "ts-api-utils": {
+    "node_modules/ts-api-utils": {
       "version": "1.3.0",
       "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz",
       "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==",
       "dev": true,
-      "requires": {}
+      "engines": {
+        "node": ">=16"
+      },
+      "peerDependencies": {
+        "typescript": ">=4.2.0"
+      }
     },
-    "ts-dedent": {
+    "node_modules/ts-dedent": {
       "version": "2.2.0",
       "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz",
-      "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ=="
-    },
-    "ts-jest": {
-      "version": "29.2.5",
-      "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.5.tgz",
-      "integrity": "sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==",
-      "dev": true,
-      "requires": {
-        "bs-logger": "^0.2.6",
-        "ejs": "^3.1.10",
-        "fast-json-stable-stringify": "^2.1.0",
-        "jest-util": "^29.0.0",
-        "json5": "^2.2.3",
-        "lodash.memoize": "^4.1.2",
-        "make-error": "^1.3.6",
-        "semver": "^7.6.3",
-        "yargs-parser": "^21.1.1"
+      "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==",
+      "engines": {
+        "node": ">=6.10"
+      }
+    },
+    "node_modules/tsconfig-paths": {
+      "version": "3.15.0",
+      "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz",
+      "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@types/json5": "^0.0.29",
+        "json5": "^1.0.2",
+        "minimist": "^1.2.6",
+        "strip-bom": "^3.0.0"
+      }
+    },
+    "node_modules/tslib": {
+      "version": "2.8.0",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz",
+      "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/tsx": {
+      "version": "4.19.2",
+      "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.2.tgz",
+      "integrity": "sha512-pOUl6Vo2LUq/bSa8S5q7b91cgNSjctn9ugq/+Mvow99qW6x/UZYwzxy/3NmqoT66eHYfCVvFvACC58UBPFf28g==",
+      "dependencies": {
+        "esbuild": "~0.23.0",
+        "get-tsconfig": "^4.7.5"
+      },
+      "bin": {
+        "tsx": "dist/cli.mjs"
+      },
+      "engines": {
+        "node": ">=18.0.0"
+      },
+      "optionalDependencies": {
+        "fsevents": "~2.3.3"
+      }
+    },
+    "node_modules/tsx/node_modules/@esbuild/win32-x64": {
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz",
+      "integrity": "sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==",
+      "cpu": [
+        "x64"
+      ],
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/tsx/node_modules/esbuild": {
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.1.tgz",
+      "integrity": "sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==",
+      "hasInstallScript": true,
+      "bin": {
+        "esbuild": "bin/esbuild"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "optionalDependencies": {
+        "@esbuild/aix-ppc64": "0.23.1",
+        "@esbuild/android-arm": "0.23.1",
+        "@esbuild/android-arm64": "0.23.1",
+        "@esbuild/android-x64": "0.23.1",
+        "@esbuild/darwin-arm64": "0.23.1",
+        "@esbuild/darwin-x64": "0.23.1",
+        "@esbuild/freebsd-arm64": "0.23.1",
+        "@esbuild/freebsd-x64": "0.23.1",
+        "@esbuild/linux-arm": "0.23.1",
+        "@esbuild/linux-arm64": "0.23.1",
+        "@esbuild/linux-ia32": "0.23.1",
+        "@esbuild/linux-loong64": "0.23.1",
+        "@esbuild/linux-mips64el": "0.23.1",
+        "@esbuild/linux-ppc64": "0.23.1",
+        "@esbuild/linux-riscv64": "0.23.1",
+        "@esbuild/linux-s390x": "0.23.1",
+        "@esbuild/linux-x64": "0.23.1",
+        "@esbuild/netbsd-x64": "0.23.1",
+        "@esbuild/openbsd-arm64": "0.23.1",
+        "@esbuild/openbsd-x64": "0.23.1",
+        "@esbuild/sunos-x64": "0.23.1",
+        "@esbuild/win32-arm64": "0.23.1",
+        "@esbuild/win32-ia32": "0.23.1",
+        "@esbuild/win32-x64": "0.23.1"
+      }
+    },
+    "node_modules/type-check": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+      "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+      "dev": true,
+      "dependencies": {
+        "prelude-ls": "^1.2.1"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
+      }
+    },
+    "node_modules/type-fest": {
+      "version": "0.20.2",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+      "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=10"
       },
-      "dependencies": {
-        "json5": {
-          "version": "2.2.3",
-          "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
-          "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
-          "dev": true
-        }
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "tsconfig-paths": {
-      "version": "3.14.1",
-      "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz",
-      "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==",
+    "node_modules/typed-array-buffer": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz",
+      "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==",
       "dev": true,
       "peer": true,
-      "requires": {
-        "@types/json5": "^0.0.29",
-        "json5": "^1.0.1",
-        "minimist": "^1.2.6",
-        "strip-bom": "^3.0.0"
+      "dependencies": {
+        "call-bind": "^1.0.7",
+        "es-errors": "^1.3.0",
+        "is-typed-array": "^1.1.13"
+      },
+      "engines": {
+        "node": ">= 0.4"
       }
     },
-    "tslib": {
-      "version": "2.6.2",
-      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
-      "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==",
+    "node_modules/typed-array-byte-length": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz",
+      "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==",
       "dev": true,
-      "peer": true
+      "peer": true,
+      "dependencies": {
+        "call-bind": "^1.0.7",
+        "for-each": "^0.3.3",
+        "gopd": "^1.0.1",
+        "has-proto": "^1.0.3",
+        "is-typed-array": "^1.1.13"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
     },
-    "type-check": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
-      "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+    "node_modules/typed-array-byte-offset": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz",
+      "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==",
       "dev": true,
-      "requires": {
-        "prelude-ls": "^1.2.1"
+      "peer": true,
+      "dependencies": {
+        "available-typed-arrays": "^1.0.7",
+        "call-bind": "^1.0.7",
+        "for-each": "^0.3.3",
+        "gopd": "^1.0.1",
+        "has-proto": "^1.0.3",
+        "is-typed-array": "^1.1.13"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "type-detect": {
-      "version": "4.0.8",
-      "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
-      "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
-      "dev": true
-    },
-    "type-fest": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
-      "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
-      "dev": true
-    },
-    "typed-array-length": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz",
-      "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==",
+    "node_modules/typed-array-length": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz",
+      "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==",
       "dev": true,
       "peer": true,
-      "requires": {
-        "call-bind": "^1.0.2",
+      "dependencies": {
+        "call-bind": "^1.0.7",
         "for-each": "^0.3.3",
-        "is-typed-array": "^1.1.9"
+        "gopd": "^1.0.1",
+        "has-proto": "^1.0.3",
+        "is-typed-array": "^1.1.13",
+        "possible-typed-array-names": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "typescript": {
-      "version": "5.5.4",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz",
-      "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==",
-      "dev": true
+    "node_modules/typescript": {
+      "version": "5.6.3",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz",
+      "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==",
+      "dev": true,
+      "bin": {
+        "tsc": "bin/tsc",
+        "tsserver": "bin/tsserver"
+      },
+      "engines": {
+        "node": ">=14.17"
+      }
     },
-    "ua-parser-js": {
-      "version": "1.0.33",
-      "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.33.tgz",
-      "integrity": "sha512-RqshF7TPTE0XLYAqmjlu5cLLuGdKrNu9O1KLA/qp39QtbZwuzwv1dT46DZSopoUMsYgXpB3Cv8a03FI8b74oFQ==",
-      "dev": true
+    "node_modules/ua-parser-js": {
+      "version": "1.0.39",
+      "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.39.tgz",
+      "integrity": "sha512-k24RCVWlEcjkdOxYmVJgeD/0a1TiSpqLg+ZalVGV9lsnr4yqu0w7tX/x2xX6G4zpkgQnRf89lxuZ1wsbjXM8lw==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/ua-parser-js"
+        },
+        {
+          "type": "paypal",
+          "url": "https://paypal.me/faisalman"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/faisalman"
+        }
+      ],
+      "bin": {
+        "ua-parser-js": "script/cli.js"
+      },
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/ufo": {
+      "version": "1.5.4",
+      "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.4.tgz",
+      "integrity": "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ=="
     },
-    "unbox-primitive": {
+    "node_modules/unbox-primitive": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
       "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
       "dev": true,
       "peer": true,
-      "requires": {
+      "dependencies": {
         "call-bind": "^1.0.2",
         "has-bigints": "^1.0.2",
         "has-symbols": "^1.0.3",
         "which-boxed-primitive": "^1.0.2"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "unist-util-stringify-position": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz",
-      "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==",
-      "requires": {
-        "@types/unist": "^2.0.0"
-      }
+    "node_modules/undici-types": {
+      "version": "6.19.8",
+      "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
+      "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
+      "dev": true
     },
-    "universalify": {
+    "node_modules/universalify": {
       "version": "0.1.2",
       "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
       "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">= 4.0.0"
+      }
     },
-    "unpipe": {
+    "node_modules/unpipe": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
       "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
-      "dev": true
-    },
-    "update-browserslist-db": {
-      "version": "1.0.10",
-      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz",
-      "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==",
       "dev": true,
-      "requires": {
-        "escalade": "^3.1.1",
-        "picocolors": "^1.0.0"
+      "engines": {
+        "node": ">= 0.8"
       }
     },
-    "uri-js": {
+    "node_modules/uri-js": {
       "version": "4.4.1",
       "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
       "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "punycode": "^2.1.0"
       }
     },
-    "util-deprecate": {
+    "node_modules/util-deprecate": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
       "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
       "dev": true
     },
-    "utils-merge": {
+    "node_modules/utils-merge": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
       "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
-      "dev": true
-    },
-    "uuid": {
-      "version": "9.0.0",
-      "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz",
-      "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg=="
-    },
-    "uvu": {
-      "version": "0.5.6",
-      "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz",
-      "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==",
-      "requires": {
-        "dequal": "^2.0.0",
-        "diff": "^5.0.0",
-        "kleur": "^4.0.3",
-        "sade": "^1.7.3"
-      },
-      "dependencies": {
-        "kleur": {
-          "version": "4.1.5",
-          "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz",
-          "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ=="
-        }
-      }
-    },
-    "v8-to-istanbul": {
-      "version": "9.1.0",
-      "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz",
-      "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==",
       "dev": true,
-      "requires": {
-        "@jridgewell/trace-mapping": "^0.3.12",
-        "@types/istanbul-lib-coverage": "^2.0.1",
-        "convert-source-map": "^1.6.0"
-      },
-      "dependencies": {
-        "convert-source-map": {
-          "version": "1.9.0",
-          "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
-          "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
-          "dev": true
-        }
+      "engines": {
+        "node": ">= 0.4.0"
       }
     },
-    "validate-npm-package-license": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
-      "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
-      "dev": true,
-      "requires": {
-        "spdx-correct": "^3.0.0",
-        "spdx-expression-parse": "^3.0.0"
+    "node_modules/uuid": {
+      "version": "9.0.1",
+      "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
+      "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
+      "funding": [
+        "https://github.com/sponsors/broofa",
+        "https://github.com/sponsors/ctavan"
+      ],
+      "bin": {
+        "uuid": "dist/bin/uuid"
       }
     },
-    "varint": {
+    "node_modules/varint": {
       "version": "6.0.0",
       "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz",
       "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==",
       "dev": true,
       "peer": true
     },
-    "vary": {
+    "node_modules/vary": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
       "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
-      "dev": true
-    },
-    "walker": {
-      "version": "1.0.8",
-      "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz",
-      "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==",
       "dev": true,
-      "requires": {
-        "makeerror": "1.0.12"
+      "engines": {
+        "node": ">= 0.8"
       }
     },
-    "web-worker": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.2.0.tgz",
-      "integrity": "sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA=="
+    "node_modules/vscode-jsonrpc": {
+      "version": "8.2.0",
+      "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz",
+      "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==",
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/vscode-languageserver": {
+      "version": "9.0.1",
+      "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-9.0.1.tgz",
+      "integrity": "sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==",
+      "dependencies": {
+        "vscode-languageserver-protocol": "3.17.5"
+      },
+      "bin": {
+        "installServerIntoExtension": "bin/installServerIntoExtension"
+      }
+    },
+    "node_modules/vscode-languageserver-protocol": {
+      "version": "3.17.5",
+      "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz",
+      "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==",
+      "dependencies": {
+        "vscode-jsonrpc": "8.2.0",
+        "vscode-languageserver-types": "3.17.5"
+      }
+    },
+    "node_modules/vscode-languageserver-textdocument": {
+      "version": "1.0.12",
+      "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz",
+      "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA=="
     },
-    "which": {
+    "node_modules/vscode-languageserver-types": {
+      "version": "3.17.5",
+      "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz",
+      "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg=="
+    },
+    "node_modules/vscode-uri": {
+      "version": "3.0.8",
+      "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz",
+      "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw=="
+    },
+    "node_modules/which": {
       "version": "2.0.2",
       "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
       "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "isexe": "^2.0.0"
+      },
+      "bin": {
+        "node-which": "bin/node-which"
+      },
+      "engines": {
+        "node": ">= 8"
       }
     },
-    "which-boxed-primitive": {
+    "node_modules/which-boxed-primitive": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
       "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
       "dev": true,
       "peer": true,
-      "requires": {
+      "dependencies": {
         "is-bigint": "^1.0.1",
         "is-boolean-object": "^1.1.0",
         "is-number-object": "^1.0.4",
         "is-string": "^1.0.5",
         "is-symbol": "^1.0.3"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "which-typed-array": {
-      "version": "1.1.9",
-      "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz",
-      "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==",
+    "node_modules/which-typed-array": {
+      "version": "1.1.15",
+      "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz",
+      "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==",
       "dev": true,
       "peer": true,
-      "requires": {
-        "available-typed-arrays": "^1.0.5",
-        "call-bind": "^1.0.2",
+      "dependencies": {
+        "available-typed-arrays": "^1.0.7",
+        "call-bind": "^1.0.7",
         "for-each": "^0.3.3",
         "gopd": "^1.0.1",
-        "has-tostringtag": "^1.0.0",
-        "is-typed-array": "^1.1.10"
+        "has-tostringtag": "^1.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "wrap-ansi": {
+    "node_modules/word-wrap": {
+      "version": "1.2.5",
+      "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
+      "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/wrap-ansi": {
       "version": "7.0.0",
       "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
       "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "ansi-styles": "^4.0.0",
         "string-width": "^4.1.0",
         "strip-ansi": "^6.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
       }
     },
-    "wrappy": {
+    "node_modules/wrappy": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
       "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
       "dev": true
     },
-    "write-file-atomic": {
+    "node_modules/write-file-atomic": {
       "version": "5.0.1",
       "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz",
       "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "imurmurhash": "^0.1.4",
         "signal-exit": "^4.0.1"
       },
-      "dependencies": {
-        "signal-exit": {
-          "version": "4.0.1",
-          "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.1.tgz",
-          "integrity": "sha512-uUWsN4aOxJAS8KOuf3QMyFtgm1pkb6I+KRZbRF/ghdf5T7sM+B1lLLzPDxswUjkmHyxQAVzEgG35E3NzDM9GVw==",
-          "dev": true
-        }
+      "engines": {
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
       }
     },
-    "ws": {
+    "node_modules/ws": {
       "version": "8.17.1",
       "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz",
       "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==",
       "dev": true,
-      "requires": {}
+      "engines": {
+        "node": ">=10.0.0"
+      },
+      "peerDependencies": {
+        "bufferutil": "^4.0.1",
+        "utf-8-validate": ">=5.0.2"
+      },
+      "peerDependenciesMeta": {
+        "bufferutil": {
+          "optional": true
+        },
+        "utf-8-validate": {
+          "optional": true
+        }
+      }
     },
-    "xmlhttprequest-ssl": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz",
-      "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==",
-      "dev": true
+    "node_modules/xmlhttprequest-ssl": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.1.1.tgz",
+      "integrity": "sha512-ptjR8YSJIXoA3Mbv5po7RtSYHO6mZr8s7i5VGmEk7QY2pQWyT1o0N+W1gKbOyJPUCGXGnuw0wqe8f0L6Y0ny7g==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.4.0"
+      }
     },
-    "y18n": {
+    "node_modules/y18n": {
       "version": "5.0.8",
       "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
       "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
-      "dev": true
-    },
-    "yallist": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=10"
+      }
     },
-    "yargs": {
+    "node_modules/yargs": {
       "version": "17.7.2",
       "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
       "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
       "dev": true,
-      "requires": {
+      "dependencies": {
         "cliui": "^8.0.1",
         "escalade": "^3.1.1",
         "get-caller-file": "^2.0.5",
@@ -18334,19 +7318,31 @@
         "string-width": "^4.2.3",
         "y18n": "^5.0.5",
         "yargs-parser": "^21.1.1"
+      },
+      "engines": {
+        "node": ">=12"
       }
     },
-    "yargs-parser": {
+    "node_modules/yargs/node_modules/yargs-parser": {
       "version": "21.1.1",
       "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
       "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=12"
+      }
     },
-    "yocto-queue": {
+    "node_modules/yocto-queue": {
       "version": "0.1.0",
       "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
       "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
-      "dev": true
+      "dev": true,
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
     }
   }
 }
diff --git a/templates/package.json b/templates/package.json
index 74c51f0b355..294817e7768 100644
--- a/templates/package.json
+++ b/templates/package.json
@@ -14,7 +14,7 @@
   "scripts": {
     "build": "node build.js",
     "lint": "eslint modern/src && stylelint modern/src",
-    "test": "jest",
+    "test": "node --import tsx --test modern/src/*.test.ts",
     "start": "node build.js --watch"
   },
   "dependencies": {
@@ -32,27 +32,25 @@
     "highlight.js": "^11.10.0",
     "idb-keyval": "^6.2.1",
     "jquery": "3.7.0",
-    "lit-html": "^3.2.0",
+    "lit-html": "^3.2.1",
     "lunr": "2.3.9",
     "lunr-languages": "^1.14.0",
     "mathjax": "^3.2.2",
-    "mermaid": "^10.9.1"
+    "mermaid": "^11.4.0",
+    "tsx": "^4.19.2"
   },
   "devDependencies": {
-    "@types/jest": "^29.5.12",
     "@types/lunr": "^2.3.7",
-    "@typescript-eslint/eslint-plugin": "^8.4.0",
-    "@typescript-eslint/parser": "^8.4.0",
-    "browser-sync": "^3.0.2",
-    "esbuild": "~0.23.1",
+    "@typescript-eslint/eslint-plugin": "^8.12.2",
+    "@typescript-eslint/parser": "^8.12.2",
+    "browser-sync": "^3.0.3",
+    "esbuild": "~0.24.0",
     "esbuild-sass-plugin": "~3.3.1",
-    "eslint": "^8.57.0",
+    "eslint": "^8.57.1",
     "eslint-config-standard": "^17.1.0",
-    "jest": "^29.7.0",
-    "stylelint": "^15.10.3",
-    "stylelint-config-standard-scss": "^11.1.0",
-    "ts-jest": "^29.2.5",
-    "typescript": "^5.5.4",
+    "stylelint": "^16.10.0",
+    "stylelint-config-standard-scss": "^13.1.0",
+    "typescript": "^5.6.3",
     "yargs": "^17.7.2"
   }
 }
diff --git a/test/Directory.Build.props b/test/Directory.Build.props
index bd3abf53eae..b4ab82100c6 100644
--- a/test/Directory.Build.props
+++ b/test/Directory.Build.props
@@ -18,7 +18,7 @@
     <None Include="TestData\**" CopyToOutputDirectory="PreserveNewest" />
   </ItemGroup>
 
-  <PropertyGroup Condition="'$(ContinuousIntegrationBuild)' == 'true'">
+  <PropertyGroup Condition="'$(ContinuousIntegrationBuild)' == 'true' AND '$(PERCY_TOKEN)' == ''">
     <VSTestResultsDirectory>$(MSBuildThisFileDirectory)TestResults</VSTestResultsDirectory>
     <VSTestLogger>$(VSTestLogger);trx%3BLogFileName=TestResults-$(MSBuildProjectName)-$(TargetFramework).trx</VSTestLogger>
     <VSTestLogger>$(VSTestLogger);html%3BLogFileName=TestResults-$(MSBuildProjectName)-$(TargetFramework).html</VSTestLogger>
diff --git a/test/Docfx.Build.Common.Tests/Docfx.Build.Common.Tests.csproj b/test/Docfx.Build.Common.Tests/Docfx.Build.Common.Tests.csproj
index 1fa702a51c0..474324b4f13 100644
--- a/test/Docfx.Build.Common.Tests/Docfx.Build.Common.Tests.csproj
+++ b/test/Docfx.Build.Common.Tests/Docfx.Build.Common.Tests.csproj
@@ -1,4 +1,4 @@
-<Project Sdk="Microsoft.NET.Sdk">
+<Project Sdk="Microsoft.NET.Sdk">
   <ItemGroup>
     <ProjectReference Include="..\..\src\Docfx.Build.Common\Docfx.Build.Common.csproj" />
     <ProjectReference Include="..\..\src\Docfx.Build\Docfx.Build.csproj" />
diff --git a/test/Docfx.Build.ManagedReference.Tests/Docfx.Build.ManagedReference.Tests.csproj b/test/Docfx.Build.ManagedReference.Tests/Docfx.Build.ManagedReference.Tests.csproj
index d0e62ffdc09..943a81c22c2 100644
--- a/test/Docfx.Build.ManagedReference.Tests/Docfx.Build.ManagedReference.Tests.csproj
+++ b/test/Docfx.Build.ManagedReference.Tests/Docfx.Build.ManagedReference.Tests.csproj
@@ -1,4 +1,4 @@
-<Project Sdk="Microsoft.NET.Sdk">
+<Project Sdk="Microsoft.NET.Sdk">
   <ItemGroup>
     <ProjectReference Include="..\..\src\Docfx.Build\Docfx.Build.csproj" />
     <ProjectReference Include="..\..\src\Docfx.Build.ManagedReference\Docfx.Build.ManagedReference.csproj" />
diff --git a/test/Docfx.Build.ManagedReference.Tests/ManagedReferenceDocumentProcessorTest.cs b/test/Docfx.Build.ManagedReference.Tests/ManagedReferenceDocumentProcessorTest.cs
index 2e2aee978c5..1c46adc1a98 100644
--- a/test/Docfx.Build.ManagedReference.Tests/ManagedReferenceDocumentProcessorTest.cs
+++ b/test/Docfx.Build.ManagedReference.Tests/ManagedReferenceDocumentProcessorTest.cs
@@ -30,14 +30,14 @@ public ManagedReferenceDocumentProcessorTest()
         _outputFolder = GetRandomFolder();
         string inputFolder = GetRandomFolder();
         _defaultFiles = new FileCollection(Directory.GetCurrentDirectory());
-        _defaultFiles.Add(DocumentType.Article, new[] { "TestData/mref/CatLibrary.Cat-2.yml" }, "TestData/");
+        _defaultFiles.Add(DocumentType.Article, ["TestData/mref/CatLibrary.Cat-2.yml"], "TestData/");
         _applyTemplateSettings = new ApplyTemplateSettings(inputFolder, _outputFolder)
         {
             RawModelExportSettings = { Export = true },
             TransformDocument = true,
         };
 
-        _templateManager = new TemplateManager(new List<string> { "template" }, null, "TestData/");
+        _templateManager = new TemplateManager(["template"], null, "TestData/");
     }
 
     [Fact]
@@ -93,7 +93,7 @@ public void ProcessMrefWithComplexFileNameShouldSucceed()
     {
         FileCollection files = new(_defaultFiles);
         files.RemoveAll(s => true);
-        files.Add(DocumentType.Article, new string[] { "TestData/mref/Namespace1.Class1`2.yml", "TestData/mref/Namespace1.Class1`2.#ctor.yml" }, "TestData/");
+        files.Add(DocumentType.Article, ["TestData/mref/Namespace1.Class1`2.yml", "TestData/mref/Namespace1.Class1`2.#ctor.yml"], "TestData/");
         BuildDocument(files);
 
         var outputRawModelPath = GetRawModelFilePath("Namespace1.Class1`2.yml");
@@ -129,7 +129,7 @@ public void ProcessMrefWithXRefMapShouldSucceed()
     public void ProcessMrefWithDefaultOverwriteShouldSucceed()
     {
         FileCollection files = new(_defaultFiles);
-        files.Add(DocumentType.Overwrite, new[] { "TestData/overwrite/mref.overwrite.default.md" });
+        files.Add(DocumentType.Overwrite, ["TestData/overwrite/mref.overwrite.default.md"]);
         BuildDocument(files);
         {
             var outputRawModelPath = GetRawModelFilePath("CatLibrary.Cat-2.yml");
@@ -144,7 +144,7 @@ public void ProcessMrefWithDefaultOverwriteShouldSucceed()
     public void ProcessMrefWithSimpleOverwriteShouldSucceed()
     {
         FileCollection files = new(_defaultFiles);
-        files.Add(DocumentType.Overwrite, new[] { "TestData/overwrite/mref.overwrite.simple.md" });
+        files.Add(DocumentType.Overwrite, ["TestData/overwrite/mref.overwrite.simple.md"]);
         BuildDocument(files);
         var outputRawModelPath = GetRawModelFilePath("CatLibrary.Cat-2.yml");
         Assert.True(File.Exists(outputRawModelPath));
@@ -157,7 +157,7 @@ public void ProcessMrefWithSimpleOverwriteShouldSucceed()
     public void ProcessMrefWithParametersOverwriteShouldSucceed()
     {
         var files = new FileCollection(_defaultFiles);
-        files.Add(DocumentType.Overwrite, new[] { "TestData/overwrite/mref.overwrite.parameters.md" });
+        files.Add(DocumentType.Overwrite, ["TestData/overwrite/mref.overwrite.parameters.md"]);
         BuildDocument(files);
         var outputRawModelPath = GetRawModelFilePath("CatLibrary.Cat-2.yml");
         Assert.True(File.Exists(outputRawModelPath));
@@ -176,7 +176,7 @@ public void ProcessMrefWithParametersOverwriteShouldSucceed()
     public void ProcessMrefWithNotPredefinedOverwriteShouldSucceed()
     {
         FileCollection files = new(_defaultFiles);
-        files.Add(DocumentType.Overwrite, new[] { "TestData/overwrite/mref.overwrite.not.predefined.md" });
+        files.Add(DocumentType.Overwrite, ["TestData/overwrite/mref.overwrite.not.predefined.md"]);
         BuildDocument(files);
         {
             var outputRawModelPath = GetRawModelFilePath("CatLibrary.Cat-2.yml");
@@ -193,7 +193,7 @@ public void ProcessMrefWithDynamicDevLangsShouldSucceed()
     {
         FileCollection files = new(_defaultFiles);
         files.RemoveAll(s => true);
-        files.Add(DocumentType.Article, new[] { "TestData/mref/System.String.yml" }, "TestData/");
+        files.Add(DocumentType.Article, ["TestData/mref/System.String.yml"], "TestData/");
 
         BuildDocument(files);
 
@@ -214,8 +214,8 @@ public void ProcessMrefWithDynamicDevLangsShouldSucceed()
     public void ProcessMrefWithInvalidCrossReferenceShouldWarn()
     {
         var files = new FileCollection(Directory.GetCurrentDirectory());
-        files.Add(DocumentType.Article, new[] { "TestData/mref/System.String.yml" }, "TestData/");
-        files.Add(DocumentType.Overwrite, new[] { "TestData/overwrite/mref.overwrite.invalid.ref.md" });
+        files.Add(DocumentType.Article, ["TestData/mref/System.String.yml"], "TestData/");
+        files.Add(DocumentType.Overwrite, ["TestData/overwrite/mref.overwrite.invalid.ref.md"]);
 
         using var listener = new TestListenerScope(LogLevel.Info);
 
@@ -238,7 +238,7 @@ public void ProcessMrefWithInvalidCrossReferenceShouldWarn()
     public void ProcessMrefWithInvalidOverwriteShouldFail()
     {
         FileCollection files = new(_defaultFiles);
-        files.Add(DocumentType.Overwrite, new[] { "TestData/overwrite/mref.overwrite.invalid.md" });
+        files.Add(DocumentType.Overwrite, ["TestData/overwrite/mref.overwrite.invalid.md"]);
         Assert.Throws<DocumentException>(() => BuildDocument(files));
     }
 
@@ -246,7 +246,7 @@ public void ProcessMrefWithInvalidOverwriteShouldFail()
     public void ProcessMrefWithRemarksOverwriteShouldSucceed()
     {
         var files = new FileCollection(_defaultFiles);
-        files.Add(DocumentType.Overwrite, new[] { "TestData/overwrite/mref.overwrite.remarks.md" });
+        files.Add(DocumentType.Overwrite, ["TestData/overwrite/mref.overwrite.remarks.md"]);
         BuildDocument(files);
         {
             var outputRawModelPath = GetRawModelFilePath("CatLibrary.Cat-2.yml");
@@ -261,7 +261,7 @@ public void ProcessMrefWithRemarksOverwriteShouldSucceed()
     public void ProcessMrefWithMultiUidOverwriteShouldSucceed()
     {
         var files = new FileCollection(_defaultFiles);
-        files.Add(DocumentType.Overwrite, new[] { "TestData/overwrite/mref.overwrite.multi.uid.md" });
+        files.Add(DocumentType.Overwrite, ["TestData/overwrite/mref.overwrite.multi.uid.md"]);
         BuildDocument(files);
         {
             var outputRawModelPath = GetRawModelFilePath("CatLibrary.Cat-2.yml");
@@ -281,7 +281,7 @@ public void SystemKeysListShouldBeComplete()
         var outputRawModelPath = GetRawModelFilePath("CatLibrary.Cat-2.yml");
         Assert.True(File.Exists(outputRawModelPath));
         var model = JsonUtility.Deserialize<Dictionary<string, object>>(outputRawModelPath);
-        var systemKeys = (JArray)model[Constants.PropertyName.SystemKeys];
+        var systemKeys = ToList(model[Constants.PropertyName.SystemKeys]);
         Assert.NotEmpty(systemKeys);
         foreach (var key in model.Keys.Where(key => key[0] != '_' && key != "meta" && key != "anotherMeta"))
         {
@@ -323,7 +323,7 @@ private void BuildDocument(FileCollection files)
             TemplateManager = _templateManager
         };
 
-        using var builder = new DocumentBuilder(LoadAssemblies(), ImmutableArray<string>.Empty);
+        using var builder = new DocumentBuilder(LoadAssemblies(), []);
         builder.Build(parameters);
     }
 
@@ -341,4 +341,11 @@ private string GetOutputFilePath(string fileName)
     {
         return Path.GetFullPath(Path.Combine(_outputFolder, Path.ChangeExtension(fileName, "html")));
     }
+
+    private static List<object> ToList(object value)
+    {
+        return value is List<object> list
+            ? list
+            : ((JArray)value).Cast<object>().ToList();
+    }
 }
diff --git a/test/Docfx.Build.OverwriteDocuments.Tests/OverwriteDocumentModelCreatorTest.cs b/test/Docfx.Build.OverwriteDocuments.Tests/OverwriteDocumentModelCreatorTest.cs
index d0aba296e8f..b4f82ef9148 100644
--- a/test/Docfx.Build.OverwriteDocuments.Tests/OverwriteDocumentModelCreatorTest.cs
+++ b/test/Docfx.Build.OverwriteDocuments.Tests/OverwriteDocumentModelCreatorTest.cs
@@ -106,7 +106,7 @@ public void DuplicateOPathInMarkdownSectionTest()
         }
 
         var logs = _listener.Items;
-        Assert.Single(logs.Where(l => l.Code == WarningCodes.Overwrite.InvalidMarkdownFragments));
+        Assert.Single(logs, l => l.Code == WarningCodes.Overwrite.InvalidMarkdownFragments);
         Assert.Single(contentsMetadata);
         Assert.Equal("test2",
             ((ParagraphBlock)((MarkdownDocument)((Dictionary<object, object>)contentsMetadata["function"])["parameters"])[0]).Inline.FirstChild.ToString());
diff --git a/test/Docfx.Build.RestApi.Tests/Docfx.Build.RestApi.Tests.csproj b/test/Docfx.Build.RestApi.Tests/Docfx.Build.RestApi.Tests.csproj
index 2364686c799..6632e67a6a9 100644
--- a/test/Docfx.Build.RestApi.Tests/Docfx.Build.RestApi.Tests.csproj
+++ b/test/Docfx.Build.RestApi.Tests/Docfx.Build.RestApi.Tests.csproj
@@ -1,4 +1,4 @@
-<Project Sdk="Microsoft.NET.Sdk">
+<Project Sdk="Microsoft.NET.Sdk">
   <ItemGroup>
     <None Include="TestData\**" CopyToOutputDirectory="PreserveNewest" />
   </ItemGroup>
diff --git a/test/Docfx.Build.RestApi.Tests/RestApiDocumentProcessorTest.cs b/test/Docfx.Build.RestApi.Tests/RestApiDocumentProcessorTest.cs
index 483f0f7e5a2..9eb31f8b71a 100644
--- a/test/Docfx.Build.RestApi.Tests/RestApiDocumentProcessorTest.cs
+++ b/test/Docfx.Build.RestApi.Tests/RestApiDocumentProcessorTest.cs
@@ -116,7 +116,7 @@ public void ProcessSwaggerShouldSucceed()
         Assert.Equal("<p sourcefile=\"TestData/swagger/contacts.json\" sourcestartlinenumber=\"1\">The request body <em sourcefile=\"TestData/swagger/contacts.json\" sourcestartlinenumber=\"1\">contains</em> a single property that specifies the URL of the user or contact to add as manager.</p>\n",
             item5.Parameters[2].Description);
         Assert.Equal("<p sourcefile=\"TestData/swagger/contacts.json\" sourcestartlinenumber=\"1\"><strong sourcefile=\"TestData/swagger/contacts.json\" sourcestartlinenumber=\"1\">uri</strong> description.</p>\n",
-            ((string)parameter2["description"]));
+            (string)parameter2["description"]);
         Assert.Equal("<p sourcefile=\"TestData/swagger/contacts.json\" sourcestartlinenumber=\"1\">No Content. Indicates <strong sourcefile=\"TestData/swagger/contacts.json\" sourcestartlinenumber=\"1\">success</strong>. No response body is returned.</p>\n",
             item5.Responses[0].Description);
 
@@ -154,7 +154,7 @@ public void ProcessSwaggerWithExternalReferenceShouldSucceed()
     public void ProcessSwaggerWithExternalEmbeddedReferenceShouldSucceed()
     {
         var files = new FileCollection(Directory.GetCurrentDirectory());
-        files.Add(DocumentType.Article, new[] { "TestData/swagger/contactsForExternalRef.json" }, "TestData/");
+        files.Add(DocumentType.Article, ["TestData/swagger/contactsForExternalRef.json"], "TestData/");
         BuildDocument(files);
 
         var outputRawModelPath = GetRawModelFilePath("contactsForExternalRef.json");
@@ -188,7 +188,7 @@ public void ProcessSwaggerWithNotExistedExternalReferenceShouldFail()
     public void ProcessSwaggerWithExternalReferenceHasRefInsideShouldFail()
     {
         var files = new FileCollection(Directory.GetCurrentDirectory());
-        files.Add(DocumentType.Article, new[] { "TestData/swagger/externalRefWithRefInside.json" }, "TestData/");
+        files.Add(DocumentType.Article, ["TestData/swagger/externalRefWithRefInside.json"], "TestData/");
         var listener = TestLoggerListener.CreateLoggerListenerWithCodeFilter("InvalidInputFile");
         Logger.RegisterListener(listener);
 
@@ -227,7 +227,7 @@ public void ProcessSwaggerWithXRefMapShouldSucceed()
     public void ProcessSwaggerWithTagsOverwriteShouldSucceed()
     {
         FileCollection files = new(_defaultFiles);
-        files.Add(DocumentType.Overwrite, new[] { "TestData/overwrite/rest.overwrite.tags.md" });
+        files.Add(DocumentType.Overwrite, ["TestData/overwrite/rest.overwrite.tags.md"]);
         BuildDocument(files);
 
         {
@@ -247,7 +247,7 @@ public void ProcessSwaggerWithTagsOverwriteShouldSucceed()
     public void ProcessSwaggerWithDefaultOverwriteShouldSucceed()
     {
         FileCollection files = new(_defaultFiles);
-        files.Add(DocumentType.Overwrite, new[] { "TestData/overwrite/rest.overwrite.default.md" });
+        files.Add(DocumentType.Overwrite, ["TestData/overwrite/rest.overwrite.default.md"]);
         BuildDocument(files);
 
         {
@@ -278,9 +278,9 @@ public void ProcessSwaggerWithInvalidLinksOverwriteShouldSucceedWithWarning()
         using var listener = new TestListenerScope();
 
         var files = new FileCollection(_defaultFiles);
-        files.Add(DocumentType.Article, new[] { "TestData/swagger/tag_swagger2.json" }, "TestData/");
-        files.Add(DocumentType.Overwrite, new[] { "TestData/overwrite/rest.overwrite.invalid.links.first.md" });
-        files.Add(DocumentType.Overwrite, new[] { "TestData/overwrite/rest.overwrite.invalid.links.second.md" });
+        files.Add(DocumentType.Article, ["TestData/swagger/tag_swagger2.json"], "TestData/");
+        files.Add(DocumentType.Overwrite, ["TestData/overwrite/rest.overwrite.invalid.links.first.md"]);
+        files.Add(DocumentType.Overwrite, ["TestData/overwrite/rest.overwrite.invalid.links.second.md"]);
         BuildDocument(files);
 
         Assert.Equal(7, listener.Items.Count); // Additional warning for "There is no template processing document type(s): RestApi"
@@ -322,7 +322,7 @@ public void ProcessSwaggerWithInvalidLinksOverwriteShouldSucceedWithWarning()
     public void ProcessSwaggerWithParametersOverwriteShouldSucceed()
     {
         var files = new FileCollection(_defaultFiles);
-        files.Add(DocumentType.Overwrite, new[] { "TestData/overwrite/rest.overwrite.parameters.md" });
+        files.Add(DocumentType.Overwrite, ["TestData/overwrite/rest.overwrite.parameters.md"]);
         BuildDocument(files);
         var outputRawModelPath = GetRawModelFilePath("contacts.json");
         Assert.True(File.Exists(outputRawModelPath));
@@ -335,7 +335,7 @@ public void ProcessSwaggerWithParametersOverwriteShouldSucceed()
         var bodyparam = parametersForUpdate.Single(p => p.Name == "bodyparam");
         Assert.Equal("<p sourcefile=\"TestData/overwrite/rest.overwrite.parameters.md\" sourcestartlinenumber=\"1\">The new bodyparam description</p>\n",
             bodyparam.Description);
-        var properties = (JObject)(((JObject)bodyparam.Metadata["schema"])["properties"]);
+        var properties = (JObject)((JObject)bodyparam.Metadata["schema"])["properties"];
         var objectType = properties["objectType"];
         Assert.Equal("string", objectType["type"]);
         Assert.Equal("this is overwrite objectType description", objectType["description"]);
@@ -364,7 +364,7 @@ public void ProcessSwaggerWithParametersOverwriteShouldSucceed()
     public void ProcessSwaggerWithNotPredefinedOverwriteShouldSucceed()
     {
         FileCollection files = new(_defaultFiles);
-        files.Add(DocumentType.Overwrite, new[] { "TestData/overwrite/rest.overwrite.not.predefined.md" });
+        files.Add(DocumentType.Overwrite, ["TestData/overwrite/rest.overwrite.not.predefined.md"]);
         BuildDocument(files);
         {
             var outputRawModelPath = GetRawModelFilePath("contacts.json");
@@ -387,7 +387,7 @@ public void ProcessSwaggerWithInvalidOverwriteShouldFail()
     public void ProcessSwaggerWithUnmergeableOverwriteShouldSucceed()
     {
         FileCollection files = new(_defaultFiles);
-        files.Add(DocumentType.Overwrite, new[] { "TestData/overwrite/rest.overwrite.unmergeable.md" });
+        files.Add(DocumentType.Overwrite, ["TestData/overwrite/rest.overwrite.unmergeable.md"]);
         BuildDocument(files);
         {
             var outputRawModelPath = GetRawModelFilePath("contacts.json");
@@ -401,7 +401,7 @@ public void ProcessSwaggerWithUnmergeableOverwriteShouldSucceed()
     public void ProcessSwaggerWithRemarksOverwriteShouldSucceed()
     {
         var files = new FileCollection(_defaultFiles);
-        files.Add(DocumentType.Overwrite, new[] { "TestData/overwrite/rest.overwrite.remarks.md" });
+        files.Add(DocumentType.Overwrite, ["TestData/overwrite/rest.overwrite.remarks.md"]);
         BuildDocument(files);
         {
             var outputRawModelPath = GetRawModelFilePath("contacts.json");
@@ -415,8 +415,8 @@ public void ProcessSwaggerWithRemarksOverwriteShouldSucceed()
     public void ProcessSwaggerWithMultiUidOverwriteShouldSucceed()
     {
         var files = new FileCollection(_defaultFiles);
-        files.Add(DocumentType.Overwrite, new[] { "TestData/overwrite/rest.overwrite.multi.uid.md" });
-        files.Add(DocumentType.Overwrite, new[] { "TestData/overwrite/rest.overwrite.unmergeable.md" });
+        files.Add(DocumentType.Overwrite, ["TestData/overwrite/rest.overwrite.multi.uid.md"]);
+        files.Add(DocumentType.Overwrite, ["TestData/overwrite/rest.overwrite.unmergeable.md"]);
         BuildDocument(files);
         {
             var outputRawModelPath = GetRawModelFilePath("contacts.json");
@@ -439,7 +439,7 @@ public void SystemKeysListShouldBeComplete()
         var outputRawModelPath = GetRawModelFilePath("contacts.json");
         Assert.True(File.Exists(outputRawModelPath));
         var model = JsonUtility.Deserialize<Dictionary<string, object>>(outputRawModelPath); ;
-        var systemKeys = (JArray)model[Constants.PropertyName.SystemKeys];
+        var systemKeys = ToList(model[Constants.PropertyName.SystemKeys]);
         Assert.NotEmpty(systemKeys);
         foreach (var key in model.Keys.Where(key => key[0] != '_' && !userKeys.Contains(key)))
         {
@@ -460,7 +460,7 @@ private void BuildDocument(FileCollection files)
             }.ToImmutableDictionary()
         };
 
-        using var builder = new DocumentBuilder(LoadAssemblies(), ImmutableArray<string>.Empty);
+        using var builder = new DocumentBuilder(LoadAssemblies(), []);
         builder.Build(parameters);
     }
 
@@ -473,4 +473,11 @@ private string GetRawModelFilePath(string fileName)
     {
         return Path.Combine(_outputFolder, SwaggerDirectory, Path.ChangeExtension(fileName, RawModelFileExtension));
     }
+
+    private static List<object> ToList(object value)
+    {
+        return value is List<object> list
+            ? list
+            : ((JArray)value).Cast<object>().ToList();
+    }
 }
diff --git a/test/Docfx.Build.RestApi.WithPlugins.Tests/SplitRestApiToOperationLevelTest.cs b/test/Docfx.Build.RestApi.WithPlugins.Tests/SplitRestApiToOperationLevelTest.cs
index 1e0dd40bc2e..4f9f8656300 100644
--- a/test/Docfx.Build.RestApi.WithPlugins.Tests/SplitRestApiToOperationLevelTest.cs
+++ b/test/Docfx.Build.RestApi.WithPlugins.Tests/SplitRestApiToOperationLevelTest.cs
@@ -242,7 +242,7 @@ private void BuildDocument(FileCollection files, bool enableTagLevel = false)
             TemplateManager = _templateManager
         };
 
-        using var builder = new DocumentBuilder(LoadAssemblies(enableTagLevel), ImmutableArray<string>.Empty);
+        using var builder = new DocumentBuilder(LoadAssemblies(enableTagLevel), []);
         builder.Build(parameters);
     }
 
diff --git a/test/Docfx.Build.RestApi.WithPlugins.Tests/SplitRestApiToTagLevelTest.cs b/test/Docfx.Build.RestApi.WithPlugins.Tests/SplitRestApiToTagLevelTest.cs
index dd4b1a1604e..22a06714040 100644
--- a/test/Docfx.Build.RestApi.WithPlugins.Tests/SplitRestApiToTagLevelTest.cs
+++ b/test/Docfx.Build.RestApi.WithPlugins.Tests/SplitRestApiToTagLevelTest.cs
@@ -31,13 +31,13 @@ public SplitRestApiToTagLevelTest()
         string inputFolder = GetRandomFolder();
         _outputFolder = GetRandomFolder();
         _defaultFiles = new FileCollection(Directory.GetCurrentDirectory());
-        _defaultFiles.Add(DocumentType.Article, new[] { "TestData/swagger/petstore.json" }, "TestData/");
+        _defaultFiles.Add(DocumentType.Article, ["TestData/swagger/petstore.json"], "TestData/");
         _applyTemplateSettings = new ApplyTemplateSettings(inputFolder, _outputFolder)
         {
             RawModelExportSettings = { Export = true },
             TransformDocument = true,
         };
-        _templateManager = new TemplateManager(new List<string> { "template" }, null, "TestData/");
+        _templateManager = new TemplateManager(["template"], null, "TestData/");
     }
 
     [Fact]
@@ -142,7 +142,7 @@ private void BuildDocument(FileCollection files)
             TemplateManager = _templateManager
         };
 
-        using var builder = new DocumentBuilder(LoadAssemblies(), ImmutableArray<string>.Empty);
+        using var builder = new DocumentBuilder(LoadAssemblies(), []);
         builder.Build(parameters);
     }
 
diff --git a/test/Docfx.Build.SchemaDriven.Tests/Docfx.Build.SchemaDriven.Tests.csproj b/test/Docfx.Build.SchemaDriven.Tests/Docfx.Build.SchemaDriven.Tests.csproj
index ef33cd35413..4ed255dbd06 100644
--- a/test/Docfx.Build.SchemaDriven.Tests/Docfx.Build.SchemaDriven.Tests.csproj
+++ b/test/Docfx.Build.SchemaDriven.Tests/Docfx.Build.SchemaDriven.Tests.csproj
@@ -1,4 +1,4 @@
-<Project Sdk="Microsoft.NET.Sdk">
+<Project Sdk="Microsoft.NET.Sdk">
   <ItemGroup>
     <ProjectReference Include="..\..\src\Docfx.Build.Common\Docfx.Build.Common.csproj" />
     <ProjectReference Include="..\..\src\Docfx.Build\Docfx.Build.csproj" />
diff --git a/test/Docfx.Build.SchemaDriven.Tests/JsonPointerTest.cs b/test/Docfx.Build.SchemaDriven.Tests/JsonPointerTest.cs
index a0a77a528f8..381e10fa736 100644
--- a/test/Docfx.Build.SchemaDriven.Tests/JsonPointerTest.cs
+++ b/test/Docfx.Build.SchemaDriven.Tests/JsonPointerTest.cs
@@ -4,7 +4,7 @@
 using Docfx.Common;
 using Docfx.Exceptions;
 using Docfx.Tests.Common;
-
+using FluentAssertions;
 using Xunit;
 
 namespace Docfx.Build.SchemaDriven.Tests;
@@ -13,33 +13,34 @@ public class JsonPointerTest : TestBase
     [Fact]
     public void TestJsonPointerSpec()
     {
-        var root = ConvertToObjectHelper.ConvertToDynamic(ConvertToObjectHelper.ConvertJObjectToObject(JsonUtility.FromJsonString<object>(@"
-{
-      ""foo"": [""bar"", ""baz""],
-      """": 0,
-      ""a/b"": 1,
-      ""c%d"": 2,
-      ""e^f"": 3,
-      ""g|h"": 4,
-      ""i\\j"": 5,
-      ""k\""l"": 6,
-      "" "": 7,
-      ""m~n"": 8
-   }
-")));
+        var root = ConvertToObjectHelper.ConvertToDynamic(ConvertToObjectHelper.ConvertJObjectToObject(JsonUtility.FromJsonString<object>(
+            """
+            {
+              "foo": ["bar", "baz"],
+              "": 0,
+              "a/b": 1,
+              "c%d": 2,
+              "e^f": 3,
+              "g|h": 4,
+              "i\\j": 5,
+              "k\"l": 6,
+              " ": 7,
+              "m~n": 8
+            }
+            """)));
 
-        Assert.Equal(root, new JsonPointer("").GetValue(root));
-        Assert.Equal(((dynamic)root).foo, new JsonPointer("/foo").GetValue(root));
-        Assert.Equal("bar", new JsonPointer("/foo/0").GetValue(root));
-        Assert.Equal(0L, new JsonPointer("/").GetValue(root));
-        Assert.Equal(1L, new JsonPointer("/a~1b").GetValue(root));
-        Assert.Equal(2L, new JsonPointer("/c%d").GetValue(root));
-        Assert.Equal(3L, new JsonPointer("/e^f").GetValue(root));
-        Assert.Equal(4L, new JsonPointer("/g|h").GetValue(root));
-        Assert.Equal(5L, new JsonPointer("/i\\j").GetValue(root));
-        Assert.Equal(6L, new JsonPointer("/k\"l").GetValue(root));
-        Assert.Equal(7L, new JsonPointer("/ ").GetValue(root));
-        Assert.Equal(8L, new JsonPointer("/m~0n").GetValue(root));
+        new JsonPointer("").GetValue(root).Should().Be(root);
+        new JsonPointer("/foo").GetValue(root).Should().Be(((dynamic)root).foo);
+        new JsonPointer("/foo/0").GetValue(root).Should().Be("bar");
+        new JsonPointer("/").GetValue(root).Should().Be(0);
+        new JsonPointer("/a~1b").GetValue(root).Should().Be(1);
+        new JsonPointer("/c%d").GetValue(root).Should().Be(2);
+        new JsonPointer("/e^f").GetValue(root).Should().Be(3);
+        new JsonPointer("/g|h").GetValue(root).Should().Be(4);
+        new JsonPointer("/i\\j").GetValue(root).Should().Be(5);
+        new JsonPointer("/k\"l").GetValue(root).Should().Be(6);
+        new JsonPointer("/ ").GetValue(root).Should().Be(7);
+        new JsonPointer("/m~0n").GetValue(root).Should().Be(8);
     }
 
     [Fact]
diff --git a/test/Docfx.Build.SchemaDriven.Tests/MarkdownFragmentsValidationTest.cs b/test/Docfx.Build.SchemaDriven.Tests/MarkdownFragmentsValidationTest.cs
index 0fbfee19ba1..a04406a268e 100644
--- a/test/Docfx.Build.SchemaDriven.Tests/MarkdownFragmentsValidationTest.cs
+++ b/test/Docfx.Build.SchemaDriven.Tests/MarkdownFragmentsValidationTest.cs
@@ -36,7 +36,7 @@ public void OverwriteUnEditableTest()
         _defaultFiles = new FileCollection(Directory.GetCurrentDirectory());
         _applyTemplateSettings = new ApplyTemplateSettings(_inputFolder, _outputFolder) { RawModelExportSettings = { Export = true }, TransformDocument = true, };
 
-        _templateManager = new TemplateManager(new List<string> { "template" }, null, _templateFolder);
+        _templateManager = new TemplateManager(["template"], null, _templateFolder);
 
         _rawModelFilePath = GetRawModelFilePath("FragmentsValidation.yml");
 
@@ -44,7 +44,7 @@ public void OverwriteUnEditableTest()
         var yamlFile = CreateFile("FragmentsValidation.yml", File.ReadAllText("TestData/inputs/FragmentsValidation.yml"), _inputFolder);
         var mdFile = CreateFile("FragmentsValidation.yml.md", File.ReadAllText("TestData/inputs/FragmentsValidation.yml.md"), _inputFolder);
         _files = new FileCollection(_defaultFiles);
-        _files.Add(DocumentType.Article, new[] { yamlFile }, _inputFolder);
+        _files.Add(DocumentType.Article, [yamlFile], _inputFolder);
 
         // Act
         Logger.RegisterListener(_listener);
@@ -83,7 +83,7 @@ private void BuildDocument(FileCollection files)
             TemplateManager = _templateManager,
         };
 
-        using var builder = new DocumentBuilder(LoadAssemblies(), ImmutableArray<string>.Empty);
+        using var builder = new DocumentBuilder(LoadAssemblies(), []);
         builder.Build(parameters);
     }
 
diff --git a/test/Docfx.Build.SchemaDriven.Tests/MergeMarkdownFragmentsTest.cs b/test/Docfx.Build.SchemaDriven.Tests/MergeMarkdownFragmentsTest.cs
index 7a81ebb9fe1..f82fa591e58 100644
--- a/test/Docfx.Build.SchemaDriven.Tests/MergeMarkdownFragmentsTest.cs
+++ b/test/Docfx.Build.SchemaDriven.Tests/MergeMarkdownFragmentsTest.cs
@@ -1,4 +1,7 @@
-using System.Collections.Immutable;
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.Collections.Immutable;
 using Docfx.Build.Engine;
 using Docfx.Common;
 using Docfx.Plugins;
@@ -31,21 +34,21 @@ public MergeMarkdownFragmentsTest()
         var defaultFiles = new FileCollection(Directory.GetCurrentDirectory());
         _applyTemplateSettings = new ApplyTemplateSettings(_inputFolder, _outputFolder) { RawModelExportSettings = { Export = true }, TransformDocument = true, };
 
-        _templateManager = new TemplateManager(new List<string> { "template" }, null, templateFolder);
+        _templateManager = new TemplateManager(["template"], null, templateFolder);
 
         _rawModelFilePath = GetRawModelFilePath("Suppressions.yml");
 
-        var schemaFile = CreateFile("template/schemas/rest.mixed.schema.json", File.ReadAllText("TestData/schemas/rest.mixed.schema.json"), templateFolder);
+        CreateFile("template/schemas/rest.mixed.schema.json", File.ReadAllText("TestData/schemas/rest.mixed.schema.json"), templateFolder);
         var yamlFile = CreateFile("Suppressions.yml", File.ReadAllText("TestData/inputs/Suppressions.yml"), _inputFolder);
         _files = new FileCollection(defaultFiles);
-        _files.Add(DocumentType.Article, new[] { yamlFile }, _inputFolder);
+        _files.Add(DocumentType.Article, [yamlFile], _inputFolder);
     }
 
     [Fact]
     void TestMergeMarkdownFragments()
     {
         // Arrange
-        var mdFile = CreateFile("Suppressions.yml.md", File.ReadAllText("TestData/inputs/Suppressions.yml.md"), _inputFolder);
+        CreateFile("Suppressions.yml.md", File.ReadAllText("TestData/inputs/Suppressions.yml.md"), _inputFolder);
 
         // Act
         BuildDocument(_files);
@@ -63,7 +66,7 @@ void TestMergeMarkdownFragments()
     public void TestMissingStartingH1CodeHeading()
     {
         // Arrange
-        var mdFile = CreateFile(
+        CreateFile(
             "Suppressions.yml.md",
             @"## `summary`
 markdown content
@@ -95,7 +98,7 @@ markdown content
     public void TestInvalidSpaceMissing()
     {
         // Arrange
-        var mdFile = CreateFile(
+        CreateFile(
             "Suppressions.yml.md",
             @"#head_1_without_space
 
@@ -129,7 +132,7 @@ markdown content
     public void TestValidSpaceMissing()
     {
         // Arrange
-        var mdFile = CreateFile(
+        CreateFile(
             "Suppressions.yml.md",
             @"# `management.azure.com.advisor.suppressions`
 
@@ -153,7 +156,7 @@ markdown content
     public void TestInvalidYaml()
     {
         // Arrange
-        var mdFile = CreateFile(
+        CreateFile(
             "Suppressions.yml.md",
             @"# `management.azure.com.advisor.suppressions`
 ```
@@ -190,7 +193,7 @@ markdown content
     public void TestInvalidOPath()
     {
         // Arrange
-        var mdFile = CreateFile(
+        CreateFile(
             "Suppressions.yml.md",
             @"# `management.azure.com.advisor.suppressions`
 
@@ -228,7 +231,7 @@ markdown content
     public void TestNotExistedUid()
     {
         // Arrange
-        var mdFile = CreateFile(
+        CreateFile(
             "Suppressions.yml.md",
             @"# `uid_not_exist`
 
@@ -284,7 +287,7 @@ Some empty lines between H2 and this paragraph is tolerant
     public void TestDuplicateOPathsInYamlCodeBlockAndContentsBlock()
     {
         // Arrange
-        var mdFile = CreateFile(
+        CreateFile(
             "Suppressions.yml.md",
             @"# `management.azure.com.advisor.suppressions`
 ```
@@ -327,7 +330,7 @@ public void TestFragmentsWithIncremental()
         ClearLog(listener.Items);
 
         // add fragments
-        var mdFile = CreateFile(
+        CreateFile(
             "Suppressions.yml.md",
             @"# `management.azure.com.advisor.suppressions`
 ## ``summary``
@@ -349,11 +352,12 @@ I add a summary.
         // modify fragments
         UpdateFile(
             "Suppressions.yml.md",
-            new string[] { "# `management.azure.com.advisor.suppressions`",
+            [
+                "# `management.azure.com.advisor.suppressions`",
                 "## ``summary``",
                 "I update a summary.",
-                "With [!include[invalid](invalid.md)]",
-            },
+                "With [!include[invalid](invalid.md)]"
+            ],
             _inputFolder);
 
         BuildDocument(_files);
@@ -399,7 +403,7 @@ private void BuildDocument(FileCollection files)
             TemplateManager = _templateManager,
         };
 
-        using var builder = new DocumentBuilder(LoadAssemblies(), ImmutableArray<string>.Empty);
+        using var builder = new DocumentBuilder(LoadAssemblies(), []);
         builder.Build(parameters);
     }
 
diff --git a/test/Docfx.Build.SchemaDriven.Tests/SchemaDrivenProcessorTest.cs b/test/Docfx.Build.SchemaDriven.Tests/SchemaDrivenProcessorTest.cs
index b17f774dafc..400694d1d06 100644
--- a/test/Docfx.Build.SchemaDriven.Tests/SchemaDrivenProcessorTest.cs
+++ b/test/Docfx.Build.SchemaDriven.Tests/SchemaDrivenProcessorTest.cs
@@ -40,7 +40,7 @@ public SchemaDrivenProcessorTest()
             TransformDocument = true,
         };
 
-        _templateManager = new TemplateManager(new List<string> { "template" }, null, _templateFolder);
+        _templateManager = new TemplateManager(["template"], null, _templateFolder);
     }
 
     [Fact]
@@ -84,7 +84,7 @@ public void TestRef()
   - description: ""**outside**""
 ", _inputFolder);
         FileCollection files = new(_defaultFiles);
-        files.Add(DocumentType.Article, new[] { inputFile }, _inputFolder);
+        files.Add(DocumentType.Article, [inputFile], _inputFolder);
         BuildDocument(files);
 
         Assert.Single(listener.Items);
@@ -111,7 +111,7 @@ public void TestRef()
 <p>3.1.1<strong>Hello</strong></p>
 <p><strong>outside</strong></p>
 "
-                .Split(new string[] { "\r\n", "\n" }, StringSplitOptions.RemoveEmptyEntries),
+                .Split(["\r\n", "\n"], StringSplitOptions.RemoveEmptyEntries),
             File.ReadAllLines(outputFilePath).Where(s => !string.IsNullOrWhiteSpace(s)).Select(s => s.Trim()).ToArray());
     }
 
@@ -134,7 +134,7 @@ public void TestXrefResolver()
         var inputFileName = "inputs/CatLibrary.ICat.yml";
         var inputFile = CreateFile(inputFileName, File.ReadAllText("TestData/inputs/CatLibrary.ICat.yml"), _inputFolder);
         FileCollection files = new(_defaultFiles);
-        files.Add(DocumentType.Article, new[] { inputFile }, _inputFolder);
+        files.Add(DocumentType.Article, [inputFile], _inputFolder);
 
         // act
         BuildDocument(files);
@@ -161,7 +161,7 @@ public void TestXrefResolver()
         Assert.Equal(@"
 eat:<p>eat event of cat. Every cat must implement this event.
 This method is within <a class=""xref"" href=""CatLibrary.ICat.html"">ICat</a></p>
-|666|<span>net472</span><span>netstandard2_0</span>".Split(new string[] { "\r\n", "\n" }, StringSplitOptions.None),
+|666|<span>net472</span><span>netstandard2_0</span>".Split(["\r\n", "\n"], StringSplitOptions.None),
             outputFileContent);
     }
 
@@ -232,7 +232,7 @@ public void TestValidMetadataReferenceWithIncremental()
 ", _inputFolder);
 
         FileCollection files = new(_defaultFiles);
-        files.Add(DocumentType.Article, new[] { inputFile1, inputFile2, dependentMarkdown }, _inputFolder);
+        files.Add(DocumentType.Article, [inputFile1, inputFile2, dependentMarkdown], _inputFolder);
 
         BuildDocument(files);
 
@@ -258,7 +258,7 @@ public void TestValidMetadataReferenceWithIncremental()
         Assert.Equal("postbuild2", rawModel2["metadata"]["postMeta"].ToString());
 
         // change dependent markdown
-        UpdateFile("toc.md", new string[] { "# Updated" }, _inputFolder);
+        UpdateFile("toc.md", ["# Updated"], _inputFolder);
         BuildDocument(files);
 
         rawModel = JsonUtility.Deserialize<JObject>(rawModelFilePath);
@@ -280,7 +280,7 @@ public void TestInvalidSchemaDefinition()
     {
         // Json.NET schema has limitation of 1000 calls per hour
         using var listener = new TestListenerScope();
-        var schemaFile = CreateFile("template/schemas/mta.reference.test.schema.json", @"
+        CreateFile("template/schemas/mta.reference.test.schema.json", @"
 {
   ""$schema"": ""http://dotnet.github.io/docfx/schemas/v1.0/schema.json#"",
   ""version"": ""1.0.0"",
@@ -333,7 +333,7 @@ public void TestInvalidObjectAgainstSchema()
 ", _inputFolder);
 
         FileCollection files = new(_defaultFiles);
-        files.Add(DocumentType.Article, new[] { inputFile }, _inputFolder);
+        files.Add(DocumentType.Article, [inputFile], _inputFolder);
         BuildDocument(files);
         var errors = listener.Items.Where(s => s.Code == "ViolateSchema").ToList();
         Assert.Single(errors);
@@ -376,7 +376,7 @@ public void TestInvalidMetadataReference()
 ", _inputFolder);
 
         FileCollection files = new(_defaultFiles);
-        files.Add(DocumentType.Article, new[] { inputFile1 }, _inputFolder);
+        files.Add(DocumentType.Article, [inputFile1], _inputFolder);
         Assert.Throws<InvalidJsonPointerException>(() => BuildDocument(files));
     }
 
@@ -394,7 +394,7 @@ private void BuildDocument(FileCollection files, DocumentBuildParameters dbp = n
             TemplateManager = _templateManager,
         };
 
-        using var builder = new DocumentBuilder(LoadAssemblies(), ImmutableArray<string>.Empty);
+        using var builder = new DocumentBuilder(LoadAssemblies(), []);
         builder.Build(parameters);
     }
 
diff --git a/test/Docfx.Build.SchemaDriven.Tests/SchemaFragmentsIteratorTest.cs b/test/Docfx.Build.SchemaDriven.Tests/SchemaFragmentsIteratorTest.cs
index e8f76657d87..35f256a0879 100644
--- a/test/Docfx.Build.SchemaDriven.Tests/SchemaFragmentsIteratorTest.cs
+++ b/test/Docfx.Build.SchemaDriven.Tests/SchemaFragmentsIteratorTest.cs
@@ -36,11 +36,11 @@ public void TestSchemaFragmentsIterator()
 
     private class UidPropertyCounter : ISchemaFragmentsHandler
     {
-        public List<string> ExistingMarkdownProperties { get; private set; } = new();
+        public List<string> ExistingMarkdownProperties { get; } = [];
 
-        public List<string> MissingMarkdownProperties { get; private set; } = new();
+        public List<string> MissingMarkdownProperties { get; } = [];
 
-        public List<string> ExistingUids { get; private set; } = new();
+        public List<string> ExistingUids { get; } = [];
 
         public void HandleUid(string uidKey, YamlMappingNode node, Dictionary<string, MarkdownFragment> fragments, BaseSchema schema, string oPathPrefix, string uid)
         {
diff --git a/test/Docfx.Build.SchemaDriven.Tests/SchemaMergerTest.cs b/test/Docfx.Build.SchemaDriven.Tests/SchemaMergerTest.cs
index a33b88b301d..9ede2aedd41 100644
--- a/test/Docfx.Build.SchemaDriven.Tests/SchemaMergerTest.cs
+++ b/test/Docfx.Build.SchemaDriven.Tests/SchemaMergerTest.cs
@@ -36,7 +36,7 @@ public SchemaMergerTest()
             TransformDocument = true,
         };
 
-        _templateManager = new TemplateManager(new List<string> { "template" }, null, _templateFolder);
+        _templateManager = new TemplateManager(["template"], null, _templateFolder);
     }
 
     [Fact]
@@ -121,7 +121,7 @@ public void TestSchemaOverwriteWithGeneralMergeTypes()
                 }
             },
         };
-        var schemaFile = CreateFile("template/schemas/testmerger.schema.json", JsonUtility.Serialize(schema), _templateFolder);
+        CreateFile("template/schemas/testmerger.schema.json", JsonUtility.Serialize(schema), _templateFolder);
         var inputFileName = "src.yml";
         var inputFile = CreateFile(inputFileName, @"### YamlMime:testmerger
 uid: uid1
@@ -216,8 +216,8 @@ public void TestSchemaOverwriteWithGeneralMergeTypes()
 Overwrite with content
 ", _inputFolder);
         FileCollection files = new(_defaultFiles);
-        files.Add(DocumentType.Article, new[] { inputFile }, _inputFolder);
-        files.Add(DocumentType.Overwrite, new[] { overwriteFile }, _inputFolder);
+        files.Add(DocumentType.Article, [inputFile], _inputFolder);
+        files.Add(DocumentType.Overwrite, [overwriteFile], _inputFolder);
         BuildDocument(files);
 
         // One plugin warning for yml and one plugin warning for overwrite file
@@ -290,7 +290,7 @@ Overwrite with content
     public void TestSchemaOverwriteWithGeneralSchemaOptions()
     {
         using var listener = new TestListenerScope();
-        var templateFile = CreateFile("template/testmerger2.html.tmpl", @"<xref uid=""{{xref}}""/>", _templateFolder);
+        CreateFile("template/testmerger2.html.tmpl", @"<xref uid=""{{xref}}""/>", _templateFolder);
         var schema = new Dictionary<string, object>
         {
             ["type"] = "object",
@@ -343,8 +343,8 @@ public void TestSchemaOverwriteWithGeneralSchemaOptions()
 Nice
 ", _inputFolder);
         FileCollection files = new(_defaultFiles);
-        files.Add(DocumentType.Article, new[] { inputFile }, _inputFolder);
-        files.Add(DocumentType.Overwrite, new[] { overwriteFile }, _inputFolder);
+        files.Add(DocumentType.Article, [inputFile], _inputFolder);
+        files.Add(DocumentType.Overwrite, [overwriteFile], _inputFolder);
         BuildDocument(files);
 
         // One plugin warning for yml and one plugin warning for overwrite file
@@ -378,7 +378,7 @@ private void BuildDocument(FileCollection files)
             TemplateManager = _templateManager,
         };
 
-        using var builder = new DocumentBuilder(LoadAssemblies(), ImmutableArray<string>.Empty);
+        using var builder = new DocumentBuilder(LoadAssemblies(), []);
         builder.Build(parameters);
     }
 
diff --git a/test/Docfx.Build.Tests/ConceptualDocumentProcessorTest.cs b/test/Docfx.Build.Tests/ConceptualDocumentProcessorTest.cs
index 51051ed04ca..4d4c7961e93 100644
--- a/test/Docfx.Build.Tests/ConceptualDocumentProcessorTest.cs
+++ b/test/Docfx.Build.Tests/ConceptualDocumentProcessorTest.cs
@@ -144,7 +144,7 @@ public void SystemKeysListShouldBeComplete()
             var outputRawModelPath = GetRawModelFilePath(file);
             Assert.True(File.Exists(outputRawModelPath));
             var model = JsonUtility.Deserialize<Dictionary<string, object>>(outputRawModelPath);
-            var systemKeys = (JArray)model[Constants.PropertyName.SystemKeys];
+            var systemKeys = ToList(model[Constants.PropertyName.SystemKeys]);
             Assert.NotEmpty(systemKeys);
             foreach (var key in model.Keys.Where(key => key[0] != '_' && key != "meta"))
             {
@@ -417,7 +417,7 @@ private void BuildDocument(FileCollection files, Dictionary<string, object> meta
             TemplateManager = _templateManager
         };
 
-        using var builder = new DocumentBuilder(Array.Empty<Assembly>(), ImmutableArray<string>.Empty);
+        using var builder = new DocumentBuilder([], []);
         builder.Build(parameters);
     }
 
@@ -447,5 +447,12 @@ public string CreateFile(string content, string fileName = null, string folder =
         }
     }
 
+    private static List<object> ToList(object value)
+    {
+        return value is List<object> list
+            ? list
+            : ((JArray)value).Cast<object>().ToList();
+    }
+
     #endregion
 }
diff --git a/test/Docfx.Build.Tests/Docfx.Build.Tests.csproj b/test/Docfx.Build.Tests/Docfx.Build.Tests.csproj
index a83813dcf9b..61c730cef26 100644
--- a/test/Docfx.Build.Tests/Docfx.Build.Tests.csproj
+++ b/test/Docfx.Build.Tests/Docfx.Build.Tests.csproj
@@ -1,4 +1,4 @@
-<Project Sdk="Microsoft.NET.Sdk">
+<Project Sdk="Microsoft.NET.Sdk">
   <ItemGroup>
     <Compile Remove="TestData\snippets\dataflowdegreeofparallelism.cs" />
   </ItemGroup>
diff --git a/test/Docfx.Build.Tests/DocumentBuilderTest.cs b/test/Docfx.Build.Tests/DocumentBuilderTest.cs
index 0b23fdb7ced..67b4ae138f4 100644
--- a/test/Docfx.Build.Tests/DocumentBuilderTest.cs
+++ b/test/Docfx.Build.Tests/DocumentBuilderTest.cs
@@ -728,7 +728,7 @@ private void BuildDocument(
         string templateFolder = null,
         string versionDir = null)
     {
-        using var builder = new DocumentBuilder(LoadAssemblies(), ImmutableArray<string>.Empty);
+        using var builder = new DocumentBuilder(LoadAssemblies(), []);
         if (applyTemplateSettings == null)
         {
             applyTemplateSettings = new ApplyTemplateSettings(_inputFolder, _outputFolder);
diff --git a/test/Docfx.Build.Tests/JintProcessorHelperTest.cs b/test/Docfx.Build.Tests/JintProcessorHelperTest.cs
index acc518771e1..e520143599f 100644
--- a/test/Docfx.Build.Tests/JintProcessorHelperTest.cs
+++ b/test/Docfx.Build.Tests/JintProcessorHelperTest.cs
@@ -1,4 +1,6 @@
-
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
 using Docfx.Common;
 using Jint;
 using Xunit;
diff --git a/test/Docfx.Build.Tests/PostProcessors/SitemapGeneratorTests.cs b/test/Docfx.Build.Tests/PostProcessors/SitemapGeneratorTests.cs
index 9192cdb5201..4e8658a653b 100644
--- a/test/Docfx.Build.Tests/PostProcessors/SitemapGeneratorTests.cs
+++ b/test/Docfx.Build.Tests/PostProcessors/SitemapGeneratorTests.cs
@@ -16,7 +16,6 @@ public class SitemapGeneratorTests : TestBase
     private readonly ITestOutputHelper _output;
 
     public SitemapGeneratorTests(ITestOutputHelper output)
-        : base()
     {
         _output = output;
     }
diff --git a/test/Docfx.Build.Tests/TemplatePageLoaderUnitTest.cs b/test/Docfx.Build.Tests/TemplatePageLoaderUnitTest.cs
index 223533997cf..c85c2c72929 100644
--- a/test/Docfx.Build.Tests/TemplatePageLoaderUnitTest.cs
+++ b/test/Docfx.Build.Tests/TemplatePageLoaderUnitTest.cs
@@ -25,18 +25,18 @@ public void TestLoaderWhenNoFileExists()
         Assert.Empty(listener.Items);
         Assert.Empty(templates);
 
-        var file1 = CreateFile("a.js", string.Empty, _inputFolder);
+        CreateFile("a.js", string.Empty, _inputFolder);
         templates = LoadAllTemplates();
         Assert.Empty(listener.Items);
         Assert.Empty(templates);
 
         // only allows file under root folder
-        var file2 = CreateFile("sub/a.tmpl", string.Empty, _inputFolder);
+        CreateFile("sub/a.tmpl", string.Empty, _inputFolder);
         templates = LoadAllTemplates();
         Assert.Empty(listener.Items);
         Assert.Empty(templates);
 
-        var file3 = CreateFile("a.tmpl.js", string.Empty, _inputFolder);
+        CreateFile("a.tmpl.js", string.Empty, _inputFolder);
         templates = LoadAllTemplates();
         Assert.Empty(listener.Items);
         Assert.Empty(templates);
@@ -45,7 +45,7 @@ public void TestLoaderWhenNoFileExists()
     [Fact]
     public void TestLoaderWhenRendererExists()
     {
-        var file1 = CreateFile("a.tmpl", string.Empty, _inputFolder);
+        CreateFile("a.tmpl", string.Empty, _inputFolder);
 
         using var listener = new TestListenerScope();
         var templates = LoadAllTemplates();
@@ -67,8 +67,8 @@ public void TestLoaderWhenRendererExists()
     [Fact]
     public void TestLoaderWhenPreprocessorExists()
     {
-        var file1 = CreateFile("a.primary.tmpl", string.Empty, _inputFolder);
-        var file2 = CreateFile("a.primary.js", "exports.transform = function(){}", _inputFolder);
+        CreateFile("a.primary.tmpl", string.Empty, _inputFolder);
+        CreateFile("a.primary.js", "exports.transform = function(){}", _inputFolder);
 
         using var listener = new TestListenerScope();
         var templates = LoadAllTemplates();
@@ -93,7 +93,7 @@ public void TestLoaderWhenPreprocessorExists()
     [Fact]
     public void TestLoaderWhenStandalonePreprocessorExists()
     {
-        var file1 = CreateFile("a.ext.TMPL.js", "exports.transform = function(){}", _inputFolder);
+        CreateFile("a.ext.TMPL.js", "exports.transform = function(){}", _inputFolder);
 
         using var listener = new TestListenerScope();
         var templates = LoadAllTemplates();
diff --git a/test/Docfx.Build.Tests/TocDocumentProcessorTest.cs b/test/Docfx.Build.Tests/TocDocumentProcessorTest.cs
index c654e1ef350..6b2dbc2ca47 100644
--- a/test/Docfx.Build.Tests/TocDocumentProcessorTest.cs
+++ b/test/Docfx.Build.Tests/TocDocumentProcessorTest.cs
@@ -300,11 +300,20 @@ public void ProcessYamlTocWithMetadataShouldSucceed()
 
         var model = JsonUtility.Deserialize<TocItemViewModel>(outputRawModelPath);
 
-        Assert.NotNull(model.Metadata["metadata"]);
-
-        var meta = (JObject)model.Metadata["metadata"];
-        Assert.Single(meta);
-        Assert.Equal("content", meta["meta"]);
+        if (JsonUtility.IsSystemTextJsonSupported<TocItemViewModel>())
+        {
+            var meta = (IDictionary<string, object>)model.Metadata["metadata"];
+            Assert.NotNull(meta);
+            Assert.Single(meta);
+            Assert.Equal("content", meta["meta"]);
+        }
+        else
+        {
+            var meta = (JObject)model.Metadata["metadata"];
+            Assert.NotNull(meta);
+            Assert.Single(meta);
+            Assert.Equal("content", meta["meta"]);
+        }
 
         var expectedModel = new TocItemViewModel
         {
@@ -927,7 +936,7 @@ private void BuildDocument(FileCollection files)
             }.ToImmutableDictionary(),
         };
 
-        using var builder = new DocumentBuilder(Array.Empty<Assembly>(), ImmutableArray<string>.Empty);
+        using var builder = new DocumentBuilder([], []);
         builder.Build(parameters);
     }
 
diff --git a/test/Docfx.Build.Tests/XRefMapDownloaderTest.cs b/test/Docfx.Build.Tests/XRefMapDownloaderTest.cs
index 43d78bca55b..b3557df9c27 100644
--- a/test/Docfx.Build.Tests/XRefMapDownloaderTest.cs
+++ b/test/Docfx.Build.Tests/XRefMapDownloaderTest.cs
@@ -40,7 +40,7 @@ public async Task ReadLocalXRefMapJsonFileTest()
         // Arrange
         var path = Path.Combine(Directory.GetCurrentDirectory(), "TestData", "xrefmap.json");
 
-        XRefMapDownloader downloader = new XRefMapDownloader();
+        var downloader = new XRefMapDownloader();
         var xrefMap = await downloader.DownloadAsync(new Uri(path)) as XRefMap;
 
         // Assert
@@ -54,7 +54,7 @@ public async Task ReadLocalXRefMapGZippedJsonFileTest()
         // Arrange
         var path = Path.Combine(Directory.GetCurrentDirectory(), "TestData", "xrefmap.json.gz");
 
-        XRefMapDownloader downloader = new XRefMapDownloader();
+        var downloader = new XRefMapDownloader();
         var xrefMap = await downloader.DownloadAsync(new Uri(path)) as XRefMap;
 
         // Assert
@@ -68,7 +68,7 @@ public async Task ReadLocalXRefMapGZippedYamlFileTest()
         // Arrange
         var path = Path.Combine(Directory.GetCurrentDirectory(), "TestData", "xrefmap.yml.gz");
 
-        XRefMapDownloader downloader = new XRefMapDownloader();
+        var downloader = new XRefMapDownloader();
         var xrefMap = await downloader.DownloadAsync(new Uri(path)) as XRefMap;
 
         // Assert
@@ -85,7 +85,7 @@ public async Task ReadRemoteXRefMapYamlFileTest1()
         // Arrange
         var path = "https://horizongir.github.io/ZedGraph/xrefmap.yml";
 
-        XRefMapDownloader downloader = new XRefMapDownloader();
+        var downloader = new XRefMapDownloader();
         var xrefMap = await downloader.DownloadAsync(new Uri(path)) as XRefMap;
 
         // Assert
@@ -114,7 +114,7 @@ public async Task ReadRemoteXRefMapJsonFileTest2()
         // Arrange
         var path = "https://normanderwan.github.io/UnityXrefMaps/xrefmap.yml";
 
-        XRefMapDownloader downloader = new XRefMapDownloader();
+        var downloader = new XRefMapDownloader();
         var xrefMap = await downloader.DownloadAsync(new Uri(path)) as XRefMap;
 
         // Assert
diff --git a/test/Docfx.Build.UniversalReference.Tests/Docfx.Build.UniversalReference.Tests.csproj b/test/Docfx.Build.UniversalReference.Tests/Docfx.Build.UniversalReference.Tests.csproj
index 68825da8592..3aeb509bbd8 100644
--- a/test/Docfx.Build.UniversalReference.Tests/Docfx.Build.UniversalReference.Tests.csproj
+++ b/test/Docfx.Build.UniversalReference.Tests/Docfx.Build.UniversalReference.Tests.csproj
@@ -1,8 +1,8 @@
-<Project Sdk="Microsoft.NET.Sdk">
+<Project Sdk="Microsoft.NET.Sdk">
   <ItemGroup>
     <None Include="TestData\**" CopyToOutputDirectory="PreserveNewest" />
   </ItemGroup>
-  
+
   <ItemGroup>
     <ProjectReference Include="..\..\src\Docfx.Build\Docfx.Build.csproj" />
     <ProjectReference Include="..\..\src\Docfx.Build.UniversalReference\Docfx.Build.UniversalReference.csproj" />
diff --git a/test/Docfx.Build.UniversalReference.Tests/UniversalReferenceDocumentProcessorTest.cs b/test/Docfx.Build.UniversalReference.Tests/UniversalReferenceDocumentProcessorTest.cs
index 2ec94eb53f6..04240ae3d34 100644
--- a/test/Docfx.Build.UniversalReference.Tests/UniversalReferenceDocumentProcessorTest.cs
+++ b/test/Docfx.Build.UniversalReference.Tests/UniversalReferenceDocumentProcessorTest.cs
@@ -193,7 +193,7 @@ private void BuildDocument(FileCollection files)
             TemplateManager = _templateManager
         };
 
-        using var builder = new DocumentBuilder(LoadAssemblies(), ImmutableArray<string>.Empty);
+        using var builder = new DocumentBuilder(LoadAssemblies(), []);
         builder.Build(parameters);
     }
 
diff --git a/test/Docfx.Common.Tests/Docfx.Common.Tests.csproj b/test/Docfx.Common.Tests/Docfx.Common.Tests.csproj
index d753b3a2558..241d5099754 100644
--- a/test/Docfx.Common.Tests/Docfx.Common.Tests.csproj
+++ b/test/Docfx.Common.Tests/Docfx.Common.Tests.csproj
@@ -1,4 +1,4 @@
-<Project Sdk="Microsoft.NET.Sdk">
+<Project Sdk="Microsoft.NET.Sdk">
   <ItemGroup>
     <ProjectReference Include="..\..\src\Docfx.YamlSerialization\Docfx.YamlSerialization.csproj" />
     <ProjectReference Include="..\..\src\Docfx.Plugins\Docfx.Plugins.csproj" />
diff --git a/test/Docfx.Dotnet.Tests/Docfx.Dotnet.Tests.csproj b/test/Docfx.Dotnet.Tests/Docfx.Dotnet.Tests.csproj
index 981e7f088ae..b5042bdb201 100644
--- a/test/Docfx.Dotnet.Tests/Docfx.Dotnet.Tests.csproj
+++ b/test/Docfx.Dotnet.Tests/Docfx.Dotnet.Tests.csproj
@@ -1,4 +1,4 @@
-<Project Sdk="Microsoft.NET.Sdk">
+<Project Sdk="Microsoft.NET.Sdk">
   <ItemGroup>
     <None Include="TestDataReferences\**" CopyToOutputDirectory="PreserveNewest" />
   </ItemGroup>
diff --git a/test/Docfx.Dotnet.Tests/GenerateMetadataFromCSUnitTest.cs b/test/Docfx.Dotnet.Tests/GenerateMetadataFromCSUnitTest.cs
index 5ea684af187..862bdf0d125 100644
--- a/test/Docfx.Dotnet.Tests/GenerateMetadataFromCSUnitTest.cs
+++ b/test/Docfx.Dotnet.Tests/GenerateMetadataFromCSUnitTest.cs
@@ -475,16 +475,16 @@ public interface IFooBar : IFoo, IBar { }
             Assert.Equal("Test1", item.Parent);
 
             Assert.Equal(
-                new[] { "Test1.Bar`1", null, "System.String", null },
+                ["Test1.Bar`1", null, "System.String", null],
                 item.NameParts[SyntaxLanguage.CSharp].Select(p => p.Name));
             Assert.Equal(
-                new[] { "Bar", "<", "string", ">" },
+                ["Bar", "<", "string", ">"],
                 item.NameParts[SyntaxLanguage.CSharp].Select(p => p.DisplayName));
             Assert.Equal(
-                new[] { "Bar", "<", "string", ">" },
+                ["Bar", "<", "string", ">"],
                 item.NameWithTypeParts[SyntaxLanguage.CSharp].Select(p => p.DisplayName));
             Assert.Equal(
-                new[] { "Test1", ".", "Bar", "<", "string", ">" },
+                ["Test1", ".", "Bar", "<", "string", ">"],
                 item.QualifiedNameParts[SyntaxLanguage.CSharp].Select(p => p.DisplayName));
         }
         {
@@ -496,16 +496,16 @@ public interface IFooBar : IFoo, IBar { }
             Assert.Equal(6, item.NameParts[SyntaxLanguage.CSharp].Count);
 
             Assert.Equal(
-                new[] { "Test1.Foo`1", null, null, null, null, null },
+                ["Test1.Foo`1", null, null, null, null, null],
                 item.NameParts[SyntaxLanguage.CSharp].Select(p => p.Name));
             Assert.Equal(
-                new[] { "Foo", "<", "T", "[", "]", ">" },
+                ["Foo", "<", "T", "[", "]", ">"],
                 item.NameParts[SyntaxLanguage.CSharp].Select(p => p.DisplayName));
             Assert.Equal(
-                new[] { "Foo", "<", "T", "[", "]", ">" },
+                ["Foo", "<", "T", "[", "]", ">"],
                 item.NameWithTypeParts[SyntaxLanguage.CSharp].Select(p => p.DisplayName));
             Assert.Equal(
-                new[] { "Test1", ".", "Foo", "<", "T", "[", "]", ">" },
+                ["Test1", ".", "Foo", "<", "T", "[", "]", ">"],
                 item.QualifiedNameParts[SyntaxLanguage.CSharp].Select(p => p.DisplayName));
         }
         {
@@ -515,16 +515,16 @@ public interface IFooBar : IFoo, IBar { }
             Assert.Equal("Test1", item.Parent);
 
             Assert.Equal(
-                new[] { "Test1.Foo`1", null, "System.String", null, null, null },
+                ["Test1.Foo`1", null, "System.String", null, null, null],
                 item.NameParts[SyntaxLanguage.CSharp].Select(p => p.Name));
             Assert.Equal(
-                new[] { "Foo", "<", "string", "[", "]", ">" },
+                ["Foo", "<", "string", "[", "]", ">"],
                 item.NameParts[SyntaxLanguage.CSharp].Select(p => p.DisplayName));
             Assert.Equal(
-                new[] { "Foo", "<", "string", "[", "]", ">" },
+                ["Foo", "<", "string", "[", "]", ">"],
                 item.NameWithTypeParts[SyntaxLanguage.CSharp].Select(p => p.DisplayName));
             Assert.Equal(
-                new[] { "Test1", ".", "Foo", "<", "string", "[", "]", ">" },
+                ["Test1", ".", "Foo", "<", "string", "[", "]", ">"],
                 item.QualifiedNameParts[SyntaxLanguage.CSharp].Select(p => p.DisplayName));
         }
     }
@@ -2580,12 +2580,7 @@ public void Undefined(ConsoleKey key = ConsoleKey.None) { }
 
         var undefined = output.Items[0].Items[0].Items[1];
         Assert.NotNull(undefined);
-
-#if NET8_0_OR_GREATER
         Assert.Equal("public void Undefined(ConsoleKey key = ConsoleKey.None)", undefined.Syntax.Content[SyntaxLanguage.CSharp]);
-#else
-        Assert.Equal("public void Undefined(ConsoleKey key = default)", undefined.Syntax.Content[SyntaxLanguage.CSharp]);
-#endif
     }
 
     [Fact]
@@ -2653,12 +2648,8 @@ public void EnumUndefinedValue(ConsoleKey? key = (ConsoleKey)999) { }
 
         var enumUndefinedDefault = output.Items[0].Items[0].Items[3];
         Assert.NotNull(enumUndefinedDefault);
-
-#if NET8_0_OR_GREATER
         Assert.Equal("public void EnumUndefinedDefault(ConsoleKey? key = ConsoleKey.None)", enumUndefinedDefault.Syntax.Content[SyntaxLanguage.CSharp]);
-#else
-        Assert.Equal("public void EnumUndefinedDefault(ConsoleKey? key = null)", enumUndefinedDefault.Syntax.Content[SyntaxLanguage.CSharp]);
-#endif
+
         var enumUndefinedValue = output.Items[0].Items[0].Items[4];
         Assert.NotNull(enumUndefinedValue);
         Assert.Equal("public void EnumUndefinedValue(ConsoleKey? key = (ConsoleKey)999)", enumUndefinedValue.Syntax.Content[SyntaxLanguage.CSharp]);
@@ -3612,45 +3603,40 @@ public class Bar
         var output = Verify(code);
         var type = output.Items[0].Items[0];
 
-        Assert.Equal(new[]
-        {
+        Assert.Equal([
             "Test.Bar.op_Implicit(System.UInt32)~Test.Bar",
             "Test.Bar.op_Implicit(System.String)~Test.Bar",
             "Test.Bar.op_CheckedExplicit(Test.Bar)~System.UInt32",
-            "Test.Bar.op_CheckedExplicit(Test.Bar)~System.String[]",
-        }, type.Items.Select(item => item.Name));
+            "Test.Bar.op_CheckedExplicit(Test.Bar)~System.String[]"
+        ], type.Items.Select(item => item.Name));
 
-        Assert.Equal(new[]
-        {
+        Assert.Equal([
             "implicit operator Bar(uint)",
             "implicit operator Bar(string)",
             "explicit operator checked uint(Bar)",
-            "explicit operator checked string[](Bar)",
-        }, type.Items.Select(item => item.DisplayNames[SyntaxLanguage.CSharp]));
+            "explicit operator checked string[](Bar)"
+        ], type.Items.Select(item => item.DisplayNames[SyntaxLanguage.CSharp]));
 
-        Assert.Equal(new[]
-        {
+        Assert.Equal([
             "Bar.implicit operator Bar(uint)",
             "Bar.implicit operator Bar(string)",
             "Bar.explicit operator checked uint(Bar)",
-            "Bar.explicit operator checked string[](Bar)",
-        }, type.Items.Select(item => item.DisplayNamesWithType[SyntaxLanguage.CSharp]));
+            "Bar.explicit operator checked string[](Bar)"
+        ], type.Items.Select(item => item.DisplayNamesWithType[SyntaxLanguage.CSharp]));
 
-        Assert.Equal(new[]
-        {
+        Assert.Equal([
             "Test.Bar.implicit operator Test.Bar(uint)",
             "Test.Bar.implicit operator Test.Bar(string)",
             "Test.Bar.explicit operator checked uint(Test.Bar)",
-            "Test.Bar.explicit operator checked string[](Test.Bar)",
-        }, type.Items.Select(item => item.DisplayQualifiedNames[SyntaxLanguage.CSharp]));
+            "Test.Bar.explicit operator checked string[](Test.Bar)"
+        ], type.Items.Select(item => item.DisplayQualifiedNames[SyntaxLanguage.CSharp]));
 
-        Assert.Equal(new[]
-        {
+        Assert.Equal([
             "Test.Bar.op_Implicit*",
             "Test.Bar.op_Implicit*",
             "Test.Bar.op_CheckedExplicit*",
-            "Test.Bar.op_CheckedExplicit*",
-        }, type.Items.Select(item => item.Overload));
+            "Test.Bar.op_CheckedExplicit*"
+        ], type.Items.Select(item => item.Overload));
 
         Assert.Equal("implicit operator", string.Concat(output.References["Test.Bar.op_Implicit*"].NameParts[SyntaxLanguage.CSharp].Select(p => p.DisplayName)));
         Assert.Equal("explicit operator checked", string.Concat(output.References["Test.Bar.op_CheckedExplicit*"].NameParts[SyntaxLanguage.CSharp].Select(p => p.DisplayName)));
@@ -3678,13 +3664,12 @@ internal interface IFoo { }
         var output = Verify(code, new() { IncludePrivateMembers = true });
         var foo = output.Items[0].Items[0];
         Assert.Equal("internal class Foo : IFoo", foo.Syntax.Content[SyntaxLanguage.CSharp]);
-        Assert.Equal(new[]
-        {
+        Assert.Equal([
             "internal void M1()",
             "protected internal void M2()",
             "private protected void M3()",
-            "private void M4()",
-        }, foo.Items.Select(item => item.Syntax.Content[SyntaxLanguage.CSharp]));
+            "private void M4()"
+        ], foo.Items.Select(item => item.Syntax.Content[SyntaxLanguage.CSharp]));
     }
 
     [Fact]
diff --git a/test/Docfx.Glob.Tests/Docfx.Glob.Tests.csproj b/test/Docfx.Glob.Tests/Docfx.Glob.Tests.csproj
index b6824f92d81..38cbb3cdba2 100644
--- a/test/Docfx.Glob.Tests/Docfx.Glob.Tests.csproj
+++ b/test/Docfx.Glob.Tests/Docfx.Glob.Tests.csproj
@@ -1,4 +1,4 @@
-<Project Sdk="Microsoft.NET.Sdk">
+<Project Sdk="Microsoft.NET.Sdk">
   <ItemGroup>
     <ProjectReference Include="..\..\src\Docfx.Glob\Docfx.Glob.csproj" />
     <ProjectReference Include="..\Docfx.Tests.Common\Docfx.Tests.Common.csproj" />
diff --git a/test/Docfx.Glob.Tests/GlobFileTest.cs b/test/Docfx.Glob.Tests/GlobFileTest.cs
index aa42185b374..da22b713f17 100644
--- a/test/Docfx.Glob.Tests/GlobFileTest.cs
+++ b/test/Docfx.Glob.Tests/GlobFileTest.cs
@@ -51,33 +51,33 @@ public void TestGlobGetFilesShouldAbleToGetFiles()
         CreateFilesOrFolders(_workingDirectory, files);
         var result = FileGlob.GetFiles(
             _workingDirectory,
-            new string[] { "**.md" },
+            ["**.md"],
             null).ToArray();
         Assert.Equal(3, result.Length);
         result = FileGlob.GetFiles(
             _workingDirectory,
             null,
-            new string[] { "**.md" }).ToArray();
+            ["**.md"]).ToArray();
         Assert.Empty(result);
         result = FileGlob.GetFiles(
             _workingDirectory,
-            new string[] { "**" },
-            new string[] { "**.md" }).ToArray();
+            ["**"],
+            ["**.md"]).ToArray();
         Assert.Equal(6, result.Length);
         result = FileGlob.GetFiles(
              _workingDirectory,
-             new string[] { "**.md" },
-             new string[] { "**{J,L}/**" }).ToArray();
+             ["**.md"],
+             ["**{J,L}/**"]).ToArray();
         Assert.Single(result);
         result = FileGlob.GetFiles(
              _workingDirectory,
-             new string[] { "**.md", "**.csproj" },
-             new string[] { "**J/**", "**/M/**" }).ToArray();
+             ["**.md", "**.csproj"],
+             ["**J/**", "**/M/**"]).ToArray();
         Assert.Single(result);
         result = FileGlob.GetFiles(
              _workingDirectory + "/Root",
-             new string[] { "[EJ]/*.{md,cs,csproj}" },
-             new string[] { "**.cs" }).ToArray();
+             ["[EJ]/*.{md,cs,csproj}"],
+             ["**.cs"]).ToArray();
         Assert.Equal(2, result.Length);
     }
 
diff --git a/test/Docfx.MarkdigEngine.Extensions.Tests/CodeTest.cs b/test/Docfx.MarkdigEngine.Extensions.Tests/CodeTest.cs
index 1c4fe5204f6..35b563d1c86 100644
--- a/test/Docfx.MarkdigEngine.Extensions.Tests/CodeTest.cs
+++ b/test/Docfx.MarkdigEngine.Extensions.Tests/CodeTest.cs
@@ -60,7 +60,7 @@ void TableColumnsProperty()
             tbl.Columns[1].Background = Brushes.AliceBlue;
             tbl.Columns[2].Width = new GridLength(20);
             tbl.Columns[3].Background = Brushes.AliceBlue;
-#endregion 
+#endregion
 
             // Get a count of columns hosted by the table.
             // <Snippet_Table_Columns_Count>
@@ -169,7 +169,7 @@ void TableRowGroupRows()
             tbl.RowGroups.Add(trg);
 
             // Add rows to a TableRowGroup collection.
-            int rowsToAdd = 4; 
+            int rowsToAdd = 4;
             for (int x = 0; x < rowsToAdd; x++)
                 trg.Rows.Add(new TableRow());
 
@@ -200,7 +200,7 @@ void TableRowGroupRows()
 
             // Remove all rows...
             trg.Rows.Clear();
-            // </Snippet_TableRowGroup_Rows>        
+            // </Snippet_TableRowGroup_Rows>
         }
 
         void TableCellConst()
@@ -717,14 +717,14 @@ int main()
     AppDomain^ root = AppDomain::CurrentDomain;
 
     AppDomainSetup^ setup = gcnew AppDomainSetup();
-    setup->ApplicationBase = 
+    setup->ApplicationBase =
         root->SetupInformation->ApplicationBase + ""MyAppSubfolder\\"";
 
     AppDomain^ domain = AppDomain::CreateDomain(""MyDomain"", nullptr, setup);
 
-    Console::WriteLine(""Application base of {0}:\r\n\t{1}"", 
+    Console::WriteLine(""Application base of {0}:\r\n\t{1}"",
         root->FriendlyName, root->SetupInformation->ApplicationBase);
-    Console::WriteLine(""Application base of {0}:\r\n\t{1}"", 
+    Console::WriteLine(""Application base of {0}:\r\n\t{1}"",
         domain->FriendlyName, domain->SetupInformation->ApplicationBase);
 
     AppDomain::Unload(domain);
@@ -955,14 +955,14 @@ int main()
     AppDomain^ root = AppDomain::CurrentDomain;
 
     AppDomainSetup^ setup = gcnew AppDomainSetup();
-    setup->ApplicationBase = 
+    setup->ApplicationBase =
         root->SetupInformation->ApplicationBase + ""MyAppSubfolder\\"";
 
     AppDomain^ domain = AppDomain::CreateDomain(""MyDomain"", nullptr, setup);
 
-    Console::WriteLine(""Application base of {0}:\r\n\t{1}"", 
+    Console::WriteLine(""Application base of {0}:\r\n\t{1}"",
         root->FriendlyName, root->SetupInformation->ApplicationBase);
-    Console::WriteLine(""Application base of {0}:\r\n\t{1}"", 
+    Console::WriteLine(""Application base of {0}:\r\n\t{1}"",
         domain->FriendlyName, domain->SetupInformation->ApplicationBase);
 
     AppDomain::Unload(domain);
@@ -1315,14 +1315,14 @@ int main()
     AppDomain^ root = AppDomain::CurrentDomain;
 
     AppDomainSetup^ setup = gcnew AppDomainSetup();
-    setup-&gt;ApplicationBase = 
+    setup-&gt;ApplicationBase =
         root-&gt;SetupInformation-&gt;ApplicationBase + &quot;MyAppSubfolder\\&quot;;
 
     AppDomain^ domain = AppDomain::CreateDomain(&quot;MyDomain&quot;, nullptr, setup);
 
-    Console::WriteLine(&quot;Application base of {0}:\r\n\t{1}&quot;, 
+    Console::WriteLine(&quot;Application base of {0}:\r\n\t{1}&quot;,
         root-&gt;FriendlyName, root-&gt;SetupInformation-&gt;ApplicationBase);
-    Console::WriteLine(&quot;Application base of {0}:\r\n\t{1}&quot;, 
+    Console::WriteLine(&quot;Application base of {0}:\r\n\t{1}&quot;,
         domain-&gt;FriendlyName, domain-&gt;SetupInformation-&gt;ApplicationBase);
 
     AppDomain::Unload(domain);
@@ -1870,8 +1870,8 @@ public void CodeTestBlockGeneral(string source, string expected)
     public void CodeTestBlockGeneralCSharp_Error(string source)
     {
         // arrange
-        var filename = string.Empty;
-        var content = string.Empty;
+        string filename;
+        string content;
         if (source.Contains("source.cs"))
         {
             filename = "source.cs";
diff --git a/test/Docfx.MarkdigEngine.Extensions.Tests/NolocTest.cs b/test/Docfx.MarkdigEngine.Extensions.Tests/NolocTest.cs
index cd9341fff8c..40b239e1ab1 100644
--- a/test/Docfx.MarkdigEngine.Extensions.Tests/NolocTest.cs
+++ b/test/Docfx.MarkdigEngine.Extensions.Tests/NolocTest.cs
@@ -1,4 +1,6 @@
-
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
 using Xunit;
 
 namespace Docfx.MarkdigEngine.Tests;
diff --git a/test/Docfx.MarkdigEngine.Tests/Docfx.MarkdigEngine.Tests.csproj b/test/Docfx.MarkdigEngine.Tests/Docfx.MarkdigEngine.Tests.csproj
index 816e8a6a788..8c61517ccfb 100644
--- a/test/Docfx.MarkdigEngine.Tests/Docfx.MarkdigEngine.Tests.csproj
+++ b/test/Docfx.MarkdigEngine.Tests/Docfx.MarkdigEngine.Tests.csproj
@@ -1,4 +1,4 @@
-<Project Sdk="Microsoft.NET.Sdk">
+<Project Sdk="Microsoft.NET.Sdk">
   <ItemGroup>
     <ProjectReference Include="..\..\src\Docfx.Build\Docfx.Build.csproj" />
     <ProjectReference Include="..\..\src\Docfx.MarkdigEngine.Extensions\Docfx.MarkdigEngine.Extensions.csproj" />
diff --git a/test/Docfx.MarkdigEngine.Tests/InclusionTest.cs b/test/Docfx.MarkdigEngine.Tests/InclusionTest.cs
index 98acf3606bc..d10bb7f7668 100644
--- a/test/Docfx.MarkdigEngine.Tests/InclusionTest.cs
+++ b/test/Docfx.MarkdigEngine.Tests/InclusionTest.cs
@@ -13,11 +13,11 @@ namespace Docfx.MarkdigEngine.Tests;
 [Collection("docfx STA")]
 public class InclusionTest
 {
-        [Fact]
-        [Trait("Related", "Inclusion")]
-        public void TestBlockLevelInclusion_General()
-        {
-                var root = @"
+    [Fact]
+    [Trait("Related", "Inclusion")]
+    public void TestBlockLevelInclusion_General()
+    {
+        var root = @"
 # Hello World
 
 Test Include File
@@ -28,7 +28,7 @@ Test Include File
 
 ";
 
-                var refa = @"---
+        var refa = @"---
 title: include file
 description: include file
 ---
@@ -39,37 +39,37 @@ Test Include File
 
 ";
 
-                var refb = @"---
+        var refb = @"---
 title: include file
 description: include file
 ---
 
 # Hello Include File B
 ";
-                TestUtility.WriteToFile("r/root.md", root);
-                TestUtility.WriteToFile("r/a.md", refa);
-                TestUtility.WriteToFile("r/b.md", refb);
+        TestUtility.WriteToFile("r/root.md", root);
+        TestUtility.WriteToFile("r/a.md", refa);
+        TestUtility.WriteToFile("r/b.md", refb);
 
-                var result = TestUtility.MarkupWithoutSourceInfo(root, "r/root.md");
-                var expected = @"<h1 id=""hello-world"">Hello World</h1>
+        var result = TestUtility.MarkupWithoutSourceInfo(root, "r/root.md");
+        var expected = @"<h1 id=""hello-world"">Hello World</h1>
 <p>Test Include File</p>
 <h1 id=""hello-include-file-a"">Hello Include File A</h1>
 <p>This is a file A included by another file. # Hello Include File B [!include<a href=""%7E/r/b.md"">refb</a> ]</p>
 
 <p>[!include<a href=""a.md"">refa</a> ]</p>
 ";
-                Assert.Equal(expected.Replace("\r\n", "\n"), result.Html);
+        Assert.Equal(expected.Replace("\r\n", "\n"), result.Html);
 
-                var dependency = result.Dependency;
-                var expectedDependency = new List<string> { "a.md", "b.md" };
-                Assert.Equal(expectedDependency.ToImmutableList(), dependency);
-        }
+        var dependency = result.Dependency;
+        var expectedDependency = new List<string> { "a.md", "b.md" };
+        Assert.Equal(expectedDependency.ToImmutableList(), dependency);
+    }
 
-        [Fact]
-        [Trait("Related", "IncludeFile")]
-        public void TestBlockLevelInclusion_Escape()
-        {
-                var root = @"
+    [Fact]
+    [Trait("Related", "IncludeFile")]
+    public void TestBlockLevelInclusion_Escape()
+    {
+        var root = @"
 # Hello World
 
 Test Include File
@@ -78,33 +78,33 @@ Test Include File
 
 ";
 
-                var refa = @"
+        var refa = @"
 # Hello Include File A
 
 This is a file A included by another file.
 ";
 
-                TestUtility.WriteToFile("r/root.md", root);
-                TestUtility.WriteToFile("r/a(x).md", refa);
+        TestUtility.WriteToFile("r/root.md", root);
+        TestUtility.WriteToFile("r/a(x).md", refa);
 
-                var result = TestUtility.MarkupWithoutSourceInfo(root, "r/root.md");
-                var expected = @"<h1 id=""hello-world"">Hello World</h1>
+        var result = TestUtility.MarkupWithoutSourceInfo(root, "r/root.md");
+        var expected = @"<h1 id=""hello-world"">Hello World</h1>
 <p>Test Include File</p>
 <h1 id=""hello-include-file-a"">Hello Include File A</h1>
 <p>This is a file A included by another file.</p>
 ";
-                Assert.Equal(expected.Replace("\r\n", "\n"), result.Html);
+        Assert.Equal(expected.Replace("\r\n", "\n"), result.Html);
 
-                var dependency = result.Dependency;
-                var expectedDependency = new List<string> { "a(x).md" };
-                Assert.Equal(expectedDependency.ToImmutableList(), dependency);
-        }
+        var dependency = result.Dependency;
+        var expectedDependency = new List<string> { "a(x).md" };
+        Assert.Equal(expectedDependency.ToImmutableList(), dependency);
+    }
 
-        [Fact]
-        [Trait("Related", "Inclusion")]
-        public void TestBlockLevelInclusion_RelativePath()
-        {
-                var root = @"
+    [Fact]
+    [Trait("Related", "Inclusion")]
+    public void TestBlockLevelInclusion_RelativePath()
+    {
+        var root = @"
 # Hello World
 
 Test Include File
@@ -113,33 +113,33 @@ Test Include File
 
 ";
 
-                var refa = @"
+        var refa = @"
 # Hello Include File A
 
 This is a file A included by another file.
 ";
 
-                TestUtility.WriteToFile("r/root.md", root);
-                TestUtility.WriteToFile("r/a.md", refa);
+        TestUtility.WriteToFile("r/root.md", root);
+        TestUtility.WriteToFile("r/a.md", refa);
 
-                var result = TestUtility.MarkupWithoutSourceInfo(root, "r/root.md");
-                var expected = @"<h1 id=""hello-world"">Hello World</h1>
+        var result = TestUtility.MarkupWithoutSourceInfo(root, "r/root.md");
+        var expected = @"<h1 id=""hello-world"">Hello World</h1>
 <p>Test Include File</p>
 <h1 id=""hello-include-file-a"">Hello Include File A</h1>
 <p>This is a file A included by another file.</p>
 ";
-                Assert.Equal(expected.Replace("\r\n", "\n"), result.Html);
+        Assert.Equal(expected.Replace("\r\n", "\n"), result.Html);
 
-                var dependency = result.Dependency;
-                var expectedDependency = new List<string> { "a.md" };
-                Assert.Equal(expectedDependency.ToImmutableList(), dependency);
-        }
+        var dependency = result.Dependency;
+        var expectedDependency = new List<string> { "a.md" };
+        Assert.Equal(expectedDependency.ToImmutableList(), dependency);
+    }
 
-        [Fact]
-        [Trait("Related", "Inclusion")]
-        public void TestBlockLevelInclusion_CycleInclude()
-        {
-                var root = @"
+    [Fact]
+    [Trait("Related", "Inclusion")]
+    public void TestBlockLevelInclusion_CycleInclude()
+    {
+        var root = @"
 # Hello World
 
 Test Include File
@@ -148,7 +148,7 @@ Test Include File
 
 ";
 
-                var refa = @"
+        var refa = @"
 # Hello Include File A
 
 This is a file A included by another file.
@@ -157,37 +157,37 @@ This is a file A included by another file.
 
 ";
 
-                var refb = @"
+        var refb = @"
 # Hello Include File B
 
 [!include[refa](a.md)]
 ";
-                TestUtility.WriteToFile("r/root.md", root);
-                TestUtility.WriteToFile("r/a.md", refa);
-                TestUtility.WriteToFile("r/b.md", refb);
+        TestUtility.WriteToFile("r/root.md", root);
+        TestUtility.WriteToFile("r/a.md", refa);
+        TestUtility.WriteToFile("r/b.md", refb);
 
-                var listener = new TestLoggerListener();
-                Logger.RegisterListener(listener);
-                var result = TestUtility.MarkupWithoutSourceInfo(root, "r/root.md");
-                var expected = @"<h1 id=""hello-world"">Hello World</h1>
+        var listener = new TestLoggerListener();
+        Logger.RegisterListener(listener);
+        var result = TestUtility.MarkupWithoutSourceInfo(root, "r/root.md");
+        var expected = @"<h1 id=""hello-world"">Hello World</h1>
 <p>Test Include File</p>
 <h1 id=""hello-include-file-a"">Hello Include File A</h1>
 <p>This is a file A included by another file.</p>
 <h1 id=""hello-include-file-b"">Hello Include File B</h1>
 [!include[refa](a.md)]";
 
-                Assert.Equal(expected.Replace("\r\n", "\n"), result.Html);
-                Logger.UnregisterListener(listener);
-                Assert.Collection(listener.Items, log => Assert.Equal(
-                    "Build has identified file(s) referencing each other: 'r/root.md' --> '~/r/a.md' --> '~/r/b.md' --> '~/r/a.md'",
-                    log.Message));
-        }
-
-        [Fact]
-        [Trait("Related", "Inclusion")]
-        public void TestInlineLevelInclusion_General()
-        {
-                var root = @"
+        Assert.Equal(expected.Replace("\r\n", "\n"), result.Html);
+        Logger.UnregisterListener(listener);
+        Assert.Collection(listener.Items, log => Assert.Equal(
+            "Build has identified file(s) referencing each other: 'r/root.md' --> '~/r/a.md' --> '~/r/b.md' --> '~/r/a.md'",
+            log.Message));
+    }
+
+    [Fact]
+    [Trait("Related", "Inclusion")]
+    public void TestInlineLevelInclusion_General()
+    {
+        var root = @"
 # Hello World
 
 Test Inline Included File: \\[!include[refa](~/r/a.md)].
@@ -195,122 +195,122 @@ public void TestInlineLevelInclusion_General()
 Test Escaped Inline Included File: \[!include[refa](~/r/a.md)].
 ";
 
-                var refa = "This is a **included** token";
+        var refa = "This is a **included** token";
 
-                TestUtility.WriteToFile("r/root.md", root);
-                TestUtility.WriteToFile("r/a.md", refa);
+        TestUtility.WriteToFile("r/root.md", root);
+        TestUtility.WriteToFile("r/a.md", refa);
 
-                var result = TestUtility.MarkupWithoutSourceInfo(root, "r/root.md"); ;
-                var expected = @"<h1 id=""hello-world"">Hello World</h1>
+        var result = TestUtility.MarkupWithoutSourceInfo(root, "r/root.md"); ;
+        var expected = @"<h1 id=""hello-world"">Hello World</h1>
 <p>Test Inline Included File: \This is a <strong>included</strong> token.</p>
 <p>Test Escaped Inline Included File: [!include<a href=""%7E/r/a.md"">refa</a>].</p>
 ";
-                Assert.Equal(expected.Replace("\r\n", "\n"), result.Html);
+        Assert.Equal(expected.Replace("\r\n", "\n"), result.Html);
 
-                var dependency = result.Dependency;
-                var expectedDependency = new List<string> { "a.md" };
-                Assert.Equal(expectedDependency.ToImmutableList(), dependency);
-        }
+        var dependency = result.Dependency;
+        var expectedDependency = new List<string> { "a.md" };
+        Assert.Equal(expectedDependency.ToImmutableList(), dependency);
+    }
 
-        [Fact]
-        [Trait("Related", "Inclusion")]
-        public void TestInlineLevelInclusion_CycleInclude()
-        {
-                var root = @"
+    [Fact]
+    [Trait("Related", "Inclusion")]
+    public void TestInlineLevelInclusion_CycleInclude()
+    {
+        var root = @"
 # Hello World
 
 Test Inline Included File: [!include[refa](~/r/a.md)].
 
 ";
 
-                var refa = "This is a **included** token with [!include[root](~/r/root.md)]";
+        var refa = "This is a **included** token with [!include[root](~/r/root.md)]";
 
-                TestUtility.WriteToFile("r/root.md", root);
-                TestUtility.WriteToFile("r/a.md", refa);
+        TestUtility.WriteToFile("r/root.md", root);
+        TestUtility.WriteToFile("r/a.md", refa);
 
-                var result = TestUtility.MarkupWithoutSourceInfo(root, "r/root.md");
-                var expected = @"<h1 id=""hello-world"">Hello World</h1>
+        var result = TestUtility.MarkupWithoutSourceInfo(root, "r/root.md");
+        var expected = @"<h1 id=""hello-world"">Hello World</h1>
 <p>Test Inline Included File: This is a <strong>included</strong> token with [!include[root](~/r/root.md)].</p>
 ";
 
-                Assert.Equal(expected.Replace("\r\n", "\n"), result.Html);
-        }
+        Assert.Equal(expected.Replace("\r\n", "\n"), result.Html);
+    }
 
-        [Fact]
-        [Trait("Related", "Inclusion")]
-        public void TestInlineLevelInclusion_Block()
-        {
-                var root = @"
+    [Fact]
+    [Trait("Related", "Inclusion")]
+    public void TestInlineLevelInclusion_Block()
+    {
+        var root = @"
 # Hello World
 
 Test Inline Included File: [!include[refa](~/r/a.md)].
 
 ";
 
-                var refa = @"## This is a included token
+        var refa = @"## This is a included token
 
 block content in Inline Inclusion.";
 
-                TestUtility.WriteToFile("r/root.md", root);
-                TestUtility.WriteToFile("r/a.md", refa);
+        TestUtility.WriteToFile("r/root.md", root);
+        TestUtility.WriteToFile("r/a.md", refa);
 
-                var result = TestUtility.MarkupWithoutSourceInfo(root, "r/root.md");
-                var expected = @"<h1 id=""hello-world"">Hello World</h1>
+        var result = TestUtility.MarkupWithoutSourceInfo(root, "r/root.md");
+        var expected = @"<h1 id=""hello-world"">Hello World</h1>
 <p>Test Inline Included File: ## This is a included tokenblock content in Inline Inclusion..</p>
 ";
-                Assert.Equal(expected.Replace("\r\n", "\n"), result.Html);
-
-                var dependency = result.Dependency;
-                var expectedDependency = new List<string> { "a.md" };
-                Assert.Equal(expectedDependency.ToImmutableList(), dependency);
-        }
-
-        [Fact]
-        [Trait("Related", "DfmMarkdown")]
-        public void TestBlockLevelInclusion()
-        {
-                // -r
-                //  |- root.md
-                //  |- empty.md
-                //  |- a
-                //  |  |- refc.md
-                //  |- b
-                //  |  |- linkAndRefRoot.md
-                //  |  |- a.md
-                //  |  |- img
-                //  |  |   |- img.jpg
-                //  |- c
-                //  |  |- c.md
-                //  |- link
-                //     |- link2.md
-                //     |- md
-                //         |- c.md
-                var root = @"
+        Assert.Equal(expected.Replace("\r\n", "\n"), result.Html);
+
+        var dependency = result.Dependency;
+        var expectedDependency = new List<string> { "a.md" };
+        Assert.Equal(expectedDependency.ToImmutableList(), dependency);
+    }
+
+    [Fact]
+    [Trait("Related", "DfmMarkdown")]
+    public void TestBlockLevelInclusion()
+    {
+        // -r
+        //  |- root.md
+        //  |- empty.md
+        //  |- a
+        //  |  |- refc.md
+        //  |- b
+        //  |  |- linkAndRefRoot.md
+        //  |  |- a.md
+        //  |  |- img
+        //  |  |   |- img.jpg
+        //  |- c
+        //  |  |- c.md
+        //  |- link
+        //     |- link2.md
+        //     |- md
+        //         |- c.md
+        var root = @"
 [!include[linkAndRefRoot](b/linkAndRefRoot.md)]
 [!include[refc](a/refc.md ""This is root"")]
 [!include[refc_using_cache](a/refc.md)]
 [!include[empty](empty.md)]
 [!include[external](http://microsoft.com/a.md)]";
 
-                var linkAndRefRoot = @"
+        var linkAndRefRoot = @"
 Paragraph1
 [link](a.md)
 [!include-[link2](../link/link2.md)]
 ![Image](img/img.jpg)
 [!include-[root](../root.md)]";
-                var link2 = "[link](md/c.md)";
-                var refc = @"[!include[c](../c/c.md ""This is root"")]";
-                var c = "**Hello**";
-                TestUtility.WriteToFile("r/root.md", root);
-
-                TestUtility.WriteToFile("r/a/refc.md", refc);
-                TestUtility.WriteToFile("r/b/linkAndRefRoot.md", linkAndRefRoot);
-                TestUtility.WriteToFile("r/link/link2.md", link2);
-                TestUtility.WriteToFile("r/c/c.md", c);
-                TestUtility.WriteToFile("r/empty.md", string.Empty);
-                var marked = TestUtility.MarkupWithoutSourceInfo(root, "r/root.md");
-                var dependency = marked.Dependency;
-                var expected = @"<p>Paragraph1
+        var link2 = "[link](md/c.md)";
+        var refc = @"[!include[c](../c/c.md ""This is root"")]";
+        var c = "**Hello**";
+        TestUtility.WriteToFile("r/root.md", root);
+
+        TestUtility.WriteToFile("r/a/refc.md", refc);
+        TestUtility.WriteToFile("r/b/linkAndRefRoot.md", linkAndRefRoot);
+        TestUtility.WriteToFile("r/link/link2.md", link2);
+        TestUtility.WriteToFile("r/c/c.md", c);
+        TestUtility.WriteToFile("r/empty.md", string.Empty);
+        var marked = TestUtility.MarkupWithoutSourceInfo(root, "r/root.md");
+        var dependency = marked.Dependency;
+        var expected = @"<p>Paragraph1
 <a href=""%7E/r/b/a.md"">link</a>
 <a href=""%7E/r/link/md/c.md"">link</a>
 <img src=""%7E/r/b/img/img.jpg"" alt=""Image"" />
@@ -319,154 +319,154 @@ public void TestBlockLevelInclusion()
 <p><strong>Hello</strong></p>
 [!include[external](http://microsoft.com/a.md)]".Replace("\r\n", "\n");
 
-                Assert.Equal(expected, marked.Html);
-                Assert.Equal(
-                    new[]
-                    {
+        Assert.Equal(expected, marked.Html);
+        Assert.Equal(
+            new[]
+            {
                 "a/refc.md",
                 "b/linkAndRefRoot.md",
                 "c/c.md",
                 "empty.md",
                 "link/link2.md",
                 "root.md",
-                    },
-                    dependency.OrderBy(x => x).ToArray());
-        }
-
-        [Fact]
-        [Trait("Related", "DfmMarkdown")]
-        public void TestBlockLevelInclusionWithSameFile()
-        {
-                // -r
-                //  |- r.md
-                //  |- a
-                //  |  |- a.md
-                //  |- b
-                //  |  |- token.md
-                //  |- c
-                //     |- d
-                //        |- d.md
-                //  |- img
-                //  |  |- img.jpg
-                var r = @"
+            },
+            dependency.OrderBy(x => x).ToArray());
+    }
+
+    [Fact]
+    [Trait("Related", "DfmMarkdown")]
+    public void TestBlockLevelInclusionWithSameFile()
+    {
+        // -r
+        //  |- r.md
+        //  |- a
+        //  |  |- a.md
+        //  |- b
+        //  |  |- token.md
+        //  |- c
+        //     |- d
+        //        |- d.md
+        //  |- img
+        //  |  |- img.jpg
+        var r = @"
 [!include[](a/a.md)]
 [!include[](c/d/d.md)]
 ";
-                var a = @"
+        var a = @"
 [!include[](../b/token.md)]";
-                var token = @"
+        var token = @"
 ![](../img/img.jpg)
 [](#anchor)
 [a](../a/a.md)
 [](invalid.md)
 [d](../c/d/d.md#anchor)
 ";
-                var d = @"
+        var d = @"
 [!include[](../../b/token.md)]";
-                TestUtility.WriteToFile("r/r.md", r);
-                TestUtility.WriteToFile("r/a/a.md", a);
-                TestUtility.WriteToFile("r/b/token.md", token);
-                TestUtility.WriteToFile("r/c/d/d.md", d);
-                var marked = TestUtility.MarkupWithoutSourceInfo(a, "r/a/a.md");
-                var expected = @"<p><img src=""%7E/r/img/img.jpg"" alt="""" />
+        TestUtility.WriteToFile("r/r.md", r);
+        TestUtility.WriteToFile("r/a/a.md", a);
+        TestUtility.WriteToFile("r/b/token.md", token);
+        TestUtility.WriteToFile("r/c/d/d.md", d);
+        var marked = TestUtility.MarkupWithoutSourceInfo(a, "r/a/a.md");
+        var expected = @"<p><img src=""%7E/r/img/img.jpg"" alt="""" />
 <a href=""#anchor""></a>
 <a href=""%7E/r/a/a.md"">a</a>
 <a href=""%7E/r/b/invalid.md""></a>
 <a href=""%7E/r/c/d/d.md#anchor"">d</a></p>".Replace("\r\n", "\n") + "\n";
-                var dependency = marked.Dependency;
-                Assert.Equal(expected, marked.Html);
-                Assert.Equal(
-                    new[] { "../b/token.md" },
-                    dependency.OrderBy(x => x).ToArray());
-
-                marked = TestUtility.MarkupWithoutSourceInfo(d, "r/c/d/d.md");
-                dependency = marked.Dependency;
-                Assert.Equal(expected, marked.Html);
-                Assert.Equal(
-                    new[] { "../../b/token.md" },
-                    dependency.OrderBy(x => x).ToArray());
-
-                dependency.Clear();
-                marked = TestUtility.MarkupWithoutSourceInfo(r, "r/r.md");
-                dependency = marked.Dependency;
-                Assert.Equal($"{expected}{expected}", marked.Html);
-                Assert.Equal(
-                    new[] { "a/a.md", "b/token.md", "c/d/d.md" },
-                    dependency.OrderBy(x => x).ToArray());
-        }
-
-        [Fact]
-        [Trait("Related", "DfmMarkdown")]
-        public void TestBlockLevelInclusionWithWorkingFolder()
-        {
-                // -r
-                //  |- root.md
-                //  |- b
-                //  |  |- linkAndRefRoot.md
-                var root = "[!include[linkAndRefRoot](~/r/b/linkAndRefRoot.md)]";
-                var linkAndRefRoot = "Paragraph1";
-                TestUtility.WriteToFile("r/root.md", root);
-                TestUtility.WriteToFile("r/b/linkAndRefRoot.md", linkAndRefRoot);
-                var marked = TestUtility.MarkupWithoutSourceInfo(root, "r/root.md");
-                var expected = "<p>Paragraph1</p>" + "\n";
-                Assert.Equal(expected, marked.Html);
-        }
-
-        #region Fallback folders testing
-
-        [Fact(Skip = "won't support")]
-        [Trait("Related", "DfmMarkdown")]
-        public void TestFallback_Inclusion_random_name()
-        {
-                // -root_folder (this is also docset folder)
-                //  |- root.md
-                //  |- a_folder
-                //  |  |- a.md
-                //  |- token_folder
-                //  |  |- token1.md
-                // -fallback_folder
-                //  |- token_folder
-                //     |- token2.md
-
-                // 1. Prepare data
-                var uniqueFolderName = Path.GetRandomFileName();
-                var root = $@"1markdown root.md main content start.
+        var dependency = marked.Dependency;
+        Assert.Equal(expected, marked.Html);
+        Assert.Equal(
+            new[] { "../b/token.md" },
+            dependency.OrderBy(x => x).ToArray());
+
+        marked = TestUtility.MarkupWithoutSourceInfo(d, "r/c/d/d.md");
+        dependency = marked.Dependency;
+        Assert.Equal(expected, marked.Html);
+        Assert.Equal(
+            new[] { "../../b/token.md" },
+            dependency.OrderBy(x => x).ToArray());
+
+        dependency.Clear();
+        marked = TestUtility.MarkupWithoutSourceInfo(r, "r/r.md");
+        dependency = marked.Dependency;
+        Assert.Equal($"{expected}{expected}", marked.Html);
+        Assert.Equal(
+            new[] { "a/a.md", "b/token.md", "c/d/d.md" },
+            dependency.OrderBy(x => x).ToArray());
+    }
+
+    [Fact]
+    [Trait("Related", "DfmMarkdown")]
+    public void TestBlockLevelInclusionWithWorkingFolder()
+    {
+        // -r
+        //  |- root.md
+        //  |- b
+        //  |  |- linkAndRefRoot.md
+        var root = "[!include[linkAndRefRoot](~/r/b/linkAndRefRoot.md)]";
+        var linkAndRefRoot = "Paragraph1";
+        TestUtility.WriteToFile("r/root.md", root);
+        TestUtility.WriteToFile("r/b/linkAndRefRoot.md", linkAndRefRoot);
+        var marked = TestUtility.MarkupWithoutSourceInfo(root, "r/root.md");
+        var expected = "<p>Paragraph1</p>" + "\n";
+        Assert.Equal(expected, marked.Html);
+    }
+
+    #region Fallback folders testing
+
+    [Fact(Skip = "won't support")]
+    [Trait("Related", "DfmMarkdown")]
+    public void TestFallback_Inclusion_random_name()
+    {
+        // -root_folder (this is also docset folder)
+        //  |- root.md
+        //  |- a_folder
+        //  |  |- a.md
+        //  |- token_folder
+        //  |  |- token1.md
+        // -fallback_folder
+        //  |- token_folder
+        //     |- token2.md
+
+        // 1. Prepare data
+        var uniqueFolderName = Path.GetRandomFileName();
+        var root = $@"1markdown root.md main content start.
 
 [!include[a](a_folder_{uniqueFolderName}/a_{uniqueFolderName}.md ""This is a.md"")]
 
 markdown root.md main content end.";
 
-                var a = $@"1markdown a.md main content start.
+        var a = $@"1markdown a.md main content start.
 
 [!include[token1](../token_folder_{uniqueFolderName}/token1_{uniqueFolderName}.md ""This is token1.md"")]
 [!include[token1](../token_folder_{uniqueFolderName}/token2_{uniqueFolderName}.md ""This is token2.md"")]
 
 markdown a.md main content end.";
 
-                var token1 = $@"1markdown token1.md content start.
+        var token1 = $@"1markdown token1.md content start.
 
 [!include[token2](token2_{uniqueFolderName}.md ""This is token2.md"")]
 
 markdown token1.md content end.";
 
-                var token2 = "**1markdown token2.md main content**";
+        var token2 = "**1markdown token2.md main content**";
 
-                TestUtility.WriteToFile($"{uniqueFolderName}/root_folder_{uniqueFolderName}/root_{uniqueFolderName}.md", root);
-                TestUtility.WriteToFile($"{uniqueFolderName}/root_folder_{uniqueFolderName}/a_folder_{uniqueFolderName}/a_{uniqueFolderName}.md", a);
-                TestUtility.WriteToFile($"{uniqueFolderName}/root_folder_{uniqueFolderName}/token_folder_{uniqueFolderName}/token1_{uniqueFolderName}.md", token1);
-                TestUtility.WriteToFile($"{uniqueFolderName}/fallback_folder_{uniqueFolderName}/token_folder_{uniqueFolderName}/token2_{uniqueFolderName}.md", token2);
+        TestUtility.WriteToFile($"{uniqueFolderName}/root_folder_{uniqueFolderName}/root_{uniqueFolderName}.md", root);
+        TestUtility.WriteToFile($"{uniqueFolderName}/root_folder_{uniqueFolderName}/a_folder_{uniqueFolderName}/a_{uniqueFolderName}.md", a);
+        TestUtility.WriteToFile($"{uniqueFolderName}/root_folder_{uniqueFolderName}/token_folder_{uniqueFolderName}/token1_{uniqueFolderName}.md", token1);
+        TestUtility.WriteToFile($"{uniqueFolderName}/fallback_folder_{uniqueFolderName}/token_folder_{uniqueFolderName}/token2_{uniqueFolderName}.md", token2);
 
-                var fallbackFolders = new List<string> { { Path.Combine(Directory.GetCurrentDirectory(), $"{uniqueFolderName}/fallback_folder_{uniqueFolderName}") } };
-                var parameter = new MarkdownServiceParameters
-                {
-                        BasePath = "."
-                };
-                var service = new MarkdigMarkdownService(parameter);
-                //var marked = service.Markup(Path.Combine(Directory.GetCurrentDirectory(), $"{uniqueFolderName}/root_folder_{uniqueFolderName}"), root, fallbackFolders, $"root_{uniqueFolderName}.md");
-                var marked = service.Markup("place", "holder");
-                var dependency = marked.Dependency;
-
-                Assert.Equal(@"<p>1markdown root.md main content start.</p>
+        var fallbackFolders = new List<string> { { Path.Combine(Directory.GetCurrentDirectory(), $"{uniqueFolderName}/fallback_folder_{uniqueFolderName}") } };
+        var parameter = new MarkdownServiceParameters
+        {
+            BasePath = "."
+        };
+        var service = new MarkdigMarkdownService(parameter);
+        //var marked = service.Markup(Path.Combine(Directory.GetCurrentDirectory(), $"{uniqueFolderName}/root_folder_{uniqueFolderName}"), root, fallbackFolders, $"root_{uniqueFolderName}.md");
+        var marked = service.Markup("place", "holder");
+        var dependency = marked.Dependency;
+
+        Assert.Equal(@"<p>1markdown root.md main content start.</p>
 <p>1markdown a.md main content start.</p>
 <p>1markdown token1.md content start.</p>
 <p><strong>1markdown token2.md main content</strong></p>
@@ -475,29 +475,29 @@ public void TestFallback_Inclusion_random_name()
 <p>markdown a.md main content end.</p>
 <p>markdown root.md main content end.</p>
 ".Replace("\r\n", "\n"), marked.Html);
-                Assert.Equal(
-                    new[] { $"../fallback_folder_{uniqueFolderName}/token_folder_{uniqueFolderName}/token2_{uniqueFolderName}.md", $"a_folder_{uniqueFolderName}/a_{uniqueFolderName}.md", $"token_folder_{uniqueFolderName}/token1_{uniqueFolderName}.md", $"token_folder_{uniqueFolderName}/token2_{uniqueFolderName}.md" },
-                    dependency.OrderBy(x => x).ToArray());
-        }
-
-        [Fact(Skip = "won't support")]
-        [Trait("Related", "DfmMarkdown")]
-        public void TestFallback_InclusionWithCodeFences()
-        {
-                // -root_folder (this is also docset folder)
-                //  |- root.md
-                //  |- a_folder
-                //     |- a.md
-                //  |- code_folder
-                //     |- sample1.cs
-                // -fallback_folder
-                //  |- a_folder
-                //     |- code_in_a.cs
-                //  |- code_folder
-                //     |- sample2.cs
-
-                // 1. Prepare data
-                var root = @"markdown root.md main content start.
+        Assert.Equal(
+            new[] { $"../fallback_folder_{uniqueFolderName}/token_folder_{uniqueFolderName}/token2_{uniqueFolderName}.md", $"a_folder_{uniqueFolderName}/a_{uniqueFolderName}.md", $"token_folder_{uniqueFolderName}/token1_{uniqueFolderName}.md", $"token_folder_{uniqueFolderName}/token2_{uniqueFolderName}.md" },
+            dependency.OrderBy(x => x).ToArray());
+    }
+
+    [Fact(Skip = "won't support")]
+    [Trait("Related", "DfmMarkdown")]
+    public void TestFallback_InclusionWithCodeFences()
+    {
+        // -root_folder (this is also docset folder)
+        //  |- root.md
+        //  |- a_folder
+        //     |- a.md
+        //  |- code_folder
+        //     |- sample1.cs
+        // -fallback_folder
+        //  |- a_folder
+        //     |- code_in_a.cs
+        //  |- code_folder
+        //     |- sample2.cs
+
+        // 1. Prepare data
+        var root = @"markdown root.md main content start.
 
 markdown a content in root.md content start
 
@@ -519,7 +519,7 @@ sample 2 code in root.md content end
 
 markdown root.md main content end.";
 
-                var a = @"markdown a.md main content start.
+        var a = @"markdown a.md main content start.
 
 code_in_a code in a.md content start
 
@@ -529,31 +529,31 @@ code_in_a in a.md content end
 
 markdown a.md a.md content end.";
 
-                var code_in_a = "namespace code_in_a{}";
+        var code_in_a = "namespace code_in_a{}";
 
-                var sample1 = "namespace sample1{}";
+        var sample1 = "namespace sample1{}";
 
-                var sample2 = "namespace sample2{}";
+        var sample2 = "namespace sample2{}";
 
-                var uniqueFolderName = Path.GetRandomFileName();
-                TestUtility.WriteToFile($"{uniqueFolderName}/root_folder/root.md", root);
-                TestUtility.WriteToFile($"{uniqueFolderName}/root_folder/a_folder/a.md", a);
-                TestUtility.WriteToFile($"{uniqueFolderName}/root_folder/code_folder/sample1.cs", sample1);
-                TestUtility.WriteToFile($"{uniqueFolderName}/fallback_folder/a_folder/code_in_a.cs", code_in_a);
-                TestUtility.WriteToFile($"{uniqueFolderName}/fallback_folder/code_folder/sample2.cs", sample2);
+        var uniqueFolderName = Path.GetRandomFileName();
+        TestUtility.WriteToFile($"{uniqueFolderName}/root_folder/root.md", root);
+        TestUtility.WriteToFile($"{uniqueFolderName}/root_folder/a_folder/a.md", a);
+        TestUtility.WriteToFile($"{uniqueFolderName}/root_folder/code_folder/sample1.cs", sample1);
+        TestUtility.WriteToFile($"{uniqueFolderName}/fallback_folder/a_folder/code_in_a.cs", code_in_a);
+        TestUtility.WriteToFile($"{uniqueFolderName}/fallback_folder/code_folder/sample2.cs", sample2);
 
-                var fallbackFolders = new List<string> { { Path.Combine(Directory.GetCurrentDirectory(), $"{uniqueFolderName}/fallback_folder") } };
+        var fallbackFolders = new List<string> { { Path.Combine(Directory.GetCurrentDirectory(), $"{uniqueFolderName}/fallback_folder") } };
 
-                // Verify root.md markup result
-                var parameter = new MarkdownServiceParameters
-                {
-                        BasePath = "."
-                };
-                var service = new MarkdigMarkdownService(parameter);
-                //var rootMarked = service.Markup(Path.Combine(Directory.GetCurrentDirectory(), $"{uniqueFolderName}/root_folder"), root, fallbackFolders, "root.md");
-                var rootMarked = service.Markup("place", "holder");
-                var rootDependency = rootMarked.Dependency;
-                Assert.Equal(@"<p>markdown root.md main content start.</p>
+        // Verify root.md markup result
+        var parameter = new MarkdownServiceParameters
+        {
+            BasePath = "."
+        };
+        var service = new MarkdigMarkdownService(parameter);
+        //var rootMarked = service.Markup(Path.Combine(Directory.GetCurrentDirectory(), $"{uniqueFolderName}/root_folder"), root, fallbackFolders, "root.md");
+        var rootMarked = service.Markup("place", "holder");
+        var rootDependency = rootMarked.Dependency;
+        Assert.Equal(@"<p>markdown root.md main content start.</p>
 <p>markdown a content in root.md content start</p>
 <p>markdown a.md main content start.</p>
 <p>code_in_a code in a.md content start</p>
@@ -569,93 +569,93 @@ code_in_a in a.md content end
 </code></pre><p>sample 2 code in root.md content end</p>
 <p>markdown root.md main content end.</p>
 ".Replace("\r\n", "\n"), rootMarked.Html);
-                Assert.Equal(
-                    new[] { "../fallback_folder/a_folder/code_in_a.cs", "../fallback_folder/code_folder/sample2.cs", "a_folder/a.md", "a_folder/code_in_a.cs", "code_folder/sample1.cs", "code_folder/sample2.cs" },
-                    rootDependency.OrderBy(x => x).ToArray());
-
-                // Verify a.md markup result
-                //var aMarked = service.Markup(Path.Combine(Directory.GetCurrentDirectory(), $"{uniqueFolderName}/root_folder"), a, fallbackFolders, "a_folder/a.md");
-                var aMarked = service.Markup("place", "holder");
-                var aDependency = aMarked.Dependency;
-                Assert.Equal(@"<p>markdown a.md main content start.</p>
+        Assert.Equal(
+            new[] { "../fallback_folder/a_folder/code_in_a.cs", "../fallback_folder/code_folder/sample2.cs", "a_folder/a.md", "a_folder/code_in_a.cs", "code_folder/sample1.cs", "code_folder/sample2.cs" },
+            rootDependency.OrderBy(x => x).ToArray());
+
+        // Verify a.md markup result
+        //var aMarked = service.Markup(Path.Combine(Directory.GetCurrentDirectory(), $"{uniqueFolderName}/root_folder"), a, fallbackFolders, "a_folder/a.md");
+        var aMarked = service.Markup("place", "holder");
+        var aDependency = aMarked.Dependency;
+        Assert.Equal(@"<p>markdown a.md main content start.</p>
 <p>code_in_a code in a.md content start</p>
 <pre><code class=""lang-cs"" name=""this is code_in_a code"">namespace code_in_a{}
 </code></pre><p>code_in_a in a.md content end</p>
 <p>markdown a.md a.md content end.</p>
 ".Replace("\r\n", "\n"), aMarked.Html);
-                Assert.Equal(
-                    new[] { "../../fallback_folder/a_folder/code_in_a.cs", "code_in_a.cs" },
-                    aDependency.OrderBy(x => x).ToArray());
-        }
-
-        #endregion
-
-        [Fact]
-        [Trait("Related", "DfmMarkdown")]
-        public void TestInclusion_InlineLevel()
-        {
-                // 1. Prepare data
-                var root = @"
+        Assert.Equal(
+            new[] { "../../fallback_folder/a_folder/code_in_a.cs", "code_in_a.cs" },
+            aDependency.OrderBy(x => x).ToArray());
+    }
+
+    #endregion
+
+    [Fact]
+    [Trait("Related", "DfmMarkdown")]
+    public void TestInclusion_InlineLevel()
+    {
+        // 1. Prepare data
+        var root = @"
 Inline [!include[ref1](ref1.md ""This is root"")]
 Inline [!include[ref3](ref3.md ""This is root"")]
 ";
 
-                var ref1 = @"[!include[ref2](ref2.md ""This is root"")]";
-                var ref2 = @"## Inline inclusion do not parse header [!include[root](root.md ""This is root"")]";
-                var ref3 = "**Hello**  ";
-                File.WriteAllText("root.md", root);
-                File.WriteAllText("ref1.md", ref1);
-                File.WriteAllText("ref2.md", ref2);
-                File.WriteAllText("ref3.md", ref3);
+        var ref1 = @"[!include[ref2](ref2.md ""This is root"")]";
+        var ref2 = @"## Inline inclusion do not parse header [!include[root](root.md ""This is root"")]";
+        var ref3 = "**Hello**  ";
+        File.WriteAllText("root.md", root);
+        File.WriteAllText("ref1.md", ref1);
+        File.WriteAllText("ref2.md", ref2);
+        File.WriteAllText("ref3.md", ref3);
 
-                var marked = TestUtility.MarkupWithoutSourceInfo(root, "root.md");
-                var dependency = marked.Dependency;
-                var expected = "<p>Inline ## Inline inclusion do not parse header [!include[root](root.md)]\nInline <strong>Hello</strong></p>\n";
+        var marked = TestUtility.MarkupWithoutSourceInfo(root, "root.md");
+        var dependency = marked.Dependency;
+        var expected = "<p>Inline ## Inline inclusion do not parse header [!include[root](root.md)]\nInline <strong>Hello</strong></p>\n";
 
-                Assert.Equal(expected, marked.Html);
-                Assert.Equal(
-                    new[] { "ref1.md", "ref2.md", "ref3.md", "root.md" },
-                    dependency.OrderBy(x => x).ToArray());
-        }
+        Assert.Equal(expected, marked.Html);
+        Assert.Equal(
+            new[] { "ref1.md", "ref2.md", "ref3.md", "root.md" },
+            dependency.OrderBy(x => x).ToArray());
+    }
 
-        [Fact]
-        [Trait("Related", "DfmMarkdown")]
-        public void TestBlockInclude_ShouldExcludeBracketInRegex()
-        {
-                // 1. Prepare data
-                var root = @"[!INCLUDE [azure-probe-intro-include](inc1.md)].
+    [Fact]
+    [Trait("Related", "DfmMarkdown")]
+    public void TestBlockInclude_ShouldExcludeBracketInRegex()
+    {
+        // 1. Prepare data
+        var root = @"[!INCLUDE [azure-probe-intro-include](inc1.md)].
 
 [!INCLUDE [azure-arm-classic-important-include](inc2.md)] [Resource Manager model](inc1.md).
 
 
 [!INCLUDE [azure-ps-prerequisites-include.md](inc3.md)]";
 
-                var expected = @"<p>inc1.</p>
+        var expected = @"<p>inc1.</p>
 <p>inc2 <a href=""inc1.md"">Resource Manager model</a>.</p>
 <p>inc3</p>
 ";
 
-                var inc1 = "inc1";
-                var inc2 = "inc2";
-                var inc3 = "inc3";
-                File.WriteAllText("root.md", root);
-                File.WriteAllText("inc1.md", inc1);
-                File.WriteAllText("inc2.md", inc2);
-                File.WriteAllText("inc3.md", inc3);
-
-                var marked = TestUtility.MarkupWithoutSourceInfo(root, "root.md");
-                var dependency = marked.Dependency;
-                Assert.Equal(expected.Replace("\r\n", "\n"), marked.Html);
-                Assert.Equal(
-                  new[] { "inc1.md", "inc2.md", "inc3.md" },
-                  dependency.OrderBy(x => x).ToArray());
-        }
-
-        [Fact]
-        [Trait("Related", "Inclusion")]
-        public void TestBlockInclude_ImageRelativePath()
-        {
-                var root = @"
+        var inc1 = "inc1";
+        var inc2 = "inc2";
+        var inc3 = "inc3";
+        File.WriteAllText("root.md", root);
+        File.WriteAllText("inc1.md", inc1);
+        File.WriteAllText("inc2.md", inc2);
+        File.WriteAllText("inc3.md", inc3);
+
+        var marked = TestUtility.MarkupWithoutSourceInfo(root, "root.md");
+        var dependency = marked.Dependency;
+        Assert.Equal(expected.Replace("\r\n", "\n"), marked.Html);
+        Assert.Equal(
+          new[] { "inc1.md", "inc2.md", "inc3.md" },
+          dependency.OrderBy(x => x).ToArray());
+    }
+
+    [Fact]
+    [Trait("Related", "Inclusion")]
+    public void TestBlockInclude_ImageRelativePath()
+    {
+        var root = @"
 # Hello World
 
 Test Include File
@@ -664,34 +664,34 @@ Test Include File
 
 ";
 
-                var refa = @"
+        var refa = @"
 # Hello Include File A
 
 ![img](./media/refb.png)
 ";
 
-                var rootPath = "r/parent_folder/child_folder/root.md";
-                TestUtility.WriteToFile(rootPath, root);
-                TestUtility.WriteToFile("r/include/a.md", refa);
+        var rootPath = "r/parent_folder/child_folder/root.md";
+        TestUtility.WriteToFile(rootPath, root);
+        TestUtility.WriteToFile("r/include/a.md", refa);
 
-                var result = TestUtility.MarkupWithoutSourceInfo(root, rootPath);
-                var expected = @"<h1 id=""hello-world"">Hello World</h1>
+        var result = TestUtility.MarkupWithoutSourceInfo(root, rootPath);
+        var expected = @"<h1 id=""hello-world"">Hello World</h1>
 <p>Test Include File</p>
 <h1 id=""hello-include-file-a"">Hello Include File A</h1>
 <p><img src=""%7E/r/include/media/refb.png"" alt=""img"" /></p>
 ";
-                Assert.Equal(expected.Replace("\r\n", "\n"), result.Html);
+        Assert.Equal(expected.Replace("\r\n", "\n"), result.Html);
 
-                var dependency = result.Dependency;
-                var expectedDependency = new List<string> { "../../include/a.md" };
-                Assert.Equal(expectedDependency.ToImmutableList(), dependency);
-        }
+        var dependency = result.Dependency;
+        var expectedDependency = new List<string> { "../../include/a.md" };
+        Assert.Equal(expectedDependency.ToImmutableList(), dependency);
+    }
 
-        [Fact]
-        [Trait("Related", "Inclusion")]
-        public void TestBlockInclude_WithYamlHeader()
-        {
-                var root = @"
+    [Fact]
+    [Trait("Related", "Inclusion")]
+    public void TestBlockInclude_WithYamlHeader()
+    {
+        var root = @"
 # Hello World
 
 Test Include File
@@ -700,99 +700,99 @@ Test Include File
 
 ";
 
-                var refa = @"---
+        var refa = @"---
 a: b
 ---
 body";
 
-                var rootPath = "r/parent_folder/child_folder/root.md";
-                TestUtility.WriteToFile(rootPath, root);
-                TestUtility.WriteToFile("r/include/a.md", refa);
+        var rootPath = "r/parent_folder/child_folder/root.md";
+        TestUtility.WriteToFile(rootPath, root);
+        TestUtility.WriteToFile("r/include/a.md", refa);
 
-                var result = TestUtility.MarkupWithoutSourceInfo(root, rootPath);
-                var expected = @"<h1 id=""hello-world"">Hello World</h1>
+        var result = TestUtility.MarkupWithoutSourceInfo(root, rootPath);
+        var expected = @"<h1 id=""hello-world"">Hello World</h1>
 <p>Test Include File</p>
 <p>body</p>
 ";
-                Assert.Equal(expected.Replace("\r\n", "\n"), result.Html);
+        Assert.Equal(expected.Replace("\r\n", "\n"), result.Html);
 
-                var dependency = result.Dependency;
-                var expectedDependency = new List<string> { "../../include/a.md" };
-                Assert.Equal(expectedDependency.ToImmutableList(), dependency);
-        }
+        var dependency = result.Dependency;
+        var expectedDependency = new List<string> { "../../include/a.md" };
+        Assert.Equal(expectedDependency.ToImmutableList(), dependency);
+    }
 
-        [Fact(Skip = "failed frequently")]
-        [Trait("Related", "Inclusion")]
-        public void TestInclusionContext_CurrentFile_RootFile()
-        {
-                var root = "[!include[](embed)]";
+    [Fact(Skip = "failed frequently")]
+    [Trait("Related", "Inclusion")]
+    public void TestInclusionContext_CurrentFile_RootFile()
+    {
+        var root = "[!include[](embed)]";
 
-                var context = new MarkdownContext(
-                    readFile: (path, _) =>
-                    {
-                            Assert.Equal("embed", path);
+        var context = new MarkdownContext(
+            readFile: (path, _) =>
+            {
+                Assert.Equal("embed", path);
 
-                            Assert.Equal("root", InclusionContext.RootFile);
-                            Assert.Equal("root", InclusionContext.File);
+                Assert.Equal("root", InclusionContext.RootFile);
+                Assert.Equal("root", InclusionContext.File);
 
-                            return ("embed [content](c.md)", "embed");
-                    });
+                return ("embed [content](c.md)", "embed");
+            });
 
-                var pipeline = new MarkdownPipelineBuilder().UseDocfxExtensions(context).Build();
+        var pipeline = new MarkdownPipelineBuilder().UseDocfxExtensions(context).Build();
 
-                Assert.Null(InclusionContext.RootFile);
-                Assert.Null(InclusionContext.File);
+        Assert.Null(InclusionContext.RootFile);
+        Assert.Null(InclusionContext.File);
 
-                using (InclusionContext.PushFile("root"))
-                {
-                        Assert.Equal("root", InclusionContext.RootFile);
-                        Assert.Equal("root", InclusionContext.File);
+        using (InclusionContext.PushFile("root"))
+        {
+            Assert.Equal("root", InclusionContext.RootFile);
+            Assert.Equal("root", InclusionContext.File);
 
-                        var result = Markdown.ToHtml(root, pipeline);
+            var result = Markdown.ToHtml(root, pipeline);
 
-                        Assert.Equal("<p>embed <a href=\"c.md\">content</a></p>", result.Trim());
-                        Assert.Equal("root", InclusionContext.RootFile);
-                        Assert.Equal("root", InclusionContext.File);
-                }
-                Assert.Null(InclusionContext.RootFile);
-                Assert.Null(InclusionContext.File);
+            Assert.Equal("<p>embed <a href=\"c.md\">content</a></p>", result.Trim());
+            Assert.Equal("root", InclusionContext.RootFile);
+            Assert.Equal("root", InclusionContext.File);
         }
-
-        [Fact]
-        [Trait("Related", "DfmMarkdown")]
-        public void TestComplexImageBlockSrcResolveInToken()
-        {
-                // -r
-                //  |- r.md
-                //  |- b
-                //  |  |- token.md
-                //  |  |- img.jpg
-                var r = @"
+        Assert.Null(InclusionContext.RootFile);
+        Assert.Null(InclusionContext.File);
+    }
+
+    [Fact]
+    [Trait("Related", "DfmMarkdown")]
+    public void TestComplexImageBlockSrcResolveInToken()
+    {
+        // -r
+        //  |- r.md
+        //  |- b
+        //  |  |- token.md
+        //  |  |- img.jpg
+        var r = @"
 [!include[](b/token.md)]
 ";
-                var token = @"
+        var token = @"
 :::image source=""example.jpg"" type=""complex"" alt-text=""example"":::
 Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
 :::image-end:::
 ";
-                TestUtility.WriteToFile("r/r.md", r);
-                TestUtility.WriteToFile("r/b/token.md", token);
-                var marked = TestUtility.MarkupWithoutSourceInfo(r, "r/r.md");
+        TestUtility.WriteToFile("r/r.md", r);
+        TestUtility.WriteToFile("r/b/token.md", token);
+        var marked = TestUtility.MarkupWithoutSourceInfo(r, "r/r.md");
 
-                var expected = @"<p class=""mx-imgBorder"">
+        var expected = @"<p class=""mx-imgBorder"">
 <img src=""~/r/b/example.jpg"" alt=""example"" aria-describedby=""1-0"">
 <div id=""1-0"" class=""visually-hidden""><p>
 Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.</p></div>
 </p>
 ";
-                Assert.Equal(expected.Replace("\r\n", "\n"), marked.Html);
-        }
+        Assert.Equal(expected.Replace("\r\n", "\n"), marked.Html);
+    }
 
-        [Fact]
-        public void ImageTestBlockGeneralWithInclude()
-        {
-                var source = "[!include[](includes/source.md)]";
-                var includeContent = @":::image type=""content"" source=""../media/example.jpg"" alt-text=""example"" lightbox=""../media/example.jpg"":::
+    [Fact]
+    public void ImageTestBlockGeneralWithInclude()
+    {
+        var source = "[!include[](includes/source.md)]";
+        var includeContent = @":::image type=""content"" source=""../media/example.jpg"" alt-text=""example"" lightbox=""../media/example.jpg"":::
 
 :::image type=""content"" source=""~/media/example.jpg"" alt-text=""example"" lightbox=""~/media/example.jpg"":::
 
@@ -800,11 +800,11 @@ public void ImageTestBlockGeneralWithInclude()
 
 :::image type=""content"" source=""../media/example.jpg"" alt-text=""example"" lightbox=""~/media/example.jpg"":::";
 
-                TestUtility.WriteToFile("a.md", source);
-                TestUtility.WriteToFile("includes/source.md", includeContent);
-                var marked = TestUtility.MarkupWithoutSourceInfo(source, "a.md");
+        TestUtility.WriteToFile("a.md", source);
+        TestUtility.WriteToFile("includes/source.md", includeContent);
+        var marked = TestUtility.MarkupWithoutSourceInfo(source, "a.md");
 
-                var expected = @"<p><span class=""mx-imgBorder"">
+        var expected = @"<p><span class=""mx-imgBorder"">
 <a href=""~/media/example.jpg#lightbox"" data-linktype=""relative-path"">
 <img src=""~/media/example.jpg"" alt=""example"">
 </a>
@@ -830,30 +830,30 @@ public void ImageTestBlockGeneralWithInclude()
 </p>
 ";
 
-                Assert.Equal(expected.Replace("\r\n", "\n").Replace("\n", ""), marked.Html.Replace("\r\n", "\n").Replace("\n", ""));
-        }
+        Assert.Equal(expected.Replace("\r\n", "\n").Replace("\n", ""), marked.Html.Replace("\r\n", "\n").Replace("\n", ""));
+    }
 
-        [Fact]
-        [Trait("Related", "DfmMarkdown")]
-        public void TestImageWithIconTypeBlockSrcResolveInToken()
-        {
-                // -r
-                //  |- r.md
-                //  |- b
-                //  |  |- token.md
-                //  |  |- img.jpg
-                var r = @"
+    [Fact]
+    [Trait("Related", "DfmMarkdown")]
+    public void TestImageWithIconTypeBlockSrcResolveInToken()
+    {
+        // -r
+        //  |- r.md
+        //  |- b
+        //  |  |- token.md
+        //  |  |- img.jpg
+        var r = @"
 [!include[](b/token.md)]
 ";
-                var token = @"
+        var token = @"
 :::image source=""example.svg"" type=""icon"" alt-text=""example"":::
 ";
-                TestUtility.WriteToFile("r/r.md", r);
-                TestUtility.WriteToFile("r/b/token.md", token);
-                var marked = TestUtility.MarkupWithoutSourceInfo(r, "r/r.md");
-                var expected = @"<p><img src=""~/r/b/example.svg"" role=""presentation"">
+        TestUtility.WriteToFile("r/r.md", r);
+        TestUtility.WriteToFile("r/b/token.md", token);
+        var marked = TestUtility.MarkupWithoutSourceInfo(r, "r/r.md");
+        var expected = @"<p><img src=""~/r/b/example.svg"" role=""presentation"">
 </p>
 ";
-                Assert.Equal(expected.Replace("\r\n", "\n"), marked.Html);
-        }
+        Assert.Equal(expected.Replace("\r\n", "\n"), marked.Html);
+    }
 }
diff --git a/test/Docfx.Tests.Common/Docfx.Tests.Common.csproj b/test/Docfx.Tests.Common/Docfx.Tests.Common.csproj
index e4874e726bf..5ba17a6a447 100644
--- a/test/Docfx.Tests.Common/Docfx.Tests.Common.csproj
+++ b/test/Docfx.Tests.Common/Docfx.Tests.Common.csproj
@@ -1,5 +1,9 @@
-<Project Sdk="Microsoft.NET.Sdk">
+<Project Sdk="Microsoft.NET.Sdk">
+  <PropertyGroup>
+    <IsTestProject>false</IsTestProject>
+  </PropertyGroup>
+
   <ItemGroup>
     <ProjectReference Include="..\..\src\Docfx.Common\Docfx.Common.csproj" />
   </ItemGroup>
- </Project>
+</Project>
diff --git a/test/Docfx.Tests.Common/TestBase.cs b/test/Docfx.Tests.Common/TestBase.cs
index de225743eca..77abe916218 100644
--- a/test/Docfx.Tests.Common/TestBase.cs
+++ b/test/Docfx.Tests.Common/TestBase.cs
@@ -43,7 +43,7 @@ protected static string CreateFile(string fileName, string[] lines, string baseF
         ArgumentNullException.ThrowIfNull(lines);
 
         var dir = Path.GetDirectoryName(fileName);
-        dir = CreateDirectory(dir, baseFolder);
+        CreateDirectory(dir, baseFolder);
         var file = Path.Combine(baseFolder, fileName);
         File.WriteAllLines(file, lines);
         return file;
@@ -56,7 +56,7 @@ protected static string CreateFile(string fileName, string content, string baseF
         ArgumentNullException.ThrowIfNull(baseFolder);
 
         var dir = Path.GetDirectoryName(fileName);
-        dir = CreateDirectory(dir, baseFolder);
+        CreateDirectory(dir, baseFolder);
         var file = Path.Combine(baseFolder, fileName);
         File.WriteAllText(file, content);
         return file.Replace('\\', '/');
diff --git a/test/Docfx.Tests.Common/TestListenerScope.cs b/test/Docfx.Tests.Common/TestListenerScope.cs
index 9c9764168e8..9607a8c084c 100644
--- a/test/Docfx.Tests.Common/TestListenerScope.cs
+++ b/test/Docfx.Tests.Common/TestListenerScope.cs
@@ -24,7 +24,7 @@ public void Flush() { }
     public void WriteLine(ILogItem item)
     {
         if (item.LogLevel >= _logLevel)
-            s_items.Value.Add(item);
+            s_items.Value?.Add(item);
     }
 
     public IEnumerable<ILogItem> GetItemsByLogLevel(LogLevel logLevel)
diff --git a/test/docfx.Snapshot.Tests/PercyTest.cs b/test/docfx.Snapshot.Tests/PercyTest.cs
index 99d51eb4262..7d7449b9a36 100644
--- a/test/docfx.Snapshot.Tests/PercyTest.cs
+++ b/test/docfx.Snapshot.Tests/PercyTest.cs
@@ -48,7 +48,8 @@ public async Task SeedHtml()
         var samplePath = $"{s_samplesDir}/seed";
         Clean(samplePath);
 
-        Process.Start("dotnet", $"build \"{s_samplesDir}/seed/dotnet/assembly/BuildFromAssembly.csproj\"").WaitForExit();
+        using var process = Process.Start("dotnet", $"build \"{s_samplesDir}/seed/dotnet/assembly/BuildFromAssembly.csproj\"");
+        await process.WaitForExitAsync();
 
         var docfxPath = Path.GetFullPath(OperatingSystem.IsWindows() ? "docfx.exe" : "docfx");
         Assert.Equal(0, Exec(docfxPath, $"metadata {samplePath}/docfx.json"));
@@ -62,7 +63,7 @@ public async Task SeedHtml()
                     }, TaskContinuationOptions.OnlyOnFaulted);
 
         // Wait until web server started.
-        bool isStarted = SpinWait.SpinUntil(() => { Thread.Sleep(100); return IsActiveLocalTcpPort(port); }, TimeSpan.FromSeconds(10));
+        SpinWait.SpinUntil(() => { Thread.Sleep(100); return IsActiveLocalTcpPort(port); }, TimeSpan.FromSeconds(10));
 
         using var playwright = await Playwright.CreateAsync();
         var browser = await playwright.Chromium.LaunchAsync();
@@ -118,7 +119,7 @@ private static int Exec(string filename, string args, string workingDirectory =
         psi.EnvironmentVariables.Add("DOCFX_SOURCE_BRANCH_NAME", "main");
         if (workingDirectory != null)
             psi.WorkingDirectory = Path.GetFullPath(workingDirectory);
-        var process = Process.Start(psi);
+        using var process = Process.Start(psi);
         process.WaitForExit();
         return process.ExitCode;
     }
diff --git a/test/docfx.Snapshot.Tests/SamplesTest.SeedMarkdown/CatLibrary.CatException-1.verified.md b/test/docfx.Snapshot.Tests/SamplesTest.SeedMarkdown/CatLibrary.CatException-1.verified.md
index 4831a85a189..6c0a8a74e25 100644
--- a/test/docfx.Snapshot.Tests/SamplesTest.SeedMarkdown/CatLibrary.CatException-1.verified.md
+++ b/test/docfx.Snapshot.Tests/SamplesTest.SeedMarkdown/CatLibrary.CatException-1.verified.md
@@ -24,7 +24,6 @@ public class CatException<T> : Exception, ISerializable
 #### Inherited Members
 
 [Exception.GetBaseException\(\)](https://learn.microsoft.com/dotnet/api/system.exception.getbaseexception), 
-[Exception.GetObjectData\(SerializationInfo, StreamingContext\)](https://learn.microsoft.com/dotnet/api/system.exception.getobjectdata), 
 [Exception.GetType\(\)](https://learn.microsoft.com/dotnet/api/system.exception.gettype), 
 [Exception.ToString\(\)](https://learn.microsoft.com/dotnet/api/system.exception.tostring), 
 [Exception.Data](https://learn.microsoft.com/dotnet/api/system.exception.data), 
diff --git a/test/docfx.Snapshot.Tests/SamplesTest.cs b/test/docfx.Snapshot.Tests/SamplesTest.cs
index abe94c7cad0..662345724fb 100644
--- a/test/docfx.Snapshot.Tests/SamplesTest.cs
+++ b/test/docfx.Snapshot.Tests/SamplesTest.cs
@@ -37,6 +37,8 @@ private class SamplesFactAttribute : FactAttribute
     {
         public SamplesFactAttribute()
         {
+            // When target framework is changed.
+            // It need to modify TargetFrameworks property of `docfx.Snapshot.Tests.csproj`
 #if !NET8_0
             Skip = "Skip by target framework";
 #endif
@@ -49,7 +51,8 @@ public async Task Seed()
         var samplePath = $"{s_samplesDir}/seed";
         Clean(samplePath);
 
-        Process.Start("dotnet", $"build \"{s_samplesDir}/seed/dotnet/assembly/BuildFromAssembly.csproj\"").WaitForExit();
+        using var process = Process.Start("dotnet", $"build \"{s_samplesDir}/seed/dotnet/assembly/BuildFromAssembly.csproj\"");
+        await process.WaitForExitAsync();
 
         if (Debugger.IsAttached)
         {
@@ -148,10 +151,12 @@ public Task Extensions()
         Clean(samplePath);
 
 #if DEBUG
-        Process.Start("dotnet", $"build \"{samplePath}/build\"").WaitForExit();
+        using var process = Process.Start("dotnet", $"build \"{samplePath}/build\"");
+        process.WaitForExit();
         Assert.Equal(0, Exec("dotnet", "run --no-build --project build", workingDirectory: samplePath));
 #else
-        Process.Start("dotnet", $"build -c Release \"{samplePath}/build\"").WaitForExit();
+        using var process = Process.Start("dotnet", $"build -c Release \"{samplePath}/build\"");
+        process.WaitForExit();
         Assert.Equal(0, Exec("dotnet", "run --no-build -c Release --project build", workingDirectory: samplePath));
 #endif
 
@@ -164,7 +169,7 @@ private static int Exec(string filename, string args, string workingDirectory =
         psi.EnvironmentVariables.Add("DOCFX_SOURCE_BRANCH_NAME", "main");
         if (workingDirectory != null)
             psi.WorkingDirectory = Path.GetFullPath(workingDirectory);
-        var process = Process.Start(psi);
+        using var process = Process.Start(psi);
         process.WaitForExit();
         return process.ExitCode;
     }
diff --git a/test/docfx.Snapshot.Tests/docfx.Snapshot.Tests.csproj b/test/docfx.Snapshot.Tests/docfx.Snapshot.Tests.csproj
index 24c17a9ecf2..56c718ed26b 100644
--- a/test/docfx.Snapshot.Tests/docfx.Snapshot.Tests.csproj
+++ b/test/docfx.Snapshot.Tests/docfx.Snapshot.Tests.csproj
@@ -1,4 +1,8 @@
 <Project Sdk="Microsoft.NET.Sdk">
+  <PropertyGroup>
+    <TargetFrameworks>net8.0</TargetFrameworks>
+  </PropertyGroup>
+  
   <ItemGroup>
     <PackageReference Include="Microsoft.Playwright" />
     <PackageReference Include="Verify.DiffPlex" />
diff --git a/test/docfx.Tests/Api.verified.cs b/test/docfx.Tests/Api.verified.cs
index af7f5981e91..7b2cf6fc589 100644
--- a/test/docfx.Tests/Api.verified.cs
+++ b/test/docfx.Tests/Api.verified.cs
@@ -58,13 +58,11 @@ public override System.IO.Stream GetResourceStream(string name) { }
     }
     public sealed class DocumentBuildContext : Docfx.Plugins.IDocumentBuildContext
     {
-        public DocumentBuildContext(Docfx.Build.Engine.DocumentBuildParameters parameters) { }
-        public DocumentBuildContext(string buildOutputFolder) { }
-        public DocumentBuildContext(string buildOutputFolder, System.Collections.Generic.IEnumerable<Docfx.Plugins.FileAndType> allSourceFiles, System.Collections.Immutable.ImmutableArray<string> externalReferencePackages, System.Collections.Immutable.ImmutableArray<string> xrefMaps, int maxParallelism, string baseFolder, string versionName, Docfx.Build.Engine.ApplyTemplateSettings applyTemplateSetting, string rootTocPath) { }
-        public DocumentBuildContext(string buildOutputFolder, System.Collections.Generic.IEnumerable<Docfx.Plugins.FileAndType> allSourceFiles, System.Collections.Immutable.ImmutableArray<string> externalReferencePackages, System.Collections.Immutable.ImmutableArray<string> xrefMaps, int maxParallelism, string baseFolder, string versionName, Docfx.Build.Engine.ApplyTemplateSettings applyTemplateSetting, string rootTocPath, string versionFolder, Docfx.Plugins.GroupInfo groupInfo) { }
+        public DocumentBuildContext(Docfx.Build.Engine.DocumentBuildParameters parameters, System.Threading.CancellationToken cancellationToken) { }
         public System.Collections.Immutable.ImmutableDictionary<string, Docfx.Plugins.FileAndType> AllSourceFiles { get; }
         public Docfx.Build.Engine.ApplyTemplateSettings ApplyTemplateSettings { get; set; }
         public string BuildOutputFolder { get; }
+        public System.Threading.CancellationToken CancellationToken { get; }
         public System.Collections.Immutable.ImmutableArray<string> ExternalReferencePackages { get; }
         public System.Collections.Concurrent.ConcurrentDictionary<string, string> FileMap { get; }
         public Docfx.Plugins.GroupInfo GroupInfo { get; }
@@ -120,7 +118,7 @@ public class DocumentBuilder : System.IDisposable
     {
         public DocumentBuilder(System.Collections.Generic.IEnumerable<System.Reflection.Assembly> assemblies, System.Collections.Immutable.ImmutableArray<string> postProcessorNames) { }
         public void Build(Docfx.Build.Engine.DocumentBuildParameters parameter) { }
-        public void Build(System.Collections.Generic.IList<Docfx.Build.Engine.DocumentBuildParameters> parameters, string outputDirectory) { }
+        public void Build(System.Collections.Generic.IList<Docfx.Build.Engine.DocumentBuildParameters> parameters, string outputDirectory, System.Threading.CancellationToken cancellationToken = default) { }
         public void Dispose() { }
     }
     public sealed class EmptyResourceReader : Docfx.Build.Engine.ResourceFileReader
@@ -391,7 +389,7 @@ public static Docfx.Build.Engine.XRefArchive Open(string file, Docfx.Build.Engin
     public class XRefArchiveBuilder
     {
         public XRefArchiveBuilder() { }
-        public System.Threading.Tasks.Task<bool> DownloadAsync(System.Uri uri, string outputFile) { }
+        public System.Threading.Tasks.Task<bool> DownloadAsync(System.Uri uri, string outputFile, System.Threading.CancellationToken cancellationToken = default) { }
     }
     public enum XRefArchiveMode
     {
@@ -1170,9 +1168,11 @@ public ApiReferenceBuildOutput() { }
         [Docfx.YamlSerialization.ExtensibleMember]
         [Newtonsoft.Json.JsonIgnore]
         [System.Text.Json.Serialization.JsonIgnore]
+        [System.Text.Json.Serialization.JsonPropertyName("__metadata__")]
         public System.Collections.Generic.Dictionary<string, object> Metadata { get; set; }
         [Newtonsoft.Json.JsonExtensionData]
         [System.Text.Json.Serialization.JsonExtensionData]
+        [System.Text.Json.Serialization.JsonInclude]
         [YamlDotNet.Serialization.YamlIgnore]
         public Docfx.Common.CompositeDictionary MetadataJson { get; }
         [Newtonsoft.Json.JsonProperty("name")]
@@ -1867,14 +1867,12 @@ public override void WriteJson(Newtonsoft.Json.JsonWriter writer, object value,
     }
     public static class JsonUtility
     {
-        public static readonly System.Threading.ThreadLocal<Newtonsoft.Json.JsonSerializer> DefaultSerializer;
-        public static T Deserialize<T>(System.IO.TextReader reader, Newtonsoft.Json.JsonSerializer serializer = null) { }
-        public static T Deserialize<T>(string path, Newtonsoft.Json.JsonSerializer serializer = null) { }
-        public static T FromJsonString<T>(this string json, Newtonsoft.Json.JsonSerializer serializer = null) { }
-        public static string Serialize(object graph, Newtonsoft.Json.Formatting formatting = 0, Newtonsoft.Json.JsonSerializer serializer = null) { }
-        public static void Serialize(System.IO.TextWriter writer, object graph, Newtonsoft.Json.Formatting formatting = 0, Newtonsoft.Json.JsonSerializer serializer = null) { }
-        public static void Serialize(string path, object graph, Newtonsoft.Json.Formatting formatting = 0, Newtonsoft.Json.JsonSerializer serializer = null) { }
-        public static string ToJsonString(this object graph, Newtonsoft.Json.Formatting formatting = 0, Newtonsoft.Json.JsonSerializer serializer = null) { }
+        public static T Deserialize<T>(System.IO.TextReader reader) { }
+        public static T Deserialize<T>(string path) { }
+        public static T FromJsonString<T>(this string json) { }
+        public static string Serialize<T>(T graph, bool indented = false) { }
+        public static void Serialize<T>(string path, T graph, bool indented = false) { }
+        public static string ToJsonString<T>(this T graph) { }
     }
     public enum LogLevel
     {
@@ -2275,13 +2273,15 @@ public DocfxException(string message, System.Exception innerException) { }
 }
 namespace Docfx
 {
+    [System.Text.Json.Serialization.JsonConverter(typeof(Docfx.FileItemsConverter))]
     public class FileItems : System.Collections.Generic.List<string>
     {
         public FileItems(System.Collections.Generic.IEnumerable<string> files) { }
         public FileItems(string file) { }
         public static Docfx.FileItems op_Explicit(string input) { }
     }
-    [Newtonsoft.Json.JsonConverter(typeof(Docfx.FileMappingConverter))]
+    [Newtonsoft.Json.JsonConverter(typeof(Docfx.FileMappingConverter.NewtonsoftJsonConverter))]
+    [System.Text.Json.Serialization.JsonConverter(typeof(Docfx.FileMappingConverter.SystemTextJsonConverter))]
     public class FileMapping
     {
         public FileMapping() { }
@@ -2460,7 +2460,7 @@ public static class TableOfContents
     }
     public class ExternalReferencePackageCollection : System.IDisposable
     {
-        public ExternalReferencePackageCollection(System.Collections.Generic.IEnumerable<string> packageFiles, int maxParallelism) { }
+        public ExternalReferencePackageCollection(System.Collections.Generic.IEnumerable<string> packageFiles, int maxParallelism, System.Threading.CancellationToken cancellationToken) { }
         public System.Collections.Immutable.ImmutableList<Docfx.DataContracts.Common.ExternalReferencePackageReader> Readers { get; }
         public void Dispose() { }
         protected virtual void Dispose(bool disposing) { }
@@ -2515,6 +2515,7 @@ public ReferenceViewModel() { }
         [Docfx.DataContracts.Common.UniqueIdentityReferenceIgnore]
         [Newtonsoft.Json.JsonExtensionData]
         [System.Text.Json.Serialization.JsonExtensionData]
+        [System.Text.Json.Serialization.JsonInclude]
         [YamlDotNet.Serialization.YamlIgnore]
         public Docfx.Common.CompositeDictionary AdditionalJson { get; }
         [Newtonsoft.Json.JsonProperty("commentId")]
@@ -2661,9 +2662,11 @@ public TocItemViewModel() { }
         [Docfx.YamlSerialization.ExtensibleMember]
         [Newtonsoft.Json.JsonIgnore]
         [System.Text.Json.Serialization.JsonIgnore]
+        [System.Text.Json.Serialization.JsonPropertyName("__metadata__")]
         public System.Collections.Generic.Dictionary<string, object> Metadata { get; set; }
         [Newtonsoft.Json.JsonExtensionData]
         [System.Text.Json.Serialization.JsonExtensionData]
+        [System.Text.Json.Serialization.JsonInclude]
         [YamlDotNet.Serialization.YamlIgnore]
         public Docfx.Common.CompositeDictionary MetadataJson { get; }
         [Newtonsoft.Json.JsonProperty("name")]
@@ -2889,6 +2892,7 @@ public ItemViewModel() { }
         [Docfx.DataContracts.Common.UniqueIdentityReferenceIgnore]
         [Newtonsoft.Json.JsonExtensionData]
         [System.Text.Json.Serialization.JsonExtensionData]
+        [System.Text.Json.Serialization.JsonInclude]
         [YamlDotNet.Serialization.YamlIgnore]
         public System.Collections.Generic.IDictionary<string, object> ExtensionData { get; }
         [Docfx.Common.EntityMergers.MergeOption(Docfx.Common.EntityMergers.MergeOption.Ignore)]
@@ -2950,6 +2954,7 @@ public ItemViewModel() { }
         [Docfx.YamlSerialization.ExtensibleMember]
         [Newtonsoft.Json.JsonIgnore]
         [System.Text.Json.Serialization.JsonIgnore]
+        [System.Text.Json.Serialization.JsonPropertyName("__metadata__")]
         public System.Collections.Generic.Dictionary<string, object> Metadata { get; set; }
         [Newtonsoft.Json.JsonProperty("name")]
         [System.Text.Json.Serialization.JsonPropertyName("name")]
@@ -3164,6 +3169,7 @@ public SyntaxDetailViewModel() { }
         [Docfx.DataContracts.Common.UniqueIdentityReferenceIgnore]
         [Newtonsoft.Json.JsonExtensionData]
         [System.Text.Json.Serialization.JsonExtensionData]
+        [System.Text.Json.Serialization.JsonInclude]
         [YamlDotNet.Serialization.YamlIgnore]
         public System.Collections.Generic.IDictionary<string, object> ExtensionData { get; }
         [Newtonsoft.Json.JsonProperty("parameters")]
@@ -3587,8 +3593,9 @@ public LineNumberExtension(System.Func<object, string> getFilePath = null) { }
         public void Setup(Markdig.MarkdownPipelineBuilder pipeline) { }
         public void Setup(Markdig.MarkdownPipeline pipeline, Markdig.Renderers.IMarkdownRenderer renderer) { }
     }
-    [Newtonsoft.Json.JsonConverter(typeof(Docfx.MarkdigEngine.Extensions.MarkdigExtensionSettingConverter))]
+    [Newtonsoft.Json.JsonConverter(typeof(Docfx.MarkdigEngine.Extensions.MarkdigExtensionSettingConverter.NewtonsoftJsonConverter))]
     [System.Diagnostics.DebuggerDisplay("Name = {Name}")]
+    [System.Text.Json.Serialization.JsonConverter(typeof(Docfx.MarkdigEngine.Extensions.MarkdigExtensionSettingConverter.SystemTextJsonConverter))]
     public class MarkdigExtensionSetting
     {
         public MarkdigExtensionSetting(string name, System.Text.Json.Nodes.JsonNode? options = null) { }
@@ -3962,11 +3969,11 @@ public DocumentException(string message, System.Exception inner) { }
     }
     public static class DocumentExceptionExtensions
     {
-        public static void RunAll<TElement>(this System.Collections.Generic.IEnumerable<TElement> elements, System.Action<TElement> action) { }
-        public static void RunAll<TElement>(this System.Collections.Generic.IReadOnlyList<TElement> elements, System.Action<TElement> action) { }
-        public static void RunAll<TElement>(this System.Collections.Generic.IEnumerable<TElement> elements, System.Action<TElement> action, int parallelism) { }
-        public static void RunAll<TElement>(this System.Collections.Generic.IReadOnlyList<TElement> elements, System.Action<TElement> action, int parallelism) { }
-        public static TResult[] RunAll<TElement, TResult>(this System.Collections.Generic.IReadOnlyList<TElement> elements, System.Func<TElement, TResult> func) { }
+        public static void RunAll<TElement>(this System.Collections.Generic.IEnumerable<TElement> elements, System.Action<TElement> action, System.Threading.CancellationToken cancellationToken = default) { }
+        public static void RunAll<TElement>(this System.Collections.Generic.IReadOnlyList<TElement> elements, System.Action<TElement> action, System.Threading.CancellationToken cancellationToken = default) { }
+        public static void RunAll<TElement>(this System.Collections.Generic.IEnumerable<TElement> elements, System.Action<TElement> action, int parallelism, System.Threading.CancellationToken cancellationToken = default) { }
+        public static void RunAll<TElement>(this System.Collections.Generic.IReadOnlyList<TElement> elements, System.Action<TElement> action, int parallelism, System.Threading.CancellationToken cancellationToken = default) { }
+        public static TResult[] RunAll<TElement, TResult>(this System.Collections.Generic.IReadOnlyList<TElement> elements, System.Func<TElement, TResult> func, System.Threading.CancellationToken cancellationToken = default) { }
     }
     public enum DocumentType
     {
@@ -4072,6 +4079,7 @@ public interface ICustomHrefGenerator
     }
     public interface IDocumentBuildContext
     {
+        System.Threading.CancellationToken CancellationToken { get; }
         Docfx.Plugins.GroupInfo GroupInfo { get; }
         Docfx.Plugins.ICustomHrefGenerator HrefGenerator { get; }
         string RootTocPath { get; }
@@ -4162,7 +4170,7 @@ public interface IMarkdownService
     public interface IPostProcessor
     {
         System.Collections.Immutable.ImmutableDictionary<string, object> PrepareMetadata(System.Collections.Immutable.ImmutableDictionary<string, object> metadata);
-        Docfx.Plugins.Manifest Process(Docfx.Plugins.Manifest manifest, string outputFolder);
+        Docfx.Plugins.Manifest Process(Docfx.Plugins.Manifest manifest, string outputFolder, System.Threading.CancellationToken cancellationToken);
     }
     public readonly struct LinkSourceInfo
     {
@@ -4175,9 +4183,6 @@ public class Manifest
     {
         public Manifest() { }
         public Manifest(System.Collections.Generic.IEnumerable<Docfx.Plugins.ManifestItem> files) { }
-        [Newtonsoft.Json.JsonProperty("files")]
-        [System.Text.Json.Serialization.JsonPropertyName("files")]
-        public System.Collections.Generic.List<Docfx.Plugins.ManifestItem> Files { get; }
         [Newtonsoft.Json.JsonProperty("groups")]
         [System.Text.Json.Serialization.JsonPropertyName("groups")]
         public System.Collections.Generic.List<Docfx.Plugins.ManifestGroupInfo> Groups { get; set; }
@@ -4191,9 +4196,13 @@ public Manifest(System.Collections.Generic.IEnumerable<Docfx.Plugins.ManifestIte
         [System.Obsolete]
         [System.Text.Json.Serialization.JsonPropertyName("xrefmap")]
         public object Xrefmap { get; set; }
+        [Newtonsoft.Json.JsonProperty("files")]
+        [System.Text.Json.Serialization.JsonPropertyName("files")]
+        public System.Collections.Generic.List<Docfx.Plugins.ManifestItem> Files { get; init; }
     }
     public class ManifestGroupInfo
     {
+        public ManifestGroupInfo() { }
         public ManifestGroupInfo(Docfx.Plugins.GroupInfo groupInfo) { }
         [Newtonsoft.Json.JsonProperty("dest")]
         [System.Text.Json.Serialization.JsonPropertyName("dest")]
@@ -4217,9 +4226,6 @@ public ManifestItem() { }
         [Newtonsoft.Json.JsonExtensionData]
         [System.Text.Json.Serialization.JsonExtensionData]
         public System.Collections.Generic.Dictionary<string, object> Metadata { get; set; }
-        [Newtonsoft.Json.JsonProperty("output")]
-        [System.Text.Json.Serialization.JsonPropertyName("output")]
-        public System.Collections.Generic.Dictionary<string, Docfx.Plugins.OutputFileInfo> Output { get; }
         [Newtonsoft.Json.JsonProperty("source_relative_path")]
         [System.Text.Json.Serialization.JsonPropertyName("source_relative_path")]
         public string SourceRelativePath { get; set; }
@@ -4229,6 +4235,9 @@ public ManifestItem() { }
         [Newtonsoft.Json.JsonProperty("version")]
         [System.Text.Json.Serialization.JsonPropertyName("version")]
         public string Version { get; set; }
+        [Newtonsoft.Json.JsonProperty("output")]
+        [System.Text.Json.Serialization.JsonPropertyName("output")]
+        public System.Collections.Generic.Dictionary<string, Docfx.Plugins.OutputFileInfo> Output { get; init; }
     }
     public class MarkupResult
     {
diff --git a/test/docfx.Tests/Assets/multi-frameworks-test.csproj.sample.1 b/test/docfx.Tests/Assets/multi-frameworks-test.csproj.sample.1
index f7aca45d3c0..a8c7f4b4265 100644
--- a/test/docfx.Tests/Assets/multi-frameworks-test.csproj.sample.1
+++ b/test/docfx.Tests/Assets/multi-frameworks-test.csproj.sample.1
@@ -1,10 +1,10 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <TargetFrameworks>net6.0;netstandard2.0</TargetFrameworks>
+    <TargetFrameworks>net8.0;netstandard2.0</TargetFrameworks>
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
   </PropertyGroup>
   <ItemGroup>
     <Reference Include="System" />
     <Reference Include="Microsoft.CSharp" />
   </ItemGroup>
-</Project>
\ No newline at end of file
+</Project>
diff --git a/test/docfx.Tests/Assets/ref.csproj.sample.1 b/test/docfx.Tests/Assets/ref.csproj.sample.1
index 1b5656b92f9..de34d27f8d4 100644
--- a/test/docfx.Tests/Assets/ref.csproj.sample.1
+++ b/test/docfx.Tests/Assets/ref.csproj.sample.1
@@ -1,5 +1,5 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <TargetFrameworks>net6.0</TargetFrameworks>
+    <TargetFrameworks>net8.0</TargetFrameworks>
   </PropertyGroup>
-</Project>
\ No newline at end of file
+</Project>
diff --git a/test/docfx.Tests/Assets/template/plugins/CustomPostProcessor.cs b/test/docfx.Tests/Assets/template/plugins/CustomPostProcessor.cs
index cf7bb040ee1..88107a82d84 100644
--- a/test/docfx.Tests/Assets/template/plugins/CustomPostProcessor.cs
+++ b/test/docfx.Tests/Assets/template/plugins/CustomPostProcessor.cs
@@ -1,4 +1,7 @@
-using System.Collections.Immutable;
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.Collections.Immutable;
 using System.Composition;
 using Docfx.Plugins;
 
@@ -9,7 +12,7 @@ public class CustomPostProcessor : IPostProcessor
 {
     public ImmutableDictionary<string, object> PrepareMetadata(ImmutableDictionary<string, object> metadata) => metadata;
 
-    public Manifest Process(Manifest manifest, string outputFolder)
+    public Manifest Process(Manifest manifest, string outputFolder, CancellationToken cancellationToken = default)
     {
         File.WriteAllText(Path.Combine(outputFolder, "customPostProcessor.txt"), "customPostProcessor");
         return manifest;
diff --git a/test/docfx.Tests/Assets/template/plugins/plugins.csproj b/test/docfx.Tests/Assets/template/plugins/plugins.csproj
index 1714e2a73bb..a95ef2ec35b 100644
--- a/test/docfx.Tests/Assets/template/plugins/plugins.csproj
+++ b/test/docfx.Tests/Assets/template/plugins/plugins.csproj
@@ -1,7 +1,7 @@
-<Project Sdk="Microsoft.NET.Sdk">
+<Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>net6.0</TargetFramework>
+    <TargetFramework>net8.0</TargetFramework>
     <ImplicitUsings>enable</ImplicitUsings>
     <Nullable>enable</Nullable>
     <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
diff --git a/test/docfx.Tests/Assets/test.csproj.sample.1 b/test/docfx.Tests/Assets/test.csproj.sample.1
index fb237e64e04..03511f974ed 100644
--- a/test/docfx.Tests/Assets/test.csproj.sample.1
+++ b/test/docfx.Tests/Assets/test.csproj.sample.1
@@ -1,6 +1,6 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <TargetFrameworks>net6.0</TargetFrameworks>
+    <TargetFrameworks>net8.0</TargetFrameworks>
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
   </PropertyGroup>
   <ItemGroup>
@@ -8,4 +8,4 @@
       <Name>ClassLibrary1</Name>
     </ProjectReference>
   </ItemGroup>
-</Project>
\ No newline at end of file
+</Project>
diff --git a/test/docfx.Tests/Assets/test.vbproj.sample.1 b/test/docfx.Tests/Assets/test.vbproj.sample.1
index 05d1cf1730f..57aa05d91c7 100644
--- a/test/docfx.Tests/Assets/test.vbproj.sample.1
+++ b/test/docfx.Tests/Assets/test.vbproj.sample.1
@@ -1,6 +1,6 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <TargetFrameworks>net6.0</TargetFrameworks>
+    <TargetFrameworks>net8.0</TargetFrameworks>
     <RootNamespace>testVBproj1</RootNamespace>
     <AssemblyName>test.sample.1</AssemblyName>
     <OptionExplicit>On</OptionExplicit>
diff --git a/test/docfx.Tests/Attributes/WindowsOnlyFactAttribute.cs b/test/docfx.Tests/Attributes/WindowsOnlyFactAttribute.cs
index d59a7a4e951..0f2bad2b44b 100644
--- a/test/docfx.Tests/Attributes/WindowsOnlyFactAttribute.cs
+++ b/test/docfx.Tests/Attributes/WindowsOnlyFactAttribute.cs
@@ -1,5 +1,5 @@
-// Copyright (c) .NET Foundation and contributors. All rights reserved.
-// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
 
 using System.Runtime.InteropServices;
 
diff --git a/test/docfx.Tests/DocsetBuildTest.cs b/test/docfx.Tests/DocsetBuildTest.cs
index 5fecde33aaa..b49110d0ac8 100644
--- a/test/docfx.Tests/DocsetBuildTest.cs
+++ b/test/docfx.Tests/DocsetBuildTest.cs
@@ -24,12 +24,12 @@ private static async Task<Dictionary<string, Func<string>>> Build(Dictionary<str
         {
             var filePath = Path.GetFullPath(Path.Combine(testDirectory, path));
             Directory.CreateDirectory(Path.GetDirectoryName(filePath));
-            File.WriteAllText(filePath, content);
+            await File.WriteAllTextAsync(filePath, content);
         }
 
         if (!files.ContainsKey("docfx.json"))
         {
-            File.WriteAllText($"{testDirectory}/docfx.json",
+            await File.WriteAllTextAsync($"{testDirectory}/docfx.json",
                 """
                 {
                     "build": {
@@ -224,7 +224,7 @@ public static async Task Build_With_RedirectUri_Files()
                 <meta http-equiv="refresh" content="0;URL='redirected.html'">
               </head>
             </html>
-            """.Replace("\r\n","\n"), result.Trim());
+            """.Replace("\r\n", "\n"), result.Trim());
 
         // Test redirect page.is excluded from sitemap.
         var sitemapXml = outputs["sitemap.xml"]();
diff --git a/test/docfx.Tests/JsonConverterTest.cs b/test/docfx.Tests/JsonConverterTest.cs
index 1e54eb635b8..795fa6b4c30 100644
--- a/test/docfx.Tests/JsonConverterTest.cs
+++ b/test/docfx.Tests/JsonConverterTest.cs
@@ -4,6 +4,7 @@
 using System.Collections;
 using System.Reflection;
 using Docfx.Common;
+using FluentAssertions;
 using Newtonsoft.Json;
 using Newtonsoft.Json.Serialization;
 
@@ -62,17 +63,15 @@ public void TestFileMetadataPairsConverterCouldSerializeAndDeserialize()
                 new("*/*.cs", new object[] { "1", "2" }),
                 new("**", new Dictionary<string, object>{ ["key"] = new object[] {"1", "2" } }),
             });
+
         var result = JsonUtility.Serialize(item);
         Assert.Equal("{\"*.md\":1,\"*.m\":true,\"abc\":\"string\",\"/[]\\\\*.cs\":{\"key\":\"2\"},\"*/*.cs\":[\"1\",\"2\"],\"**\":{\"key\":[\"1\",\"2\"]}}", result);
         using var reader = new StringReader(result);
         var pairs = JsonUtility.Deserialize<FileMetadataPairs>(reader);
         Assert.Equal(item.Count, pairs.Count);
-        for (int i = 0; i < pairs.Count; i++)
-        {
-            Assert.Equal(item[i].Glob.Raw, pairs[i].Glob.Raw);
-            var parsedValue = pairs[i].Value;
-            Assert.Equal(item[i].Value, parsedValue);
-        }
+
+        // Assert
+        pairs.Should().BeEquivalentTo(item);
     }
 
     [Fact]
@@ -102,7 +101,8 @@ public void TestFileMappingItemOutputShouldContainSrcOnly()
 
 internal class SkipEmptyOrNullContractResolver : DefaultContractResolver
 {
-    public SkipEmptyOrNullContractResolver(bool shareCache = false) : base() { }
+    public SkipEmptyOrNullContractResolver(bool shareCache = false)
+    { }
 
     protected override JsonProperty CreateProperty(MemberInfo member,
         MemberSerialization memberSerialization)
diff --git a/test/docfx.Tests/MetadataCommandTest.cs b/test/docfx.Tests/MetadataCommandTest.cs
index f83da132da0..e01761fb414 100644
--- a/test/docfx.Tests/MetadataCommandTest.cs
+++ b/test/docfx.Tests/MetadataCommandTest.cs
@@ -69,7 +69,7 @@ await DotnetApiCatalog.Exec(
             {
                 Dest = _outputFolder,
                 Src = new(new FileMappingItem(projectFile)) { Expanded = true },
-                Properties = new() { ["TargetFramework"] = "net6.0" },
+                Properties = new() { ["TargetFramework"] = "net8.0" },
             }),
             new(), Directory.GetCurrentDirectory());
 
diff --git a/test/docfx.Tests/PublicApiContractTest.cs b/test/docfx.Tests/PublicApiContractTest.cs
index d54d39da116..5a3c43f1b6c 100644
--- a/test/docfx.Tests/PublicApiContractTest.cs
+++ b/test/docfx.Tests/PublicApiContractTest.cs
@@ -14,6 +14,10 @@ public static Task TestPublicApiContract()
         var assemblies = new HashSet<Assembly>();
         GetAssemblies(typeof(Docset).Assembly);
 
+
+        var ass = assemblies.Select(x => x.GetName().Name).OrderBy(x => x).ToArray();
+
+
         var publicApi = string.Join('\n', assemblies
             .OrderBy(a => a.FullName)
             .Select(a => a.GeneratePublicApi(new() { IncludeAssemblyAttributes = false })));
diff --git a/test/docfx.Tests/SerializationTests/JsonSerializationEncoderTest.cs b/test/docfx.Tests/SerializationTests/JsonSerializationEncoderTest.cs
new file mode 100644
index 00000000000..f01b44e125d
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/JsonSerializationEncoderTest.cs
@@ -0,0 +1,56 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using Docfx.Common;
+using FluentAssertions;
+
+namespace docfx.Tests;
+
+public partial class JsonSerializationEncoderTest
+{
+    [Theory]
+    [InlineData("abcdefghighlmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")]
+    [InlineData("0123456789")]
+    [InlineData("\0\a\b\t\n\v\f\r\e")]
+    [InlineData("!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~")]
+    [InlineData("①②③")] // NonAscii chars (Enclosed Alphanumerics)
+    [InlineData("123")] // NonAscii chars (Full-width digits)
+    [InlineData("äöü")]   // Umlaut
+    [InlineData("漢字")]   // Kanji
+    public void JsonEncoderTest(string data)
+    {
+        // Arrange
+        var model = data;
+
+        //Act
+        var systemTextJsonResult = SystemTextJsonUtility.Serialize(model);
+        var newtonsoftJsonResult = NewtonsoftJsonUtility.Serialize(model);
+
+        // Assert
+        // Compare serialized result text with `StringComparer.OrdinalIgnoreCase`
+        //  - SystemTextJson escape chars with capital case(`\u001B`)
+        //  - NewtonsoftJson escape chars with lower case  (`\u001b`)
+        ((object)systemTextJsonResult).Should().Be(newtonsoftJsonResult, StringComparer.OrdinalIgnoreCase); // Currently StringAssertions don't expose overload that accepts StringComparer. (See: https://github.com/fluentassertions/fluentassertions/issues/2720)
+    }
+
+    [Theory]
+    [InlineData(" ", @"\u3000")]                                 // Full-Width space (Excaped by global block list (https://learn.microsoft.com/en-us/dotnet/standard/serialization/system-text-json/character-encoding#global-block-list))
+    [InlineData("𠮟", @"\uD842\uDF9F")]                           // Kanji (that use Surrogate Pair)
+    [InlineData("📄", @"\uD83D\uDCC4")]                          // Emoji
+    [InlineData("👁‍🗨", @"\uD83D\uDC41‍\uD83D\uDDE8")] // Emoji (with ZWJ (ZERO WIDTH JOINER))
+    public void JsonEncoderTest_NoCompatibility(string data, string expected)
+    {
+        // Arrange
+        var model = data;
+
+        //Act
+        var systemTextJsonResult = SystemTextJsonUtility.Serialize(model);
+        var newtonsoftJsonResult = NewtonsoftJsonUtility.Serialize(model);
+
+        // Assert
+        systemTextJsonResult.Should().NotBe(newtonsoftJsonResult);
+
+        systemTextJsonResult.Should().Contain(expected);
+        newtonsoftJsonResult.Should().Contain(data);
+    }
+}
diff --git a/test/docfx.Tests/SerializationTests/JsonSerializationTest.BuildJsonConfig.cs b/test/docfx.Tests/SerializationTests/JsonSerializationTest.BuildJsonConfig.cs
new file mode 100644
index 00000000000..16c4599c03a
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/JsonSerializationTest.BuildJsonConfig.cs
@@ -0,0 +1,22 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using Docfx;
+using Docfx.Common;
+using FluentAssertions;
+
+namespace docfx.Tests;
+
+public partial class JsonSerializationTest
+{
+    [Theory]
+    [TestData<BuildJsonConfig>]
+    public void JsonSerializationTest_BuildJsonConfig(string path)
+    {
+        // Arrange
+        var model = TestData.Load<BuildJsonConfig>(path);
+
+        // Act/Assert
+        ValidateJsonRoundTrip(model);
+    }
+}
diff --git a/test/docfx.Tests/SerializationTests/JsonSerializationTest.DocfxConfig.cs b/test/docfx.Tests/SerializationTests/JsonSerializationTest.DocfxConfig.cs
new file mode 100644
index 00000000000..50473ad2ab3
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/JsonSerializationTest.DocfxConfig.cs
@@ -0,0 +1,22 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using Docfx;
+using Docfx.Common;
+using FluentAssertions;
+
+namespace docfx.Tests;
+
+public partial class JsonSerializationTest
+{
+    [Theory]
+    [TestData<DocfxConfig>]
+    public void JsonSerializationTest_DocfxConfig(string path)
+    {
+        // Arrange
+        var model = TestData.Load<DocfxConfig>(path);
+
+        // Act/Assert
+        ValidateJsonRoundTrip(model);
+    }
+}
diff --git a/test/docfx.Tests/SerializationTests/JsonSerializationTest.FileMapping.cs b/test/docfx.Tests/SerializationTests/JsonSerializationTest.FileMapping.cs
new file mode 100644
index 00000000000..488be5c6d49
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/JsonSerializationTest.FileMapping.cs
@@ -0,0 +1,22 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using Docfx;
+using Docfx.Common;
+using FluentAssertions;
+
+namespace docfx.Tests;
+
+public partial class JsonSerializationTest
+{
+    [Theory]
+    [TestData<FileMapping>]
+    public void JsonSerializationTest_FileMapping(string path)
+    {
+        // Arrange
+        var model = TestData.Load<FileMapping>(path);
+
+        // Act/Assert
+        ValidateJsonRoundTrip(model);
+    }
+}
diff --git a/test/docfx.Tests/SerializationTests/JsonSerializationTest.FileMetadataPairs.cs b/test/docfx.Tests/SerializationTests/JsonSerializationTest.FileMetadataPairs.cs
new file mode 100644
index 00000000000..4a026e26a87
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/JsonSerializationTest.FileMetadataPairs.cs
@@ -0,0 +1,22 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using Docfx;
+using Docfx.Common;
+using FluentAssertions;
+
+namespace docfx.Tests;
+
+public partial class JsonSerializationTest
+{
+    [Theory]
+    [TestData<FileMetadataPairs>]
+    public void JsonSerializationTest_FileMetadataPairs(string path)
+    {
+        // Arrange
+        var model = TestData.Load<FileMetadataPairs>(path);
+
+        // Act/Assert
+        ValidateJsonRoundTrip(model);
+    }
+}
diff --git a/test/docfx.Tests/SerializationTests/JsonSerializationTest.ListWithStringFallback.cs b/test/docfx.Tests/SerializationTests/JsonSerializationTest.ListWithStringFallback.cs
new file mode 100644
index 00000000000..f7557fe6429
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/JsonSerializationTest.ListWithStringFallback.cs
@@ -0,0 +1,22 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using Docfx;
+using Docfx.Common;
+using FluentAssertions;
+
+namespace docfx.Tests;
+
+public partial class JsonSerializationTest
+{
+    [Theory]
+    [TestData<ListWithStringFallback>]
+    public void JsonSerializationTest_ListWithStringFallback(string path)
+    {
+        // Arrange
+        var model = TestData.Load<ListWithStringFallback>(path);
+
+        // Act/Assert
+        ValidateJsonRoundTrip(model);
+    }
+}
diff --git a/test/docfx.Tests/SerializationTests/JsonSerializationTest.Manifest.cs b/test/docfx.Tests/SerializationTests/JsonSerializationTest.Manifest.cs
new file mode 100644
index 00000000000..0784927eb9c
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/JsonSerializationTest.Manifest.cs
@@ -0,0 +1,24 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using Docfx;
+using Docfx.Common;
+using Docfx.Plugins;
+using FluentAssertions;
+using YamlDotNet.Core.Tokens;
+
+namespace docfx.Tests;
+
+public partial class JsonSerializationTest
+{
+    [Theory]
+    [TestData<Manifest>]
+    public void JsonSerializationTest_Manifest(string path)
+    {
+        // Arrange
+        var model = TestData.Load<Manifest>(path);
+
+        // Act/Assert
+        ValidateJsonRoundTrip(model);
+    }
+}
diff --git a/test/docfx.Tests/SerializationTests/JsonSerializationTest.MarkdownServiceProperties.cs b/test/docfx.Tests/SerializationTests/JsonSerializationTest.MarkdownServiceProperties.cs
new file mode 100644
index 00000000000..51546b4c973
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/JsonSerializationTest.MarkdownServiceProperties.cs
@@ -0,0 +1,35 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.Text.Json;
+using Docfx;
+using Docfx.Common;
+using Docfx.MarkdigEngine.Extensions;
+using Docfx.Plugins;
+using FluentAssertions;
+using Markdig.Extensions.MediaLinks;
+
+namespace docfx.Tests;
+
+public partial class JsonSerializationTest
+{
+    [Theory]
+    [TestData<MarkdownServiceProperties>]
+    public void JsonSerializationTest_MarkdownServiceProperties(string path)
+    {
+        // Arrange
+        var model = TestData.Load<MarkdownServiceProperties>(path);
+
+        // Act/Assert
+        ValidateJsonRoundTrip(model);
+
+        // Additional test to validate deserialized result.
+        var medialinksSettings = model.MarkdigExtensions.First(x => x.Name == "MediaLinks");
+        var options = medialinksSettings.GetOptions(fallbackValue: new MediaOptions());
+        options.Should().BeEquivalentTo(new MediaOptions
+        {
+            Width = "800",
+            Height = "400",
+        });
+    }
+}
diff --git a/test/docfx.Tests/SerializationTests/JsonSerializationTest.MergeJsonConfig.cs b/test/docfx.Tests/SerializationTests/JsonSerializationTest.MergeJsonConfig.cs
new file mode 100644
index 00000000000..0d5617f01a1
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/JsonSerializationTest.MergeJsonConfig.cs
@@ -0,0 +1,22 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using Docfx;
+using Docfx.Common;
+using FluentAssertions;
+
+namespace docfx.Tests;
+
+public partial class JsonSerializationTest
+{
+    [Theory]
+    [TestData<MergeJsonConfig>]
+    public void JsonSerializationTest_MergeJsonConfig(string path)
+    {
+        // Arrange
+        var model = TestData.Load<MergeJsonConfig>(path);
+
+        // Act/Assert
+        ValidateJsonRoundTrip(model);
+    }
+}
diff --git a/test/docfx.Tests/SerializationTests/JsonSerializationTest.MetadataJsonConfig.cs b/test/docfx.Tests/SerializationTests/JsonSerializationTest.MetadataJsonConfig.cs
new file mode 100644
index 00000000000..6308a02daa9
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/JsonSerializationTest.MetadataJsonConfig.cs
@@ -0,0 +1,22 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using Docfx;
+using Docfx.Common;
+using FluentAssertions;
+
+namespace docfx.Tests;
+
+public partial class JsonSerializationTest
+{
+    [Theory]
+    [TestData<MetadataJsonConfig>]
+    public void JsonSerializationTest_MetadataJsonConfig(string path)
+    {
+        // Arrange
+        var model = TestData.Load<MetadataJsonConfig>(path);
+
+        // Act/Assert
+        ValidateJsonRoundTrip(model);
+    }
+}
diff --git a/test/docfx.Tests/SerializationTests/JsonSerializationTest.TocItemViewModel.cs b/test/docfx.Tests/SerializationTests/JsonSerializationTest.TocItemViewModel.cs
new file mode 100644
index 00000000000..3d248bfab97
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/JsonSerializationTest.TocItemViewModel.cs
@@ -0,0 +1,20 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using Docfx.DataContracts.Common;
+
+namespace docfx.Tests;
+
+public partial class JsonSerializationTest
+{
+    [Theory]
+    [TestData<TocItemViewModel>]
+    public void JsonSerializationTest_TocItemViewModel(string path)
+    {
+        // Arrange
+        var model = TestData.Load<TocItemViewModel>(path);
+
+        // Act/Assert
+        ValidateJsonRoundTrip(model);
+    }
+}
diff --git a/test/docfx.Tests/SerializationTests/JsonSerializationTest.XRefMap.cs b/test/docfx.Tests/SerializationTests/JsonSerializationTest.XRefMap.cs
new file mode 100644
index 00000000000..24679084df3
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/JsonSerializationTest.XRefMap.cs
@@ -0,0 +1,24 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using Docfx;
+using Docfx.Build.Engine;
+using Docfx.Common;
+using Docfx.Plugins;
+using FluentAssertions;
+
+namespace docfx.Tests;
+
+public partial class JsonSerializationTest
+{
+    [Theory]
+    [TestData<XRefMap>]
+    public void JsonSerializationTest_XRefMap(string path)
+    {
+        // Arrange
+        var model = TestData.Load<XRefMap>(path);
+
+        // Act/Assert
+        ValidateJsonRoundTrip(model);
+    }
+}
diff --git a/test/docfx.Tests/SerializationTests/JsonSerializationTest.cs b/test/docfx.Tests/SerializationTests/JsonSerializationTest.cs
new file mode 100644
index 00000000000..8acf7ad79d7
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/JsonSerializationTest.cs
@@ -0,0 +1,43 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.Text.Json;
+using Docfx.Common;
+using FluentAssertions;
+using FluentAssertions.Equivalency;
+using FluentAssertions.Equivalency.Tracing;
+
+namespace docfx.Tests;
+
+public partial class JsonSerializationTest
+{
+    /// <summary>
+    /// Helper method to validate serialize/deserialize results.
+    /// </summary>
+    protected void ValidateJsonRoundTrip<T>(T model)
+    {
+        // 1. Validate serialized result.
+        var newtonsoftJson = NewtonsoftJsonUtility.Serialize(model);
+        var systemTextJson = SystemTextJsonUtility.Serialize(model);
+        systemTextJson.Should().Be(newtonsoftJson);
+
+        // 2. Validate deserialized result.
+        var json = systemTextJson;
+        var systemTextJsonModel = SystemTextJsonUtility.Deserialize<T>(json);
+        var newtonsoftJsonModel = NewtonsoftJsonUtility.Deserialize<T>(new StringReader(json));
+        systemTextJsonModel.Should().BeEquivalentTo(model, customAssertionOptions);
+        newtonsoftJsonModel.Should().BeEquivalentTo(model, customAssertionOptions);
+
+        // 3. Validate JsonUtility roundtrip result.
+        json = JsonUtility.Serialize(model);
+        var result = JsonUtility.Deserialize<T>(new StringReader(json));
+        result.Should().BeEquivalentTo(model, customAssertionOptions);
+    }
+
+    private static EquivalencyAssertionOptions<T> customAssertionOptions<T>(EquivalencyAssertionOptions<T> opt)
+    {
+        // By default. JsonElement is compared by reference because JsonElement don't override Equals.
+        return opt.ComparingByMembers<JsonElement>()
+                  .Using(new CustomEqualityEquivalencyStep());
+    }
+}
diff --git a/test/docfx.Tests/SerializationTests/Shared/CustomEqualityEquivalencyStep.cs b/test/docfx.Tests/SerializationTests/Shared/CustomEqualityEquivalencyStep.cs
new file mode 100644
index 00000000000..e8266a0d3d5
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/Shared/CustomEqualityEquivalencyStep.cs
@@ -0,0 +1,70 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.Diagnostics;
+using System.Globalization;
+using Docfx.Common;
+using FluentAssertions;
+using FluentAssertions.Equivalency;
+using Newtonsoft.Json.Linq;
+
+#nullable enable
+
+namespace docfx.Tests;
+
+internal class CustomEqualityEquivalencyStep : IEquivalencyStep
+{
+    public EquivalencyResult Handle(
+        Comparands comparands,
+        IEquivalencyValidationContext context,
+        IEquivalencyValidator nestedValidator)
+    {
+        if (comparands.Subject is null || comparands.Expectation is null)
+            return EquivalencyResult.ContinueWithNext;
+
+        var subject = comparands.Subject;
+        var expected = comparands.Expectation;
+
+        Type subjectType = subject.GetType();
+        Type expectedType = expected.GetType();
+        if (subjectType == expectedType || expectedType.IsAssignableFrom(subjectType))
+        {
+            return EquivalencyResult.ContinueWithNext;
+        }
+
+        // Try to convert `expection` to `subject` type.
+        switch (expected)
+        {
+            // Required to comparing models that are loaded by SystemTextJsonUtility/NewtonsoftJsonUtility.
+            case JToken jToken:
+                comparands.Expectation = jToken.ToObject(subjectType);
+                return EquivalencyResult.ContinueWithNext;
+
+            // Required to comparing models that are loaded by YamlUtility/JsonUtility.
+            case Dictionary<object, object> dict:
+                {
+                    comparands.Expectation = dict.ToDictionary(x => (string)x.Key, x => x.Value);
+                    return EquivalencyResult.ContinueWithNext;
+                }
+        }
+
+        // Try to convert `subject` to `expected` type.
+        switch (subject)
+        {
+            case JToken jToken:
+                comparands.Subject = jToken.ToObject(expectedType);
+                return EquivalencyResult.ContinueWithNext;
+
+            case Dictionary<object, object> dict:
+                {
+                    var convertedSubject = dict.ToDictionary(x => (string)x.Key, x => x.Value);
+                    comparands.Subject = convertedSubject;
+                    return EquivalencyResult.ContinueWithNext;
+                }
+        }
+
+        // Use default validation if custom type conversion is not found.
+        // (e.g. NewtonsoftJson deserialize integer as `Int64`. but SystemTextJson try to convert integer value to specific type by using `ObjectToInferredTypesConverter)
+        return EquivalencyResult.ContinueWithNext;
+    }
+}
diff --git a/test/docfx.Tests/SerializationTests/TestData/ApiPage/ApiPage.yml b/test/docfx.Tests/SerializationTests/TestData/ApiPage/ApiPage.yml
new file mode 100644
index 00000000000..b25d28d2265
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/TestData/ApiPage/ApiPage.yml
@@ -0,0 +1,15 @@
+### YamlMime:ApiPage
+title: Class Class1
+body:
+- api1: Class Class1
+  id: BuildFromAssembly_Class1
+  metadata:
+    uid: BuildFromAssembly.Class1
+    commentId: T:BuildFromAssembly.Class1
+languageId: csharp
+metadata:
+  description: This is a test class.
+  listOfString:
+    - aaa
+    - bbb
+    - ccc 
diff --git a/test/docfx.Tests/SerializationTests/TestData/ApiPage/BuildFromAssembly.Class1.yml b/test/docfx.Tests/SerializationTests/TestData/ApiPage/BuildFromAssembly.Class1.yml
new file mode 100644
index 00000000000..6311af13cfa
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/TestData/ApiPage/BuildFromAssembly.Class1.yml
@@ -0,0 +1,57 @@
+### YamlMime:ApiPage
+title: Class Class1
+body:
+- api1: Class Class1
+  id: BuildFromAssembly_Class1
+  metadata:
+    uid: BuildFromAssembly.Class1
+    commentId: T:BuildFromAssembly.Class1
+- facts:
+  - name: Namespace
+    value:
+      text: BuildFromAssembly
+      url: BuildFromAssembly.html
+  - name: Assembly
+    value: BuildFromAssembly.dll
+- markdown: This is a test class.
+- code: public class Class1
+- h4: Inheritance
+- inheritance:
+  - text: object
+    url: https://learn.microsoft.com/dotnet/api/system.object
+  - text: Class1
+    url: BuildFromAssembly.Class1.html
+- h4: Inherited Members
+- list:
+  - text: object.GetType()
+    url: https://learn.microsoft.com/dotnet/api/system.object.gettype
+  - text: object.MemberwiseClone()
+    url: https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone
+  - text: object.ToString()
+    url: https://learn.microsoft.com/dotnet/api/system.object.tostring
+  - text: object.Equals(object?)
+    url: https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)
+  - text: object.Equals(object?, object?)
+    url: https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)
+  - text: object.ReferenceEquals(object?, object?)
+    url: https://learn.microsoft.com/dotnet/api/system.object.referenceequals
+  - text: object.GetHashCode()
+    url: https://learn.microsoft.com/dotnet/api/system.object.gethashcode
+- h2: Constructors
+- api3: Class1()
+  id: BuildFromAssembly_Class1__ctor
+  metadata:
+    uid: BuildFromAssembly.Class1.#ctor
+    commentId: M:BuildFromAssembly.Class1.#ctor
+- code: public Class1()
+- h2: Methods
+- api3: HelloWorld()
+  id: BuildFromAssembly_Class1_HelloWorld
+  metadata:
+    uid: BuildFromAssembly.Class1.HelloWorld
+    commentId: M:BuildFromAssembly.Class1.HelloWorld
+- markdown: Hello World.
+- code: public static void HelloWorld()
+languageId: csharp
+metadata:
+  description: This is a test class.
diff --git a/test/docfx.Tests/SerializationTests/TestData/ApiPage/BuildFromAssembly.Issue5432.yml b/test/docfx.Tests/SerializationTests/TestData/ApiPage/BuildFromAssembly.Issue5432.yml
new file mode 100644
index 00000000000..969ab4f0858
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/TestData/ApiPage/BuildFromAssembly.Issue5432.yml
@@ -0,0 +1,43 @@
+### YamlMime:ApiPage
+title: Struct Issue5432
+body:
+- api1: Struct Issue5432
+  id: BuildFromAssembly_Issue5432
+  metadata:
+    uid: BuildFromAssembly.Issue5432
+    commentId: T:BuildFromAssembly.Issue5432
+- facts:
+  - name: Namespace
+    value:
+      text: BuildFromAssembly
+      url: BuildFromAssembly.html
+  - name: Assembly
+    value: BuildFromAssembly.dll
+- code: public struct Issue5432
+- h4: Inherited Members
+- list:
+  - text: object.GetType()
+    url: https://learn.microsoft.com/dotnet/api/system.object.gettype
+  - text: object.ToString()
+    url: https://learn.microsoft.com/dotnet/api/system.object.tostring
+  - text: object.Equals(object?)
+    url: https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)
+  - text: object.Equals(object?, object?)
+    url: https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)
+  - text: object.ReferenceEquals(object?, object?)
+    url: https://learn.microsoft.com/dotnet/api/system.object.referenceequals
+  - text: object.GetHashCode()
+    url: https://learn.microsoft.com/dotnet/api/system.object.gethashcode
+- h2: Properties
+- api3: Name
+  id: BuildFromAssembly_Issue5432_Name
+  metadata:
+    uid: BuildFromAssembly.Issue5432.Name
+    commentId: P:BuildFromAssembly.Issue5432.Name
+- code: public string Name { get; }
+- h4: Property Value
+- parameters:
+  - type:
+    - text: string
+      url: https://learn.microsoft.com/dotnet/api/system.string
+languageId: csharp
diff --git a/test/docfx.Tests/SerializationTests/TestData/ApiPage/BuildFromProject.Class1.Issue8696Attribute.yml b/test/docfx.Tests/SerializationTests/TestData/ApiPage/BuildFromProject.Class1.Issue8696Attribute.yml
new file mode 100644
index 00000000000..5ac63efdba0
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/TestData/ApiPage/BuildFromProject.Class1.Issue8696Attribute.yml
@@ -0,0 +1,165 @@
+### YamlMime:ApiPage
+title: Class Class1.Issue8696Attribute
+body:
+- api1: Class Class1.Issue8696Attribute
+  id: BuildFromProject_Class1_Issue8696Attribute
+  preview: "[DOCFX001](https://example.org/DOCFX001): 'BuildFromProject.Class1.Issue8696Attribute' is for evaluation purposes only and is subject to change or removal in future updates."
+  src: https://github.com/dotnet/docfx/blob/main/samples/seed/dotnet/project/Project/Class1.cs#L126
+  metadata:
+    uid: BuildFromProject.Class1.Issue8696Attribute
+    commentId: T:BuildFromProject.Class1.Issue8696Attribute
+- facts:
+  - name: Namespace
+    value:
+      text: BuildFromProject
+      url: BuildFromProject.html
+  - name: Assembly
+    value: BuildFromProject.dll
+- code: 'public class Class1.Issue8696Attribute : Attribute'
+- h4: Inheritance
+- inheritance:
+  - text: object
+    url: https://learn.microsoft.com/dotnet/api/system.object
+  - text: Attribute
+    url: https://learn.microsoft.com/dotnet/api/system.attribute
+  - text: Class1.Issue8696Attribute
+    url: BuildFromProject.Class1.Issue8696Attribute.html
+- h4: Inherited Members
+- list:
+  - text: Attribute.Equals(object?)
+    url: https://learn.microsoft.com/dotnet/api/system.attribute.equals
+  - text: Attribute.GetCustomAttribute(Assembly, Type)
+    url: https://learn.microsoft.com/dotnet/api/system.attribute.getcustomattribute#system-attribute-getcustomattribute(system-reflection-assembly-system-type)
+  - text: Attribute.GetCustomAttribute(Assembly, Type, bool)
+    url: https://learn.microsoft.com/dotnet/api/system.attribute.getcustomattribute#system-attribute-getcustomattribute(system-reflection-assembly-system-type-system-boolean)
+  - text: Attribute.GetCustomAttribute(MemberInfo, Type)
+    url: https://learn.microsoft.com/dotnet/api/system.attribute.getcustomattribute#system-attribute-getcustomattribute(system-reflection-memberinfo-system-type)
+  - text: Attribute.GetCustomAttribute(MemberInfo, Type, bool)
+    url: https://learn.microsoft.com/dotnet/api/system.attribute.getcustomattribute#system-attribute-getcustomattribute(system-reflection-memberinfo-system-type-system-boolean)
+  - text: Attribute.GetCustomAttribute(Module, Type)
+    url: https://learn.microsoft.com/dotnet/api/system.attribute.getcustomattribute#system-attribute-getcustomattribute(system-reflection-module-system-type)
+  - text: Attribute.GetCustomAttribute(Module, Type, bool)
+    url: https://learn.microsoft.com/dotnet/api/system.attribute.getcustomattribute#system-attribute-getcustomattribute(system-reflection-module-system-type-system-boolean)
+  - text: Attribute.GetCustomAttribute(ParameterInfo, Type)
+    url: https://learn.microsoft.com/dotnet/api/system.attribute.getcustomattribute#system-attribute-getcustomattribute(system-reflection-parameterinfo-system-type)
+  - text: Attribute.GetCustomAttribute(ParameterInfo, Type, bool)
+    url: https://learn.microsoft.com/dotnet/api/system.attribute.getcustomattribute#system-attribute-getcustomattribute(system-reflection-parameterinfo-system-type-system-boolean)
+  - text: Attribute.GetCustomAttributes(Assembly)
+    url: https://learn.microsoft.com/dotnet/api/system.attribute.getcustomattributes#system-attribute-getcustomattributes(system-reflection-assembly)
+  - text: Attribute.GetCustomAttributes(Assembly, bool)
+    url: https://learn.microsoft.com/dotnet/api/system.attribute.getcustomattributes#system-attribute-getcustomattributes(system-reflection-assembly-system-boolean)
+  - text: Attribute.GetCustomAttributes(Assembly, Type)
+    url: https://learn.microsoft.com/dotnet/api/system.attribute.getcustomattributes#system-attribute-getcustomattributes(system-reflection-assembly-system-type)
+  - text: Attribute.GetCustomAttributes(Assembly, Type, bool)
+    url: https://learn.microsoft.com/dotnet/api/system.attribute.getcustomattributes#system-attribute-getcustomattributes(system-reflection-assembly-system-type-system-boolean)
+  - text: Attribute.GetCustomAttributes(MemberInfo)
+    url: https://learn.microsoft.com/dotnet/api/system.attribute.getcustomattributes#system-attribute-getcustomattributes(system-reflection-memberinfo)
+  - text: Attribute.GetCustomAttributes(MemberInfo, bool)
+    url: https://learn.microsoft.com/dotnet/api/system.attribute.getcustomattributes#system-attribute-getcustomattributes(system-reflection-memberinfo-system-boolean)
+  - text: Attribute.GetCustomAttributes(MemberInfo, Type)
+    url: https://learn.microsoft.com/dotnet/api/system.attribute.getcustomattributes#system-attribute-getcustomattributes(system-reflection-memberinfo-system-type)
+  - text: Attribute.GetCustomAttributes(MemberInfo, Type, bool)
+    url: https://learn.microsoft.com/dotnet/api/system.attribute.getcustomattributes#system-attribute-getcustomattributes(system-reflection-memberinfo-system-type-system-boolean)
+  - text: Attribute.GetCustomAttributes(Module)
+    url: https://learn.microsoft.com/dotnet/api/system.attribute.getcustomattributes#system-attribute-getcustomattributes(system-reflection-module)
+  - text: Attribute.GetCustomAttributes(Module, bool)
+    url: https://learn.microsoft.com/dotnet/api/system.attribute.getcustomattributes#system-attribute-getcustomattributes(system-reflection-module-system-boolean)
+  - text: Attribute.GetCustomAttributes(Module, Type)
+    url: https://learn.microsoft.com/dotnet/api/system.attribute.getcustomattributes#system-attribute-getcustomattributes(system-reflection-module-system-type)
+  - text: Attribute.GetCustomAttributes(Module, Type, bool)
+    url: https://learn.microsoft.com/dotnet/api/system.attribute.getcustomattributes#system-attribute-getcustomattributes(system-reflection-module-system-type-system-boolean)
+  - text: Attribute.GetCustomAttributes(ParameterInfo)
+    url: https://learn.microsoft.com/dotnet/api/system.attribute.getcustomattributes#system-attribute-getcustomattributes(system-reflection-parameterinfo)
+  - text: Attribute.GetCustomAttributes(ParameterInfo, bool)
+    url: https://learn.microsoft.com/dotnet/api/system.attribute.getcustomattributes#system-attribute-getcustomattributes(system-reflection-parameterinfo-system-boolean)
+  - text: Attribute.GetCustomAttributes(ParameterInfo, Type)
+    url: https://learn.microsoft.com/dotnet/api/system.attribute.getcustomattributes#system-attribute-getcustomattributes(system-reflection-parameterinfo-system-type)
+  - text: Attribute.GetCustomAttributes(ParameterInfo, Type, bool)
+    url: https://learn.microsoft.com/dotnet/api/system.attribute.getcustomattributes#system-attribute-getcustomattributes(system-reflection-parameterinfo-system-type-system-boolean)
+  - text: Attribute.GetHashCode()
+    url: https://learn.microsoft.com/dotnet/api/system.attribute.gethashcode
+  - text: Attribute.IsDefaultAttribute()
+    url: https://learn.microsoft.com/dotnet/api/system.attribute.isdefaultattribute
+  - text: Attribute.IsDefined(Assembly, Type)
+    url: https://learn.microsoft.com/dotnet/api/system.attribute.isdefined#system-attribute-isdefined(system-reflection-assembly-system-type)
+  - text: Attribute.IsDefined(Assembly, Type, bool)
+    url: https://learn.microsoft.com/dotnet/api/system.attribute.isdefined#system-attribute-isdefined(system-reflection-assembly-system-type-system-boolean)
+  - text: Attribute.IsDefined(MemberInfo, Type)
+    url: https://learn.microsoft.com/dotnet/api/system.attribute.isdefined#system-attribute-isdefined(system-reflection-memberinfo-system-type)
+  - text: Attribute.IsDefined(MemberInfo, Type, bool)
+    url: https://learn.microsoft.com/dotnet/api/system.attribute.isdefined#system-attribute-isdefined(system-reflection-memberinfo-system-type-system-boolean)
+  - text: Attribute.IsDefined(Module, Type)
+    url: https://learn.microsoft.com/dotnet/api/system.attribute.isdefined#system-attribute-isdefined(system-reflection-module-system-type)
+  - text: Attribute.IsDefined(Module, Type, bool)
+    url: https://learn.microsoft.com/dotnet/api/system.attribute.isdefined#system-attribute-isdefined(system-reflection-module-system-type-system-boolean)
+  - text: Attribute.IsDefined(ParameterInfo, Type)
+    url: https://learn.microsoft.com/dotnet/api/system.attribute.isdefined#system-attribute-isdefined(system-reflection-parameterinfo-system-type)
+  - text: Attribute.IsDefined(ParameterInfo, Type, bool)
+    url: https://learn.microsoft.com/dotnet/api/system.attribute.isdefined#system-attribute-isdefined(system-reflection-parameterinfo-system-type-system-boolean)
+  - text: Attribute.Match(object?)
+    url: https://learn.microsoft.com/dotnet/api/system.attribute.match
+  - text: Attribute.TypeId
+    url: https://learn.microsoft.com/dotnet/api/system.attribute.typeid
+  - text: object.Equals(object?)
+    url: https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)
+  - text: object.Equals(object?, object?)
+    url: https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)
+  - text: object.GetHashCode()
+    url: https://learn.microsoft.com/dotnet/api/system.object.gethashcode
+  - text: object.GetType()
+    url: https://learn.microsoft.com/dotnet/api/system.object.gettype
+  - text: object.MemberwiseClone()
+    url: https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone
+  - text: object.ReferenceEquals(object?, object?)
+    url: https://learn.microsoft.com/dotnet/api/system.object.referenceequals
+  - text: object.ToString()
+    url: https://learn.microsoft.com/dotnet/api/system.object.tostring
+- h2: Constructors
+- api3: Issue8696Attribute(string?, int, int, string[]?, bool, Type?)
+  id: BuildFromProject_Class1_Issue8696Attribute__ctor_System_String_System_Int32_System_Int32_System_String___System_Boolean_System_Type_
+  src: https://github.com/dotnet/docfx/blob/main/samples/seed/dotnet/project/Project/Class1.cs#L128
+  metadata:
+    uid: BuildFromProject.Class1.Issue8696Attribute.#ctor(System.String,System.Int32,System.Int32,System.String[],System.Boolean,System.Type)
+    commentId: M:BuildFromProject.Class1.Issue8696Attribute.#ctor(System.String,System.Int32,System.Int32,System.String[],System.Boolean,System.Type)
+- code: >-
+    [Class1.Issue8696("Changes the name of the server in the server list", 0, 0, null, false, null)]
+
+    public Issue8696Attribute(string? description = null, int boundsMin = 0, int boundsMax = 0, string[]? validGameModes = null, bool hasMultipleSelections = false, Type? enumType = null)
+- h4: Parameters
+- parameters:
+  - name: description
+    type:
+    - text: string
+      url: https://learn.microsoft.com/dotnet/api/system.string
+    - '?'
+    optional: true
+  - name: boundsMin
+    type:
+    - text: int
+      url: https://learn.microsoft.com/dotnet/api/system.int32
+    optional: true
+  - name: boundsMax
+    type:
+    - text: int
+      url: https://learn.microsoft.com/dotnet/api/system.int32
+    optional: true
+  - name: validGameModes
+    type:
+    - text: string
+      url: https://learn.microsoft.com/dotnet/api/system.string
+    - '['
+    - ']'
+    - '?'
+    optional: true
+  - name: hasMultipleSelections
+    type:
+    - text: bool
+      url: https://learn.microsoft.com/dotnet/api/system.boolean
+    optional: true
+  - name: enumType
+    type:
+    - text: Type
+      url: https://learn.microsoft.com/dotnet/api/system.type
+    - '?'
+    optional: true
+languageId: csharp
diff --git a/test/docfx.Tests/SerializationTests/TestData/BuildJsonConfig/buildJsonConfig_01.json b/test/docfx.Tests/SerializationTests/TestData/BuildJsonConfig/buildJsonConfig_01.json
new file mode 100644
index 00000000000..b19b965c390
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/TestData/BuildJsonConfig/buildJsonConfig_01.json
@@ -0,0 +1,41 @@
+{
+  "content": [
+    {
+      "files": [ "**/*.{md,yml}" ],
+      "exclude": [ "_site/**", "obj/**" ]
+    }
+  ],
+  "resource": [
+    {
+      "files": [ "**/images/**", "**/media/**", "codesnippet/**" ],
+      "exclude": [ "_site/**", "obj/**" ]
+    }
+  ],
+  "postProcessors": [ "ExtractSearchIndex" ],
+  "globalMetadata": {
+    "_appTitle": "docfx",
+    "_appName": "docfx",
+    "_appFooter": "<span>Supported by the <a href=\"https://dotnetfoundation.org\">.NET Foundation</a>. Made with <a href=\"https://dotnet.github.io/docfx\">docfx</a></span>",
+    "_googleAnalyticsTagId": "G-Q5N6XJHEX5",
+    "pdf": true
+  },
+  "markdownEngineProperties": {
+    "alerts": {
+      "TODO": "alert alert-secondary"
+    }
+  },
+  "sitemap": {
+    "baseUrl": "https://dotnet.github.io/docfx",
+    "priority": 0.5,
+    "changefreq": "daily"
+  },
+  "xref": [
+    "../.xrefmap.json"
+  ],
+  "output": "_site",
+  "template": [
+    "default",
+    "modern",
+    "template"
+  ]
+}
diff --git a/test/docfx.Tests/SerializationTests/TestData/ConfigFilterRule/filterconfig_01.yml b/test/docfx.Tests/SerializationTests/TestData/ConfigFilterRule/filterconfig_01.yml
new file mode 100644
index 00000000000..1a87d980800
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/TestData/ConfigFilterRule/filterconfig_01.yml
@@ -0,0 +1,15 @@
+apiRules:
+- exclude:
+    uidRegex: Test1
+    hasAttribute:
+      ctorArguments:
+      - System.ComponentModel.EditorBrowsableState.Never
+      ctorNamedArguments: {}
+- exclude:
+    uidRegex: Test2
+    type: Type, Member
+    hasAttribute:
+      ctorArguments:
+      - System.ComponentModel.EditorBrowsableState.Never
+      ctorNamedArguments: {}
+attributeRules: []
diff --git a/test/docfx.Tests/SerializationTests/TestData/ConfigFilterRule/filterconfig_02.yml b/test/docfx.Tests/SerializationTests/TestData/ConfigFilterRule/filterconfig_02.yml
new file mode 100644
index 00000000000..82428825030
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/TestData/ConfigFilterRule/filterconfig_02.yml
@@ -0,0 +1,79 @@
+apiRules:
+- exclude:
+    hasAttribute:
+      uid: System.ComponentModel.EditorBrowsableAttribute
+      ctorArguments:
+      - System.ComponentModel.EditorBrowsableState.Never
+attributeRules:
+- exclude:
+    uidRegex: ^System\.ComponentModel\.Design$
+    type: Namespace
+- exclude:
+    uidRegex: ^System\.ComponentModel\.Design\.Serialization$
+    type: Namespace
+- exclude:
+    uidRegex: ^System\.Xml\.Serialization$
+    type: Namespace
+- exclude:
+    uidRegex: ^System\.Web\.Compilation$
+    type: Namespace
+- exclude:
+    uidRegex: ^System\.Runtime\.Versioning$
+    type: Namespace
+- exclude:
+    uidRegex: ^System\.Runtime\.ConstrainedExecution$
+    type: Namespace
+- exclude:
+    uidRegex: ^System\.EnterpriseServices$
+    type: Namespace
+- exclude:
+    uidRegex: ^System\.Diagnostics\.CodeAnalysis$
+    type: Namespace
+- include:
+    uidRegex: ^System\.Diagnostics\.(ConditionalAttribute|EventLogPermissionAttribute|PerformanceCounterPermissionAttribute)$
+    type: Type
+- exclude:
+    uidRegex: '^System\.Diagnostics\.[^.]+$'
+    type: Type
+- include:
+    uidRegex: ^System\.ComponentModel\.(BindableAttribute|BrowsableAttribute|ComplexBindingPropertiesAttribute|DataObjectAttribute|DefaultBindingPropertyAttribute|ListBindableAttribute|LookupBindingPropertiesAttribute|SettingsBindableAttribute|TypeConverterAttribute)$
+    type: Type
+- exclude:
+    uidRegex: '^System\.ComponentModel\.[^.]+$'
+    type: Type
+- exclude:
+    uidRegex: ^System\.Reflection\.DefaultMemberAttribute$
+    type: Type
+- exclude:
+    uidRegex: ^System\.CodeDom\.Compiler\.GeneratedCodeAttribute$
+    type: Type
+- include:
+    uidRegex: ^System\.Runtime\.CompilerServices\.ExtensionAttribute$
+    type: Type
+- exclude:
+    uidRegex: '^System\.Runtime\.CompilerServices\.[^.]+$'
+    type: Type
+- include:
+    uidRegex: ^System\.Runtime\.InteropServices\.(ComVisibleAttribute|GuidAttribute|ClassInterfaceAttribute|InterfaceTypeAttribute)$
+    type: Type
+- exclude:
+    uidRegex: '^System\.Runtime\.InteropServices\.[^.]+$'
+    type: Type
+- include:
+    uidRegex: ^System\.Security\.(SecurityCriticalAttribute|SecurityTreatAsSafeAttribute|AllowPartiallyTrustedCallersAttribute)$
+    type: Type
+- exclude:
+    uidRegex: '^System\.Security\.[^.]+$'
+    type: Type
+- include:
+    uidRegex: ^System\.Web\.UI\.(ControlValuePropertyAttribute|PersistenceModeAttribute|ValidationPropertyAttribute|WebResourceAttribute|TemplateContainerAttribute|ThemeableAttribute|TemplateInstanceAttribute)$
+    type: Type
+- exclude:
+    uidRegex: '^System\.Web\.UI\.[^.]+$'
+    type: Type
+- include:
+    uidRegex: ^System\.Windows\.Markup\.(ConstructorArgumentAttribute|DesignerSerializationOptionsAttribute|ValueSerializerAttribute|XmlnsCompatibleWithAttribute|XmlnsDefinitionAttribute|XmlnsPrefixAttribute)$
+    type: Type
+- exclude:
+    uidRegex: '^System\.Windows\.Markup\.[^.]+$'
+    type: Type
diff --git a/test/docfx.Tests/SerializationTests/TestData/DocfxConfig/docfx_01.json b/test/docfx.Tests/SerializationTests/TestData/DocfxConfig/docfx_01.json
new file mode 100644
index 00000000000..93a5158b8db
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/TestData/DocfxConfig/docfx_01.json
@@ -0,0 +1,58 @@
+{
+  "metadata": [
+    {
+      "src": [
+        {
+          "files": [
+            "src/Docfx.App/*.csproj",
+            "src/Docfx.Dotnet/*.csproj"
+          ],
+          "src": "../"
+        }
+      ],
+      "dest": "api",
+      "outputFormat": "apiPage"
+    }
+  ],
+  "build": {
+    "content": [
+      {
+        "files": [ "**/*.{md,yml}" ],
+        "exclude": [ "_site/**", "obj/**" ]
+      }
+    ],
+    "resource": [
+      {
+        "files": [ "**/images/**", "**/media/**", "codesnippet/**" ],
+        "exclude": [ "_site/**", "obj/**" ]
+      }
+    ],
+    "postProcessors": [ "ExtractSearchIndex" ],
+    "globalMetadata": {
+      "_appTitle": "docfx",
+      "_appName": "docfx",
+      "_appFooter": "<span>Supported by the <a href=\"https://dotnetfoundation.org\">.NET Foundation</a>. Made with <a href=\"https://dotnet.github.io/docfx\">docfx</a></span>",
+      "_googleAnalyticsTagId": "G-Q5N6XJHEX5",
+      "pdf": true
+    },
+    "markdownEngineProperties": {
+      "alerts": {
+        "TODO": "alert alert-secondary"
+      }
+    },
+    "sitemap": {
+      "baseUrl": "https://dotnet.github.io/docfx",
+      "priority": 0.5,
+      "changefreq": "daily"
+    },
+    "xref": [
+      "../.xrefmap.json"
+    ], 
+    "output": "_site",
+    "template": [
+      "default",
+      "modern",
+      "template"
+    ]
+  }
+}
diff --git a/test/docfx.Tests/SerializationTests/TestData/DocfxConfig/docfx_02.json b/test/docfx.Tests/SerializationTests/TestData/DocfxConfig/docfx_02.json
new file mode 100644
index 00000000000..67b546abf8c
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/TestData/DocfxConfig/docfx_02.json
@@ -0,0 +1,99 @@
+{
+  "metadata": [
+    {
+      "src": [
+        {
+          "files": [
+            "assembly/bin/**/*.dll",
+            "project/**/*.csproj",
+            "solution/**/*.sln",
+            "csharp/**/*.cs",
+            "vb/**/*.vb"
+          ],
+          "exclude": [
+            "project/Project.Core/**"
+          ],
+          "src": "dotnet"
+        }
+      ],
+      "namespaceLayout": "nested",
+      "enumSortOrder": "declaringOrder",
+      "output": "obj/api"
+    },
+    {
+      "src": [
+        {
+          "files": [
+            "assembly/bin/**/*.dll",
+            "project/**/*.csproj",
+            "solution/**/*.sln",
+            "csharp/**/*.cs",
+            "vb/**/*.vb"
+          ],
+          "exclude": [
+            "project/Project.Core/**"
+          ],
+          "src": "dotnet"
+        }
+      ],
+      "namespaceLayout": "nested",
+      "enumSortOrder": "declaringOrder",
+      "outputFormat": "markdown",
+      "output": "obj/md"
+    },
+    {
+      "src": [
+        {
+          "files": [
+            "assembly/bin/**/*.dll",
+            "project/**/*.csproj",
+            "solution/**/*.sln",
+            "csharp/**/*.cs",
+            "vb/**/*.vb"
+          ],
+          "exclude": [
+            "project/Project.Core/**"
+          ],
+          "src": "dotnet"
+        }
+      ],
+      "namespaceLayout": "nested",
+      "enumSortOrder": "declaringOrder",
+      "outputFormat": "apiPage",
+      "output": "obj/apipage"
+    }
+  ],
+  "build": {
+    "content": [
+      { "files": [ "**/*.yml" ], "src": "obj/api", "dest": "api" },
+      { "files": [ "**" ], "src": "obj/md", "dest": "md" },
+      { "files": [ "**" ], "src": "obj/apipage", "dest": "apipage" },
+      { "files": [ "articles/**/*.{md,yml}", "*.md", "toc.yml", "restapi/**" ] },
+      { "files": [ "pdf/**" ] }
+    ],
+    "resource": [
+      {
+        "files": [ "articles/images/**"]
+      }
+    ],
+    "overwrite": "specs/*.md",
+    "globalMetadata": {
+      "_appTitle": "docfx seed website",
+      "_appName": "Seed",
+      "_enableSearch": true,
+      "pdf": true,
+      "pdfTocPage": true
+    },
+    "output": "_site",
+    "exportViewModel": true,
+    "template": ["default", "modern", "template"],
+    "markdownEngineProperties": {
+      "alerts": {
+        "TODO": "alert alert-secondary"
+      }
+    }
+  },
+  "rules": {
+    "InvalidCref": "info"
+  }
+}
diff --git a/test/docfx.Tests/SerializationTests/TestData/FileMapping/filemapping_01.json b/test/docfx.Tests/SerializationTests/TestData/FileMapping/filemapping_01.json
new file mode 100644
index 00000000000..2aa6ab80d60
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/TestData/FileMapping/filemapping_01.json
@@ -0,0 +1,20 @@
+{
+  "name": "dummy",
+  "files": [
+    "**/*.{md,yml}"
+  ],
+  "exclude": [
+    "_site/**",
+    "obj/**"
+  ],
+  "src": "./src",
+  "dest": "./dest",
+  "group": "dummy",
+  "rootTocPath": "dummy",
+  "case": true,
+  "noNegate": true,
+  "noExpand": true,
+  "noEscape": true,
+  "noGlobStar": false,
+  "dot": true
+}
diff --git a/test/docfx.Tests/SerializationTests/TestData/FileMapping/filemapping_02.json b/test/docfx.Tests/SerializationTests/TestData/FileMapping/filemapping_02.json
new file mode 100644
index 00000000000..e172e7ceeff
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/TestData/FileMapping/filemapping_02.json
@@ -0,0 +1 @@
+"file1.md"
diff --git a/test/docfx.Tests/SerializationTests/TestData/FileMapping/filemapping_03.json b/test/docfx.Tests/SerializationTests/TestData/FileMapping/filemapping_03.json
new file mode 100644
index 00000000000..953c04c8d0d
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/TestData/FileMapping/filemapping_03.json
@@ -0,0 +1,27 @@
+[
+  {
+    "files": [ "file1", "file2" ],
+    "dest": "dest1"
+  },
+  {
+    "files": "file3",
+    "dest": "dest2"
+  },
+  {
+    "files": [ "file4", "file5" ],
+    "exclude": "file5",
+    "src": "folder1"
+  },
+  {
+    "files": "Example.yml",
+    "src": "v1.0",
+    "dest": "v1.0/api",
+    "group": "v1.0"
+  },
+  {
+    "files": "Example.yml",
+    "src": "v2.0",
+    "dest": "v2.0/api",
+    "group": "v2.0"
+  }
+]
diff --git a/test/docfx.Tests/SerializationTests/TestData/FileMapping/filemapping_04.json b/test/docfx.Tests/SerializationTests/TestData/FileMapping/filemapping_04.json
new file mode 100644
index 00000000000..0fc18dba71a
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/TestData/FileMapping/filemapping_04.json
@@ -0,0 +1,40 @@
+{
+  "content": [
+    // Object form
+    {
+      "files": [ "file1", "file2" ],
+      "dest": "dest1"
+    },
+    // Compact Form
+    "file1.md",
+    "file2.md",
+    // Array Form
+    [
+      {
+        "files": [ "file1", "file2" ],
+        "dest": "dest1"
+      },
+      {
+        "files": "file3",
+        "dest": "dest2"
+      },
+      {
+        "files": [ "file4", "file5" ],
+        "exclude": [ "file5" ],
+        "src": "folder1"
+      },
+      {
+        "files": "Example.yml",
+        "src": "v1.0",
+        "dest": "v1.0/api",
+        "group": "v1.0"
+      },
+      {
+        "files": "Example.yml",
+        "src": "v2.0",
+        "dest": "v2.0/api",
+        "group": "v2.0"
+      }
+    ]
+  ]
+}
diff --git a/test/docfx.Tests/SerializationTests/TestData/FileMapping/filemapping_05.json b/test/docfx.Tests/SerializationTests/TestData/FileMapping/filemapping_05.json
new file mode 100644
index 00000000000..a9f44c517a3
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/TestData/FileMapping/filemapping_05.json
@@ -0,0 +1,7 @@
+[
+  "reference1.dll",
+  {
+    "files": [ "reference2.dll", "reference3.dll" ]
+  },
+  "reference4.dll"
+]
diff --git a/test/docfx.Tests/SerializationTests/TestData/FileMetadataPairs/fileMetadataPairs_01.json b/test/docfx.Tests/SerializationTests/TestData/FileMetadataPairs/fileMetadataPairs_01.json
new file mode 100644
index 00000000000..2dcfd01fbad
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/TestData/FileMetadataPairs/fileMetadataPairs_01.json
@@ -0,0 +1,28 @@
+{
+  "priority": {
+    "**.md": 2.5,
+    "spec/**.md": 3
+  },
+  "keywords": {
+    "obj/docfx/**": [
+      "API",
+      "Reference"
+    ],
+    "spec/**.md": [
+      "Spec",
+      "Conceptual"
+    ]
+  },
+  "_noindex": {
+    "articles/**/article.md": true
+  },
+  "others": {
+    "nested": {
+      "null": null,
+      "val": "dummy",
+      "datetime": "2024-01-01:T00:00:00",
+      "double": 1.2345,
+      "array": [ 1, 2, 3, 4 ]
+    }
+  }
+}
diff --git a/test/docfx.Tests/SerializationTests/TestData/ListWithStringFallback/ListWithStringFallback_01.json b/test/docfx.Tests/SerializationTests/TestData/ListWithStringFallback/ListWithStringFallback_01.json
new file mode 100644
index 00000000000..8521b1ecad9
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/TestData/ListWithStringFallback/ListWithStringFallback_01.json
@@ -0,0 +1 @@
+"string_item1"
diff --git a/test/docfx.Tests/SerializationTests/TestData/ListWithStringFallback/ListWithStringFallback_02.json b/test/docfx.Tests/SerializationTests/TestData/ListWithStringFallback/ListWithStringFallback_02.json
new file mode 100644
index 00000000000..55cc205d5ca
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/TestData/ListWithStringFallback/ListWithStringFallback_02.json
@@ -0,0 +1,5 @@
+[
+  "array_item_01",
+  "array_item_02",
+  "array_item_03"
+]
diff --git a/test/docfx.Tests/SerializationTests/TestData/ListWithStringFallback/ListWithStringFallback_03.json b/test/docfx.Tests/SerializationTests/TestData/ListWithStringFallback/ListWithStringFallback_03.json
new file mode 100644
index 00000000000..acfbfaa25ed
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/TestData/ListWithStringFallback/ListWithStringFallback_03.json
@@ -0,0 +1,5 @@
+{
+  "object_item_01": "1",
+  "object_item_02": "2",
+  "object_item_03": "3"
+}
diff --git a/test/docfx.Tests/SerializationTests/TestData/ManagedReference/BuildFromAssembly.yml b/test/docfx.Tests/SerializationTests/TestData/ManagedReference/BuildFromAssembly.yml
new file mode 100644
index 00000000000..99b16874956
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/TestData/ManagedReference/BuildFromAssembly.yml
@@ -0,0 +1,32 @@
+### YamlMime:ManagedReference
+items:
+- uid: BuildFromAssembly
+  commentId: N:BuildFromAssembly
+  id: BuildFromAssembly
+  children:
+  - BuildFromAssembly.Class1
+  - BuildFromAssembly.Issue5432
+  langs:
+  - csharp
+  - vb
+  name: BuildFromAssembly
+  nameWithType: BuildFromAssembly
+  fullName: BuildFromAssembly
+  type: Namespace
+  assemblies:
+  - BuildFromAssembly
+references:
+- uid: BuildFromAssembly.Class1
+  commentId: T:BuildFromAssembly.Class1
+  isExternal: true
+  href: BuildFromAssembly.Class1.html
+  name: Class1
+  nameWithType: Class1
+  fullName: BuildFromAssembly.Class1
+- uid: BuildFromAssembly.Issue5432
+  commentId: T:BuildFromAssembly.Issue5432
+  isExternal: true
+  href: BuildFromAssembly.Issue5432.html
+  name: Issue5432
+  nameWithType: Issue5432
+  fullName: BuildFromAssembly.Issue5432
diff --git a/test/docfx.Tests/SerializationTests/TestData/ManagedReference/BuildFromCSharpSourceCode.CSharp.yml b/test/docfx.Tests/SerializationTests/TestData/ManagedReference/BuildFromCSharpSourceCode.CSharp.yml
new file mode 100644
index 00000000000..cd06419191c
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/TestData/ManagedReference/BuildFromCSharpSourceCode.CSharp.yml
@@ -0,0 +1,340 @@
+### YamlMime:ManagedReference
+items:
+- uid: BuildFromCSharpSourceCode.CSharp
+  commentId: T:BuildFromCSharpSourceCode.CSharp
+  id: CSharp
+  parent: BuildFromCSharpSourceCode
+  children:
+  - BuildFromCSharpSourceCode.CSharp.Main(System.String[])
+  langs:
+  - csharp
+  - vb
+  name: CSharp
+  nameWithType: CSharp
+  fullName: BuildFromCSharpSourceCode.CSharp
+  type: Class
+  source:
+    remote:
+      path: samples/seed/dotnet/csharp/CSharp.cs
+      branch: main
+      repo: https://github.com/dotnet/docfx
+    id: CSharp
+    path: dotnet/csharp/CSharp.cs
+    startLine: 7
+  namespace: BuildFromCSharpSourceCode
+  syntax:
+    content: public class CSharp
+    content.vb: Public Class CSharp
+  inheritance:
+  - System.Object
+  inheritedMembers:
+  - System.Object.Equals(System.Object)
+  - System.Object.Equals(System.Object,System.Object)
+  - System.Object.GetHashCode
+  - System.Object.GetType
+  - System.Object.MemberwiseClone
+  - System.Object.ReferenceEquals(System.Object,System.Object)
+  - System.Object.ToString
+- uid: BuildFromCSharpSourceCode.CSharp.Main(System.String[])
+  commentId: M:BuildFromCSharpSourceCode.CSharp.Main(System.String[])
+  id: Main(System.String[])
+  parent: BuildFromCSharpSourceCode.CSharp
+  langs:
+  - csharp
+  - vb
+  name: Main(string[])
+  nameWithType: CSharp.Main(string[])
+  fullName: BuildFromCSharpSourceCode.CSharp.Main(string[])
+  type: Method
+  source:
+    remote:
+      path: samples/seed/dotnet/csharp/CSharp.cs
+      branch: main
+      repo: https://github.com/dotnet/docfx
+    id: Main
+    path: dotnet/csharp/CSharp.cs
+    startLine: 9
+  namespace: BuildFromCSharpSourceCode
+  syntax:
+    content: public static void Main(string[] args)
+    parameters:
+    - id: args
+      type: System.String[]
+    content.vb: Public Shared Sub Main(args As String())
+  overload: BuildFromCSharpSourceCode.CSharp.Main*
+  nameWithType.vb: CSharp.Main(String())
+  fullName.vb: BuildFromCSharpSourceCode.CSharp.Main(String())
+  name.vb: Main(String())
+references:
+- uid: BuildFromCSharpSourceCode
+  commentId: N:BuildFromCSharpSourceCode
+  href: BuildFromCSharpSourceCode.html
+  name: BuildFromCSharpSourceCode
+  nameWithType: BuildFromCSharpSourceCode
+  fullName: BuildFromCSharpSourceCode
+- uid: System.Object
+  commentId: T:System.Object
+  parent: System
+  isExternal: true
+  href: https://learn.microsoft.com/dotnet/api/system.object
+  name: object
+  nameWithType: object
+  fullName: object
+  nameWithType.vb: Object
+  fullName.vb: Object
+  name.vb: Object
+- uid: System.Object.Equals(System.Object)
+  commentId: M:System.Object.Equals(System.Object)
+  parent: System.Object
+  isExternal: true
+  href: https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)
+  name: Equals(object)
+  nameWithType: object.Equals(object)
+  fullName: object.Equals(object)
+  nameWithType.vb: Object.Equals(Object)
+  fullName.vb: Object.Equals(Object)
+  name.vb: Equals(Object)
+  spec.csharp:
+  - uid: System.Object.Equals(System.Object)
+    name: Equals
+    isExternal: true
+    href: https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)
+  - name: (
+  - uid: System.Object
+    name: object
+    isExternal: true
+    href: https://learn.microsoft.com/dotnet/api/system.object
+  - name: )
+  spec.vb:
+  - uid: System.Object.Equals(System.Object)
+    name: Equals
+    isExternal: true
+    href: https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)
+  - name: (
+  - uid: System.Object
+    name: Object
+    isExternal: true
+    href: https://learn.microsoft.com/dotnet/api/system.object
+  - name: )
+- uid: System.Object.Equals(System.Object,System.Object)
+  commentId: M:System.Object.Equals(System.Object,System.Object)
+  parent: System.Object
+  isExternal: true
+  href: https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)
+  name: Equals(object, object)
+  nameWithType: object.Equals(object, object)
+  fullName: object.Equals(object, object)
+  nameWithType.vb: Object.Equals(Object, Object)
+  fullName.vb: Object.Equals(Object, Object)
+  name.vb: Equals(Object, Object)
+  spec.csharp:
+  - uid: System.Object.Equals(System.Object,System.Object)
+    name: Equals
+    isExternal: true
+    href: https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)
+  - name: (
+  - uid: System.Object
+    name: object
+    isExternal: true
+    href: https://learn.microsoft.com/dotnet/api/system.object
+  - name: ','
+  - name: " "
+  - uid: System.Object
+    name: object
+    isExternal: true
+    href: https://learn.microsoft.com/dotnet/api/system.object
+  - name: )
+  spec.vb:
+  - uid: System.Object.Equals(System.Object,System.Object)
+    name: Equals
+    isExternal: true
+    href: https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)
+  - name: (
+  - uid: System.Object
+    name: Object
+    isExternal: true
+    href: https://learn.microsoft.com/dotnet/api/system.object
+  - name: ','
+  - name: " "
+  - uid: System.Object
+    name: Object
+    isExternal: true
+    href: https://learn.microsoft.com/dotnet/api/system.object
+  - name: )
+- uid: System.Object.GetHashCode
+  commentId: M:System.Object.GetHashCode
+  parent: System.Object
+  isExternal: true
+  href: https://learn.microsoft.com/dotnet/api/system.object.gethashcode
+  name: GetHashCode()
+  nameWithType: object.GetHashCode()
+  fullName: object.GetHashCode()
+  nameWithType.vb: Object.GetHashCode()
+  fullName.vb: Object.GetHashCode()
+  spec.csharp:
+  - uid: System.Object.GetHashCode
+    name: GetHashCode
+    isExternal: true
+    href: https://learn.microsoft.com/dotnet/api/system.object.gethashcode
+  - name: (
+  - name: )
+  spec.vb:
+  - uid: System.Object.GetHashCode
+    name: GetHashCode
+    isExternal: true
+    href: https://learn.microsoft.com/dotnet/api/system.object.gethashcode
+  - name: (
+  - name: )
+- uid: System.Object.GetType
+  commentId: M:System.Object.GetType
+  parent: System.Object
+  isExternal: true
+  href: https://learn.microsoft.com/dotnet/api/system.object.gettype
+  name: GetType()
+  nameWithType: object.GetType()
+  fullName: object.GetType()
+  nameWithType.vb: Object.GetType()
+  fullName.vb: Object.GetType()
+  spec.csharp:
+  - uid: System.Object.GetType
+    name: GetType
+    isExternal: true
+    href: https://learn.microsoft.com/dotnet/api/system.object.gettype
+  - name: (
+  - name: )
+  spec.vb:
+  - uid: System.Object.GetType
+    name: GetType
+    isExternal: true
+    href: https://learn.microsoft.com/dotnet/api/system.object.gettype
+  - name: (
+  - name: )
+- uid: System.Object.MemberwiseClone
+  commentId: M:System.Object.MemberwiseClone
+  parent: System.Object
+  isExternal: true
+  href: https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone
+  name: MemberwiseClone()
+  nameWithType: object.MemberwiseClone()
+  fullName: object.MemberwiseClone()
+  nameWithType.vb: Object.MemberwiseClone()
+  fullName.vb: Object.MemberwiseClone()
+  spec.csharp:
+  - uid: System.Object.MemberwiseClone
+    name: MemberwiseClone
+    isExternal: true
+    href: https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone
+  - name: (
+  - name: )
+  spec.vb:
+  - uid: System.Object.MemberwiseClone
+    name: MemberwiseClone
+    isExternal: true
+    href: https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone
+  - name: (
+  - name: )
+- uid: System.Object.ReferenceEquals(System.Object,System.Object)
+  commentId: M:System.Object.ReferenceEquals(System.Object,System.Object)
+  parent: System.Object
+  isExternal: true
+  href: https://learn.microsoft.com/dotnet/api/system.object.referenceequals
+  name: ReferenceEquals(object, object)
+  nameWithType: object.ReferenceEquals(object, object)
+  fullName: object.ReferenceEquals(object, object)
+  nameWithType.vb: Object.ReferenceEquals(Object, Object)
+  fullName.vb: Object.ReferenceEquals(Object, Object)
+  name.vb: ReferenceEquals(Object, Object)
+  spec.csharp:
+  - uid: System.Object.ReferenceEquals(System.Object,System.Object)
+    name: ReferenceEquals
+    isExternal: true
+    href: https://learn.microsoft.com/dotnet/api/system.object.referenceequals
+  - name: (
+  - uid: System.Object
+    name: object
+    isExternal: true
+    href: https://learn.microsoft.com/dotnet/api/system.object
+  - name: ','
+  - name: " "
+  - uid: System.Object
+    name: object
+    isExternal: true
+    href: https://learn.microsoft.com/dotnet/api/system.object
+  - name: )
+  spec.vb:
+  - uid: System.Object.ReferenceEquals(System.Object,System.Object)
+    name: ReferenceEquals
+    isExternal: true
+    href: https://learn.microsoft.com/dotnet/api/system.object.referenceequals
+  - name: (
+  - uid: System.Object
+    name: Object
+    isExternal: true
+    href: https://learn.microsoft.com/dotnet/api/system.object
+  - name: ','
+  - name: " "
+  - uid: System.Object
+    name: Object
+    isExternal: true
+    href: https://learn.microsoft.com/dotnet/api/system.object
+  - name: )
+- uid: System.Object.ToString
+  commentId: M:System.Object.ToString
+  parent: System.Object
+  isExternal: true
+  href: https://learn.microsoft.com/dotnet/api/system.object.tostring
+  name: ToString()
+  nameWithType: object.ToString()
+  fullName: object.ToString()
+  nameWithType.vb: Object.ToString()
+  fullName.vb: Object.ToString()
+  spec.csharp:
+  - uid: System.Object.ToString
+    name: ToString
+    isExternal: true
+    href: https://learn.microsoft.com/dotnet/api/system.object.tostring
+  - name: (
+  - name: )
+  spec.vb:
+  - uid: System.Object.ToString
+    name: ToString
+    isExternal: true
+    href: https://learn.microsoft.com/dotnet/api/system.object.tostring
+  - name: (
+  - name: )
+- uid: System
+  commentId: N:System
+  isExternal: true
+  href: https://learn.microsoft.com/dotnet/api/system
+  name: System
+  nameWithType: System
+  fullName: System
+- uid: BuildFromCSharpSourceCode.CSharp.Main*
+  commentId: Overload:BuildFromCSharpSourceCode.CSharp.Main
+  href: BuildFromCSharpSourceCode.CSharp.html#BuildFromCSharpSourceCode_CSharp_Main_System_String___
+  name: Main
+  nameWithType: CSharp.Main
+  fullName: BuildFromCSharpSourceCode.CSharp.Main
+- uid: System.String[]
+  isExternal: true
+  href: https://learn.microsoft.com/dotnet/api/system.string
+  name: string[]
+  nameWithType: string[]
+  fullName: string[]
+  nameWithType.vb: String()
+  fullName.vb: String()
+  name.vb: String()
+  spec.csharp:
+  - uid: System.String
+    name: string
+    isExternal: true
+    href: https://learn.microsoft.com/dotnet/api/system.string
+  - name: '['
+  - name: ']'
+  spec.vb:
+  - uid: System.String
+    name: String
+    isExternal: true
+    href: https://learn.microsoft.com/dotnet/api/system.string
+  - name: (
+  - name: )
diff --git a/test/docfx.Tests/SerializationTests/TestData/ManagedReference/api.yml b/test/docfx.Tests/SerializationTests/TestData/ManagedReference/api.yml
new file mode 100644
index 00000000000..91ba59c1bd1
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/TestData/ManagedReference/api.yml
@@ -0,0 +1,23 @@
+### YamlMime:ManagedReference
+items:
+- uid: dummy1
+  source:
+    remote:
+      path: dummy1.cs
+      branch: main
+      repo: https://github.com/dotnet/docfx
+- uid: dummy2
+  source:
+    remote:
+      path: dummy2.cs
+      branch: main
+      repo: https://github.com/dotnet/docfx
+references:
+  - uid: System.String
+    name: string
+    isExternal: true
+    href: https://learn.microsoft.com/dotnet/api/system.string
+shouldSkipMarkup: false
+memberLayout: separatePages
+additionalMetadata1: 1
+additionalMetadata2: 2
diff --git a/test/docfx.Tests/SerializationTests/TestData/Manifest/manifest_01.json b/test/docfx.Tests/SerializationTests/TestData/Manifest/manifest_01.json
new file mode 100644
index 00000000000..23d0025b4cf
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/TestData/Manifest/manifest_01.json
@@ -0,0 +1,1159 @@
+{
+  "sitemap": {
+    "baseUrl": "https://dotnet.github.io/docfx/",
+    "changefreq": "daily",
+    "priority": 0.5
+  },
+  "source_base_path": "/docs",
+  "xrefmap": "xrefmap.yml",
+  "files": [
+    {
+      "type": "Resource",
+      "output": {
+        "resource": {
+          "relative_path": "index.json"
+        }
+      }
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "api/Docfx.BuildOptions.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/Docfx.BuildOptions.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "api/Docfx.DataContracts.ManagedReference.AdditionalNotes.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/Docfx.DataContracts.ManagedReference.AdditionalNotes.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "api/Docfx.DataContracts.ManagedReference.ApiParameter.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/Docfx.DataContracts.ManagedReference.ApiParameter.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "api/Docfx.DataContracts.ManagedReference.ArgumentInfo.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/Docfx.DataContracts.ManagedReference.ArgumentInfo.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "api/Docfx.DataContracts.ManagedReference.AttributeInfo.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/Docfx.DataContracts.ManagedReference.AttributeInfo.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "api/Docfx.DataContracts.ManagedReference.ExceptionInfo.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/Docfx.DataContracts.ManagedReference.ExceptionInfo.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "api/Docfx.DataContracts.ManagedReference.LinkInfo.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/Docfx.DataContracts.ManagedReference.LinkInfo.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "api/Docfx.DataContracts.ManagedReference.LinkType.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/Docfx.DataContracts.ManagedReference.LinkType.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "api/Docfx.DataContracts.ManagedReference.MemberType.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/Docfx.DataContracts.ManagedReference.MemberType.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "api/Docfx.DataContracts.ManagedReference.NamedArgumentInfo.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/Docfx.DataContracts.ManagedReference.NamedArgumentInfo.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "api/Docfx.DataContracts.ManagedReference.PageViewModel.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/Docfx.DataContracts.ManagedReference.PageViewModel.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "api/Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "api/Docfx.DataContracts.ManagedReference.SyntaxLanguage.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/Docfx.DataContracts.ManagedReference.SyntaxLanguage.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "api/Docfx.DataContracts.ManagedReference.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/Docfx.DataContracts.ManagedReference.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "api/Docfx.Docset.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/Docfx.Docset.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "api/Docfx.Dotnet.DotnetApiCatalog.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/Docfx.Dotnet.DotnetApiCatalog.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "api/Docfx.Dotnet.DotnetApiOptions.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/Docfx.Dotnet.DotnetApiOptions.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "api/Docfx.Dotnet.SymbolIncludeState.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/Docfx.Dotnet.SymbolIncludeState.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "api/Docfx.Dotnet.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/Docfx.Dotnet.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "api/Docfx.MemberLayout.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/Docfx.MemberLayout.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "api/Docfx.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/Docfx.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Toc",
+      "source_relative_path": "api/toc.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/toc.html"
+        },
+        ".json": {
+          "relative_path": "api/toc.json"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Resource",
+      "source_relative_path": "codesnippet/Rtf/Hyperlink/RtfDocumentProcessor.cs",
+      "output": {
+        "resource": {
+          "relative_path": "codesnippet/Rtf/Hyperlink/RtfDocumentProcessor.cs"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Resource",
+      "source_relative_path": "codesnippet/Rtf/RtfBuildStep.cs",
+      "output": {
+        "resource": {
+          "relative_path": "codesnippet/Rtf/RtfBuildStep.cs"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Resource",
+      "source_relative_path": "codesnippet/Rtf/RtfDocumentProcessor.cs",
+      "output": {
+        "resource": {
+          "relative_path": "codesnippet/Rtf/RtfDocumentProcessor.cs"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "docs/additional-languages.md",
+      "output": {
+        ".html": {
+          "relative_path": "docs/additional-languages.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ApiPage",
+      "source_relative_path": "docs/api-page.yml",
+      "output": {
+        ".html": {
+          "relative_path": "docs/api-page.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "docs/basic-concepts.md",
+      "output": {
+        ".html": {
+          "relative_path": "docs/basic-concepts.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "docs/config.md",
+      "output": {
+        ".html": {
+          "relative_path": "docs/config.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "docs/dotnet-api-docs.md",
+      "output": {
+        ".html": {
+          "relative_path": "docs/dotnet-api-docs.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "docs/dotnet-yaml-format.md",
+      "output": {
+        ".html": {
+          "relative_path": "docs/dotnet-yaml-format.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "docs/links-and-cross-references.md",
+      "output": {
+        ".html": {
+          "relative_path": "docs/links-and-cross-references.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "docs/markdown.md",
+      "output": {
+        ".html": {
+          "relative_path": "docs/markdown.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Resource",
+      "source_relative_path": "docs/media/Program.cs",
+      "output": {
+        "resource": {
+          "relative_path": "docs/media/Program.cs"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Resource",
+      "source_relative_path": "docs/media/pdf-cover-page.png",
+      "output": {
+        "resource": {
+          "relative_path": "docs/media/pdf-cover-page.png"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Resource",
+      "source_relative_path": "docs/media/pdf-toc-page.png",
+      "output": {
+        "resource": {
+          "relative_path": "docs/media/pdf-toc-page.png"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "docs/pdf.md",
+      "output": {
+        ".html": {
+          "relative_path": "docs/pdf.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "docs/rest-api-docs.md",
+      "output": {
+        ".html": {
+          "relative_path": "docs/rest-api-docs.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "docs/table-of-contents.md",
+      "output": {
+        ".html": {
+          "relative_path": "docs/table-of-contents.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "docs/template.md",
+      "output": {
+        ".html": {
+          "relative_path": "docs/template.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Toc",
+      "source_relative_path": "docs/toc.yml",
+      "output": {
+        ".html": {
+          "relative_path": "docs/toc.html"
+        },
+        ".json": {
+          "relative_path": "docs/toc.json"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Resource",
+      "source_relative_path": "extensions/images/cake-contrib-addin-large.png",
+      "output": {
+        "resource": {
+          "relative_path": "extensions/images/cake-contrib-addin-large.png"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Resource",
+      "source_relative_path": "extensions/images/darkfx.screenshot.png",
+      "output": {
+        "resource": {
+          "relative_path": "extensions/images/darkfx.screenshot.png"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Resource",
+      "source_relative_path": "extensions/images/default.green.screenshot.png",
+      "output": {
+        "resource": {
+          "relative_path": "extensions/images/default.green.screenshot.png"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Resource",
+      "source_relative_path": "extensions/images/default.screenshot.png",
+      "output": {
+        "resource": {
+          "relative_path": "extensions/images/default.screenshot.png"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Resource",
+      "source_relative_path": "extensions/images/discordfx.screenshot.png",
+      "output": {
+        "resource": {
+          "relative_path": "extensions/images/discordfx.screenshot.png"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Resource",
+      "source_relative_path": "extensions/images/docfx.plantuml.plugin.screenshot.png",
+      "output": {
+        "resource": {
+          "relative_path": "extensions/images/docfx.plantuml.plugin.screenshot.png"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Resource",
+      "source_relative_path": "extensions/images/docfxquickstart.screenshot.png",
+      "output": {
+        "resource": {
+          "relative_path": "extensions/images/docfxquickstart.screenshot.png"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Resource",
+      "source_relative_path": "extensions/images/docfxtocgenerator.screenshot.png",
+      "output": {
+        "resource": {
+          "relative_path": "extensions/images/docfxtocgenerator.screenshot.png"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Resource",
+      "source_relative_path": "extensions/images/doclanguagetranslator.screenshot.png",
+      "output": {
+        "resource": {
+          "relative_path": "extensions/images/doclanguagetranslator.screenshot.png"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Resource",
+      "source_relative_path": "extensions/images/doclinkchecker.screenshot.png",
+      "output": {
+        "resource": {
+          "relative_path": "extensions/images/doclinkchecker.screenshot.png"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Resource",
+      "source_relative_path": "extensions/images/material.screenshot.png",
+      "output": {
+        "resource": {
+          "relative_path": "extensions/images/material.screenshot.png"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Resource",
+      "source_relative_path": "extensions/images/mathew.screenshot.png",
+      "output": {
+        "resource": {
+          "relative_path": "extensions/images/mathew.screenshot.png"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Resource",
+      "source_relative_path": "extensions/images/memberpage.default.screenshot.png",
+      "output": {
+        "resource": {
+          "relative_path": "extensions/images/memberpage.default.screenshot.png"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Resource",
+      "source_relative_path": "extensions/images/minimal.screenshot.png",
+      "output": {
+        "resource": {
+          "relative_path": "extensions/images/minimal.screenshot.png"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Resource",
+      "source_relative_path": "extensions/images/modern.screenshot.png",
+      "output": {
+        "resource": {
+          "relative_path": "extensions/images/modern.screenshot.png"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Resource",
+      "source_relative_path": "extensions/images/rest.operationpage.default.screenshot.png",
+      "output": {
+        "resource": {
+          "relative_path": "extensions/images/rest.operationpage.default.screenshot.png"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Resource",
+      "source_relative_path": "extensions/images/rest.tagpage.default.screenshot.png",
+      "output": {
+        "resource": {
+          "relative_path": "extensions/images/rest.tagpage.default.screenshot.png"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Resource",
+      "source_relative_path": "extensions/images/roel4ez-feather.screenshot.png",
+      "output": {
+        "resource": {
+          "relative_path": "extensions/images/roel4ez-feather.screenshot.png"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Resource",
+      "source_relative_path": "extensions/images/roel4ez-modal.screenshot.png",
+      "output": {
+        "resource": {
+          "relative_path": "extensions/images/roel4ez-modal.screenshot.png"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Resource",
+      "source_relative_path": "extensions/images/singulinkfx.screenshot.png",
+      "output": {
+        "resource": {
+          "relative_path": "extensions/images/singulinkfx.screenshot.png"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Resource",
+      "source_relative_path": "extensions/images/unityfx.png",
+      "output": {
+        "resource": {
+          "relative_path": "extensions/images/unityfx.png"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "dashboard",
+      "source_relative_path": "extensions/packages.yml",
+      "output": {
+        ".html": {
+          "relative_path": "extensions/packages.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "dashboard",
+      "source_relative_path": "extensions/templates.yml",
+      "output": {
+        ".html": {
+          "relative_path": "extensions/templates.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Toc",
+      "source_relative_path": "extensions/toc.yml",
+      "output": {
+        ".html": {
+          "relative_path": "extensions/toc.html"
+        },
+        ".json": {
+          "relative_path": "extensions/toc.json"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "dashboard",
+      "source_relative_path": "extensions/tools.yml",
+      "output": {
+        ".html": {
+          "relative_path": "extensions/tools.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Resource",
+      "source_relative_path": "images/output-example.png",
+      "output": {
+        "resource": {
+          "relative_path": "images/output-example.png"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "index.md",
+      "output": {
+        ".html": {
+          "relative_path": "index.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "reference/docfx-cli-reference/docfx-build.md",
+      "output": {
+        ".html": {
+          "relative_path": "reference/docfx-cli-reference/docfx-build.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "reference/docfx-cli-reference/docfx-download.md",
+      "output": {
+        ".html": {
+          "relative_path": "reference/docfx-cli-reference/docfx-download.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "reference/docfx-cli-reference/docfx-init.md",
+      "output": {
+        ".html": {
+          "relative_path": "reference/docfx-cli-reference/docfx-init.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "reference/docfx-cli-reference/docfx-merge.md",
+      "output": {
+        ".html": {
+          "relative_path": "reference/docfx-cli-reference/docfx-merge.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "reference/docfx-cli-reference/docfx-metadata.md",
+      "output": {
+        ".html": {
+          "relative_path": "reference/docfx-cli-reference/docfx-metadata.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "reference/docfx-cli-reference/docfx-pdf.md",
+      "output": {
+        ".html": {
+          "relative_path": "reference/docfx-cli-reference/docfx-pdf.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "reference/docfx-cli-reference/docfx-serve.md",
+      "output": {
+        ".html": {
+          "relative_path": "reference/docfx-cli-reference/docfx-serve.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "reference/docfx-cli-reference/docfx-template.md",
+      "output": {
+        ".html": {
+          "relative_path": "reference/docfx-cli-reference/docfx-template.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "reference/docfx-cli-reference/docfx.md",
+      "output": {
+        ".html": {
+          "relative_path": "reference/docfx-cli-reference/docfx.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "reference/docfx-cli-reference/overview.md",
+      "output": {
+        ".html": {
+          "relative_path": "reference/docfx-cli-reference/overview.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Toc",
+      "source_relative_path": "reference/docfx-cli-reference/toc.yml",
+      "output": {
+        ".html": {
+          "relative_path": "reference/docfx-cli-reference/toc.html"
+        },
+        ".json": {
+          "relative_path": "reference/docfx-cli-reference/toc.json"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "reference/docfx-environment-variables-reference.md",
+      "output": {
+        ".html": {
+          "relative_path": "reference/docfx-environment-variables-reference.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "reference/docfx-json-reference.md",
+      "output": {
+        ".html": {
+          "relative_path": "reference/docfx-json-reference.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "spec/docfx_document_schema.md",
+      "output": {
+        ".html": {
+          "relative_path": "spec/docfx_document_schema.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Redirection",
+      "source_relative_path": "spec/docfx_flavored_markdown.md",
+      "output": {
+        ".html": {
+          "relative_path": "spec/docfx_flavored_markdown.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Resource",
+      "source_relative_path": "spec/images/docfx_workflow.png",
+      "output": {
+        "resource": {
+          "relative_path": "spec/images/docfx_workflow.png"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Resource",
+      "source_relative_path": "spec/images/docfx_workflow.vsdx",
+      "output": {
+        "resource": {
+          "relative_path": "spec/images/docfx_workflow.vsdx"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Resource",
+      "source_relative_path": "spec/images/docfx_workflow_highlevel.png",
+      "output": {
+        "resource": {
+          "relative_path": "spec/images/docfx_workflow_highlevel.png"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Resource",
+      "source_relative_path": "spec/images/sdp_workflow.png",
+      "output": {
+        "resource": {
+          "relative_path": "spec/images/sdp_workflow.png"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Redirection",
+      "source_relative_path": "spec/metadata_dotnet_spec.md",
+      "output": {
+        ".html": {
+          "relative_path": "spec/metadata_dotnet_spec.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "spec/metadata_format_spec.md",
+      "output": {
+        ".html": {
+          "relative_path": "spec/metadata_format_spec.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "spec/sdp_design_spec.md",
+      "output": {
+        ".html": {
+          "relative_path": "spec/sdp_design_spec.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Redirection",
+      "source_relative_path": "spec/triple_slash_comments_spec.md",
+      "output": {
+        ".html": {
+          "relative_path": "spec/triple_slash_comments_spec.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Toc",
+      "source_relative_path": "toc.yml",
+      "output": {
+        ".html": {
+          "relative_path": "toc.html"
+        },
+        ".json": {
+          "relative_path": "toc.json"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "tutorial/advanced_support_hyperlink.md",
+      "output": {
+        ".html": {
+          "relative_path": "tutorial/advanced_support_hyperlink.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Redirection",
+      "source_relative_path": "tutorial/docfx_getting_started.md",
+      "output": {
+        ".html": {
+          "relative_path": "tutorial/docfx_getting_started.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "tutorial/howto_add_a_customized_post_processor.md",
+      "output": {
+        ".html": {
+          "relative_path": "tutorial/howto_add_a_customized_post_processor.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "tutorial/howto_build_your_own_type_of_documentation_with_custom_plug-in.md",
+      "output": {
+        ".html": {
+          "relative_path": "tutorial/howto_build_your_own_type_of_documentation_with_custom_plug-in.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "tutorial/howto_create_custom_template.md",
+      "output": {
+        ".html": {
+          "relative_path": "tutorial/howto_create_custom_template.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Redirection",
+      "source_relative_path": "tutorial/howto_filter_out_unwanted_apis_attributes.md",
+      "output": {
+        ".html": {
+          "relative_path": "tutorial/howto_filter_out_unwanted_apis_attributes.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Resource",
+      "source_relative_path": "tutorial/images/simple_web_page.png",
+      "output": {
+        "resource": {
+          "relative_path": "tutorial/images/simple_web_page.png"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Resource",
+      "source_relative_path": "tutorial/images/toc_web_page.png",
+      "output": {
+        "resource": {
+          "relative_path": "tutorial/images/toc_web_page.png"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Resource",
+      "source_relative_path": "tutorial/images/web_page_with_extra_property.png",
+      "output": {
+        "resource": {
+          "relative_path": "tutorial/images/web_page_with_extra_property.png"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "tutorial/intro_overwrite_files.md",
+      "output": {
+        ".html": {
+          "relative_path": "tutorial/intro_overwrite_files.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Redirection",
+      "source_relative_path": "tutorial/intro_rest_api_documentation.md",
+      "output": {
+        ".html": {
+          "relative_path": "tutorial/intro_rest_api_documentation.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "tutorial/intro_template.md",
+      "output": {
+        ".html": {
+          "relative_path": "tutorial/intro_template.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Redirection",
+      "source_relative_path": "tutorial/intro_toc.md",
+      "output": {
+        ".html": {
+          "relative_path": "tutorial/intro_toc.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Redirection",
+      "source_relative_path": "tutorial/links_and_cross_references.md",
+      "output": {
+        ".html": {
+          "relative_path": "tutorial/links_and_cross_references.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Redirection",
+      "source_relative_path": "tutorial/walkthrough/advanced_walkthrough.md",
+      "output": {
+        ".html": {
+          "relative_path": "tutorial/walkthrough/advanced_walkthrough.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Redirection",
+      "source_relative_path": "tutorial/walkthrough/walkthrough_create_a_docfx_project.md",
+      "output": {
+        ".html": {
+          "relative_path": "tutorial/walkthrough/walkthrough_create_a_docfx_project.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Redirection",
+      "source_relative_path": "tutorial/walkthrough/walkthrough_create_a_docfx_project_2.md",
+      "output": {
+        ".html": {
+          "relative_path": "tutorial/walkthrough/walkthrough_create_a_docfx_project_2.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Redirection",
+      "source_relative_path": "tutorial/walkthrough/walkthrough_generate_pdf.md",
+      "output": {
+        ".html": {
+          "relative_path": "tutorial/walkthrough/walkthrough_generate_pdf.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Redirection",
+      "source_relative_path": "tutorial/walkthrough/walkthrough_overview.md",
+      "output": {
+        ".html": {
+          "relative_path": "tutorial/walkthrough/walkthrough_overview.html"
+        }
+      },
+      "version": ""
+    }
+  ],
+  "groups": [
+    {
+      "xrefmap": "xrefmap.yml"
+    }
+  ]
+}
diff --git a/test/docfx.Tests/SerializationTests/TestData/Manifest/manifest_02.json b/test/docfx.Tests/SerializationTests/TestData/Manifest/manifest_02.json
new file mode 100644
index 00000000000..728195f7656
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/TestData/Manifest/manifest_02.json
@@ -0,0 +1,1860 @@
+{
+  "source_base_path": "C:/Projects/GitHub/filzrev/docfx/samples/seed",
+  "xrefmap": "xrefmap.yml",
+  "files": [
+    {
+      "type": "Resource",
+      "output": {
+        "resource": {
+          "relative_path": "index.json"
+        }
+      }
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "articles/csharp_coding_standards.md",
+      "output": {
+        ".html": {
+          "relative_path": "articles/csharp_coding_standards.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "articles/docfx_getting_started.md",
+      "output": {
+        ".html": {
+          "relative_path": "articles/docfx_getting_started.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "articles/engineering_guidelines.md",
+      "output": {
+        ".html": {
+          "relative_path": "articles/engineering_guidelines.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Resource",
+      "source_relative_path": "articles/images/seed.jpg",
+      "output": {
+        "resource": {
+          "relative_path": "articles/images/seed.jpg"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "articles/markdown.md",
+      "output": {
+        ".html": {
+          "relative_path": "articles/markdown.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Toc",
+      "source_relative_path": "articles/toc.yml",
+      "output": {
+        ".html": {
+          "relative_path": "articles/toc.html"
+        },
+        ".json": {
+          "relative_path": "articles/toc.json"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "index.md",
+      "output": {
+        ".html": {
+          "relative_path": "index.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "obj/api/BuildFromAssembly.Class1.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/BuildFromAssembly.Class1.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "obj/api/BuildFromAssembly.Issue5432.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/BuildFromAssembly.Issue5432.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "obj/api/BuildFromAssembly.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/BuildFromAssembly.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "obj/api/BuildFromCSharpSourceCode.CSharp.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/BuildFromCSharpSourceCode.CSharp.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "obj/api/BuildFromCSharpSourceCode.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/BuildFromCSharpSourceCode.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "obj/api/BuildFromProject.Class1.IIssue8948.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/BuildFromProject.Class1.IIssue8948.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "obj/api/BuildFromProject.Class1.Issue8665.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/BuildFromProject.Class1.Issue8665.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "obj/api/BuildFromProject.Class1.Issue8696Attribute.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/BuildFromProject.Class1.Issue8696Attribute.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "obj/api/BuildFromProject.Class1.Issue8948.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/BuildFromProject.Class1.Issue8948.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "obj/api/BuildFromProject.Class1.Issue9260.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/BuildFromProject.Class1.Issue9260.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "obj/api/BuildFromProject.Class1.Test-1.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/BuildFromProject.Class1.Test-1.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "obj/api/BuildFromProject.Class1.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/BuildFromProject.Class1.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "obj/api/BuildFromProject.Dog.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/BuildFromProject.Dog.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "obj/api/BuildFromProject.IInheritdoc.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/BuildFromProject.IInheritdoc.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "obj/api/BuildFromProject.Inheritdoc.Issue6366.Class1-1.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/BuildFromProject.Inheritdoc.Issue6366.Class1-1.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "obj/api/BuildFromProject.Inheritdoc.Issue6366.Class2.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/BuildFromProject.Inheritdoc.Issue6366.Class2.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "obj/api/BuildFromProject.Inheritdoc.Issue6366.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/BuildFromProject.Inheritdoc.Issue6366.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "obj/api/BuildFromProject.Inheritdoc.Issue7035.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/BuildFromProject.Inheritdoc.Issue7035.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "obj/api/BuildFromProject.Inheritdoc.Issue7484.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/BuildFromProject.Inheritdoc.Issue7484.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "obj/api/BuildFromProject.Inheritdoc.Issue8101.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/BuildFromProject.Inheritdoc.Issue8101.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "obj/api/BuildFromProject.Inheritdoc.Issue8129.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/BuildFromProject.Inheritdoc.Issue8129.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "obj/api/BuildFromProject.Inheritdoc.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/BuildFromProject.Inheritdoc.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "obj/api/BuildFromProject.Issue8540.A.A.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/BuildFromProject.Issue8540.A.A.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "obj/api/BuildFromProject.Issue8540.A.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/BuildFromProject.Issue8540.A.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "obj/api/BuildFromProject.Issue8540.B.B.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/BuildFromProject.Issue8540.B.B.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "obj/api/BuildFromProject.Issue8540.B.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/BuildFromProject.Issue8540.B.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "obj/api/BuildFromProject.Issue8540.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/BuildFromProject.Issue8540.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "obj/api/BuildFromProject.Issue8725.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/BuildFromProject.Issue8725.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "obj/api/BuildFromProject.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/BuildFromProject.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "obj/api/BuildFromVBSourceCode.BaseClass1.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/BuildFromVBSourceCode.BaseClass1.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "obj/api/BuildFromVBSourceCode.Class1.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/BuildFromVBSourceCode.Class1.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "obj/api/BuildFromVBSourceCode.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/BuildFromVBSourceCode.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "obj/api/CatLibrary.Cat-2.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/CatLibrary.Cat-2.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "obj/api/CatLibrary.CatException-1.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/CatLibrary.CatException-1.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "obj/api/CatLibrary.Complex-2.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/CatLibrary.Complex-2.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "obj/api/CatLibrary.Core.ContainersRefType.ColorType.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/CatLibrary.Core.ContainersRefType.ColorType.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "obj/api/CatLibrary.Core.ContainersRefType.ContainersRefTypeChild.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/CatLibrary.Core.ContainersRefType.ContainersRefTypeChild.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "obj/api/CatLibrary.Core.ContainersRefType.ContainersRefTypeChildInterface.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/CatLibrary.Core.ContainersRefType.ContainersRefTypeChildInterface.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "obj/api/CatLibrary.Core.ContainersRefType.ContainersRefTypeDelegate.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/CatLibrary.Core.ContainersRefType.ContainersRefTypeDelegate.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "obj/api/CatLibrary.Core.ContainersRefType.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/CatLibrary.Core.ContainersRefType.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "obj/api/CatLibrary.Core.ExplicitLayoutClass.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/CatLibrary.Core.ExplicitLayoutClass.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "obj/api/CatLibrary.Core.Issue231.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/CatLibrary.Core.Issue231.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "obj/api/CatLibrary.Core.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/CatLibrary.Core.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "obj/api/CatLibrary.FakeDelegate-1.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/CatLibrary.FakeDelegate-1.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "obj/api/CatLibrary.IAnimal.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/CatLibrary.IAnimal.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "obj/api/CatLibrary.ICat.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/CatLibrary.ICat.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "obj/api/CatLibrary.ICatExtension.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/CatLibrary.ICatExtension.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "obj/api/CatLibrary.MRefDelegate-3.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/CatLibrary.MRefDelegate-3.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "obj/api/CatLibrary.MRefNormalDelegate.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/CatLibrary.MRefNormalDelegate.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "obj/api/CatLibrary.Tom.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/CatLibrary.Tom.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "obj/api/CatLibrary.TomFromBaseClass.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/CatLibrary.TomFromBaseClass.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "obj/api/CatLibrary.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/CatLibrary.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "obj/api/MRef.Demo.Enumeration.ColorType.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/MRef.Demo.Enumeration.ColorType.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "obj/api/MRef.Demo.Enumeration.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/MRef.Demo.Enumeration.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Toc",
+      "source_relative_path": "obj/api/toc.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/toc.html"
+        },
+        ".json": {
+          "relative_path": "api/toc.json"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ApiPage",
+      "source_relative_path": "obj/apipage/BuildFromAssembly.Class1.yml",
+      "output": {
+        ".html": {
+          "relative_path": "apipage/BuildFromAssembly.Class1.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ApiPage",
+      "source_relative_path": "obj/apipage/BuildFromAssembly.Issue5432.yml",
+      "output": {
+        ".html": {
+          "relative_path": "apipage/BuildFromAssembly.Issue5432.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ApiPage",
+      "source_relative_path": "obj/apipage/BuildFromAssembly.yml",
+      "output": {
+        ".html": {
+          "relative_path": "apipage/BuildFromAssembly.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ApiPage",
+      "source_relative_path": "obj/apipage/BuildFromCSharpSourceCode.CSharp.yml",
+      "output": {
+        ".html": {
+          "relative_path": "apipage/BuildFromCSharpSourceCode.CSharp.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ApiPage",
+      "source_relative_path": "obj/apipage/BuildFromCSharpSourceCode.yml",
+      "output": {
+        ".html": {
+          "relative_path": "apipage/BuildFromCSharpSourceCode.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ApiPage",
+      "source_relative_path": "obj/apipage/BuildFromProject.Class1.IIssue8948.yml",
+      "output": {
+        ".html": {
+          "relative_path": "apipage/BuildFromProject.Class1.IIssue8948.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ApiPage",
+      "source_relative_path": "obj/apipage/BuildFromProject.Class1.Issue8665.yml",
+      "output": {
+        ".html": {
+          "relative_path": "apipage/BuildFromProject.Class1.Issue8665.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ApiPage",
+      "source_relative_path": "obj/apipage/BuildFromProject.Class1.Issue8696Attribute.yml",
+      "output": {
+        ".html": {
+          "relative_path": "apipage/BuildFromProject.Class1.Issue8696Attribute.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ApiPage",
+      "source_relative_path": "obj/apipage/BuildFromProject.Class1.Issue8948.yml",
+      "output": {
+        ".html": {
+          "relative_path": "apipage/BuildFromProject.Class1.Issue8948.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ApiPage",
+      "source_relative_path": "obj/apipage/BuildFromProject.Class1.Issue9260.yml",
+      "output": {
+        ".html": {
+          "relative_path": "apipage/BuildFromProject.Class1.Issue9260.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ApiPage",
+      "source_relative_path": "obj/apipage/BuildFromProject.Class1.Test-1.yml",
+      "output": {
+        ".html": {
+          "relative_path": "apipage/BuildFromProject.Class1.Test-1.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ApiPage",
+      "source_relative_path": "obj/apipage/BuildFromProject.Class1.yml",
+      "output": {
+        ".html": {
+          "relative_path": "apipage/BuildFromProject.Class1.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ApiPage",
+      "source_relative_path": "obj/apipage/BuildFromProject.Dog.yml",
+      "output": {
+        ".html": {
+          "relative_path": "apipage/BuildFromProject.Dog.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ApiPage",
+      "source_relative_path": "obj/apipage/BuildFromProject.IInheritdoc.yml",
+      "output": {
+        ".html": {
+          "relative_path": "apipage/BuildFromProject.IInheritdoc.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ApiPage",
+      "source_relative_path": "obj/apipage/BuildFromProject.Inheritdoc.Issue6366.Class1-1.yml",
+      "output": {
+        ".html": {
+          "relative_path": "apipage/BuildFromProject.Inheritdoc.Issue6366.Class1-1.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ApiPage",
+      "source_relative_path": "obj/apipage/BuildFromProject.Inheritdoc.Issue6366.Class2.yml",
+      "output": {
+        ".html": {
+          "relative_path": "apipage/BuildFromProject.Inheritdoc.Issue6366.Class2.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ApiPage",
+      "source_relative_path": "obj/apipage/BuildFromProject.Inheritdoc.Issue6366.yml",
+      "output": {
+        ".html": {
+          "relative_path": "apipage/BuildFromProject.Inheritdoc.Issue6366.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ApiPage",
+      "source_relative_path": "obj/apipage/BuildFromProject.Inheritdoc.Issue7035.yml",
+      "output": {
+        ".html": {
+          "relative_path": "apipage/BuildFromProject.Inheritdoc.Issue7035.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ApiPage",
+      "source_relative_path": "obj/apipage/BuildFromProject.Inheritdoc.Issue7484.yml",
+      "output": {
+        ".html": {
+          "relative_path": "apipage/BuildFromProject.Inheritdoc.Issue7484.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ApiPage",
+      "source_relative_path": "obj/apipage/BuildFromProject.Inheritdoc.Issue8101.yml",
+      "output": {
+        ".html": {
+          "relative_path": "apipage/BuildFromProject.Inheritdoc.Issue8101.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ApiPage",
+      "source_relative_path": "obj/apipage/BuildFromProject.Inheritdoc.Issue8129.yml",
+      "output": {
+        ".html": {
+          "relative_path": "apipage/BuildFromProject.Inheritdoc.Issue8129.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ApiPage",
+      "source_relative_path": "obj/apipage/BuildFromProject.Inheritdoc.yml",
+      "output": {
+        ".html": {
+          "relative_path": "apipage/BuildFromProject.Inheritdoc.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ApiPage",
+      "source_relative_path": "obj/apipage/BuildFromProject.Issue8540.A.A.yml",
+      "output": {
+        ".html": {
+          "relative_path": "apipage/BuildFromProject.Issue8540.A.A.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ApiPage",
+      "source_relative_path": "obj/apipage/BuildFromProject.Issue8540.A.yml",
+      "output": {
+        ".html": {
+          "relative_path": "apipage/BuildFromProject.Issue8540.A.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ApiPage",
+      "source_relative_path": "obj/apipage/BuildFromProject.Issue8540.B.B.yml",
+      "output": {
+        ".html": {
+          "relative_path": "apipage/BuildFromProject.Issue8540.B.B.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ApiPage",
+      "source_relative_path": "obj/apipage/BuildFromProject.Issue8540.B.yml",
+      "output": {
+        ".html": {
+          "relative_path": "apipage/BuildFromProject.Issue8540.B.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ApiPage",
+      "source_relative_path": "obj/apipage/BuildFromProject.Issue8540.yml",
+      "output": {
+        ".html": {
+          "relative_path": "apipage/BuildFromProject.Issue8540.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ApiPage",
+      "source_relative_path": "obj/apipage/BuildFromProject.Issue8725.yml",
+      "output": {
+        ".html": {
+          "relative_path": "apipage/BuildFromProject.Issue8725.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ApiPage",
+      "source_relative_path": "obj/apipage/BuildFromProject.yml",
+      "output": {
+        ".html": {
+          "relative_path": "apipage/BuildFromProject.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ApiPage",
+      "source_relative_path": "obj/apipage/BuildFromVBSourceCode.BaseClass1.yml",
+      "output": {
+        ".html": {
+          "relative_path": "apipage/BuildFromVBSourceCode.BaseClass1.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ApiPage",
+      "source_relative_path": "obj/apipage/BuildFromVBSourceCode.Class1.yml",
+      "output": {
+        ".html": {
+          "relative_path": "apipage/BuildFromVBSourceCode.Class1.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ApiPage",
+      "source_relative_path": "obj/apipage/BuildFromVBSourceCode.yml",
+      "output": {
+        ".html": {
+          "relative_path": "apipage/BuildFromVBSourceCode.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ApiPage",
+      "source_relative_path": "obj/apipage/CatLibrary.Cat-2.yml",
+      "output": {
+        ".html": {
+          "relative_path": "apipage/CatLibrary.Cat-2.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ApiPage",
+      "source_relative_path": "obj/apipage/CatLibrary.CatException-1.yml",
+      "output": {
+        ".html": {
+          "relative_path": "apipage/CatLibrary.CatException-1.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ApiPage",
+      "source_relative_path": "obj/apipage/CatLibrary.Complex-2.yml",
+      "output": {
+        ".html": {
+          "relative_path": "apipage/CatLibrary.Complex-2.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ApiPage",
+      "source_relative_path": "obj/apipage/CatLibrary.Core.ContainersRefType.ColorType.yml",
+      "output": {
+        ".html": {
+          "relative_path": "apipage/CatLibrary.Core.ContainersRefType.ColorType.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ApiPage",
+      "source_relative_path": "obj/apipage/CatLibrary.Core.ContainersRefType.ContainersRefTypeChild.yml",
+      "output": {
+        ".html": {
+          "relative_path": "apipage/CatLibrary.Core.ContainersRefType.ContainersRefTypeChild.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ApiPage",
+      "source_relative_path": "obj/apipage/CatLibrary.Core.ContainersRefType.ContainersRefTypeChildInterface.yml",
+      "output": {
+        ".html": {
+          "relative_path": "apipage/CatLibrary.Core.ContainersRefType.ContainersRefTypeChildInterface.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ApiPage",
+      "source_relative_path": "obj/apipage/CatLibrary.Core.ContainersRefType.ContainersRefTypeDelegate.yml",
+      "output": {
+        ".html": {
+          "relative_path": "apipage/CatLibrary.Core.ContainersRefType.ContainersRefTypeDelegate.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ApiPage",
+      "source_relative_path": "obj/apipage/CatLibrary.Core.ContainersRefType.yml",
+      "output": {
+        ".html": {
+          "relative_path": "apipage/CatLibrary.Core.ContainersRefType.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ApiPage",
+      "source_relative_path": "obj/apipage/CatLibrary.Core.ExplicitLayoutClass.yml",
+      "output": {
+        ".html": {
+          "relative_path": "apipage/CatLibrary.Core.ExplicitLayoutClass.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ApiPage",
+      "source_relative_path": "obj/apipage/CatLibrary.Core.Issue231.yml",
+      "output": {
+        ".html": {
+          "relative_path": "apipage/CatLibrary.Core.Issue231.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ApiPage",
+      "source_relative_path": "obj/apipage/CatLibrary.Core.yml",
+      "output": {
+        ".html": {
+          "relative_path": "apipage/CatLibrary.Core.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ApiPage",
+      "source_relative_path": "obj/apipage/CatLibrary.FakeDelegate-1.yml",
+      "output": {
+        ".html": {
+          "relative_path": "apipage/CatLibrary.FakeDelegate-1.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ApiPage",
+      "source_relative_path": "obj/apipage/CatLibrary.IAnimal.yml",
+      "output": {
+        ".html": {
+          "relative_path": "apipage/CatLibrary.IAnimal.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ApiPage",
+      "source_relative_path": "obj/apipage/CatLibrary.ICat.yml",
+      "output": {
+        ".html": {
+          "relative_path": "apipage/CatLibrary.ICat.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ApiPage",
+      "source_relative_path": "obj/apipage/CatLibrary.ICatExtension.yml",
+      "output": {
+        ".html": {
+          "relative_path": "apipage/CatLibrary.ICatExtension.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ApiPage",
+      "source_relative_path": "obj/apipage/CatLibrary.MRefDelegate-3.yml",
+      "output": {
+        ".html": {
+          "relative_path": "apipage/CatLibrary.MRefDelegate-3.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ApiPage",
+      "source_relative_path": "obj/apipage/CatLibrary.MRefNormalDelegate.yml",
+      "output": {
+        ".html": {
+          "relative_path": "apipage/CatLibrary.MRefNormalDelegate.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ApiPage",
+      "source_relative_path": "obj/apipage/CatLibrary.Tom.yml",
+      "output": {
+        ".html": {
+          "relative_path": "apipage/CatLibrary.Tom.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ApiPage",
+      "source_relative_path": "obj/apipage/CatLibrary.TomFromBaseClass.yml",
+      "output": {
+        ".html": {
+          "relative_path": "apipage/CatLibrary.TomFromBaseClass.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ApiPage",
+      "source_relative_path": "obj/apipage/CatLibrary.yml",
+      "output": {
+        ".html": {
+          "relative_path": "apipage/CatLibrary.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ApiPage",
+      "source_relative_path": "obj/apipage/MRef.Demo.Enumeration.ColorType.yml",
+      "output": {
+        ".html": {
+          "relative_path": "apipage/MRef.Demo.Enumeration.ColorType.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ApiPage",
+      "source_relative_path": "obj/apipage/MRef.Demo.Enumeration.yml",
+      "output": {
+        ".html": {
+          "relative_path": "apipage/MRef.Demo.Enumeration.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ApiPage",
+      "source_relative_path": "obj/apipage/MRef.Demo.yml",
+      "output": {
+        ".html": {
+          "relative_path": "apipage/MRef.Demo.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "ApiPage",
+      "source_relative_path": "obj/apipage/MRef.yml",
+      "output": {
+        ".html": {
+          "relative_path": "apipage/MRef.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Toc",
+      "source_relative_path": "obj/apipage/toc.yml",
+      "output": {
+        ".html": {
+          "relative_path": "apipage/toc.html"
+        },
+        ".json": {
+          "relative_path": "apipage/toc.json"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "obj/md/BuildFromAssembly.Class1.md",
+      "output": {
+        ".html": {
+          "relative_path": "md/BuildFromAssembly.Class1.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "obj/md/BuildFromAssembly.Issue5432.md",
+      "output": {
+        ".html": {
+          "relative_path": "md/BuildFromAssembly.Issue5432.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "obj/md/BuildFromAssembly.md",
+      "output": {
+        ".html": {
+          "relative_path": "md/BuildFromAssembly.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "obj/md/BuildFromCSharpSourceCode.CSharp.md",
+      "output": {
+        ".html": {
+          "relative_path": "md/BuildFromCSharpSourceCode.CSharp.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "obj/md/BuildFromCSharpSourceCode.md",
+      "output": {
+        ".html": {
+          "relative_path": "md/BuildFromCSharpSourceCode.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "obj/md/BuildFromProject.Class1.IIssue8948.md",
+      "output": {
+        ".html": {
+          "relative_path": "md/BuildFromProject.Class1.IIssue8948.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "obj/md/BuildFromProject.Class1.Issue8665.md",
+      "output": {
+        ".html": {
+          "relative_path": "md/BuildFromProject.Class1.Issue8665.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "obj/md/BuildFromProject.Class1.Issue8696Attribute.md",
+      "output": {
+        ".html": {
+          "relative_path": "md/BuildFromProject.Class1.Issue8696Attribute.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "obj/md/BuildFromProject.Class1.Issue8948.md",
+      "output": {
+        ".html": {
+          "relative_path": "md/BuildFromProject.Class1.Issue8948.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "obj/md/BuildFromProject.Class1.Issue9260.md",
+      "output": {
+        ".html": {
+          "relative_path": "md/BuildFromProject.Class1.Issue9260.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "obj/md/BuildFromProject.Class1.Test-1.md",
+      "output": {
+        ".html": {
+          "relative_path": "md/BuildFromProject.Class1.Test-1.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "obj/md/BuildFromProject.Class1.md",
+      "output": {
+        ".html": {
+          "relative_path": "md/BuildFromProject.Class1.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "obj/md/BuildFromProject.Dog.md",
+      "output": {
+        ".html": {
+          "relative_path": "md/BuildFromProject.Dog.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "obj/md/BuildFromProject.IInheritdoc.md",
+      "output": {
+        ".html": {
+          "relative_path": "md/BuildFromProject.IInheritdoc.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "obj/md/BuildFromProject.Inheritdoc.Issue6366.Class1-1.md",
+      "output": {
+        ".html": {
+          "relative_path": "md/BuildFromProject.Inheritdoc.Issue6366.Class1-1.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "obj/md/BuildFromProject.Inheritdoc.Issue6366.Class2.md",
+      "output": {
+        ".html": {
+          "relative_path": "md/BuildFromProject.Inheritdoc.Issue6366.Class2.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "obj/md/BuildFromProject.Inheritdoc.Issue6366.md",
+      "output": {
+        ".html": {
+          "relative_path": "md/BuildFromProject.Inheritdoc.Issue6366.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "obj/md/BuildFromProject.Inheritdoc.Issue7035.md",
+      "output": {
+        ".html": {
+          "relative_path": "md/BuildFromProject.Inheritdoc.Issue7035.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "obj/md/BuildFromProject.Inheritdoc.Issue7484.md",
+      "output": {
+        ".html": {
+          "relative_path": "md/BuildFromProject.Inheritdoc.Issue7484.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "obj/md/BuildFromProject.Inheritdoc.Issue8101.md",
+      "output": {
+        ".html": {
+          "relative_path": "md/BuildFromProject.Inheritdoc.Issue8101.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "obj/md/BuildFromProject.Inheritdoc.Issue8129.md",
+      "output": {
+        ".html": {
+          "relative_path": "md/BuildFromProject.Inheritdoc.Issue8129.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "obj/md/BuildFromProject.Inheritdoc.md",
+      "output": {
+        ".html": {
+          "relative_path": "md/BuildFromProject.Inheritdoc.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "obj/md/BuildFromProject.Issue8540.A.A.md",
+      "output": {
+        ".html": {
+          "relative_path": "md/BuildFromProject.Issue8540.A.A.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "obj/md/BuildFromProject.Issue8540.A.md",
+      "output": {
+        ".html": {
+          "relative_path": "md/BuildFromProject.Issue8540.A.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "obj/md/BuildFromProject.Issue8540.B.B.md",
+      "output": {
+        ".html": {
+          "relative_path": "md/BuildFromProject.Issue8540.B.B.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "obj/md/BuildFromProject.Issue8540.B.md",
+      "output": {
+        ".html": {
+          "relative_path": "md/BuildFromProject.Issue8540.B.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "obj/md/BuildFromProject.Issue8540.md",
+      "output": {
+        ".html": {
+          "relative_path": "md/BuildFromProject.Issue8540.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "obj/md/BuildFromProject.Issue8725.md",
+      "output": {
+        ".html": {
+          "relative_path": "md/BuildFromProject.Issue8725.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "obj/md/BuildFromProject.md",
+      "output": {
+        ".html": {
+          "relative_path": "md/BuildFromProject.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "obj/md/BuildFromVBSourceCode.BaseClass1.md",
+      "output": {
+        ".html": {
+          "relative_path": "md/BuildFromVBSourceCode.BaseClass1.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "obj/md/BuildFromVBSourceCode.Class1.md",
+      "output": {
+        ".html": {
+          "relative_path": "md/BuildFromVBSourceCode.Class1.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "obj/md/BuildFromVBSourceCode.md",
+      "output": {
+        ".html": {
+          "relative_path": "md/BuildFromVBSourceCode.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "obj/md/CatLibrary.Cat-2.md",
+      "output": {
+        ".html": {
+          "relative_path": "md/CatLibrary.Cat-2.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "obj/md/CatLibrary.CatException-1.md",
+      "output": {
+        ".html": {
+          "relative_path": "md/CatLibrary.CatException-1.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "obj/md/CatLibrary.Complex-2.md",
+      "output": {
+        ".html": {
+          "relative_path": "md/CatLibrary.Complex-2.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "obj/md/CatLibrary.Core.ContainersRefType.ColorType.md",
+      "output": {
+        ".html": {
+          "relative_path": "md/CatLibrary.Core.ContainersRefType.ColorType.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "obj/md/CatLibrary.Core.ContainersRefType.ContainersRefTypeChild.md",
+      "output": {
+        ".html": {
+          "relative_path": "md/CatLibrary.Core.ContainersRefType.ContainersRefTypeChild.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "obj/md/CatLibrary.Core.ContainersRefType.ContainersRefTypeChildInterface.md",
+      "output": {
+        ".html": {
+          "relative_path": "md/CatLibrary.Core.ContainersRefType.ContainersRefTypeChildInterface.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "obj/md/CatLibrary.Core.ContainersRefType.ContainersRefTypeDelegate.md",
+      "output": {
+        ".html": {
+          "relative_path": "md/CatLibrary.Core.ContainersRefType.ContainersRefTypeDelegate.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "obj/md/CatLibrary.Core.ContainersRefType.md",
+      "output": {
+        ".html": {
+          "relative_path": "md/CatLibrary.Core.ContainersRefType.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "obj/md/CatLibrary.Core.ExplicitLayoutClass.md",
+      "output": {
+        ".html": {
+          "relative_path": "md/CatLibrary.Core.ExplicitLayoutClass.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "obj/md/CatLibrary.Core.Issue231.md",
+      "output": {
+        ".html": {
+          "relative_path": "md/CatLibrary.Core.Issue231.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "obj/md/CatLibrary.Core.md",
+      "output": {
+        ".html": {
+          "relative_path": "md/CatLibrary.Core.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "obj/md/CatLibrary.FakeDelegate-1.md",
+      "output": {
+        ".html": {
+          "relative_path": "md/CatLibrary.FakeDelegate-1.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "obj/md/CatLibrary.IAnimal.md",
+      "output": {
+        ".html": {
+          "relative_path": "md/CatLibrary.IAnimal.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "obj/md/CatLibrary.ICat.md",
+      "output": {
+        ".html": {
+          "relative_path": "md/CatLibrary.ICat.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "obj/md/CatLibrary.ICatExtension.md",
+      "output": {
+        ".html": {
+          "relative_path": "md/CatLibrary.ICatExtension.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "obj/md/CatLibrary.MRefDelegate-3.md",
+      "output": {
+        ".html": {
+          "relative_path": "md/CatLibrary.MRefDelegate-3.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "obj/md/CatLibrary.MRefNormalDelegate.md",
+      "output": {
+        ".html": {
+          "relative_path": "md/CatLibrary.MRefNormalDelegate.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "obj/md/CatLibrary.Tom.md",
+      "output": {
+        ".html": {
+          "relative_path": "md/CatLibrary.Tom.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "obj/md/CatLibrary.TomFromBaseClass.md",
+      "output": {
+        ".html": {
+          "relative_path": "md/CatLibrary.TomFromBaseClass.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "obj/md/CatLibrary.md",
+      "output": {
+        ".html": {
+          "relative_path": "md/CatLibrary.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "obj/md/MRef.Demo.Enumeration.ColorType.md",
+      "output": {
+        ".html": {
+          "relative_path": "md/MRef.Demo.Enumeration.ColorType.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "obj/md/MRef.Demo.Enumeration.md",
+      "output": {
+        ".html": {
+          "relative_path": "md/MRef.Demo.Enumeration.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "obj/md/MRef.Demo.md",
+      "output": {
+        ".html": {
+          "relative_path": "md/MRef.Demo.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "obj/md/MRef.md",
+      "output": {
+        ".html": {
+          "relative_path": "md/MRef.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Toc",
+      "source_relative_path": "obj/md/toc.yml",
+      "output": {
+        ".html": {
+          "relative_path": "md/toc.html"
+        },
+        ".json": {
+          "relative_path": "md/toc.json"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "pdf/cover.md",
+      "output": {
+        ".html": {
+          "relative_path": "pdf/cover.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Toc",
+      "source_relative_path": "pdf/toc.yml",
+      "output": {
+        ".html": {
+          "relative_path": "pdf/toc.html"
+        },
+        ".json": {
+          "relative_path": "pdf/toc.json"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "RestApi",
+      "source_relative_path": "restapi/contacts_swagger2.json",
+      "output": {
+        ".html": {
+          "relative_path": "restapi/contacts.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "RestApi",
+      "source_relative_path": "restapi/petstore.swagger.json",
+      "output": {
+        ".html": {
+          "relative_path": "restapi/petstore.html"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Toc",
+      "source_relative_path": "restapi/toc.md",
+      "output": {
+        ".html": {
+          "relative_path": "restapi/toc.html"
+        },
+        ".json": {
+          "relative_path": "restapi/toc.json"
+        }
+      },
+      "version": ""
+    },
+    {
+      "type": "Toc",
+      "source_relative_path": "toc.yml",
+      "output": {
+        ".html": {
+          "relative_path": "toc.html"
+        },
+        ".json": {
+          "relative_path": "toc.json"
+        }
+      },
+      "version": ""
+    }
+  ],
+  "groups": [
+    {
+      "xrefmap": "xrefmap.yml"
+    }
+  ]
+}
diff --git a/test/docfx.Tests/SerializationTests/TestData/MarkdownServiceProperties/markdownServiceProperties_01.json b/test/docfx.Tests/SerializationTests/TestData/MarkdownServiceProperties/markdownServiceProperties_01.json
new file mode 100644
index 00000000000..88e928cb27c
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/TestData/MarkdownServiceProperties/markdownServiceProperties_01.json
@@ -0,0 +1,28 @@
+{
+  "enableSourceInfo": false,
+  "markdigExtensions": [
+    "FootNotes",
+    { "Emojis": "default" },
+    { "AutoIdentifiers": "default" },
+    {
+      "MediaLinks": {
+        "width": "800",
+        "height": "400"
+      }
+    }
+  ],
+  "fallbackFolders": [
+    "fallbackdir"
+  ],
+  "alerts": {
+    "TODO": "alert alert-secondary"
+  },
+  "plantUml": {
+    "javaPath": "dummy",
+    "localGraphvizDotPath": "dummy",
+    "localPlantUmlPath": "dummy",
+    "outputFormat": "svg",
+    "remoteUrl": "dummy",
+    "renderingMode": "local"
+  }
+}
diff --git a/test/docfx.Tests/SerializationTests/TestData/MarkdownServiceProperties/markdownServiceProperties_02.json b/test/docfx.Tests/SerializationTests/TestData/MarkdownServiceProperties/markdownServiceProperties_02.json
new file mode 100644
index 00000000000..de9c6683d01
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/TestData/MarkdownServiceProperties/markdownServiceProperties_02.json
@@ -0,0 +1,15 @@
+{
+  "markdigExtensions": [
+    "FootNotes",
+    // Comment1
+    { "Emojis": "default" },
+    { "AutoIdentifiers": "default" },
+    {
+      // Comment2
+      "MediaLinks": {
+        "width": "800", // Comment3
+        "height": "400"
+      }
+    }
+  ]
+}
diff --git a/test/docfx.Tests/SerializationTests/TestData/MergeJsonConfig/mergeJsonConfig_01.json b/test/docfx.Tests/SerializationTests/TestData/MergeJsonConfig/mergeJsonConfig_01.json
new file mode 100644
index 00000000000..a306b929125
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/TestData/MergeJsonConfig/mergeJsonConfig_01.json
@@ -0,0 +1,25 @@
+{
+  "content": [
+    {
+      "files": "*.yml",
+      "src": "obj/netstandard2.0/api"
+    },
+    {
+      "files": "*.yml",
+      "src": "obj/net8/api"
+    }
+  ],
+  "globalMetadata": {},
+  "fileMetadata": {
+    "platform": {
+      "obj/netstandard2.0/api/*.yml": [
+        "netstandard2.0"
+      ],
+      "obj/net8/api/*.yml": [
+        "net8"
+      ]
+    }
+  },
+  "dest": "obj/api",
+  "tocMetadata": []
+}
diff --git a/test/docfx.Tests/SerializationTests/TestData/MergeJsonConfig/mergeJsonConfig_02.json b/test/docfx.Tests/SerializationTests/TestData/MergeJsonConfig/mergeJsonConfig_02.json
new file mode 100644
index 00000000000..5a564e0f4a6
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/TestData/MergeJsonConfig/mergeJsonConfig_02.json
@@ -0,0 +1,52 @@
+[
+  {
+    "content": [
+      {
+        "files": "*.yml",
+        "src": "obj/netstandard2.0/api"
+      },
+      {
+        "files": "*.yml",
+        "src": "obj/net8/api"
+      }
+    ],
+    "globalMetadata": {},
+    "fileMetadata": {
+      "platform1": {
+        "obj/netstandard2.0/api/*.yml": [
+          "netstandard2.0"
+        ],
+        "obj/net8/api/*.yml": [
+          "net8"
+        ]
+      }
+    },
+    "dest": "obj/api",
+    "tocMetadata": []
+  },
+  {
+    "content": [
+      {
+        "files": "*.yml",
+        "src": "obj/netstandard2.0/api"
+      },
+      {
+        "files": "*.yml",
+        "src": "obj/net8/api"
+      }
+    ],
+    "globalMetadata": {},
+    "fileMetadata": {
+      "platform2": {
+        "obj/netstandard2.0/api/*.yml": [
+          "netstandard2.0"
+        ],
+        "obj/net8/api/*.yml": [
+          "net8"
+        ]
+      }
+    },
+    "dest": "obj/api",
+    "tocMetadata": []
+  }
+]
diff --git a/test/docfx.Tests/SerializationTests/TestData/MetadataJsonConfig/metadataJsonConfig_01.json b/test/docfx.Tests/SerializationTests/TestData/MetadataJsonConfig/metadataJsonConfig_01.json
new file mode 100644
index 00000000000..a9dfffb8d42
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/TestData/MetadataJsonConfig/metadataJsonConfig_01.json
@@ -0,0 +1,42 @@
+[
+  {
+    "src": [
+      {
+        "files": [
+          "assembly/bin/**/*.dll",
+          "project/**/*.csproj",
+          "solution/**/*.sln",
+          "csharp/**/*.cs",
+          "vb/**/*.vb"
+        ],
+        "exclude": [
+          "project/Project.Core/**"
+        ],
+        "src": "dotnet"
+      }
+    ],
+    "output": "obj/api",
+    "outputFormat": "apiPage",
+    "shouldSkipMarkup": false,
+    "references": [
+      "refs/dummy.dll"
+    ],
+    "filter": "filterConfig.yml",
+    "includePrivateMembers": true,
+    "includeExplicitInterfaceImplementations": true,
+    "globalNamespaceId": "Global",
+    "properties": {
+      "DefineConstants": "dummy1, dummy2",
+      "TargetFrameworks": "dummy"
+    },
+    "disableGitFeatures": false,
+    "codeSourceBasePath": "dummy",
+    "disableDefaultFilter": true,
+    "noRestore": true,
+    "categoryLayout": "nested",
+    "namespaceLayout": "nested",
+    "memberLayout": "separatePages",
+    "enumSortOrder": "declaringOrder",
+    "allowCompilationErrors": true
+  }
+]
diff --git a/test/docfx.Tests/SerializationTests/TestData/MetadataJsonConfig/metadataJsonConfig_02.json b/test/docfx.Tests/SerializationTests/TestData/MetadataJsonConfig/metadataJsonConfig_02.json
new file mode 100644
index 00000000000..55c6e535d25
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/TestData/MetadataJsonConfig/metadataJsonConfig_02.json
@@ -0,0 +1,64 @@
+[
+  {
+    "src": [
+      {
+        "files": [
+          "assembly/bin/**/*.dll",
+          "project/**/*.csproj",
+          "solution/**/*.sln",
+          "csharp/**/*.cs",
+          "vb/**/*.vb"
+        ],
+        "exclude": [
+          "project/Project.Core/**"
+        ],
+        "src": "dotnet"
+      }
+    ],
+    "namespaceLayout": "nested",
+    "enumSortOrder": "declaringOrder",
+    "output": "obj/api"
+  },
+  {
+    "src": [
+      {
+        "files": [
+          "assembly/bin/**/*.dll",
+          "project/**/*.csproj",
+          "solution/**/*.sln",
+          "csharp/**/*.cs",
+          "vb/**/*.vb"
+        ],
+        "exclude": [
+          "project/Project.Core/**"
+        ],
+        "src": "dotnet"
+      }
+    ],
+    "namespaceLayout": "nested",
+    "enumSortOrder": "declaringOrder",
+    "outputFormat": "markdown",
+    "output": "obj/md"
+  },
+  {
+    "src": [
+      {
+        "files": [
+          "assembly/bin/**/*.dll",
+          "project/**/*.csproj",
+          "solution/**/*.sln",
+          "csharp/**/*.cs",
+          "vb/**/*.vb"
+        ],
+        "exclude": [
+          "project/Project.Core/**"
+        ],
+        "src": "dotnet"
+      }
+    ],
+    "namespaceLayout": "nested",
+    "enumSortOrder": "declaringOrder",
+    "outputFormat": "apiPage",
+    "output": "obj/apipage"
+  }
+]
diff --git a/test/docfx.Tests/SerializationTests/TestData/TestData.cs b/test/docfx.Tests/SerializationTests/TestData/TestData.cs
new file mode 100644
index 00000000000..bf75bddbac3
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/TestData/TestData.cs
@@ -0,0 +1,54 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.Diagnostics;
+using System.Text.Json;
+using Docfx.Build.ApiPage;
+using Docfx.Common;
+using Docfx.Tests;
+using YamlDotNet.Serialization;
+
+namespace docfx.Tests;
+
+public static class TestData
+{
+    /// <summary>
+    /// Load test data from specified path.
+    /// </summary>
+    public static T Load<T>(string path)
+    {
+        if (typeof(T) == typeof(ApiPage))
+            throw new NotSupportedException(); // It should be handled separately.
+
+        var testDataPath = PathHelper.ResolveTestDataPath(path);
+
+        switch (Path.GetExtension(path))
+        {
+            case ".yml":
+                return YamlUtility.Deserialize<T>(testDataPath);
+            case ".json":
+                return JsonUtility.Deserialize<T>(testDataPath);
+            default:
+                throw new NotSupportedException();
+        }
+    }
+
+    /// <summary>
+    /// Gets test data relative file paths.
+    /// </summary>
+    public static string[] GetTestDataFilePaths(string key)
+    {
+        var testDataRootDir = PathHelper.GetTestDataDirectory();
+        var basePathLength = testDataRootDir.Length + 1;
+
+        var testDataDir = Path.Combine(testDataRootDir, key);
+        var directoryInfo = new DirectoryInfo(testDataDir);
+
+        // Gets TestData directory relative paths
+        var relativePaths = directoryInfo.EnumerateFiles("*", new EnumerationOptions { RecurseSubdirectories = true })
+                                         .Select(x => x.FullName)
+                                         .Select(x => x.Substring(basePathLength));
+
+        return relativePaths.ToArray();
+    }
+}
diff --git a/test/docfx.Tests/SerializationTests/TestData/TestDataAttribute.cs b/test/docfx.Tests/SerializationTests/TestData/TestDataAttribute.cs
new file mode 100644
index 00000000000..1e53e2bc5ec
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/TestData/TestDataAttribute.cs
@@ -0,0 +1,49 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.Reflection;
+using Xunit.Sdk;
+
+namespace docfx.Tests;
+
+public class TestDataAttribute<T> : DataAttribute
+{
+    public override IEnumerable<object[]> GetData(MethodInfo testMethod)
+    {
+        var key = GetTestDataKey();
+        var paths = TestData.GetTestDataFilePaths(key);
+
+        var className = testMethod.DeclaringType.Name;
+
+        // Filter test data.
+        switch (className)
+        {
+            case nameof(JsonSerializationTest):
+                paths = paths.Where(x => x.EndsWith(".json")).ToArray();
+                break;
+            case nameof(YamlSerializationTest):
+                paths = paths.Where(x => x.EndsWith(".yml")).ToArray();
+                break;
+            default:
+                throw new NotSupportedException($"{className} is not supported.");
+        }
+
+        return new TheoryData<string>(paths);
+    }
+
+    private static string GetTestDataKey()
+    {
+        var type = typeof(T);
+        var fullname = type.FullName;
+
+        switch (fullname)
+        {
+            case "Docfx.DataContracts.ManagedReference.PageViewModel":
+                return "ManagedReference";
+            case "Docfx.DataContracts.UniversalReference.PageViewModel":
+                return "UniversalReference";
+            default:
+                return type.Name;
+        }
+    }
+}
diff --git a/test/docfx.Tests/SerializationTests/TestData/TocItemViewModel/Json/toc_01.json b/test/docfx.Tests/SerializationTests/TestData/TocItemViewModel/Json/toc_01.json
new file mode 100644
index 00000000000..2225389d6b6
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/TestData/TocItemViewModel/Json/toc_01.json
@@ -0,0 +1,11 @@
+{
+  "sorted": true,
+  "items": [
+  ],
+  "custom": [
+    {
+      "prop1": true,
+      "prop2": "dummy"
+    }
+  ]
+}
diff --git a/test/docfx.Tests/SerializationTests/TestData/TocItemViewModel/Json/toc_02.json b/test/docfx.Tests/SerializationTests/TestData/TocItemViewModel/Json/toc_02.json
new file mode 100644
index 00000000000..7c37af9c875
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/TestData/TocItemViewModel/Json/toc_02.json
@@ -0,0 +1,1926 @@
+{
+  "sorted": true,
+  "references": [
+    {
+      "uid": "Docfx",
+      "name": "Docfx",
+      "href": "api/Docfx.html",
+      "commentId": "N:Docfx",
+      "fullName": "Docfx",
+      "nameWithType": "Docfx"
+    },
+    {
+      "uid": "Docfx.BuildOptions",
+      "name": "BuildOptions",
+      "href": "api/Docfx.BuildOptions.html",
+      "commentId": "T:Docfx.BuildOptions",
+      "fullName": "Docfx.BuildOptions",
+      "nameWithType": "BuildOptions"
+    },
+    {
+      "uid": "Docfx.BuildOptions.ConfigureMarkdig",
+      "name": "ConfigureMarkdig",
+      "href": "api/Docfx.BuildOptions.html#Docfx_BuildOptions_ConfigureMarkdig",
+      "commentId": "P:Docfx.BuildOptions.ConfigureMarkdig",
+      "fullName": "Docfx.BuildOptions.ConfigureMarkdig",
+      "nameWithType": "BuildOptions.ConfigureMarkdig"
+    },
+    {
+      "uid": "Docfx.BuildOptions.ConfigureMarkdig*",
+      "name": "ConfigureMarkdig",
+      "href": "api/Docfx.BuildOptions.html#Docfx_BuildOptions_ConfigureMarkdig_",
+      "commentId": "Overload:Docfx.BuildOptions.ConfigureMarkdig",
+      "isSpec": "True",
+      "fullName": "Docfx.BuildOptions.ConfigureMarkdig",
+      "nameWithType": "BuildOptions.ConfigureMarkdig"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference",
+      "name": "Docfx.DataContracts.ManagedReference",
+      "href": "api/Docfx.DataContracts.ManagedReference.html",
+      "commentId": "N:Docfx.DataContracts.ManagedReference",
+      "fullName": "Docfx.DataContracts.ManagedReference",
+      "nameWithType": "Docfx.DataContracts.ManagedReference"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.AdditionalNotes",
+      "name": "AdditionalNotes",
+      "href": "api/Docfx.DataContracts.ManagedReference.AdditionalNotes.html",
+      "commentId": "T:Docfx.DataContracts.ManagedReference.AdditionalNotes",
+      "fullName": "Docfx.DataContracts.ManagedReference.AdditionalNotes",
+      "nameWithType": "AdditionalNotes"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.AdditionalNotes.Caller",
+      "name": "Caller",
+      "href": "api/Docfx.DataContracts.ManagedReference.AdditionalNotes.html#Docfx_DataContracts_ManagedReference_AdditionalNotes_Caller",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.AdditionalNotes.Caller",
+      "fullName": "Docfx.DataContracts.ManagedReference.AdditionalNotes.Caller",
+      "nameWithType": "AdditionalNotes.Caller"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.AdditionalNotes.Caller*",
+      "name": "Caller",
+      "href": "api/Docfx.DataContracts.ManagedReference.AdditionalNotes.html#Docfx_DataContracts_ManagedReference_AdditionalNotes_Caller_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.AdditionalNotes.Caller",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.AdditionalNotes.Caller",
+      "nameWithType": "AdditionalNotes.Caller"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.AdditionalNotes.Implementer",
+      "name": "Implementer",
+      "href": "api/Docfx.DataContracts.ManagedReference.AdditionalNotes.html#Docfx_DataContracts_ManagedReference_AdditionalNotes_Implementer",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.AdditionalNotes.Implementer",
+      "fullName": "Docfx.DataContracts.ManagedReference.AdditionalNotes.Implementer",
+      "nameWithType": "AdditionalNotes.Implementer"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.AdditionalNotes.Implementer*",
+      "name": "Implementer",
+      "href": "api/Docfx.DataContracts.ManagedReference.AdditionalNotes.html#Docfx_DataContracts_ManagedReference_AdditionalNotes_Implementer_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.AdditionalNotes.Implementer",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.AdditionalNotes.Implementer",
+      "nameWithType": "AdditionalNotes.Implementer"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.AdditionalNotes.Inheritor",
+      "name": "Inheritor",
+      "href": "api/Docfx.DataContracts.ManagedReference.AdditionalNotes.html#Docfx_DataContracts_ManagedReference_AdditionalNotes_Inheritor",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.AdditionalNotes.Inheritor",
+      "fullName": "Docfx.DataContracts.ManagedReference.AdditionalNotes.Inheritor",
+      "nameWithType": "AdditionalNotes.Inheritor"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.AdditionalNotes.Inheritor*",
+      "name": "Inheritor",
+      "href": "api/Docfx.DataContracts.ManagedReference.AdditionalNotes.html#Docfx_DataContracts_ManagedReference_AdditionalNotes_Inheritor_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.AdditionalNotes.Inheritor",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.AdditionalNotes.Inheritor",
+      "nameWithType": "AdditionalNotes.Inheritor"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ApiParameter",
+      "name": "ApiParameter",
+      "href": "api/Docfx.DataContracts.ManagedReference.ApiParameter.html",
+      "commentId": "T:Docfx.DataContracts.ManagedReference.ApiParameter",
+      "fullName": "Docfx.DataContracts.ManagedReference.ApiParameter",
+      "nameWithType": "ApiParameter"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ApiParameter.Attributes",
+      "name": "Attributes",
+      "href": "api/Docfx.DataContracts.ManagedReference.ApiParameter.html#Docfx_DataContracts_ManagedReference_ApiParameter_Attributes",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ApiParameter.Attributes",
+      "fullName": "Docfx.DataContracts.ManagedReference.ApiParameter.Attributes",
+      "nameWithType": "ApiParameter.Attributes"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ApiParameter.Attributes*",
+      "name": "Attributes",
+      "href": "api/Docfx.DataContracts.ManagedReference.ApiParameter.html#Docfx_DataContracts_ManagedReference_ApiParameter_Attributes_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ApiParameter.Attributes",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ApiParameter.Attributes",
+      "nameWithType": "ApiParameter.Attributes"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ApiParameter.Description",
+      "name": "Description",
+      "href": "api/Docfx.DataContracts.ManagedReference.ApiParameter.html#Docfx_DataContracts_ManagedReference_ApiParameter_Description",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ApiParameter.Description",
+      "fullName": "Docfx.DataContracts.ManagedReference.ApiParameter.Description",
+      "nameWithType": "ApiParameter.Description"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ApiParameter.Description*",
+      "name": "Description",
+      "href": "api/Docfx.DataContracts.ManagedReference.ApiParameter.html#Docfx_DataContracts_ManagedReference_ApiParameter_Description_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ApiParameter.Description",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ApiParameter.Description",
+      "nameWithType": "ApiParameter.Description"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ApiParameter.Name",
+      "name": "Name",
+      "href": "api/Docfx.DataContracts.ManagedReference.ApiParameter.html#Docfx_DataContracts_ManagedReference_ApiParameter_Name",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ApiParameter.Name",
+      "fullName": "Docfx.DataContracts.ManagedReference.ApiParameter.Name",
+      "nameWithType": "ApiParameter.Name"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ApiParameter.Name*",
+      "name": "Name",
+      "href": "api/Docfx.DataContracts.ManagedReference.ApiParameter.html#Docfx_DataContracts_ManagedReference_ApiParameter_Name_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ApiParameter.Name",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ApiParameter.Name",
+      "nameWithType": "ApiParameter.Name"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ApiParameter.Type",
+      "name": "Type",
+      "href": "api/Docfx.DataContracts.ManagedReference.ApiParameter.html#Docfx_DataContracts_ManagedReference_ApiParameter_Type",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ApiParameter.Type",
+      "fullName": "Docfx.DataContracts.ManagedReference.ApiParameter.Type",
+      "nameWithType": "ApiParameter.Type"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ApiParameter.Type*",
+      "name": "Type",
+      "href": "api/Docfx.DataContracts.ManagedReference.ApiParameter.html#Docfx_DataContracts_ManagedReference_ApiParameter_Type_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ApiParameter.Type",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ApiParameter.Type",
+      "nameWithType": "ApiParameter.Type"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ArgumentInfo",
+      "name": "ArgumentInfo",
+      "href": "api/Docfx.DataContracts.ManagedReference.ArgumentInfo.html",
+      "commentId": "T:Docfx.DataContracts.ManagedReference.ArgumentInfo",
+      "fullName": "Docfx.DataContracts.ManagedReference.ArgumentInfo",
+      "nameWithType": "ArgumentInfo"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ArgumentInfo.Type",
+      "name": "Type",
+      "href": "api/Docfx.DataContracts.ManagedReference.ArgumentInfo.html#Docfx_DataContracts_ManagedReference_ArgumentInfo_Type",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ArgumentInfo.Type",
+      "fullName": "Docfx.DataContracts.ManagedReference.ArgumentInfo.Type",
+      "nameWithType": "ArgumentInfo.Type"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ArgumentInfo.Type*",
+      "name": "Type",
+      "href": "api/Docfx.DataContracts.ManagedReference.ArgumentInfo.html#Docfx_DataContracts_ManagedReference_ArgumentInfo_Type_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ArgumentInfo.Type",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ArgumentInfo.Type",
+      "nameWithType": "ArgumentInfo.Type"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ArgumentInfo.Value",
+      "name": "Value",
+      "href": "api/Docfx.DataContracts.ManagedReference.ArgumentInfo.html#Docfx_DataContracts_ManagedReference_ArgumentInfo_Value",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ArgumentInfo.Value",
+      "fullName": "Docfx.DataContracts.ManagedReference.ArgumentInfo.Value",
+      "nameWithType": "ArgumentInfo.Value"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ArgumentInfo.Value*",
+      "name": "Value",
+      "href": "api/Docfx.DataContracts.ManagedReference.ArgumentInfo.html#Docfx_DataContracts_ManagedReference_ArgumentInfo_Value_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ArgumentInfo.Value",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ArgumentInfo.Value",
+      "nameWithType": "ArgumentInfo.Value"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.AttributeInfo",
+      "name": "AttributeInfo",
+      "href": "api/Docfx.DataContracts.ManagedReference.AttributeInfo.html",
+      "commentId": "T:Docfx.DataContracts.ManagedReference.AttributeInfo",
+      "fullName": "Docfx.DataContracts.ManagedReference.AttributeInfo",
+      "nameWithType": "AttributeInfo"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.AttributeInfo.Arguments",
+      "name": "Arguments",
+      "href": "api/Docfx.DataContracts.ManagedReference.AttributeInfo.html#Docfx_DataContracts_ManagedReference_AttributeInfo_Arguments",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.AttributeInfo.Arguments",
+      "fullName": "Docfx.DataContracts.ManagedReference.AttributeInfo.Arguments",
+      "nameWithType": "AttributeInfo.Arguments"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.AttributeInfo.Arguments*",
+      "name": "Arguments",
+      "href": "api/Docfx.DataContracts.ManagedReference.AttributeInfo.html#Docfx_DataContracts_ManagedReference_AttributeInfo_Arguments_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.AttributeInfo.Arguments",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.AttributeInfo.Arguments",
+      "nameWithType": "AttributeInfo.Arguments"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.AttributeInfo.Constructor",
+      "name": "Constructor",
+      "href": "api/Docfx.DataContracts.ManagedReference.AttributeInfo.html#Docfx_DataContracts_ManagedReference_AttributeInfo_Constructor",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.AttributeInfo.Constructor",
+      "fullName": "Docfx.DataContracts.ManagedReference.AttributeInfo.Constructor",
+      "nameWithType": "AttributeInfo.Constructor"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.AttributeInfo.Constructor*",
+      "name": "Constructor",
+      "href": "api/Docfx.DataContracts.ManagedReference.AttributeInfo.html#Docfx_DataContracts_ManagedReference_AttributeInfo_Constructor_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.AttributeInfo.Constructor",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.AttributeInfo.Constructor",
+      "nameWithType": "AttributeInfo.Constructor"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.AttributeInfo.NamedArguments",
+      "name": "NamedArguments",
+      "href": "api/Docfx.DataContracts.ManagedReference.AttributeInfo.html#Docfx_DataContracts_ManagedReference_AttributeInfo_NamedArguments",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.AttributeInfo.NamedArguments",
+      "fullName": "Docfx.DataContracts.ManagedReference.AttributeInfo.NamedArguments",
+      "nameWithType": "AttributeInfo.NamedArguments"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.AttributeInfo.NamedArguments*",
+      "name": "NamedArguments",
+      "href": "api/Docfx.DataContracts.ManagedReference.AttributeInfo.html#Docfx_DataContracts_ManagedReference_AttributeInfo_NamedArguments_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.AttributeInfo.NamedArguments",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.AttributeInfo.NamedArguments",
+      "nameWithType": "AttributeInfo.NamedArguments"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.AttributeInfo.Type",
+      "name": "Type",
+      "href": "api/Docfx.DataContracts.ManagedReference.AttributeInfo.html#Docfx_DataContracts_ManagedReference_AttributeInfo_Type",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.AttributeInfo.Type",
+      "fullName": "Docfx.DataContracts.ManagedReference.AttributeInfo.Type",
+      "nameWithType": "AttributeInfo.Type"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.AttributeInfo.Type*",
+      "name": "Type",
+      "href": "api/Docfx.DataContracts.ManagedReference.AttributeInfo.html#Docfx_DataContracts_ManagedReference_AttributeInfo_Type_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.AttributeInfo.Type",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.AttributeInfo.Type",
+      "nameWithType": "AttributeInfo.Type"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ExceptionInfo",
+      "name": "ExceptionInfo",
+      "href": "api/Docfx.DataContracts.ManagedReference.ExceptionInfo.html",
+      "commentId": "T:Docfx.DataContracts.ManagedReference.ExceptionInfo",
+      "fullName": "Docfx.DataContracts.ManagedReference.ExceptionInfo",
+      "nameWithType": "ExceptionInfo"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ExceptionInfo.CommentId",
+      "name": "CommentId",
+      "href": "api/Docfx.DataContracts.ManagedReference.ExceptionInfo.html#Docfx_DataContracts_ManagedReference_ExceptionInfo_CommentId",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ExceptionInfo.CommentId",
+      "fullName": "Docfx.DataContracts.ManagedReference.ExceptionInfo.CommentId",
+      "nameWithType": "ExceptionInfo.CommentId"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ExceptionInfo.CommentId*",
+      "name": "CommentId",
+      "href": "api/Docfx.DataContracts.ManagedReference.ExceptionInfo.html#Docfx_DataContracts_ManagedReference_ExceptionInfo_CommentId_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ExceptionInfo.CommentId",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ExceptionInfo.CommentId",
+      "nameWithType": "ExceptionInfo.CommentId"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ExceptionInfo.Description",
+      "name": "Description",
+      "href": "api/Docfx.DataContracts.ManagedReference.ExceptionInfo.html#Docfx_DataContracts_ManagedReference_ExceptionInfo_Description",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ExceptionInfo.Description",
+      "fullName": "Docfx.DataContracts.ManagedReference.ExceptionInfo.Description",
+      "nameWithType": "ExceptionInfo.Description"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ExceptionInfo.Description*",
+      "name": "Description",
+      "href": "api/Docfx.DataContracts.ManagedReference.ExceptionInfo.html#Docfx_DataContracts_ManagedReference_ExceptionInfo_Description_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ExceptionInfo.Description",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ExceptionInfo.Description",
+      "nameWithType": "ExceptionInfo.Description"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ExceptionInfo.Type",
+      "name": "Type",
+      "href": "api/Docfx.DataContracts.ManagedReference.ExceptionInfo.html#Docfx_DataContracts_ManagedReference_ExceptionInfo_Type",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ExceptionInfo.Type",
+      "fullName": "Docfx.DataContracts.ManagedReference.ExceptionInfo.Type",
+      "nameWithType": "ExceptionInfo.Type"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ExceptionInfo.Type*",
+      "name": "Type",
+      "href": "api/Docfx.DataContracts.ManagedReference.ExceptionInfo.html#Docfx_DataContracts_ManagedReference_ExceptionInfo_Type_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ExceptionInfo.Type",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ExceptionInfo.Type",
+      "nameWithType": "ExceptionInfo.Type"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel",
+      "name": "ItemViewModel",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html",
+      "commentId": "T:Docfx.DataContracts.ManagedReference.ItemViewModel",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel",
+      "nameWithType": "ItemViewModel"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.AdditionalNotes",
+      "name": "AdditionalNotes",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_AdditionalNotes",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.AdditionalNotes",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.AdditionalNotes",
+      "nameWithType": "ItemViewModel.AdditionalNotes"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.AdditionalNotes*",
+      "name": "AdditionalNotes",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_AdditionalNotes_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.AdditionalNotes",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.AdditionalNotes",
+      "nameWithType": "ItemViewModel.AdditionalNotes"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.AssemblyNameList",
+      "name": "AssemblyNameList",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_AssemblyNameList",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.AssemblyNameList",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.AssemblyNameList",
+      "nameWithType": "ItemViewModel.AssemblyNameList"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.AssemblyNameList*",
+      "name": "AssemblyNameList",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_AssemblyNameList_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.AssemblyNameList",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.AssemblyNameList",
+      "nameWithType": "ItemViewModel.AssemblyNameList"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Attributes",
+      "name": "Attributes",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Attributes",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.Attributes",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Attributes",
+      "nameWithType": "ItemViewModel.Attributes"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Attributes*",
+      "name": "Attributes",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Attributes_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Attributes",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Attributes",
+      "nameWithType": "ItemViewModel.Attributes"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Children",
+      "name": "Children",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Children",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.Children",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Children",
+      "nameWithType": "ItemViewModel.Children"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Children*",
+      "name": "Children",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Children_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Children",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Children",
+      "nameWithType": "ItemViewModel.Children"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.CommentId",
+      "name": "CommentId",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_CommentId",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.CommentId",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.CommentId",
+      "nameWithType": "ItemViewModel.CommentId"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.CommentId*",
+      "name": "CommentId",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_CommentId_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.CommentId",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.CommentId",
+      "nameWithType": "ItemViewModel.CommentId"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Conceptual",
+      "name": "Conceptual",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Conceptual",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.Conceptual",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Conceptual",
+      "nameWithType": "ItemViewModel.Conceptual"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Conceptual*",
+      "name": "Conceptual",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Conceptual_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Conceptual",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Conceptual",
+      "nameWithType": "ItemViewModel.Conceptual"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.DerivedClasses",
+      "name": "DerivedClasses",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_DerivedClasses",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.DerivedClasses",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.DerivedClasses",
+      "nameWithType": "ItemViewModel.DerivedClasses"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.DerivedClasses*",
+      "name": "DerivedClasses",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_DerivedClasses_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.DerivedClasses",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.DerivedClasses",
+      "nameWithType": "ItemViewModel.DerivedClasses"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Documentation",
+      "name": "Documentation",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Documentation",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.Documentation",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Documentation",
+      "nameWithType": "ItemViewModel.Documentation"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Documentation*",
+      "name": "Documentation",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Documentation_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Documentation",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Documentation",
+      "nameWithType": "ItemViewModel.Documentation"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Examples",
+      "name": "Examples",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Examples",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.Examples",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Examples",
+      "nameWithType": "ItemViewModel.Examples"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Examples*",
+      "name": "Examples",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Examples_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Examples",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Examples",
+      "nameWithType": "ItemViewModel.Examples"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Exceptions",
+      "name": "Exceptions",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Exceptions",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.Exceptions",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Exceptions",
+      "nameWithType": "ItemViewModel.Exceptions"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Exceptions*",
+      "name": "Exceptions",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Exceptions_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Exceptions",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Exceptions",
+      "nameWithType": "ItemViewModel.Exceptions"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.ExtensionMethods",
+      "name": "ExtensionMethods",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_ExtensionMethods",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.ExtensionMethods",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.ExtensionMethods",
+      "nameWithType": "ItemViewModel.ExtensionMethods"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.ExtensionMethods*",
+      "name": "ExtensionMethods",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_ExtensionMethods_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.ExtensionMethods",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.ExtensionMethods",
+      "nameWithType": "ItemViewModel.ExtensionMethods"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.FullName",
+      "name": "FullName",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_FullName",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.FullName",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.FullName",
+      "nameWithType": "ItemViewModel.FullName"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.FullName*",
+      "name": "FullName",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_FullName_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.FullName",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.FullName",
+      "nameWithType": "ItemViewModel.FullName"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.FullNameForCSharp",
+      "name": "FullNameForCSharp",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_FullNameForCSharp",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.FullNameForCSharp",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.FullNameForCSharp",
+      "nameWithType": "ItemViewModel.FullNameForCSharp"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.FullNameForCSharp*",
+      "name": "FullNameForCSharp",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_FullNameForCSharp_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.FullNameForCSharp",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.FullNameForCSharp",
+      "nameWithType": "ItemViewModel.FullNameForCSharp"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.FullNameForVB",
+      "name": "FullNameForVB",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_FullNameForVB",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.FullNameForVB",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.FullNameForVB",
+      "nameWithType": "ItemViewModel.FullNameForVB"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.FullNameForVB*",
+      "name": "FullNameForVB",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_FullNameForVB_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.FullNameForVB",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.FullNameForVB",
+      "nameWithType": "ItemViewModel.FullNameForVB"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.FullNames",
+      "name": "FullNames",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_FullNames",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.FullNames",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.FullNames",
+      "nameWithType": "ItemViewModel.FullNames"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.FullNames*",
+      "name": "FullNames",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_FullNames_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.FullNames",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.FullNames",
+      "nameWithType": "ItemViewModel.FullNames"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Href",
+      "name": "Href",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Href",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.Href",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Href",
+      "nameWithType": "ItemViewModel.Href"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Href*",
+      "name": "Href",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Href_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Href",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Href",
+      "nameWithType": "ItemViewModel.Href"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Id",
+      "name": "Id",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Id",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.Id",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Id",
+      "nameWithType": "ItemViewModel.Id"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Id*",
+      "name": "Id",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Id_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Id",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Id",
+      "nameWithType": "ItemViewModel.Id"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Implements",
+      "name": "Implements",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Implements",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.Implements",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Implements",
+      "nameWithType": "ItemViewModel.Implements"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Implements*",
+      "name": "Implements",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Implements_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Implements",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Implements",
+      "nameWithType": "ItemViewModel.Implements"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Inheritance",
+      "name": "Inheritance",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Inheritance",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.Inheritance",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Inheritance",
+      "nameWithType": "ItemViewModel.Inheritance"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Inheritance*",
+      "name": "Inheritance",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Inheritance_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Inheritance",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Inheritance",
+      "nameWithType": "ItemViewModel.Inheritance"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.InheritedMembers",
+      "name": "InheritedMembers",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_InheritedMembers",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.InheritedMembers",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.InheritedMembers",
+      "nameWithType": "ItemViewModel.InheritedMembers"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.InheritedMembers*",
+      "name": "InheritedMembers",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_InheritedMembers_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.InheritedMembers",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.InheritedMembers",
+      "nameWithType": "ItemViewModel.InheritedMembers"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.IsExplicitInterfaceImplementation",
+      "name": "IsExplicitInterfaceImplementation",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_IsExplicitInterfaceImplementation",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.IsExplicitInterfaceImplementation",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.IsExplicitInterfaceImplementation",
+      "nameWithType": "ItemViewModel.IsExplicitInterfaceImplementation"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.IsExplicitInterfaceImplementation*",
+      "name": "IsExplicitInterfaceImplementation",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_IsExplicitInterfaceImplementation_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.IsExplicitInterfaceImplementation",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.IsExplicitInterfaceImplementation",
+      "nameWithType": "ItemViewModel.IsExplicitInterfaceImplementation"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.IsExtensionMethod",
+      "name": "IsExtensionMethod",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_IsExtensionMethod",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.IsExtensionMethod",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.IsExtensionMethod",
+      "nameWithType": "ItemViewModel.IsExtensionMethod"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.IsExtensionMethod*",
+      "name": "IsExtensionMethod",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_IsExtensionMethod_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.IsExtensionMethod",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.IsExtensionMethod",
+      "nameWithType": "ItemViewModel.IsExtensionMethod"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Metadata",
+      "name": "Metadata",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Metadata",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.Metadata",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Metadata",
+      "nameWithType": "ItemViewModel.Metadata"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Metadata*",
+      "name": "Metadata",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Metadata_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Metadata",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Metadata",
+      "nameWithType": "ItemViewModel.Metadata"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Name",
+      "name": "Name",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Name",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.Name",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Name",
+      "nameWithType": "ItemViewModel.Name"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Name*",
+      "name": "Name",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Name_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Name",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Name",
+      "nameWithType": "ItemViewModel.Name"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.NameForCSharp",
+      "name": "NameForCSharp",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_NameForCSharp",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.NameForCSharp",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.NameForCSharp",
+      "nameWithType": "ItemViewModel.NameForCSharp"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.NameForCSharp*",
+      "name": "NameForCSharp",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_NameForCSharp_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.NameForCSharp",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.NameForCSharp",
+      "nameWithType": "ItemViewModel.NameForCSharp"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.NameForVB",
+      "name": "NameForVB",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_NameForVB",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.NameForVB",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.NameForVB",
+      "nameWithType": "ItemViewModel.NameForVB"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.NameForVB*",
+      "name": "NameForVB",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_NameForVB_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.NameForVB",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.NameForVB",
+      "nameWithType": "ItemViewModel.NameForVB"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.NameWithType",
+      "name": "NameWithType",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_NameWithType",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.NameWithType",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.NameWithType",
+      "nameWithType": "ItemViewModel.NameWithType"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.NameWithType*",
+      "name": "NameWithType",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_NameWithType_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.NameWithType",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.NameWithType",
+      "nameWithType": "ItemViewModel.NameWithType"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.NameWithTypeForCSharp",
+      "name": "NameWithTypeForCSharp",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_NameWithTypeForCSharp",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.NameWithTypeForCSharp",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.NameWithTypeForCSharp",
+      "nameWithType": "ItemViewModel.NameWithTypeForCSharp"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.NameWithTypeForCSharp*",
+      "name": "NameWithTypeForCSharp",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_NameWithTypeForCSharp_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.NameWithTypeForCSharp",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.NameWithTypeForCSharp",
+      "nameWithType": "ItemViewModel.NameWithTypeForCSharp"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.NameWithTypeForVB",
+      "name": "NameWithTypeForVB",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_NameWithTypeForVB",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.NameWithTypeForVB",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.NameWithTypeForVB",
+      "nameWithType": "ItemViewModel.NameWithTypeForVB"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.NameWithTypeForVB*",
+      "name": "NameWithTypeForVB",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_NameWithTypeForVB_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.NameWithTypeForVB",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.NameWithTypeForVB",
+      "nameWithType": "ItemViewModel.NameWithTypeForVB"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Names",
+      "name": "Names",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Names",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.Names",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Names",
+      "nameWithType": "ItemViewModel.Names"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Names*",
+      "name": "Names",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Names_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Names",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Names",
+      "nameWithType": "ItemViewModel.Names"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.NamesWithType",
+      "name": "NamesWithType",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_NamesWithType",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.NamesWithType",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.NamesWithType",
+      "nameWithType": "ItemViewModel.NamesWithType"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.NamesWithType*",
+      "name": "NamesWithType",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_NamesWithType_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.NamesWithType",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.NamesWithType",
+      "nameWithType": "ItemViewModel.NamesWithType"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.NamespaceName",
+      "name": "NamespaceName",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_NamespaceName",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.NamespaceName",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.NamespaceName",
+      "nameWithType": "ItemViewModel.NamespaceName"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.NamespaceName*",
+      "name": "NamespaceName",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_NamespaceName_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.NamespaceName",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.NamespaceName",
+      "nameWithType": "ItemViewModel.NamespaceName"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Overload",
+      "name": "Overload",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Overload",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.Overload",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Overload",
+      "nameWithType": "ItemViewModel.Overload"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Overload*",
+      "name": "Overload",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Overload_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Overload",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Overload",
+      "nameWithType": "ItemViewModel.Overload"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Overridden",
+      "name": "Overridden",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Overridden",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.Overridden",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Overridden",
+      "nameWithType": "ItemViewModel.Overridden"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Overridden*",
+      "name": "Overridden",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Overridden_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Overridden",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Overridden",
+      "nameWithType": "ItemViewModel.Overridden"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Parent",
+      "name": "Parent",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Parent",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.Parent",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Parent",
+      "nameWithType": "ItemViewModel.Parent"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Parent*",
+      "name": "Parent",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Parent_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Parent",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Parent",
+      "nameWithType": "ItemViewModel.Parent"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Platform",
+      "name": "Platform",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Platform",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.Platform",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Platform",
+      "nameWithType": "ItemViewModel.Platform"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Platform*",
+      "name": "Platform",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Platform_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Platform",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Platform",
+      "nameWithType": "ItemViewModel.Platform"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Remarks",
+      "name": "Remarks",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Remarks",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.Remarks",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Remarks",
+      "nameWithType": "ItemViewModel.Remarks"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Remarks*",
+      "name": "Remarks",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Remarks_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Remarks",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Remarks",
+      "nameWithType": "ItemViewModel.Remarks"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.SeeAlsos",
+      "name": "SeeAlsos",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_SeeAlsos",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.SeeAlsos",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.SeeAlsos",
+      "nameWithType": "ItemViewModel.SeeAlsos"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.SeeAlsos*",
+      "name": "SeeAlsos",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_SeeAlsos_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.SeeAlsos",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.SeeAlsos",
+      "nameWithType": "ItemViewModel.SeeAlsos"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.SeeAlsosUidReference",
+      "name": "SeeAlsosUidReference",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_SeeAlsosUidReference",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.SeeAlsosUidReference",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.SeeAlsosUidReference",
+      "nameWithType": "ItemViewModel.SeeAlsosUidReference"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.SeeAlsosUidReference*",
+      "name": "SeeAlsosUidReference",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_SeeAlsosUidReference_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.SeeAlsosUidReference",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.SeeAlsosUidReference",
+      "nameWithType": "ItemViewModel.SeeAlsosUidReference"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Source",
+      "name": "Source",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Source",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.Source",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Source",
+      "nameWithType": "ItemViewModel.Source"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Source*",
+      "name": "Source",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Source_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Source",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Source",
+      "nameWithType": "ItemViewModel.Source"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Summary",
+      "name": "Summary",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Summary",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.Summary",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Summary",
+      "nameWithType": "ItemViewModel.Summary"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Summary*",
+      "name": "Summary",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Summary_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Summary",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Summary",
+      "nameWithType": "ItemViewModel.Summary"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.SupportedLanguages",
+      "name": "SupportedLanguages",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_SupportedLanguages",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.SupportedLanguages",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.SupportedLanguages",
+      "nameWithType": "ItemViewModel.SupportedLanguages"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.SupportedLanguages*",
+      "name": "SupportedLanguages",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_SupportedLanguages_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.SupportedLanguages",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.SupportedLanguages",
+      "nameWithType": "ItemViewModel.SupportedLanguages"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Syntax",
+      "name": "Syntax",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Syntax",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.Syntax",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Syntax",
+      "nameWithType": "ItemViewModel.Syntax"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Syntax*",
+      "name": "Syntax",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Syntax_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Syntax",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Syntax",
+      "nameWithType": "ItemViewModel.Syntax"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Type",
+      "name": "Type",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Type",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.Type",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Type",
+      "nameWithType": "ItemViewModel.Type"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Type*",
+      "name": "Type",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Type_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Type",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Type",
+      "nameWithType": "ItemViewModel.Type"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Uid",
+      "name": "Uid",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Uid",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.Uid",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Uid",
+      "nameWithType": "ItemViewModel.Uid"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Uid*",
+      "name": "Uid",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Uid_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Uid",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Uid",
+      "nameWithType": "ItemViewModel.Uid"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.LinkInfo",
+      "name": "LinkInfo",
+      "href": "api/Docfx.DataContracts.ManagedReference.LinkInfo.html",
+      "commentId": "T:Docfx.DataContracts.ManagedReference.LinkInfo",
+      "fullName": "Docfx.DataContracts.ManagedReference.LinkInfo",
+      "nameWithType": "LinkInfo"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.LinkInfo.AltText",
+      "name": "AltText",
+      "href": "api/Docfx.DataContracts.ManagedReference.LinkInfo.html#Docfx_DataContracts_ManagedReference_LinkInfo_AltText",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.LinkInfo.AltText",
+      "fullName": "Docfx.DataContracts.ManagedReference.LinkInfo.AltText",
+      "nameWithType": "LinkInfo.AltText"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.LinkInfo.AltText*",
+      "name": "AltText",
+      "href": "api/Docfx.DataContracts.ManagedReference.LinkInfo.html#Docfx_DataContracts_ManagedReference_LinkInfo_AltText_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.LinkInfo.AltText",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.LinkInfo.AltText",
+      "nameWithType": "LinkInfo.AltText"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.LinkInfo.CommentId",
+      "name": "CommentId",
+      "href": "api/Docfx.DataContracts.ManagedReference.LinkInfo.html#Docfx_DataContracts_ManagedReference_LinkInfo_CommentId",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.LinkInfo.CommentId",
+      "fullName": "Docfx.DataContracts.ManagedReference.LinkInfo.CommentId",
+      "nameWithType": "LinkInfo.CommentId"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.LinkInfo.CommentId*",
+      "name": "CommentId",
+      "href": "api/Docfx.DataContracts.ManagedReference.LinkInfo.html#Docfx_DataContracts_ManagedReference_LinkInfo_CommentId_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.LinkInfo.CommentId",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.LinkInfo.CommentId",
+      "nameWithType": "LinkInfo.CommentId"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.LinkInfo.LinkId",
+      "name": "LinkId",
+      "href": "api/Docfx.DataContracts.ManagedReference.LinkInfo.html#Docfx_DataContracts_ManagedReference_LinkInfo_LinkId",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.LinkInfo.LinkId",
+      "fullName": "Docfx.DataContracts.ManagedReference.LinkInfo.LinkId",
+      "nameWithType": "LinkInfo.LinkId"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.LinkInfo.LinkId*",
+      "name": "LinkId",
+      "href": "api/Docfx.DataContracts.ManagedReference.LinkInfo.html#Docfx_DataContracts_ManagedReference_LinkInfo_LinkId_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.LinkInfo.LinkId",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.LinkInfo.LinkId",
+      "nameWithType": "LinkInfo.LinkId"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.LinkInfo.LinkType",
+      "name": "LinkType",
+      "href": "api/Docfx.DataContracts.ManagedReference.LinkInfo.html#Docfx_DataContracts_ManagedReference_LinkInfo_LinkType",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.LinkInfo.LinkType",
+      "fullName": "Docfx.DataContracts.ManagedReference.LinkInfo.LinkType",
+      "nameWithType": "LinkInfo.LinkType"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.LinkInfo.LinkType*",
+      "name": "LinkType",
+      "href": "api/Docfx.DataContracts.ManagedReference.LinkInfo.html#Docfx_DataContracts_ManagedReference_LinkInfo_LinkType_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.LinkInfo.LinkType",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.LinkInfo.LinkType",
+      "nameWithType": "LinkInfo.LinkType"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.LinkType",
+      "name": "LinkType",
+      "href": "api/Docfx.DataContracts.ManagedReference.LinkType.html",
+      "commentId": "T:Docfx.DataContracts.ManagedReference.LinkType",
+      "fullName": "Docfx.DataContracts.ManagedReference.LinkType",
+      "nameWithType": "LinkType"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.LinkType.CRef",
+      "name": "CRef",
+      "href": "api/Docfx.DataContracts.ManagedReference.LinkType.html#Docfx_DataContracts_ManagedReference_LinkType_CRef",
+      "commentId": "F:Docfx.DataContracts.ManagedReference.LinkType.CRef",
+      "fullName": "Docfx.DataContracts.ManagedReference.LinkType.CRef",
+      "nameWithType": "LinkType.CRef"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.LinkType.HRef",
+      "name": "HRef",
+      "href": "api/Docfx.DataContracts.ManagedReference.LinkType.html#Docfx_DataContracts_ManagedReference_LinkType_HRef",
+      "commentId": "F:Docfx.DataContracts.ManagedReference.LinkType.HRef",
+      "fullName": "Docfx.DataContracts.ManagedReference.LinkType.HRef",
+      "nameWithType": "LinkType.HRef"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.MemberType",
+      "name": "MemberType",
+      "href": "api/Docfx.DataContracts.ManagedReference.MemberType.html",
+      "commentId": "T:Docfx.DataContracts.ManagedReference.MemberType",
+      "fullName": "Docfx.DataContracts.ManagedReference.MemberType",
+      "nameWithType": "MemberType"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.MemberType.Assembly",
+      "name": "Assembly",
+      "href": "api/Docfx.DataContracts.ManagedReference.MemberType.html#Docfx_DataContracts_ManagedReference_MemberType_Assembly",
+      "commentId": "F:Docfx.DataContracts.ManagedReference.MemberType.Assembly",
+      "fullName": "Docfx.DataContracts.ManagedReference.MemberType.Assembly",
+      "nameWithType": "MemberType.Assembly"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.MemberType.AttachedEvent",
+      "name": "AttachedEvent",
+      "href": "api/Docfx.DataContracts.ManagedReference.MemberType.html#Docfx_DataContracts_ManagedReference_MemberType_AttachedEvent",
+      "commentId": "F:Docfx.DataContracts.ManagedReference.MemberType.AttachedEvent",
+      "fullName": "Docfx.DataContracts.ManagedReference.MemberType.AttachedEvent",
+      "nameWithType": "MemberType.AttachedEvent"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.MemberType.AttachedProperty",
+      "name": "AttachedProperty",
+      "href": "api/Docfx.DataContracts.ManagedReference.MemberType.html#Docfx_DataContracts_ManagedReference_MemberType_AttachedProperty",
+      "commentId": "F:Docfx.DataContracts.ManagedReference.MemberType.AttachedProperty",
+      "fullName": "Docfx.DataContracts.ManagedReference.MemberType.AttachedProperty",
+      "nameWithType": "MemberType.AttachedProperty"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.MemberType.Class",
+      "name": "Class",
+      "href": "api/Docfx.DataContracts.ManagedReference.MemberType.html#Docfx_DataContracts_ManagedReference_MemberType_Class",
+      "commentId": "F:Docfx.DataContracts.ManagedReference.MemberType.Class",
+      "fullName": "Docfx.DataContracts.ManagedReference.MemberType.Class",
+      "nameWithType": "MemberType.Class"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.MemberType.Constructor",
+      "name": "Constructor",
+      "href": "api/Docfx.DataContracts.ManagedReference.MemberType.html#Docfx_DataContracts_ManagedReference_MemberType_Constructor",
+      "commentId": "F:Docfx.DataContracts.ManagedReference.MemberType.Constructor",
+      "fullName": "Docfx.DataContracts.ManagedReference.MemberType.Constructor",
+      "nameWithType": "MemberType.Constructor"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.MemberType.Container",
+      "name": "Container",
+      "href": "api/Docfx.DataContracts.ManagedReference.MemberType.html#Docfx_DataContracts_ManagedReference_MemberType_Container",
+      "commentId": "F:Docfx.DataContracts.ManagedReference.MemberType.Container",
+      "fullName": "Docfx.DataContracts.ManagedReference.MemberType.Container",
+      "nameWithType": "MemberType.Container"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.MemberType.Default",
+      "name": "Default",
+      "href": "api/Docfx.DataContracts.ManagedReference.MemberType.html#Docfx_DataContracts_ManagedReference_MemberType_Default",
+      "commentId": "F:Docfx.DataContracts.ManagedReference.MemberType.Default",
+      "fullName": "Docfx.DataContracts.ManagedReference.MemberType.Default",
+      "nameWithType": "MemberType.Default"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.MemberType.Delegate",
+      "name": "Delegate",
+      "href": "api/Docfx.DataContracts.ManagedReference.MemberType.html#Docfx_DataContracts_ManagedReference_MemberType_Delegate",
+      "commentId": "F:Docfx.DataContracts.ManagedReference.MemberType.Delegate",
+      "fullName": "Docfx.DataContracts.ManagedReference.MemberType.Delegate",
+      "nameWithType": "MemberType.Delegate"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.MemberType.Enum",
+      "name": "Enum",
+      "href": "api/Docfx.DataContracts.ManagedReference.MemberType.html#Docfx_DataContracts_ManagedReference_MemberType_Enum",
+      "commentId": "F:Docfx.DataContracts.ManagedReference.MemberType.Enum",
+      "fullName": "Docfx.DataContracts.ManagedReference.MemberType.Enum",
+      "nameWithType": "MemberType.Enum"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.MemberType.Event",
+      "name": "Event",
+      "href": "api/Docfx.DataContracts.ManagedReference.MemberType.html#Docfx_DataContracts_ManagedReference_MemberType_Event",
+      "commentId": "F:Docfx.DataContracts.ManagedReference.MemberType.Event",
+      "fullName": "Docfx.DataContracts.ManagedReference.MemberType.Event",
+      "nameWithType": "MemberType.Event"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.MemberType.Field",
+      "name": "Field",
+      "href": "api/Docfx.DataContracts.ManagedReference.MemberType.html#Docfx_DataContracts_ManagedReference_MemberType_Field",
+      "commentId": "F:Docfx.DataContracts.ManagedReference.MemberType.Field",
+      "fullName": "Docfx.DataContracts.ManagedReference.MemberType.Field",
+      "nameWithType": "MemberType.Field"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.MemberType.Interface",
+      "name": "Interface",
+      "href": "api/Docfx.DataContracts.ManagedReference.MemberType.html#Docfx_DataContracts_ManagedReference_MemberType_Interface",
+      "commentId": "F:Docfx.DataContracts.ManagedReference.MemberType.Interface",
+      "fullName": "Docfx.DataContracts.ManagedReference.MemberType.Interface",
+      "nameWithType": "MemberType.Interface"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.MemberType.Method",
+      "name": "Method",
+      "href": "api/Docfx.DataContracts.ManagedReference.MemberType.html#Docfx_DataContracts_ManagedReference_MemberType_Method",
+      "commentId": "F:Docfx.DataContracts.ManagedReference.MemberType.Method",
+      "fullName": "Docfx.DataContracts.ManagedReference.MemberType.Method",
+      "nameWithType": "MemberType.Method"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.MemberType.Namespace",
+      "name": "Namespace",
+      "href": "api/Docfx.DataContracts.ManagedReference.MemberType.html#Docfx_DataContracts_ManagedReference_MemberType_Namespace",
+      "commentId": "F:Docfx.DataContracts.ManagedReference.MemberType.Namespace",
+      "fullName": "Docfx.DataContracts.ManagedReference.MemberType.Namespace",
+      "nameWithType": "MemberType.Namespace"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.MemberType.Operator",
+      "name": "Operator",
+      "href": "api/Docfx.DataContracts.ManagedReference.MemberType.html#Docfx_DataContracts_ManagedReference_MemberType_Operator",
+      "commentId": "F:Docfx.DataContracts.ManagedReference.MemberType.Operator",
+      "fullName": "Docfx.DataContracts.ManagedReference.MemberType.Operator",
+      "nameWithType": "MemberType.Operator"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.MemberType.Property",
+      "name": "Property",
+      "href": "api/Docfx.DataContracts.ManagedReference.MemberType.html#Docfx_DataContracts_ManagedReference_MemberType_Property",
+      "commentId": "F:Docfx.DataContracts.ManagedReference.MemberType.Property",
+      "fullName": "Docfx.DataContracts.ManagedReference.MemberType.Property",
+      "nameWithType": "MemberType.Property"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.MemberType.Struct",
+      "name": "Struct",
+      "href": "api/Docfx.DataContracts.ManagedReference.MemberType.html#Docfx_DataContracts_ManagedReference_MemberType_Struct",
+      "commentId": "F:Docfx.DataContracts.ManagedReference.MemberType.Struct",
+      "fullName": "Docfx.DataContracts.ManagedReference.MemberType.Struct",
+      "nameWithType": "MemberType.Struct"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.MemberType.Toc",
+      "name": "Toc",
+      "href": "api/Docfx.DataContracts.ManagedReference.MemberType.html#Docfx_DataContracts_ManagedReference_MemberType_Toc",
+      "commentId": "F:Docfx.DataContracts.ManagedReference.MemberType.Toc",
+      "fullName": "Docfx.DataContracts.ManagedReference.MemberType.Toc",
+      "nameWithType": "MemberType.Toc"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.NamedArgumentInfo",
+      "name": "NamedArgumentInfo",
+      "href": "api/Docfx.DataContracts.ManagedReference.NamedArgumentInfo.html",
+      "commentId": "T:Docfx.DataContracts.ManagedReference.NamedArgumentInfo",
+      "fullName": "Docfx.DataContracts.ManagedReference.NamedArgumentInfo",
+      "nameWithType": "NamedArgumentInfo"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.NamedArgumentInfo.Name",
+      "name": "Name",
+      "href": "api/Docfx.DataContracts.ManagedReference.NamedArgumentInfo.html#Docfx_DataContracts_ManagedReference_NamedArgumentInfo_Name",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.NamedArgumentInfo.Name",
+      "fullName": "Docfx.DataContracts.ManagedReference.NamedArgumentInfo.Name",
+      "nameWithType": "NamedArgumentInfo.Name"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.NamedArgumentInfo.Name*",
+      "name": "Name",
+      "href": "api/Docfx.DataContracts.ManagedReference.NamedArgumentInfo.html#Docfx_DataContracts_ManagedReference_NamedArgumentInfo_Name_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.NamedArgumentInfo.Name",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.NamedArgumentInfo.Name",
+      "nameWithType": "NamedArgumentInfo.Name"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.NamedArgumentInfo.Type",
+      "name": "Type",
+      "href": "api/Docfx.DataContracts.ManagedReference.NamedArgumentInfo.html#Docfx_DataContracts_ManagedReference_NamedArgumentInfo_Type",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.NamedArgumentInfo.Type",
+      "fullName": "Docfx.DataContracts.ManagedReference.NamedArgumentInfo.Type",
+      "nameWithType": "NamedArgumentInfo.Type"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.NamedArgumentInfo.Type*",
+      "name": "Type",
+      "href": "api/Docfx.DataContracts.ManagedReference.NamedArgumentInfo.html#Docfx_DataContracts_ManagedReference_NamedArgumentInfo_Type_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.NamedArgumentInfo.Type",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.NamedArgumentInfo.Type",
+      "nameWithType": "NamedArgumentInfo.Type"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.NamedArgumentInfo.Value",
+      "name": "Value",
+      "href": "api/Docfx.DataContracts.ManagedReference.NamedArgumentInfo.html#Docfx_DataContracts_ManagedReference_NamedArgumentInfo_Value",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.NamedArgumentInfo.Value",
+      "fullName": "Docfx.DataContracts.ManagedReference.NamedArgumentInfo.Value",
+      "nameWithType": "NamedArgumentInfo.Value"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.NamedArgumentInfo.Value*",
+      "name": "Value",
+      "href": "api/Docfx.DataContracts.ManagedReference.NamedArgumentInfo.html#Docfx_DataContracts_ManagedReference_NamedArgumentInfo_Value_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.NamedArgumentInfo.Value",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.NamedArgumentInfo.Value",
+      "nameWithType": "NamedArgumentInfo.Value"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.PageViewModel",
+      "name": "PageViewModel",
+      "href": "api/Docfx.DataContracts.ManagedReference.PageViewModel.html",
+      "commentId": "T:Docfx.DataContracts.ManagedReference.PageViewModel",
+      "fullName": "Docfx.DataContracts.ManagedReference.PageViewModel",
+      "nameWithType": "PageViewModel"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.PageViewModel.Items",
+      "name": "Items",
+      "href": "api/Docfx.DataContracts.ManagedReference.PageViewModel.html#Docfx_DataContracts_ManagedReference_PageViewModel_Items",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.PageViewModel.Items",
+      "fullName": "Docfx.DataContracts.ManagedReference.PageViewModel.Items",
+      "nameWithType": "PageViewModel.Items"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.PageViewModel.Items*",
+      "name": "Items",
+      "href": "api/Docfx.DataContracts.ManagedReference.PageViewModel.html#Docfx_DataContracts_ManagedReference_PageViewModel_Items_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.PageViewModel.Items",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.PageViewModel.Items",
+      "nameWithType": "PageViewModel.Items"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.PageViewModel.MemberLayout",
+      "name": "MemberLayout",
+      "href": "api/Docfx.DataContracts.ManagedReference.PageViewModel.html#Docfx_DataContracts_ManagedReference_PageViewModel_MemberLayout",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.PageViewModel.MemberLayout",
+      "fullName": "Docfx.DataContracts.ManagedReference.PageViewModel.MemberLayout",
+      "nameWithType": "PageViewModel.MemberLayout"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.PageViewModel.MemberLayout*",
+      "name": "MemberLayout",
+      "href": "api/Docfx.DataContracts.ManagedReference.PageViewModel.html#Docfx_DataContracts_ManagedReference_PageViewModel_MemberLayout_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.PageViewModel.MemberLayout",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.PageViewModel.MemberLayout",
+      "nameWithType": "PageViewModel.MemberLayout"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.PageViewModel.Metadata",
+      "name": "Metadata",
+      "href": "api/Docfx.DataContracts.ManagedReference.PageViewModel.html#Docfx_DataContracts_ManagedReference_PageViewModel_Metadata",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.PageViewModel.Metadata",
+      "fullName": "Docfx.DataContracts.ManagedReference.PageViewModel.Metadata",
+      "nameWithType": "PageViewModel.Metadata"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.PageViewModel.Metadata*",
+      "name": "Metadata",
+      "href": "api/Docfx.DataContracts.ManagedReference.PageViewModel.html#Docfx_DataContracts_ManagedReference_PageViewModel_Metadata_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.PageViewModel.Metadata",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.PageViewModel.Metadata",
+      "nameWithType": "PageViewModel.Metadata"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.PageViewModel.References",
+      "name": "References",
+      "href": "api/Docfx.DataContracts.ManagedReference.PageViewModel.html#Docfx_DataContracts_ManagedReference_PageViewModel_References",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.PageViewModel.References",
+      "fullName": "Docfx.DataContracts.ManagedReference.PageViewModel.References",
+      "nameWithType": "PageViewModel.References"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.PageViewModel.References*",
+      "name": "References",
+      "href": "api/Docfx.DataContracts.ManagedReference.PageViewModel.html#Docfx_DataContracts_ManagedReference_PageViewModel_References_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.PageViewModel.References",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.PageViewModel.References",
+      "nameWithType": "PageViewModel.References"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.PageViewModel.ShouldSkipMarkup",
+      "name": "ShouldSkipMarkup",
+      "href": "api/Docfx.DataContracts.ManagedReference.PageViewModel.html#Docfx_DataContracts_ManagedReference_PageViewModel_ShouldSkipMarkup",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.PageViewModel.ShouldSkipMarkup",
+      "fullName": "Docfx.DataContracts.ManagedReference.PageViewModel.ShouldSkipMarkup",
+      "nameWithType": "PageViewModel.ShouldSkipMarkup"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.PageViewModel.ShouldSkipMarkup*",
+      "name": "ShouldSkipMarkup",
+      "href": "api/Docfx.DataContracts.ManagedReference.PageViewModel.html#Docfx_DataContracts_ManagedReference_PageViewModel_ShouldSkipMarkup_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.PageViewModel.ShouldSkipMarkup",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.PageViewModel.ShouldSkipMarkup",
+      "nameWithType": "PageViewModel.ShouldSkipMarkup"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel",
+      "name": "SyntaxDetailViewModel",
+      "href": "api/Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.html",
+      "commentId": "T:Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel",
+      "fullName": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel",
+      "nameWithType": "SyntaxDetailViewModel"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Content",
+      "name": "Content",
+      "href": "api/Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.html#Docfx_DataContracts_ManagedReference_SyntaxDetailViewModel_Content",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Content",
+      "fullName": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Content",
+      "nameWithType": "SyntaxDetailViewModel.Content"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Content*",
+      "name": "Content",
+      "href": "api/Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.html#Docfx_DataContracts_ManagedReference_SyntaxDetailViewModel_Content_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Content",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Content",
+      "nameWithType": "SyntaxDetailViewModel.Content"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.ContentForCSharp",
+      "name": "ContentForCSharp",
+      "href": "api/Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.html#Docfx_DataContracts_ManagedReference_SyntaxDetailViewModel_ContentForCSharp",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.ContentForCSharp",
+      "fullName": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.ContentForCSharp",
+      "nameWithType": "SyntaxDetailViewModel.ContentForCSharp"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.ContentForCSharp*",
+      "name": "ContentForCSharp",
+      "href": "api/Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.html#Docfx_DataContracts_ManagedReference_SyntaxDetailViewModel_ContentForCSharp_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.ContentForCSharp",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.ContentForCSharp",
+      "nameWithType": "SyntaxDetailViewModel.ContentForCSharp"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.ContentForVB",
+      "name": "ContentForVB",
+      "href": "api/Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.html#Docfx_DataContracts_ManagedReference_SyntaxDetailViewModel_ContentForVB",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.ContentForVB",
+      "fullName": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.ContentForVB",
+      "nameWithType": "SyntaxDetailViewModel.ContentForVB"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.ContentForVB*",
+      "name": "ContentForVB",
+      "href": "api/Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.html#Docfx_DataContracts_ManagedReference_SyntaxDetailViewModel_ContentForVB_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.ContentForVB",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.ContentForVB",
+      "nameWithType": "SyntaxDetailViewModel.ContentForVB"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Contents",
+      "name": "Contents",
+      "href": "api/Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.html#Docfx_DataContracts_ManagedReference_SyntaxDetailViewModel_Contents",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Contents",
+      "fullName": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Contents",
+      "nameWithType": "SyntaxDetailViewModel.Contents"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Contents*",
+      "name": "Contents",
+      "href": "api/Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.html#Docfx_DataContracts_ManagedReference_SyntaxDetailViewModel_Contents_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Contents",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Contents",
+      "nameWithType": "SyntaxDetailViewModel.Contents"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Parameters",
+      "name": "Parameters",
+      "href": "api/Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.html#Docfx_DataContracts_ManagedReference_SyntaxDetailViewModel_Parameters",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Parameters",
+      "fullName": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Parameters",
+      "nameWithType": "SyntaxDetailViewModel.Parameters"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Parameters*",
+      "name": "Parameters",
+      "href": "api/Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.html#Docfx_DataContracts_ManagedReference_SyntaxDetailViewModel_Parameters_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Parameters",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Parameters",
+      "nameWithType": "SyntaxDetailViewModel.Parameters"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Return",
+      "name": "Return",
+      "href": "api/Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.html#Docfx_DataContracts_ManagedReference_SyntaxDetailViewModel_Return",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Return",
+      "fullName": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Return",
+      "nameWithType": "SyntaxDetailViewModel.Return"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Return*",
+      "name": "Return",
+      "href": "api/Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.html#Docfx_DataContracts_ManagedReference_SyntaxDetailViewModel_Return_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Return",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Return",
+      "nameWithType": "SyntaxDetailViewModel.Return"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.TypeParameters",
+      "name": "TypeParameters",
+      "href": "api/Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.html#Docfx_DataContracts_ManagedReference_SyntaxDetailViewModel_TypeParameters",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.TypeParameters",
+      "fullName": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.TypeParameters",
+      "nameWithType": "SyntaxDetailViewModel.TypeParameters"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.TypeParameters*",
+      "name": "TypeParameters",
+      "href": "api/Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.html#Docfx_DataContracts_ManagedReference_SyntaxDetailViewModel_TypeParameters_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.TypeParameters",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.TypeParameters",
+      "nameWithType": "SyntaxDetailViewModel.TypeParameters"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.SyntaxLanguage",
+      "name": "SyntaxLanguage",
+      "href": "api/Docfx.DataContracts.ManagedReference.SyntaxLanguage.html",
+      "commentId": "T:Docfx.DataContracts.ManagedReference.SyntaxLanguage",
+      "fullName": "Docfx.DataContracts.ManagedReference.SyntaxLanguage",
+      "nameWithType": "SyntaxLanguage"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.SyntaxLanguage.CSharp",
+      "name": "CSharp",
+      "href": "api/Docfx.DataContracts.ManagedReference.SyntaxLanguage.html#Docfx_DataContracts_ManagedReference_SyntaxLanguage_CSharp",
+      "commentId": "F:Docfx.DataContracts.ManagedReference.SyntaxLanguage.CSharp",
+      "fullName": "Docfx.DataContracts.ManagedReference.SyntaxLanguage.CSharp",
+      "nameWithType": "SyntaxLanguage.CSharp"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.SyntaxLanguage.Default",
+      "name": "Default",
+      "href": "api/Docfx.DataContracts.ManagedReference.SyntaxLanguage.html#Docfx_DataContracts_ManagedReference_SyntaxLanguage_Default",
+      "commentId": "F:Docfx.DataContracts.ManagedReference.SyntaxLanguage.Default",
+      "fullName": "Docfx.DataContracts.ManagedReference.SyntaxLanguage.Default",
+      "nameWithType": "SyntaxLanguage.Default"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.SyntaxLanguage.VB",
+      "name": "VB",
+      "href": "api/Docfx.DataContracts.ManagedReference.SyntaxLanguage.html#Docfx_DataContracts_ManagedReference_SyntaxLanguage_VB",
+      "commentId": "F:Docfx.DataContracts.ManagedReference.SyntaxLanguage.VB",
+      "fullName": "Docfx.DataContracts.ManagedReference.SyntaxLanguage.VB",
+      "nameWithType": "SyntaxLanguage.VB"
+    },
+    {
+      "uid": "Docfx.Docset",
+      "name": "Docset",
+      "href": "api/Docfx.Docset.html",
+      "commentId": "T:Docfx.Docset",
+      "fullName": "Docfx.Docset",
+      "nameWithType": "Docset"
+    },
+    {
+      "uid": "Docfx.Docset.Build(System.String)",
+      "name": "Build(string)",
+      "href": "api/Docfx.Docset.html#Docfx_Docset_Build_System_String_",
+      "commentId": "M:Docfx.Docset.Build(System.String)",
+      "name.vb": "Build(String)",
+      "fullName": "Docfx.Docset.Build(string)",
+      "fullName.vb": "Docfx.Docset.Build(String)",
+      "nameWithType": "Docset.Build(string)",
+      "nameWithType.vb": "Docset.Build(String)"
+    },
+    {
+      "uid": "Docfx.Docset.Build(System.String,Docfx.BuildOptions)",
+      "name": "Build(string, BuildOptions)",
+      "href": "api/Docfx.Docset.html#Docfx_Docset_Build_System_String_Docfx_BuildOptions_",
+      "commentId": "M:Docfx.Docset.Build(System.String,Docfx.BuildOptions)",
+      "name.vb": "Build(String, BuildOptions)",
+      "fullName": "Docfx.Docset.Build(string, Docfx.BuildOptions)",
+      "fullName.vb": "Docfx.Docset.Build(String, Docfx.BuildOptions)",
+      "nameWithType": "Docset.Build(string, BuildOptions)",
+      "nameWithType.vb": "Docset.Build(String, BuildOptions)"
+    },
+    {
+      "uid": "Docfx.Docset.Build*",
+      "name": "Build",
+      "href": "api/Docfx.Docset.html#Docfx_Docset_Build_",
+      "commentId": "Overload:Docfx.Docset.Build",
+      "isSpec": "True",
+      "fullName": "Docfx.Docset.Build",
+      "nameWithType": "Docset.Build"
+    },
+    {
+      "uid": "Docfx.Docset.Pdf(System.String)",
+      "name": "Pdf(string)",
+      "href": "api/Docfx.Docset.html#Docfx_Docset_Pdf_System_String_",
+      "commentId": "M:Docfx.Docset.Pdf(System.String)",
+      "name.vb": "Pdf(String)",
+      "fullName": "Docfx.Docset.Pdf(string)",
+      "fullName.vb": "Docfx.Docset.Pdf(String)",
+      "nameWithType": "Docset.Pdf(string)",
+      "nameWithType.vb": "Docset.Pdf(String)"
+    },
+    {
+      "uid": "Docfx.Docset.Pdf(System.String,Docfx.BuildOptions)",
+      "name": "Pdf(string, BuildOptions)",
+      "href": "api/Docfx.Docset.html#Docfx_Docset_Pdf_System_String_Docfx_BuildOptions_",
+      "commentId": "M:Docfx.Docset.Pdf(System.String,Docfx.BuildOptions)",
+      "name.vb": "Pdf(String, BuildOptions)",
+      "fullName": "Docfx.Docset.Pdf(string, Docfx.BuildOptions)",
+      "fullName.vb": "Docfx.Docset.Pdf(String, Docfx.BuildOptions)",
+      "nameWithType": "Docset.Pdf(string, BuildOptions)",
+      "nameWithType.vb": "Docset.Pdf(String, BuildOptions)"
+    },
+    {
+      "uid": "Docfx.Docset.Pdf*",
+      "name": "Pdf",
+      "href": "api/Docfx.Docset.html#Docfx_Docset_Pdf_",
+      "commentId": "Overload:Docfx.Docset.Pdf",
+      "isSpec": "True",
+      "fullName": "Docfx.Docset.Pdf",
+      "nameWithType": "Docset.Pdf"
+    },
+    {
+      "uid": "Docfx.Dotnet",
+      "name": "Docfx.Dotnet",
+      "href": "api/Docfx.Dotnet.html",
+      "commentId": "N:Docfx.Dotnet",
+      "fullName": "Docfx.Dotnet",
+      "nameWithType": "Docfx.Dotnet"
+    },
+    {
+      "uid": "Docfx.Dotnet.DotnetApiCatalog",
+      "name": "DotnetApiCatalog",
+      "href": "api/Docfx.Dotnet.DotnetApiCatalog.html",
+      "commentId": "T:Docfx.Dotnet.DotnetApiCatalog",
+      "fullName": "Docfx.Dotnet.DotnetApiCatalog",
+      "nameWithType": "DotnetApiCatalog"
+    },
+    {
+      "uid": "Docfx.Dotnet.DotnetApiCatalog.GenerateManagedReferenceYamlFiles(System.String)",
+      "name": "GenerateManagedReferenceYamlFiles(string)",
+      "href": "api/Docfx.Dotnet.DotnetApiCatalog.html#Docfx_Dotnet_DotnetApiCatalog_GenerateManagedReferenceYamlFiles_System_String_",
+      "commentId": "M:Docfx.Dotnet.DotnetApiCatalog.GenerateManagedReferenceYamlFiles(System.String)",
+      "name.vb": "GenerateManagedReferenceYamlFiles(String)",
+      "fullName": "Docfx.Dotnet.DotnetApiCatalog.GenerateManagedReferenceYamlFiles(string)",
+      "fullName.vb": "Docfx.Dotnet.DotnetApiCatalog.GenerateManagedReferenceYamlFiles(String)",
+      "nameWithType": "DotnetApiCatalog.GenerateManagedReferenceYamlFiles(string)",
+      "nameWithType.vb": "DotnetApiCatalog.GenerateManagedReferenceYamlFiles(String)"
+    },
+    {
+      "uid": "Docfx.Dotnet.DotnetApiCatalog.GenerateManagedReferenceYamlFiles(System.String,Docfx.Dotnet.DotnetApiOptions)",
+      "name": "GenerateManagedReferenceYamlFiles(string, DotnetApiOptions)",
+      "href": "api/Docfx.Dotnet.DotnetApiCatalog.html#Docfx_Dotnet_DotnetApiCatalog_GenerateManagedReferenceYamlFiles_System_String_Docfx_Dotnet_DotnetApiOptions_",
+      "commentId": "M:Docfx.Dotnet.DotnetApiCatalog.GenerateManagedReferenceYamlFiles(System.String,Docfx.Dotnet.DotnetApiOptions)",
+      "name.vb": "GenerateManagedReferenceYamlFiles(String, DotnetApiOptions)",
+      "fullName": "Docfx.Dotnet.DotnetApiCatalog.GenerateManagedReferenceYamlFiles(string, Docfx.Dotnet.DotnetApiOptions)",
+      "fullName.vb": "Docfx.Dotnet.DotnetApiCatalog.GenerateManagedReferenceYamlFiles(String, Docfx.Dotnet.DotnetApiOptions)",
+      "nameWithType": "DotnetApiCatalog.GenerateManagedReferenceYamlFiles(string, DotnetApiOptions)",
+      "nameWithType.vb": "DotnetApiCatalog.GenerateManagedReferenceYamlFiles(String, DotnetApiOptions)"
+    },
+    {
+      "uid": "Docfx.Dotnet.DotnetApiCatalog.GenerateManagedReferenceYamlFiles*",
+      "name": "GenerateManagedReferenceYamlFiles",
+      "href": "api/Docfx.Dotnet.DotnetApiCatalog.html#Docfx_Dotnet_DotnetApiCatalog_GenerateManagedReferenceYamlFiles_",
+      "commentId": "Overload:Docfx.Dotnet.DotnetApiCatalog.GenerateManagedReferenceYamlFiles",
+      "isSpec": "True",
+      "fullName": "Docfx.Dotnet.DotnetApiCatalog.GenerateManagedReferenceYamlFiles",
+      "nameWithType": "DotnetApiCatalog.GenerateManagedReferenceYamlFiles"
+    },
+    {
+      "uid": "Docfx.Dotnet.DotnetApiOptions",
+      "name": "DotnetApiOptions",
+      "href": "api/Docfx.Dotnet.DotnetApiOptions.html",
+      "commentId": "T:Docfx.Dotnet.DotnetApiOptions",
+      "fullName": "Docfx.Dotnet.DotnetApiOptions",
+      "nameWithType": "DotnetApiOptions"
+    },
+    {
+      "uid": "Docfx.Dotnet.DotnetApiOptions.IncludeApi",
+      "name": "IncludeApi",
+      "href": "api/Docfx.Dotnet.DotnetApiOptions.html#Docfx_Dotnet_DotnetApiOptions_IncludeApi",
+      "commentId": "P:Docfx.Dotnet.DotnetApiOptions.IncludeApi",
+      "fullName": "Docfx.Dotnet.DotnetApiOptions.IncludeApi",
+      "nameWithType": "DotnetApiOptions.IncludeApi"
+    },
+    {
+      "uid": "Docfx.Dotnet.DotnetApiOptions.IncludeApi*",
+      "name": "IncludeApi",
+      "href": "api/Docfx.Dotnet.DotnetApiOptions.html#Docfx_Dotnet_DotnetApiOptions_IncludeApi_",
+      "commentId": "Overload:Docfx.Dotnet.DotnetApiOptions.IncludeApi",
+      "isSpec": "True",
+      "fullName": "Docfx.Dotnet.DotnetApiOptions.IncludeApi",
+      "nameWithType": "DotnetApiOptions.IncludeApi"
+    },
+    {
+      "uid": "Docfx.Dotnet.DotnetApiOptions.IncludeAttribute",
+      "name": "IncludeAttribute",
+      "href": "api/Docfx.Dotnet.DotnetApiOptions.html#Docfx_Dotnet_DotnetApiOptions_IncludeAttribute",
+      "commentId": "P:Docfx.Dotnet.DotnetApiOptions.IncludeAttribute",
+      "fullName": "Docfx.Dotnet.DotnetApiOptions.IncludeAttribute",
+      "nameWithType": "DotnetApiOptions.IncludeAttribute"
+    },
+    {
+      "uid": "Docfx.Dotnet.DotnetApiOptions.IncludeAttribute*",
+      "name": "IncludeAttribute",
+      "href": "api/Docfx.Dotnet.DotnetApiOptions.html#Docfx_Dotnet_DotnetApiOptions_IncludeAttribute_",
+      "commentId": "Overload:Docfx.Dotnet.DotnetApiOptions.IncludeAttribute",
+      "isSpec": "True",
+      "fullName": "Docfx.Dotnet.DotnetApiOptions.IncludeAttribute",
+      "nameWithType": "DotnetApiOptions.IncludeAttribute"
+    },
+    {
+      "uid": "Docfx.Dotnet.DotnetApiOptions.SourceUrl",
+      "name": "SourceUrl",
+      "href": "api/Docfx.Dotnet.DotnetApiOptions.html#Docfx_Dotnet_DotnetApiOptions_SourceUrl",
+      "commentId": "P:Docfx.Dotnet.DotnetApiOptions.SourceUrl",
+      "fullName": "Docfx.Dotnet.DotnetApiOptions.SourceUrl",
+      "nameWithType": "DotnetApiOptions.SourceUrl"
+    },
+    {
+      "uid": "Docfx.Dotnet.DotnetApiOptions.SourceUrl*",
+      "name": "SourceUrl",
+      "href": "api/Docfx.Dotnet.DotnetApiOptions.html#Docfx_Dotnet_DotnetApiOptions_SourceUrl_",
+      "commentId": "Overload:Docfx.Dotnet.DotnetApiOptions.SourceUrl",
+      "isSpec": "True",
+      "fullName": "Docfx.Dotnet.DotnetApiOptions.SourceUrl",
+      "nameWithType": "DotnetApiOptions.SourceUrl"
+    },
+    {
+      "uid": "Docfx.Dotnet.SymbolIncludeState",
+      "name": "SymbolIncludeState",
+      "href": "api/Docfx.Dotnet.SymbolIncludeState.html",
+      "commentId": "T:Docfx.Dotnet.SymbolIncludeState",
+      "fullName": "Docfx.Dotnet.SymbolIncludeState",
+      "nameWithType": "SymbolIncludeState"
+    },
+    {
+      "uid": "Docfx.Dotnet.SymbolIncludeState.Default",
+      "name": "Default",
+      "href": "api/Docfx.Dotnet.SymbolIncludeState.html#Docfx_Dotnet_SymbolIncludeState_Default",
+      "commentId": "F:Docfx.Dotnet.SymbolIncludeState.Default",
+      "fullName": "Docfx.Dotnet.SymbolIncludeState.Default",
+      "nameWithType": "SymbolIncludeState.Default"
+    },
+    {
+      "uid": "Docfx.Dotnet.SymbolIncludeState.Exclude",
+      "name": "Exclude",
+      "href": "api/Docfx.Dotnet.SymbolIncludeState.html#Docfx_Dotnet_SymbolIncludeState_Exclude",
+      "commentId": "F:Docfx.Dotnet.SymbolIncludeState.Exclude",
+      "fullName": "Docfx.Dotnet.SymbolIncludeState.Exclude",
+      "nameWithType": "SymbolIncludeState.Exclude"
+    },
+    {
+      "uid": "Docfx.Dotnet.SymbolIncludeState.Include",
+      "name": "Include",
+      "href": "api/Docfx.Dotnet.SymbolIncludeState.html#Docfx_Dotnet_SymbolIncludeState_Include",
+      "commentId": "F:Docfx.Dotnet.SymbolIncludeState.Include",
+      "fullName": "Docfx.Dotnet.SymbolIncludeState.Include",
+      "nameWithType": "SymbolIncludeState.Include"
+    },
+    {
+      "uid": "Docfx.MemberLayout",
+      "name": "MemberLayout",
+      "href": "api/Docfx.MemberLayout.html",
+      "commentId": "T:Docfx.MemberLayout",
+      "fullName": "Docfx.MemberLayout",
+      "nameWithType": "MemberLayout"
+    },
+    {
+      "uid": "Docfx.MemberLayout.SamePage",
+      "name": "SamePage",
+      "href": "api/Docfx.MemberLayout.html#Docfx_MemberLayout_SamePage",
+      "commentId": "F:Docfx.MemberLayout.SamePage",
+      "fullName": "Docfx.MemberLayout.SamePage",
+      "nameWithType": "MemberLayout.SamePage"
+    },
+    {
+      "uid": "Docfx.MemberLayout.SeparatePages",
+      "name": "SeparatePages",
+      "href": "api/Docfx.MemberLayout.html#Docfx_MemberLayout_SeparatePages",
+      "commentId": "F:Docfx.MemberLayout.SeparatePages",
+      "fullName": "Docfx.MemberLayout.SeparatePages",
+      "nameWithType": "MemberLayout.SeparatePages"
+    }
+  ]
+}
diff --git a/test/docfx.Tests/SerializationTests/TestData/TocItemViewModel/Json/toc_03.json b/test/docfx.Tests/SerializationTests/TestData/TocItemViewModel/Json/toc_03.json
new file mode 100644
index 00000000000..2bdf34fa44d
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/TestData/TocItemViewModel/Json/toc_03.json
@@ -0,0 +1,210 @@
+{
+  "items": [
+    {
+      "uid": "CSharp10",
+      "name": "CSharp10",
+      "type": "Namespace",
+      "items": [
+        {
+          "uid": "CSharp10.ConstantInterpolatedStrings",
+          "name": "ConstantInterpolatedStrings",
+          "type": "Class"
+        },
+        {
+          "uid": "CSharp10.Issue7737",
+          "name": "Issue7737",
+          "type": "Class"
+        },
+        {
+          "uid": "CSharp10.ParameterlessStructConstructors",
+          "name": "ParameterlessStructConstructors",
+          "type": "Struct"
+        },
+        {
+          "uid": "CSharp10.ReadOnlyRecordStruct",
+          "name": "ReadOnlyRecordStruct",
+          "type": "Struct"
+        },
+        {
+          "uid": "CSharp10.RecordClass",
+          "name": "RecordClass",
+          "type": "Class"
+        },
+        {
+          "uid": "CSharp10.RecordStruct",
+          "name": "RecordStruct",
+          "type": "Struct"
+        }
+      ]
+    },
+    {
+      "uid": "CSharp11",
+      "name": "CSharp11",
+      "type": "Namespace",
+      "items": [
+        {
+          "uid": "CSharp11.CheckedUserDefinedOperators`1",
+          "name": "CheckedUserDefinedOperators<T>",
+          "type": "Interface"
+        },
+        {
+          "uid": "CSharp11.RequiredModifier",
+          "name": "RequiredModifier",
+          "type": "Class"
+        },
+        {
+          "uid": "CSharp11.ScopedModifier",
+          "name": "ScopedModifier",
+          "type": "Class"
+        },
+        {
+          "uid": "CSharp11.StaticAbstractMembersInInterfaces",
+          "name": "StaticAbstractMembersInInterfaces",
+          "type": "Class"
+        },
+        {
+          "uid": "CSharp11.StaticAbstractMembersInInterfaces.IGetNext`1",
+          "name": "StaticAbstractMembersInInterfaces.IGetNext<T>",
+          "type": "Interface"
+        },
+        {
+          "uid": "CSharp11.StaticAbstractMembersInInterfaces.RepeatSequence",
+          "name": "StaticAbstractMembersInInterfaces.RepeatSequence",
+          "type": "Struct"
+        }
+      ]
+    },
+    {
+      "uid": "CSharp12",
+      "name": "CSharp12",
+      "type": "Namespace",
+      "items": [
+        {
+          "uid": "CSharp12.CollectionExpressions",
+          "name": "CollectionExpressions",
+          "type": "Class"
+        },
+        {
+          "uid": "CSharp12.DefaultLambdaParameters",
+          "name": "DefaultLambdaParameters",
+          "type": "Class"
+        },
+        {
+          "uid": "CSharp12.InlineArrays",
+          "name": "InlineArrays",
+          "type": "Struct"
+        },
+        {
+          "uid": "CSharp12.PrimaryConstructors",
+          "name": "PrimaryConstructors",
+          "type": "Class"
+        },
+        {
+          "uid": "CSharp12.PrimaryConstructors.BankAccount",
+          "name": "PrimaryConstructors.BankAccount",
+          "type": "Class"
+        },
+        {
+          "uid": "CSharp12.PrimaryConstructors.CheckAccount",
+          "name": "PrimaryConstructors.CheckAccount",
+          "type": "Class"
+        },
+        {
+          "uid": "CSharp12.PrimaryConstructors.Distance",
+          "name": "PrimaryConstructors.Distance",
+          "type": "Struct"
+        },
+        {
+          "uid": "CSharp12.RefReadOnlyParameters",
+          "name": "RefReadOnlyParameters",
+          "type": "Class"
+        }
+      ]
+    },
+    {
+      "uid": "CSharp8",
+      "name": "CSharp8",
+      "type": "Namespace",
+      "items": [
+        {
+          "uid": "CSharp8.DefaultInterfaceMembers",
+          "name": "DefaultInterfaceMembers",
+          "type": "Interface"
+        },
+        {
+          "uid": "CSharp8.DefaultInterfaceMembers.IA",
+          "name": "DefaultInterfaceMembers.IA",
+          "type": "Interface"
+        },
+        {
+          "uid": "CSharp8.DefaultInterfaceMembers.Nested",
+          "name": "DefaultInterfaceMembers.Nested",
+          "type": "Class"
+        },
+        {
+          "uid": "CSharp8.DisposableRefStructs",
+          "name": "DisposableRefStructs",
+          "type": "Struct"
+        },
+        {
+          "uid": "CSharp8.Issue4007",
+          "name": "Issue4007",
+          "type": "Class"
+        },
+        {
+          "uid": "CSharp8.Misc",
+          "name": "Misc",
+          "type": "Class"
+        },
+        {
+          "uid": "CSharp8.NullableReferenceTypes",
+          "name": "NullableReferenceTypes",
+          "type": "Class"
+        },
+        {
+          "uid": "CSharp8.ReadOnlyMembers",
+          "name": "ReadOnlyMembers",
+          "type": "Struct"
+        }
+      ]
+    },
+    {
+      "uid": "CSharp9",
+      "name": "CSharp9",
+      "type": "Namespace",
+      "items": [
+        {
+          "uid": "CSharp9.FunctionPointers",
+          "name": "FunctionPointers",
+          "type": "Class"
+        },
+        {
+          "uid": "CSharp9.InitOnlySetters",
+          "name": "InitOnlySetters",
+          "type": "Class"
+        },
+        {
+          "uid": "CSharp9.NativeSizedIntegers",
+          "name": "NativeSizedIntegers",
+          "type": "Class"
+        },
+        {
+          "uid": "CSharp9.RecordTypes",
+          "name": "RecordTypes",
+          "type": "Class"
+        },
+        {
+          "uid": "CSharp9.RecordTypes.Person",
+          "name": "RecordTypes.Person",
+          "type": "Class"
+        },
+        {
+          "uid": "CSharp9.RecordTypes.Teacher",
+          "name": "RecordTypes.Teacher",
+          "type": "Class"
+        }
+      ]
+    }
+  ],
+  "memberLayout": "SamePage"
+}
diff --git a/test/docfx.Tests/SerializationTests/TestData/TocItemViewModel/Json/toc_04.json b/test/docfx.Tests/SerializationTests/TestData/TocItemViewModel/Json/toc_04.json
new file mode 100644
index 00000000000..7672bba0101
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/TestData/TocItemViewModel/Json/toc_04.json
@@ -0,0 +1,295 @@
+{
+  "items": [
+    {
+      "uid": "BuildFromAssembly",
+      "name": "BuildFromAssembly",
+      "type": "Namespace",
+      "items": [
+        {
+          "uid": "BuildFromAssembly.Class1",
+          "name": "Class1",
+          "type": "Class"
+        },
+        {
+          "uid": "BuildFromAssembly.Issue5432",
+          "name": "Issue5432",
+          "type": "Struct"
+        }
+      ]
+    },
+    {
+      "uid": "BuildFromCSharpSourceCode",
+      "name": "BuildFromCSharpSourceCode",
+      "type": "Namespace",
+      "items": [
+        {
+          "uid": "BuildFromCSharpSourceCode.CSharp",
+          "name": "CSharp",
+          "type": "Class"
+        }
+      ]
+    },
+    {
+      "uid": "BuildFromProject",
+      "name": "BuildFromProject",
+      "type": "Namespace",
+      "items": [
+        {
+          "uid": "BuildFromProject.Issue8540",
+          "name": "Issue8540",
+          "type": "Namespace",
+          "items": [
+            {
+              "uid": "BuildFromProject.Issue8540.A",
+              "name": "A",
+              "type": "Namespace",
+              "items": [
+                {
+                  "uid": "BuildFromProject.Issue8540.A.A",
+                  "name": "A",
+                  "type": "Class"
+                }
+              ]
+            },
+            {
+              "uid": "BuildFromProject.Issue8540.B",
+              "name": "B",
+              "type": "Namespace",
+              "items": [
+                {
+                  "uid": "BuildFromProject.Issue8540.B.B",
+                  "name": "B",
+                  "type": "Class"
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "uid": "BuildFromProject.Class1",
+          "name": "Class1",
+          "type": "Class"
+        },
+        {
+          "uid": "BuildFromProject.Class1.IIssue8948",
+          "name": "Class1.IIssue8948",
+          "type": "Interface"
+        },
+        {
+          "uid": "BuildFromProject.Class1.Issue8665",
+          "name": "Class1.Issue8665",
+          "type": "Class"
+        },
+        {
+          "uid": "BuildFromProject.Class1.Issue8696Attribute",
+          "name": "Class1.Issue8696Attribute",
+          "type": "Class"
+        },
+        {
+          "uid": "BuildFromProject.Class1.Issue8948",
+          "name": "Class1.Issue8948",
+          "type": "Class"
+        },
+        {
+          "uid": "BuildFromProject.Class1.Issue9260",
+          "name": "Class1.Issue9260",
+          "type": "Enum"
+        },
+        {
+          "uid": "BuildFromProject.Class1.Test`1",
+          "name": "Class1.Test<T>",
+          "type": "Class"
+        },
+        {
+          "uid": "BuildFromProject.Dog",
+          "name": "Dog",
+          "type": "Class"
+        },
+        {
+          "uid": "BuildFromProject.IInheritdoc",
+          "name": "IInheritdoc",
+          "type": "Interface"
+        },
+        {
+          "uid": "BuildFromProject.Inheritdoc",
+          "name": "Inheritdoc",
+          "type": "Class"
+        },
+        {
+          "uid": "BuildFromProject.Inheritdoc.Issue6366",
+          "name": "Inheritdoc.Issue6366",
+          "type": "Class"
+        },
+        {
+          "uid": "BuildFromProject.Inheritdoc.Issue6366.Class1`1",
+          "name": "Inheritdoc.Issue6366.Class1<T>",
+          "type": "Class"
+        },
+        {
+          "uid": "BuildFromProject.Inheritdoc.Issue6366.Class2",
+          "name": "Inheritdoc.Issue6366.Class2",
+          "type": "Class"
+        },
+        {
+          "uid": "BuildFromProject.Inheritdoc.Issue7035",
+          "name": "Inheritdoc.Issue7035",
+          "type": "Class"
+        },
+        {
+          "uid": "BuildFromProject.Inheritdoc.Issue7484",
+          "name": "Inheritdoc.Issue7484",
+          "type": "Class"
+        },
+        {
+          "uid": "BuildFromProject.Inheritdoc.Issue8101",
+          "name": "Inheritdoc.Issue8101",
+          "type": "Class"
+        },
+        {
+          "uid": "BuildFromProject.Inheritdoc.Issue8129",
+          "name": "Inheritdoc.Issue8129",
+          "type": "Struct"
+        },
+        {
+          "uid": "BuildFromProject.Issue8725",
+          "name": "Issue8725",
+          "type": "Class"
+        }
+      ]
+    },
+    {
+      "uid": "BuildFromVBSourceCode",
+      "name": "BuildFromVBSourceCode",
+      "type": "Namespace",
+      "items": [
+        {
+          "uid": "BuildFromVBSourceCode.BaseClass1",
+          "name": "BaseClass1",
+          "type": "Class"
+        },
+        {
+          "uid": "BuildFromVBSourceCode.Class1",
+          "name": "Class1",
+          "type": "Class"
+        }
+      ]
+    },
+    {
+      "uid": "CatLibrary",
+      "name": "CatLibrary",
+      "type": "Namespace",
+      "items": [
+        {
+          "uid": "CatLibrary.Core",
+          "name": "Core",
+          "type": "Namespace",
+          "items": [
+            {
+              "uid": "CatLibrary.Core.ContainersRefType",
+              "name": "ContainersRefType",
+              "type": "Struct"
+            },
+            {
+              "uid": "CatLibrary.Core.ContainersRefType.ColorType",
+              "name": "ContainersRefType.ColorType",
+              "type": "Enum"
+            },
+            {
+              "uid": "CatLibrary.Core.ContainersRefType.ContainersRefTypeChild",
+              "name": "ContainersRefType.ContainersRefTypeChild",
+              "type": "Class"
+            },
+            {
+              "uid": "CatLibrary.Core.ContainersRefType.ContainersRefTypeChildInterface",
+              "name": "ContainersRefType.ContainersRefTypeChildInterface",
+              "type": "Interface"
+            },
+            {
+              "uid": "CatLibrary.Core.ContainersRefType.ContainersRefTypeDelegate",
+              "name": "ContainersRefType.ContainersRefTypeDelegate",
+              "type": "Delegate"
+            },
+            {
+              "uid": "CatLibrary.Core.ExplicitLayoutClass",
+              "name": "ExplicitLayoutClass",
+              "type": "Class"
+            },
+            {
+              "uid": "CatLibrary.Core.Issue231",
+              "name": "Issue231",
+              "type": "Class"
+            }
+          ]
+        },
+        {
+          "uid": "CatLibrary.CatException`1",
+          "name": "CatException<T>",
+          "type": "Class"
+        },
+        {
+          "uid": "CatLibrary.Cat`2",
+          "name": "Cat<T, K>",
+          "type": "Class"
+        },
+        {
+          "uid": "CatLibrary.Complex`2",
+          "name": "Complex<T, J>",
+          "type": "Class"
+        },
+        {
+          "uid": "CatLibrary.FakeDelegate`1",
+          "name": "FakeDelegate<T>",
+          "type": "Delegate"
+        },
+        {
+          "uid": "CatLibrary.IAnimal",
+          "name": "IAnimal",
+          "type": "Interface"
+        },
+        {
+          "uid": "CatLibrary.ICat",
+          "name": "ICat",
+          "type": "Interface"
+        },
+        {
+          "uid": "CatLibrary.ICatExtension",
+          "name": "ICatExtension",
+          "type": "Class"
+        },
+        {
+          "uid": "CatLibrary.MRefDelegate`3",
+          "name": "MRefDelegate<K, T, L>",
+          "type": "Delegate"
+        },
+        {
+          "uid": "CatLibrary.MRefNormalDelegate",
+          "name": "MRefNormalDelegate",
+          "type": "Delegate"
+        },
+        {
+          "uid": "CatLibrary.Tom",
+          "name": "Tom",
+          "type": "Class"
+        },
+        {
+          "uid": "CatLibrary.TomFromBaseClass",
+          "name": "TomFromBaseClass",
+          "type": "Class"
+        }
+      ]
+    },
+    {
+      "uid": "MRef.Demo.Enumeration",
+      "name": "MRef.Demo.Enumeration",
+      "type": "Namespace",
+      "items": [
+        {
+          "uid": "MRef.Demo.Enumeration.ColorType",
+          "name": "ColorType",
+          "type": "Enum"
+        }
+      ]
+    }
+  ],
+  "memberLayout": "SamePage"
+}
diff --git a/test/docfx.Tests/SerializationTests/TestData/TocItemViewModel/Json/toc_05.json b/test/docfx.Tests/SerializationTests/TestData/TocItemViewModel/Json/toc_05.json
new file mode 100644
index 00000000000..de6187c3954
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/TestData/TocItemViewModel/Json/toc_05.json
@@ -0,0 +1,41 @@
+{
+  "order": 100,
+  "items": [
+    {
+      "name": "Getting Started with docfx",
+      "href": "docfx_getting_started.html",
+      "topicHref": "docfx_getting_started.html"
+    },
+    {
+      "name": "Engineering Docs",
+      "items": [
+        { "name": "Section 1" },
+        {
+          "name": "Engineering Guidelines",
+          "href": "engineering_guidelines.html",
+          "topicHref": "engineering_guidelines.html"
+        },
+        {
+          "name": "C# Coding Standards",
+          "href": "csharp_coding_standards.html",
+          "topicHref": "csharp_coding_standards.html"
+        }
+      ],
+      "expanded": true
+    },
+    {
+      "name": "Markdown",
+      "href": "markdown.html",
+      "topicHref": "markdown.html"
+    },
+    {
+      "name": "Microsoft Docs",
+      "href": "https://docs.microsoft.com/en-us/",
+      "topicHref": "https://docs.microsoft.com/en-us/"
+    }
+  ],
+  "pdfFileName": "seed.pdf",
+  "pdfCoverPage": "pdf/cover.html",
+  "pdf": true,
+  "pdfTocPage": true
+}
diff --git a/test/docfx.Tests/SerializationTests/TestData/TocItemViewModel/Yaml/toc_01.yml b/test/docfx.Tests/SerializationTests/TestData/TocItemViewModel/Yaml/toc_01.yml
new file mode 100644
index 00000000000..5cab96f4b3b
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/TestData/TocItemViewModel/Yaml/toc_01.yml
@@ -0,0 +1,5 @@
+sorted: true
+items: []
+custom:
+- prop1: "true"
+  prop2: "dummy"
diff --git a/test/docfx.Tests/SerializationTests/TestData/TocItemViewModel/Yaml/toc_02.yml b/test/docfx.Tests/SerializationTests/TestData/TocItemViewModel/Yaml/toc_02.yml
new file mode 100644
index 00000000000..86f25a77cf9
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/TestData/TocItemViewModel/Yaml/toc_02.yml
@@ -0,0 +1,1471 @@
+sorted: true
+references:
+- uid: Docfx
+  name: Docfx
+  href: api/Docfx.html
+  commentId: N:Docfx
+  fullName: Docfx
+  nameWithType: Docfx
+- uid: Docfx.BuildOptions
+  name: BuildOptions
+  href: api/Docfx.BuildOptions.html
+  commentId: T:Docfx.BuildOptions
+  fullName: Docfx.BuildOptions
+  nameWithType: BuildOptions
+- uid: Docfx.BuildOptions.ConfigureMarkdig
+  name: ConfigureMarkdig
+  href: api/Docfx.BuildOptions.html#Docfx_BuildOptions_ConfigureMarkdig
+  commentId: P:Docfx.BuildOptions.ConfigureMarkdig
+  fullName: Docfx.BuildOptions.ConfigureMarkdig
+  nameWithType: BuildOptions.ConfigureMarkdig
+- uid: Docfx.BuildOptions.ConfigureMarkdig*
+  name: ConfigureMarkdig
+  href: api/Docfx.BuildOptions.html#Docfx_BuildOptions_ConfigureMarkdig_
+  commentId: Overload:Docfx.BuildOptions.ConfigureMarkdig
+  isSpec: 'True'
+  fullName: Docfx.BuildOptions.ConfigureMarkdig
+  nameWithType: BuildOptions.ConfigureMarkdig
+- uid: Docfx.DataContracts.ManagedReference
+  name: Docfx.DataContracts.ManagedReference
+  href: api/Docfx.DataContracts.ManagedReference.html
+  commentId: N:Docfx.DataContracts.ManagedReference
+  fullName: Docfx.DataContracts.ManagedReference
+  nameWithType: Docfx.DataContracts.ManagedReference
+- uid: Docfx.DataContracts.ManagedReference.AdditionalNotes
+  name: AdditionalNotes
+  href: api/Docfx.DataContracts.ManagedReference.AdditionalNotes.html
+  commentId: T:Docfx.DataContracts.ManagedReference.AdditionalNotes
+  fullName: Docfx.DataContracts.ManagedReference.AdditionalNotes
+  nameWithType: AdditionalNotes
+- uid: Docfx.DataContracts.ManagedReference.AdditionalNotes.Caller
+  name: Caller
+  href: api/Docfx.DataContracts.ManagedReference.AdditionalNotes.html#Docfx_DataContracts_ManagedReference_AdditionalNotes_Caller
+  commentId: P:Docfx.DataContracts.ManagedReference.AdditionalNotes.Caller
+  fullName: Docfx.DataContracts.ManagedReference.AdditionalNotes.Caller
+  nameWithType: AdditionalNotes.Caller
+- uid: Docfx.DataContracts.ManagedReference.AdditionalNotes.Caller*
+  name: Caller
+  href: api/Docfx.DataContracts.ManagedReference.AdditionalNotes.html#Docfx_DataContracts_ManagedReference_AdditionalNotes_Caller_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.AdditionalNotes.Caller
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.AdditionalNotes.Caller
+  nameWithType: AdditionalNotes.Caller
+- uid: Docfx.DataContracts.ManagedReference.AdditionalNotes.Implementer
+  name: Implementer
+  href: api/Docfx.DataContracts.ManagedReference.AdditionalNotes.html#Docfx_DataContracts_ManagedReference_AdditionalNotes_Implementer
+  commentId: P:Docfx.DataContracts.ManagedReference.AdditionalNotes.Implementer
+  fullName: Docfx.DataContracts.ManagedReference.AdditionalNotes.Implementer
+  nameWithType: AdditionalNotes.Implementer
+- uid: Docfx.DataContracts.ManagedReference.AdditionalNotes.Implementer*
+  name: Implementer
+  href: api/Docfx.DataContracts.ManagedReference.AdditionalNotes.html#Docfx_DataContracts_ManagedReference_AdditionalNotes_Implementer_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.AdditionalNotes.Implementer
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.AdditionalNotes.Implementer
+  nameWithType: AdditionalNotes.Implementer
+- uid: Docfx.DataContracts.ManagedReference.AdditionalNotes.Inheritor
+  name: Inheritor
+  href: api/Docfx.DataContracts.ManagedReference.AdditionalNotes.html#Docfx_DataContracts_ManagedReference_AdditionalNotes_Inheritor
+  commentId: P:Docfx.DataContracts.ManagedReference.AdditionalNotes.Inheritor
+  fullName: Docfx.DataContracts.ManagedReference.AdditionalNotes.Inheritor
+  nameWithType: AdditionalNotes.Inheritor
+- uid: Docfx.DataContracts.ManagedReference.AdditionalNotes.Inheritor*
+  name: Inheritor
+  href: api/Docfx.DataContracts.ManagedReference.AdditionalNotes.html#Docfx_DataContracts_ManagedReference_AdditionalNotes_Inheritor_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.AdditionalNotes.Inheritor
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.AdditionalNotes.Inheritor
+  nameWithType: AdditionalNotes.Inheritor
+- uid: Docfx.DataContracts.ManagedReference.ApiParameter
+  name: ApiParameter
+  href: api/Docfx.DataContracts.ManagedReference.ApiParameter.html
+  commentId: T:Docfx.DataContracts.ManagedReference.ApiParameter
+  fullName: Docfx.DataContracts.ManagedReference.ApiParameter
+  nameWithType: ApiParameter
+- uid: Docfx.DataContracts.ManagedReference.ApiParameter.Attributes
+  name: Attributes
+  href: api/Docfx.DataContracts.ManagedReference.ApiParameter.html#Docfx_DataContracts_ManagedReference_ApiParameter_Attributes
+  commentId: P:Docfx.DataContracts.ManagedReference.ApiParameter.Attributes
+  fullName: Docfx.DataContracts.ManagedReference.ApiParameter.Attributes
+  nameWithType: ApiParameter.Attributes
+- uid: Docfx.DataContracts.ManagedReference.ApiParameter.Attributes*
+  name: Attributes
+  href: api/Docfx.DataContracts.ManagedReference.ApiParameter.html#Docfx_DataContracts_ManagedReference_ApiParameter_Attributes_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.ApiParameter.Attributes
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.ApiParameter.Attributes
+  nameWithType: ApiParameter.Attributes
+- uid: Docfx.DataContracts.ManagedReference.ApiParameter.Description
+  name: Description
+  href: api/Docfx.DataContracts.ManagedReference.ApiParameter.html#Docfx_DataContracts_ManagedReference_ApiParameter_Description
+  commentId: P:Docfx.DataContracts.ManagedReference.ApiParameter.Description
+  fullName: Docfx.DataContracts.ManagedReference.ApiParameter.Description
+  nameWithType: ApiParameter.Description
+- uid: Docfx.DataContracts.ManagedReference.ApiParameter.Description*
+  name: Description
+  href: api/Docfx.DataContracts.ManagedReference.ApiParameter.html#Docfx_DataContracts_ManagedReference_ApiParameter_Description_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.ApiParameter.Description
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.ApiParameter.Description
+  nameWithType: ApiParameter.Description
+- uid: Docfx.DataContracts.ManagedReference.ApiParameter.Name
+  name: Name
+  href: api/Docfx.DataContracts.ManagedReference.ApiParameter.html#Docfx_DataContracts_ManagedReference_ApiParameter_Name
+  commentId: P:Docfx.DataContracts.ManagedReference.ApiParameter.Name
+  fullName: Docfx.DataContracts.ManagedReference.ApiParameter.Name
+  nameWithType: ApiParameter.Name
+- uid: Docfx.DataContracts.ManagedReference.ApiParameter.Name*
+  name: Name
+  href: api/Docfx.DataContracts.ManagedReference.ApiParameter.html#Docfx_DataContracts_ManagedReference_ApiParameter_Name_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.ApiParameter.Name
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.ApiParameter.Name
+  nameWithType: ApiParameter.Name
+- uid: Docfx.DataContracts.ManagedReference.ApiParameter.Type
+  name: Type
+  href: api/Docfx.DataContracts.ManagedReference.ApiParameter.html#Docfx_DataContracts_ManagedReference_ApiParameter_Type
+  commentId: P:Docfx.DataContracts.ManagedReference.ApiParameter.Type
+  fullName: Docfx.DataContracts.ManagedReference.ApiParameter.Type
+  nameWithType: ApiParameter.Type
+- uid: Docfx.DataContracts.ManagedReference.ApiParameter.Type*
+  name: Type
+  href: api/Docfx.DataContracts.ManagedReference.ApiParameter.html#Docfx_DataContracts_ManagedReference_ApiParameter_Type_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.ApiParameter.Type
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.ApiParameter.Type
+  nameWithType: ApiParameter.Type
+- uid: Docfx.DataContracts.ManagedReference.ArgumentInfo
+  name: ArgumentInfo
+  href: api/Docfx.DataContracts.ManagedReference.ArgumentInfo.html
+  commentId: T:Docfx.DataContracts.ManagedReference.ArgumentInfo
+  fullName: Docfx.DataContracts.ManagedReference.ArgumentInfo
+  nameWithType: ArgumentInfo
+- uid: Docfx.DataContracts.ManagedReference.ArgumentInfo.Type
+  name: Type
+  href: api/Docfx.DataContracts.ManagedReference.ArgumentInfo.html#Docfx_DataContracts_ManagedReference_ArgumentInfo_Type
+  commentId: P:Docfx.DataContracts.ManagedReference.ArgumentInfo.Type
+  fullName: Docfx.DataContracts.ManagedReference.ArgumentInfo.Type
+  nameWithType: ArgumentInfo.Type
+- uid: Docfx.DataContracts.ManagedReference.ArgumentInfo.Type*
+  name: Type
+  href: api/Docfx.DataContracts.ManagedReference.ArgumentInfo.html#Docfx_DataContracts_ManagedReference_ArgumentInfo_Type_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.ArgumentInfo.Type
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.ArgumentInfo.Type
+  nameWithType: ArgumentInfo.Type
+- uid: Docfx.DataContracts.ManagedReference.ArgumentInfo.Value
+  name: Value
+  href: api/Docfx.DataContracts.ManagedReference.ArgumentInfo.html#Docfx_DataContracts_ManagedReference_ArgumentInfo_Value
+  commentId: P:Docfx.DataContracts.ManagedReference.ArgumentInfo.Value
+  fullName: Docfx.DataContracts.ManagedReference.ArgumentInfo.Value
+  nameWithType: ArgumentInfo.Value
+- uid: Docfx.DataContracts.ManagedReference.ArgumentInfo.Value*
+  name: Value
+  href: api/Docfx.DataContracts.ManagedReference.ArgumentInfo.html#Docfx_DataContracts_ManagedReference_ArgumentInfo_Value_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.ArgumentInfo.Value
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.ArgumentInfo.Value
+  nameWithType: ArgumentInfo.Value
+- uid: Docfx.DataContracts.ManagedReference.AttributeInfo
+  name: AttributeInfo
+  href: api/Docfx.DataContracts.ManagedReference.AttributeInfo.html
+  commentId: T:Docfx.DataContracts.ManagedReference.AttributeInfo
+  fullName: Docfx.DataContracts.ManagedReference.AttributeInfo
+  nameWithType: AttributeInfo
+- uid: Docfx.DataContracts.ManagedReference.AttributeInfo.Arguments
+  name: Arguments
+  href: api/Docfx.DataContracts.ManagedReference.AttributeInfo.html#Docfx_DataContracts_ManagedReference_AttributeInfo_Arguments
+  commentId: P:Docfx.DataContracts.ManagedReference.AttributeInfo.Arguments
+  fullName: Docfx.DataContracts.ManagedReference.AttributeInfo.Arguments
+  nameWithType: AttributeInfo.Arguments
+- uid: Docfx.DataContracts.ManagedReference.AttributeInfo.Arguments*
+  name: Arguments
+  href: api/Docfx.DataContracts.ManagedReference.AttributeInfo.html#Docfx_DataContracts_ManagedReference_AttributeInfo_Arguments_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.AttributeInfo.Arguments
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.AttributeInfo.Arguments
+  nameWithType: AttributeInfo.Arguments
+- uid: Docfx.DataContracts.ManagedReference.AttributeInfo.Constructor
+  name: Constructor
+  href: api/Docfx.DataContracts.ManagedReference.AttributeInfo.html#Docfx_DataContracts_ManagedReference_AttributeInfo_Constructor
+  commentId: P:Docfx.DataContracts.ManagedReference.AttributeInfo.Constructor
+  fullName: Docfx.DataContracts.ManagedReference.AttributeInfo.Constructor
+  nameWithType: AttributeInfo.Constructor
+- uid: Docfx.DataContracts.ManagedReference.AttributeInfo.Constructor*
+  name: Constructor
+  href: api/Docfx.DataContracts.ManagedReference.AttributeInfo.html#Docfx_DataContracts_ManagedReference_AttributeInfo_Constructor_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.AttributeInfo.Constructor
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.AttributeInfo.Constructor
+  nameWithType: AttributeInfo.Constructor
+- uid: Docfx.DataContracts.ManagedReference.AttributeInfo.NamedArguments
+  name: NamedArguments
+  href: api/Docfx.DataContracts.ManagedReference.AttributeInfo.html#Docfx_DataContracts_ManagedReference_AttributeInfo_NamedArguments
+  commentId: P:Docfx.DataContracts.ManagedReference.AttributeInfo.NamedArguments
+  fullName: Docfx.DataContracts.ManagedReference.AttributeInfo.NamedArguments
+  nameWithType: AttributeInfo.NamedArguments
+- uid: Docfx.DataContracts.ManagedReference.AttributeInfo.NamedArguments*
+  name: NamedArguments
+  href: api/Docfx.DataContracts.ManagedReference.AttributeInfo.html#Docfx_DataContracts_ManagedReference_AttributeInfo_NamedArguments_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.AttributeInfo.NamedArguments
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.AttributeInfo.NamedArguments
+  nameWithType: AttributeInfo.NamedArguments
+- uid: Docfx.DataContracts.ManagedReference.AttributeInfo.Type
+  name: Type
+  href: api/Docfx.DataContracts.ManagedReference.AttributeInfo.html#Docfx_DataContracts_ManagedReference_AttributeInfo_Type
+  commentId: P:Docfx.DataContracts.ManagedReference.AttributeInfo.Type
+  fullName: Docfx.DataContracts.ManagedReference.AttributeInfo.Type
+  nameWithType: AttributeInfo.Type
+- uid: Docfx.DataContracts.ManagedReference.AttributeInfo.Type*
+  name: Type
+  href: api/Docfx.DataContracts.ManagedReference.AttributeInfo.html#Docfx_DataContracts_ManagedReference_AttributeInfo_Type_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.AttributeInfo.Type
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.AttributeInfo.Type
+  nameWithType: AttributeInfo.Type
+- uid: Docfx.DataContracts.ManagedReference.ExceptionInfo
+  name: ExceptionInfo
+  href: api/Docfx.DataContracts.ManagedReference.ExceptionInfo.html
+  commentId: T:Docfx.DataContracts.ManagedReference.ExceptionInfo
+  fullName: Docfx.DataContracts.ManagedReference.ExceptionInfo
+  nameWithType: ExceptionInfo
+- uid: Docfx.DataContracts.ManagedReference.ExceptionInfo.CommentId
+  name: CommentId
+  href: api/Docfx.DataContracts.ManagedReference.ExceptionInfo.html#Docfx_DataContracts_ManagedReference_ExceptionInfo_CommentId
+  commentId: P:Docfx.DataContracts.ManagedReference.ExceptionInfo.CommentId
+  fullName: Docfx.DataContracts.ManagedReference.ExceptionInfo.CommentId
+  nameWithType: ExceptionInfo.CommentId
+- uid: Docfx.DataContracts.ManagedReference.ExceptionInfo.CommentId*
+  name: CommentId
+  href: api/Docfx.DataContracts.ManagedReference.ExceptionInfo.html#Docfx_DataContracts_ManagedReference_ExceptionInfo_CommentId_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.ExceptionInfo.CommentId
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.ExceptionInfo.CommentId
+  nameWithType: ExceptionInfo.CommentId
+- uid: Docfx.DataContracts.ManagedReference.ExceptionInfo.Description
+  name: Description
+  href: api/Docfx.DataContracts.ManagedReference.ExceptionInfo.html#Docfx_DataContracts_ManagedReference_ExceptionInfo_Description
+  commentId: P:Docfx.DataContracts.ManagedReference.ExceptionInfo.Description
+  fullName: Docfx.DataContracts.ManagedReference.ExceptionInfo.Description
+  nameWithType: ExceptionInfo.Description
+- uid: Docfx.DataContracts.ManagedReference.ExceptionInfo.Description*
+  name: Description
+  href: api/Docfx.DataContracts.ManagedReference.ExceptionInfo.html#Docfx_DataContracts_ManagedReference_ExceptionInfo_Description_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.ExceptionInfo.Description
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.ExceptionInfo.Description
+  nameWithType: ExceptionInfo.Description
+- uid: Docfx.DataContracts.ManagedReference.ExceptionInfo.Type
+  name: Type
+  href: api/Docfx.DataContracts.ManagedReference.ExceptionInfo.html#Docfx_DataContracts_ManagedReference_ExceptionInfo_Type
+  commentId: P:Docfx.DataContracts.ManagedReference.ExceptionInfo.Type
+  fullName: Docfx.DataContracts.ManagedReference.ExceptionInfo.Type
+  nameWithType: ExceptionInfo.Type
+- uid: Docfx.DataContracts.ManagedReference.ExceptionInfo.Type*
+  name: Type
+  href: api/Docfx.DataContracts.ManagedReference.ExceptionInfo.html#Docfx_DataContracts_ManagedReference_ExceptionInfo_Type_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.ExceptionInfo.Type
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.ExceptionInfo.Type
+  nameWithType: ExceptionInfo.Type
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel
+  name: ItemViewModel
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html
+  commentId: T:Docfx.DataContracts.ManagedReference.ItemViewModel
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel
+  nameWithType: ItemViewModel
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.AdditionalNotes
+  name: AdditionalNotes
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_AdditionalNotes
+  commentId: P:Docfx.DataContracts.ManagedReference.ItemViewModel.AdditionalNotes
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.AdditionalNotes
+  nameWithType: ItemViewModel.AdditionalNotes
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.AdditionalNotes*
+  name: AdditionalNotes
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_AdditionalNotes_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.AdditionalNotes
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.AdditionalNotes
+  nameWithType: ItemViewModel.AdditionalNotes
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.AssemblyNameList
+  name: AssemblyNameList
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_AssemblyNameList
+  commentId: P:Docfx.DataContracts.ManagedReference.ItemViewModel.AssemblyNameList
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.AssemblyNameList
+  nameWithType: ItemViewModel.AssemblyNameList
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.AssemblyNameList*
+  name: AssemblyNameList
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_AssemblyNameList_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.AssemblyNameList
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.AssemblyNameList
+  nameWithType: ItemViewModel.AssemblyNameList
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.Attributes
+  name: Attributes
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Attributes
+  commentId: P:Docfx.DataContracts.ManagedReference.ItemViewModel.Attributes
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.Attributes
+  nameWithType: ItemViewModel.Attributes
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.Attributes*
+  name: Attributes
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Attributes_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Attributes
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.Attributes
+  nameWithType: ItemViewModel.Attributes
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.Children
+  name: Children
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Children
+  commentId: P:Docfx.DataContracts.ManagedReference.ItemViewModel.Children
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.Children
+  nameWithType: ItemViewModel.Children
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.Children*
+  name: Children
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Children_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Children
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.Children
+  nameWithType: ItemViewModel.Children
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.CommentId
+  name: CommentId
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_CommentId
+  commentId: P:Docfx.DataContracts.ManagedReference.ItemViewModel.CommentId
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.CommentId
+  nameWithType: ItemViewModel.CommentId
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.CommentId*
+  name: CommentId
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_CommentId_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.CommentId
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.CommentId
+  nameWithType: ItemViewModel.CommentId
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.Conceptual
+  name: Conceptual
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Conceptual
+  commentId: P:Docfx.DataContracts.ManagedReference.ItemViewModel.Conceptual
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.Conceptual
+  nameWithType: ItemViewModel.Conceptual
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.Conceptual*
+  name: Conceptual
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Conceptual_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Conceptual
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.Conceptual
+  nameWithType: ItemViewModel.Conceptual
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.DerivedClasses
+  name: DerivedClasses
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_DerivedClasses
+  commentId: P:Docfx.DataContracts.ManagedReference.ItemViewModel.DerivedClasses
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.DerivedClasses
+  nameWithType: ItemViewModel.DerivedClasses
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.DerivedClasses*
+  name: DerivedClasses
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_DerivedClasses_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.DerivedClasses
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.DerivedClasses
+  nameWithType: ItemViewModel.DerivedClasses
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.Documentation
+  name: Documentation
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Documentation
+  commentId: P:Docfx.DataContracts.ManagedReference.ItemViewModel.Documentation
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.Documentation
+  nameWithType: ItemViewModel.Documentation
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.Documentation*
+  name: Documentation
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Documentation_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Documentation
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.Documentation
+  nameWithType: ItemViewModel.Documentation
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.Examples
+  name: Examples
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Examples
+  commentId: P:Docfx.DataContracts.ManagedReference.ItemViewModel.Examples
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.Examples
+  nameWithType: ItemViewModel.Examples
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.Examples*
+  name: Examples
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Examples_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Examples
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.Examples
+  nameWithType: ItemViewModel.Examples
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.Exceptions
+  name: Exceptions
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Exceptions
+  commentId: P:Docfx.DataContracts.ManagedReference.ItemViewModel.Exceptions
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.Exceptions
+  nameWithType: ItemViewModel.Exceptions
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.Exceptions*
+  name: Exceptions
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Exceptions_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Exceptions
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.Exceptions
+  nameWithType: ItemViewModel.Exceptions
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.ExtensionMethods
+  name: ExtensionMethods
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_ExtensionMethods
+  commentId: P:Docfx.DataContracts.ManagedReference.ItemViewModel.ExtensionMethods
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.ExtensionMethods
+  nameWithType: ItemViewModel.ExtensionMethods
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.ExtensionMethods*
+  name: ExtensionMethods
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_ExtensionMethods_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.ExtensionMethods
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.ExtensionMethods
+  nameWithType: ItemViewModel.ExtensionMethods
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.FullName
+  name: FullName
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_FullName
+  commentId: P:Docfx.DataContracts.ManagedReference.ItemViewModel.FullName
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.FullName
+  nameWithType: ItemViewModel.FullName
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.FullName*
+  name: FullName
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_FullName_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.FullName
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.FullName
+  nameWithType: ItemViewModel.FullName
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.FullNameForCSharp
+  name: FullNameForCSharp
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_FullNameForCSharp
+  commentId: P:Docfx.DataContracts.ManagedReference.ItemViewModel.FullNameForCSharp
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.FullNameForCSharp
+  nameWithType: ItemViewModel.FullNameForCSharp
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.FullNameForCSharp*
+  name: FullNameForCSharp
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_FullNameForCSharp_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.FullNameForCSharp
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.FullNameForCSharp
+  nameWithType: ItemViewModel.FullNameForCSharp
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.FullNameForVB
+  name: FullNameForVB
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_FullNameForVB
+  commentId: P:Docfx.DataContracts.ManagedReference.ItemViewModel.FullNameForVB
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.FullNameForVB
+  nameWithType: ItemViewModel.FullNameForVB
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.FullNameForVB*
+  name: FullNameForVB
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_FullNameForVB_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.FullNameForVB
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.FullNameForVB
+  nameWithType: ItemViewModel.FullNameForVB
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.FullNames
+  name: FullNames
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_FullNames
+  commentId: P:Docfx.DataContracts.ManagedReference.ItemViewModel.FullNames
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.FullNames
+  nameWithType: ItemViewModel.FullNames
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.FullNames*
+  name: FullNames
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_FullNames_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.FullNames
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.FullNames
+  nameWithType: ItemViewModel.FullNames
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.Href
+  name: Href
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Href
+  commentId: P:Docfx.DataContracts.ManagedReference.ItemViewModel.Href
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.Href
+  nameWithType: ItemViewModel.Href
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.Href*
+  name: Href
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Href_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Href
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.Href
+  nameWithType: ItemViewModel.Href
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.Id
+  name: Id
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Id
+  commentId: P:Docfx.DataContracts.ManagedReference.ItemViewModel.Id
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.Id
+  nameWithType: ItemViewModel.Id
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.Id*
+  name: Id
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Id_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Id
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.Id
+  nameWithType: ItemViewModel.Id
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.Implements
+  name: Implements
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Implements
+  commentId: P:Docfx.DataContracts.ManagedReference.ItemViewModel.Implements
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.Implements
+  nameWithType: ItemViewModel.Implements
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.Implements*
+  name: Implements
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Implements_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Implements
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.Implements
+  nameWithType: ItemViewModel.Implements
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.Inheritance
+  name: Inheritance
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Inheritance
+  commentId: P:Docfx.DataContracts.ManagedReference.ItemViewModel.Inheritance
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.Inheritance
+  nameWithType: ItemViewModel.Inheritance
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.Inheritance*
+  name: Inheritance
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Inheritance_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Inheritance
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.Inheritance
+  nameWithType: ItemViewModel.Inheritance
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.InheritedMembers
+  name: InheritedMembers
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_InheritedMembers
+  commentId: P:Docfx.DataContracts.ManagedReference.ItemViewModel.InheritedMembers
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.InheritedMembers
+  nameWithType: ItemViewModel.InheritedMembers
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.InheritedMembers*
+  name: InheritedMembers
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_InheritedMembers_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.InheritedMembers
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.InheritedMembers
+  nameWithType: ItemViewModel.InheritedMembers
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.IsExplicitInterfaceImplementation
+  name: IsExplicitInterfaceImplementation
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_IsExplicitInterfaceImplementation
+  commentId: P:Docfx.DataContracts.ManagedReference.ItemViewModel.IsExplicitInterfaceImplementation
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.IsExplicitInterfaceImplementation
+  nameWithType: ItemViewModel.IsExplicitInterfaceImplementation
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.IsExplicitInterfaceImplementation*
+  name: IsExplicitInterfaceImplementation
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_IsExplicitInterfaceImplementation_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.IsExplicitInterfaceImplementation
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.IsExplicitInterfaceImplementation
+  nameWithType: ItemViewModel.IsExplicitInterfaceImplementation
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.IsExtensionMethod
+  name: IsExtensionMethod
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_IsExtensionMethod
+  commentId: P:Docfx.DataContracts.ManagedReference.ItemViewModel.IsExtensionMethod
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.IsExtensionMethod
+  nameWithType: ItemViewModel.IsExtensionMethod
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.IsExtensionMethod*
+  name: IsExtensionMethod
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_IsExtensionMethod_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.IsExtensionMethod
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.IsExtensionMethod
+  nameWithType: ItemViewModel.IsExtensionMethod
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.Metadata
+  name: Metadata
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Metadata
+  commentId: P:Docfx.DataContracts.ManagedReference.ItemViewModel.Metadata
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.Metadata
+  nameWithType: ItemViewModel.Metadata
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.Metadata*
+  name: Metadata
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Metadata_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Metadata
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.Metadata
+  nameWithType: ItemViewModel.Metadata
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.Name
+  name: Name
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Name
+  commentId: P:Docfx.DataContracts.ManagedReference.ItemViewModel.Name
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.Name
+  nameWithType: ItemViewModel.Name
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.Name*
+  name: Name
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Name_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Name
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.Name
+  nameWithType: ItemViewModel.Name
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.NameForCSharp
+  name: NameForCSharp
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_NameForCSharp
+  commentId: P:Docfx.DataContracts.ManagedReference.ItemViewModel.NameForCSharp
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.NameForCSharp
+  nameWithType: ItemViewModel.NameForCSharp
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.NameForCSharp*
+  name: NameForCSharp
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_NameForCSharp_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.NameForCSharp
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.NameForCSharp
+  nameWithType: ItemViewModel.NameForCSharp
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.NameForVB
+  name: NameForVB
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_NameForVB
+  commentId: P:Docfx.DataContracts.ManagedReference.ItemViewModel.NameForVB
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.NameForVB
+  nameWithType: ItemViewModel.NameForVB
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.NameForVB*
+  name: NameForVB
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_NameForVB_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.NameForVB
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.NameForVB
+  nameWithType: ItemViewModel.NameForVB
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.NameWithType
+  name: NameWithType
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_NameWithType
+  commentId: P:Docfx.DataContracts.ManagedReference.ItemViewModel.NameWithType
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.NameWithType
+  nameWithType: ItemViewModel.NameWithType
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.NameWithType*
+  name: NameWithType
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_NameWithType_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.NameWithType
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.NameWithType
+  nameWithType: ItemViewModel.NameWithType
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.NameWithTypeForCSharp
+  name: NameWithTypeForCSharp
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_NameWithTypeForCSharp
+  commentId: P:Docfx.DataContracts.ManagedReference.ItemViewModel.NameWithTypeForCSharp
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.NameWithTypeForCSharp
+  nameWithType: ItemViewModel.NameWithTypeForCSharp
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.NameWithTypeForCSharp*
+  name: NameWithTypeForCSharp
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_NameWithTypeForCSharp_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.NameWithTypeForCSharp
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.NameWithTypeForCSharp
+  nameWithType: ItemViewModel.NameWithTypeForCSharp
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.NameWithTypeForVB
+  name: NameWithTypeForVB
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_NameWithTypeForVB
+  commentId: P:Docfx.DataContracts.ManagedReference.ItemViewModel.NameWithTypeForVB
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.NameWithTypeForVB
+  nameWithType: ItemViewModel.NameWithTypeForVB
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.NameWithTypeForVB*
+  name: NameWithTypeForVB
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_NameWithTypeForVB_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.NameWithTypeForVB
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.NameWithTypeForVB
+  nameWithType: ItemViewModel.NameWithTypeForVB
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.Names
+  name: Names
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Names
+  commentId: P:Docfx.DataContracts.ManagedReference.ItemViewModel.Names
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.Names
+  nameWithType: ItemViewModel.Names
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.Names*
+  name: Names
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Names_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Names
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.Names
+  nameWithType: ItemViewModel.Names
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.NamesWithType
+  name: NamesWithType
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_NamesWithType
+  commentId: P:Docfx.DataContracts.ManagedReference.ItemViewModel.NamesWithType
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.NamesWithType
+  nameWithType: ItemViewModel.NamesWithType
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.NamesWithType*
+  name: NamesWithType
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_NamesWithType_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.NamesWithType
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.NamesWithType
+  nameWithType: ItemViewModel.NamesWithType
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.NamespaceName
+  name: NamespaceName
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_NamespaceName
+  commentId: P:Docfx.DataContracts.ManagedReference.ItemViewModel.NamespaceName
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.NamespaceName
+  nameWithType: ItemViewModel.NamespaceName
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.NamespaceName*
+  name: NamespaceName
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_NamespaceName_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.NamespaceName
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.NamespaceName
+  nameWithType: ItemViewModel.NamespaceName
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.Overload
+  name: Overload
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Overload
+  commentId: P:Docfx.DataContracts.ManagedReference.ItemViewModel.Overload
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.Overload
+  nameWithType: ItemViewModel.Overload
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.Overload*
+  name: Overload
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Overload_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Overload
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.Overload
+  nameWithType: ItemViewModel.Overload
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.Overridden
+  name: Overridden
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Overridden
+  commentId: P:Docfx.DataContracts.ManagedReference.ItemViewModel.Overridden
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.Overridden
+  nameWithType: ItemViewModel.Overridden
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.Overridden*
+  name: Overridden
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Overridden_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Overridden
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.Overridden
+  nameWithType: ItemViewModel.Overridden
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.Parent
+  name: Parent
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Parent
+  commentId: P:Docfx.DataContracts.ManagedReference.ItemViewModel.Parent
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.Parent
+  nameWithType: ItemViewModel.Parent
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.Parent*
+  name: Parent
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Parent_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Parent
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.Parent
+  nameWithType: ItemViewModel.Parent
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.Platform
+  name: Platform
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Platform
+  commentId: P:Docfx.DataContracts.ManagedReference.ItemViewModel.Platform
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.Platform
+  nameWithType: ItemViewModel.Platform
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.Platform*
+  name: Platform
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Platform_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Platform
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.Platform
+  nameWithType: ItemViewModel.Platform
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.Remarks
+  name: Remarks
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Remarks
+  commentId: P:Docfx.DataContracts.ManagedReference.ItemViewModel.Remarks
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.Remarks
+  nameWithType: ItemViewModel.Remarks
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.Remarks*
+  name: Remarks
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Remarks_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Remarks
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.Remarks
+  nameWithType: ItemViewModel.Remarks
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.SeeAlsos
+  name: SeeAlsos
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_SeeAlsos
+  commentId: P:Docfx.DataContracts.ManagedReference.ItemViewModel.SeeAlsos
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.SeeAlsos
+  nameWithType: ItemViewModel.SeeAlsos
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.SeeAlsos*
+  name: SeeAlsos
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_SeeAlsos_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.SeeAlsos
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.SeeAlsos
+  nameWithType: ItemViewModel.SeeAlsos
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.SeeAlsosUidReference
+  name: SeeAlsosUidReference
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_SeeAlsosUidReference
+  commentId: P:Docfx.DataContracts.ManagedReference.ItemViewModel.SeeAlsosUidReference
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.SeeAlsosUidReference
+  nameWithType: ItemViewModel.SeeAlsosUidReference
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.SeeAlsosUidReference*
+  name: SeeAlsosUidReference
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_SeeAlsosUidReference_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.SeeAlsosUidReference
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.SeeAlsosUidReference
+  nameWithType: ItemViewModel.SeeAlsosUidReference
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.Source
+  name: Source
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Source
+  commentId: P:Docfx.DataContracts.ManagedReference.ItemViewModel.Source
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.Source
+  nameWithType: ItemViewModel.Source
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.Source*
+  name: Source
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Source_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Source
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.Source
+  nameWithType: ItemViewModel.Source
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.Summary
+  name: Summary
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Summary
+  commentId: P:Docfx.DataContracts.ManagedReference.ItemViewModel.Summary
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.Summary
+  nameWithType: ItemViewModel.Summary
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.Summary*
+  name: Summary
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Summary_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Summary
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.Summary
+  nameWithType: ItemViewModel.Summary
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.SupportedLanguages
+  name: SupportedLanguages
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_SupportedLanguages
+  commentId: P:Docfx.DataContracts.ManagedReference.ItemViewModel.SupportedLanguages
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.SupportedLanguages
+  nameWithType: ItemViewModel.SupportedLanguages
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.SupportedLanguages*
+  name: SupportedLanguages
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_SupportedLanguages_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.SupportedLanguages
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.SupportedLanguages
+  nameWithType: ItemViewModel.SupportedLanguages
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.Syntax
+  name: Syntax
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Syntax
+  commentId: P:Docfx.DataContracts.ManagedReference.ItemViewModel.Syntax
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.Syntax
+  nameWithType: ItemViewModel.Syntax
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.Syntax*
+  name: Syntax
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Syntax_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Syntax
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.Syntax
+  nameWithType: ItemViewModel.Syntax
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.Type
+  name: Type
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Type
+  commentId: P:Docfx.DataContracts.ManagedReference.ItemViewModel.Type
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.Type
+  nameWithType: ItemViewModel.Type
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.Type*
+  name: Type
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Type_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Type
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.Type
+  nameWithType: ItemViewModel.Type
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.Uid
+  name: Uid
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Uid
+  commentId: P:Docfx.DataContracts.ManagedReference.ItemViewModel.Uid
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.Uid
+  nameWithType: ItemViewModel.Uid
+- uid: Docfx.DataContracts.ManagedReference.ItemViewModel.Uid*
+  name: Uid
+  href: api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Uid_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Uid
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.ItemViewModel.Uid
+  nameWithType: ItemViewModel.Uid
+- uid: Docfx.DataContracts.ManagedReference.LinkInfo
+  name: LinkInfo
+  href: api/Docfx.DataContracts.ManagedReference.LinkInfo.html
+  commentId: T:Docfx.DataContracts.ManagedReference.LinkInfo
+  fullName: Docfx.DataContracts.ManagedReference.LinkInfo
+  nameWithType: LinkInfo
+- uid: Docfx.DataContracts.ManagedReference.LinkInfo.AltText
+  name: AltText
+  href: api/Docfx.DataContracts.ManagedReference.LinkInfo.html#Docfx_DataContracts_ManagedReference_LinkInfo_AltText
+  commentId: P:Docfx.DataContracts.ManagedReference.LinkInfo.AltText
+  fullName: Docfx.DataContracts.ManagedReference.LinkInfo.AltText
+  nameWithType: LinkInfo.AltText
+- uid: Docfx.DataContracts.ManagedReference.LinkInfo.AltText*
+  name: AltText
+  href: api/Docfx.DataContracts.ManagedReference.LinkInfo.html#Docfx_DataContracts_ManagedReference_LinkInfo_AltText_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.LinkInfo.AltText
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.LinkInfo.AltText
+  nameWithType: LinkInfo.AltText
+- uid: Docfx.DataContracts.ManagedReference.LinkInfo.CommentId
+  name: CommentId
+  href: api/Docfx.DataContracts.ManagedReference.LinkInfo.html#Docfx_DataContracts_ManagedReference_LinkInfo_CommentId
+  commentId: P:Docfx.DataContracts.ManagedReference.LinkInfo.CommentId
+  fullName: Docfx.DataContracts.ManagedReference.LinkInfo.CommentId
+  nameWithType: LinkInfo.CommentId
+- uid: Docfx.DataContracts.ManagedReference.LinkInfo.CommentId*
+  name: CommentId
+  href: api/Docfx.DataContracts.ManagedReference.LinkInfo.html#Docfx_DataContracts_ManagedReference_LinkInfo_CommentId_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.LinkInfo.CommentId
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.LinkInfo.CommentId
+  nameWithType: LinkInfo.CommentId
+- uid: Docfx.DataContracts.ManagedReference.LinkInfo.LinkId
+  name: LinkId
+  href: api/Docfx.DataContracts.ManagedReference.LinkInfo.html#Docfx_DataContracts_ManagedReference_LinkInfo_LinkId
+  commentId: P:Docfx.DataContracts.ManagedReference.LinkInfo.LinkId
+  fullName: Docfx.DataContracts.ManagedReference.LinkInfo.LinkId
+  nameWithType: LinkInfo.LinkId
+- uid: Docfx.DataContracts.ManagedReference.LinkInfo.LinkId*
+  name: LinkId
+  href: api/Docfx.DataContracts.ManagedReference.LinkInfo.html#Docfx_DataContracts_ManagedReference_LinkInfo_LinkId_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.LinkInfo.LinkId
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.LinkInfo.LinkId
+  nameWithType: LinkInfo.LinkId
+- uid: Docfx.DataContracts.ManagedReference.LinkInfo.LinkType
+  name: LinkType
+  href: api/Docfx.DataContracts.ManagedReference.LinkInfo.html#Docfx_DataContracts_ManagedReference_LinkInfo_LinkType
+  commentId: P:Docfx.DataContracts.ManagedReference.LinkInfo.LinkType
+  fullName: Docfx.DataContracts.ManagedReference.LinkInfo.LinkType
+  nameWithType: LinkInfo.LinkType
+- uid: Docfx.DataContracts.ManagedReference.LinkInfo.LinkType*
+  name: LinkType
+  href: api/Docfx.DataContracts.ManagedReference.LinkInfo.html#Docfx_DataContracts_ManagedReference_LinkInfo_LinkType_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.LinkInfo.LinkType
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.LinkInfo.LinkType
+  nameWithType: LinkInfo.LinkType
+- uid: Docfx.DataContracts.ManagedReference.LinkType
+  name: LinkType
+  href: api/Docfx.DataContracts.ManagedReference.LinkType.html
+  commentId: T:Docfx.DataContracts.ManagedReference.LinkType
+  fullName: Docfx.DataContracts.ManagedReference.LinkType
+  nameWithType: LinkType
+- uid: Docfx.DataContracts.ManagedReference.LinkType.CRef
+  name: CRef
+  href: api/Docfx.DataContracts.ManagedReference.LinkType.html#Docfx_DataContracts_ManagedReference_LinkType_CRef
+  commentId: F:Docfx.DataContracts.ManagedReference.LinkType.CRef
+  fullName: Docfx.DataContracts.ManagedReference.LinkType.CRef
+  nameWithType: LinkType.CRef
+- uid: Docfx.DataContracts.ManagedReference.LinkType.HRef
+  name: HRef
+  href: api/Docfx.DataContracts.ManagedReference.LinkType.html#Docfx_DataContracts_ManagedReference_LinkType_HRef
+  commentId: F:Docfx.DataContracts.ManagedReference.LinkType.HRef
+  fullName: Docfx.DataContracts.ManagedReference.LinkType.HRef
+  nameWithType: LinkType.HRef
+- uid: Docfx.DataContracts.ManagedReference.MemberType
+  name: MemberType
+  href: api/Docfx.DataContracts.ManagedReference.MemberType.html
+  commentId: T:Docfx.DataContracts.ManagedReference.MemberType
+  fullName: Docfx.DataContracts.ManagedReference.MemberType
+  nameWithType: MemberType
+- uid: Docfx.DataContracts.ManagedReference.MemberType.Assembly
+  name: Assembly
+  href: api/Docfx.DataContracts.ManagedReference.MemberType.html#Docfx_DataContracts_ManagedReference_MemberType_Assembly
+  commentId: F:Docfx.DataContracts.ManagedReference.MemberType.Assembly
+  fullName: Docfx.DataContracts.ManagedReference.MemberType.Assembly
+  nameWithType: MemberType.Assembly
+- uid: Docfx.DataContracts.ManagedReference.MemberType.AttachedEvent
+  name: AttachedEvent
+  href: api/Docfx.DataContracts.ManagedReference.MemberType.html#Docfx_DataContracts_ManagedReference_MemberType_AttachedEvent
+  commentId: F:Docfx.DataContracts.ManagedReference.MemberType.AttachedEvent
+  fullName: Docfx.DataContracts.ManagedReference.MemberType.AttachedEvent
+  nameWithType: MemberType.AttachedEvent
+- uid: Docfx.DataContracts.ManagedReference.MemberType.AttachedProperty
+  name: AttachedProperty
+  href: api/Docfx.DataContracts.ManagedReference.MemberType.html#Docfx_DataContracts_ManagedReference_MemberType_AttachedProperty
+  commentId: F:Docfx.DataContracts.ManagedReference.MemberType.AttachedProperty
+  fullName: Docfx.DataContracts.ManagedReference.MemberType.AttachedProperty
+  nameWithType: MemberType.AttachedProperty
+- uid: Docfx.DataContracts.ManagedReference.MemberType.Class
+  name: Class
+  href: api/Docfx.DataContracts.ManagedReference.MemberType.html#Docfx_DataContracts_ManagedReference_MemberType_Class
+  commentId: F:Docfx.DataContracts.ManagedReference.MemberType.Class
+  fullName: Docfx.DataContracts.ManagedReference.MemberType.Class
+  nameWithType: MemberType.Class
+- uid: Docfx.DataContracts.ManagedReference.MemberType.Constructor
+  name: Constructor
+  href: api/Docfx.DataContracts.ManagedReference.MemberType.html#Docfx_DataContracts_ManagedReference_MemberType_Constructor
+  commentId: F:Docfx.DataContracts.ManagedReference.MemberType.Constructor
+  fullName: Docfx.DataContracts.ManagedReference.MemberType.Constructor
+  nameWithType: MemberType.Constructor
+- uid: Docfx.DataContracts.ManagedReference.MemberType.Container
+  name: Container
+  href: api/Docfx.DataContracts.ManagedReference.MemberType.html#Docfx_DataContracts_ManagedReference_MemberType_Container
+  commentId: F:Docfx.DataContracts.ManagedReference.MemberType.Container
+  fullName: Docfx.DataContracts.ManagedReference.MemberType.Container
+  nameWithType: MemberType.Container
+- uid: Docfx.DataContracts.ManagedReference.MemberType.Default
+  name: Default
+  href: api/Docfx.DataContracts.ManagedReference.MemberType.html#Docfx_DataContracts_ManagedReference_MemberType_Default
+  commentId: F:Docfx.DataContracts.ManagedReference.MemberType.Default
+  fullName: Docfx.DataContracts.ManagedReference.MemberType.Default
+  nameWithType: MemberType.Default
+- uid: Docfx.DataContracts.ManagedReference.MemberType.Delegate
+  name: Delegate
+  href: api/Docfx.DataContracts.ManagedReference.MemberType.html#Docfx_DataContracts_ManagedReference_MemberType_Delegate
+  commentId: F:Docfx.DataContracts.ManagedReference.MemberType.Delegate
+  fullName: Docfx.DataContracts.ManagedReference.MemberType.Delegate
+  nameWithType: MemberType.Delegate
+- uid: Docfx.DataContracts.ManagedReference.MemberType.Enum
+  name: Enum
+  href: api/Docfx.DataContracts.ManagedReference.MemberType.html#Docfx_DataContracts_ManagedReference_MemberType_Enum
+  commentId: F:Docfx.DataContracts.ManagedReference.MemberType.Enum
+  fullName: Docfx.DataContracts.ManagedReference.MemberType.Enum
+  nameWithType: MemberType.Enum
+- uid: Docfx.DataContracts.ManagedReference.MemberType.Event
+  name: Event
+  href: api/Docfx.DataContracts.ManagedReference.MemberType.html#Docfx_DataContracts_ManagedReference_MemberType_Event
+  commentId: F:Docfx.DataContracts.ManagedReference.MemberType.Event
+  fullName: Docfx.DataContracts.ManagedReference.MemberType.Event
+  nameWithType: MemberType.Event
+- uid: Docfx.DataContracts.ManagedReference.MemberType.Field
+  name: Field
+  href: api/Docfx.DataContracts.ManagedReference.MemberType.html#Docfx_DataContracts_ManagedReference_MemberType_Field
+  commentId: F:Docfx.DataContracts.ManagedReference.MemberType.Field
+  fullName: Docfx.DataContracts.ManagedReference.MemberType.Field
+  nameWithType: MemberType.Field
+- uid: Docfx.DataContracts.ManagedReference.MemberType.Interface
+  name: Interface
+  href: api/Docfx.DataContracts.ManagedReference.MemberType.html#Docfx_DataContracts_ManagedReference_MemberType_Interface
+  commentId: F:Docfx.DataContracts.ManagedReference.MemberType.Interface
+  fullName: Docfx.DataContracts.ManagedReference.MemberType.Interface
+  nameWithType: MemberType.Interface
+- uid: Docfx.DataContracts.ManagedReference.MemberType.Method
+  name: Method
+  href: api/Docfx.DataContracts.ManagedReference.MemberType.html#Docfx_DataContracts_ManagedReference_MemberType_Method
+  commentId: F:Docfx.DataContracts.ManagedReference.MemberType.Method
+  fullName: Docfx.DataContracts.ManagedReference.MemberType.Method
+  nameWithType: MemberType.Method
+- uid: Docfx.DataContracts.ManagedReference.MemberType.Namespace
+  name: Namespace
+  href: api/Docfx.DataContracts.ManagedReference.MemberType.html#Docfx_DataContracts_ManagedReference_MemberType_Namespace
+  commentId: F:Docfx.DataContracts.ManagedReference.MemberType.Namespace
+  fullName: Docfx.DataContracts.ManagedReference.MemberType.Namespace
+  nameWithType: MemberType.Namespace
+- uid: Docfx.DataContracts.ManagedReference.MemberType.Operator
+  name: Operator
+  href: api/Docfx.DataContracts.ManagedReference.MemberType.html#Docfx_DataContracts_ManagedReference_MemberType_Operator
+  commentId: F:Docfx.DataContracts.ManagedReference.MemberType.Operator
+  fullName: Docfx.DataContracts.ManagedReference.MemberType.Operator
+  nameWithType: MemberType.Operator
+- uid: Docfx.DataContracts.ManagedReference.MemberType.Property
+  name: Property
+  href: api/Docfx.DataContracts.ManagedReference.MemberType.html#Docfx_DataContracts_ManagedReference_MemberType_Property
+  commentId: F:Docfx.DataContracts.ManagedReference.MemberType.Property
+  fullName: Docfx.DataContracts.ManagedReference.MemberType.Property
+  nameWithType: MemberType.Property
+- uid: Docfx.DataContracts.ManagedReference.MemberType.Struct
+  name: Struct
+  href: api/Docfx.DataContracts.ManagedReference.MemberType.html#Docfx_DataContracts_ManagedReference_MemberType_Struct
+  commentId: F:Docfx.DataContracts.ManagedReference.MemberType.Struct
+  fullName: Docfx.DataContracts.ManagedReference.MemberType.Struct
+  nameWithType: MemberType.Struct
+- uid: Docfx.DataContracts.ManagedReference.MemberType.Toc
+  name: Toc
+  href: api/Docfx.DataContracts.ManagedReference.MemberType.html#Docfx_DataContracts_ManagedReference_MemberType_Toc
+  commentId: F:Docfx.DataContracts.ManagedReference.MemberType.Toc
+  fullName: Docfx.DataContracts.ManagedReference.MemberType.Toc
+  nameWithType: MemberType.Toc
+- uid: Docfx.DataContracts.ManagedReference.NamedArgumentInfo
+  name: NamedArgumentInfo
+  href: api/Docfx.DataContracts.ManagedReference.NamedArgumentInfo.html
+  commentId: T:Docfx.DataContracts.ManagedReference.NamedArgumentInfo
+  fullName: Docfx.DataContracts.ManagedReference.NamedArgumentInfo
+  nameWithType: NamedArgumentInfo
+- uid: Docfx.DataContracts.ManagedReference.NamedArgumentInfo.Name
+  name: Name
+  href: api/Docfx.DataContracts.ManagedReference.NamedArgumentInfo.html#Docfx_DataContracts_ManagedReference_NamedArgumentInfo_Name
+  commentId: P:Docfx.DataContracts.ManagedReference.NamedArgumentInfo.Name
+  fullName: Docfx.DataContracts.ManagedReference.NamedArgumentInfo.Name
+  nameWithType: NamedArgumentInfo.Name
+- uid: Docfx.DataContracts.ManagedReference.NamedArgumentInfo.Name*
+  name: Name
+  href: api/Docfx.DataContracts.ManagedReference.NamedArgumentInfo.html#Docfx_DataContracts_ManagedReference_NamedArgumentInfo_Name_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.NamedArgumentInfo.Name
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.NamedArgumentInfo.Name
+  nameWithType: NamedArgumentInfo.Name
+- uid: Docfx.DataContracts.ManagedReference.NamedArgumentInfo.Type
+  name: Type
+  href: api/Docfx.DataContracts.ManagedReference.NamedArgumentInfo.html#Docfx_DataContracts_ManagedReference_NamedArgumentInfo_Type
+  commentId: P:Docfx.DataContracts.ManagedReference.NamedArgumentInfo.Type
+  fullName: Docfx.DataContracts.ManagedReference.NamedArgumentInfo.Type
+  nameWithType: NamedArgumentInfo.Type
+- uid: Docfx.DataContracts.ManagedReference.NamedArgumentInfo.Type*
+  name: Type
+  href: api/Docfx.DataContracts.ManagedReference.NamedArgumentInfo.html#Docfx_DataContracts_ManagedReference_NamedArgumentInfo_Type_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.NamedArgumentInfo.Type
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.NamedArgumentInfo.Type
+  nameWithType: NamedArgumentInfo.Type
+- uid: Docfx.DataContracts.ManagedReference.NamedArgumentInfo.Value
+  name: Value
+  href: api/Docfx.DataContracts.ManagedReference.NamedArgumentInfo.html#Docfx_DataContracts_ManagedReference_NamedArgumentInfo_Value
+  commentId: P:Docfx.DataContracts.ManagedReference.NamedArgumentInfo.Value
+  fullName: Docfx.DataContracts.ManagedReference.NamedArgumentInfo.Value
+  nameWithType: NamedArgumentInfo.Value
+- uid: Docfx.DataContracts.ManagedReference.NamedArgumentInfo.Value*
+  name: Value
+  href: api/Docfx.DataContracts.ManagedReference.NamedArgumentInfo.html#Docfx_DataContracts_ManagedReference_NamedArgumentInfo_Value_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.NamedArgumentInfo.Value
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.NamedArgumentInfo.Value
+  nameWithType: NamedArgumentInfo.Value
+- uid: Docfx.DataContracts.ManagedReference.PageViewModel
+  name: PageViewModel
+  href: api/Docfx.DataContracts.ManagedReference.PageViewModel.html
+  commentId: T:Docfx.DataContracts.ManagedReference.PageViewModel
+  fullName: Docfx.DataContracts.ManagedReference.PageViewModel
+  nameWithType: PageViewModel
+- uid: Docfx.DataContracts.ManagedReference.PageViewModel.Items
+  name: Items
+  href: api/Docfx.DataContracts.ManagedReference.PageViewModel.html#Docfx_DataContracts_ManagedReference_PageViewModel_Items
+  commentId: P:Docfx.DataContracts.ManagedReference.PageViewModel.Items
+  fullName: Docfx.DataContracts.ManagedReference.PageViewModel.Items
+  nameWithType: PageViewModel.Items
+- uid: Docfx.DataContracts.ManagedReference.PageViewModel.Items*
+  name: Items
+  href: api/Docfx.DataContracts.ManagedReference.PageViewModel.html#Docfx_DataContracts_ManagedReference_PageViewModel_Items_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.PageViewModel.Items
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.PageViewModel.Items
+  nameWithType: PageViewModel.Items
+- uid: Docfx.DataContracts.ManagedReference.PageViewModel.MemberLayout
+  name: MemberLayout
+  href: api/Docfx.DataContracts.ManagedReference.PageViewModel.html#Docfx_DataContracts_ManagedReference_PageViewModel_MemberLayout
+  commentId: P:Docfx.DataContracts.ManagedReference.PageViewModel.MemberLayout
+  fullName: Docfx.DataContracts.ManagedReference.PageViewModel.MemberLayout
+  nameWithType: PageViewModel.MemberLayout
+- uid: Docfx.DataContracts.ManagedReference.PageViewModel.MemberLayout*
+  name: MemberLayout
+  href: api/Docfx.DataContracts.ManagedReference.PageViewModel.html#Docfx_DataContracts_ManagedReference_PageViewModel_MemberLayout_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.PageViewModel.MemberLayout
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.PageViewModel.MemberLayout
+  nameWithType: PageViewModel.MemberLayout
+- uid: Docfx.DataContracts.ManagedReference.PageViewModel.Metadata
+  name: Metadata
+  href: api/Docfx.DataContracts.ManagedReference.PageViewModel.html#Docfx_DataContracts_ManagedReference_PageViewModel_Metadata
+  commentId: P:Docfx.DataContracts.ManagedReference.PageViewModel.Metadata
+  fullName: Docfx.DataContracts.ManagedReference.PageViewModel.Metadata
+  nameWithType: PageViewModel.Metadata
+- uid: Docfx.DataContracts.ManagedReference.PageViewModel.Metadata*
+  name: Metadata
+  href: api/Docfx.DataContracts.ManagedReference.PageViewModel.html#Docfx_DataContracts_ManagedReference_PageViewModel_Metadata_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.PageViewModel.Metadata
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.PageViewModel.Metadata
+  nameWithType: PageViewModel.Metadata
+- uid: Docfx.DataContracts.ManagedReference.PageViewModel.References
+  name: References
+  href: api/Docfx.DataContracts.ManagedReference.PageViewModel.html#Docfx_DataContracts_ManagedReference_PageViewModel_References
+  commentId: P:Docfx.DataContracts.ManagedReference.PageViewModel.References
+  fullName: Docfx.DataContracts.ManagedReference.PageViewModel.References
+  nameWithType: PageViewModel.References
+- uid: Docfx.DataContracts.ManagedReference.PageViewModel.References*
+  name: References
+  href: api/Docfx.DataContracts.ManagedReference.PageViewModel.html#Docfx_DataContracts_ManagedReference_PageViewModel_References_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.PageViewModel.References
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.PageViewModel.References
+  nameWithType: PageViewModel.References
+- uid: Docfx.DataContracts.ManagedReference.PageViewModel.ShouldSkipMarkup
+  name: ShouldSkipMarkup
+  href: api/Docfx.DataContracts.ManagedReference.PageViewModel.html#Docfx_DataContracts_ManagedReference_PageViewModel_ShouldSkipMarkup
+  commentId: P:Docfx.DataContracts.ManagedReference.PageViewModel.ShouldSkipMarkup
+  fullName: Docfx.DataContracts.ManagedReference.PageViewModel.ShouldSkipMarkup
+  nameWithType: PageViewModel.ShouldSkipMarkup
+- uid: Docfx.DataContracts.ManagedReference.PageViewModel.ShouldSkipMarkup*
+  name: ShouldSkipMarkup
+  href: api/Docfx.DataContracts.ManagedReference.PageViewModel.html#Docfx_DataContracts_ManagedReference_PageViewModel_ShouldSkipMarkup_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.PageViewModel.ShouldSkipMarkup
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.PageViewModel.ShouldSkipMarkup
+  nameWithType: PageViewModel.ShouldSkipMarkup
+- uid: Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel
+  name: SyntaxDetailViewModel
+  href: api/Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.html
+  commentId: T:Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel
+  fullName: Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel
+  nameWithType: SyntaxDetailViewModel
+- uid: Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Content
+  name: Content
+  href: api/Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.html#Docfx_DataContracts_ManagedReference_SyntaxDetailViewModel_Content
+  commentId: P:Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Content
+  fullName: Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Content
+  nameWithType: SyntaxDetailViewModel.Content
+- uid: Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Content*
+  name: Content
+  href: api/Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.html#Docfx_DataContracts_ManagedReference_SyntaxDetailViewModel_Content_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Content
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Content
+  nameWithType: SyntaxDetailViewModel.Content
+- uid: Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.ContentForCSharp
+  name: ContentForCSharp
+  href: api/Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.html#Docfx_DataContracts_ManagedReference_SyntaxDetailViewModel_ContentForCSharp
+  commentId: P:Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.ContentForCSharp
+  fullName: Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.ContentForCSharp
+  nameWithType: SyntaxDetailViewModel.ContentForCSharp
+- uid: Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.ContentForCSharp*
+  name: ContentForCSharp
+  href: api/Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.html#Docfx_DataContracts_ManagedReference_SyntaxDetailViewModel_ContentForCSharp_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.ContentForCSharp
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.ContentForCSharp
+  nameWithType: SyntaxDetailViewModel.ContentForCSharp
+- uid: Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.ContentForVB
+  name: ContentForVB
+  href: api/Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.html#Docfx_DataContracts_ManagedReference_SyntaxDetailViewModel_ContentForVB
+  commentId: P:Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.ContentForVB
+  fullName: Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.ContentForVB
+  nameWithType: SyntaxDetailViewModel.ContentForVB
+- uid: Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.ContentForVB*
+  name: ContentForVB
+  href: api/Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.html#Docfx_DataContracts_ManagedReference_SyntaxDetailViewModel_ContentForVB_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.ContentForVB
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.ContentForVB
+  nameWithType: SyntaxDetailViewModel.ContentForVB
+- uid: Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Contents
+  name: Contents
+  href: api/Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.html#Docfx_DataContracts_ManagedReference_SyntaxDetailViewModel_Contents
+  commentId: P:Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Contents
+  fullName: Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Contents
+  nameWithType: SyntaxDetailViewModel.Contents
+- uid: Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Contents*
+  name: Contents
+  href: api/Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.html#Docfx_DataContracts_ManagedReference_SyntaxDetailViewModel_Contents_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Contents
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Contents
+  nameWithType: SyntaxDetailViewModel.Contents
+- uid: Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Parameters
+  name: Parameters
+  href: api/Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.html#Docfx_DataContracts_ManagedReference_SyntaxDetailViewModel_Parameters
+  commentId: P:Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Parameters
+  fullName: Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Parameters
+  nameWithType: SyntaxDetailViewModel.Parameters
+- uid: Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Parameters*
+  name: Parameters
+  href: api/Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.html#Docfx_DataContracts_ManagedReference_SyntaxDetailViewModel_Parameters_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Parameters
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Parameters
+  nameWithType: SyntaxDetailViewModel.Parameters
+- uid: Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Return
+  name: Return
+  href: api/Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.html#Docfx_DataContracts_ManagedReference_SyntaxDetailViewModel_Return
+  commentId: P:Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Return
+  fullName: Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Return
+  nameWithType: SyntaxDetailViewModel.Return
+- uid: Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Return*
+  name: Return
+  href: api/Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.html#Docfx_DataContracts_ManagedReference_SyntaxDetailViewModel_Return_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Return
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Return
+  nameWithType: SyntaxDetailViewModel.Return
+- uid: Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.TypeParameters
+  name: TypeParameters
+  href: api/Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.html#Docfx_DataContracts_ManagedReference_SyntaxDetailViewModel_TypeParameters
+  commentId: P:Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.TypeParameters
+  fullName: Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.TypeParameters
+  nameWithType: SyntaxDetailViewModel.TypeParameters
+- uid: Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.TypeParameters*
+  name: TypeParameters
+  href: api/Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.html#Docfx_DataContracts_ManagedReference_SyntaxDetailViewModel_TypeParameters_
+  commentId: Overload:Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.TypeParameters
+  isSpec: 'True'
+  fullName: Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.TypeParameters
+  nameWithType: SyntaxDetailViewModel.TypeParameters
+- uid: Docfx.DataContracts.ManagedReference.SyntaxLanguage
+  name: SyntaxLanguage
+  href: api/Docfx.DataContracts.ManagedReference.SyntaxLanguage.html
+  commentId: T:Docfx.DataContracts.ManagedReference.SyntaxLanguage
+  fullName: Docfx.DataContracts.ManagedReference.SyntaxLanguage
+  nameWithType: SyntaxLanguage
+- uid: Docfx.DataContracts.ManagedReference.SyntaxLanguage.CSharp
+  name: CSharp
+  href: api/Docfx.DataContracts.ManagedReference.SyntaxLanguage.html#Docfx_DataContracts_ManagedReference_SyntaxLanguage_CSharp
+  commentId: F:Docfx.DataContracts.ManagedReference.SyntaxLanguage.CSharp
+  fullName: Docfx.DataContracts.ManagedReference.SyntaxLanguage.CSharp
+  nameWithType: SyntaxLanguage.CSharp
+- uid: Docfx.DataContracts.ManagedReference.SyntaxLanguage.Default
+  name: Default
+  href: api/Docfx.DataContracts.ManagedReference.SyntaxLanguage.html#Docfx_DataContracts_ManagedReference_SyntaxLanguage_Default
+  commentId: F:Docfx.DataContracts.ManagedReference.SyntaxLanguage.Default
+  fullName: Docfx.DataContracts.ManagedReference.SyntaxLanguage.Default
+  nameWithType: SyntaxLanguage.Default
+- uid: Docfx.DataContracts.ManagedReference.SyntaxLanguage.VB
+  name: VB
+  href: api/Docfx.DataContracts.ManagedReference.SyntaxLanguage.html#Docfx_DataContracts_ManagedReference_SyntaxLanguage_VB
+  commentId: F:Docfx.DataContracts.ManagedReference.SyntaxLanguage.VB
+  fullName: Docfx.DataContracts.ManagedReference.SyntaxLanguage.VB
+  nameWithType: SyntaxLanguage.VB
+- uid: Docfx.Docset
+  name: Docset
+  href: api/Docfx.Docset.html
+  commentId: T:Docfx.Docset
+  fullName: Docfx.Docset
+  nameWithType: Docset
+- uid: Docfx.Docset.Build(System.String)
+  name: Build(string)
+  href: api/Docfx.Docset.html#Docfx_Docset_Build_System_String_
+  commentId: M:Docfx.Docset.Build(System.String)
+  name.vb: Build(String)
+  fullName: Docfx.Docset.Build(string)
+  fullName.vb: Docfx.Docset.Build(String)
+  nameWithType: Docset.Build(string)
+  nameWithType.vb: Docset.Build(String)
+- uid: Docfx.Docset.Build(System.String,Docfx.BuildOptions)
+  name: Build(string, BuildOptions)
+  href: api/Docfx.Docset.html#Docfx_Docset_Build_System_String_Docfx_BuildOptions_
+  commentId: M:Docfx.Docset.Build(System.String,Docfx.BuildOptions)
+  name.vb: Build(String, BuildOptions)
+  fullName: Docfx.Docset.Build(string, Docfx.BuildOptions)
+  fullName.vb: Docfx.Docset.Build(String, Docfx.BuildOptions)
+  nameWithType: Docset.Build(string, BuildOptions)
+  nameWithType.vb: Docset.Build(String, BuildOptions)
+- uid: Docfx.Docset.Build*
+  name: Build
+  href: api/Docfx.Docset.html#Docfx_Docset_Build_
+  commentId: Overload:Docfx.Docset.Build
+  isSpec: 'True'
+  fullName: Docfx.Docset.Build
+  nameWithType: Docset.Build
+- uid: Docfx.Docset.Pdf(System.String)
+  name: Pdf(string)
+  href: api/Docfx.Docset.html#Docfx_Docset_Pdf_System_String_
+  commentId: M:Docfx.Docset.Pdf(System.String)
+  name.vb: Pdf(String)
+  fullName: Docfx.Docset.Pdf(string)
+  fullName.vb: Docfx.Docset.Pdf(String)
+  nameWithType: Docset.Pdf(string)
+  nameWithType.vb: Docset.Pdf(String)
+- uid: Docfx.Docset.Pdf(System.String,Docfx.BuildOptions)
+  name: Pdf(string, BuildOptions)
+  href: api/Docfx.Docset.html#Docfx_Docset_Pdf_System_String_Docfx_BuildOptions_
+  commentId: M:Docfx.Docset.Pdf(System.String,Docfx.BuildOptions)
+  name.vb: Pdf(String, BuildOptions)
+  fullName: Docfx.Docset.Pdf(string, Docfx.BuildOptions)
+  fullName.vb: Docfx.Docset.Pdf(String, Docfx.BuildOptions)
+  nameWithType: Docset.Pdf(string, BuildOptions)
+  nameWithType.vb: Docset.Pdf(String, BuildOptions)
+- uid: Docfx.Docset.Pdf*
+  name: Pdf
+  href: api/Docfx.Docset.html#Docfx_Docset_Pdf_
+  commentId: Overload:Docfx.Docset.Pdf
+  isSpec: 'True'
+  fullName: Docfx.Docset.Pdf
+  nameWithType: Docset.Pdf
+- uid: Docfx.Dotnet
+  name: Docfx.Dotnet
+  href: api/Docfx.Dotnet.html
+  commentId: N:Docfx.Dotnet
+  fullName: Docfx.Dotnet
+  nameWithType: Docfx.Dotnet
+- uid: Docfx.Dotnet.DotnetApiCatalog
+  name: DotnetApiCatalog
+  href: api/Docfx.Dotnet.DotnetApiCatalog.html
+  commentId: T:Docfx.Dotnet.DotnetApiCatalog
+  fullName: Docfx.Dotnet.DotnetApiCatalog
+  nameWithType: DotnetApiCatalog
+- uid: Docfx.Dotnet.DotnetApiCatalog.GenerateManagedReferenceYamlFiles(System.String)
+  name: GenerateManagedReferenceYamlFiles(string)
+  href: api/Docfx.Dotnet.DotnetApiCatalog.html#Docfx_Dotnet_DotnetApiCatalog_GenerateManagedReferenceYamlFiles_System_String_
+  commentId: M:Docfx.Dotnet.DotnetApiCatalog.GenerateManagedReferenceYamlFiles(System.String)
+  name.vb: GenerateManagedReferenceYamlFiles(String)
+  fullName: Docfx.Dotnet.DotnetApiCatalog.GenerateManagedReferenceYamlFiles(string)
+  fullName.vb: Docfx.Dotnet.DotnetApiCatalog.GenerateManagedReferenceYamlFiles(String)
+  nameWithType: DotnetApiCatalog.GenerateManagedReferenceYamlFiles(string)
+  nameWithType.vb: DotnetApiCatalog.GenerateManagedReferenceYamlFiles(String)
+- uid: Docfx.Dotnet.DotnetApiCatalog.GenerateManagedReferenceYamlFiles(System.String,Docfx.Dotnet.DotnetApiOptions)
+  name: GenerateManagedReferenceYamlFiles(string, DotnetApiOptions)
+  href: api/Docfx.Dotnet.DotnetApiCatalog.html#Docfx_Dotnet_DotnetApiCatalog_GenerateManagedReferenceYamlFiles_System_String_Docfx_Dotnet_DotnetApiOptions_
+  commentId: M:Docfx.Dotnet.DotnetApiCatalog.GenerateManagedReferenceYamlFiles(System.String,Docfx.Dotnet.DotnetApiOptions)
+  name.vb: GenerateManagedReferenceYamlFiles(String, DotnetApiOptions)
+  fullName: Docfx.Dotnet.DotnetApiCatalog.GenerateManagedReferenceYamlFiles(string,
+    Docfx.Dotnet.DotnetApiOptions)
+  fullName.vb: Docfx.Dotnet.DotnetApiCatalog.GenerateManagedReferenceYamlFiles(String,
+    Docfx.Dotnet.DotnetApiOptions)
+  nameWithType: DotnetApiCatalog.GenerateManagedReferenceYamlFiles(string, DotnetApiOptions)
+  nameWithType.vb: DotnetApiCatalog.GenerateManagedReferenceYamlFiles(String, DotnetApiOptions)
+- uid: Docfx.Dotnet.DotnetApiCatalog.GenerateManagedReferenceYamlFiles*
+  name: GenerateManagedReferenceYamlFiles
+  href: api/Docfx.Dotnet.DotnetApiCatalog.html#Docfx_Dotnet_DotnetApiCatalog_GenerateManagedReferenceYamlFiles_
+  commentId: Overload:Docfx.Dotnet.DotnetApiCatalog.GenerateManagedReferenceYamlFiles
+  isSpec: 'True'
+  fullName: Docfx.Dotnet.DotnetApiCatalog.GenerateManagedReferenceYamlFiles
+  nameWithType: DotnetApiCatalog.GenerateManagedReferenceYamlFiles
+- uid: Docfx.Dotnet.DotnetApiOptions
+  name: DotnetApiOptions
+  href: api/Docfx.Dotnet.DotnetApiOptions.html
+  commentId: T:Docfx.Dotnet.DotnetApiOptions
+  fullName: Docfx.Dotnet.DotnetApiOptions
+  nameWithType: DotnetApiOptions
+- uid: Docfx.Dotnet.DotnetApiOptions.IncludeApi
+  name: IncludeApi
+  href: api/Docfx.Dotnet.DotnetApiOptions.html#Docfx_Dotnet_DotnetApiOptions_IncludeApi
+  commentId: P:Docfx.Dotnet.DotnetApiOptions.IncludeApi
+  fullName: Docfx.Dotnet.DotnetApiOptions.IncludeApi
+  nameWithType: DotnetApiOptions.IncludeApi
+- uid: Docfx.Dotnet.DotnetApiOptions.IncludeApi*
+  name: IncludeApi
+  href: api/Docfx.Dotnet.DotnetApiOptions.html#Docfx_Dotnet_DotnetApiOptions_IncludeApi_
+  commentId: Overload:Docfx.Dotnet.DotnetApiOptions.IncludeApi
+  isSpec: 'True'
+  fullName: Docfx.Dotnet.DotnetApiOptions.IncludeApi
+  nameWithType: DotnetApiOptions.IncludeApi
+- uid: Docfx.Dotnet.DotnetApiOptions.IncludeAttribute
+  name: IncludeAttribute
+  href: api/Docfx.Dotnet.DotnetApiOptions.html#Docfx_Dotnet_DotnetApiOptions_IncludeAttribute
+  commentId: P:Docfx.Dotnet.DotnetApiOptions.IncludeAttribute
+  fullName: Docfx.Dotnet.DotnetApiOptions.IncludeAttribute
+  nameWithType: DotnetApiOptions.IncludeAttribute
+- uid: Docfx.Dotnet.DotnetApiOptions.IncludeAttribute*
+  name: IncludeAttribute
+  href: api/Docfx.Dotnet.DotnetApiOptions.html#Docfx_Dotnet_DotnetApiOptions_IncludeAttribute_
+  commentId: Overload:Docfx.Dotnet.DotnetApiOptions.IncludeAttribute
+  isSpec: 'True'
+  fullName: Docfx.Dotnet.DotnetApiOptions.IncludeAttribute
+  nameWithType: DotnetApiOptions.IncludeAttribute
+- uid: Docfx.Dotnet.DotnetApiOptions.SourceUrl
+  name: SourceUrl
+  href: api/Docfx.Dotnet.DotnetApiOptions.html#Docfx_Dotnet_DotnetApiOptions_SourceUrl
+  commentId: P:Docfx.Dotnet.DotnetApiOptions.SourceUrl
+  fullName: Docfx.Dotnet.DotnetApiOptions.SourceUrl
+  nameWithType: DotnetApiOptions.SourceUrl
+- uid: Docfx.Dotnet.DotnetApiOptions.SourceUrl*
+  name: SourceUrl
+  href: api/Docfx.Dotnet.DotnetApiOptions.html#Docfx_Dotnet_DotnetApiOptions_SourceUrl_
+  commentId: Overload:Docfx.Dotnet.DotnetApiOptions.SourceUrl
+  isSpec: 'True'
+  fullName: Docfx.Dotnet.DotnetApiOptions.SourceUrl
+  nameWithType: DotnetApiOptions.SourceUrl
+- uid: Docfx.Dotnet.SymbolIncludeState
+  name: SymbolIncludeState
+  href: api/Docfx.Dotnet.SymbolIncludeState.html
+  commentId: T:Docfx.Dotnet.SymbolIncludeState
+  fullName: Docfx.Dotnet.SymbolIncludeState
+  nameWithType: SymbolIncludeState
+- uid: Docfx.Dotnet.SymbolIncludeState.Default
+  name: Default
+  href: api/Docfx.Dotnet.SymbolIncludeState.html#Docfx_Dotnet_SymbolIncludeState_Default
+  commentId: F:Docfx.Dotnet.SymbolIncludeState.Default
+  fullName: Docfx.Dotnet.SymbolIncludeState.Default
+  nameWithType: SymbolIncludeState.Default
+- uid: Docfx.Dotnet.SymbolIncludeState.Exclude
+  name: Exclude
+  href: api/Docfx.Dotnet.SymbolIncludeState.html#Docfx_Dotnet_SymbolIncludeState_Exclude
+  commentId: F:Docfx.Dotnet.SymbolIncludeState.Exclude
+  fullName: Docfx.Dotnet.SymbolIncludeState.Exclude
+  nameWithType: SymbolIncludeState.Exclude
+- uid: Docfx.Dotnet.SymbolIncludeState.Include
+  name: Include
+  href: api/Docfx.Dotnet.SymbolIncludeState.html#Docfx_Dotnet_SymbolIncludeState_Include
+  commentId: F:Docfx.Dotnet.SymbolIncludeState.Include
+  fullName: Docfx.Dotnet.SymbolIncludeState.Include
+  nameWithType: SymbolIncludeState.Include
+- uid: Docfx.MemberLayout
+  name: MemberLayout
+  href: api/Docfx.MemberLayout.html
+  commentId: T:Docfx.MemberLayout
+  fullName: Docfx.MemberLayout
+  nameWithType: MemberLayout
+- uid: Docfx.MemberLayout.SamePage
+  name: SamePage
+  href: api/Docfx.MemberLayout.html#Docfx_MemberLayout_SamePage
+  commentId: F:Docfx.MemberLayout.SamePage
+  fullName: Docfx.MemberLayout.SamePage
+  nameWithType: MemberLayout.SamePage
+- uid: Docfx.MemberLayout.SeparatePages
+  name: SeparatePages
+  href: api/Docfx.MemberLayout.html#Docfx_MemberLayout_SeparatePages
+  commentId: F:Docfx.MemberLayout.SeparatePages
+  fullName: Docfx.MemberLayout.SeparatePages
+  nameWithType: MemberLayout.SeparatePages
diff --git a/test/docfx.Tests/SerializationTests/TestData/TocItemViewModel/Yaml/toc_03.yml b/test/docfx.Tests/SerializationTests/TestData/TocItemViewModel/Yaml/toc_03.yml
new file mode 100644
index 00000000000..c5ac199d2e9
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/TestData/TocItemViewModel/Yaml/toc_03.yml
@@ -0,0 +1,125 @@
+### YamlMime:TableOfContent
+items:
+- uid: CSharp10
+  name: CSharp10
+  type: Namespace
+  items:
+  - uid: CSharp10.ConstantInterpolatedStrings
+    name: ConstantInterpolatedStrings
+    type: Class
+  - uid: CSharp10.Issue7737
+    name: Issue7737
+    type: Class
+  - uid: CSharp10.ParameterlessStructConstructors
+    name: ParameterlessStructConstructors
+    type: Struct
+  - uid: CSharp10.ReadOnlyRecordStruct
+    name: ReadOnlyRecordStruct
+    type: Struct
+  - uid: CSharp10.RecordClass
+    name: RecordClass
+    type: Class
+  - uid: CSharp10.RecordStruct
+    name: RecordStruct
+    type: Struct
+- uid: CSharp11
+  name: CSharp11
+  type: Namespace
+  items:
+  - uid: CSharp11.CheckedUserDefinedOperators`1
+    name: CheckedUserDefinedOperators<T>
+    type: Interface
+  - uid: CSharp11.RequiredModifier
+    name: RequiredModifier
+    type: Class
+  - uid: CSharp11.ScopedModifier
+    name: ScopedModifier
+    type: Class
+  - uid: CSharp11.StaticAbstractMembersInInterfaces
+    name: StaticAbstractMembersInInterfaces
+    type: Class
+  - uid: CSharp11.StaticAbstractMembersInInterfaces.IGetNext`1
+    name: StaticAbstractMembersInInterfaces.IGetNext<T>
+    type: Interface
+  - uid: CSharp11.StaticAbstractMembersInInterfaces.RepeatSequence
+    name: StaticAbstractMembersInInterfaces.RepeatSequence
+    type: Struct
+- uid: CSharp12
+  name: CSharp12
+  type: Namespace
+  items:
+  - uid: CSharp12.CollectionExpressions
+    name: CollectionExpressions
+    type: Class
+  - uid: CSharp12.DefaultLambdaParameters
+    name: DefaultLambdaParameters
+    type: Class
+  - uid: CSharp12.InlineArrays
+    name: InlineArrays
+    type: Struct
+  - uid: CSharp12.PrimaryConstructors
+    name: PrimaryConstructors
+    type: Class
+  - uid: CSharp12.PrimaryConstructors.BankAccount
+    name: PrimaryConstructors.BankAccount
+    type: Class
+  - uid: CSharp12.PrimaryConstructors.CheckAccount
+    name: PrimaryConstructors.CheckAccount
+    type: Class
+  - uid: CSharp12.PrimaryConstructors.Distance
+    name: PrimaryConstructors.Distance
+    type: Struct
+  - uid: CSharp12.RefReadOnlyParameters
+    name: RefReadOnlyParameters
+    type: Class
+- uid: CSharp8
+  name: CSharp8
+  type: Namespace
+  items:
+  - uid: CSharp8.DefaultInterfaceMembers
+    name: DefaultInterfaceMembers
+    type: Interface
+  - uid: CSharp8.DefaultInterfaceMembers.IA
+    name: DefaultInterfaceMembers.IA
+    type: Interface
+  - uid: CSharp8.DefaultInterfaceMembers.Nested
+    name: DefaultInterfaceMembers.Nested
+    type: Class
+  - uid: CSharp8.DisposableRefStructs
+    name: DisposableRefStructs
+    type: Struct
+  - uid: CSharp8.Issue4007
+    name: Issue4007
+    type: Class
+  - uid: CSharp8.Misc
+    name: Misc
+    type: Class
+  - uid: CSharp8.NullableReferenceTypes
+    name: NullableReferenceTypes
+    type: Class
+  - uid: CSharp8.ReadOnlyMembers
+    name: ReadOnlyMembers
+    type: Struct
+- uid: CSharp9
+  name: CSharp9
+  type: Namespace
+  items:
+  - uid: CSharp9.FunctionPointers
+    name: FunctionPointers
+    type: Class
+  - uid: CSharp9.InitOnlySetters
+    name: InitOnlySetters
+    type: Class
+  - uid: CSharp9.NativeSizedIntegers
+    name: NativeSizedIntegers
+    type: Class
+  - uid: CSharp9.RecordTypes
+    name: RecordTypes
+    type: Class
+  - uid: CSharp9.RecordTypes.Person
+    name: RecordTypes.Person
+    type: Class
+  - uid: CSharp9.RecordTypes.Teacher
+    name: RecordTypes.Teacher
+    type: Class
+memberLayout: SamePage
diff --git a/test/docfx.Tests/SerializationTests/TestData/TocItemViewModel/Yaml/toc_04.yml b/test/docfx.Tests/SerializationTests/TestData/TocItemViewModel/Yaml/toc_04.yml
new file mode 100644
index 00000000000..d2deaadcfa7
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/TestData/TocItemViewModel/Yaml/toc_04.yml
@@ -0,0 +1,175 @@
+### YamlMime:TableOfContent
+items:
+- uid: BuildFromAssembly
+  name: BuildFromAssembly
+  type: Namespace
+  items:
+  - uid: BuildFromAssembly.Class1
+    name: Class1
+    type: Class
+  - uid: BuildFromAssembly.Issue5432
+    name: Issue5432
+    type: Struct
+- uid: BuildFromCSharpSourceCode
+  name: BuildFromCSharpSourceCode
+  type: Namespace
+  items:
+  - uid: BuildFromCSharpSourceCode.CSharp
+    name: CSharp
+    type: Class
+- uid: BuildFromProject
+  name: BuildFromProject
+  type: Namespace
+  items:
+  - uid: BuildFromProject.Issue8540
+    name: Issue8540
+    type: Namespace
+    items:
+    - uid: BuildFromProject.Issue8540.A
+      name: A
+      type: Namespace
+      items:
+      - uid: BuildFromProject.Issue8540.A.A
+        name: A
+        type: Class
+    - uid: BuildFromProject.Issue8540.B
+      name: B
+      type: Namespace
+      items:
+      - uid: BuildFromProject.Issue8540.B.B
+        name: B
+        type: Class
+  - uid: BuildFromProject.Class1
+    name: Class1
+    type: Class
+  - uid: BuildFromProject.Class1.IIssue8948
+    name: Class1.IIssue8948
+    type: Interface
+  - uid: BuildFromProject.Class1.Issue8665
+    name: Class1.Issue8665
+    type: Class
+  - uid: BuildFromProject.Class1.Issue8696Attribute
+    name: Class1.Issue8696Attribute
+    type: Class
+  - uid: BuildFromProject.Class1.Issue8948
+    name: Class1.Issue8948
+    type: Class
+  - uid: BuildFromProject.Class1.Issue9260
+    name: Class1.Issue9260
+    type: Enum
+  - uid: BuildFromProject.Class1.Test`1
+    name: Class1.Test<T>
+    type: Class
+  - uid: BuildFromProject.Dog
+    name: Dog
+    type: Class
+  - uid: BuildFromProject.IInheritdoc
+    name: IInheritdoc
+    type: Interface
+  - uid: BuildFromProject.Inheritdoc
+    name: Inheritdoc
+    type: Class
+  - uid: BuildFromProject.Inheritdoc.Issue6366
+    name: Inheritdoc.Issue6366
+    type: Class
+  - uid: BuildFromProject.Inheritdoc.Issue6366.Class1`1
+    name: Inheritdoc.Issue6366.Class1<T>
+    type: Class
+  - uid: BuildFromProject.Inheritdoc.Issue6366.Class2
+    name: Inheritdoc.Issue6366.Class2
+    type: Class
+  - uid: BuildFromProject.Inheritdoc.Issue7035
+    name: Inheritdoc.Issue7035
+    type: Class
+  - uid: BuildFromProject.Inheritdoc.Issue7484
+    name: Inheritdoc.Issue7484
+    type: Class
+  - uid: BuildFromProject.Inheritdoc.Issue8101
+    name: Inheritdoc.Issue8101
+    type: Class
+  - uid: BuildFromProject.Inheritdoc.Issue8129
+    name: Inheritdoc.Issue8129
+    type: Struct
+  - uid: BuildFromProject.Issue8725
+    name: Issue8725
+    type: Class
+- uid: BuildFromVBSourceCode
+  name: BuildFromVBSourceCode
+  type: Namespace
+  items:
+  - uid: BuildFromVBSourceCode.BaseClass1
+    name: BaseClass1
+    type: Class
+  - uid: BuildFromVBSourceCode.Class1
+    name: Class1
+    type: Class
+- uid: CatLibrary
+  name: CatLibrary
+  type: Namespace
+  items:
+  - uid: CatLibrary.Core
+    name: Core
+    type: Namespace
+    items:
+    - uid: CatLibrary.Core.ContainersRefType
+      name: ContainersRefType
+      type: Struct
+    - uid: CatLibrary.Core.ContainersRefType.ColorType
+      name: ContainersRefType.ColorType
+      type: Enum
+    - uid: CatLibrary.Core.ContainersRefType.ContainersRefTypeChild
+      name: ContainersRefType.ContainersRefTypeChild
+      type: Class
+    - uid: CatLibrary.Core.ContainersRefType.ContainersRefTypeChildInterface
+      name: ContainersRefType.ContainersRefTypeChildInterface
+      type: Interface
+    - uid: CatLibrary.Core.ContainersRefType.ContainersRefTypeDelegate
+      name: ContainersRefType.ContainersRefTypeDelegate
+      type: Delegate
+    - uid: CatLibrary.Core.ExplicitLayoutClass
+      name: ExplicitLayoutClass
+      type: Class
+    - uid: CatLibrary.Core.Issue231
+      name: Issue231
+      type: Class
+  - uid: CatLibrary.CatException`1
+    name: CatException<T>
+    type: Class
+  - uid: CatLibrary.Cat`2
+    name: Cat<T, K>
+    type: Class
+  - uid: CatLibrary.Complex`2
+    name: Complex<T, J>
+    type: Class
+  - uid: CatLibrary.FakeDelegate`1
+    name: FakeDelegate<T>
+    type: Delegate
+  - uid: CatLibrary.IAnimal
+    name: IAnimal
+    type: Interface
+  - uid: CatLibrary.ICat
+    name: ICat
+    type: Interface
+  - uid: CatLibrary.ICatExtension
+    name: ICatExtension
+    type: Class
+  - uid: CatLibrary.MRefDelegate`3
+    name: MRefDelegate<K, T, L>
+    type: Delegate
+  - uid: CatLibrary.MRefNormalDelegate
+    name: MRefNormalDelegate
+    type: Delegate
+  - uid: CatLibrary.Tom
+    name: Tom
+    type: Class
+  - uid: CatLibrary.TomFromBaseClass
+    name: TomFromBaseClass
+    type: Class
+- uid: MRef.Demo.Enumeration
+  name: MRef.Demo.Enumeration
+  type: Namespace
+  items:
+  - uid: MRef.Demo.Enumeration.ColorType
+    name: ColorType
+    type: Enum
+memberLayout: SamePage
diff --git a/test/docfx.Tests/SerializationTests/TestData/UniversalReference/azure.ApplicationTokenCredentials.yml b/test/docfx.Tests/SerializationTests/TestData/UniversalReference/azure.ApplicationTokenCredentials.yml
new file mode 100644
index 00000000000..7fd036df470
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/TestData/UniversalReference/azure.ApplicationTokenCredentials.yml
@@ -0,0 +1,87 @@
+### YamlMime:UniversalReference
+items:
+  - uid: azure.ApplicationTokenCredentials
+    langs:
+    - js
+    id: azure.ApplicationTokenCredentials
+    name: ApplicationTokenCredentials
+    summary: ''
+    fullName: azure.ApplicationTokenCredentials
+    type: Class
+    children:
+      - 'azure.ApplicationTokenCredentials.#ctor'
+  - id: 'azure.ApplicationTokenCredentials.#ctor'
+    uid: 'azure.ApplicationTokenCredentials.#ctor'
+    parent: azure.ApplicationTokenCredentials
+    name: 'ApplicationTokenCredentials(clientId, domain, secret, options)'
+    fullName: >-
+      azure.ApplicationTokenCredentials.ApplicationTokenCredentials(clientId,
+      domain, secret, options)
+    summary: >-
+      Creates a new ApplicationTokenCredentials object.
+
+      See [Active Directory Quickstart for
+      .Net](https://azure.microsoft.com/en-us/documentation/articles/active-directory-devquickstarts-dotnet/) 
+
+      for detailed instructions on creating an Azure Active Directory
+      application.
+    type: Constructor
+    syntax:
+      parameters:
+        - id: clientId
+          type:
+            - string
+          description: The active directory application client id.
+        - id: domain
+          type:
+            - string
+          description: The domain or tenant id containing this application.
+        - id: secret
+          type:
+            - string
+          description: The authentication secret for the application.
+        - id: options
+          type:
+            - object
+          description: Object representing optional parameters.
+          optional: true
+        - id: options.tokenAudience
+          type:
+            - string
+          description: >-
+            The audience for which the token is requested. Valid value is
+            'graph'. If tokenAudience is provided 
+
+            then domain should also be provided its value should not be the
+            default 'common' tenant. It must be a string (preferrably in a guid
+            format).
+          optional: true
+        - id: options.environment
+          type:
+            - azure.AzureEnvironment
+          description: The azure environment to authenticate with.
+          optional: true
+        - id: options.authorizationScheme
+          type:
+            - string
+          description: The authorization scheme. Default value is 'bearer'.
+          optional: true
+        - id: options.tokenCache
+          type:
+            - object
+          description: The token cache. Default value is the MemoryCache object from adal.
+          optional: true
+      content: 'new ApplicationTokenCredentials(clientId, domain, secret, options)'
+references:
+  - uid: string
+    name: string
+    fullName: string
+    isExternal: true
+  - uid: object
+    name: object
+    fullName: object
+    isExternal: true
+  - uid: azure.AzureEnvironment
+    name: AzureEnvironment
+    fullName: azure.AzureEnvironment
+    isExternal: true
diff --git a/test/docfx.Tests/SerializationTests/TestData/UniversalReference/cntk.core.Value.yml b/test/docfx.Tests/SerializationTests/TestData/UniversalReference/cntk.core.Value.yml
new file mode 100644
index 00000000000..10b1d48aaf1
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/TestData/UniversalReference/cntk.core.Value.yml
@@ -0,0 +1,260 @@
+#YamlMime:UniversalReference
+api_name: []
+items:
+- _type: class
+  children:
+  - cntk.core.Value.create
+  - cntk.core.Value.data
+  - cntk.core.Value.mask
+  - cntk.core.Value.one_hot
+  - cntk.core.Value.shape
+  class: cntk.core.Value
+  fullName: cntk.core.Value
+  inheritance:
+  - inheritance:
+    - type: builtins.object
+    type: cntk.cntk_py.Value
+  langs:
+  - python
+  module: cntk.core
+  name: Value
+  source:
+    id: Value
+    path: cntk/core.py
+    remote:
+      branch: master
+      path: cntk/core.py
+      repo: https://github.com/Microsoft/CNTK
+    startLine: 182
+  summary: 'Bases: @cntk.cntk_py.Value
+
+    Internal representation of minibatch data.
+
+
+
+
+
+    '
+  syntax:
+    parameters:
+    - description: shape of the value
+      id: shape
+      type:
+      - tuple
+    - description: the value to be converted
+      id: value
+      type:
+      - None or value that can be cast to NumPy array
+    - description: data type (np.float32 or np.float64)
+      id: dtype
+    - description: "batch input for *var*. It can be:\n\n   * a pure Python structure\
+        \ (list of lists, ...),\n\n   * a list of NumPy arrays or SciPy sparse CSR\
+        \ matrices\n\n   * a @cntk.core.Value object (e.g. returned by `one_hot()`)"
+      id: batch
+    - description: if None, every sequence is treated as a new sequence. Otherwise,
+        it is interpreted as a list of Booleans that tell whether a sequence is a
+        new sequence (*True*) or a continuation of the sequence in the same slot of
+        the previous minibatch (*False*)
+      id: seq_starts
+      type:
+      - list of bools or None
+    - description: device this value should be put on
+      id: device
+      type:
+      - DeviceDescriptor
+  type: Class
+  uid: cntk.core.Value
+- _type: method
+  class: cntk.core.Value
+  fullName: cntk.core.Value.create
+  langs:
+  - python
+  module: cntk.core
+  name: create
+  source:
+    id: create
+    path: cntk/internal/swig_helper.py
+    remote:
+      branch: master
+      path: cntk/internal/swig_helper.py
+      repo: https://github.com/Microsoft/CNTK
+    startLine: 272
+  summary: Creates a @cntk.core.Value object.
+  syntax:
+    parameters:
+    - description: variable into which `data` is passed
+      id: var
+      type:
+      - Variable
+    - description: "data for *var*. It can be:\n\n   * a single NumPy array denoting\
+        \ the full minibatch\n\n   * a list of NumPy arrays or SciPy sparse CSR matrices\n\
+        \n   * a single NumPy array denoting one parameter or constant"
+      id: data
+    - description: if None, every sequence is treated as a new sequence. Otherwise,
+        it is interpreted as a list of Booleans that tell whether a sequence is a
+        new sequence (*True*) or a continuation of the sequence in the same slot of
+        the previous minibatch (*False*)
+      id: seq_starts
+      type:
+      - list of bools or None
+    - description: device this value should be put on
+      id: device
+      type:
+      - DeviceDescriptor, default None
+    - description: whether the data is read only
+      id: read_only
+      type:
+      - bool, default False
+    return:
+      type:
+      - type1
+      - type2
+      - type3
+      description: '@cntk.core.Value object.'
+  type: Method
+  uid: cntk.core.Value.create
+- _type: attribute
+  class: cntk.core.Value
+  fullName: cntk.core.Value.data
+  langs:
+  - python
+  module: cntk.core
+  name: data
+  source:
+    id: data
+    path: null
+    remote:
+      branch: master
+      path: null
+      repo: https://github.com/Microsoft/CNTK
+    startLine: null
+  summary: Retrieves the underlying `NDArrayView` instance.
+  syntax: {}
+  type: Property
+  uid: cntk.core.Value.data
+- _type: attribute
+  class: cntk.core.Value
+  fullName: cntk.core.Value.mask
+  langs:
+  - python
+  module: cntk.core
+  name: mask
+  source:
+    id: mask
+    path: null
+    remote:
+      branch: master
+      path: null
+      repo: https://github.com/Microsoft/CNTK
+    startLine: null
+  summary: "The mask matrix of this value. Each row denotes a sequence with its elements\
+    \ describing the mask of the element:\n* 2: beginning of sequence (e.g. an LSTM\
+    \ would be reset)\n\n   * 1: valid element\n\n   * 0: invalid element\n-[ Example\
+    \ ]-\nA mask of `[[2, 1, 1], [1, 1, 0]]` describes a batch of two sequences. The\
+    \ first has three elements, of which the first element (2) signals the beginning\
+    \ of a sequence. The second sequence has two elements (last element marked 'invalid'\
+    \ by '0'). As it starts with (1), it is a continuation of the 2nd sequence in\
+    \ the previous minibatch."
+  syntax: {}
+  type: Property
+  uid: cntk.core.Value.mask
+- _type: method
+  class: cntk.core.Value
+  fullName: cntk.core.Value.one_hot
+  langs:
+  - python
+  module: cntk.core
+  name: one_hot
+  source:
+    id: one_hot
+    path: cntk/internal/swig_helper.py
+    remote:
+      branch: master
+      path: cntk/internal/swig_helper.py
+      repo: https://github.com/Microsoft/CNTK
+    startLine: 365
+  summary: "Converts `batch` into a `Value` object of `dtype` such that the integer\
+    \ data in `batch` is interpreted as the indices representing one-hot vectors.\n\
+    -[ Example ]-\n>>> num_classes = 6\n>>> sparse_indices = [[1,5],[4]]\n>>> i0 =\
+    \ C.input_variable(shape=num_classes, is_sparse=True)\n>>> z = C.times(i0, np.eye(num_classes))\n\
+    >>> value = C.one_hot(sparse_indices, num_classes)\n>>> z.eval({i0: value})\n\
+    [array([[ 0.,  1.,  0.,  0.,  0.,  0.],\n        [ 0.,  0.,  0.,  0.,  0.,  1.]],\
+    \ dtype=float32),\n array([[ 0.,  0.,  0.,  0.,  1.,  0.]], dtype=float32)]\n\
+    <BLANKLINE>\n>>> num_classes = 6\n>>> sample_shape = (2, num_classes)\n>>> sparse_indices\
+    \ = [[1,5,3,2],[4,1]]\n>>> i0 = C.input_variable(shape=sample_shape, is_sparse=True)\n\
+    >>> z = C.times(i0, np.eye(num_classes))\n>>> value = C.one_hot(sparse_indices,\
+    \ sample_shape)\n>>> z.eval({i0: value})\n[array([[[ 0.,  1.,  0.,  0.,  0., \
+    \ 0.],\n         [ 0.,  0.,  0.,  0.,  0.,  1.]],\n        [[ 0.,  0.,  0.,  1.,\
+    \  0.,  0.],\n         [ 0.,  0.,  1.,  0.,  0.,  0.]]], dtype=float32),\n array([[[\
+    \ 0.,  0.,  0.,  0.,  1.,  0.],\n         [ 0.,  1.,  0.,  0.,  0.,  0.]]], dtype=float32)]"
+  syntax:
+    parameters:
+    - description: batch input data of indices
+      id: batch
+      type:
+      - list of lists of integers
+    - description: number of classes or shape of each sample whose trailing axis is
+        one_hot
+      id: sample_shape
+      type:
+      - integer or tuple
+    - description: data type
+      id: dtype
+      type:
+      - np.float32, np.float64, default None
+    - description: device this value should be put on
+      id: device
+      type:
+      - DeviceDescriptor, default None
+    return:
+      description: '`batch` converted into a `Value` object that can be passed to
+        the forward or eval function.'
+  type: Method
+  uid: cntk.core.Value.one_hot
+- _type: attribute
+  class: cntk.core.Value
+  fullName: cntk.core.Value.shape
+  langs:
+  - python
+  module: cntk.core
+  name: shape
+  source:
+    id: shape
+    path: null
+    remote:
+      branch: master
+      path: null
+      repo: https://github.com/Microsoft/CNTK
+    startLine: null
+  summary: The rectangular shape of this value. I.e., if this value has sequences
+    of varying lengths, the shape will have the max sequence length in the sequence
+    dimension.
+  syntax: {}
+  type: Property
+  uid: cntk.core.Value.shape
+references:
+- fullName: cntk.core.Value.create
+  isExternal: false
+  name: create
+  parent: cntk.core.Value
+  uid: cntk.core.Value.create
+- fullName: cntk.core.Value.data
+  isExternal: false
+  name: data
+  parent: cntk.core.Value
+  uid: cntk.core.Value.data
+- fullName: cntk.core.Value.mask
+  isExternal: false
+  name: mask
+  parent: cntk.core.Value
+  uid: cntk.core.Value.mask
+- fullName: cntk.core.Value.one_hot
+  isExternal: false
+  name: one_hot
+  parent: cntk.core.Value
+  uid: cntk.core.Value.one_hot
+- fullName: cntk.core.Value.shape
+  isExternal: false
+  name: shape
+  parent: cntk.core.Value
+  uid: cntk.core.Value.shape
diff --git a/test/docfx.Tests/SerializationTests/TestData/UniversalReference/cntk.core.yml b/test/docfx.Tests/SerializationTests/TestData/UniversalReference/cntk.core.yml
new file mode 100644
index 00000000000..ac5dfe9102b
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/TestData/UniversalReference/cntk.core.yml
@@ -0,0 +1,51 @@
+#YamlMime:UniversalReference
+api_name: []
+items:
+- _type: module
+  children:
+  - cntk.core.NDArrayView
+  - cntk.core.Value
+  - cntk.core.asarray
+  - cntk.core.asvalue
+  - cntk.core.user_function
+  fullName: cntk.core
+  langs:
+  - python
+  module: cntk.core
+  name: core
+  source:
+    id: core
+    path: \cntk\core.py
+    remote:
+      branch: master
+      path: \cntk\core.py
+      repo: https://github.com/Microsoft/CNTK.git
+    startLine: 0
+  type: Namespace
+  uid: cntk.core
+references:
+- fullName: cntk.core.NDArrayView
+  isExternal: false
+  name: NDArrayView
+  parent: cntk.core
+  uid: cntk.core.NDArrayView
+- fullName: cntk.core.Value
+  isExternal: false
+  name: Value
+  parent: cntk.core
+  uid: cntk.core.Value
+- fullName: cntk.core.asarray
+  isExternal: false
+  name: asarray
+  parent: cntk.core
+  uid: cntk.core.asarray
+- fullName: cntk.core.asvalue
+  isExternal: false
+  name: asvalue
+  parent: cntk.core
+  uid: cntk.core.asvalue
+- fullName: cntk.core.user_function
+  isExternal: false
+  name: user_function
+  parent: cntk.core
+  uid: cntk.core.user_function
\ No newline at end of file
diff --git a/test/docfx.Tests/SerializationTests/TestData/UniversalReference/cntk.debugging.yml b/test/docfx.Tests/SerializationTests/TestData/UniversalReference/cntk.debugging.yml
new file mode 100644
index 00000000000..4c67c40aae1
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/TestData/UniversalReference/cntk.debugging.yml
@@ -0,0 +1,76 @@
+#YamlMime:UniversalReference
+api_name: []
+items:
+- _type: module
+  children:
+  - cntk.debugging.dump_function
+  - cntk.debugging.dump_signature
+  fullName: cntk.debugging
+  langs:
+  - python
+  module: cntk.debugging
+  name: debugging
+  source:
+    id: debugging
+    path: cntk/debugging/__init__.py
+    remote:
+      branch: master
+      path: cntk/debugging/__init__.py
+      repo: https://github.com/Microsoft/CNTK
+    startLine: 0
+  type: Namespace
+  uid: cntk.debugging
+- _type: function
+  fullName: cntk.debugging.dump_function
+  langs:
+  - python
+  module: cntk.debugging
+  name: dump_function
+  source:
+    id: dump_function
+    path: cntk/debugging/__init__.py
+    remote:
+      branch: master
+      path: cntk/debugging/__init__.py
+      repo: https://github.com/Microsoft/CNTK
+    startLine: 33
+  syntax:
+    parameters:
+    - id: root
+    - defaultValue: None
+      id: tag
+  type: Method
+  uid: cntk.debugging.dump_function
+- _type: function
+  fullName: cntk.debugging.dump_signature
+  langs:
+  - python
+  module: cntk.debugging
+  name: dump_signature
+  source:
+    id: dump_signature
+    path: cntk/debugging/__init__.py
+    remote:
+      branch: master
+      path: cntk/debugging/__init__.py
+      repo: https://github.com/Microsoft/CNTK
+    startLine: 17
+  summary: Debug helper that prints the signature of a Function.
+  syntax:
+    parameters:
+    - id: root
+    - defaultValue: None
+      id: tag
+  type: Method
+  uid: cntk.debugging.dump_signature
+references:
+- fullName: cntk.debugging.dump_function
+  isExternal: false
+  name: dump_function
+  parent: cntk.debugging
+  uid: cntk.debugging.dump_function
+- fullName: cntk.debugging.dump_signature
+  isExternal: false
+  name: dump_signature
+  parent: cntk.debugging
+  uid: cntk.debugging.dump_signature
diff --git a/test/docfx.Tests/SerializationTests/TestData/XRefMap/xrefmap_01.json b/test/docfx.Tests/SerializationTests/TestData/XRefMap/xrefmap_01.json
new file mode 100644
index 00000000000..7c37af9c875
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/TestData/XRefMap/xrefmap_01.json
@@ -0,0 +1,1926 @@
+{
+  "sorted": true,
+  "references": [
+    {
+      "uid": "Docfx",
+      "name": "Docfx",
+      "href": "api/Docfx.html",
+      "commentId": "N:Docfx",
+      "fullName": "Docfx",
+      "nameWithType": "Docfx"
+    },
+    {
+      "uid": "Docfx.BuildOptions",
+      "name": "BuildOptions",
+      "href": "api/Docfx.BuildOptions.html",
+      "commentId": "T:Docfx.BuildOptions",
+      "fullName": "Docfx.BuildOptions",
+      "nameWithType": "BuildOptions"
+    },
+    {
+      "uid": "Docfx.BuildOptions.ConfigureMarkdig",
+      "name": "ConfigureMarkdig",
+      "href": "api/Docfx.BuildOptions.html#Docfx_BuildOptions_ConfigureMarkdig",
+      "commentId": "P:Docfx.BuildOptions.ConfigureMarkdig",
+      "fullName": "Docfx.BuildOptions.ConfigureMarkdig",
+      "nameWithType": "BuildOptions.ConfigureMarkdig"
+    },
+    {
+      "uid": "Docfx.BuildOptions.ConfigureMarkdig*",
+      "name": "ConfigureMarkdig",
+      "href": "api/Docfx.BuildOptions.html#Docfx_BuildOptions_ConfigureMarkdig_",
+      "commentId": "Overload:Docfx.BuildOptions.ConfigureMarkdig",
+      "isSpec": "True",
+      "fullName": "Docfx.BuildOptions.ConfigureMarkdig",
+      "nameWithType": "BuildOptions.ConfigureMarkdig"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference",
+      "name": "Docfx.DataContracts.ManagedReference",
+      "href": "api/Docfx.DataContracts.ManagedReference.html",
+      "commentId": "N:Docfx.DataContracts.ManagedReference",
+      "fullName": "Docfx.DataContracts.ManagedReference",
+      "nameWithType": "Docfx.DataContracts.ManagedReference"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.AdditionalNotes",
+      "name": "AdditionalNotes",
+      "href": "api/Docfx.DataContracts.ManagedReference.AdditionalNotes.html",
+      "commentId": "T:Docfx.DataContracts.ManagedReference.AdditionalNotes",
+      "fullName": "Docfx.DataContracts.ManagedReference.AdditionalNotes",
+      "nameWithType": "AdditionalNotes"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.AdditionalNotes.Caller",
+      "name": "Caller",
+      "href": "api/Docfx.DataContracts.ManagedReference.AdditionalNotes.html#Docfx_DataContracts_ManagedReference_AdditionalNotes_Caller",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.AdditionalNotes.Caller",
+      "fullName": "Docfx.DataContracts.ManagedReference.AdditionalNotes.Caller",
+      "nameWithType": "AdditionalNotes.Caller"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.AdditionalNotes.Caller*",
+      "name": "Caller",
+      "href": "api/Docfx.DataContracts.ManagedReference.AdditionalNotes.html#Docfx_DataContracts_ManagedReference_AdditionalNotes_Caller_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.AdditionalNotes.Caller",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.AdditionalNotes.Caller",
+      "nameWithType": "AdditionalNotes.Caller"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.AdditionalNotes.Implementer",
+      "name": "Implementer",
+      "href": "api/Docfx.DataContracts.ManagedReference.AdditionalNotes.html#Docfx_DataContracts_ManagedReference_AdditionalNotes_Implementer",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.AdditionalNotes.Implementer",
+      "fullName": "Docfx.DataContracts.ManagedReference.AdditionalNotes.Implementer",
+      "nameWithType": "AdditionalNotes.Implementer"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.AdditionalNotes.Implementer*",
+      "name": "Implementer",
+      "href": "api/Docfx.DataContracts.ManagedReference.AdditionalNotes.html#Docfx_DataContracts_ManagedReference_AdditionalNotes_Implementer_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.AdditionalNotes.Implementer",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.AdditionalNotes.Implementer",
+      "nameWithType": "AdditionalNotes.Implementer"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.AdditionalNotes.Inheritor",
+      "name": "Inheritor",
+      "href": "api/Docfx.DataContracts.ManagedReference.AdditionalNotes.html#Docfx_DataContracts_ManagedReference_AdditionalNotes_Inheritor",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.AdditionalNotes.Inheritor",
+      "fullName": "Docfx.DataContracts.ManagedReference.AdditionalNotes.Inheritor",
+      "nameWithType": "AdditionalNotes.Inheritor"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.AdditionalNotes.Inheritor*",
+      "name": "Inheritor",
+      "href": "api/Docfx.DataContracts.ManagedReference.AdditionalNotes.html#Docfx_DataContracts_ManagedReference_AdditionalNotes_Inheritor_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.AdditionalNotes.Inheritor",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.AdditionalNotes.Inheritor",
+      "nameWithType": "AdditionalNotes.Inheritor"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ApiParameter",
+      "name": "ApiParameter",
+      "href": "api/Docfx.DataContracts.ManagedReference.ApiParameter.html",
+      "commentId": "T:Docfx.DataContracts.ManagedReference.ApiParameter",
+      "fullName": "Docfx.DataContracts.ManagedReference.ApiParameter",
+      "nameWithType": "ApiParameter"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ApiParameter.Attributes",
+      "name": "Attributes",
+      "href": "api/Docfx.DataContracts.ManagedReference.ApiParameter.html#Docfx_DataContracts_ManagedReference_ApiParameter_Attributes",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ApiParameter.Attributes",
+      "fullName": "Docfx.DataContracts.ManagedReference.ApiParameter.Attributes",
+      "nameWithType": "ApiParameter.Attributes"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ApiParameter.Attributes*",
+      "name": "Attributes",
+      "href": "api/Docfx.DataContracts.ManagedReference.ApiParameter.html#Docfx_DataContracts_ManagedReference_ApiParameter_Attributes_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ApiParameter.Attributes",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ApiParameter.Attributes",
+      "nameWithType": "ApiParameter.Attributes"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ApiParameter.Description",
+      "name": "Description",
+      "href": "api/Docfx.DataContracts.ManagedReference.ApiParameter.html#Docfx_DataContracts_ManagedReference_ApiParameter_Description",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ApiParameter.Description",
+      "fullName": "Docfx.DataContracts.ManagedReference.ApiParameter.Description",
+      "nameWithType": "ApiParameter.Description"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ApiParameter.Description*",
+      "name": "Description",
+      "href": "api/Docfx.DataContracts.ManagedReference.ApiParameter.html#Docfx_DataContracts_ManagedReference_ApiParameter_Description_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ApiParameter.Description",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ApiParameter.Description",
+      "nameWithType": "ApiParameter.Description"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ApiParameter.Name",
+      "name": "Name",
+      "href": "api/Docfx.DataContracts.ManagedReference.ApiParameter.html#Docfx_DataContracts_ManagedReference_ApiParameter_Name",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ApiParameter.Name",
+      "fullName": "Docfx.DataContracts.ManagedReference.ApiParameter.Name",
+      "nameWithType": "ApiParameter.Name"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ApiParameter.Name*",
+      "name": "Name",
+      "href": "api/Docfx.DataContracts.ManagedReference.ApiParameter.html#Docfx_DataContracts_ManagedReference_ApiParameter_Name_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ApiParameter.Name",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ApiParameter.Name",
+      "nameWithType": "ApiParameter.Name"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ApiParameter.Type",
+      "name": "Type",
+      "href": "api/Docfx.DataContracts.ManagedReference.ApiParameter.html#Docfx_DataContracts_ManagedReference_ApiParameter_Type",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ApiParameter.Type",
+      "fullName": "Docfx.DataContracts.ManagedReference.ApiParameter.Type",
+      "nameWithType": "ApiParameter.Type"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ApiParameter.Type*",
+      "name": "Type",
+      "href": "api/Docfx.DataContracts.ManagedReference.ApiParameter.html#Docfx_DataContracts_ManagedReference_ApiParameter_Type_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ApiParameter.Type",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ApiParameter.Type",
+      "nameWithType": "ApiParameter.Type"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ArgumentInfo",
+      "name": "ArgumentInfo",
+      "href": "api/Docfx.DataContracts.ManagedReference.ArgumentInfo.html",
+      "commentId": "T:Docfx.DataContracts.ManagedReference.ArgumentInfo",
+      "fullName": "Docfx.DataContracts.ManagedReference.ArgumentInfo",
+      "nameWithType": "ArgumentInfo"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ArgumentInfo.Type",
+      "name": "Type",
+      "href": "api/Docfx.DataContracts.ManagedReference.ArgumentInfo.html#Docfx_DataContracts_ManagedReference_ArgumentInfo_Type",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ArgumentInfo.Type",
+      "fullName": "Docfx.DataContracts.ManagedReference.ArgumentInfo.Type",
+      "nameWithType": "ArgumentInfo.Type"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ArgumentInfo.Type*",
+      "name": "Type",
+      "href": "api/Docfx.DataContracts.ManagedReference.ArgumentInfo.html#Docfx_DataContracts_ManagedReference_ArgumentInfo_Type_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ArgumentInfo.Type",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ArgumentInfo.Type",
+      "nameWithType": "ArgumentInfo.Type"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ArgumentInfo.Value",
+      "name": "Value",
+      "href": "api/Docfx.DataContracts.ManagedReference.ArgumentInfo.html#Docfx_DataContracts_ManagedReference_ArgumentInfo_Value",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ArgumentInfo.Value",
+      "fullName": "Docfx.DataContracts.ManagedReference.ArgumentInfo.Value",
+      "nameWithType": "ArgumentInfo.Value"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ArgumentInfo.Value*",
+      "name": "Value",
+      "href": "api/Docfx.DataContracts.ManagedReference.ArgumentInfo.html#Docfx_DataContracts_ManagedReference_ArgumentInfo_Value_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ArgumentInfo.Value",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ArgumentInfo.Value",
+      "nameWithType": "ArgumentInfo.Value"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.AttributeInfo",
+      "name": "AttributeInfo",
+      "href": "api/Docfx.DataContracts.ManagedReference.AttributeInfo.html",
+      "commentId": "T:Docfx.DataContracts.ManagedReference.AttributeInfo",
+      "fullName": "Docfx.DataContracts.ManagedReference.AttributeInfo",
+      "nameWithType": "AttributeInfo"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.AttributeInfo.Arguments",
+      "name": "Arguments",
+      "href": "api/Docfx.DataContracts.ManagedReference.AttributeInfo.html#Docfx_DataContracts_ManagedReference_AttributeInfo_Arguments",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.AttributeInfo.Arguments",
+      "fullName": "Docfx.DataContracts.ManagedReference.AttributeInfo.Arguments",
+      "nameWithType": "AttributeInfo.Arguments"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.AttributeInfo.Arguments*",
+      "name": "Arguments",
+      "href": "api/Docfx.DataContracts.ManagedReference.AttributeInfo.html#Docfx_DataContracts_ManagedReference_AttributeInfo_Arguments_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.AttributeInfo.Arguments",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.AttributeInfo.Arguments",
+      "nameWithType": "AttributeInfo.Arguments"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.AttributeInfo.Constructor",
+      "name": "Constructor",
+      "href": "api/Docfx.DataContracts.ManagedReference.AttributeInfo.html#Docfx_DataContracts_ManagedReference_AttributeInfo_Constructor",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.AttributeInfo.Constructor",
+      "fullName": "Docfx.DataContracts.ManagedReference.AttributeInfo.Constructor",
+      "nameWithType": "AttributeInfo.Constructor"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.AttributeInfo.Constructor*",
+      "name": "Constructor",
+      "href": "api/Docfx.DataContracts.ManagedReference.AttributeInfo.html#Docfx_DataContracts_ManagedReference_AttributeInfo_Constructor_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.AttributeInfo.Constructor",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.AttributeInfo.Constructor",
+      "nameWithType": "AttributeInfo.Constructor"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.AttributeInfo.NamedArguments",
+      "name": "NamedArguments",
+      "href": "api/Docfx.DataContracts.ManagedReference.AttributeInfo.html#Docfx_DataContracts_ManagedReference_AttributeInfo_NamedArguments",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.AttributeInfo.NamedArguments",
+      "fullName": "Docfx.DataContracts.ManagedReference.AttributeInfo.NamedArguments",
+      "nameWithType": "AttributeInfo.NamedArguments"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.AttributeInfo.NamedArguments*",
+      "name": "NamedArguments",
+      "href": "api/Docfx.DataContracts.ManagedReference.AttributeInfo.html#Docfx_DataContracts_ManagedReference_AttributeInfo_NamedArguments_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.AttributeInfo.NamedArguments",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.AttributeInfo.NamedArguments",
+      "nameWithType": "AttributeInfo.NamedArguments"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.AttributeInfo.Type",
+      "name": "Type",
+      "href": "api/Docfx.DataContracts.ManagedReference.AttributeInfo.html#Docfx_DataContracts_ManagedReference_AttributeInfo_Type",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.AttributeInfo.Type",
+      "fullName": "Docfx.DataContracts.ManagedReference.AttributeInfo.Type",
+      "nameWithType": "AttributeInfo.Type"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.AttributeInfo.Type*",
+      "name": "Type",
+      "href": "api/Docfx.DataContracts.ManagedReference.AttributeInfo.html#Docfx_DataContracts_ManagedReference_AttributeInfo_Type_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.AttributeInfo.Type",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.AttributeInfo.Type",
+      "nameWithType": "AttributeInfo.Type"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ExceptionInfo",
+      "name": "ExceptionInfo",
+      "href": "api/Docfx.DataContracts.ManagedReference.ExceptionInfo.html",
+      "commentId": "T:Docfx.DataContracts.ManagedReference.ExceptionInfo",
+      "fullName": "Docfx.DataContracts.ManagedReference.ExceptionInfo",
+      "nameWithType": "ExceptionInfo"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ExceptionInfo.CommentId",
+      "name": "CommentId",
+      "href": "api/Docfx.DataContracts.ManagedReference.ExceptionInfo.html#Docfx_DataContracts_ManagedReference_ExceptionInfo_CommentId",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ExceptionInfo.CommentId",
+      "fullName": "Docfx.DataContracts.ManagedReference.ExceptionInfo.CommentId",
+      "nameWithType": "ExceptionInfo.CommentId"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ExceptionInfo.CommentId*",
+      "name": "CommentId",
+      "href": "api/Docfx.DataContracts.ManagedReference.ExceptionInfo.html#Docfx_DataContracts_ManagedReference_ExceptionInfo_CommentId_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ExceptionInfo.CommentId",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ExceptionInfo.CommentId",
+      "nameWithType": "ExceptionInfo.CommentId"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ExceptionInfo.Description",
+      "name": "Description",
+      "href": "api/Docfx.DataContracts.ManagedReference.ExceptionInfo.html#Docfx_DataContracts_ManagedReference_ExceptionInfo_Description",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ExceptionInfo.Description",
+      "fullName": "Docfx.DataContracts.ManagedReference.ExceptionInfo.Description",
+      "nameWithType": "ExceptionInfo.Description"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ExceptionInfo.Description*",
+      "name": "Description",
+      "href": "api/Docfx.DataContracts.ManagedReference.ExceptionInfo.html#Docfx_DataContracts_ManagedReference_ExceptionInfo_Description_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ExceptionInfo.Description",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ExceptionInfo.Description",
+      "nameWithType": "ExceptionInfo.Description"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ExceptionInfo.Type",
+      "name": "Type",
+      "href": "api/Docfx.DataContracts.ManagedReference.ExceptionInfo.html#Docfx_DataContracts_ManagedReference_ExceptionInfo_Type",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ExceptionInfo.Type",
+      "fullName": "Docfx.DataContracts.ManagedReference.ExceptionInfo.Type",
+      "nameWithType": "ExceptionInfo.Type"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ExceptionInfo.Type*",
+      "name": "Type",
+      "href": "api/Docfx.DataContracts.ManagedReference.ExceptionInfo.html#Docfx_DataContracts_ManagedReference_ExceptionInfo_Type_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ExceptionInfo.Type",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ExceptionInfo.Type",
+      "nameWithType": "ExceptionInfo.Type"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel",
+      "name": "ItemViewModel",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html",
+      "commentId": "T:Docfx.DataContracts.ManagedReference.ItemViewModel",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel",
+      "nameWithType": "ItemViewModel"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.AdditionalNotes",
+      "name": "AdditionalNotes",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_AdditionalNotes",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.AdditionalNotes",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.AdditionalNotes",
+      "nameWithType": "ItemViewModel.AdditionalNotes"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.AdditionalNotes*",
+      "name": "AdditionalNotes",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_AdditionalNotes_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.AdditionalNotes",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.AdditionalNotes",
+      "nameWithType": "ItemViewModel.AdditionalNotes"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.AssemblyNameList",
+      "name": "AssemblyNameList",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_AssemblyNameList",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.AssemblyNameList",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.AssemblyNameList",
+      "nameWithType": "ItemViewModel.AssemblyNameList"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.AssemblyNameList*",
+      "name": "AssemblyNameList",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_AssemblyNameList_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.AssemblyNameList",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.AssemblyNameList",
+      "nameWithType": "ItemViewModel.AssemblyNameList"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Attributes",
+      "name": "Attributes",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Attributes",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.Attributes",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Attributes",
+      "nameWithType": "ItemViewModel.Attributes"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Attributes*",
+      "name": "Attributes",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Attributes_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Attributes",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Attributes",
+      "nameWithType": "ItemViewModel.Attributes"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Children",
+      "name": "Children",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Children",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.Children",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Children",
+      "nameWithType": "ItemViewModel.Children"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Children*",
+      "name": "Children",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Children_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Children",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Children",
+      "nameWithType": "ItemViewModel.Children"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.CommentId",
+      "name": "CommentId",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_CommentId",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.CommentId",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.CommentId",
+      "nameWithType": "ItemViewModel.CommentId"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.CommentId*",
+      "name": "CommentId",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_CommentId_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.CommentId",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.CommentId",
+      "nameWithType": "ItemViewModel.CommentId"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Conceptual",
+      "name": "Conceptual",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Conceptual",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.Conceptual",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Conceptual",
+      "nameWithType": "ItemViewModel.Conceptual"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Conceptual*",
+      "name": "Conceptual",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Conceptual_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Conceptual",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Conceptual",
+      "nameWithType": "ItemViewModel.Conceptual"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.DerivedClasses",
+      "name": "DerivedClasses",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_DerivedClasses",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.DerivedClasses",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.DerivedClasses",
+      "nameWithType": "ItemViewModel.DerivedClasses"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.DerivedClasses*",
+      "name": "DerivedClasses",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_DerivedClasses_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.DerivedClasses",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.DerivedClasses",
+      "nameWithType": "ItemViewModel.DerivedClasses"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Documentation",
+      "name": "Documentation",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Documentation",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.Documentation",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Documentation",
+      "nameWithType": "ItemViewModel.Documentation"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Documentation*",
+      "name": "Documentation",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Documentation_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Documentation",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Documentation",
+      "nameWithType": "ItemViewModel.Documentation"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Examples",
+      "name": "Examples",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Examples",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.Examples",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Examples",
+      "nameWithType": "ItemViewModel.Examples"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Examples*",
+      "name": "Examples",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Examples_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Examples",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Examples",
+      "nameWithType": "ItemViewModel.Examples"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Exceptions",
+      "name": "Exceptions",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Exceptions",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.Exceptions",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Exceptions",
+      "nameWithType": "ItemViewModel.Exceptions"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Exceptions*",
+      "name": "Exceptions",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Exceptions_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Exceptions",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Exceptions",
+      "nameWithType": "ItemViewModel.Exceptions"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.ExtensionMethods",
+      "name": "ExtensionMethods",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_ExtensionMethods",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.ExtensionMethods",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.ExtensionMethods",
+      "nameWithType": "ItemViewModel.ExtensionMethods"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.ExtensionMethods*",
+      "name": "ExtensionMethods",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_ExtensionMethods_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.ExtensionMethods",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.ExtensionMethods",
+      "nameWithType": "ItemViewModel.ExtensionMethods"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.FullName",
+      "name": "FullName",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_FullName",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.FullName",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.FullName",
+      "nameWithType": "ItemViewModel.FullName"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.FullName*",
+      "name": "FullName",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_FullName_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.FullName",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.FullName",
+      "nameWithType": "ItemViewModel.FullName"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.FullNameForCSharp",
+      "name": "FullNameForCSharp",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_FullNameForCSharp",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.FullNameForCSharp",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.FullNameForCSharp",
+      "nameWithType": "ItemViewModel.FullNameForCSharp"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.FullNameForCSharp*",
+      "name": "FullNameForCSharp",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_FullNameForCSharp_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.FullNameForCSharp",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.FullNameForCSharp",
+      "nameWithType": "ItemViewModel.FullNameForCSharp"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.FullNameForVB",
+      "name": "FullNameForVB",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_FullNameForVB",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.FullNameForVB",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.FullNameForVB",
+      "nameWithType": "ItemViewModel.FullNameForVB"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.FullNameForVB*",
+      "name": "FullNameForVB",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_FullNameForVB_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.FullNameForVB",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.FullNameForVB",
+      "nameWithType": "ItemViewModel.FullNameForVB"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.FullNames",
+      "name": "FullNames",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_FullNames",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.FullNames",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.FullNames",
+      "nameWithType": "ItemViewModel.FullNames"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.FullNames*",
+      "name": "FullNames",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_FullNames_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.FullNames",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.FullNames",
+      "nameWithType": "ItemViewModel.FullNames"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Href",
+      "name": "Href",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Href",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.Href",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Href",
+      "nameWithType": "ItemViewModel.Href"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Href*",
+      "name": "Href",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Href_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Href",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Href",
+      "nameWithType": "ItemViewModel.Href"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Id",
+      "name": "Id",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Id",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.Id",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Id",
+      "nameWithType": "ItemViewModel.Id"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Id*",
+      "name": "Id",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Id_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Id",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Id",
+      "nameWithType": "ItemViewModel.Id"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Implements",
+      "name": "Implements",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Implements",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.Implements",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Implements",
+      "nameWithType": "ItemViewModel.Implements"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Implements*",
+      "name": "Implements",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Implements_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Implements",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Implements",
+      "nameWithType": "ItemViewModel.Implements"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Inheritance",
+      "name": "Inheritance",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Inheritance",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.Inheritance",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Inheritance",
+      "nameWithType": "ItemViewModel.Inheritance"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Inheritance*",
+      "name": "Inheritance",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Inheritance_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Inheritance",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Inheritance",
+      "nameWithType": "ItemViewModel.Inheritance"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.InheritedMembers",
+      "name": "InheritedMembers",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_InheritedMembers",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.InheritedMembers",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.InheritedMembers",
+      "nameWithType": "ItemViewModel.InheritedMembers"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.InheritedMembers*",
+      "name": "InheritedMembers",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_InheritedMembers_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.InheritedMembers",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.InheritedMembers",
+      "nameWithType": "ItemViewModel.InheritedMembers"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.IsExplicitInterfaceImplementation",
+      "name": "IsExplicitInterfaceImplementation",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_IsExplicitInterfaceImplementation",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.IsExplicitInterfaceImplementation",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.IsExplicitInterfaceImplementation",
+      "nameWithType": "ItemViewModel.IsExplicitInterfaceImplementation"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.IsExplicitInterfaceImplementation*",
+      "name": "IsExplicitInterfaceImplementation",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_IsExplicitInterfaceImplementation_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.IsExplicitInterfaceImplementation",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.IsExplicitInterfaceImplementation",
+      "nameWithType": "ItemViewModel.IsExplicitInterfaceImplementation"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.IsExtensionMethod",
+      "name": "IsExtensionMethod",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_IsExtensionMethod",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.IsExtensionMethod",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.IsExtensionMethod",
+      "nameWithType": "ItemViewModel.IsExtensionMethod"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.IsExtensionMethod*",
+      "name": "IsExtensionMethod",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_IsExtensionMethod_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.IsExtensionMethod",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.IsExtensionMethod",
+      "nameWithType": "ItemViewModel.IsExtensionMethod"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Metadata",
+      "name": "Metadata",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Metadata",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.Metadata",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Metadata",
+      "nameWithType": "ItemViewModel.Metadata"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Metadata*",
+      "name": "Metadata",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Metadata_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Metadata",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Metadata",
+      "nameWithType": "ItemViewModel.Metadata"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Name",
+      "name": "Name",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Name",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.Name",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Name",
+      "nameWithType": "ItemViewModel.Name"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Name*",
+      "name": "Name",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Name_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Name",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Name",
+      "nameWithType": "ItemViewModel.Name"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.NameForCSharp",
+      "name": "NameForCSharp",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_NameForCSharp",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.NameForCSharp",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.NameForCSharp",
+      "nameWithType": "ItemViewModel.NameForCSharp"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.NameForCSharp*",
+      "name": "NameForCSharp",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_NameForCSharp_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.NameForCSharp",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.NameForCSharp",
+      "nameWithType": "ItemViewModel.NameForCSharp"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.NameForVB",
+      "name": "NameForVB",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_NameForVB",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.NameForVB",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.NameForVB",
+      "nameWithType": "ItemViewModel.NameForVB"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.NameForVB*",
+      "name": "NameForVB",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_NameForVB_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.NameForVB",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.NameForVB",
+      "nameWithType": "ItemViewModel.NameForVB"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.NameWithType",
+      "name": "NameWithType",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_NameWithType",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.NameWithType",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.NameWithType",
+      "nameWithType": "ItemViewModel.NameWithType"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.NameWithType*",
+      "name": "NameWithType",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_NameWithType_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.NameWithType",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.NameWithType",
+      "nameWithType": "ItemViewModel.NameWithType"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.NameWithTypeForCSharp",
+      "name": "NameWithTypeForCSharp",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_NameWithTypeForCSharp",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.NameWithTypeForCSharp",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.NameWithTypeForCSharp",
+      "nameWithType": "ItemViewModel.NameWithTypeForCSharp"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.NameWithTypeForCSharp*",
+      "name": "NameWithTypeForCSharp",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_NameWithTypeForCSharp_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.NameWithTypeForCSharp",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.NameWithTypeForCSharp",
+      "nameWithType": "ItemViewModel.NameWithTypeForCSharp"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.NameWithTypeForVB",
+      "name": "NameWithTypeForVB",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_NameWithTypeForVB",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.NameWithTypeForVB",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.NameWithTypeForVB",
+      "nameWithType": "ItemViewModel.NameWithTypeForVB"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.NameWithTypeForVB*",
+      "name": "NameWithTypeForVB",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_NameWithTypeForVB_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.NameWithTypeForVB",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.NameWithTypeForVB",
+      "nameWithType": "ItemViewModel.NameWithTypeForVB"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Names",
+      "name": "Names",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Names",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.Names",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Names",
+      "nameWithType": "ItemViewModel.Names"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Names*",
+      "name": "Names",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Names_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Names",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Names",
+      "nameWithType": "ItemViewModel.Names"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.NamesWithType",
+      "name": "NamesWithType",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_NamesWithType",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.NamesWithType",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.NamesWithType",
+      "nameWithType": "ItemViewModel.NamesWithType"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.NamesWithType*",
+      "name": "NamesWithType",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_NamesWithType_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.NamesWithType",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.NamesWithType",
+      "nameWithType": "ItemViewModel.NamesWithType"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.NamespaceName",
+      "name": "NamespaceName",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_NamespaceName",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.NamespaceName",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.NamespaceName",
+      "nameWithType": "ItemViewModel.NamespaceName"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.NamespaceName*",
+      "name": "NamespaceName",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_NamespaceName_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.NamespaceName",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.NamespaceName",
+      "nameWithType": "ItemViewModel.NamespaceName"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Overload",
+      "name": "Overload",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Overload",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.Overload",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Overload",
+      "nameWithType": "ItemViewModel.Overload"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Overload*",
+      "name": "Overload",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Overload_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Overload",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Overload",
+      "nameWithType": "ItemViewModel.Overload"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Overridden",
+      "name": "Overridden",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Overridden",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.Overridden",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Overridden",
+      "nameWithType": "ItemViewModel.Overridden"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Overridden*",
+      "name": "Overridden",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Overridden_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Overridden",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Overridden",
+      "nameWithType": "ItemViewModel.Overridden"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Parent",
+      "name": "Parent",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Parent",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.Parent",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Parent",
+      "nameWithType": "ItemViewModel.Parent"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Parent*",
+      "name": "Parent",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Parent_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Parent",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Parent",
+      "nameWithType": "ItemViewModel.Parent"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Platform",
+      "name": "Platform",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Platform",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.Platform",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Platform",
+      "nameWithType": "ItemViewModel.Platform"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Platform*",
+      "name": "Platform",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Platform_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Platform",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Platform",
+      "nameWithType": "ItemViewModel.Platform"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Remarks",
+      "name": "Remarks",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Remarks",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.Remarks",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Remarks",
+      "nameWithType": "ItemViewModel.Remarks"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Remarks*",
+      "name": "Remarks",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Remarks_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Remarks",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Remarks",
+      "nameWithType": "ItemViewModel.Remarks"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.SeeAlsos",
+      "name": "SeeAlsos",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_SeeAlsos",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.SeeAlsos",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.SeeAlsos",
+      "nameWithType": "ItemViewModel.SeeAlsos"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.SeeAlsos*",
+      "name": "SeeAlsos",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_SeeAlsos_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.SeeAlsos",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.SeeAlsos",
+      "nameWithType": "ItemViewModel.SeeAlsos"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.SeeAlsosUidReference",
+      "name": "SeeAlsosUidReference",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_SeeAlsosUidReference",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.SeeAlsosUidReference",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.SeeAlsosUidReference",
+      "nameWithType": "ItemViewModel.SeeAlsosUidReference"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.SeeAlsosUidReference*",
+      "name": "SeeAlsosUidReference",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_SeeAlsosUidReference_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.SeeAlsosUidReference",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.SeeAlsosUidReference",
+      "nameWithType": "ItemViewModel.SeeAlsosUidReference"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Source",
+      "name": "Source",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Source",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.Source",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Source",
+      "nameWithType": "ItemViewModel.Source"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Source*",
+      "name": "Source",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Source_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Source",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Source",
+      "nameWithType": "ItemViewModel.Source"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Summary",
+      "name": "Summary",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Summary",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.Summary",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Summary",
+      "nameWithType": "ItemViewModel.Summary"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Summary*",
+      "name": "Summary",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Summary_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Summary",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Summary",
+      "nameWithType": "ItemViewModel.Summary"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.SupportedLanguages",
+      "name": "SupportedLanguages",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_SupportedLanguages",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.SupportedLanguages",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.SupportedLanguages",
+      "nameWithType": "ItemViewModel.SupportedLanguages"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.SupportedLanguages*",
+      "name": "SupportedLanguages",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_SupportedLanguages_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.SupportedLanguages",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.SupportedLanguages",
+      "nameWithType": "ItemViewModel.SupportedLanguages"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Syntax",
+      "name": "Syntax",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Syntax",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.Syntax",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Syntax",
+      "nameWithType": "ItemViewModel.Syntax"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Syntax*",
+      "name": "Syntax",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Syntax_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Syntax",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Syntax",
+      "nameWithType": "ItemViewModel.Syntax"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Type",
+      "name": "Type",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Type",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.Type",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Type",
+      "nameWithType": "ItemViewModel.Type"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Type*",
+      "name": "Type",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Type_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Type",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Type",
+      "nameWithType": "ItemViewModel.Type"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Uid",
+      "name": "Uid",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Uid",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.ItemViewModel.Uid",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Uid",
+      "nameWithType": "ItemViewModel.Uid"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.ItemViewModel.Uid*",
+      "name": "Uid",
+      "href": "api/Docfx.DataContracts.ManagedReference.ItemViewModel.html#Docfx_DataContracts_ManagedReference_ItemViewModel_Uid_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.ItemViewModel.Uid",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.ItemViewModel.Uid",
+      "nameWithType": "ItemViewModel.Uid"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.LinkInfo",
+      "name": "LinkInfo",
+      "href": "api/Docfx.DataContracts.ManagedReference.LinkInfo.html",
+      "commentId": "T:Docfx.DataContracts.ManagedReference.LinkInfo",
+      "fullName": "Docfx.DataContracts.ManagedReference.LinkInfo",
+      "nameWithType": "LinkInfo"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.LinkInfo.AltText",
+      "name": "AltText",
+      "href": "api/Docfx.DataContracts.ManagedReference.LinkInfo.html#Docfx_DataContracts_ManagedReference_LinkInfo_AltText",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.LinkInfo.AltText",
+      "fullName": "Docfx.DataContracts.ManagedReference.LinkInfo.AltText",
+      "nameWithType": "LinkInfo.AltText"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.LinkInfo.AltText*",
+      "name": "AltText",
+      "href": "api/Docfx.DataContracts.ManagedReference.LinkInfo.html#Docfx_DataContracts_ManagedReference_LinkInfo_AltText_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.LinkInfo.AltText",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.LinkInfo.AltText",
+      "nameWithType": "LinkInfo.AltText"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.LinkInfo.CommentId",
+      "name": "CommentId",
+      "href": "api/Docfx.DataContracts.ManagedReference.LinkInfo.html#Docfx_DataContracts_ManagedReference_LinkInfo_CommentId",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.LinkInfo.CommentId",
+      "fullName": "Docfx.DataContracts.ManagedReference.LinkInfo.CommentId",
+      "nameWithType": "LinkInfo.CommentId"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.LinkInfo.CommentId*",
+      "name": "CommentId",
+      "href": "api/Docfx.DataContracts.ManagedReference.LinkInfo.html#Docfx_DataContracts_ManagedReference_LinkInfo_CommentId_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.LinkInfo.CommentId",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.LinkInfo.CommentId",
+      "nameWithType": "LinkInfo.CommentId"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.LinkInfo.LinkId",
+      "name": "LinkId",
+      "href": "api/Docfx.DataContracts.ManagedReference.LinkInfo.html#Docfx_DataContracts_ManagedReference_LinkInfo_LinkId",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.LinkInfo.LinkId",
+      "fullName": "Docfx.DataContracts.ManagedReference.LinkInfo.LinkId",
+      "nameWithType": "LinkInfo.LinkId"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.LinkInfo.LinkId*",
+      "name": "LinkId",
+      "href": "api/Docfx.DataContracts.ManagedReference.LinkInfo.html#Docfx_DataContracts_ManagedReference_LinkInfo_LinkId_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.LinkInfo.LinkId",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.LinkInfo.LinkId",
+      "nameWithType": "LinkInfo.LinkId"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.LinkInfo.LinkType",
+      "name": "LinkType",
+      "href": "api/Docfx.DataContracts.ManagedReference.LinkInfo.html#Docfx_DataContracts_ManagedReference_LinkInfo_LinkType",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.LinkInfo.LinkType",
+      "fullName": "Docfx.DataContracts.ManagedReference.LinkInfo.LinkType",
+      "nameWithType": "LinkInfo.LinkType"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.LinkInfo.LinkType*",
+      "name": "LinkType",
+      "href": "api/Docfx.DataContracts.ManagedReference.LinkInfo.html#Docfx_DataContracts_ManagedReference_LinkInfo_LinkType_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.LinkInfo.LinkType",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.LinkInfo.LinkType",
+      "nameWithType": "LinkInfo.LinkType"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.LinkType",
+      "name": "LinkType",
+      "href": "api/Docfx.DataContracts.ManagedReference.LinkType.html",
+      "commentId": "T:Docfx.DataContracts.ManagedReference.LinkType",
+      "fullName": "Docfx.DataContracts.ManagedReference.LinkType",
+      "nameWithType": "LinkType"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.LinkType.CRef",
+      "name": "CRef",
+      "href": "api/Docfx.DataContracts.ManagedReference.LinkType.html#Docfx_DataContracts_ManagedReference_LinkType_CRef",
+      "commentId": "F:Docfx.DataContracts.ManagedReference.LinkType.CRef",
+      "fullName": "Docfx.DataContracts.ManagedReference.LinkType.CRef",
+      "nameWithType": "LinkType.CRef"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.LinkType.HRef",
+      "name": "HRef",
+      "href": "api/Docfx.DataContracts.ManagedReference.LinkType.html#Docfx_DataContracts_ManagedReference_LinkType_HRef",
+      "commentId": "F:Docfx.DataContracts.ManagedReference.LinkType.HRef",
+      "fullName": "Docfx.DataContracts.ManagedReference.LinkType.HRef",
+      "nameWithType": "LinkType.HRef"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.MemberType",
+      "name": "MemberType",
+      "href": "api/Docfx.DataContracts.ManagedReference.MemberType.html",
+      "commentId": "T:Docfx.DataContracts.ManagedReference.MemberType",
+      "fullName": "Docfx.DataContracts.ManagedReference.MemberType",
+      "nameWithType": "MemberType"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.MemberType.Assembly",
+      "name": "Assembly",
+      "href": "api/Docfx.DataContracts.ManagedReference.MemberType.html#Docfx_DataContracts_ManagedReference_MemberType_Assembly",
+      "commentId": "F:Docfx.DataContracts.ManagedReference.MemberType.Assembly",
+      "fullName": "Docfx.DataContracts.ManagedReference.MemberType.Assembly",
+      "nameWithType": "MemberType.Assembly"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.MemberType.AttachedEvent",
+      "name": "AttachedEvent",
+      "href": "api/Docfx.DataContracts.ManagedReference.MemberType.html#Docfx_DataContracts_ManagedReference_MemberType_AttachedEvent",
+      "commentId": "F:Docfx.DataContracts.ManagedReference.MemberType.AttachedEvent",
+      "fullName": "Docfx.DataContracts.ManagedReference.MemberType.AttachedEvent",
+      "nameWithType": "MemberType.AttachedEvent"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.MemberType.AttachedProperty",
+      "name": "AttachedProperty",
+      "href": "api/Docfx.DataContracts.ManagedReference.MemberType.html#Docfx_DataContracts_ManagedReference_MemberType_AttachedProperty",
+      "commentId": "F:Docfx.DataContracts.ManagedReference.MemberType.AttachedProperty",
+      "fullName": "Docfx.DataContracts.ManagedReference.MemberType.AttachedProperty",
+      "nameWithType": "MemberType.AttachedProperty"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.MemberType.Class",
+      "name": "Class",
+      "href": "api/Docfx.DataContracts.ManagedReference.MemberType.html#Docfx_DataContracts_ManagedReference_MemberType_Class",
+      "commentId": "F:Docfx.DataContracts.ManagedReference.MemberType.Class",
+      "fullName": "Docfx.DataContracts.ManagedReference.MemberType.Class",
+      "nameWithType": "MemberType.Class"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.MemberType.Constructor",
+      "name": "Constructor",
+      "href": "api/Docfx.DataContracts.ManagedReference.MemberType.html#Docfx_DataContracts_ManagedReference_MemberType_Constructor",
+      "commentId": "F:Docfx.DataContracts.ManagedReference.MemberType.Constructor",
+      "fullName": "Docfx.DataContracts.ManagedReference.MemberType.Constructor",
+      "nameWithType": "MemberType.Constructor"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.MemberType.Container",
+      "name": "Container",
+      "href": "api/Docfx.DataContracts.ManagedReference.MemberType.html#Docfx_DataContracts_ManagedReference_MemberType_Container",
+      "commentId": "F:Docfx.DataContracts.ManagedReference.MemberType.Container",
+      "fullName": "Docfx.DataContracts.ManagedReference.MemberType.Container",
+      "nameWithType": "MemberType.Container"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.MemberType.Default",
+      "name": "Default",
+      "href": "api/Docfx.DataContracts.ManagedReference.MemberType.html#Docfx_DataContracts_ManagedReference_MemberType_Default",
+      "commentId": "F:Docfx.DataContracts.ManagedReference.MemberType.Default",
+      "fullName": "Docfx.DataContracts.ManagedReference.MemberType.Default",
+      "nameWithType": "MemberType.Default"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.MemberType.Delegate",
+      "name": "Delegate",
+      "href": "api/Docfx.DataContracts.ManagedReference.MemberType.html#Docfx_DataContracts_ManagedReference_MemberType_Delegate",
+      "commentId": "F:Docfx.DataContracts.ManagedReference.MemberType.Delegate",
+      "fullName": "Docfx.DataContracts.ManagedReference.MemberType.Delegate",
+      "nameWithType": "MemberType.Delegate"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.MemberType.Enum",
+      "name": "Enum",
+      "href": "api/Docfx.DataContracts.ManagedReference.MemberType.html#Docfx_DataContracts_ManagedReference_MemberType_Enum",
+      "commentId": "F:Docfx.DataContracts.ManagedReference.MemberType.Enum",
+      "fullName": "Docfx.DataContracts.ManagedReference.MemberType.Enum",
+      "nameWithType": "MemberType.Enum"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.MemberType.Event",
+      "name": "Event",
+      "href": "api/Docfx.DataContracts.ManagedReference.MemberType.html#Docfx_DataContracts_ManagedReference_MemberType_Event",
+      "commentId": "F:Docfx.DataContracts.ManagedReference.MemberType.Event",
+      "fullName": "Docfx.DataContracts.ManagedReference.MemberType.Event",
+      "nameWithType": "MemberType.Event"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.MemberType.Field",
+      "name": "Field",
+      "href": "api/Docfx.DataContracts.ManagedReference.MemberType.html#Docfx_DataContracts_ManagedReference_MemberType_Field",
+      "commentId": "F:Docfx.DataContracts.ManagedReference.MemberType.Field",
+      "fullName": "Docfx.DataContracts.ManagedReference.MemberType.Field",
+      "nameWithType": "MemberType.Field"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.MemberType.Interface",
+      "name": "Interface",
+      "href": "api/Docfx.DataContracts.ManagedReference.MemberType.html#Docfx_DataContracts_ManagedReference_MemberType_Interface",
+      "commentId": "F:Docfx.DataContracts.ManagedReference.MemberType.Interface",
+      "fullName": "Docfx.DataContracts.ManagedReference.MemberType.Interface",
+      "nameWithType": "MemberType.Interface"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.MemberType.Method",
+      "name": "Method",
+      "href": "api/Docfx.DataContracts.ManagedReference.MemberType.html#Docfx_DataContracts_ManagedReference_MemberType_Method",
+      "commentId": "F:Docfx.DataContracts.ManagedReference.MemberType.Method",
+      "fullName": "Docfx.DataContracts.ManagedReference.MemberType.Method",
+      "nameWithType": "MemberType.Method"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.MemberType.Namespace",
+      "name": "Namespace",
+      "href": "api/Docfx.DataContracts.ManagedReference.MemberType.html#Docfx_DataContracts_ManagedReference_MemberType_Namespace",
+      "commentId": "F:Docfx.DataContracts.ManagedReference.MemberType.Namespace",
+      "fullName": "Docfx.DataContracts.ManagedReference.MemberType.Namespace",
+      "nameWithType": "MemberType.Namespace"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.MemberType.Operator",
+      "name": "Operator",
+      "href": "api/Docfx.DataContracts.ManagedReference.MemberType.html#Docfx_DataContracts_ManagedReference_MemberType_Operator",
+      "commentId": "F:Docfx.DataContracts.ManagedReference.MemberType.Operator",
+      "fullName": "Docfx.DataContracts.ManagedReference.MemberType.Operator",
+      "nameWithType": "MemberType.Operator"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.MemberType.Property",
+      "name": "Property",
+      "href": "api/Docfx.DataContracts.ManagedReference.MemberType.html#Docfx_DataContracts_ManagedReference_MemberType_Property",
+      "commentId": "F:Docfx.DataContracts.ManagedReference.MemberType.Property",
+      "fullName": "Docfx.DataContracts.ManagedReference.MemberType.Property",
+      "nameWithType": "MemberType.Property"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.MemberType.Struct",
+      "name": "Struct",
+      "href": "api/Docfx.DataContracts.ManagedReference.MemberType.html#Docfx_DataContracts_ManagedReference_MemberType_Struct",
+      "commentId": "F:Docfx.DataContracts.ManagedReference.MemberType.Struct",
+      "fullName": "Docfx.DataContracts.ManagedReference.MemberType.Struct",
+      "nameWithType": "MemberType.Struct"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.MemberType.Toc",
+      "name": "Toc",
+      "href": "api/Docfx.DataContracts.ManagedReference.MemberType.html#Docfx_DataContracts_ManagedReference_MemberType_Toc",
+      "commentId": "F:Docfx.DataContracts.ManagedReference.MemberType.Toc",
+      "fullName": "Docfx.DataContracts.ManagedReference.MemberType.Toc",
+      "nameWithType": "MemberType.Toc"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.NamedArgumentInfo",
+      "name": "NamedArgumentInfo",
+      "href": "api/Docfx.DataContracts.ManagedReference.NamedArgumentInfo.html",
+      "commentId": "T:Docfx.DataContracts.ManagedReference.NamedArgumentInfo",
+      "fullName": "Docfx.DataContracts.ManagedReference.NamedArgumentInfo",
+      "nameWithType": "NamedArgumentInfo"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.NamedArgumentInfo.Name",
+      "name": "Name",
+      "href": "api/Docfx.DataContracts.ManagedReference.NamedArgumentInfo.html#Docfx_DataContracts_ManagedReference_NamedArgumentInfo_Name",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.NamedArgumentInfo.Name",
+      "fullName": "Docfx.DataContracts.ManagedReference.NamedArgumentInfo.Name",
+      "nameWithType": "NamedArgumentInfo.Name"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.NamedArgumentInfo.Name*",
+      "name": "Name",
+      "href": "api/Docfx.DataContracts.ManagedReference.NamedArgumentInfo.html#Docfx_DataContracts_ManagedReference_NamedArgumentInfo_Name_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.NamedArgumentInfo.Name",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.NamedArgumentInfo.Name",
+      "nameWithType": "NamedArgumentInfo.Name"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.NamedArgumentInfo.Type",
+      "name": "Type",
+      "href": "api/Docfx.DataContracts.ManagedReference.NamedArgumentInfo.html#Docfx_DataContracts_ManagedReference_NamedArgumentInfo_Type",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.NamedArgumentInfo.Type",
+      "fullName": "Docfx.DataContracts.ManagedReference.NamedArgumentInfo.Type",
+      "nameWithType": "NamedArgumentInfo.Type"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.NamedArgumentInfo.Type*",
+      "name": "Type",
+      "href": "api/Docfx.DataContracts.ManagedReference.NamedArgumentInfo.html#Docfx_DataContracts_ManagedReference_NamedArgumentInfo_Type_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.NamedArgumentInfo.Type",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.NamedArgumentInfo.Type",
+      "nameWithType": "NamedArgumentInfo.Type"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.NamedArgumentInfo.Value",
+      "name": "Value",
+      "href": "api/Docfx.DataContracts.ManagedReference.NamedArgumentInfo.html#Docfx_DataContracts_ManagedReference_NamedArgumentInfo_Value",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.NamedArgumentInfo.Value",
+      "fullName": "Docfx.DataContracts.ManagedReference.NamedArgumentInfo.Value",
+      "nameWithType": "NamedArgumentInfo.Value"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.NamedArgumentInfo.Value*",
+      "name": "Value",
+      "href": "api/Docfx.DataContracts.ManagedReference.NamedArgumentInfo.html#Docfx_DataContracts_ManagedReference_NamedArgumentInfo_Value_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.NamedArgumentInfo.Value",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.NamedArgumentInfo.Value",
+      "nameWithType": "NamedArgumentInfo.Value"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.PageViewModel",
+      "name": "PageViewModel",
+      "href": "api/Docfx.DataContracts.ManagedReference.PageViewModel.html",
+      "commentId": "T:Docfx.DataContracts.ManagedReference.PageViewModel",
+      "fullName": "Docfx.DataContracts.ManagedReference.PageViewModel",
+      "nameWithType": "PageViewModel"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.PageViewModel.Items",
+      "name": "Items",
+      "href": "api/Docfx.DataContracts.ManagedReference.PageViewModel.html#Docfx_DataContracts_ManagedReference_PageViewModel_Items",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.PageViewModel.Items",
+      "fullName": "Docfx.DataContracts.ManagedReference.PageViewModel.Items",
+      "nameWithType": "PageViewModel.Items"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.PageViewModel.Items*",
+      "name": "Items",
+      "href": "api/Docfx.DataContracts.ManagedReference.PageViewModel.html#Docfx_DataContracts_ManagedReference_PageViewModel_Items_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.PageViewModel.Items",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.PageViewModel.Items",
+      "nameWithType": "PageViewModel.Items"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.PageViewModel.MemberLayout",
+      "name": "MemberLayout",
+      "href": "api/Docfx.DataContracts.ManagedReference.PageViewModel.html#Docfx_DataContracts_ManagedReference_PageViewModel_MemberLayout",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.PageViewModel.MemberLayout",
+      "fullName": "Docfx.DataContracts.ManagedReference.PageViewModel.MemberLayout",
+      "nameWithType": "PageViewModel.MemberLayout"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.PageViewModel.MemberLayout*",
+      "name": "MemberLayout",
+      "href": "api/Docfx.DataContracts.ManagedReference.PageViewModel.html#Docfx_DataContracts_ManagedReference_PageViewModel_MemberLayout_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.PageViewModel.MemberLayout",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.PageViewModel.MemberLayout",
+      "nameWithType": "PageViewModel.MemberLayout"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.PageViewModel.Metadata",
+      "name": "Metadata",
+      "href": "api/Docfx.DataContracts.ManagedReference.PageViewModel.html#Docfx_DataContracts_ManagedReference_PageViewModel_Metadata",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.PageViewModel.Metadata",
+      "fullName": "Docfx.DataContracts.ManagedReference.PageViewModel.Metadata",
+      "nameWithType": "PageViewModel.Metadata"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.PageViewModel.Metadata*",
+      "name": "Metadata",
+      "href": "api/Docfx.DataContracts.ManagedReference.PageViewModel.html#Docfx_DataContracts_ManagedReference_PageViewModel_Metadata_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.PageViewModel.Metadata",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.PageViewModel.Metadata",
+      "nameWithType": "PageViewModel.Metadata"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.PageViewModel.References",
+      "name": "References",
+      "href": "api/Docfx.DataContracts.ManagedReference.PageViewModel.html#Docfx_DataContracts_ManagedReference_PageViewModel_References",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.PageViewModel.References",
+      "fullName": "Docfx.DataContracts.ManagedReference.PageViewModel.References",
+      "nameWithType": "PageViewModel.References"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.PageViewModel.References*",
+      "name": "References",
+      "href": "api/Docfx.DataContracts.ManagedReference.PageViewModel.html#Docfx_DataContracts_ManagedReference_PageViewModel_References_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.PageViewModel.References",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.PageViewModel.References",
+      "nameWithType": "PageViewModel.References"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.PageViewModel.ShouldSkipMarkup",
+      "name": "ShouldSkipMarkup",
+      "href": "api/Docfx.DataContracts.ManagedReference.PageViewModel.html#Docfx_DataContracts_ManagedReference_PageViewModel_ShouldSkipMarkup",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.PageViewModel.ShouldSkipMarkup",
+      "fullName": "Docfx.DataContracts.ManagedReference.PageViewModel.ShouldSkipMarkup",
+      "nameWithType": "PageViewModel.ShouldSkipMarkup"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.PageViewModel.ShouldSkipMarkup*",
+      "name": "ShouldSkipMarkup",
+      "href": "api/Docfx.DataContracts.ManagedReference.PageViewModel.html#Docfx_DataContracts_ManagedReference_PageViewModel_ShouldSkipMarkup_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.PageViewModel.ShouldSkipMarkup",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.PageViewModel.ShouldSkipMarkup",
+      "nameWithType": "PageViewModel.ShouldSkipMarkup"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel",
+      "name": "SyntaxDetailViewModel",
+      "href": "api/Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.html",
+      "commentId": "T:Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel",
+      "fullName": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel",
+      "nameWithType": "SyntaxDetailViewModel"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Content",
+      "name": "Content",
+      "href": "api/Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.html#Docfx_DataContracts_ManagedReference_SyntaxDetailViewModel_Content",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Content",
+      "fullName": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Content",
+      "nameWithType": "SyntaxDetailViewModel.Content"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Content*",
+      "name": "Content",
+      "href": "api/Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.html#Docfx_DataContracts_ManagedReference_SyntaxDetailViewModel_Content_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Content",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Content",
+      "nameWithType": "SyntaxDetailViewModel.Content"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.ContentForCSharp",
+      "name": "ContentForCSharp",
+      "href": "api/Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.html#Docfx_DataContracts_ManagedReference_SyntaxDetailViewModel_ContentForCSharp",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.ContentForCSharp",
+      "fullName": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.ContentForCSharp",
+      "nameWithType": "SyntaxDetailViewModel.ContentForCSharp"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.ContentForCSharp*",
+      "name": "ContentForCSharp",
+      "href": "api/Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.html#Docfx_DataContracts_ManagedReference_SyntaxDetailViewModel_ContentForCSharp_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.ContentForCSharp",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.ContentForCSharp",
+      "nameWithType": "SyntaxDetailViewModel.ContentForCSharp"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.ContentForVB",
+      "name": "ContentForVB",
+      "href": "api/Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.html#Docfx_DataContracts_ManagedReference_SyntaxDetailViewModel_ContentForVB",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.ContentForVB",
+      "fullName": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.ContentForVB",
+      "nameWithType": "SyntaxDetailViewModel.ContentForVB"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.ContentForVB*",
+      "name": "ContentForVB",
+      "href": "api/Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.html#Docfx_DataContracts_ManagedReference_SyntaxDetailViewModel_ContentForVB_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.ContentForVB",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.ContentForVB",
+      "nameWithType": "SyntaxDetailViewModel.ContentForVB"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Contents",
+      "name": "Contents",
+      "href": "api/Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.html#Docfx_DataContracts_ManagedReference_SyntaxDetailViewModel_Contents",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Contents",
+      "fullName": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Contents",
+      "nameWithType": "SyntaxDetailViewModel.Contents"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Contents*",
+      "name": "Contents",
+      "href": "api/Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.html#Docfx_DataContracts_ManagedReference_SyntaxDetailViewModel_Contents_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Contents",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Contents",
+      "nameWithType": "SyntaxDetailViewModel.Contents"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Parameters",
+      "name": "Parameters",
+      "href": "api/Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.html#Docfx_DataContracts_ManagedReference_SyntaxDetailViewModel_Parameters",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Parameters",
+      "fullName": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Parameters",
+      "nameWithType": "SyntaxDetailViewModel.Parameters"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Parameters*",
+      "name": "Parameters",
+      "href": "api/Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.html#Docfx_DataContracts_ManagedReference_SyntaxDetailViewModel_Parameters_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Parameters",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Parameters",
+      "nameWithType": "SyntaxDetailViewModel.Parameters"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Return",
+      "name": "Return",
+      "href": "api/Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.html#Docfx_DataContracts_ManagedReference_SyntaxDetailViewModel_Return",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Return",
+      "fullName": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Return",
+      "nameWithType": "SyntaxDetailViewModel.Return"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Return*",
+      "name": "Return",
+      "href": "api/Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.html#Docfx_DataContracts_ManagedReference_SyntaxDetailViewModel_Return_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Return",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.Return",
+      "nameWithType": "SyntaxDetailViewModel.Return"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.TypeParameters",
+      "name": "TypeParameters",
+      "href": "api/Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.html#Docfx_DataContracts_ManagedReference_SyntaxDetailViewModel_TypeParameters",
+      "commentId": "P:Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.TypeParameters",
+      "fullName": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.TypeParameters",
+      "nameWithType": "SyntaxDetailViewModel.TypeParameters"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.TypeParameters*",
+      "name": "TypeParameters",
+      "href": "api/Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.html#Docfx_DataContracts_ManagedReference_SyntaxDetailViewModel_TypeParameters_",
+      "commentId": "Overload:Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.TypeParameters",
+      "isSpec": "True",
+      "fullName": "Docfx.DataContracts.ManagedReference.SyntaxDetailViewModel.TypeParameters",
+      "nameWithType": "SyntaxDetailViewModel.TypeParameters"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.SyntaxLanguage",
+      "name": "SyntaxLanguage",
+      "href": "api/Docfx.DataContracts.ManagedReference.SyntaxLanguage.html",
+      "commentId": "T:Docfx.DataContracts.ManagedReference.SyntaxLanguage",
+      "fullName": "Docfx.DataContracts.ManagedReference.SyntaxLanguage",
+      "nameWithType": "SyntaxLanguage"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.SyntaxLanguage.CSharp",
+      "name": "CSharp",
+      "href": "api/Docfx.DataContracts.ManagedReference.SyntaxLanguage.html#Docfx_DataContracts_ManagedReference_SyntaxLanguage_CSharp",
+      "commentId": "F:Docfx.DataContracts.ManagedReference.SyntaxLanguage.CSharp",
+      "fullName": "Docfx.DataContracts.ManagedReference.SyntaxLanguage.CSharp",
+      "nameWithType": "SyntaxLanguage.CSharp"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.SyntaxLanguage.Default",
+      "name": "Default",
+      "href": "api/Docfx.DataContracts.ManagedReference.SyntaxLanguage.html#Docfx_DataContracts_ManagedReference_SyntaxLanguage_Default",
+      "commentId": "F:Docfx.DataContracts.ManagedReference.SyntaxLanguage.Default",
+      "fullName": "Docfx.DataContracts.ManagedReference.SyntaxLanguage.Default",
+      "nameWithType": "SyntaxLanguage.Default"
+    },
+    {
+      "uid": "Docfx.DataContracts.ManagedReference.SyntaxLanguage.VB",
+      "name": "VB",
+      "href": "api/Docfx.DataContracts.ManagedReference.SyntaxLanguage.html#Docfx_DataContracts_ManagedReference_SyntaxLanguage_VB",
+      "commentId": "F:Docfx.DataContracts.ManagedReference.SyntaxLanguage.VB",
+      "fullName": "Docfx.DataContracts.ManagedReference.SyntaxLanguage.VB",
+      "nameWithType": "SyntaxLanguage.VB"
+    },
+    {
+      "uid": "Docfx.Docset",
+      "name": "Docset",
+      "href": "api/Docfx.Docset.html",
+      "commentId": "T:Docfx.Docset",
+      "fullName": "Docfx.Docset",
+      "nameWithType": "Docset"
+    },
+    {
+      "uid": "Docfx.Docset.Build(System.String)",
+      "name": "Build(string)",
+      "href": "api/Docfx.Docset.html#Docfx_Docset_Build_System_String_",
+      "commentId": "M:Docfx.Docset.Build(System.String)",
+      "name.vb": "Build(String)",
+      "fullName": "Docfx.Docset.Build(string)",
+      "fullName.vb": "Docfx.Docset.Build(String)",
+      "nameWithType": "Docset.Build(string)",
+      "nameWithType.vb": "Docset.Build(String)"
+    },
+    {
+      "uid": "Docfx.Docset.Build(System.String,Docfx.BuildOptions)",
+      "name": "Build(string, BuildOptions)",
+      "href": "api/Docfx.Docset.html#Docfx_Docset_Build_System_String_Docfx_BuildOptions_",
+      "commentId": "M:Docfx.Docset.Build(System.String,Docfx.BuildOptions)",
+      "name.vb": "Build(String, BuildOptions)",
+      "fullName": "Docfx.Docset.Build(string, Docfx.BuildOptions)",
+      "fullName.vb": "Docfx.Docset.Build(String, Docfx.BuildOptions)",
+      "nameWithType": "Docset.Build(string, BuildOptions)",
+      "nameWithType.vb": "Docset.Build(String, BuildOptions)"
+    },
+    {
+      "uid": "Docfx.Docset.Build*",
+      "name": "Build",
+      "href": "api/Docfx.Docset.html#Docfx_Docset_Build_",
+      "commentId": "Overload:Docfx.Docset.Build",
+      "isSpec": "True",
+      "fullName": "Docfx.Docset.Build",
+      "nameWithType": "Docset.Build"
+    },
+    {
+      "uid": "Docfx.Docset.Pdf(System.String)",
+      "name": "Pdf(string)",
+      "href": "api/Docfx.Docset.html#Docfx_Docset_Pdf_System_String_",
+      "commentId": "M:Docfx.Docset.Pdf(System.String)",
+      "name.vb": "Pdf(String)",
+      "fullName": "Docfx.Docset.Pdf(string)",
+      "fullName.vb": "Docfx.Docset.Pdf(String)",
+      "nameWithType": "Docset.Pdf(string)",
+      "nameWithType.vb": "Docset.Pdf(String)"
+    },
+    {
+      "uid": "Docfx.Docset.Pdf(System.String,Docfx.BuildOptions)",
+      "name": "Pdf(string, BuildOptions)",
+      "href": "api/Docfx.Docset.html#Docfx_Docset_Pdf_System_String_Docfx_BuildOptions_",
+      "commentId": "M:Docfx.Docset.Pdf(System.String,Docfx.BuildOptions)",
+      "name.vb": "Pdf(String, BuildOptions)",
+      "fullName": "Docfx.Docset.Pdf(string, Docfx.BuildOptions)",
+      "fullName.vb": "Docfx.Docset.Pdf(String, Docfx.BuildOptions)",
+      "nameWithType": "Docset.Pdf(string, BuildOptions)",
+      "nameWithType.vb": "Docset.Pdf(String, BuildOptions)"
+    },
+    {
+      "uid": "Docfx.Docset.Pdf*",
+      "name": "Pdf",
+      "href": "api/Docfx.Docset.html#Docfx_Docset_Pdf_",
+      "commentId": "Overload:Docfx.Docset.Pdf",
+      "isSpec": "True",
+      "fullName": "Docfx.Docset.Pdf",
+      "nameWithType": "Docset.Pdf"
+    },
+    {
+      "uid": "Docfx.Dotnet",
+      "name": "Docfx.Dotnet",
+      "href": "api/Docfx.Dotnet.html",
+      "commentId": "N:Docfx.Dotnet",
+      "fullName": "Docfx.Dotnet",
+      "nameWithType": "Docfx.Dotnet"
+    },
+    {
+      "uid": "Docfx.Dotnet.DotnetApiCatalog",
+      "name": "DotnetApiCatalog",
+      "href": "api/Docfx.Dotnet.DotnetApiCatalog.html",
+      "commentId": "T:Docfx.Dotnet.DotnetApiCatalog",
+      "fullName": "Docfx.Dotnet.DotnetApiCatalog",
+      "nameWithType": "DotnetApiCatalog"
+    },
+    {
+      "uid": "Docfx.Dotnet.DotnetApiCatalog.GenerateManagedReferenceYamlFiles(System.String)",
+      "name": "GenerateManagedReferenceYamlFiles(string)",
+      "href": "api/Docfx.Dotnet.DotnetApiCatalog.html#Docfx_Dotnet_DotnetApiCatalog_GenerateManagedReferenceYamlFiles_System_String_",
+      "commentId": "M:Docfx.Dotnet.DotnetApiCatalog.GenerateManagedReferenceYamlFiles(System.String)",
+      "name.vb": "GenerateManagedReferenceYamlFiles(String)",
+      "fullName": "Docfx.Dotnet.DotnetApiCatalog.GenerateManagedReferenceYamlFiles(string)",
+      "fullName.vb": "Docfx.Dotnet.DotnetApiCatalog.GenerateManagedReferenceYamlFiles(String)",
+      "nameWithType": "DotnetApiCatalog.GenerateManagedReferenceYamlFiles(string)",
+      "nameWithType.vb": "DotnetApiCatalog.GenerateManagedReferenceYamlFiles(String)"
+    },
+    {
+      "uid": "Docfx.Dotnet.DotnetApiCatalog.GenerateManagedReferenceYamlFiles(System.String,Docfx.Dotnet.DotnetApiOptions)",
+      "name": "GenerateManagedReferenceYamlFiles(string, DotnetApiOptions)",
+      "href": "api/Docfx.Dotnet.DotnetApiCatalog.html#Docfx_Dotnet_DotnetApiCatalog_GenerateManagedReferenceYamlFiles_System_String_Docfx_Dotnet_DotnetApiOptions_",
+      "commentId": "M:Docfx.Dotnet.DotnetApiCatalog.GenerateManagedReferenceYamlFiles(System.String,Docfx.Dotnet.DotnetApiOptions)",
+      "name.vb": "GenerateManagedReferenceYamlFiles(String, DotnetApiOptions)",
+      "fullName": "Docfx.Dotnet.DotnetApiCatalog.GenerateManagedReferenceYamlFiles(string, Docfx.Dotnet.DotnetApiOptions)",
+      "fullName.vb": "Docfx.Dotnet.DotnetApiCatalog.GenerateManagedReferenceYamlFiles(String, Docfx.Dotnet.DotnetApiOptions)",
+      "nameWithType": "DotnetApiCatalog.GenerateManagedReferenceYamlFiles(string, DotnetApiOptions)",
+      "nameWithType.vb": "DotnetApiCatalog.GenerateManagedReferenceYamlFiles(String, DotnetApiOptions)"
+    },
+    {
+      "uid": "Docfx.Dotnet.DotnetApiCatalog.GenerateManagedReferenceYamlFiles*",
+      "name": "GenerateManagedReferenceYamlFiles",
+      "href": "api/Docfx.Dotnet.DotnetApiCatalog.html#Docfx_Dotnet_DotnetApiCatalog_GenerateManagedReferenceYamlFiles_",
+      "commentId": "Overload:Docfx.Dotnet.DotnetApiCatalog.GenerateManagedReferenceYamlFiles",
+      "isSpec": "True",
+      "fullName": "Docfx.Dotnet.DotnetApiCatalog.GenerateManagedReferenceYamlFiles",
+      "nameWithType": "DotnetApiCatalog.GenerateManagedReferenceYamlFiles"
+    },
+    {
+      "uid": "Docfx.Dotnet.DotnetApiOptions",
+      "name": "DotnetApiOptions",
+      "href": "api/Docfx.Dotnet.DotnetApiOptions.html",
+      "commentId": "T:Docfx.Dotnet.DotnetApiOptions",
+      "fullName": "Docfx.Dotnet.DotnetApiOptions",
+      "nameWithType": "DotnetApiOptions"
+    },
+    {
+      "uid": "Docfx.Dotnet.DotnetApiOptions.IncludeApi",
+      "name": "IncludeApi",
+      "href": "api/Docfx.Dotnet.DotnetApiOptions.html#Docfx_Dotnet_DotnetApiOptions_IncludeApi",
+      "commentId": "P:Docfx.Dotnet.DotnetApiOptions.IncludeApi",
+      "fullName": "Docfx.Dotnet.DotnetApiOptions.IncludeApi",
+      "nameWithType": "DotnetApiOptions.IncludeApi"
+    },
+    {
+      "uid": "Docfx.Dotnet.DotnetApiOptions.IncludeApi*",
+      "name": "IncludeApi",
+      "href": "api/Docfx.Dotnet.DotnetApiOptions.html#Docfx_Dotnet_DotnetApiOptions_IncludeApi_",
+      "commentId": "Overload:Docfx.Dotnet.DotnetApiOptions.IncludeApi",
+      "isSpec": "True",
+      "fullName": "Docfx.Dotnet.DotnetApiOptions.IncludeApi",
+      "nameWithType": "DotnetApiOptions.IncludeApi"
+    },
+    {
+      "uid": "Docfx.Dotnet.DotnetApiOptions.IncludeAttribute",
+      "name": "IncludeAttribute",
+      "href": "api/Docfx.Dotnet.DotnetApiOptions.html#Docfx_Dotnet_DotnetApiOptions_IncludeAttribute",
+      "commentId": "P:Docfx.Dotnet.DotnetApiOptions.IncludeAttribute",
+      "fullName": "Docfx.Dotnet.DotnetApiOptions.IncludeAttribute",
+      "nameWithType": "DotnetApiOptions.IncludeAttribute"
+    },
+    {
+      "uid": "Docfx.Dotnet.DotnetApiOptions.IncludeAttribute*",
+      "name": "IncludeAttribute",
+      "href": "api/Docfx.Dotnet.DotnetApiOptions.html#Docfx_Dotnet_DotnetApiOptions_IncludeAttribute_",
+      "commentId": "Overload:Docfx.Dotnet.DotnetApiOptions.IncludeAttribute",
+      "isSpec": "True",
+      "fullName": "Docfx.Dotnet.DotnetApiOptions.IncludeAttribute",
+      "nameWithType": "DotnetApiOptions.IncludeAttribute"
+    },
+    {
+      "uid": "Docfx.Dotnet.DotnetApiOptions.SourceUrl",
+      "name": "SourceUrl",
+      "href": "api/Docfx.Dotnet.DotnetApiOptions.html#Docfx_Dotnet_DotnetApiOptions_SourceUrl",
+      "commentId": "P:Docfx.Dotnet.DotnetApiOptions.SourceUrl",
+      "fullName": "Docfx.Dotnet.DotnetApiOptions.SourceUrl",
+      "nameWithType": "DotnetApiOptions.SourceUrl"
+    },
+    {
+      "uid": "Docfx.Dotnet.DotnetApiOptions.SourceUrl*",
+      "name": "SourceUrl",
+      "href": "api/Docfx.Dotnet.DotnetApiOptions.html#Docfx_Dotnet_DotnetApiOptions_SourceUrl_",
+      "commentId": "Overload:Docfx.Dotnet.DotnetApiOptions.SourceUrl",
+      "isSpec": "True",
+      "fullName": "Docfx.Dotnet.DotnetApiOptions.SourceUrl",
+      "nameWithType": "DotnetApiOptions.SourceUrl"
+    },
+    {
+      "uid": "Docfx.Dotnet.SymbolIncludeState",
+      "name": "SymbolIncludeState",
+      "href": "api/Docfx.Dotnet.SymbolIncludeState.html",
+      "commentId": "T:Docfx.Dotnet.SymbolIncludeState",
+      "fullName": "Docfx.Dotnet.SymbolIncludeState",
+      "nameWithType": "SymbolIncludeState"
+    },
+    {
+      "uid": "Docfx.Dotnet.SymbolIncludeState.Default",
+      "name": "Default",
+      "href": "api/Docfx.Dotnet.SymbolIncludeState.html#Docfx_Dotnet_SymbolIncludeState_Default",
+      "commentId": "F:Docfx.Dotnet.SymbolIncludeState.Default",
+      "fullName": "Docfx.Dotnet.SymbolIncludeState.Default",
+      "nameWithType": "SymbolIncludeState.Default"
+    },
+    {
+      "uid": "Docfx.Dotnet.SymbolIncludeState.Exclude",
+      "name": "Exclude",
+      "href": "api/Docfx.Dotnet.SymbolIncludeState.html#Docfx_Dotnet_SymbolIncludeState_Exclude",
+      "commentId": "F:Docfx.Dotnet.SymbolIncludeState.Exclude",
+      "fullName": "Docfx.Dotnet.SymbolIncludeState.Exclude",
+      "nameWithType": "SymbolIncludeState.Exclude"
+    },
+    {
+      "uid": "Docfx.Dotnet.SymbolIncludeState.Include",
+      "name": "Include",
+      "href": "api/Docfx.Dotnet.SymbolIncludeState.html#Docfx_Dotnet_SymbolIncludeState_Include",
+      "commentId": "F:Docfx.Dotnet.SymbolIncludeState.Include",
+      "fullName": "Docfx.Dotnet.SymbolIncludeState.Include",
+      "nameWithType": "SymbolIncludeState.Include"
+    },
+    {
+      "uid": "Docfx.MemberLayout",
+      "name": "MemberLayout",
+      "href": "api/Docfx.MemberLayout.html",
+      "commentId": "T:Docfx.MemberLayout",
+      "fullName": "Docfx.MemberLayout",
+      "nameWithType": "MemberLayout"
+    },
+    {
+      "uid": "Docfx.MemberLayout.SamePage",
+      "name": "SamePage",
+      "href": "api/Docfx.MemberLayout.html#Docfx_MemberLayout_SamePage",
+      "commentId": "F:Docfx.MemberLayout.SamePage",
+      "fullName": "Docfx.MemberLayout.SamePage",
+      "nameWithType": "MemberLayout.SamePage"
+    },
+    {
+      "uid": "Docfx.MemberLayout.SeparatePages",
+      "name": "SeparatePages",
+      "href": "api/Docfx.MemberLayout.html#Docfx_MemberLayout_SeparatePages",
+      "commentId": "F:Docfx.MemberLayout.SeparatePages",
+      "fullName": "Docfx.MemberLayout.SeparatePages",
+      "nameWithType": "MemberLayout.SeparatePages"
+    }
+  ]
+}
diff --git a/test/docfx.Tests/SerializationTests/TestData/XRefMap/xrefmap_01.yml b/test/docfx.Tests/SerializationTests/TestData/XRefMap/xrefmap_01.yml
new file mode 100644
index 00000000000..172f14a6ea4
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/TestData/XRefMap/xrefmap_01.yml
@@ -0,0 +1,1612 @@
+### YamlMime:XRefMap
+sorted: true
+references:
+- uid: BuildFromAssembly
+  name: BuildFromAssembly
+  href: api/BuildFromAssembly.html
+  commentId: N:BuildFromAssembly
+  fullName: BuildFromAssembly
+  nameWithType: BuildFromAssembly
+- uid: BuildFromAssembly.Class1
+  name: Class1
+  href: api/BuildFromAssembly.Class1.html
+  commentId: T:BuildFromAssembly.Class1
+  fullName: BuildFromAssembly.Class1
+  nameWithType: Class1
+- uid: BuildFromAssembly.Class1.#ctor
+  name: Class1()
+  href: api/BuildFromAssembly.Class1.html#BuildFromAssembly_Class1__ctor
+  commentId: M:BuildFromAssembly.Class1.#ctor
+  name.vb: New()
+  fullName: BuildFromAssembly.Class1.Class1()
+  fullName.vb: BuildFromAssembly.Class1.New()
+  nameWithType: Class1.Class1()
+  nameWithType.vb: Class1.New()
+- uid: BuildFromAssembly.Class1.#ctor*
+  name: Class1
+  href: api/BuildFromAssembly.Class1.html#BuildFromAssembly_Class1__ctor_
+  commentId: Overload:BuildFromAssembly.Class1.#ctor
+  name.vb: New
+  fullName: BuildFromAssembly.Class1.Class1
+  fullName.vb: BuildFromAssembly.Class1.New
+  nameWithType: Class1.Class1
+  nameWithType.vb: Class1.New
+- uid: BuildFromAssembly.Class1.HelloWorld
+  name: HelloWorld()
+  href: api/BuildFromAssembly.Class1.html#BuildFromAssembly_Class1_HelloWorld
+  commentId: M:BuildFromAssembly.Class1.HelloWorld
+  fullName: BuildFromAssembly.Class1.HelloWorld()
+  nameWithType: Class1.HelloWorld()
+- uid: BuildFromAssembly.Class1.HelloWorld*
+  name: HelloWorld
+  href: api/BuildFromAssembly.Class1.html#BuildFromAssembly_Class1_HelloWorld_
+  commentId: Overload:BuildFromAssembly.Class1.HelloWorld
+  fullName: BuildFromAssembly.Class1.HelloWorld
+  nameWithType: Class1.HelloWorld
+- uid: BuildFromAssembly.Issue5432
+  name: Issue5432
+  href: api/BuildFromAssembly.Issue5432.html
+  commentId: T:BuildFromAssembly.Issue5432
+  fullName: BuildFromAssembly.Issue5432
+  nameWithType: Issue5432
+- uid: BuildFromAssembly.Issue5432.Name
+  name: Name
+  href: api/BuildFromAssembly.Issue5432.html#BuildFromAssembly_Issue5432_Name
+  commentId: P:BuildFromAssembly.Issue5432.Name
+  fullName: BuildFromAssembly.Issue5432.Name
+  nameWithType: Issue5432.Name
+- uid: BuildFromAssembly.Issue5432.Name*
+  name: Name
+  href: api/BuildFromAssembly.Issue5432.html#BuildFromAssembly_Issue5432_Name_
+  commentId: Overload:BuildFromAssembly.Issue5432.Name
+  fullName: BuildFromAssembly.Issue5432.Name
+  nameWithType: Issue5432.Name
+- uid: BuildFromCSharpSourceCode
+  name: BuildFromCSharpSourceCode
+  href: api/BuildFromCSharpSourceCode.html
+  commentId: N:BuildFromCSharpSourceCode
+  fullName: BuildFromCSharpSourceCode
+  nameWithType: BuildFromCSharpSourceCode
+- uid: BuildFromCSharpSourceCode.CSharp
+  name: CSharp
+  href: api/BuildFromCSharpSourceCode.CSharp.html
+  commentId: T:BuildFromCSharpSourceCode.CSharp
+  fullName: BuildFromCSharpSourceCode.CSharp
+  nameWithType: CSharp
+- uid: BuildFromCSharpSourceCode.CSharp.Main(System.String[])
+  name: Main(string[])
+  href: api/BuildFromCSharpSourceCode.CSharp.html#BuildFromCSharpSourceCode_CSharp_Main_System_String___
+  commentId: M:BuildFromCSharpSourceCode.CSharp.Main(System.String[])
+  name.vb: Main(String())
+  fullName: BuildFromCSharpSourceCode.CSharp.Main(string[])
+  fullName.vb: BuildFromCSharpSourceCode.CSharp.Main(String())
+  nameWithType: CSharp.Main(string[])
+  nameWithType.vb: CSharp.Main(String())
+- uid: BuildFromCSharpSourceCode.CSharp.Main*
+  name: Main
+  href: api/BuildFromCSharpSourceCode.CSharp.html#BuildFromCSharpSourceCode_CSharp_Main_
+  commentId: Overload:BuildFromCSharpSourceCode.CSharp.Main
+  isSpec: "True"
+  fullName: BuildFromCSharpSourceCode.CSharp.Main
+  nameWithType: CSharp.Main
+- uid: BuildFromProject
+  name: BuildFromProject
+  href: api/BuildFromProject.html
+  commentId: N:BuildFromProject
+  fullName: BuildFromProject
+  nameWithType: BuildFromProject
+- uid: BuildFromProject.Class1
+  name: Class1
+  href: api/BuildFromProject.Class1.html
+  commentId: T:BuildFromProject.Class1
+  fullName: BuildFromProject.Class1
+  nameWithType: Class1
+- uid: BuildFromProject.Class1.IIssue8948
+  name: Class1.IIssue8948
+  href: api/BuildFromProject.Class1.IIssue8948.html
+  commentId: T:BuildFromProject.Class1.IIssue8948
+  fullName: BuildFromProject.Class1.IIssue8948
+  nameWithType: Class1.IIssue8948
+- uid: BuildFromProject.Class1.IIssue8948.DoNothing*
+  name: DoNothing
+  href: api/BuildFromProject.Class1.IIssue8948.html#BuildFromProject_Class1_IIssue8948_DoNothing_
+  commentId: Overload:BuildFromProject.Class1.IIssue8948.DoNothing
+  isSpec: "True"
+  fullName: BuildFromProject.Class1.IIssue8948.DoNothing
+  nameWithType: Class1.IIssue8948.DoNothing
+- uid: BuildFromProject.Class1.IIssue8948.DoNothing``1
+  name: DoNothing<T>()
+  href: api/BuildFromProject.Class1.IIssue8948.html#BuildFromProject_Class1_IIssue8948_DoNothing__1
+  commentId: M:BuildFromProject.Class1.IIssue8948.DoNothing``1
+  name.vb: DoNothing(Of T)()
+  fullName: BuildFromProject.Class1.IIssue8948.DoNothing<T>()
+  fullName.vb: BuildFromProject.Class1.IIssue8948.DoNothing(Of T)()
+  nameWithType: Class1.IIssue8948.DoNothing<T>()
+  nameWithType.vb: Class1.IIssue8948.DoNothing(Of T)()
+- uid: BuildFromProject.Class1.Issue1651
+  name: Issue1651()
+  href: api/BuildFromProject.Class1.html#BuildFromProject_Class1_Issue1651
+  commentId: M:BuildFromProject.Class1.Issue1651
+  fullName: BuildFromProject.Class1.Issue1651()
+  nameWithType: Class1.Issue1651()
+- uid: BuildFromProject.Class1.Issue1651*
+  name: Issue1651
+  href: api/BuildFromProject.Class1.html#BuildFromProject_Class1_Issue1651_
+  commentId: Overload:BuildFromProject.Class1.Issue1651
+  isSpec: "True"
+  fullName: BuildFromProject.Class1.Issue1651
+  nameWithType: Class1.Issue1651
+- uid: BuildFromProject.Class1.Issue1887
+  name: Issue1887()
+  href: api/BuildFromProject.Class1.html#BuildFromProject_Class1_Issue1887
+  commentId: M:BuildFromProject.Class1.Issue1887
+  fullName: BuildFromProject.Class1.Issue1887()
+  nameWithType: Class1.Issue1887()
+- uid: BuildFromProject.Class1.Issue1887*
+  name: Issue1887
+  href: api/BuildFromProject.Class1.html#BuildFromProject_Class1_Issue1887_
+  commentId: Overload:BuildFromProject.Class1.Issue1887
+  isSpec: "True"
+  fullName: BuildFromProject.Class1.Issue1887
+  nameWithType: Class1.Issue1887
+- uid: BuildFromProject.Class1.Issue2623
+  name: Issue2623()
+  href: api/BuildFromProject.Class1.html#BuildFromProject_Class1_Issue2623
+  commentId: M:BuildFromProject.Class1.Issue2623
+  fullName: BuildFromProject.Class1.Issue2623()
+  nameWithType: Class1.Issue2623()
+- uid: BuildFromProject.Class1.Issue2623*
+  name: Issue2623
+  href: api/BuildFromProject.Class1.html#BuildFromProject_Class1_Issue2623_
+  commentId: Overload:BuildFromProject.Class1.Issue2623
+  isSpec: "True"
+  fullName: BuildFromProject.Class1.Issue2623
+  nameWithType: Class1.Issue2623
+- uid: BuildFromProject.Class1.Issue2723
+  name: Issue2723()
+  href: api/BuildFromProject.Class1.html#BuildFromProject_Class1_Issue2723
+  commentId: M:BuildFromProject.Class1.Issue2723
+  fullName: BuildFromProject.Class1.Issue2723()
+  nameWithType: Class1.Issue2723()
+- uid: BuildFromProject.Class1.Issue2723*
+  name: Issue2723
+  href: api/BuildFromProject.Class1.html#BuildFromProject_Class1_Issue2723_
+  commentId: Overload:BuildFromProject.Class1.Issue2723
+  isSpec: "True"
+  fullName: BuildFromProject.Class1.Issue2723
+  nameWithType: Class1.Issue2723
+- uid: BuildFromProject.Class1.Issue4017
+  name: Issue4017()
+  href: api/BuildFromProject.Class1.html#BuildFromProject_Class1_Issue4017
+  commentId: M:BuildFromProject.Class1.Issue4017
+  fullName: BuildFromProject.Class1.Issue4017()
+  nameWithType: Class1.Issue4017()
+- uid: BuildFromProject.Class1.Issue4017*
+  name: Issue4017
+  href: api/BuildFromProject.Class1.html#BuildFromProject_Class1_Issue4017_
+  commentId: Overload:BuildFromProject.Class1.Issue4017
+  isSpec: "True"
+  fullName: BuildFromProject.Class1.Issue4017
+  nameWithType: Class1.Issue4017
+- uid: BuildFromProject.Class1.Issue4392
+  name: Issue4392()
+  href: api/BuildFromProject.Class1.html#BuildFromProject_Class1_Issue4392
+  commentId: M:BuildFromProject.Class1.Issue4392
+  fullName: BuildFromProject.Class1.Issue4392()
+  nameWithType: Class1.Issue4392()
+- uid: BuildFromProject.Class1.Issue4392*
+  name: Issue4392
+  href: api/BuildFromProject.Class1.html#BuildFromProject_Class1_Issue4392_
+  commentId: Overload:BuildFromProject.Class1.Issue4392
+  isSpec: "True"
+  fullName: BuildFromProject.Class1.Issue4392
+  nameWithType: Class1.Issue4392
+- uid: BuildFromProject.Class1.Issue7484
+  name: Issue7484()
+  href: api/BuildFromProject.Class1.html#BuildFromProject_Class1_Issue7484
+  commentId: M:BuildFromProject.Class1.Issue7484
+  fullName: BuildFromProject.Class1.Issue7484()
+  nameWithType: Class1.Issue7484()
+- uid: BuildFromProject.Class1.Issue7484*
+  name: Issue7484
+  href: api/BuildFromProject.Class1.html#BuildFromProject_Class1_Issue7484_
+  commentId: Overload:BuildFromProject.Class1.Issue7484
+  isSpec: "True"
+  fullName: BuildFromProject.Class1.Issue7484
+  nameWithType: Class1.Issue7484
+- uid: BuildFromProject.Class1.Issue8665
+  name: Class1.Issue8665
+  href: api/BuildFromProject.Class1.Issue8665.html
+  commentId: T:BuildFromProject.Class1.Issue8665
+  fullName: BuildFromProject.Class1.Issue8665
+  nameWithType: Class1.Issue8665
+- uid: BuildFromProject.Class1.Issue8665.#ctor
+  name: Issue8665()
+  href: api/BuildFromProject.Class1.Issue8665.html#BuildFromProject_Class1_Issue8665__ctor
+  commentId: M:BuildFromProject.Class1.Issue8665.#ctor
+  name.vb: New()
+  fullName: BuildFromProject.Class1.Issue8665.Issue8665()
+  fullName.vb: BuildFromProject.Class1.Issue8665.New()
+  nameWithType: Class1.Issue8665.Issue8665()
+  nameWithType.vb: Class1.Issue8665.New()
+- uid: BuildFromProject.Class1.Issue8665.#ctor(System.Int32)
+  name: Issue8665(int)
+  href: api/BuildFromProject.Class1.Issue8665.html#BuildFromProject_Class1_Issue8665__ctor_System_Int32_
+  commentId: M:BuildFromProject.Class1.Issue8665.#ctor(System.Int32)
+  name.vb: New(Integer)
+  fullName: BuildFromProject.Class1.Issue8665.Issue8665(int)
+  fullName.vb: BuildFromProject.Class1.Issue8665.New(Integer)
+  nameWithType: Class1.Issue8665.Issue8665(int)
+  nameWithType.vb: Class1.Issue8665.New(Integer)
+- uid: BuildFromProject.Class1.Issue8665.#ctor(System.Int32,System.Char)
+  name: Issue8665(int, char)
+  href: api/BuildFromProject.Class1.Issue8665.html#BuildFromProject_Class1_Issue8665__ctor_System_Int32_System_Char_
+  commentId: M:BuildFromProject.Class1.Issue8665.#ctor(System.Int32,System.Char)
+  name.vb: New(Integer, Char)
+  fullName: BuildFromProject.Class1.Issue8665.Issue8665(int, char)
+  fullName.vb: BuildFromProject.Class1.Issue8665.New(Integer, Char)
+  nameWithType: Class1.Issue8665.Issue8665(int, char)
+  nameWithType.vb: Class1.Issue8665.New(Integer, Char)
+- uid: BuildFromProject.Class1.Issue8665.#ctor(System.Int32,System.Char,System.String)
+  name: Issue8665(int, char, string)
+  href: api/BuildFromProject.Class1.Issue8665.html#BuildFromProject_Class1_Issue8665__ctor_System_Int32_System_Char_System_String_
+  commentId: M:BuildFromProject.Class1.Issue8665.#ctor(System.Int32,System.Char,System.String)
+  name.vb: New(Integer, Char, String)
+  fullName: BuildFromProject.Class1.Issue8665.Issue8665(int, char, string)
+  fullName.vb: BuildFromProject.Class1.Issue8665.New(Integer, Char, String)
+  nameWithType: Class1.Issue8665.Issue8665(int, char, string)
+  nameWithType.vb: Class1.Issue8665.New(Integer, Char, String)
+- uid: BuildFromProject.Class1.Issue8665.#ctor*
+  name: Issue8665
+  href: api/BuildFromProject.Class1.Issue8665.html#BuildFromProject_Class1_Issue8665__ctor_
+  commentId: Overload:BuildFromProject.Class1.Issue8665.#ctor
+  isSpec: "True"
+  name.vb: New
+  fullName: BuildFromProject.Class1.Issue8665.Issue8665
+  fullName.vb: BuildFromProject.Class1.Issue8665.New
+  nameWithType: Class1.Issue8665.Issue8665
+  nameWithType.vb: Class1.Issue8665.New
+- uid: BuildFromProject.Class1.Issue8665.Bar
+  name: Bar
+  href: api/BuildFromProject.Class1.Issue8665.html#BuildFromProject_Class1_Issue8665_Bar
+  commentId: P:BuildFromProject.Class1.Issue8665.Bar
+  fullName: BuildFromProject.Class1.Issue8665.Bar
+  nameWithType: Class1.Issue8665.Bar
+- uid: BuildFromProject.Class1.Issue8665.Bar*
+  name: Bar
+  href: api/BuildFromProject.Class1.Issue8665.html#BuildFromProject_Class1_Issue8665_Bar_
+  commentId: Overload:BuildFromProject.Class1.Issue8665.Bar
+  isSpec: "True"
+  fullName: BuildFromProject.Class1.Issue8665.Bar
+  nameWithType: Class1.Issue8665.Bar
+- uid: BuildFromProject.Class1.Issue8665.Baz
+  name: Baz
+  href: api/BuildFromProject.Class1.Issue8665.html#BuildFromProject_Class1_Issue8665_Baz
+  commentId: P:BuildFromProject.Class1.Issue8665.Baz
+  fullName: BuildFromProject.Class1.Issue8665.Baz
+  nameWithType: Class1.Issue8665.Baz
+- uid: BuildFromProject.Class1.Issue8665.Baz*
+  name: Baz
+  href: api/BuildFromProject.Class1.Issue8665.html#BuildFromProject_Class1_Issue8665_Baz_
+  commentId: Overload:BuildFromProject.Class1.Issue8665.Baz
+  isSpec: "True"
+  fullName: BuildFromProject.Class1.Issue8665.Baz
+  nameWithType: Class1.Issue8665.Baz
+- uid: BuildFromProject.Class1.Issue8665.Foo
+  name: Foo
+  href: api/BuildFromProject.Class1.Issue8665.html#BuildFromProject_Class1_Issue8665_Foo
+  commentId: P:BuildFromProject.Class1.Issue8665.Foo
+  fullName: BuildFromProject.Class1.Issue8665.Foo
+  nameWithType: Class1.Issue8665.Foo
+- uid: BuildFromProject.Class1.Issue8665.Foo*
+  name: Foo
+  href: api/BuildFromProject.Class1.Issue8665.html#BuildFromProject_Class1_Issue8665_Foo_
+  commentId: Overload:BuildFromProject.Class1.Issue8665.Foo
+  isSpec: "True"
+  fullName: BuildFromProject.Class1.Issue8665.Foo
+  nameWithType: Class1.Issue8665.Foo
+- uid: BuildFromProject.Class1.Issue8696Attribute
+  name: Class1.Issue8696Attribute
+  href: api/BuildFromProject.Class1.Issue8696Attribute.html
+  commentId: T:BuildFromProject.Class1.Issue8696Attribute
+  fullName: BuildFromProject.Class1.Issue8696Attribute
+  nameWithType: Class1.Issue8696Attribute
+- uid: BuildFromProject.Class1.Issue8696Attribute.#ctor(System.String,System.Int32,System.Int32,System.String[],System.Boolean,System.Type)
+  name: Issue8696Attribute(string?, int, int, string[]?, bool, Type?)
+  href: api/BuildFromProject.Class1.Issue8696Attribute.html#BuildFromProject_Class1_Issue8696Attribute__ctor_System_String_System_Int32_System_Int32_System_String___System_Boolean_System_Type_
+  commentId: M:BuildFromProject.Class1.Issue8696Attribute.#ctor(System.String,System.Int32,System.Int32,System.String[],System.Boolean,System.Type)
+  name.vb: New(String, Integer, Integer, String(), Boolean, Type)
+  fullName: BuildFromProject.Class1.Issue8696Attribute.Issue8696Attribute(string?, int, int, string[]?, bool, System.Type?)
+  fullName.vb: BuildFromProject.Class1.Issue8696Attribute.New(String, Integer, Integer, String(), Boolean, System.Type)
+  nameWithType: Class1.Issue8696Attribute.Issue8696Attribute(string?, int, int, string[]?, bool, Type?)
+  nameWithType.vb: Class1.Issue8696Attribute.New(String, Integer, Integer, String(), Boolean, Type)
+- uid: BuildFromProject.Class1.Issue8696Attribute.#ctor*
+  name: Issue8696Attribute
+  href: api/BuildFromProject.Class1.Issue8696Attribute.html#BuildFromProject_Class1_Issue8696Attribute__ctor_
+  commentId: Overload:BuildFromProject.Class1.Issue8696Attribute.#ctor
+  isSpec: "True"
+  name.vb: New
+  fullName: BuildFromProject.Class1.Issue8696Attribute.Issue8696Attribute
+  fullName.vb: BuildFromProject.Class1.Issue8696Attribute.New
+  nameWithType: Class1.Issue8696Attribute.Issue8696Attribute
+  nameWithType.vb: Class1.Issue8696Attribute.New
+- uid: BuildFromProject.Class1.Issue8764*
+  name: Issue8764
+  href: api/BuildFromProject.Class1.html#BuildFromProject_Class1_Issue8764_
+  commentId: Overload:BuildFromProject.Class1.Issue8764
+  isSpec: "True"
+  fullName: BuildFromProject.Class1.Issue8764
+  nameWithType: Class1.Issue8764
+- uid: BuildFromProject.Class1.Issue8764``1
+  name: Issue8764<T>()
+  href: api/BuildFromProject.Class1.html#BuildFromProject_Class1_Issue8764__1
+  commentId: M:BuildFromProject.Class1.Issue8764``1
+  name.vb: Issue8764(Of T)()
+  fullName: BuildFromProject.Class1.Issue8764<T>()
+  fullName.vb: BuildFromProject.Class1.Issue8764(Of T)()
+  nameWithType: Class1.Issue8764<T>()
+  nameWithType.vb: Class1.Issue8764(Of T)()
+- uid: BuildFromProject.Class1.Issue8948
+  name: Class1.Issue8948
+  href: api/BuildFromProject.Class1.Issue8948.html
+  commentId: T:BuildFromProject.Class1.Issue8948
+  fullName: BuildFromProject.Class1.Issue8948
+  nameWithType: Class1.Issue8948
+- uid: BuildFromProject.Class1.Issue8948.DoNothing*
+  name: DoNothing
+  href: api/BuildFromProject.Class1.Issue8948.html#BuildFromProject_Class1_Issue8948_DoNothing_
+  commentId: Overload:BuildFromProject.Class1.Issue8948.DoNothing
+  isSpec: "True"
+  fullName: BuildFromProject.Class1.Issue8948.DoNothing
+  nameWithType: Class1.Issue8948.DoNothing
+- uid: BuildFromProject.Class1.Issue8948.DoNothing``1
+  name: DoNothing<T>()
+  href: api/BuildFromProject.Class1.Issue8948.html#BuildFromProject_Class1_Issue8948_DoNothing__1
+  commentId: M:BuildFromProject.Class1.Issue8948.DoNothing``1
+  name.vb: DoNothing(Of T)()
+  fullName: BuildFromProject.Class1.Issue8948.DoNothing<T>()
+  fullName.vb: BuildFromProject.Class1.Issue8948.DoNothing(Of T)()
+  nameWithType: Class1.Issue8948.DoNothing<T>()
+  nameWithType.vb: Class1.Issue8948.DoNothing(Of T)()
+- uid: BuildFromProject.Class1.Issue896
+  name: Issue896()
+  href: api/BuildFromProject.Class1.html#BuildFromProject_Class1_Issue896
+  commentId: M:BuildFromProject.Class1.Issue896
+  fullName: BuildFromProject.Class1.Issue896()
+  nameWithType: Class1.Issue896()
+- uid: BuildFromProject.Class1.Issue896*
+  name: Issue896
+  href: api/BuildFromProject.Class1.html#BuildFromProject_Class1_Issue896_
+  commentId: Overload:BuildFromProject.Class1.Issue896
+  isSpec: "True"
+  fullName: BuildFromProject.Class1.Issue896
+  nameWithType: Class1.Issue896
+- uid: BuildFromProject.Class1.Issue9216
+  name: Issue9216()
+  href: api/BuildFromProject.Class1.html#BuildFromProject_Class1_Issue9216
+  commentId: M:BuildFromProject.Class1.Issue9216
+  fullName: BuildFromProject.Class1.Issue9216()
+  nameWithType: Class1.Issue9216()
+- uid: BuildFromProject.Class1.Issue9216*
+  name: Issue9216
+  href: api/BuildFromProject.Class1.html#BuildFromProject_Class1_Issue9216_
+  commentId: Overload:BuildFromProject.Class1.Issue9216
+  isSpec: "True"
+  fullName: BuildFromProject.Class1.Issue9216
+  nameWithType: Class1.Issue9216
+- uid: BuildFromProject.Class1.Issue9260
+  name: Class1.Issue9260
+  href: api/BuildFromProject.Class1.Issue9260.html
+  commentId: T:BuildFromProject.Class1.Issue9260
+  fullName: BuildFromProject.Class1.Issue9260
+  nameWithType: Class1.Issue9260
+- uid: BuildFromProject.Class1.Issue9260.OldAndUnusedValue
+  name: OldAndUnusedValue
+  href: api/BuildFromProject.Class1.Issue9260.html#BuildFromProject_Class1_Issue9260_OldAndUnusedValue
+  commentId: F:BuildFromProject.Class1.Issue9260.OldAndUnusedValue
+  fullName: BuildFromProject.Class1.Issue9260.OldAndUnusedValue
+  nameWithType: Class1.Issue9260.OldAndUnusedValue
+- uid: BuildFromProject.Class1.Issue9260.OldAndUnusedValue2
+  name: OldAndUnusedValue2
+  href: api/BuildFromProject.Class1.Issue9260.html#BuildFromProject_Class1_Issue9260_OldAndUnusedValue2
+  commentId: F:BuildFromProject.Class1.Issue9260.OldAndUnusedValue2
+  fullName: BuildFromProject.Class1.Issue9260.OldAndUnusedValue2
+  nameWithType: Class1.Issue9260.OldAndUnusedValue2
+- uid: BuildFromProject.Class1.Issue9260.Value
+  name: Value
+  href: api/BuildFromProject.Class1.Issue9260.html#BuildFromProject_Class1_Issue9260_Value
+  commentId: F:BuildFromProject.Class1.Issue9260.Value
+  fullName: BuildFromProject.Class1.Issue9260.Value
+  nameWithType: Class1.Issue9260.Value
+- uid: BuildFromProject.Class1.Test`1
+  name: Class1.Test<T>
+  href: api/BuildFromProject.Class1.Test-1.html
+  commentId: T:BuildFromProject.Class1.Test`1
+  name.vb: Class1.Test(Of T)
+  fullName: BuildFromProject.Class1.Test<T>
+  fullName.vb: BuildFromProject.Class1.Test(Of T)
+  nameWithType: Class1.Test<T>
+  nameWithType.vb: Class1.Test(Of T)
+- uid: BuildFromProject.Class1.XmlCommentIncludeTag
+  name: XmlCommentIncludeTag()
+  href: api/BuildFromProject.Class1.html#BuildFromProject_Class1_XmlCommentIncludeTag
+  commentId: M:BuildFromProject.Class1.XmlCommentIncludeTag
+  fullName: BuildFromProject.Class1.XmlCommentIncludeTag()
+  nameWithType: Class1.XmlCommentIncludeTag()
+- uid: BuildFromProject.Class1.XmlCommentIncludeTag*
+  name: XmlCommentIncludeTag
+  href: api/BuildFromProject.Class1.html#BuildFromProject_Class1_XmlCommentIncludeTag_
+  commentId: Overload:BuildFromProject.Class1.XmlCommentIncludeTag
+  isSpec: "True"
+  fullName: BuildFromProject.Class1.XmlCommentIncludeTag
+  nameWithType: Class1.XmlCommentIncludeTag
+- uid: BuildFromProject.Dog
+  name: Dog
+  href: api/BuildFromProject.Dog.html
+  commentId: T:BuildFromProject.Dog
+  fullName: BuildFromProject.Dog
+  nameWithType: Dog
+- uid: BuildFromProject.Dog.#ctor(System.String,System.Int32)
+  name: Dog(string, int)
+  href: api/BuildFromProject.Dog.html#BuildFromProject_Dog__ctor_System_String_System_Int32_
+  commentId: M:BuildFromProject.Dog.#ctor(System.String,System.Int32)
+  name.vb: New(String, Integer)
+  fullName: BuildFromProject.Dog.Dog(string, int)
+  fullName.vb: BuildFromProject.Dog.New(String, Integer)
+  nameWithType: Dog.Dog(string, int)
+  nameWithType.vb: Dog.New(String, Integer)
+- uid: BuildFromProject.Dog.#ctor*
+  name: Dog
+  href: api/BuildFromProject.Dog.html#BuildFromProject_Dog__ctor_
+  commentId: Overload:BuildFromProject.Dog.#ctor
+  isSpec: "True"
+  name.vb: New
+  fullName: BuildFromProject.Dog.Dog
+  fullName.vb: BuildFromProject.Dog.New
+  nameWithType: Dog.Dog
+  nameWithType.vb: Dog.New
+- uid: BuildFromProject.Dog.Age
+  name: Age
+  href: api/BuildFromProject.Dog.html#BuildFromProject_Dog_Age
+  commentId: P:BuildFromProject.Dog.Age
+  fullName: BuildFromProject.Dog.Age
+  nameWithType: Dog.Age
+- uid: BuildFromProject.Dog.Age*
+  name: Age
+  href: api/BuildFromProject.Dog.html#BuildFromProject_Dog_Age_
+  commentId: Overload:BuildFromProject.Dog.Age
+  isSpec: "True"
+  fullName: BuildFromProject.Dog.Age
+  nameWithType: Dog.Age
+- uid: BuildFromProject.Dog.Name
+  name: Name
+  href: api/BuildFromProject.Dog.html#BuildFromProject_Dog_Name
+  commentId: P:BuildFromProject.Dog.Name
+  fullName: BuildFromProject.Dog.Name
+  nameWithType: Dog.Name
+- uid: BuildFromProject.Dog.Name*
+  name: Name
+  href: api/BuildFromProject.Dog.html#BuildFromProject_Dog_Name_
+  commentId: Overload:BuildFromProject.Dog.Name
+  isSpec: "True"
+  fullName: BuildFromProject.Dog.Name
+  nameWithType: Dog.Name
+- uid: BuildFromProject.IInheritdoc
+  name: IInheritdoc
+  href: api/BuildFromProject.IInheritdoc.html
+  commentId: T:BuildFromProject.IInheritdoc
+  fullName: BuildFromProject.IInheritdoc
+  nameWithType: IInheritdoc
+- uid: BuildFromProject.IInheritdoc.Issue7629
+  name: Issue7629()
+  href: api/BuildFromProject.IInheritdoc.html#BuildFromProject_IInheritdoc_Issue7629
+  commentId: M:BuildFromProject.IInheritdoc.Issue7629
+  fullName: BuildFromProject.IInheritdoc.Issue7629()
+  nameWithType: IInheritdoc.Issue7629()
+- uid: BuildFromProject.IInheritdoc.Issue7629*
+  name: Issue7629
+  href: api/BuildFromProject.IInheritdoc.html#BuildFromProject_IInheritdoc_Issue7629_
+  commentId: Overload:BuildFromProject.IInheritdoc.Issue7629
+  isSpec: "True"
+  fullName: BuildFromProject.IInheritdoc.Issue7629
+  nameWithType: IInheritdoc.Issue7629
+- uid: BuildFromProject.Inheritdoc
+  name: Inheritdoc
+  href: api/BuildFromProject.Inheritdoc.html
+  commentId: T:BuildFromProject.Inheritdoc
+  fullName: BuildFromProject.Inheritdoc
+  nameWithType: Inheritdoc
+- uid: BuildFromProject.Inheritdoc.Dispose
+  name: Dispose()
+  href: api/BuildFromProject.Inheritdoc.html#BuildFromProject_Inheritdoc_Dispose
+  commentId: M:BuildFromProject.Inheritdoc.Dispose
+  fullName: BuildFromProject.Inheritdoc.Dispose()
+  nameWithType: Inheritdoc.Dispose()
+- uid: BuildFromProject.Inheritdoc.Dispose*
+  name: Dispose
+  href: api/BuildFromProject.Inheritdoc.html#BuildFromProject_Inheritdoc_Dispose_
+  commentId: Overload:BuildFromProject.Inheritdoc.Dispose
+  isSpec: "True"
+  fullName: BuildFromProject.Inheritdoc.Dispose
+  nameWithType: Inheritdoc.Dispose
+- uid: BuildFromProject.Inheritdoc.Issue6366
+  name: Inheritdoc.Issue6366
+  href: api/BuildFromProject.Inheritdoc.Issue6366.html
+  commentId: T:BuildFromProject.Inheritdoc.Issue6366
+  fullName: BuildFromProject.Inheritdoc.Issue6366
+  nameWithType: Inheritdoc.Issue6366
+- uid: BuildFromProject.Inheritdoc.Issue6366.Class1`1
+  name: Inheritdoc.Issue6366.Class1<T>
+  href: api/BuildFromProject.Inheritdoc.Issue6366.Class1-1.html
+  commentId: T:BuildFromProject.Inheritdoc.Issue6366.Class1`1
+  name.vb: Inheritdoc.Issue6366.Class1(Of T)
+  fullName: BuildFromProject.Inheritdoc.Issue6366.Class1<T>
+  fullName.vb: BuildFromProject.Inheritdoc.Issue6366.Class1(Of T)
+  nameWithType: Inheritdoc.Issue6366.Class1<T>
+  nameWithType.vb: Inheritdoc.Issue6366.Class1(Of T)
+- uid: BuildFromProject.Inheritdoc.Issue6366.Class1`1.TestMethod1(`0,System.Int32)
+  name: TestMethod1(T, int)
+  href: api/BuildFromProject.Inheritdoc.Issue6366.Class1-1.html#BuildFromProject_Inheritdoc_Issue6366_Class1_1_TestMethod1__0_System_Int32_
+  commentId: M:BuildFromProject.Inheritdoc.Issue6366.Class1`1.TestMethod1(`0,System.Int32)
+  name.vb: TestMethod1(T, Integer)
+  fullName: BuildFromProject.Inheritdoc.Issue6366.Class1<T>.TestMethod1(T, int)
+  fullName.vb: BuildFromProject.Inheritdoc.Issue6366.Class1(Of T).TestMethod1(T, Integer)
+  nameWithType: Inheritdoc.Issue6366.Class1<T>.TestMethod1(T, int)
+  nameWithType.vb: Inheritdoc.Issue6366.Class1(Of T).TestMethod1(T, Integer)
+- uid: BuildFromProject.Inheritdoc.Issue6366.Class1`1.TestMethod1*
+  name: TestMethod1
+  href: api/BuildFromProject.Inheritdoc.Issue6366.Class1-1.html#BuildFromProject_Inheritdoc_Issue6366_Class1_1_TestMethod1_
+  commentId: Overload:BuildFromProject.Inheritdoc.Issue6366.Class1`1.TestMethod1
+  isSpec: "True"
+  fullName: BuildFromProject.Inheritdoc.Issue6366.Class1<T>.TestMethod1
+  fullName.vb: BuildFromProject.Inheritdoc.Issue6366.Class1(Of T).TestMethod1
+  nameWithType: Inheritdoc.Issue6366.Class1<T>.TestMethod1
+  nameWithType.vb: Inheritdoc.Issue6366.Class1(Of T).TestMethod1
+- uid: BuildFromProject.Inheritdoc.Issue6366.Class2
+  name: Inheritdoc.Issue6366.Class2
+  href: api/BuildFromProject.Inheritdoc.Issue6366.Class2.html
+  commentId: T:BuildFromProject.Inheritdoc.Issue6366.Class2
+  fullName: BuildFromProject.Inheritdoc.Issue6366.Class2
+  nameWithType: Inheritdoc.Issue6366.Class2
+- uid: BuildFromProject.Inheritdoc.Issue6366.Class2.TestMethod1(System.Boolean,System.Int32)
+  name: TestMethod1(bool, int)
+  href: api/BuildFromProject.Inheritdoc.Issue6366.Class2.html#BuildFromProject_Inheritdoc_Issue6366_Class2_TestMethod1_System_Boolean_System_Int32_
+  commentId: M:BuildFromProject.Inheritdoc.Issue6366.Class2.TestMethod1(System.Boolean,System.Int32)
+  name.vb: TestMethod1(Boolean, Integer)
+  fullName: BuildFromProject.Inheritdoc.Issue6366.Class2.TestMethod1(bool, int)
+  fullName.vb: BuildFromProject.Inheritdoc.Issue6366.Class2.TestMethod1(Boolean, Integer)
+  nameWithType: Inheritdoc.Issue6366.Class2.TestMethod1(bool, int)
+  nameWithType.vb: Inheritdoc.Issue6366.Class2.TestMethod1(Boolean, Integer)
+- uid: BuildFromProject.Inheritdoc.Issue6366.Class2.TestMethod1*
+  name: TestMethod1
+  href: api/BuildFromProject.Inheritdoc.Issue6366.Class2.html#BuildFromProject_Inheritdoc_Issue6366_Class2_TestMethod1_
+  commentId: Overload:BuildFromProject.Inheritdoc.Issue6366.Class2.TestMethod1
+  isSpec: "True"
+  fullName: BuildFromProject.Inheritdoc.Issue6366.Class2.TestMethod1
+  nameWithType: Inheritdoc.Issue6366.Class2.TestMethod1
+- uid: BuildFromProject.Inheritdoc.Issue7035
+  name: Inheritdoc.Issue7035
+  href: api/BuildFromProject.Inheritdoc.Issue7035.html
+  commentId: T:BuildFromProject.Inheritdoc.Issue7035
+  fullName: BuildFromProject.Inheritdoc.Issue7035
+  nameWithType: Inheritdoc.Issue7035
+- uid: BuildFromProject.Inheritdoc.Issue7035.A
+  name: A()
+  href: api/BuildFromProject.Inheritdoc.Issue7035.html#BuildFromProject_Inheritdoc_Issue7035_A
+  commentId: M:BuildFromProject.Inheritdoc.Issue7035.A
+  fullName: BuildFromProject.Inheritdoc.Issue7035.A()
+  nameWithType: Inheritdoc.Issue7035.A()
+- uid: BuildFromProject.Inheritdoc.Issue7035.A*
+  name: A
+  href: api/BuildFromProject.Inheritdoc.Issue7035.html#BuildFromProject_Inheritdoc_Issue7035_A_
+  commentId: Overload:BuildFromProject.Inheritdoc.Issue7035.A
+  isSpec: "True"
+  fullName: BuildFromProject.Inheritdoc.Issue7035.A
+  nameWithType: Inheritdoc.Issue7035.A
+- uid: BuildFromProject.Inheritdoc.Issue7035.B
+  name: B()
+  href: api/BuildFromProject.Inheritdoc.Issue7035.html#BuildFromProject_Inheritdoc_Issue7035_B
+  commentId: M:BuildFromProject.Inheritdoc.Issue7035.B
+  fullName: BuildFromProject.Inheritdoc.Issue7035.B()
+  nameWithType: Inheritdoc.Issue7035.B()
+- uid: BuildFromProject.Inheritdoc.Issue7035.B*
+  name: B
+  href: api/BuildFromProject.Inheritdoc.Issue7035.html#BuildFromProject_Inheritdoc_Issue7035_B_
+  commentId: Overload:BuildFromProject.Inheritdoc.Issue7035.B
+  isSpec: "True"
+  fullName: BuildFromProject.Inheritdoc.Issue7035.B
+  nameWithType: Inheritdoc.Issue7035.B
+- uid: BuildFromProject.Inheritdoc.Issue7484
+  name: Inheritdoc.Issue7484
+  href: api/BuildFromProject.Inheritdoc.Issue7484.html
+  commentId: T:BuildFromProject.Inheritdoc.Issue7484
+  fullName: BuildFromProject.Inheritdoc.Issue7484
+  nameWithType: Inheritdoc.Issue7484
+- uid: BuildFromProject.Inheritdoc.Issue7484.#ctor
+  name: Issue7484()
+  href: api/BuildFromProject.Inheritdoc.Issue7484.html#BuildFromProject_Inheritdoc_Issue7484__ctor
+  commentId: M:BuildFromProject.Inheritdoc.Issue7484.#ctor
+  name.vb: New()
+  fullName: BuildFromProject.Inheritdoc.Issue7484.Issue7484()
+  fullName.vb: BuildFromProject.Inheritdoc.Issue7484.New()
+  nameWithType: Inheritdoc.Issue7484.Issue7484()
+  nameWithType.vb: Inheritdoc.Issue7484.New()
+- uid: BuildFromProject.Inheritdoc.Issue7484.#ctor*
+  name: Issue7484
+  href: api/BuildFromProject.Inheritdoc.Issue7484.html#BuildFromProject_Inheritdoc_Issue7484__ctor_
+  commentId: Overload:BuildFromProject.Inheritdoc.Issue7484.#ctor
+  isSpec: "True"
+  name.vb: New
+  fullName: BuildFromProject.Inheritdoc.Issue7484.Issue7484
+  fullName.vb: BuildFromProject.Inheritdoc.Issue7484.New
+  nameWithType: Inheritdoc.Issue7484.Issue7484
+  nameWithType.vb: Inheritdoc.Issue7484.New
+- uid: BuildFromProject.Inheritdoc.Issue7484.BoolReturningMethod(System.Boolean)
+  name: BoolReturningMethod(bool)
+  href: api/BuildFromProject.Inheritdoc.Issue7484.html#BuildFromProject_Inheritdoc_Issue7484_BoolReturningMethod_System_Boolean_
+  commentId: M:BuildFromProject.Inheritdoc.Issue7484.BoolReturningMethod(System.Boolean)
+  name.vb: BoolReturningMethod(Boolean)
+  fullName: BuildFromProject.Inheritdoc.Issue7484.BoolReturningMethod(bool)
+  fullName.vb: BuildFromProject.Inheritdoc.Issue7484.BoolReturningMethod(Boolean)
+  nameWithType: Inheritdoc.Issue7484.BoolReturningMethod(bool)
+  nameWithType.vb: Inheritdoc.Issue7484.BoolReturningMethod(Boolean)
+- uid: BuildFromProject.Inheritdoc.Issue7484.BoolReturningMethod*
+  name: BoolReturningMethod
+  href: api/BuildFromProject.Inheritdoc.Issue7484.html#BuildFromProject_Inheritdoc_Issue7484_BoolReturningMethod_
+  commentId: Overload:BuildFromProject.Inheritdoc.Issue7484.BoolReturningMethod
+  isSpec: "True"
+  fullName: BuildFromProject.Inheritdoc.Issue7484.BoolReturningMethod
+  nameWithType: Inheritdoc.Issue7484.BoolReturningMethod
+- uid: BuildFromProject.Inheritdoc.Issue7484.DoDad
+  name: DoDad
+  href: api/BuildFromProject.Inheritdoc.Issue7484.html#BuildFromProject_Inheritdoc_Issue7484_DoDad
+  commentId: P:BuildFromProject.Inheritdoc.Issue7484.DoDad
+  fullName: BuildFromProject.Inheritdoc.Issue7484.DoDad
+  nameWithType: Inheritdoc.Issue7484.DoDad
+- uid: BuildFromProject.Inheritdoc.Issue7484.DoDad*
+  name: DoDad
+  href: api/BuildFromProject.Inheritdoc.Issue7484.html#BuildFromProject_Inheritdoc_Issue7484_DoDad_
+  commentId: Overload:BuildFromProject.Inheritdoc.Issue7484.DoDad
+  isSpec: "True"
+  fullName: BuildFromProject.Inheritdoc.Issue7484.DoDad
+  nameWithType: Inheritdoc.Issue7484.DoDad
+- uid: BuildFromProject.Inheritdoc.Issue7628
+  name: Issue7628()
+  href: api/BuildFromProject.Inheritdoc.html#BuildFromProject_Inheritdoc_Issue7628
+  commentId: M:BuildFromProject.Inheritdoc.Issue7628
+  fullName: BuildFromProject.Inheritdoc.Issue7628()
+  nameWithType: Inheritdoc.Issue7628()
+- uid: BuildFromProject.Inheritdoc.Issue7628*
+  name: Issue7628
+  href: api/BuildFromProject.Inheritdoc.html#BuildFromProject_Inheritdoc_Issue7628_
+  commentId: Overload:BuildFromProject.Inheritdoc.Issue7628
+  isSpec: "True"
+  fullName: BuildFromProject.Inheritdoc.Issue7628
+  nameWithType: Inheritdoc.Issue7628
+- uid: BuildFromProject.Inheritdoc.Issue7629
+  name: Issue7629()
+  href: api/BuildFromProject.Inheritdoc.html#BuildFromProject_Inheritdoc_Issue7629
+  commentId: M:BuildFromProject.Inheritdoc.Issue7629
+  fullName: BuildFromProject.Inheritdoc.Issue7629()
+  nameWithType: Inheritdoc.Issue7629()
+- uid: BuildFromProject.Inheritdoc.Issue7629*
+  name: Issue7629
+  href: api/BuildFromProject.Inheritdoc.html#BuildFromProject_Inheritdoc_Issue7629_
+  commentId: Overload:BuildFromProject.Inheritdoc.Issue7629
+  isSpec: "True"
+  fullName: BuildFromProject.Inheritdoc.Issue7629
+  nameWithType: Inheritdoc.Issue7629
+- uid: BuildFromProject.Inheritdoc.Issue8101
+  name: Inheritdoc.Issue8101
+  href: api/BuildFromProject.Inheritdoc.Issue8101.html
+  commentId: T:BuildFromProject.Inheritdoc.Issue8101
+  fullName: BuildFromProject.Inheritdoc.Issue8101
+  nameWithType: Inheritdoc.Issue8101
+- uid: BuildFromProject.Inheritdoc.Issue8101.Tween(System.Int32,System.Int32,System.Single,System.Action{System.Int32})
+  name: Tween(int, int, float, Action<int>)
+  href: api/BuildFromProject.Inheritdoc.Issue8101.html#BuildFromProject_Inheritdoc_Issue8101_Tween_System_Int32_System_Int32_System_Single_System_Action_System_Int32__
+  commentId: M:BuildFromProject.Inheritdoc.Issue8101.Tween(System.Int32,System.Int32,System.Single,System.Action{System.Int32})
+  name.vb: Tween(Integer, Integer, Single, Action(Of Integer))
+  fullName: BuildFromProject.Inheritdoc.Issue8101.Tween(int, int, float, System.Action<int>)
+  fullName.vb: BuildFromProject.Inheritdoc.Issue8101.Tween(Integer, Integer, Single, System.Action(Of Integer))
+  nameWithType: Inheritdoc.Issue8101.Tween(int, int, float, Action<int>)
+  nameWithType.vb: Inheritdoc.Issue8101.Tween(Integer, Integer, Single, Action(Of Integer))
+- uid: BuildFromProject.Inheritdoc.Issue8101.Tween(System.Single,System.Single,System.Single,System.Action{System.Single})
+  name: Tween(float, float, float, Action<float>)
+  href: api/BuildFromProject.Inheritdoc.Issue8101.html#BuildFromProject_Inheritdoc_Issue8101_Tween_System_Single_System_Single_System_Single_System_Action_System_Single__
+  commentId: M:BuildFromProject.Inheritdoc.Issue8101.Tween(System.Single,System.Single,System.Single,System.Action{System.Single})
+  name.vb: Tween(Single, Single, Single, Action(Of Single))
+  fullName: BuildFromProject.Inheritdoc.Issue8101.Tween(float, float, float, System.Action<float>)
+  fullName.vb: BuildFromProject.Inheritdoc.Issue8101.Tween(Single, Single, Single, System.Action(Of Single))
+  nameWithType: Inheritdoc.Issue8101.Tween(float, float, float, Action<float>)
+  nameWithType.vb: Inheritdoc.Issue8101.Tween(Single, Single, Single, Action(Of Single))
+- uid: BuildFromProject.Inheritdoc.Issue8101.Tween*
+  name: Tween
+  href: api/BuildFromProject.Inheritdoc.Issue8101.html#BuildFromProject_Inheritdoc_Issue8101_Tween_
+  commentId: Overload:BuildFromProject.Inheritdoc.Issue8101.Tween
+  isSpec: "True"
+  fullName: BuildFromProject.Inheritdoc.Issue8101.Tween
+  nameWithType: Inheritdoc.Issue8101.Tween
+- uid: BuildFromProject.Inheritdoc.Issue8129
+  name: Inheritdoc.Issue8129
+  href: api/BuildFromProject.Inheritdoc.Issue8129.html
+  commentId: T:BuildFromProject.Inheritdoc.Issue8129
+  fullName: BuildFromProject.Inheritdoc.Issue8129
+  nameWithType: Inheritdoc.Issue8129
+- uid: BuildFromProject.Inheritdoc.Issue8129.#ctor(System.String)
+  name: Issue8129(string)
+  href: api/BuildFromProject.Inheritdoc.Issue8129.html#BuildFromProject_Inheritdoc_Issue8129__ctor_System_String_
+  commentId: M:BuildFromProject.Inheritdoc.Issue8129.#ctor(System.String)
+  name.vb: New(String)
+  fullName: BuildFromProject.Inheritdoc.Issue8129.Issue8129(string)
+  fullName.vb: BuildFromProject.Inheritdoc.Issue8129.New(String)
+  nameWithType: Inheritdoc.Issue8129.Issue8129(string)
+  nameWithType.vb: Inheritdoc.Issue8129.New(String)
+- uid: BuildFromProject.Inheritdoc.Issue8129.#ctor*
+  name: Issue8129
+  href: api/BuildFromProject.Inheritdoc.Issue8129.html#BuildFromProject_Inheritdoc_Issue8129__ctor_
+  commentId: Overload:BuildFromProject.Inheritdoc.Issue8129.#ctor
+  isSpec: "True"
+  name.vb: New
+  fullName: BuildFromProject.Inheritdoc.Issue8129.Issue8129
+  fullName.vb: BuildFromProject.Inheritdoc.Issue8129.New
+  nameWithType: Inheritdoc.Issue8129.Issue8129
+  nameWithType.vb: Inheritdoc.Issue8129.New
+- uid: BuildFromProject.Issue8540
+  name: BuildFromProject.Issue8540
+  href: api/BuildFromProject.Issue8540.html
+- uid: BuildFromProject.Issue8540.A
+  name: BuildFromProject.Issue8540.A
+  href: api/BuildFromProject.Issue8540.A.html
+  commentId: N:BuildFromProject.Issue8540.A
+  fullName: BuildFromProject.Issue8540.A
+  nameWithType: BuildFromProject.Issue8540.A
+- uid: BuildFromProject.Issue8540.A.A
+  name: A
+  href: api/BuildFromProject.Issue8540.A.A.html
+  commentId: T:BuildFromProject.Issue8540.A.A
+  fullName: BuildFromProject.Issue8540.A.A
+  nameWithType: A
+- uid: BuildFromProject.Issue8540.B
+  name: BuildFromProject.Issue8540.B
+  href: api/BuildFromProject.Issue8540.B.html
+  commentId: N:BuildFromProject.Issue8540.B
+  fullName: BuildFromProject.Issue8540.B
+  nameWithType: BuildFromProject.Issue8540.B
+- uid: BuildFromProject.Issue8540.B.B
+  name: B
+  href: api/BuildFromProject.Issue8540.B.B.html
+  commentId: T:BuildFromProject.Issue8540.B.B
+  fullName: BuildFromProject.Issue8540.B.B
+  nameWithType: B
+- uid: BuildFromProject.Issue8725
+  name: Issue8725
+  href: api/BuildFromProject.Issue8725.html
+  commentId: T:BuildFromProject.Issue8725
+  fullName: BuildFromProject.Issue8725
+  nameWithType: Issue8725
+- uid: BuildFromProject.Issue8725.MoreOperations
+  name: MoreOperations()
+  href: api/BuildFromProject.Issue8725.html#BuildFromProject_Issue8725_MoreOperations
+  commentId: M:BuildFromProject.Issue8725.MoreOperations
+  fullName: BuildFromProject.Issue8725.MoreOperations()
+  nameWithType: Issue8725.MoreOperations()
+- uid: BuildFromProject.Issue8725.MoreOperations*
+  name: MoreOperations
+  href: api/BuildFromProject.Issue8725.html#BuildFromProject_Issue8725_MoreOperations_
+  commentId: Overload:BuildFromProject.Issue8725.MoreOperations
+  isSpec: "True"
+  fullName: BuildFromProject.Issue8725.MoreOperations
+  nameWithType: Issue8725.MoreOperations
+- uid: BuildFromProject.Issue8725.MyOperation
+  name: MyOperation()
+  href: api/BuildFromProject.Issue8725.html#BuildFromProject_Issue8725_MyOperation
+  commentId: M:BuildFromProject.Issue8725.MyOperation
+  fullName: BuildFromProject.Issue8725.MyOperation()
+  nameWithType: Issue8725.MyOperation()
+- uid: BuildFromProject.Issue8725.MyOperation*
+  name: MyOperation
+  href: api/BuildFromProject.Issue8725.html#BuildFromProject_Issue8725_MyOperation_
+  commentId: Overload:BuildFromProject.Issue8725.MyOperation
+  isSpec: "True"
+  fullName: BuildFromProject.Issue8725.MyOperation
+  nameWithType: Issue8725.MyOperation
+- uid: BuildFromVBSourceCode
+  name: BuildFromVBSourceCode
+  href: api/BuildFromVBSourceCode.html
+  commentId: N:BuildFromVBSourceCode
+  fullName: BuildFromVBSourceCode
+  nameWithType: BuildFromVBSourceCode
+- uid: BuildFromVBSourceCode.BaseClass1
+  name: BaseClass1
+  href: api/BuildFromVBSourceCode.BaseClass1.html
+  commentId: T:BuildFromVBSourceCode.BaseClass1
+  fullName: BuildFromVBSourceCode.BaseClass1
+  nameWithType: BaseClass1
+- uid: BuildFromVBSourceCode.BaseClass1.WithDeclarationKeyword(BuildFromVBSourceCode.Class1)
+  name: WithDeclarationKeyword(Class1)
+  href: api/BuildFromVBSourceCode.BaseClass1.html#BuildFromVBSourceCode_BaseClass1_WithDeclarationKeyword_BuildFromVBSourceCode_Class1_
+  commentId: M:BuildFromVBSourceCode.BaseClass1.WithDeclarationKeyword(BuildFromVBSourceCode.Class1)
+  fullName: BuildFromVBSourceCode.BaseClass1.WithDeclarationKeyword(BuildFromVBSourceCode.Class1)
+  nameWithType: BaseClass1.WithDeclarationKeyword(Class1)
+- uid: BuildFromVBSourceCode.BaseClass1.WithDeclarationKeyword*
+  name: WithDeclarationKeyword
+  href: api/BuildFromVBSourceCode.BaseClass1.html#BuildFromVBSourceCode_BaseClass1_WithDeclarationKeyword_
+  commentId: Overload:BuildFromVBSourceCode.BaseClass1.WithDeclarationKeyword
+  isSpec: "True"
+  fullName: BuildFromVBSourceCode.BaseClass1.WithDeclarationKeyword
+  nameWithType: BaseClass1.WithDeclarationKeyword
+- uid: BuildFromVBSourceCode.Class1
+  name: Class1
+  href: api/BuildFromVBSourceCode.Class1.html
+  commentId: T:BuildFromVBSourceCode.Class1
+  fullName: BuildFromVBSourceCode.Class1
+  nameWithType: Class1
+- uid: BuildFromVBSourceCode.Class1.Keyword
+  name: Keyword
+  href: api/BuildFromVBSourceCode.Class1.html#BuildFromVBSourceCode_Class1_Keyword
+  commentId: P:BuildFromVBSourceCode.Class1.Keyword
+  fullName: BuildFromVBSourceCode.Class1.Keyword
+  nameWithType: Class1.Keyword
+- uid: BuildFromVBSourceCode.Class1.Keyword*
+  name: Keyword
+  href: api/BuildFromVBSourceCode.Class1.html#BuildFromVBSourceCode_Class1_Keyword_
+  commentId: Overload:BuildFromVBSourceCode.Class1.Keyword
+  isSpec: "True"
+  fullName: BuildFromVBSourceCode.Class1.Keyword
+  nameWithType: Class1.Keyword
+- uid: BuildFromVBSourceCode.Class1.Value(System.String)
+  name: Value(string)
+  href: api/BuildFromVBSourceCode.Class1.html#BuildFromVBSourceCode_Class1_Value_System_String_
+  commentId: M:BuildFromVBSourceCode.Class1.Value(System.String)
+  name.vb: Value(String)
+  fullName: BuildFromVBSourceCode.Class1.Value(string)
+  fullName.vb: BuildFromVBSourceCode.Class1.Value(String)
+  nameWithType: Class1.Value(string)
+  nameWithType.vb: Class1.Value(String)
+- uid: BuildFromVBSourceCode.Class1.Value*
+  name: Value
+  href: api/BuildFromVBSourceCode.Class1.html#BuildFromVBSourceCode_Class1_Value_
+  commentId: Overload:BuildFromVBSourceCode.Class1.Value
+  isSpec: "True"
+  fullName: BuildFromVBSourceCode.Class1.Value
+  nameWithType: Class1.Value
+- uid: BuildFromVBSourceCode.Class1.ValueClass
+  name: ValueClass
+  href: api/BuildFromVBSourceCode.Class1.html#BuildFromVBSourceCode_Class1_ValueClass
+  commentId: F:BuildFromVBSourceCode.Class1.ValueClass
+  fullName: BuildFromVBSourceCode.Class1.ValueClass
+  nameWithType: Class1.ValueClass
+- uid: BuildFromVBSourceCode.Class1.WithDeclarationKeyword(BuildFromVBSourceCode.Class1)
+  name: WithDeclarationKeyword(Class1)
+  href: api/BuildFromVBSourceCode.Class1.html#BuildFromVBSourceCode_Class1_WithDeclarationKeyword_BuildFromVBSourceCode_Class1_
+  commentId: M:BuildFromVBSourceCode.Class1.WithDeclarationKeyword(BuildFromVBSourceCode.Class1)
+  fullName: BuildFromVBSourceCode.Class1.WithDeclarationKeyword(BuildFromVBSourceCode.Class1)
+  nameWithType: Class1.WithDeclarationKeyword(Class1)
+- uid: BuildFromVBSourceCode.Class1.WithDeclarationKeyword*
+  name: WithDeclarationKeyword
+  href: api/BuildFromVBSourceCode.Class1.html#BuildFromVBSourceCode_Class1_WithDeclarationKeyword_
+  commentId: Overload:BuildFromVBSourceCode.Class1.WithDeclarationKeyword
+  isSpec: "True"
+  fullName: BuildFromVBSourceCode.Class1.WithDeclarationKeyword
+  nameWithType: Class1.WithDeclarationKeyword
+- uid: CatLibrary
+  name: CatLibrary
+  href: api/CatLibrary.html
+  commentId: N:CatLibrary
+  fullName: CatLibrary
+  nameWithType: CatLibrary
+- uid: CatLibrary.CatException`1
+  name: CatException<T>
+  href: api/CatLibrary.CatException-1.html
+  commentId: T:CatLibrary.CatException`1
+  name.vb: CatException(Of T)
+  fullName: CatLibrary.CatException<T>
+  fullName.vb: CatLibrary.CatException(Of T)
+  nameWithType: CatException<T>
+  nameWithType.vb: CatException(Of T)
+- uid: CatLibrary.Cat`2
+  name: Cat<T, K>
+  href: api/CatLibrary.Cat-2.html
+  commentId: T:CatLibrary.Cat`2
+  name.vb: Cat(Of T, K)
+  fullName: CatLibrary.Cat<T, K>
+  fullName.vb: CatLibrary.Cat(Of T, K)
+  nameWithType: Cat<T, K>
+  nameWithType.vb: Cat(Of T, K)
+- uid: CatLibrary.Cat`2.#ctor
+  name: Cat()
+  href: api/CatLibrary.Cat-2.html#CatLibrary_Cat_2__ctor
+  commentId: M:CatLibrary.Cat`2.#ctor
+  name.vb: New()
+  fullName: CatLibrary.Cat<T, K>.Cat()
+  fullName.vb: CatLibrary.Cat(Of T, K).New()
+  nameWithType: Cat<T, K>.Cat()
+  nameWithType.vb: Cat(Of T, K).New()
+- uid: CatLibrary.Cat`2.#ctor(System.String,System.Int32@,System.String,System.Boolean)
+  name: Cat(string, out int, string, bool)
+  href: api/CatLibrary.Cat-2.html#CatLibrary_Cat_2__ctor_System_String_System_Int32__System_String_System_Boolean_
+  commentId: M:CatLibrary.Cat`2.#ctor(System.String,System.Int32@,System.String,System.Boolean)
+  name.vb: New(String, Integer, String, Boolean)
+  fullName: CatLibrary.Cat<T, K>.Cat(string, out int, string, bool)
+  fullName.vb: CatLibrary.Cat(Of T, K).New(String, Integer, String, Boolean)
+  nameWithType: Cat<T, K>.Cat(string, out int, string, bool)
+  nameWithType.vb: Cat(Of T, K).New(String, Integer, String, Boolean)
+- uid: CatLibrary.Cat`2.#ctor(`0)
+  name: Cat(T)
+  href: api/CatLibrary.Cat-2.html#CatLibrary_Cat_2__ctor__0_
+  commentId: M:CatLibrary.Cat`2.#ctor(`0)
+  name.vb: New(T)
+  fullName: CatLibrary.Cat<T, K>.Cat(T)
+  fullName.vb: CatLibrary.Cat(Of T, K).New(T)
+  nameWithType: Cat<T, K>.Cat(T)
+  nameWithType.vb: Cat(Of T, K).New(T)
+- uid: CatLibrary.Cat`2.#ctor*
+  name: Cat
+  href: api/CatLibrary.Cat-2.html#CatLibrary_Cat_2__ctor_
+  commentId: Overload:CatLibrary.Cat`2.#ctor
+  isSpec: "True"
+  name.vb: New
+  fullName: CatLibrary.Cat<T, K>.Cat
+  fullName.vb: CatLibrary.Cat(Of T, K).New
+  nameWithType: Cat<T, K>.Cat
+  nameWithType.vb: Cat(Of T, K).New
+- uid: CatLibrary.Cat`2.Age
+  name: Age
+  href: api/CatLibrary.Cat-2.html#CatLibrary_Cat_2_Age
+  commentId: P:CatLibrary.Cat`2.Age
+  fullName: CatLibrary.Cat<T, K>.Age
+  fullName.vb: CatLibrary.Cat(Of T, K).Age
+  nameWithType: Cat<T, K>.Age
+  nameWithType.vb: Cat(Of T, K).Age
+- uid: CatLibrary.Cat`2.Age*
+  name: Age
+  href: api/CatLibrary.Cat-2.html#CatLibrary_Cat_2_Age_
+  commentId: Overload:CatLibrary.Cat`2.Age
+  isSpec: "True"
+  fullName: CatLibrary.Cat<T, K>.Age
+  fullName.vb: CatLibrary.Cat(Of T, K).Age
+  nameWithType: Cat<T, K>.Age
+  nameWithType.vb: Cat(Of T, K).Age
+- uid: CatLibrary.Cat`2.CalculateFood(System.DateTime)
+  name: Override CalculateFood Name
+  href: api/CatLibrary.Cat-2.html#CatLibrary_Cat_2_CalculateFood_System_DateTime_
+  commentId: M:CatLibrary.Cat`2.CalculateFood(System.DateTime)
+  name.vb: CalculateFood(Date)
+  fullName: CatLibrary.Cat<T, K>.CalculateFood(System.DateTime)
+  fullName.vb: CatLibrary.Cat(Of T, K).CalculateFood(Date)
+  nameWithType: Cat<T, K>.CalculateFood(DateTime)
+  nameWithType.vb: Cat(Of T, K).CalculateFood(Date)
+- uid: CatLibrary.Cat`2.CalculateFood*
+  name: CalculateFood
+  href: api/CatLibrary.Cat-2.html#CatLibrary_Cat_2_CalculateFood_
+  commentId: Overload:CatLibrary.Cat`2.CalculateFood
+  isSpec: "True"
+  fullName: CatLibrary.Cat<T, K>.CalculateFood
+  fullName.vb: CatLibrary.Cat(Of T, K).CalculateFood
+  nameWithType: Cat<T, K>.CalculateFood
+  nameWithType.vb: Cat(Of T, K).CalculateFood
+- uid: CatLibrary.Cat`2.Equals(System.Object)
+  name: Equals(object)
+  href: api/CatLibrary.Cat-2.html#CatLibrary_Cat_2_Equals_System_Object_
+  commentId: M:CatLibrary.Cat`2.Equals(System.Object)
+  name.vb: Equals(Object)
+  fullName: CatLibrary.Cat<T, K>.Equals(object)
+  fullName.vb: CatLibrary.Cat(Of T, K).Equals(Object)
+  nameWithType: Cat<T, K>.Equals(object)
+  nameWithType.vb: Cat(Of T, K).Equals(Object)
+- uid: CatLibrary.Cat`2.Equals*
+  name: Equals
+  href: api/CatLibrary.Cat-2.html#CatLibrary_Cat_2_Equals_
+  commentId: Overload:CatLibrary.Cat`2.Equals
+  isSpec: "True"
+  fullName: CatLibrary.Cat<T, K>.Equals
+  fullName.vb: CatLibrary.Cat(Of T, K).Equals
+  nameWithType: Cat<T, K>.Equals
+  nameWithType.vb: Cat(Of T, K).Equals
+- uid: CatLibrary.Cat`2.GetTailLength(System.Int32*,System.Object[])
+  name: GetTailLength(int*, params object[])
+  href: api/CatLibrary.Cat-2.html#CatLibrary_Cat_2_GetTailLength_System_Int32__System_Object___
+  commentId: M:CatLibrary.Cat`2.GetTailLength(System.Int32*,System.Object[])
+  name.vb: GetTailLength(Integer*, ParamArray Object())
+  fullName: CatLibrary.Cat<T, K>.GetTailLength(int*, params object[])
+  fullName.vb: CatLibrary.Cat(Of T, K).GetTailLength(Integer*, ParamArray Object())
+  nameWithType: Cat<T, K>.GetTailLength(int*, params object[])
+  nameWithType.vb: Cat(Of T, K).GetTailLength(Integer*, ParamArray Object())
+- uid: CatLibrary.Cat`2.GetTailLength*
+  name: GetTailLength
+  href: api/CatLibrary.Cat-2.html#CatLibrary_Cat_2_GetTailLength_
+  commentId: Overload:CatLibrary.Cat`2.GetTailLength
+  isSpec: "True"
+  fullName: CatLibrary.Cat<T, K>.GetTailLength
+  fullName.vb: CatLibrary.Cat(Of T, K).GetTailLength
+  nameWithType: Cat<T, K>.GetTailLength
+  nameWithType.vb: Cat(Of T, K).GetTailLength
+- uid: CatLibrary.Cat`2.Item(System.String)
+  name: this[string]
+  href: api/CatLibrary.Cat-2.html#CatLibrary_Cat_2_Item_System_String_
+  commentId: P:CatLibrary.Cat`2.Item(System.String)
+  name.vb: this[](String)
+  fullName: CatLibrary.Cat<T, K>.this[string]
+  fullName.vb: CatLibrary.Cat(Of T, K).this[](String)
+  nameWithType: Cat<T, K>.this[string]
+  nameWithType.vb: Cat(Of T, K).this[](String)
+- uid: CatLibrary.Cat`2.Item*
+  name: this
+  href: api/CatLibrary.Cat-2.html#CatLibrary_Cat_2_Item_
+  commentId: Overload:CatLibrary.Cat`2.Item
+  isSpec: "True"
+  name.vb: this[]
+  fullName: CatLibrary.Cat<T, K>.this
+  fullName.vb: CatLibrary.Cat(Of T, K).this[]
+  nameWithType: Cat<T, K>.this
+  nameWithType.vb: Cat(Of T, K).this[]
+- uid: CatLibrary.Cat`2.Jump(`0,`1,System.Boolean@)
+  name: Jump(T, K, ref bool)
+  href: api/CatLibrary.Cat-2.html#CatLibrary_Cat_2_Jump__0__1_System_Boolean__
+  commentId: M:CatLibrary.Cat`2.Jump(`0,`1,System.Boolean@)
+  name.vb: Jump(T, K, Boolean)
+  fullName: CatLibrary.Cat<T, K>.Jump(T, K, ref bool)
+  fullName.vb: CatLibrary.Cat(Of T, K).Jump(T, K, Boolean)
+  nameWithType: Cat<T, K>.Jump(T, K, ref bool)
+  nameWithType.vb: Cat(Of T, K).Jump(T, K, Boolean)
+- uid: CatLibrary.Cat`2.Jump*
+  name: Jump
+  href: api/CatLibrary.Cat-2.html#CatLibrary_Cat_2_Jump_
+  commentId: Overload:CatLibrary.Cat`2.Jump
+  isSpec: "True"
+  fullName: CatLibrary.Cat<T, K>.Jump
+  fullName.vb: CatLibrary.Cat(Of T, K).Jump
+  nameWithType: Cat<T, K>.Jump
+  nameWithType.vb: Cat(Of T, K).Jump
+- uid: CatLibrary.Cat`2.Name
+  name: Name
+  href: api/CatLibrary.Cat-2.html#CatLibrary_Cat_2_Name
+  commentId: P:CatLibrary.Cat`2.Name
+  fullName: CatLibrary.Cat<T, K>.Name
+  fullName.vb: CatLibrary.Cat(Of T, K).Name
+  nameWithType: Cat<T, K>.Name
+  nameWithType.vb: Cat(Of T, K).Name
+- uid: CatLibrary.Cat`2.Name*
+  name: Name
+  href: api/CatLibrary.Cat-2.html#CatLibrary_Cat_2_Name_
+  commentId: Overload:CatLibrary.Cat`2.Name
+  isSpec: "True"
+  fullName: CatLibrary.Cat<T, K>.Name
+  fullName.vb: CatLibrary.Cat(Of T, K).Name
+  nameWithType: Cat<T, K>.Name
+  nameWithType.vb: Cat(Of T, K).Name
+- uid: CatLibrary.Cat`2.isHealthy
+  name: isHealthy
+  href: api/CatLibrary.Cat-2.html#CatLibrary_Cat_2_isHealthy
+  commentId: F:CatLibrary.Cat`2.isHealthy
+  fullName: CatLibrary.Cat<T, K>.isHealthy
+  fullName.vb: CatLibrary.Cat(Of T, K).isHealthy
+  nameWithType: Cat<T, K>.isHealthy
+  nameWithType.vb: Cat(Of T, K).isHealthy
+- uid: CatLibrary.Cat`2.op_Addition(CatLibrary.Cat{`0,`1},System.Int32)
+  name: operator +(Cat<T, K>, int)
+  href: api/CatLibrary.Cat-2.html#CatLibrary_Cat_2_op_Addition_CatLibrary_Cat__0__1__System_Int32_
+  commentId: M:CatLibrary.Cat`2.op_Addition(CatLibrary.Cat{`0,`1},System.Int32)
+  name.vb: +(Cat(Of T, K), Integer)
+  fullName: CatLibrary.Cat<T, K>.operator +(CatLibrary.Cat<T, K>, int)
+  fullName.vb: CatLibrary.Cat(Of T, K).+(CatLibrary.Cat(Of T, K), Integer)
+  nameWithType: Cat<T, K>.operator +(Cat<T, K>, int)
+  nameWithType.vb: Cat(Of T, K).+(Cat(Of T, K), Integer)
+- uid: CatLibrary.Cat`2.op_Addition*
+  name: operator +
+  href: api/CatLibrary.Cat-2.html#CatLibrary_Cat_2_op_Addition_
+  commentId: Overload:CatLibrary.Cat`2.op_Addition
+  isSpec: "True"
+  name.vb: +
+  fullName: CatLibrary.Cat<T, K>.operator +
+  fullName.vb: CatLibrary.Cat(Of T, K).+
+  nameWithType: Cat<T, K>.operator +
+  nameWithType.vb: Cat(Of T, K).+
+- uid: CatLibrary.Cat`2.op_Explicit(CatLibrary.Cat{`0,`1})~CatLibrary.Tom
+  name: explicit operator Tom(Cat<T, K>)
+  href: api/CatLibrary.Cat-2.html#CatLibrary_Cat_2_op_Explicit_CatLibrary_Cat__0__1___CatLibrary_Tom
+  commentId: M:CatLibrary.Cat`2.op_Explicit(CatLibrary.Cat{`0,`1})~CatLibrary.Tom
+  name.vb: CType(Cat(Of T, K))
+  fullName: CatLibrary.Cat<T, K>.explicit operator CatLibrary.Tom(CatLibrary.Cat<T, K>)
+  fullName.vb: CatLibrary.Cat(Of T, K).CType(CatLibrary.Cat(Of T, K))
+  nameWithType: Cat<T, K>.explicit operator Tom(Cat<T, K>)
+  nameWithType.vb: Cat(Of T, K).CType(Cat(Of T, K))
+- uid: CatLibrary.Cat`2.op_Explicit*
+  name: explicit operator
+  href: api/CatLibrary.Cat-2.html#CatLibrary_Cat_2_op_Explicit_
+  commentId: Overload:CatLibrary.Cat`2.op_Explicit
+  isSpec: "True"
+  name.vb: CType
+  fullName: CatLibrary.Cat<T, K>.explicit operator
+  fullName.vb: CatLibrary.Cat(Of T, K).CType
+  nameWithType: Cat<T, K>.explicit operator
+  nameWithType.vb: Cat(Of T, K).CType
+- uid: CatLibrary.Cat`2.op_Subtraction(CatLibrary.Cat{`0,`1},System.Int32)
+  name: operator -(Cat<T, K>, int)
+  href: api/CatLibrary.Cat-2.html#CatLibrary_Cat_2_op_Subtraction_CatLibrary_Cat__0__1__System_Int32_
+  commentId: M:CatLibrary.Cat`2.op_Subtraction(CatLibrary.Cat{`0,`1},System.Int32)
+  name.vb: -(Cat(Of T, K), Integer)
+  fullName: CatLibrary.Cat<T, K>.operator -(CatLibrary.Cat<T, K>, int)
+  fullName.vb: CatLibrary.Cat(Of T, K).-(CatLibrary.Cat(Of T, K), Integer)
+  nameWithType: Cat<T, K>.operator -(Cat<T, K>, int)
+  nameWithType.vb: Cat(Of T, K).-(Cat(Of T, K), Integer)
+- uid: CatLibrary.Cat`2.op_Subtraction*
+  name: operator -
+  href: api/CatLibrary.Cat-2.html#CatLibrary_Cat_2_op_Subtraction_
+  commentId: Overload:CatLibrary.Cat`2.op_Subtraction
+  isSpec: "True"
+  name.vb: '-'
+  fullName: CatLibrary.Cat<T, K>.operator -
+  fullName.vb: CatLibrary.Cat(Of T, K).-
+  nameWithType: Cat<T, K>.operator -
+  nameWithType.vb: Cat(Of T, K).-
+- uid: CatLibrary.Cat`2.ownEat
+  name: ownEat
+  href: api/CatLibrary.Cat-2.html#CatLibrary_Cat_2_ownEat
+  commentId: E:CatLibrary.Cat`2.ownEat
+  fullName: CatLibrary.Cat<T, K>.ownEat
+  fullName.vb: CatLibrary.Cat(Of T, K).ownEat
+  nameWithType: Cat<T, K>.ownEat
+  nameWithType.vb: Cat(Of T, K).ownEat
+- uid: CatLibrary.Complex`2
+  name: Complex<T, J>
+  href: api/CatLibrary.Complex-2.html
+  commentId: T:CatLibrary.Complex`2
+  name.vb: Complex(Of T, J)
+  fullName: CatLibrary.Complex<T, J>
+  fullName.vb: CatLibrary.Complex(Of T, J)
+  nameWithType: Complex<T, J>
+  nameWithType.vb: Complex(Of T, J)
+- uid: CatLibrary.Core
+  name: CatLibrary.Core
+  href: api/CatLibrary.Core.html
+  commentId: N:CatLibrary.Core
+  fullName: CatLibrary.Core
+  nameWithType: CatLibrary.Core
+- uid: CatLibrary.Core.ContainersRefType
+  name: ContainersRefType
+  href: api/CatLibrary.Core.ContainersRefType.html
+  commentId: T:CatLibrary.Core.ContainersRefType
+  fullName: CatLibrary.Core.ContainersRefType
+  nameWithType: ContainersRefType
+- uid: CatLibrary.Core.ContainersRefType.ColorCount
+  name: ColorCount
+  href: api/CatLibrary.Core.ContainersRefType.html#CatLibrary_Core_ContainersRefType_ColorCount
+  commentId: F:CatLibrary.Core.ContainersRefType.ColorCount
+  fullName: CatLibrary.Core.ContainersRefType.ColorCount
+  nameWithType: ContainersRefType.ColorCount
+- uid: CatLibrary.Core.ContainersRefType.ColorType
+  name: ContainersRefType.ColorType
+  href: api/CatLibrary.Core.ContainersRefType.ColorType.html
+  commentId: T:CatLibrary.Core.ContainersRefType.ColorType
+  fullName: CatLibrary.Core.ContainersRefType.ColorType
+  nameWithType: ContainersRefType.ColorType
+- uid: CatLibrary.Core.ContainersRefType.ColorType.Blue
+  name: Blue
+  href: api/CatLibrary.Core.ContainersRefType.ColorType.html#CatLibrary_Core_ContainersRefType_ColorType_Blue
+  commentId: F:CatLibrary.Core.ContainersRefType.ColorType.Blue
+  fullName: CatLibrary.Core.ContainersRefType.ColorType.Blue
+  nameWithType: ContainersRefType.ColorType.Blue
+- uid: CatLibrary.Core.ContainersRefType.ColorType.Red
+  name: Red
+  href: api/CatLibrary.Core.ContainersRefType.ColorType.html#CatLibrary_Core_ContainersRefType_ColorType_Red
+  commentId: F:CatLibrary.Core.ContainersRefType.ColorType.Red
+  fullName: CatLibrary.Core.ContainersRefType.ColorType.Red
+  nameWithType: ContainersRefType.ColorType.Red
+- uid: CatLibrary.Core.ContainersRefType.ColorType.Yellow
+  name: Yellow
+  href: api/CatLibrary.Core.ContainersRefType.ColorType.html#CatLibrary_Core_ContainersRefType_ColorType_Yellow
+  commentId: F:CatLibrary.Core.ContainersRefType.ColorType.Yellow
+  fullName: CatLibrary.Core.ContainersRefType.ColorType.Yellow
+  nameWithType: ContainersRefType.ColorType.Yellow
+- uid: CatLibrary.Core.ContainersRefType.ContainersRefTypeChild
+  name: ContainersRefType.ContainersRefTypeChild
+  href: api/CatLibrary.Core.ContainersRefType.ContainersRefTypeChild.html
+  commentId: T:CatLibrary.Core.ContainersRefType.ContainersRefTypeChild
+  fullName: CatLibrary.Core.ContainersRefType.ContainersRefTypeChild
+  nameWithType: ContainersRefType.ContainersRefTypeChild
+- uid: CatLibrary.Core.ContainersRefType.ContainersRefTypeChildInterface
+  name: ContainersRefType.ContainersRefTypeChildInterface
+  href: api/CatLibrary.Core.ContainersRefType.ContainersRefTypeChildInterface.html
+  commentId: T:CatLibrary.Core.ContainersRefType.ContainersRefTypeChildInterface
+  fullName: CatLibrary.Core.ContainersRefType.ContainersRefTypeChildInterface
+  nameWithType: ContainersRefType.ContainersRefTypeChildInterface
+- uid: CatLibrary.Core.ContainersRefType.ContainersRefTypeDelegate
+  name: ContainersRefType.ContainersRefTypeDelegate
+  href: api/CatLibrary.Core.ContainersRefType.ContainersRefTypeDelegate.html
+  commentId: T:CatLibrary.Core.ContainersRefType.ContainersRefTypeDelegate
+  fullName: CatLibrary.Core.ContainersRefType.ContainersRefTypeDelegate
+  nameWithType: ContainersRefType.ContainersRefTypeDelegate
+- uid: CatLibrary.Core.ContainersRefType.ContainersRefTypeEventHandler
+  name: ContainersRefTypeEventHandler
+  href: api/CatLibrary.Core.ContainersRefType.html#CatLibrary_Core_ContainersRefType_ContainersRefTypeEventHandler
+  commentId: E:CatLibrary.Core.ContainersRefType.ContainersRefTypeEventHandler
+  fullName: CatLibrary.Core.ContainersRefType.ContainersRefTypeEventHandler
+  nameWithType: ContainersRefType.ContainersRefTypeEventHandler
+- uid: CatLibrary.Core.ContainersRefType.ContainersRefTypeNonRefMethod(System.Object[])
+  name: ContainersRefTypeNonRefMethod(params object[])
+  href: api/CatLibrary.Core.ContainersRefType.html#CatLibrary_Core_ContainersRefType_ContainersRefTypeNonRefMethod_System_Object___
+  commentId: M:CatLibrary.Core.ContainersRefType.ContainersRefTypeNonRefMethod(System.Object[])
+  name.vb: ContainersRefTypeNonRefMethod(ParamArray Object())
+  fullName: CatLibrary.Core.ContainersRefType.ContainersRefTypeNonRefMethod(params object[])
+  fullName.vb: CatLibrary.Core.ContainersRefType.ContainersRefTypeNonRefMethod(ParamArray Object())
+  nameWithType: ContainersRefType.ContainersRefTypeNonRefMethod(params object[])
+  nameWithType.vb: ContainersRefType.ContainersRefTypeNonRefMethod(ParamArray Object())
+- uid: CatLibrary.Core.ContainersRefType.ContainersRefTypeNonRefMethod*
+  name: ContainersRefTypeNonRefMethod
+  href: api/CatLibrary.Core.ContainersRefType.html#CatLibrary_Core_ContainersRefType_ContainersRefTypeNonRefMethod_
+  commentId: Overload:CatLibrary.Core.ContainersRefType.ContainersRefTypeNonRefMethod
+  isSpec: "True"
+  fullName: CatLibrary.Core.ContainersRefType.ContainersRefTypeNonRefMethod
+  nameWithType: ContainersRefType.ContainersRefTypeNonRefMethod
+- uid: CatLibrary.Core.ContainersRefType.GetColorCount
+  name: GetColorCount
+  href: api/CatLibrary.Core.ContainersRefType.html#CatLibrary_Core_ContainersRefType_GetColorCount
+  commentId: P:CatLibrary.Core.ContainersRefType.GetColorCount
+  fullName: CatLibrary.Core.ContainersRefType.GetColorCount
+  nameWithType: ContainersRefType.GetColorCount
+- uid: CatLibrary.Core.ContainersRefType.GetColorCount*
+  name: GetColorCount
+  href: api/CatLibrary.Core.ContainersRefType.html#CatLibrary_Core_ContainersRefType_GetColorCount_
+  commentId: Overload:CatLibrary.Core.ContainersRefType.GetColorCount
+  isSpec: "True"
+  fullName: CatLibrary.Core.ContainersRefType.GetColorCount
+  nameWithType: ContainersRefType.GetColorCount
+- uid: CatLibrary.Core.ExplicitLayoutClass
+  name: ExplicitLayoutClass
+  href: api/CatLibrary.Core.ExplicitLayoutClass.html
+  commentId: T:CatLibrary.Core.ExplicitLayoutClass
+  fullName: CatLibrary.Core.ExplicitLayoutClass
+  nameWithType: ExplicitLayoutClass
+- uid: CatLibrary.Core.Issue231
+  name: Issue231
+  href: api/CatLibrary.Core.Issue231.html
+  commentId: T:CatLibrary.Core.Issue231
+  fullName: CatLibrary.Core.Issue231
+  nameWithType: Issue231
+- uid: CatLibrary.Core.Issue231.Bar(CatLibrary.Core.ContainersRefType)
+  name: Bar(ContainersRefType)
+  href: api/CatLibrary.Core.Issue231.html#CatLibrary_Core_Issue231_Bar_CatLibrary_Core_ContainersRefType_
+  commentId: M:CatLibrary.Core.Issue231.Bar(CatLibrary.Core.ContainersRefType)
+  fullName: CatLibrary.Core.Issue231.Bar(CatLibrary.Core.ContainersRefType)
+  nameWithType: Issue231.Bar(ContainersRefType)
+- uid: CatLibrary.Core.Issue231.Bar*
+  name: Bar
+  href: api/CatLibrary.Core.Issue231.html#CatLibrary_Core_Issue231_Bar_
+  commentId: Overload:CatLibrary.Core.Issue231.Bar
+  isSpec: "True"
+  fullName: CatLibrary.Core.Issue231.Bar
+  nameWithType: Issue231.Bar
+- uid: CatLibrary.Core.Issue231.Foo(CatLibrary.Core.ContainersRefType)
+  name: Foo(ContainersRefType)
+  href: api/CatLibrary.Core.Issue231.html#CatLibrary_Core_Issue231_Foo_CatLibrary_Core_ContainersRefType_
+  commentId: M:CatLibrary.Core.Issue231.Foo(CatLibrary.Core.ContainersRefType)
+  fullName: CatLibrary.Core.Issue231.Foo(CatLibrary.Core.ContainersRefType)
+  nameWithType: Issue231.Foo(ContainersRefType)
+- uid: CatLibrary.Core.Issue231.Foo*
+  name: Foo
+  href: api/CatLibrary.Core.Issue231.html#CatLibrary_Core_Issue231_Foo_
+  commentId: Overload:CatLibrary.Core.Issue231.Foo
+  isSpec: "True"
+  fullName: CatLibrary.Core.Issue231.Foo
+  nameWithType: Issue231.Foo
+- uid: CatLibrary.FakeDelegate`1
+  name: FakeDelegate<T>
+  href: api/CatLibrary.FakeDelegate-1.html
+  commentId: T:CatLibrary.FakeDelegate`1
+  name.vb: FakeDelegate(Of T)
+  fullName: CatLibrary.FakeDelegate<T>
+  fullName.vb: CatLibrary.FakeDelegate(Of T)
+  nameWithType: FakeDelegate<T>
+  nameWithType.vb: FakeDelegate(Of T)
+- uid: CatLibrary.IAnimal
+  name: IAnimal
+  href: api/CatLibrary.IAnimal.html
+  commentId: T:CatLibrary.IAnimal
+  fullName: CatLibrary.IAnimal
+  nameWithType: IAnimal
+- uid: CatLibrary.IAnimal.Eat
+  name: Eat()
+  href: api/CatLibrary.IAnimal.html#CatLibrary_IAnimal_Eat
+  commentId: M:CatLibrary.IAnimal.Eat
+  fullName: CatLibrary.IAnimal.Eat()
+  nameWithType: IAnimal.Eat()
+- uid: CatLibrary.IAnimal.Eat(System.String)
+  name: Eat(string)
+  href: api/CatLibrary.IAnimal.html#CatLibrary_IAnimal_Eat_System_String_
+  commentId: M:CatLibrary.IAnimal.Eat(System.String)
+  name.vb: Eat(String)
+  fullName: CatLibrary.IAnimal.Eat(string)
+  fullName.vb: CatLibrary.IAnimal.Eat(String)
+  nameWithType: IAnimal.Eat(string)
+  nameWithType.vb: IAnimal.Eat(String)
+- uid: CatLibrary.IAnimal.Eat*
+  name: Eat
+  href: api/CatLibrary.IAnimal.html#CatLibrary_IAnimal_Eat_
+  commentId: Overload:CatLibrary.IAnimal.Eat
+  isSpec: "True"
+  fullName: CatLibrary.IAnimal.Eat
+  nameWithType: IAnimal.Eat
+- uid: CatLibrary.IAnimal.Eat``1(``0)
+  name: Eat<Tool>(Tool)
+  href: api/CatLibrary.IAnimal.html#CatLibrary_IAnimal_Eat__1___0_
+  commentId: M:CatLibrary.IAnimal.Eat``1(``0)
+  name.vb: Eat(Of Tool)(Tool)
+  fullName: CatLibrary.IAnimal.Eat<Tool>(Tool)
+  fullName.vb: CatLibrary.IAnimal.Eat(Of Tool)(Tool)
+  nameWithType: IAnimal.Eat<Tool>(Tool)
+  nameWithType.vb: IAnimal.Eat(Of Tool)(Tool)
+- uid: CatLibrary.IAnimal.Item(System.Int32)
+  name: this[int]
+  href: api/CatLibrary.IAnimal.html#CatLibrary_IAnimal_Item_System_Int32_
+  commentId: P:CatLibrary.IAnimal.Item(System.Int32)
+  name.vb: this[](Integer)
+  fullName: CatLibrary.IAnimal.this[int]
+  fullName.vb: CatLibrary.IAnimal.this[](Integer)
+  nameWithType: IAnimal.this[int]
+  nameWithType.vb: IAnimal.this[](Integer)
+- uid: CatLibrary.IAnimal.Item*
+  name: this
+  href: api/CatLibrary.IAnimal.html#CatLibrary_IAnimal_Item_
+  commentId: Overload:CatLibrary.IAnimal.Item
+  isSpec: "True"
+  name.vb: this[]
+  fullName: CatLibrary.IAnimal.this
+  fullName.vb: CatLibrary.IAnimal.this[]
+  nameWithType: IAnimal.this
+  nameWithType.vb: IAnimal.this[]
+- uid: CatLibrary.IAnimal.Name
+  name: Name
+  href: api/CatLibrary.IAnimal.html#CatLibrary_IAnimal_Name
+  commentId: P:CatLibrary.IAnimal.Name
+  fullName: CatLibrary.IAnimal.Name
+  nameWithType: IAnimal.Name
+- uid: CatLibrary.IAnimal.Name*
+  name: Name
+  href: api/CatLibrary.IAnimal.html#CatLibrary_IAnimal_Name_
+  commentId: Overload:CatLibrary.IAnimal.Name
+  isSpec: "True"
+  fullName: CatLibrary.IAnimal.Name
+  nameWithType: IAnimal.Name
+- uid: CatLibrary.ICat
+  name: ICat
+  href: api/CatLibrary.ICat.html
+  commentId: T:CatLibrary.ICat
+  fullName: CatLibrary.ICat
+  nameWithType: ICat
+- uid: CatLibrary.ICat.eat
+  name: eat
+  href: api/CatLibrary.ICat.html#CatLibrary_ICat_eat
+  commentId: E:CatLibrary.ICat.eat
+  fullName: CatLibrary.ICat.eat
+  nameWithType: ICat.eat
+- uid: CatLibrary.ICatExtension
+  name: ICatExtension
+  href: api/CatLibrary.ICatExtension.html
+  commentId: T:CatLibrary.ICatExtension
+  fullName: CatLibrary.ICatExtension
+  nameWithType: ICatExtension
+- uid: CatLibrary.ICatExtension.Play(CatLibrary.ICat,CatLibrary.Core.ContainersRefType.ColorType)
+  name: Play(ICat, ColorType)
+  href: api/CatLibrary.ICatExtension.html#CatLibrary_ICatExtension_Play_CatLibrary_ICat_CatLibrary_Core_ContainersRefType_ColorType_
+  commentId: M:CatLibrary.ICatExtension.Play(CatLibrary.ICat,CatLibrary.Core.ContainersRefType.ColorType)
+  fullName: CatLibrary.ICatExtension.Play(CatLibrary.ICat, CatLibrary.Core.ContainersRefType.ColorType)
+  nameWithType: ICatExtension.Play(ICat, ContainersRefType.ColorType)
+- uid: CatLibrary.ICatExtension.Play*
+  name: Play
+  href: api/CatLibrary.ICatExtension.html#CatLibrary_ICatExtension_Play_
+  commentId: Overload:CatLibrary.ICatExtension.Play
+  isSpec: "True"
+  fullName: CatLibrary.ICatExtension.Play
+  nameWithType: ICatExtension.Play
+- uid: CatLibrary.ICatExtension.Sleep(CatLibrary.ICat,System.Int64)
+  name: Sleep(ICat, long)
+  href: api/CatLibrary.ICatExtension.html#CatLibrary_ICatExtension_Sleep_CatLibrary_ICat_System_Int64_
+  commentId: M:CatLibrary.ICatExtension.Sleep(CatLibrary.ICat,System.Int64)
+  name.vb: Sleep(ICat, Long)
+  fullName: CatLibrary.ICatExtension.Sleep(CatLibrary.ICat, long)
+  fullName.vb: CatLibrary.ICatExtension.Sleep(CatLibrary.ICat, Long)
+  nameWithType: ICatExtension.Sleep(ICat, long)
+  nameWithType.vb: ICatExtension.Sleep(ICat, Long)
+- uid: CatLibrary.ICatExtension.Sleep*
+  name: Sleep
+  href: api/CatLibrary.ICatExtension.html#CatLibrary_ICatExtension_Sleep_
+  commentId: Overload:CatLibrary.ICatExtension.Sleep
+  isSpec: "True"
+  fullName: CatLibrary.ICatExtension.Sleep
+  nameWithType: ICatExtension.Sleep
+- uid: CatLibrary.MRefDelegate`3
+  name: MRefDelegate<K, T, L>
+  href: api/CatLibrary.MRefDelegate-3.html
+  commentId: T:CatLibrary.MRefDelegate`3
+  name.vb: MRefDelegate(Of K, T, L)
+  fullName: CatLibrary.MRefDelegate<K, T, L>
+  fullName.vb: CatLibrary.MRefDelegate(Of K, T, L)
+  nameWithType: MRefDelegate<K, T, L>
+  nameWithType.vb: MRefDelegate(Of K, T, L)
+- uid: CatLibrary.MRefNormalDelegate
+  name: MRefNormalDelegate
+  href: api/CatLibrary.MRefNormalDelegate.html
+  commentId: T:CatLibrary.MRefNormalDelegate
+  fullName: CatLibrary.MRefNormalDelegate
+  nameWithType: MRefNormalDelegate
+- uid: CatLibrary.Tom
+  name: Tom
+  href: api/CatLibrary.Tom.html
+  commentId: T:CatLibrary.Tom
+  fullName: CatLibrary.Tom
+  nameWithType: Tom
+- uid: CatLibrary.Tom.TomMethod(CatLibrary.Complex{CatLibrary.TomFromBaseClass,CatLibrary.TomFromBaseClass},System.Tuple{System.String,CatLibrary.Tom})
+  name: TomMethod(Complex<TomFromBaseClass, TomFromBaseClass>, Tuple<string, Tom>)
+  href: api/CatLibrary.Tom.html#CatLibrary_Tom_TomMethod_CatLibrary_Complex_CatLibrary_TomFromBaseClass_CatLibrary_TomFromBaseClass__System_Tuple_System_String_CatLibrary_Tom__
+  commentId: M:CatLibrary.Tom.TomMethod(CatLibrary.Complex{CatLibrary.TomFromBaseClass,CatLibrary.TomFromBaseClass},System.Tuple{System.String,CatLibrary.Tom})
+  name.vb: TomMethod(Complex(Of TomFromBaseClass, TomFromBaseClass), Tuple(Of String, Tom))
+  fullName: CatLibrary.Tom.TomMethod(CatLibrary.Complex<CatLibrary.TomFromBaseClass, CatLibrary.TomFromBaseClass>, System.Tuple<string, CatLibrary.Tom>)
+  fullName.vb: CatLibrary.Tom.TomMethod(CatLibrary.Complex(Of CatLibrary.TomFromBaseClass, CatLibrary.TomFromBaseClass), System.Tuple(Of String, CatLibrary.Tom))
+  nameWithType: Tom.TomMethod(Complex<TomFromBaseClass, TomFromBaseClass>, Tuple<string, Tom>)
+  nameWithType.vb: Tom.TomMethod(Complex(Of TomFromBaseClass, TomFromBaseClass), Tuple(Of String, Tom))
+- uid: CatLibrary.Tom.TomMethod*
+  name: TomMethod
+  href: api/CatLibrary.Tom.html#CatLibrary_Tom_TomMethod_
+  commentId: Overload:CatLibrary.Tom.TomMethod
+  isSpec: "True"
+  fullName: CatLibrary.Tom.TomMethod
+  nameWithType: Tom.TomMethod
+- uid: CatLibrary.TomFromBaseClass
+  name: TomFromBaseClass
+  href: api/CatLibrary.TomFromBaseClass.html
+  commentId: T:CatLibrary.TomFromBaseClass
+  fullName: CatLibrary.TomFromBaseClass
+  nameWithType: TomFromBaseClass
+- uid: CatLibrary.TomFromBaseClass.#ctor(System.Int32)
+  name: TomFromBaseClass(int)
+  href: api/CatLibrary.TomFromBaseClass.html#CatLibrary_TomFromBaseClass__ctor_System_Int32_
+  commentId: M:CatLibrary.TomFromBaseClass.#ctor(System.Int32)
+  name.vb: New(Integer)
+  fullName: CatLibrary.TomFromBaseClass.TomFromBaseClass(int)
+  fullName.vb: CatLibrary.TomFromBaseClass.New(Integer)
+  nameWithType: TomFromBaseClass.TomFromBaseClass(int)
+  nameWithType.vb: TomFromBaseClass.New(Integer)
+- uid: CatLibrary.TomFromBaseClass.#ctor*
+  name: TomFromBaseClass
+  href: api/CatLibrary.TomFromBaseClass.html#CatLibrary_TomFromBaseClass__ctor_
+  commentId: Overload:CatLibrary.TomFromBaseClass.#ctor
+  isSpec: "True"
+  name.vb: New
+  fullName: CatLibrary.TomFromBaseClass.TomFromBaseClass
+  fullName.vb: CatLibrary.TomFromBaseClass.New
+  nameWithType: TomFromBaseClass.TomFromBaseClass
+  nameWithType.vb: TomFromBaseClass.New
+- uid: MRef.Demo.Enumeration
+  name: MRef.Demo.Enumeration
+  href: api/MRef.Demo.Enumeration.html
+  commentId: N:MRef.Demo.Enumeration
+  fullName: MRef.Demo.Enumeration
+  nameWithType: MRef.Demo.Enumeration
+- uid: MRef.Demo.Enumeration.ColorType
+  name: ColorType
+  href: api/MRef.Demo.Enumeration.ColorType.html
+  commentId: T:MRef.Demo.Enumeration.ColorType
+  fullName: MRef.Demo.Enumeration.ColorType
+  nameWithType: ColorType
+- uid: MRef.Demo.Enumeration.ColorType.Blue
+  name: Blue
+  href: api/MRef.Demo.Enumeration.ColorType.html#MRef_Demo_Enumeration_ColorType_Blue
+  commentId: F:MRef.Demo.Enumeration.ColorType.Blue
+  fullName: MRef.Demo.Enumeration.ColorType.Blue
+  nameWithType: ColorType.Blue
+- uid: MRef.Demo.Enumeration.ColorType.Red
+  name: Red
+  href: api/MRef.Demo.Enumeration.ColorType.html#MRef_Demo_Enumeration_ColorType_Red
+  commentId: F:MRef.Demo.Enumeration.ColorType.Red
+  fullName: MRef.Demo.Enumeration.ColorType.Red
+  nameWithType: ColorType.Red
+- uid: MRef.Demo.Enumeration.ColorType.Yellow
+  name: Yellow
+  href: api/MRef.Demo.Enumeration.ColorType.html#MRef_Demo_Enumeration_ColorType_Yellow
+  commentId: F:MRef.Demo.Enumeration.ColorType.Yellow
+  fullName: MRef.Demo.Enumeration.ColorType.Yellow
+  nameWithType: ColorType.Yellow
+- uid: graph.windows.net/myorganization/Contacts/1.6
+  name: Contacts
+  href: restapi/contacts.html
+- uid: graph.windows.net/myorganization/Contacts/1.6/delete contact
+  name: delete contact
+  href: restapi/contacts.html#graph_windows_net_myorganization_Contacts_1_6_delete_contact
+- uid: graph.windows.net/myorganization/Contacts/1.6/delete contact manager by id
+  name: delete contact manager by id
+  href: restapi/contacts.html#graph_windows_net_myorganization_Contacts_1_6_delete_contact_manager_by_id
+- uid: graph.windows.net/myorganization/Contacts/1.6/get contact by id
+  name: get contact by id
+  href: restapi/contacts.html#graph_windows_net_myorganization_Contacts_1_6_get_contact_by_id
+- uid: graph.windows.net/myorganization/Contacts/1.6/get contact direct reports links
+  name: get contact direct reports links
+  href: restapi/contacts.html#graph_windows_net_myorganization_Contacts_1_6_get_contact_direct_reports_links
+- uid: graph.windows.net/myorganization/Contacts/1.6/get contact manager link
+  name: get contact manager link
+  href: restapi/contacts.html#graph_windows_net_myorganization_Contacts_1_6_get_contact_manager_link
+- uid: graph.windows.net/myorganization/Contacts/1.6/get contact memberOf links
+  name: get contact memberOf links
+  href: restapi/contacts.html#graph_windows_net_myorganization_Contacts_1_6_get_contact_memberOf_links
+- uid: graph.windows.net/myorganization/Contacts/1.6/get contacts
+  name: get contacts
+  href: restapi/contacts.html#graph_windows_net_myorganization_Contacts_1_6_get_contacts
+- uid: graph.windows.net/myorganization/Contacts/1.6/update contact
+  name: update contact
+  href: restapi/contacts.html#graph_windows_net_myorganization_Contacts_1_6_update_contact
+- uid: graph.windows.net/myorganization/Contacts/1.6/update contact manager
+  name: update contact manager
+  href: restapi/contacts.html#graph_windows_net_myorganization_Contacts_1_6_update_contact_manager
+- uid: petstore.swagger.io/v2/Swagger Petstore/1.0.0
+  name: Swagger Petstore
+  href: restapi/petstore.html
+- uid: petstore.swagger.io/v2/Swagger Petstore/1.0.0/addPet
+  name: addPet
+  href: restapi/petstore.html#petstore_swagger_io_v2_Swagger_Petstore_1_0_0_addPet
+- uid: petstore.swagger.io/v2/Swagger Petstore/1.0.0/createUser
+  name: createUser
+  href: restapi/petstore.html#petstore_swagger_io_v2_Swagger_Petstore_1_0_0_createUser
+- uid: petstore.swagger.io/v2/Swagger Petstore/1.0.0/createUsersWithArrayInput
+  name: createUsersWithArrayInput
+  href: restapi/petstore.html#petstore_swagger_io_v2_Swagger_Petstore_1_0_0_createUsersWithArrayInput
+- uid: petstore.swagger.io/v2/Swagger Petstore/1.0.0/createUsersWithListInput
+  name: createUsersWithListInput
+  href: restapi/petstore.html#petstore_swagger_io_v2_Swagger_Petstore_1_0_0_createUsersWithListInput
+- uid: petstore.swagger.io/v2/Swagger Petstore/1.0.0/deleteOrder
+  name: deleteOrder
+  href: restapi/petstore.html#petstore_swagger_io_v2_Swagger_Petstore_1_0_0_deleteOrder
+- uid: petstore.swagger.io/v2/Swagger Petstore/1.0.0/deletePet
+  name: deletePet
+  href: restapi/petstore.html#petstore_swagger_io_v2_Swagger_Petstore_1_0_0_deletePet
+- uid: petstore.swagger.io/v2/Swagger Petstore/1.0.0/deleteUser
+  name: deleteUser
+  href: restapi/petstore.html#petstore_swagger_io_v2_Swagger_Petstore_1_0_0_deleteUser
+- uid: petstore.swagger.io/v2/Swagger Petstore/1.0.0/findPetsByStatus
+  name: findPetsByStatus
+  href: restapi/petstore.html#petstore_swagger_io_v2_Swagger_Petstore_1_0_0_findPetsByStatus
+- uid: petstore.swagger.io/v2/Swagger Petstore/1.0.0/findPetsByTags
+  name: findPetsByTags
+  href: restapi/petstore.html#petstore_swagger_io_v2_Swagger_Petstore_1_0_0_findPetsByTags
+- uid: petstore.swagger.io/v2/Swagger Petstore/1.0.0/getInventory
+  name: getInventory
+  href: restapi/petstore.html#petstore_swagger_io_v2_Swagger_Petstore_1_0_0_getInventory
+- uid: petstore.swagger.io/v2/Swagger Petstore/1.0.0/getOrderById
+  name: getOrderById
+  href: restapi/petstore.html#petstore_swagger_io_v2_Swagger_Petstore_1_0_0_getOrderById
+- uid: petstore.swagger.io/v2/Swagger Petstore/1.0.0/getPetById
+  name: getPetById
+  href: restapi/petstore.html#petstore_swagger_io_v2_Swagger_Petstore_1_0_0_getPetById
+- uid: petstore.swagger.io/v2/Swagger Petstore/1.0.0/getUserByName
+  name: getUserByName
+  href: restapi/petstore.html#petstore_swagger_io_v2_Swagger_Petstore_1_0_0_getUserByName
+- uid: petstore.swagger.io/v2/Swagger Petstore/1.0.0/loginUser
+  name: loginUser
+  href: restapi/petstore.html#petstore_swagger_io_v2_Swagger_Petstore_1_0_0_loginUser
+- uid: petstore.swagger.io/v2/Swagger Petstore/1.0.0/logoutUser
+  name: logoutUser
+  href: restapi/petstore.html#petstore_swagger_io_v2_Swagger_Petstore_1_0_0_logoutUser
+- uid: petstore.swagger.io/v2/Swagger Petstore/1.0.0/placeOrder
+  name: placeOrder
+  href: restapi/petstore.html#petstore_swagger_io_v2_Swagger_Petstore_1_0_0_placeOrder
+- uid: petstore.swagger.io/v2/Swagger Petstore/1.0.0/tag/pet
+  name: pet
+  href: restapi/petstore.html#petstore_swagger_io_v2_Swagger_Petstore_1_0_0_tag_pet
+- uid: petstore.swagger.io/v2/Swagger Petstore/1.0.0/tag/store
+  name: store
+  href: restapi/petstore.html#petstore_swagger_io_v2_Swagger_Petstore_1_0_0_tag_store
+- uid: petstore.swagger.io/v2/Swagger Petstore/1.0.0/tag/user
+  name: user
+  href: restapi/petstore.html#petstore_swagger_io_v2_Swagger_Petstore_1_0_0_tag_user
+- uid: petstore.swagger.io/v2/Swagger Petstore/1.0.0/updatePet
+  name: updatePet
+  href: restapi/petstore.html#petstore_swagger_io_v2_Swagger_Petstore_1_0_0_updatePet
+- uid: petstore.swagger.io/v2/Swagger Petstore/1.0.0/updatePetWithForm
+  name: updatePetWithForm
+  href: restapi/petstore.html#petstore_swagger_io_v2_Swagger_Petstore_1_0_0_updatePetWithForm
+- uid: petstore.swagger.io/v2/Swagger Petstore/1.0.0/updateUser
+  name: updateUser
+  href: restapi/petstore.html#petstore_swagger_io_v2_Swagger_Petstore_1_0_0_updateUser
+- uid: petstore.swagger.io/v2/Swagger Petstore/1.0.0/uploadFile
+  name: uploadFile
+  href: restapi/petstore.html#petstore_swagger_io_v2_Swagger_Petstore_1_0_0_uploadFile
diff --git a/test/docfx.Tests/SerializationTests/TestData/XRefMap/xrefmap_02.json b/test/docfx.Tests/SerializationTests/TestData/XRefMap/xrefmap_02.json
new file mode 100644
index 00000000000..630e2c33f23
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/TestData/XRefMap/xrefmap_02.json
@@ -0,0 +1,19 @@
+{
+  "sorted": true,
+  "hrefUpdated": false,
+  "baseUrl": "http://localhost",
+  "redirections": [
+    {
+      "uidPrefix": "dummy",
+      "href": "dummy"
+    }
+  ],
+  "references": [
+    {
+      "dummy1": "dummy1",
+      "uid": "dummy",
+      "href": "dummy"
+    }
+  ],
+  "dummy": "dummy"
+}
diff --git a/test/docfx.Tests/SerializationTests/TestData/XRefMap/xrefmap_02.yml b/test/docfx.Tests/SerializationTests/TestData/XRefMap/xrefmap_02.yml
new file mode 100644
index 00000000000..56f418cd9b4
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/TestData/XRefMap/xrefmap_02.yml
@@ -0,0 +1,11 @@
+sorted: "true"
+hrefUpdated: "false"
+baseUrl: "http://localhost"
+redirections: 
+- uidPrefix: "dummy"
+  href: "dummy"
+references: 
+- dummy1: "dummy1"
+  uid: "dummy"
+  href: "dummy"
+dummy: "dummy"
diff --git a/test/docfx.Tests/SerializationTests/YamlSerializationTest.ApiPage.cs b/test/docfx.Tests/SerializationTests/YamlSerializationTest.ApiPage.cs
new file mode 100644
index 00000000000..c0db0066478
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/YamlSerializationTest.ApiPage.cs
@@ -0,0 +1,84 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.Diagnostics;
+using System.IO;
+using System.Net;
+using System.Runtime.CompilerServices;
+using System.Text.Json;
+using Docfx.Build.ApiPage;
+using Docfx.Build.ManagedReference;
+using Docfx.Common;
+using Docfx.DataContracts.ManagedReference;
+using Docfx.Tests;
+using FluentAssertions;
+using Microsoft.Playwright;
+using OneOf;
+using YamlDotNet.Serialization;
+
+namespace docfx.Tests;
+
+public partial class YamlSerializationTest
+{
+    [Theory]
+    [TestData<ApiPage>]
+    public void YamlSerializationTest_ApiPage(string path)
+    {
+        // Arrange
+        var model = LoadApiPage(path); // Note: Loading ApiPage YAML file requires custom logics.
+
+        // Act/Assert
+        ValidateApiPageRoundTrip(model);
+    }
+
+    /// <summary>
+    /// 
+    /// </summary>
+    private static ApiPage LoadApiPage(string path)
+    {
+        path = PathHelper.ResolveTestDataPath(path);
+
+        var deserializer = new DeserializerBuilder().WithAttemptingUnquotedStringTypeDeserialization()
+                                                    .Build();
+
+        // 1. Deserialize ApiPage yaml as Dictionary
+        // 2. Serialize to json
+        // 3. Deserialize as ApiPage instance
+        var model = deserializer.Deserialize<Dictionary<object, object>>(File.ReadAllText(path));
+        var json = JsonSerializer.Serialize(model);
+        return JsonSerializer.Deserialize<ApiPage>(json, ApiPage.JsonSerializerOptions);
+    }
+
+    private static void ValidateApiPageRoundTrip(ApiPage model)
+    {
+        // Act
+        var yaml = ToYaml(model);
+        var result = ToApiPage(yaml);
+
+        // Assert
+
+        // ApiPage model can't be validated with `BeEquivalentTo` (See: https://github.com/dotnet/docfx/pull/10232)
+        // So compare serialized YAML contents.
+        ToYaml(result).Should().Be(yaml);
+    }
+
+    private static string ToYaml(ApiPage model)
+    {
+        var deserializer = new DeserializerBuilder().WithAttemptingUnquotedStringTypeDeserialization().Build();
+
+        var json = JsonSerializer.Serialize(model, Docfx.Build.ApiPage.ApiPage.JsonSerializerOptions);
+        var obj = deserializer.Deserialize(json);
+
+        using var writer = new StringWriter();
+        YamlUtility.Serialize(writer, obj, "YamlMime:ApiPage");
+        return writer.ToString();
+    }
+
+    private static ApiPage ToApiPage(string yaml)
+    {
+        var deserializer = new DeserializerBuilder().WithAttemptingUnquotedStringTypeDeserialization().Build();
+        var dict = deserializer.Deserialize<Dictionary<object, object>>(new StringReader(yaml));
+        var json = JsonSerializer.Serialize(dict);
+        return JsonSerializer.Deserialize<ApiPage>(json, ApiPage.JsonSerializerOptions);
+    }
+}
diff --git a/test/docfx.Tests/SerializationTests/YamlSerializationTest.FilterConfig.cs b/test/docfx.Tests/SerializationTests/YamlSerializationTest.FilterConfig.cs
new file mode 100644
index 00000000000..01654be228b
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/YamlSerializationTest.FilterConfig.cs
@@ -0,0 +1,29 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.IO;
+using Docfx;
+using Docfx.Build.Engine;
+using Docfx.Common;
+using Docfx.Dotnet;
+using Docfx.Plugins;
+using FluentAssertions;
+
+namespace docfx.Tests;
+
+public partial class YamlSerializationTest
+{
+    [Theory]
+    [TestData<ConfigFilterRule>]
+    public void YamlSerializationTest_FilterConfig(string path)
+    {
+        // Arrange
+        var model = TestData.Load<ConfigFilterRule>(path);
+
+        // Act/Assert
+        ValidateYamlRoundTrip(model);
+
+        // ConfigFilterRule don't support JSON serialization/deserialization
+        // ValidateYamlJsonRoundTrip(model);
+    }
+}
diff --git a/test/docfx.Tests/SerializationTests/YamlSerializationTest.ManagedReference.cs b/test/docfx.Tests/SerializationTests/YamlSerializationTest.ManagedReference.cs
new file mode 100644
index 00000000000..3012c8a890f
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/YamlSerializationTest.ManagedReference.cs
@@ -0,0 +1,24 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.Diagnostics;
+using System.Runtime.CompilerServices;
+using Docfx.DataContracts.ManagedReference;
+using FluentAssertions;
+
+namespace docfx.Tests;
+
+public partial class YamlSerializationTest
+{
+    [Theory]
+    [TestData<PageViewModel>]
+    public void YamlSerializationTest_ManagedReference(string path)
+    {
+        // Arrange
+        var model = TestData.Load<PageViewModel>(path);
+
+        // Act/Assert
+        ValidateYamlRoundTrip(model);
+        ValidateYamlJsonRoundTrip(model);
+    }
+}
diff --git a/test/docfx.Tests/SerializationTests/YamlSerializationTest.TocItemViewModel.cs b/test/docfx.Tests/SerializationTests/YamlSerializationTest.TocItemViewModel.cs
new file mode 100644
index 00000000000..ac3d4b47bfa
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/YamlSerializationTest.TocItemViewModel.cs
@@ -0,0 +1,23 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using Docfx.Build.ApiPage;
+using Docfx.DataContracts.Common;
+using FluentAssertions;
+
+namespace docfx.Tests;
+
+public partial class YamlSerializationTest
+{
+    [Theory]
+    [TestData<TocItemViewModel>]
+    public void YamlSerializationTest_TocItemViewModel(string path)
+    {
+        // Arrange
+        var model = TestData.Load<TocItemViewModel>(path);
+
+        // Act/Assert
+        ValidateYamlRoundTrip(model);
+        ValidateYamlJsonRoundTrip(model);
+    }
+}
diff --git a/test/docfx.Tests/SerializationTests/YamlSerializationTest.UniversalReference.cs b/test/docfx.Tests/SerializationTests/YamlSerializationTest.UniversalReference.cs
new file mode 100644
index 00000000000..2920741e685
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/YamlSerializationTest.UniversalReference.cs
@@ -0,0 +1,24 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.Diagnostics;
+using System.Runtime.CompilerServices;
+using Docfx.DataContracts.UniversalReference;
+using FluentAssertions;
+
+namespace docfx.Tests;
+
+public partial class YamlSerializationTest
+{
+    [Theory]
+    [TestData<PageViewModel>]
+    public void YamlSerializationTest_Universal(string path)
+    {
+        // Arrange
+        var model = TestData.Load<PageViewModel>(path);
+
+        // Act/Assert
+        ValidateYamlRoundTrip(model);
+        ValidateYamlJsonRoundTrip(model);
+    }
+}
diff --git a/test/docfx.Tests/SerializationTests/YamlSerializationTest.XRefMap.cs b/test/docfx.Tests/SerializationTests/YamlSerializationTest.XRefMap.cs
new file mode 100644
index 00000000000..68bc961a423
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/YamlSerializationTest.XRefMap.cs
@@ -0,0 +1,32 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.Diagnostics;
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using Docfx.Build.ApiPage;
+using Docfx.Build.Engine;
+using Docfx.Build.ManagedReference;
+using Docfx.DataContracts.ManagedReference;
+using Docfx.Plugins;
+using FluentAssertions;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.CodeAnalysis;
+using Xunit.Sdk;
+
+namespace docfx.Tests;
+
+public partial class YamlSerializationTest
+{
+    [Theory]
+    [TestData<XRefMap>]
+    public void YamlSerializationTest_XRefMap(string path)
+    {
+        // Arrange
+        var model = TestData.Load<XRefMap>(path);
+
+        // Act/Assert
+        ValidateYamlRoundTrip(model);
+        ValidateYamlJsonRoundTrip(model);
+    }
+}
diff --git a/test/docfx.Tests/SerializationTests/YamlSerializationTest.cs b/test/docfx.Tests/SerializationTests/YamlSerializationTest.cs
new file mode 100644
index 00000000000..96088759bcb
--- /dev/null
+++ b/test/docfx.Tests/SerializationTests/YamlSerializationTest.cs
@@ -0,0 +1,64 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.Text.Json;
+using Docfx.Common;
+using Docfx.YamlSerialization;
+using FluentAssertions;
+using FluentAssertions.Equivalency;
+namespace docfx.Tests;
+
+public partial class YamlSerializationTest
+{
+    private static readonly ThreadLocal<YamlSerializer> YamlJsonSerializer = new(() => new YamlSerializer(SerializationOptions.JsonCompatible | SerializationOptions.DisableAliases));
+
+    /// <summary>
+    /// Helper method to validate serialize/deserialize results.
+    /// </summary>
+    protected void ValidateYamlRoundTrip<T>(T model)
+    {
+        // Act
+        using var writer = new StringWriter();
+        YamlUtility.Serialize(writer, model);
+        var yaml = writer.ToString();
+
+        var result = YamlUtility.Deserialize<T>(new StringReader(yaml));
+
+        // Assert
+        result.Should().BeEquivalentTo(model);
+    }
+
+    /// <summary>
+    /// Helper method to validate serialize/deserialize results.
+    /// </summary>
+    protected void ValidateYamlJsonRoundTrip<T>(T model)
+    {
+        // 1. Serialize to JSON with YamlDotNet
+        using var writer = new StringWriter();
+        YamlJsonSerializer.Value.Serialize(writer, model);
+        var json = writer.ToString();
+
+        // 2. Deserialize JSON to models
+        var systemTextJsonModel = SystemTextJsonUtility.Deserialize<T>(json);
+        var newtownsoftJsonModel = NewtonsoftJsonUtility.Deserialize<T>(new StringReader(json));
+
+        // Assert
+
+        // 3.1. Validate SystemTextJson/NewtonsoftJson models.
+        systemTextJsonModel.Should().BeEquivalentTo(newtownsoftJsonModel, customAssertionOptions);
+        newtownsoftJsonModel.Should().BeEquivalentTo(systemTextJsonModel, customAssertionOptions);
+
+        // 3.3. Validate models that is loaded by YamlUtility.
+        model.Should().BeEquivalentTo(newtownsoftJsonModel, customAssertionOptions);
+        model.Should().BeEquivalentTo(systemTextJsonModel, customAssertionOptions);
+        systemTextJsonModel.Should().BeEquivalentTo(model, customAssertionOptions);
+        newtownsoftJsonModel.Should().BeEquivalentTo(systemTextJsonModel, customAssertionOptions);
+    }
+
+    private static EquivalencyAssertionOptions<T> customAssertionOptions<T>(EquivalencyAssertionOptions<T> opt)
+    {
+        // By default. JsonElement is compared by reference because JsonElement don't override Equals.
+        return opt.ComparingByMembers<JsonElement>()
+                  .Using(new CustomEqualityEquivalencyStep());
+    }
+}
diff --git a/test/docfx.Tests/Utilities/JsonSchemaUtility.cs b/test/docfx.Tests/Utilities/JsonSchemaUtility.cs
index 1710ff85f52..0d12c1e2063 100644
--- a/test/docfx.Tests/Utilities/JsonSchemaUtility.cs
+++ b/test/docfx.Tests/Utilities/JsonSchemaUtility.cs
@@ -1,9 +1,9 @@
 // Licensed to the .NET Foundation under one or more agreements.
 // The .NET Foundation licenses this file to you under the MIT license.
 
-using Json.Schema;
 using System.Text;
 using System.Text.Json;
+using Json.Schema;
 
 namespace Docfx.Tests;
 
diff --git a/test/docfx.Tests/Utilities/PathHelper.cs b/test/docfx.Tests/Utilities/PathHelper.cs
index bd28b418c13..05fd58838b0 100644
--- a/test/docfx.Tests/Utilities/PathHelper.cs
+++ b/test/docfx.Tests/Utilities/PathHelper.cs
@@ -22,7 +22,7 @@ public static string GetSolutionFolder([CallerFilePath] string callerFilePath =
         {
             // CallerFilePath is resolved at build timing.
             // If build/test is executed on separated machine. It failed to find file.
-            throw new Exception($"File is not found. callerFilePath: {callerFilePath}");
+            throw new FileNotFoundException($"File is not found. callerFilePath: {callerFilePath}");
         }
 
         return FindSolutionFolder(callerFilePath, "docfx");
@@ -46,4 +46,63 @@ private static string FindSolutionFolder(string callerFilePath, string solutionN
 
         return dir.FullName;
     }
+
+    /// <summary>
+    /// Find TestData from callerFilePath.
+    /// </summary>
+    public static string ResolveTestDataPath(string path = "", [CallerFilePath] string callerFilePath = "")
+    {
+        if (Path.IsPathFullyQualified(path))
+            return path;
+
+        var dir = GetTestDataDirectory(callerFilePath);
+
+        var resultPath = Path.Combine(dir, path);
+        if (!File.Exists(callerFilePath) && !Directory.Exists(callerFilePath))
+        {
+            throw new FileNotFoundException($"Specified TestData file/directory is not found. path: {resultPath}");
+        }
+
+        return Path.GetFullPath(resultPath);
+    }
+
+    /// <summary>
+    /// Find TestData from callerFilePath.
+    /// </summary>
+    public static string GetTestDataDirectory([CallerFilePath] string callerFilePath = "")
+    {
+        if (callerFilePath.StartsWith("/_/"))
+        {
+            var workspace = Environment.GetEnvironmentVariable("GITHUB_WORKSPACE");
+            if (workspace != null)
+                callerFilePath = callerFilePath.Replace("/_/", workspace);
+        }
+
+        if (!File.Exists(callerFilePath))
+        {
+            // CallerFilePath is resolved at build timing.
+            // If build/test is executed on separated machine. It failed to find file.
+            throw new FileNotFoundException($"File is not found. callerFilePath: {callerFilePath}");
+        }
+
+        // Find closest `TestData` directory.
+        var dir = new FileInfo(callerFilePath).Directory;
+        while (dir != null)
+        {
+            var testDataDir = dir.EnumerateDirectories()
+                                 .FirstOrDefault(d => d.Name == "TestData");
+            if (testDataDir != null)
+            {
+                dir = testDataDir;
+                break;
+            }
+
+            dir = dir.Parent;
+        }
+
+        if (dir == null)
+            throw new DirectoryNotFoundException("Failed to find TestData folder.");
+
+        return dir.FullName;
+    }
 }
diff --git a/test/docfx.Tests/docfx.Tests.csproj b/test/docfx.Tests/docfx.Tests.csproj
index 21c9af9adf8..7ae078bfb84 100644
--- a/test/docfx.Tests/docfx.Tests.csproj
+++ b/test/docfx.Tests/docfx.Tests.csproj
@@ -1,4 +1,5 @@
-<Project Sdk="Microsoft.NET.Sdk">
+<Project Sdk="Microsoft.NET.Sdk">
+  <PropertyGroup />
   <ItemGroup>
     <None Include="Assets\**" CopyToOutputDirectory="PreserveNewest" />
   </ItemGroup>