`|
diff --git a/docs/References/command-line-Interface/_category_.json b/docs/References/command-line-Interface/_category_.json
deleted file mode 100644
index dfbb298a..00000000
--- a/docs/References/command-line-Interface/_category_.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "position": 1,
- "label": "Command-line Interface"
-}
diff --git a/docs/Resources/AetherLink/index.md b/docs/Resources/AetherLink/index.md
new file mode 100644
index 00000000..2d3b15be
--- /dev/null
+++ b/docs/Resources/AetherLink/index.md
@@ -0,0 +1,166 @@
+---
+sidebar_position: 3
+title: AetherLink
+description: Transfer tamper-proof data from off-chain to on-chain
+---
+
+# AetherLink
+
+## 1. Introduction
+
+A web3 oracle is essential for decentralized networks, enabling smart contracts to access real-world data like weather
+updates or market prices. However, the security of oracles is a concern, as malicious actions can compromise contract
+execution. Choosing reliable oracle services is crucial in web3 development. Moreover, oracles not only link blockchains
+to real-world data but also enable the retrieval of information from other blockchain networks.
+
+![oracle](/img/oracle.png)
+
+## 2. aelf Oracle Services - AetherLink
+
+Among the various products in aelf, some products may require information from other chains. For example, the [eBridge](https://ebridge.exchange/)
+product needs to access lock-up information of NFTs on the Ethereum chain. This necessitates the use of oracle services
+for data interchange. To expand the aelf ecosystem and enhance user services, it is essential to establish the
+foundational services for oracle mechanisms.
+
+In this context, AetherLink, aelf's proprietary oracle service, has been developed. AetherLink primarily focuses on
+providing Verified Random Function (VRF) capabilities and Data Feeds functionality.
+
+## 3. What can AetherLink do?
+
+### A. Random number generator
+
+Generating random numbers directly on the blockchain is a complex and challenging problem. Due to the deterministic
+nature of blockchain, the results of smart contract executions must be consistent across all nodes in the network.
+Therefore, random number generation in smart contracts needs to be verifiable and replicable, ensuring that each node
+obtains the same result when executing the same smart contract.
+
+However, traditional pseudo-random number generation methods, such as using block hashes, face challenges in this
+environment. If block hashes are used, each node in the smart contract would generate the same random number using
+identical inputs, making it impossible to achieve true randomness.
+
+AetherLink VRF introduces the concept of Verifiable Random Function (VRF), employing algorithms designed by
+cryptographic experts to ensure that the generated random numbers on-chain are verifiable and unpredictable. AetherLink
+VRF provides a secure, decentralized, and verifiable mechanism for generating random numbers in smart contracts,
+delivering high-quality randomness without compromising security and usability.
+
+The key advantages of using AetherLink VRF include:
+
+#### 1. Verifiability:
+
+Cryptographic proofs are used to demonstrate the authenticity of the random number generation process, allowing smart
+contracts and users to verify the legitimacy of the generated random numbers.
+
+#### 2. Unpredictability:
+
+Utilizing VRF algorithms ensures that random numbers generated by AetherLink VRF are unpredictable, even under identical
+input conditions.
+
+#### 3. Decentralization:
+
+AetherLink VRF operates across multiple nodes, enhancing the decentralization of random number generation and mitigating
+risks associated with a single point of control.
+
+```csharp title="Random number generator code segment"
+{
+ var random = State.ConsensusContract.GetRandomHash.Call(new Int64Value
+ {
+ Value = specificData.BlockNumber
+ });
+
+ var alpha = HashHelper.ConcatAndCompute(random, specificData.PreSeed);
+
+ Context.ECVrfVerify(publicKey, alpha.ToByteArray(), report.Result.ToByteArray(), out var beta);
+ Assert(beta != null && beta.Length > 0, "Vrf verification fail.");
+
+ var randomHash = Hash.LoadFromByteArray(beta);
+
+ for (var i = 0; i < specificData.NumWords; i++)
+ {
+ response.Data.Add(HashHelper.ConcatAndCompute(randomHash, HashHelper.ComputeFrom(i)));
+ }
+
+ return response;
+}
+```
+
+The process involves obtaining a random hash from the consensus contract, verifying it through ECVRF with a public key
+and an oracle-reported result, and then creating a set of random words based on the verified data.
+
+### B. DataFeeds
+
+The AetherLink Data Feeds Coordinator provides a quick and reliable connection for smart contracts to real-world data,
+encompassing data types like asset prices, reserve balances, NFT floor prices, and L2 sequencer health.
+
+Data feeds from the Coordinator include Price Feeds, Proof of Reserve Feeds, NFT Floor Price Feeds, Rate and Volatility
+Feeds, and L2 Sequencer Uptime Feeds. For example, Price Feeds are crucial for real-time actions in applications like
+decentralized finance (DeFi) platforms. These feeds aggregate data from multiple sources, ensuring reliability through
+the Decentralized Data Model and Offchain Reporting.
+
+Components of a data feed involve the Consumer (onchain or offchain applications using Data Feeds), Coordinator contract
+(onchain coordinator pointing to the oracle), and Oracle contract (receiving periodic data updates from the oracle
+network and storing aggregated data onchain).
+
+Different data feeds cater to specific use cases, such as Proof of Reserve Feeds indicating the status of reserves, NFT
+Floor Price Feeds providing the lowest NFT prices, and Rate and Volatility Feeds offering interest rate curve data. L2
+sequencer uptime feeds track the last known status of the sequencer on Layer 2 networks.
+
+## 4. AetherLink Contracts
+
+To achieve these functionalities, aelf has deployed 3 main contracts. Their names and their functionalities are:
+
+| Contract Type | Functions and Responsibilities |
+| ------------------- | ----------------------------------------------------------------------------------------------------------------------- |
+| Consumer Contract | 1. Task initiation and receipt of results
2. Result inquiry |
+| Coordinate Contract | 1. Task management
2. VRF Proof verification and random number generation
3. Threshold signature verification |
+| Oracle Contract | 1. Node management
2. Task event publication |
+
+### A. Consumer Contract
+
+A contract deployed by the user, for which the official interface proto file is provided by the platform for task
+initiation and result retrieval. Users are required to reference and implement this interface. The main functionalities
+include:
+
+#### a. Task initiation:
+
+Initiated by the user, subsequently invoking the Oracle contract to carry out subsequent operations.
+
+#### b. Result retrieval:
+
+Callback function executed by the Oracle contract, writing the results back to the user contract. Users are responsible
+for implementing the logic for data storage.
+
+### B. Coordinator Contract
+
+A contract provided by the platform. Based on the current products, PriceFeeds and VRF, two corresponding Coordinator
+contracts need to be deployed. The main functionalities include:
+
+#### a. Task management:
+
+Generates a unique 1D for tasks along with task details, storing them in the contract.
+
+#### b. Threshold signature verification (for non-algorithmic verification thresholds) / VRF Proof verification:
+
+After nodes submit task results, if it's a PriceFeeds-type task, the Coordinator contract is responsible for verifying
+the submitted signatures through threshold signature verification. If it's a VRF-type task, the Coordinator contract
+needs to reconstruct the random hash from the submitted proof.
+
+### C. Oracle Contract
+
+The official contract provided decouples Oracle nodes and Consumer contracts from business logic. It has three main
+functionalities:
+
+#### a. Subscription Feature:
+
+Provides subscription management functionality for user contracts, enabling task initiation through subscriptions.
+
+#### b. Node Management Feature:
+
+Implements the registration and role assignment of Oracle nodes, with configurable parameters for threshold signature.
+
+#### c. Event-Driven Feature:
+
+Oracle nodes need to listen to events from this contract, triggering corresponding operations when events are emitted.
+
+The whole project structure:
+
+![structure](/img/AetherLinkStructure.png)
\ No newline at end of file
diff --git a/docs/Resources/DevOps.md b/docs/Resources/DevOps/index.md
similarity index 95%
rename from docs/Resources/DevOps.md
rename to docs/Resources/DevOps/index.md
index b3a38512..fd9bbe1f 100644
--- a/docs/Resources/DevOps.md
+++ b/docs/Resources/DevOps/index.md
@@ -1,3 +1,9 @@
+---
+sidebar_position: 5
+title: DevOps
+description: Tools to build and deploy efficiently
+image: /img/Logo.aelf.svg
+---
# DevOps
diff --git a/docs/Resources/aelf-whitepaper/index.md b/docs/Resources/aelf-whitepaper/index.md
new file mode 100644
index 00000000..8a0dd55e
--- /dev/null
+++ b/docs/Resources/aelf-whitepaper/index.md
@@ -0,0 +1,5 @@
+---
+sidebar_position: 6
+title: aelf Whitepaper
+description: Read aelf's whitepaper
+---
\ No newline at end of file
diff --git a/docs/Resources/browser-extension.md b/docs/Resources/browser-extension/index.md
similarity index 98%
rename from docs/Resources/browser-extension.md
rename to docs/Resources/browser-extension/index.md
index 33e6f7dd..00710b0c 100644
--- a/docs/Resources/browser-extension.md
+++ b/docs/Resources/browser-extension/index.md
@@ -1,8 +1,15 @@
+---
+sidebar_position: 4
+title: Browser Extension
+description: Explore Portkey wallet and other extensions
+image: /img/Logo.aelf.svg
+---
+
# aelf-web-extension
### Introduction
-aelf Web Extension provides an interface for DApp developers to interact with the AELF blockchain. This guide outlines the usage and implementation details for both users and developers.
+aelf Web Extension provides an interface for DApp developers to interact with the aelf blockchain. This guide outlines the usage and implementation details for both users and developers.
### For Users
diff --git a/docs/Resources/index.md b/docs/Resources/index.md
new file mode 100644
index 00000000..30f2b5c2
--- /dev/null
+++ b/docs/Resources/index.md
@@ -0,0 +1,4 @@
+---
+sidebar_position: 6
+title: Resources
+---
diff --git a/docs/Developer Tools/aelf-web-login.md b/docs/Resources/integration-guide/index.md
similarity index 99%
rename from docs/Developer Tools/aelf-web-login.md
rename to docs/Resources/integration-guide/index.md
index 33b3f497..c47d9803 100644
--- a/docs/Developer Tools/aelf-web-login.md
+++ b/docs/Resources/integration-guide/index.md
@@ -1,3 +1,9 @@
+---
+sidebar_position: 1
+title: Integration Guide
+description: Learn how to integrate with other tools and DApps
+---
+
# Introduction
**aelf-web-login**: Modular React wallet collection and components for aelf applications.
diff --git a/docs/Resources/protobuf-extension/index.md b/docs/Resources/protobuf-extension/index.md
new file mode 100644
index 00000000..f977bb5f
--- /dev/null
+++ b/docs/Resources/protobuf-extension/index.md
@@ -0,0 +1,46 @@
+---
+sidebar_position: 7
+title: Protobuf Extension
+description: An open-source gRPC
+---
+
+# Protobuf Extension
+
+## 1. Introduction
+
+
+In the aelf blockchain development environment, the initial step involves defining interfaces using protobuf.
+This structured approach ensures clarity in communication between different components of the system. To streamline and
+validate the protobuf syntax during development, users can take advantage of the protobuf extension available for Visual
+Studio Code (VSCode).
+
+The protobuf extension for VSCode offers several benefits. Firstly, it provides syntax highlighting and autocompletion
+features, significantly reducing the chances of syntax errors. This real-time assistance promotes code accuracy and
+helps developers catch mistakes early in the development process.
+
+Additionally, the extension facilitates the understanding of complex protobuf structures by offering a convenient way
+to navigate through different message types and their fields. This not only enhances code readability but also
+accelerates the development workflow.
+
+Moreover, the protobuf extension integrates with the overall development environment in VSCode, allowing users to
+leverage the platform's debugging capabilities for protobuf-related code. This integration contributes to a more
+seamless and efficient development experience.
+
+By incorporating the protobuf extension into their workflow, aelf developers can ensure the correctness of their
+protobuf definitions, enhance code quality, and ultimately accelerate the development lifecycle.
+
+## 2. How to Install
+
+1. Open Visual Studio Code.
+2. Navigate to the Extensions view by clicking on the Extensions icon in the Activity Bar on the side of the window or
+using the keyboard shortcut Ctrl+Shift+X.
+3. In the Extensions view, search for "protobuf support" in the search bar.
+4. Look for the extension with the title "protobuf support" and select it from the search results.
+5. Click the "Install" button to install the extension.
+6. Once the installation is complete, you may need to restart VSCode to activate the extension.
+
+Now, you should have "protobuf support" installed and ready to use in your VSCode environment. This extension provides
+valuable features such as syntax highlighting, autocompletion, and other helpful tools to enhance your protobuf
+development experience.
+
+![extension](/img/protobuf-extension.gif)
\ No newline at end of file
diff --git a/docs/Resources/wallet-and-block-explorer.md b/docs/Resources/wallet-and-block-explorer/index.md
similarity index 98%
rename from docs/Resources/wallet-and-block-explorer.md
rename to docs/Resources/wallet-and-block-explorer/index.md
index 595245e5..d5d2eb98 100644
--- a/docs/Resources/wallet-and-block-explorer.md
+++ b/docs/Resources/wallet-and-block-explorer/index.md
@@ -1,3 +1,9 @@
+---
+sidebar_position: 2
+title: Wallet and Block Explorer
+description: Manage your assets and explore aelf's blockchain data
+---
+
# Wallet and Block Explorer
### Explorer
diff --git a/docs/Developer Docs/aelf-design.md b/docs/Tools/Design/index.md
similarity index 97%
rename from docs/Developer Docs/aelf-design.md
rename to docs/Tools/Design/index.md
index cb16dbab..cf4275ff 100644
--- a/docs/Developer Docs/aelf-design.md
+++ b/docs/Tools/Design/index.md
@@ -1,7 +1,12 @@
+---
+sidebar_position: 6
+title: aelf Design
+---
+
-
aelf Design
-A UI component library based on Antd and compliant with aelf visual specifications
+aelf Design
+A UI component library based on Antd and compliant with aelf visual specifications
website: https://aelf-design.vercel.app/
diff --git a/docs/Tools/Faucet/index.md b/docs/Tools/Faucet/index.md
new file mode 100644
index 00000000..29e050ec
--- /dev/null
+++ b/docs/Tools/Faucet/index.md
@@ -0,0 +1,27 @@
+---
+sidebar_position: 5
+title: aelf Testnet Faucet
+---
+
+# aelf Faucet
+
+## 1. Introduction
+
+The aelf Testnet Faucet is a vital resource for developers working on the aelf blockchain. It provides free test tokens, particularly, ELF (native aelf token), Token type SEED token (for creation of new token), NFT type SEED token (for creation of new NFT collection), which are essential for deploying and testing smart contracts, running transactions, and exploring the functionalities of aelf without the risk of losing real assets. By using the faucet, developers can ensure their applications function correctly and efficiently before deploying them to the mainnet.
+
+## 2. Using aelf Faucet
+
+### 2.1 Getting Testnet ELF Tokens
+
+
+
+
+### 2.2 Getting Testnet Token Type SEED Token
+
+
+
+
+### 2.3 Getting Testnet NFT Type SEED Token
+
+
+
\ No newline at end of file
diff --git a/docs/References/command-line-Interface/Commands.md b/docs/Tools/aelf-cli/commands/index.md
similarity index 98%
rename from docs/References/command-line-Interface/Commands.md
rename to docs/Tools/aelf-cli/commands/index.md
index 1ba03ad2..935c9d98 100644
--- a/docs/References/command-line-Interface/Commands.md
+++ b/docs/Tools/aelf-cli/commands/index.md
@@ -1,7 +1,7 @@
---
sidebar_position: 2
title: Commands
-description: Commands
+description: aelf CLI Commands
---
# Commands Overview
@@ -19,7 +19,7 @@ description: Commands
You can set these options in several ways, in order of priority from low to high:
1. **Environment Variables**
- ```sql
+ ```sh
# Set datadir
$ export AELF_CLI_DATADIR=/Users/{you}/.local/share/aelf
@@ -38,32 +38,32 @@ You can set these options in several ways, in order of priority from low to high
**set**: Save configuration in the global `.aelfrc` file.
-```sql
+```sh
$ aelf-command config set endpoint http://127.0.0.1:8000
✔ Succeed!
```
**get**: Retrieve a value from the global `.aelfrc` file.
-```sql
+```sh
$ aelf-command config get endpoint
http://127.0.0.1:8000
```
**delete**: Remove a key-value pair from the global `.aelfrc` file.
-```sql
+```sh
$ aelf-command config delete endpoint
✔ Succeed!
```
**list**: List all configurations stored in the global `.aelfrc` file.
-```sql
+```sh
$ aelf-command config list
endpoint=http://127.0.0.1:8000
password=password
```
**Usage:**
-```sql
+```sh
$ aelf-command config -h
Usage: aelf-command config [options] [key] [value]
@@ -90,7 +90,7 @@ Each line contains a `` pair separated by a whitespace.
### CLI Parameters
You can pass common options directly as CLI parameters:
-```sql
+```sh
$ aelf-command console -a sadaf -p password -e http://127.0.0.1:8000
```
Options given in higher priority (e.g., CLI parameters) will overwrite those with lower priority (e.g., environment variables).
@@ -99,7 +99,7 @@ Options given in higher priority (e.g., CLI parameters) will overwrite those wit
Use the `create` command to create a new account.
-```sql
+```sh
$ aelf-command create -h
Usage: aelf-command create [options] [save-to-file]
@@ -109,7 +109,7 @@ Options:
```
**Examples:**
-```sql
+```sh
$ aelf-command create
$ aelf-command create
$ aelf-command create -c aes-128-cbc
@@ -124,19 +124,19 @@ This command allows you to load an account from a backup.
### Load from Mnemonic
-```sql
+```sh
$ aelf-command load 'great mushroom loan crisp ... door juice embrace'
```
### Load from Private Key
-```sql
+```sh
$ aelf-command load 'e038eea7e151eb451ba2901f7...b08ba5b76d8f288'
```
### Load from Prompting
-```sql
+```sh
$ aelf-command load
? Enter a private key or mnemonic › e038eea7e151eb451ba2901f7...b08ba5b76d8f288
```
@@ -145,7 +145,7 @@ $ aelf-command load
This command allows you to print wallet information, including the `private key`, `address`, `public key`, and `mnemonic`.
-```sql
+```sh
$ aelf-command wallet -a C91b1SF5mMbenHZTfdfbJSkJcK7HMjeiuw...8qYjGsESanXR
AElf [Info]:
Private Key : 97ca9fbece296231f26bee0e493500810f...cbd984f69a8dc22ec9ec89ebb00
@@ -155,7 +155,7 @@ Address : C91b1SF5mMbenHZTfdfbJSkJcK7HMjeiuw...8qYjGsESanXR
## Proposal - Create a Proposal
-There are three types of proposal contracts in AElf:
+There are three types of proposal contracts in aelf:
- AElf.ContractNames.Parliament
- AElf.ContractNames.Referendum
@@ -167,7 +167,7 @@ Depending on your needs, you can choose one and create a proposal.
**Get the Default Organization's Address with the Parliament Contract**
-```sql
+```sh
$ aelf-command call AElf.ContractNames.Parliament GetDefaultOrganizationAddress
✔ Fetching contract successfully!
✔ Calling method successfully!
@@ -183,7 +183,7 @@ The default organization includes all miners; every proposal under AElf.Contract
**Create an Organization with the Referendum Contract**
-```sql
+```sh
$ aelf-command send AElf.ContractNames.Referendum
✔ Fetching contract successfully!
? Pick up a contract method: CreateOrganization
@@ -223,7 +223,7 @@ Result:
### Create a Proposal
-```sql
+```sh
$ aelf-command proposal
? Pick up a contract name to create a proposal: AElf.ContractNames.Parliament
? Enter an organization address: BkcXRkykRC2etHp9hgFfbw2ec1edx7ERBxYtbC97z3Q2bNCwc
@@ -253,7 +253,7 @@ You can get the proposal id, then get the proposal’s status.
### Get Proposal Status
-```sql
+```sh
$ aelf-command call AElf.ContractNames.Parliament GetProposal bafe83ca4ec5b2a2f1e8016d09b21362c9345954a014379375f1a90b7afb43fb
{
...
@@ -274,7 +274,7 @@ $ aelf-command call AElf.ContractNames.Parliament GetProposal bafe83ca4ec5b2a2f1
You can release a proposal when it gets approved.
-```sql
+```sh
$ aelf-command send AElf.ContractNames.Parliament Release bafe83ca4ec5b2a2f1e8016d09b21362c9345954a014379375f1a90b7afb43fb
AElf [Info]:
{ TransactionId:
@@ -285,7 +285,7 @@ AElf [Info]:
Use the `get-tx-result` command to retrieve the details of the transaction:
-```sql
+```sh
$ aelf-command get-tx-result 09c8c824d2e3aea1d...cefe4e236c5b818d6a01d4f7ca0b60fe99535
AElf [Info]: {
"TransactionId": "09c8c824d2e3aea1d...cefe4e236c5b818d6a01d4f7ca0b60fe99535",
@@ -323,7 +323,7 @@ The command outputs detailed information about the transaction, including its st
### Decode the Logs for Readable Result
-```sql
+```sh
$ aelf-command event 09c8c824d2e3aea1d...cefe4e236c5b818d6a01d4f7ca0b60fe99535
```
@@ -333,7 +333,7 @@ This command provides a readable format of the events logged by the transaction.
Here is a sample output from the `get-tx-result` command:
-```sql
+```sh
{
"TransactionId": "09c8c824d2e3aea1d...cefe4e236c5b818d6a01d4f7ca0b60fe99535",
"Status": "MINED",
@@ -369,7 +369,7 @@ Here is a sample output from the `get-tx-result` command:
After running the `event` command, the decoded event output is as follows:
-```sql
+```sh
{
"Address": "25CecrU94dmMdbhC3LWMKxtoaL4Wv8PChGvVJM6PxkHAyvXEhB",
"Name": "Transferred",
@@ -599,19 +599,19 @@ This command helps you understand what happened during a transaction, especially
## send - Send a transaction
-#### 1. Enter AElf Node URI:
+#### 1. Enter aelf Node URI:
```javascript
$ aelf-command send
✔ Enter the URI of an AElf node … http://13.231.179.27:8000
```
-You need to specify the URI of an AElf blockchain node to which you will connect.
+You need to specify the URI of an aelf blockchain node to which you will connect.
#### 2. Enter Wallet Address and Password:
-```sql
+```sh
✔ Enter a valid wallet address, if you do not have, create one by aelf-command create … D3vSjRYL8MpeRpvUDy85ktXijnBe2tHn8NTACsggUVteQCNGP
✔ Enter the password you typed when creating a wallet … ********
```
@@ -621,7 +621,7 @@ Provide your wallet address and the password associated with it. This is necessa
#### 3. Enter Contract Information:
-```sql
+```sh
✔ Enter contract name (System contracts only) or the address of contract … AElf.ContractNames.Token
✔ Fetching contract successfully!
```
@@ -639,7 +639,7 @@ Choose the specific method of the contract you want to invoke. Here, `Transfer`
#### 5. Enter Method Parameters:
-```sql
+```sh
Enter the params one by one, type `Enter` to skip optional param:
? Enter the required param : C91b1SF5mMbenHZTfdfbJSkJcK7HMjeiuwfQu8qYjGsESanXR
? Enter the required param : ELF
@@ -651,7 +651,7 @@ Input the required parameters for the `Transfer` method: recipient address (`to`
#### 6. Confirmation and Execution:
-```sql
+```sh
The params you entered is:
{
"to": "C91b1SF5mMbenHZTfdfbJSkJcK7HMjeiuwfQu8qYjGsESanXR",
@@ -679,13 +679,13 @@ Result:
The transaction is executed successfully, and you receive the `TransactionId` as confirmation.
-By following these steps, you can effectively send transactions on the AElf blockchain using the `aelf-command send` interface. Adjust parameters and contract names as necessary for different contract methods or system contracts within AElf.
+By following these steps, you can effectively send transactions on the aelf blockchain using the `aelf-command send` interface. Adjust parameters and contract names as necessary for different contract methods or system contracts within AElf.
## call - Call a read-only method on a contract
-```sql
+```sh
$ aelf-command call
✔ Enter the the URI of an AElf node … http://13.231.179.27:8000
✔ Enter a valid wallet address, if you do not have, create one by aelf-command create … D3vSjRYL8MpeRpvUDy85ktXijnBe2tHn8NTACsggUVteQCNGP
@@ -719,13 +719,13 @@ Result:
✔ Succeed!
```
-```sql
+```sh
aelf-command call AElf.ContractNames.Token GetTokenInfo '{"symbol":"ELF"}'
```
## get-chain-status - Get the current status of the block chain
-```sql
+```sh
$ aelf-command get-chain-status
✔ Succeed
{
@@ -748,7 +748,7 @@ $ aelf-command get-chain-status
## get-tx-result - Get a transaction result
-```sql
+```sh
$ aelf-command get-tx-result
✔ Enter the the URI of an AElf node … http://13.231.179.27:8000
✔ Enter a valid transaction id in hex format … 7b620a49ee9666c0c381fdb33f94bd31e1b5eb0fdffa081463c3954e9f734a02
@@ -779,7 +779,7 @@ $ aelf-command get-tx-result
## get-blk-height - Get the block height
-```sql
+```sh
$ aelf-command get-blk-height
✔ Enter the the URI of an AElf node … http://13.231.179.27:8000
> 7902091
@@ -789,7 +789,7 @@ $ aelf-command get-blk-height
Either a block height or a block hash can be provided as an argument to this sub-command.
-```sql
+```sh
$ aelf-command get-blk-info
✔ Enter the the URI of an AElf node: http://13.231.179.27:8000
✔ Enter a valid height or block hash: 123
@@ -819,14 +819,14 @@ $ aelf-command get-blk-info
```
-```sql
+```sh
aelf-command get-blk-info ca61c7c8f5fc1bc8af0536bc9b51c61a94f39641a93a748e72802b3678fea4a9 true
```
## console - Open an interactive console
-```sql
+```sh
$ aelf-command console
✔ Enter the the URI of an AElf node … http://13.231.179.27:8000
✔ Enter a valid wallet address, if you do not have, create one by aelf-command create … 2Ue31YTuB5Szy7cnr3SCEGU2gtGi5uMQBYarYUR5oGin1sys6H
diff --git a/docs/Tools/aelf-cli/index.md b/docs/Tools/aelf-cli/index.md
new file mode 100644
index 00000000..155b305f
--- /dev/null
+++ b/docs/Tools/aelf-cli/index.md
@@ -0,0 +1,4 @@
+---
+sidebar_position: 3
+title: aelf CLI
+---
\ No newline at end of file
diff --git a/docs/References/command-line-Interface/Introduction.md b/docs/Tools/aelf-cli/introduction/index.md
similarity index 98%
rename from docs/References/command-line-Interface/Introduction.md
rename to docs/Tools/aelf-cli/introduction/index.md
index b6a113fc..c0744fac 100644
--- a/docs/References/command-line-Interface/Introduction.md
+++ b/docs/Tools/aelf-cli/introduction/index.md
@@ -1,7 +1,7 @@
---
sidebar_position: 1
-title: Introduction to the CLI
-description: Introduction to the CLI
+title: Introduction to CLI
+description: Introduction to the aelf's Command Line Interface
---
# Introduction to the CLI
@@ -44,7 +44,7 @@ You need to create a new account or load an existing account using a `private ke
**Create a New Wallet**
-```sql
+```sh
aelf-command create
```
@@ -65,7 +65,7 @@ Account info has been saved to "/Users/young/.local/share/aelf/keys/2Ue31YTuB5Sz
**Load Wallet from Private Key**
-```sql
+```sh
aelf-command load e038eea7e151eb451ba2901f7...b08ba5b76d8f288
```
@@ -85,7 +85,7 @@ Account info has been saved to "/Users/young/.local/share/aelf/keys/2Ue31YTuB5Sz
**Show Wallet Info**
-```sql
+```sh
aelf-command wallet -a 2Ue31YTuB5Szy7cnr3SCEGU2gtGi5uMQBYarYUR5oGin1sys6H
```
@@ -104,7 +104,7 @@ Here you can decide whether to encrypt the account info and save it to a file.
**Interactive Console**
-```sql
+```sh
aelf-command console -a 2Ue31YTuB5Szy7cnr3SCEGU2gtGi5uMQBYarYUR5oGin1sys6H
✔ Enter the URI of an AElf node: http://127.0.0.1:8000
✔ Enter the password you typed when creating a wallet … ********
@@ -128,7 +128,7 @@ Welcome to aelf interactive console. Ctrl + C to terminate the program. Double t
**Default Parameters**
-```sql
+```sh
aelf-command console
✔ Enter the URI of an AElf node: http://127.0.0.1:8000
✔ Enter a valid wallet address, if you don't have, create one by aelf-command create … 2Ue31YTuB5Szy7cnr3SCEGU2gtGi5uMQBYarYUR5oGin1sys6H
@@ -154,7 +154,7 @@ Welcome to aelf interactive console. Ctrl + C to terminate the program. Double t
To get help, use:
-```sql
+```sh
aelf-command -h
```
@@ -191,13 +191,13 @@ Commands:
To get help for a sub-command, such as call, use:
-```sql
+```sh
aelf-command call -h
```
Output example:
-```sql
+```sh
Usage: aelf-command call [options] [contract-address|contract-name] [method] [params]
Call a read-only method on a contract.
@@ -215,13 +215,13 @@ aelf-command call
For the interactive console:
-```sql
+```sh
aelf-command console -h
```
Output example:
-```sql
+```sh
Usage: aelf-command console [options]
Open a node REPL
diff --git a/docs/Tools/aelf-deploy/index.md b/docs/Tools/aelf-deploy/index.md
new file mode 100644
index 00000000..a3b3f96d
--- /dev/null
+++ b/docs/Tools/aelf-deploy/index.md
@@ -0,0 +1,41 @@
+---
+sidebar_position: 2
+title: aelf Deploy Tool
+---
+
+# aelf Deploy Tool
+
+## 1. Introduction
+
+The aelf-deploy tool simplifies the deployment and updating of aelf contracts using your command prompt.
+
+## 2. Setting up
+
+To install the aelf-deploy tool globally, use the following command:
+```bash title="Terminal"
+dotnet tool install --global aelf.deploy
+```
+
+## 3. Using aelf-deploy
+
+### Example Usage
+
+Deploy a contract with the following command:
+```bash title="Terminal"
+aelf-deploy -a $WALLET_ADDRESS -p $WALLET_PASSWORD -c $CONTRACT_PATH/$CONTRACT_FILE.dll.patched -e https://tdvw-test-node.aelf.io/
+```
+
+### Command Options
+
+-a: Address of the wallet.
+-p: Password of keystore file.
+-c: Location of the contract DLL.
+-u: Update contract (true/false). Default is false.
+-e: Endpoint. Default is 127.0.0.1:8000.
+-i: Include audit (true/false). Default is false (deploy without audit).
+-s: Salt, used to calculate contract addresses. If not provided, it defaults to the hash of the contract code.
+-o: Set to false if the deployer is an EOA address. Default is false.
+-t: Specify the contract address to update.
+-k: Private Key.
+
+By following these instructions, you can easily deploy and manage aelf contracts using the aelf-deploy tool.
\ No newline at end of file
diff --git a/docs/Tools/chain-sdk/csharp-sdk/index.md b/docs/Tools/chain-sdk/csharp-sdk/index.md
new file mode 100644
index 00000000..a9354b61
--- /dev/null
+++ b/docs/Tools/chain-sdk/csharp-sdk/index.md
@@ -0,0 +1,812 @@
+---
+sidebar_position: 2
+title: C# SDK
+description: C# SDK
+image: /img/Logo.aelf.svg
+---
+
+# aelf-sdk.cs - aelf C# API
+
+`aelf-sdk.cs` is a C# library that facilitates communication with an aelf node over HTTP. Below is a comprehensive guide on how to install and use the `aelf-sdk.cs` package, along with some example usages.
+
+
+## Introduction
+
+`aelf-sdk.cs` is a collection of libraries designed for interaction with both local and remote aelf nodes via HTTP connections. This documentation provides instructions on how to install and run `aelf-sdk.cs`, and includes API reference documentation with examples. [aelf-sdk.cs](https://github.com/AElfProject/aelf-sdk.cs)
+
+
+## Adding aelf-sdk.cs package
+
+To use `aelf-sdk.cs`, you need to add the AElf.Client package to your project. This can be done using various methods:
+
+
+### Using Package Manager
+
+Open the Package Manager Console in Visual Studio and run:
+
+```sh
+PM> Install-Package AElf.Client
+```
+
+
+### Using .NET CLI
+
+Run the following command in your terminal:
+
+```sh
+dotnet add package AElf.Client
+```
+
+
+### Using PackageReference
+
+Add the following line to your `.csproj` file:
+
+```sh
+
+```
+
+Replace `X.X.X` with the desired version of the `AElf.Client` package.
+
+
+## Examples
+
+
+### 1. Create Instance
+
+Create a new instance of AElfClient and set the URL of an aelf chain node.
+
+```csharp
+using AElf.Client.Service;
+
+// Create a new instance of AElfClient
+AElfClient client = new AElfClient("http://127.0.0.1:1235");
+```
+
+
+### 2. Test Connection
+
+Check that the aelf chain node is connectable.
+
+```csharp
+var isConnected = await client.IsConnectedAsync();
+Console.WriteLine($"Connected: {isConnected}");
+```
+
+
+### 3. Initiate a Transfer Transaction
+
+
+```csharp
+// Get token contract address.
+var tokenContractAddress = await client.GetContractAddressByNameAsync(HashHelper.ComputeFrom("AElf.ContractNames.Token"));
+
+var methodName = "Transfer";
+var param = new TransferInput
+{
+ To = new Address {Value = Address.FromBase58("7s4XoUHfPuqoZAwnTV7pHWZAaivMiL8aZrDSnY9brE1woa8vz").Value},
+ Symbol = "ELF",
+ Amount = 1000000000,
+ Memo = "transfer in demo"
+};
+var ownerAddress = client.GetAddressFromPrivateKey(PrivateKey);
+
+// Generate a transfer transaction.
+var transaction = await client.GenerateTransaction(ownerAddress, tokenContractAddress.ToBase58(), methodName, param);
+var txWithSign = client.SignTransaction(PrivateKey, transaction);
+
+// Send the transfer transaction to AElf chain node.
+var result = await client.SendTransactionAsync(new SendTransactionInput
+{
+ RawTransaction = txWithSign.ToByteArray().ToHex()
+});
+
+await Task.Delay(4000);
+// After the transaction is mined, query the execution results.
+var transactionResult = await client.GetTransactionResultAsync(result.TransactionId);
+Console.WriteLine(transactionResult.Status);
+
+// Query account balance.
+var paramGetBalance = new GetBalanceInput
+{
+ Symbol = "ELF",
+ Owner = new Address {Value = Address.FromBase58(ownerAddress).Value}
+};
+var transactionGetBalance =await client.GenerateTransaction(ownerAddress, tokenContractAddress.ToBase58(), "GetBalance", paramGetBalance);
+var txWithSignGetBalance = client.SignTransaction(PrivateKey, transactionGetBalance);
+
+var transactionGetBalanceResult = await client.ExecuteTransactionAsync(new ExecuteTransactionDto
+{
+ RawTransaction = txWithSignGetBalance.ToByteArray().ToHex()
+});
+
+var balance = GetBalanceOutput.Parser.ParseFrom(ByteArrayHelper.HexstringToByteArray(transactionGetBalanceResult));
+Console.WriteLine(balance.Balance);
+```
+
+
+
+
+## Web API
+
+You can see how the Web API of the node works at `{chainAddress}/swagger/index.html`. For example, on a local address: `http://127.0.0.1:1235/swagger/index.html`.
+
+Here are the examples and code snippets for interacting with the aelf Web API using the `AElfClient` instance.
+
+### 1. Create Instance
+
+Create a new instance of AElfClient and set the URL of an aelf chain node.
+
+```csharp
+using AElf.Client.Service;
+
+// Create a new instance of AElfClient, change the URL if needed
+AElfClient client = new AElfClient("http://127.0.0.1:1235");
+```
+
+
+### 2. Get Chain Status
+
+- **Web API path**: `/api/blockChain/chainStatus`
+
+- **Parameters** : None
+
+- **Returns**: `ChainStatusDto`
+ - ChainId - string
+ - Branches - Dictionary``
+ - NotLinkedBlocks - Dictionary``
+ - LongestChainHeight - long
+ - LongestChainHash - string
+ - GenesisBlockHash - string
+ - GenesisContractAddress - string
+ - LastIrreversibleBlockHash - string
+ - LastIrreversibleBlockHeight - long
+ - BestChainHash - string
+ - BestChainHeight - long
+
+#### Example:
+
+```csharp
+await client.GetChainStatusAsync();
+```
+
+
+### 3. Get Contract File Descriptor Set
+
+- **Web API path**: `/api/blockChain/contractFileDescriptorSet`
+
+- **Parameters** :
+ - contractAddress - string
+
+- **Returns**: `[]byte`
+
+
+#### Example:
+
+```csharp
+await client.GetContractFileDescriptorSetAsync(address);
+```
+
+
+### 4. Get Block Height
+
+- **Web API path**: `/api/blockChain/blockHeight`
+
+- **Parameters** : None
+
+- **Returns**: `long`
+
+
+#### Example:
+
+```csharp
+await client.GetBlockHeightAsync();
+```
+
+
+### 5. Get Block Information by Block Hash
+
+- **Web API path**: `/api/blockChain/block`
+
+- **Parameters** :
+ - blockHash - string
+ - includeTransactions - bool
+
+- **Returns**: `BlockDto`
+
+ - BlockHash - string
+ - Header - BlockHeaderDto
+ - PreviousBlockHash - string
+ - MerkleTreeRootOfTransactions - string
+ - MerkleTreeRootOfWorldState - string
+ - Extra - string
+ - Height - long
+ - Time - string
+ - ChainId - string
+ - Bloom - string
+ - SignerPubkey - string
+ - Body - BlockBodyDto
+ - TransactionsCount - int
+ - Transactions - []string
+
+#### Example:
+
+```csharp
+await client.GetBlockByHashAsync(blockHash);
+```
+
+
+### 6. Get Block Information by Block Height
+
+- **Web API path**: `/api/blockChain/blockByHeight`
+
+- **Parameters** :
+ - blockHeight - long
+ - includeTransactions - bool
+
+- **Returns**: `BlockDto`
+
+ - BlockHash - string
+ - Header - BlockHeaderDto
+ - PreviousBlockHash - string
+ - MerkleTreeRootOfTransactions - string
+ - MerkleTreeRootOfWorldState - string
+ - Extra - string
+ - Height - long
+ - Time - string
+ - ChainId - string
+ - Bloom - string
+ - SignerPubkey - string
+ - Body - BlockBodyDto
+ - TransactionsCount - int
+ - Transactions - []string
+
+
+#### Example:
+
+```csharp
+await client.GetBlockByHeightAsync(height);
+```
+
+
+### 7. Get Transaction Result
+
+- **Web API path**: `/api/blockChain/transactionResult`
+
+- **Parameters** :
+ - transactionId - string
+
+- **Returns**: `TransactionResultDto`
+
+ - TransactionId - string
+ - Status - string
+ - Logs - []LogEventDto
+ - Address - string
+ - Name - string
+ - Indexed - []string
+ - NonIndexed - string
+ - Bloom - string
+ - BlockNumber - long
+ - BlockHash - string
+ - Transaction - TransactionDto
+ - From - string
+ - To - string
+ - RefBlockNumber - long
+ - RefBlockPrefix - string
+ - MethodName - string
+ - Params - string
+ - Signature - string
+ - Error - string
+
+
+#### Example:
+
+```csharp
+await client.GetTransactionResultAsync(transactionId);
+```
+
+
+### 8. Get Multiple Transaction Results in a Block
+
+- **Web API path**: `/api/blockChain/transactionResults`
+
+- **Parameters** :
+ - blockHash - string
+ - offset - int
+ - limit - int
+
+- **Returns**: `List` - The array of transaction result:
+ - the transaction result object
+
+
+#### Example:
+
+```csharp
+await client.GetTransactionResultsAsync(blockHash, 0, 10);
+```
+
+### 9. Get Transaction Pool Status
+
+- **Web API path**: `/api/blockChain/transactionPoolStatus`
+
+- **Parameters** : None
+
+- **Returns**: `TransactionPoolStatusOutput`
+ - Queued - int
+ - Validated - int
+
+
+#### Example:
+
+```csharp
+var transactionPoolStatus = await client.GetTransactionPoolStatusAsync();
+```
+
+### 10. Send Transaction
+
+- **Web API path**: `/api/blockChain/sendTransaction` (POST)
+
+- **Parameters** :
+ - `SendRawTransactionInput` - Serialization of data into protobuf data:
+ -`RawTransaction` - string
+
+- **Returns**: `SendRawTransactionOutput`
+ - TransactionId - string
+
+
+#### Example:
+
+```csharp
+var sendTransactionOutput = await client.SendTransactionAsync(sendTransactionInput);
+```
+
+### 11. Send Raw Transaction
+
+- **Web API path**: `/api/blockChain/sendTransaction` (POST)
+
+- **Parameters** :
+ - SendRawTransactionInput - Serialization of data into protobuf data:
+ - `Transaction` - string
+ - `Signature` - string
+ - `ReturnTransaction` - bool
+
+- **Returns**: `SendRawTransactionOutput`
+ - TransactionId - string
+ - Transaction - TransactionDto
+
+
+#### Example:
+
+```csharp
+var sendRawTransactionInput = new SendRawTransactionInput
+{
+ Transaction = "YOUR_RAW_TRANSACTION",
+ Signature = "YOUR_SIGNATURE",
+ ReturnTransaction = true
+};
+var sendRawTransactionOutput = await client.SendRawTransactionAsync(sendRawTransactionInput);
+Console.WriteLine($"Transaction ID: {sendRawTransactionOutput.TransactionId}");
+```
+
+### 12. Send Multiple Transactions
+
+- **Web API path**: `/api/blockChain/sendTransactions` (POST)
+
+- **Parameters** :
+ - `SendTransactionsInput` - Serialization of data into protobuf data:
+ - `SendTransactionsInput` - string
+
+- **Returns**: `string[]`
+
+
+#### Example:
+
+```csharp
+await client.SendTransactionsAsync(input);
+```
+
+### 13. Create Raw Transaction
+
+- **Web API path**: `/api/blockChain/rawTransaction` (POST)
+
+- **Parameters** :
+ - `CreateRawTransactionInput`
+ - `From` - string
+ - `To` - string
+ - `RefBlockNumber` - long
+ - `RefBlockHash` - string
+ - `MethodName` - string
+ - `Params` - string
+
+- **Returns**:
+ - `CreateRawTransactionOutput`
+ - `RawTransactions` - string
+
+
+#### Example:
+
+```csharp
+await client.CreateRawTransactionAsync(input);
+```
+
+### 14. Execute Transaction
+
+- **Web API path**: `/api/blockChain/executeTransaction` (POST)
+
+- **Parameters** :
+ - `ExecuteRawTransactionDto` - Serialization of data into protobuf data:
+ - `RawTransaction` - string
+
+- **Returns**: `string`
+
+
+#### Example:
+
+```csharp
+await client.ExecuteRawTransactionAsync(input);
+```
+
+### 15. Execute Raw Transaction
+
+- **Web API path**: `/api/blockChain/executeRawTransaction` (POST)
+
+- **Parameters** :
+ - `ExecuteRawTransactionDto` - Serialization of data into protobuf data:
+ - `RawTransaction` - string
+ - `Signature` - string
+
+- **Returns**: `string`
+
+
+#### Example:
+```csharp
+await client.ExecuteRawTransactionAsync(input);
+```
+
+
+### 16. Get Peers
+
+- **Web API path**: `/api/net/peers`
+
+- **Parameters** :
+ - `withMetrics` - bool
+
+- **Returns**: `List`
+
+ - `IpAddress` - string
+ - `ProtocolVersion` - int
+ - `ConnectionTime` - long
+ - `ConnectionStatus` - string
+ - `Inbound` - bool
+ - `BufferedTransactionsCount` - int
+ - `BufferedBlocksCount` - int
+ - `BufferedAnnouncementsCount` - int
+ - `NodeVersion` - string
+ - `RequestMetrics` - List``
+ - `RoundTripTime` - long
+ - `MethodName` - string
+ - `Info` - string
+ - `RequestTime` - string
+
+
+
+#### Example:
+
+```csharp
+await client.GetPeersAsync(false);
+```
+
+
+### 17. Add Peer
+
+Attempts to remove a node from the connected network nodes.
+
+- **Web API path**: `/api/net/peer` (POST)
+
+- **Parameters** :
+ - `ipAddress` - string
+
+- **Returns**: `bool`
+
+#### Example:
+
+```csharp
+await client.AddPeerAsync("127.0.0.1:7001");
+```
+
+
+### 18. Remove Peer
+
+Attempts to remove a node from the connected network nodes.
+
+- **Web API path**: `/api/net/peer` (DELETE)
+
+- **Parameters** :
+ - `ipAddress` - string
+
+- **Returns**: `bool`
+
+```csharp
+await client.RemovePeerAsync("127.0.0.1:7001");
+```
+
+
+### 19. Calculate Transaction Fee
+
+- **Web API path**: `/api/blockChain/calculateTransactionFee` (POST)
+
+- **Parameters** :
+ - `CalculateTransactionFeeInput` - The object with the following structure :
+ - `RawTrasaction` - string
+
+- **Returns**:
+ - `TransactionFeeResultOutput`
+ - `Success` - bool
+ - `TransactionFee` - map[string]interface{}
+ - `ResourceFee` - map[string]interface{}
+
+#### Example:
+
+```csharp
+var input = new CalculateTransactionFeeInput{
+ RawTransaction = RawTransaction
+};
+await Client.CalculateTransactionFeeAsync(input);
+```
+
+
+### 20. Get Network Information
+
+- **Web API path**: `/api/net/networkInfo`
+
+- **Parameters** : Empty
+
+- **Returns**:
+ - `NetworkInfoOutput`
+ - `Version` - string
+ - `ProtocolVersion` - int
+ - `Connections` - int
+
+#### Example:
+
+```csharp
+await client.GetNetworkInfoAsync();
+```
+
+These examples demonstrate how to use the aelf Web API in C# using the `AElfClient` class to interact with the aelf blockchain, including checking chain status, handling transactions, and managing network peers.
+
+
+## aelf Client
+
+### 1. IsConnected
+
+Verify whether this SDK successfully connects to the chain.
+
+- **Parameters**: None
+
+- **Returns** :
+ - `bool`: Connection status
+
+#### Example:
+
+```csharp
+bool isConnected = await client.IsConnectedAsync();
+Console.WriteLine($"Is Connected: {isConnected}");
+```
+
+### 2. GetGenesisContractAddress
+
+Get the address of the genesis contract.
+
+- **Parameters**: None
+
+- **Returns** :
+ - `string`: Genesis contract address
+
+#### Example:
+
+```csharp
+await client.GetGenesisContractAddressAsync();
+```
+
+### 3. GetContractAddressByName
+
+Get the address of a contract by the given contract name hash.
+
+- **Parameters**:
+ - `contractNameHash` (string): Hash of the contract name
+
+- **Returns** :
+ - `string`: Contract address
+
+#### Example:
+
+```csharp
+await client.GetContractAddressByNameAsync(contractNameHash);
+```
+
+### 4. GenerateTransaction
+
+Build a transaction from the input parameters.
+
+- **Parameters**:
+ - `from` (string): Sender's address
+ - `to` (string): Recipient's address
+ - `methodName` (string): Method name
+ - `input` IMessage
+
+- **Returns** :
+ - `Transaction`: Built transaction
+
+#### Example:
+
+```csharp
+await client.GenerateTransactionAsync(from, to, methodName, input);
+```
+
+### 5. GetFormattedAddress
+
+Convert the `Address` to the displayed string format: symbol_base58-string_base58-string_chain-id.
+
+- **Parameters**:
+ - `address` (string): Address to format
+
+- **Returns** :
+ - `string`: Formatted address
+
+#### Example:
+
+```csharp
+await client.GetFormattedAddressAsync(address);
+```
+
+### 6. SignTransaction
+
+- **Parameters**:
+ - `privateKey` (string): Address to format
+ - `transaction` (string): Address to format
+
+- **Returns** :
+ - `Transaction`
+
+#### Example:
+
+```csharp
+client.SignTransaction(privateKeyHex, transaction);
+```
+
+### 7. GetAddressFromPubKey
+
+Get the account address through the public key.
+
+- **Parameters**:
+ - `pubKey` (string): Public key
+
+- **Returns** :
+ - `string`: Account address
+
+#### Example:
+
+```csharp
+client.GetAddressFromPubKey(pubKey);
+```
+
+### 8. GetAddressFromPrivateKey
+
+Get the account address through the private key.
+
+- **Parameters**:
+ - `privateKey` (string): Private key
+
+- **Returns** :
+ - `string`: Account address
+
+#### Example:
+
+```csharp
+client.GetAddressFromPrivateKey(privateKeyHex);
+```
+
+### 9. GenerateKeyPairInfo
+
+Generate a new account key pair.
+
+- **Parameters**: None
+
+- **Returns** :
+ - `KeyPairInfo`
+ - `PrivateKey` - string
+ - `PublicKey` - string
+ - `Address` - string
+
+#### Example:
+
+```csharp
+client.GenerateKeyPairInfo();
+```
+
+## Supports
+
+.NET Standard 2.0
\ No newline at end of file
diff --git a/docs/Developer Tools/Chain Sdk/go-sdk.md b/docs/Tools/chain-sdk/go-sdk/index.md
similarity index 64%
rename from docs/Developer Tools/Chain Sdk/go-sdk.md
rename to docs/Tools/chain-sdk/go-sdk/index.md
index c87e132e..1e1d8f4d 100644
--- a/docs/Developer Tools/Chain Sdk/go-sdk.md
+++ b/docs/Tools/chain-sdk/go-sdk/index.md
@@ -2,19 +2,18 @@
sidebar_position: 3
title: Go SDK
description: Go SDK
+image: /img/Logo.aelf.svg
---
# aelf-sdk.go - aelf Go API
## Introduction
-----------
-This document provides information on how to use the AElf Go SDK (aelf-sdk.go) to interact with an AElf node. The SDK allows you to communicate with a local or remote AElf node using HTTP. Here you will find instructions for setting up the SDK, examples of how to use it, and a brief description of its main functions.
+This document provides information on how to use the aelf Go SDK (aelf-sdk.go) to interact with an aelf node. The SDK allows you to communicate with a local or remote aelf node using HTTP. Here you will find instructions for setting up the SDK, examples of how to use it, and a brief description of its main functions.
For additional information, please visit the repository: [aelf-sdk.go](https://github.com/AElfProject/aelf-sdk.go)
## Installation
-----------
To install the `aelf-sdk.go` package, run the following command:
@@ -23,7 +22,6 @@ go get -u github.com/AElfProject/aelf-sdk.go
```
## Examples
-----------
### Create instance
@@ -31,15 +29,7 @@ go get -u github.com/AElfProject/aelf-sdk.go
Create a new instance of `AElfClient` and set the URL of an AElf chain node:
```go
-import (
- "github.com/AElfProject/aelf-sdk.go/client"
- "github.com/AElfProject/aelf-sdk.go/util"
- "github.com/AElfProject/aelf-sdk.go/pb"
- "github.com/golang/protobuf/proto"
- "encoding/hex"
- "fmt"
- "time"
-)
+import ("github.com/AElfProject/aelf-sdk.go/client")
var aelf = client.AElfClient{
Host: "http://127.0.0.1:8000",
@@ -52,18 +42,14 @@ var aelf = client.AElfClient{
Here is an example of how to initiate a transfer transaction using the aelf Go SDK:
-#### 1. Get the Token Contract Address:
```go
+// Get token contract address.
tokenContractAddress, _ := aelf.GetContractAddressByName("AElf.ContractNames.Token")
fromAddress := aelf.GetAddressFromPrivateKey(aelf.PrivateKey)
methodName := "Transfer"
toAddress, _ := util.Base58StringToAddress("7s4XoUHfPuqoZAwnTV7pHWZAaivMiL8aZrDSnY9brE1woa8vz")
-```
-
-#### 2. Set Transaction Parameters:
-```go
params := &pb.TransferInput{
To: toAddress,
Symbol: "ELF",
@@ -71,30 +57,21 @@ params := &pb.TransferInput{
Memo: "transfer in demo",
}
paramsByte, _ := proto.Marshal(params)
-```
-
-#### 3. Generate and Sign the Transaction:
-```go
+// Generate a transfer transaction.
transaction, _ := aelf.CreateTransaction(fromAddress, tokenContractAddress, methodName, paramsByte)
signature, _ := aelf.SignTransaction(aelf.PrivateKey, transaction)
transaction.Signature = signature
-```
-
-#### 4. Send the Transaction to the AElf Chain Node:
-```go
-transactionBytes, _ := proto.Marshal(transaction)
-sendResult, _ := aelf.SendTransaction(hex.EncodeToString(transactionBytes))
+// Send the transfer transaction to aelf chain node.
+transactionByets, _ := proto.Marshal(transaction)
+sendResult, _ := aelf.SendTransaction(hex.EncodeToString(transactionByets))
time.Sleep(time.Duration(4) * time.Second)
transactionResult, _ := aelf.GetTransactionResult(sendResult.TransactionID)
fmt.Println(transactionResult)
-```
-
-#### 5. Query Account Balance:
-```go
+// Query account balance.
ownerAddress, _ := util.Base58StringToAddress(fromAddress)
getBalanceInput := &pb.GetBalanceInput{
Symbol: "ELF",
@@ -107,8 +84,8 @@ getBalanceTransaction.Params = getBalanceInputByte
getBalanceSignature, _ := aelf.SignTransaction(aelf.PrivateKey, getBalanceTransaction)
getBalanceTransaction.Signature = getBalanceSignature
-getBalanceTransactionBytes, _ := proto.Marshal(getBalanceTransaction)
-getBalanceResult, _ := aelf.ExecuteTransaction(hex.EncodeToString(getBalanceTransactionBytes))
+getBalanceTransactionByets, _ := proto.Marshal(getBalanceTransaction)
+getBalanceResult, _ := aelf.ExecuteTransaction(hex.EncodeToString(getBalanceTransactionByets))
balance := &pb.GetBalanceOutput{}
getBalanceResultBytes, _ := hex.DecodeString(getBalanceResult)
proto.Unmarshal(getBalanceResultBytes, balance)
@@ -118,16 +95,13 @@ fmt.Println(balance)
## Web API
-----------
You can see how the Web API of the node works at `{chainAddress}/swagger/index.html`. For example, on a local address: `http://127.0.0.1:1235/swagger/index.html`.
The usage of these methods is based on the `AElfClient` instance. If you don’t have one, please create it:
```go
-import (
- "github.com/AElfProject/aelf-sdk.go/client"
-)
+import ("github.com/AElfProject/aelf-sdk.go/client")
var aelf = client.AElfClient{
Host: "http://127.0.0.1:8000",
@@ -143,18 +117,20 @@ var aelf = client.AElfClient{
- **Parameters** : None
-- **Returns**: `ChainStatusDto`
- - ChainId - string
- - Branches - map[string]interface{}
- - NotLinkedBlocks - map[string]interface{}
- - LongestChainHeight - int64
- - LongestChainHash - string
- - GenesisBlockHash - string
- - GenesisContractAddress - string
- - LastIrreversibleBlockHash - string
- - LastIrreversibleBlockHeight - int64
- - BestChainHash - string
- - BestChainHeight - int64
+- **Returns**:
+ - `ChainStatusDto`
+
+ - `ChainId` - string
+ - `Branches` - map[string]interface{}
+ - `NotLinkedBlocks` - map[string]interface{}
+ - `LongestChainHeight` - int64
+ - `LongestChainHash` - string
+ - `GenesisBlockHash` - string
+ - `GenesisContractAddress` - string
+ - `LastIrreversibleBlockHash` - string
+ - `LastIrreversibleBlockHeight` - int64
+ - `BestChainHash` - string
+ - `BestChainHeight` - int64
#### Example:
@@ -206,25 +182,27 @@ Get block information by block hash.
- **Web API path**: `/api/blockChain/block`
- **Parameters** :
- - blockHash - string
- - includeTransactions - bool
-
-- **Returns**: `BlockDto`
-
- - BlockHash - string
- - Header - BlockHeaderDto
- - PreviousBlockHash - string
- - MerkleTreeRootOfTransactions - string
- - MerkleTreeRootOfWorldState - string
- - Extra - string
- - Height - int64
- - Time - string
- - ChainId - string
- - Bloom - string
- - SignerPubkey - string
- - Body - BlockBodyDto
- - TransactionsCount - int
- - Transactions - []string
+ - `blockHash` - string
+ - `includeTransactions` - bool
+
+- **Returns**:
+
+ - `BlockDto`
+
+ - `BlockHash` - string
+ - `Header` - BlockHeaderDto
+ - `PreviousBlockHash` - string
+ - `MerkleTreeRootOfTransactions` - string
+ - `MerkleTreeRootOfWorldState` - string
+ - `Extra` - string
+ - `Height` - int64
+ - `Time` - string
+ - `ChainId` - string
+ - `Bloom` - string
+ - `SignerPubkey` - string
+ - `Body` - BlockBodyDto
+ - `TransactionsCount` - int
+ - `Transactions` - []string
#### Example:
@@ -239,25 +217,27 @@ block, err := aelf.GetBlockByHash(blockHash, true)
- **Web API path**: `/api/blockChain/blockByHeight`
- **Parameters** :
- - blockHeight - int64
- - includeTransactions - bool
-
-- **Returns**: `BlockDto`
-
- - BlockHash - string
- - Header - BlockHeaderDto
- - PreviousBlockHash - string
- - MerkleTreeRootOfTransactions - string
- - MerkleTreeRootOfWorldState - string
- - Extra - string
- - Height - int64
- - Time - string
- - ChainId - string
- - Bloom - string
- - SignerPubkey - string
- - Body - BlockBodyDto
- - TransactionsCount - int
- - Transactions - []string
+ - `blockHeight` - int64
+ - `includeTransactions` - bool
+
+- **Returns**:
+
+ - `BlockDto`
+
+ - `BlockHash` - string
+ - `Header` - BlockHeaderDto
+ - `PreviousBlockHash` - string
+ - `MerkleTreeRootOfTransactions` - string
+ - `MerkleTreeRootOfWorldState` - string
+ - `Extra` - string
+ - `Height` - int64
+ - `Time` - string
+ - `ChainId` - string
+ - `Bloom` - string
+ - `SignerPubkey` - string
+ - `Body` - BlockBodyDto
+ - `TransactionsCount` - int
+ - `Transactions` - []string
#### Example:
@@ -271,30 +251,32 @@ block, err := aelf.GetBlockByHeight(100, true)
- **Web API path**: `/api/blockChain/transactionResult`
- **Parameters** :
- - transactionId - string
-
-- **Returns**: `TransactionResultDto`
-
- - TransactionId - string
- - Status - string
- - Logs - []LogEventDto
- - Address - string
- - Name - string
- - Indexed - []string
- - NonIndexed - string
- - Bloom - string
- - BlockNumber - int64
- - BlockHash - string
- - Transaction - TransactionDto
- - From - string
- - To - string
- - RefBlockNumber - int64
- - RefBlockPrefix - string
- - MethodName - string
- - Params - string
- - Signature - string
- - ReturnValue - string
- - Error - string
+ - `transactionId` - string
+
+- **Returns**:
+
+ - `TransactionResultDto`
+
+ - `TransactionId` - string
+ - `Status` - string
+ - `Logs` - []LogEventDto
+ - `Address` - string
+ - `Name` - string
+ - `Indexed` - []string
+ - `NonIndexed` - string
+ - `Bloom` - string
+ - `BlockNumber` - int64
+ - `BlockHash` - string
+ - `Transaction` - TransactionDto
+ - `From` - string
+ - `To` - string
+ - `RefBlockNumber` - int64
+ - `RefBlockPrefix` - string
+ - `MethodName` - string
+ - `Params` - string
+ - `Signature` - string
+ - `ReturnValue` - string
+ - `Error` - string
#### Example:
@@ -311,9 +293,9 @@ Get multiple transaction results in a block.
- **Web API path**: `/api/blockChain/transactionResults`
- **Parameters** :
- - blockHash - string
- - offset - int
- - limit - int
+ - `blockHash` - string
+ - `offset` - int
+ - `limit` - int
- **Returns**: `[]TransactionResultDto`
- the transaction result object
@@ -330,10 +312,11 @@ transactionResults, err := aelf.GetTransactionResults(blockHash, 0, 10)
- **Web API path**: `/api/blockChain/transactionPoolStatus`
- **Parameters** : None
+
- **Returns**: `TransactionPoolStatusOutput`
- - Queued - int
- - Validated - int
+ - `Queued` - int
+ - `Validated` - int
#### Example:
@@ -347,12 +330,36 @@ poolStatus, err := aelf.GetTransactionPoolStatus();
- **Web API path**: `/api/blockChain/sendTransaction` (POST)
- **Parameters** :
- - SendRawTransactionInput - struct containing `Transaction` as string, `Signature` as string, and `ReturnTransaction` as bool
+ - `SendRawTransactionInput` - Serialization of data into protobuf data:
+ - `RawTransaction` - string
+
+- **Returns**:
+
+ - `SendTransactionOutput`
+ - `TransactionId` - string
+
+
+#### Example:
+
+```go
+sendResult, err := aelf.SendTransaction(input)
+```
+
+### SendRawTransaction
+
+- **Web API path**: `/api/blockChain/sendTransaction` (POST)
+
+- **Parameters** :
+ - `SendRawTransactionInput` - Serialization of data into protobuf data:
+ - `RawTransaction` - string
+ - `Signature` - string
+ - `ReturnTransaction` - bool
-- **Returns**: `SendRawTransactionOutput`
+- **Returns**:
- - TransactionId - string
- - Transaction - TransactionDto
+ - `SendRawTransactionOutput`
+ - `TransactionId` - string
+ - `Transaction` - TransactionDto
#### Example:
@@ -362,12 +369,13 @@ sendRawResult, err := aelf.SendRawTransaction(input)
```
+
### SendTransactions
- **Web API path**: `/api/blockChain/sendTransactions` (POST)
- **Parameters** :
- - rawTransactions - string
+ - `rawTransactions` - string - - Serialization of data into protobuf data:
- **Returns**: `[]interface{}`
@@ -387,9 +395,19 @@ Creates an unsigned serialized transaction.
- **Web API path**: `/api/blockChain/rawTransaction` (POST)
- **Parameters** :
- - CreateRawTransactionInput - struct containing `From`, `To`, `RefBlockNumber`, `RefBlockHash`, `MethodName`, `Params`
-- **Returns**: `CreateRawTransactionOutput`
+ - `CreateRawTransactionInput`
+ - `From` - string
+ - `To` - string
+ - `RefBlockNumber` - long
+ - `RefBlockHash` - string
+ - `MethodName` - string
+ - `Params` - string
+
+- **Returns**:
+
+ - `CreateRawTransactionOutput`
+ - `RawTransactions` - string
#### Example:
@@ -407,7 +425,7 @@ Call a read-only method on a contract.
- **Web API path**: `/api/blockChain/executeTransaction` (POST)
- **Parameters** :
- - rawTransaction - string
+ - `rawTransaction` - string
- **Returns**: `string`
@@ -427,7 +445,9 @@ Call a read-only method on a contract.
- **Web API path**: `/api/blockChain/executeRawTransaction` (POST)
- **Parameters** :
- - ExecuteRawTransactionDto - struct containing `RawTransaction` as string, `Signature` as string
+ - `ExecuteRawTransactionDto` - Serialization of data into protobuf data:
+ - `RawTransaction` - string
+ - `Signature` - string
- **Returns**: `string`
@@ -443,28 +463,29 @@ executeRawresult, err := aelf.ExecuteRawTransaction(executeRawinput)
Get peer info about the connected network nodes.
-
- **Web API path**: `/api/net/peers`
- **Parameters** :
- - withMetrics - bool
+ - `withMetrics` - bool
-- **Returns**: `[]PeerDto`
+- **Returns**:
- - IpAddress - string
- - ProtocolVersion - int
- - ConnectionTime - int64
- - ConnectionStatus - string
- - Inbound - bool
- - BufferedTransactionsCount - int
- - BufferedBlocksCount - int
- - BufferedAnnouncementsCount - int
- - NodeVersion - string
- - RequestMetrics - []RequestMetric
- - RoundTripTime - int64
- - MethodName - string
- - Info - string
- - RequestTime - string
+ - `[]PeerDto`
+
+ - `IpAddress` - string
+ - `ProtocolVersion` - int
+ - `ConnectionTime` - int64
+ - `ConnectionStatus` - string
+ - `Inbound` - bool
+ - `BufferedTransactionsCount` - int
+ - `BufferedBlocksCount` - int
+ - `BufferedAnnouncementsCount` - int
+ - `NodeVersion` - string
+ - `RequestMetrics` - []RequestMetric
+ - `RoundTripTime` - int64
+ - `MethodName` - string
+ - `Info` - string
+ - `RequestTime` - string
@@ -483,7 +504,8 @@ Attempts to add a node to the connected network nodes.
- **Web API path**: `/api/net/peer` (POST)
- **Parameters** :
- - ipAddress - string
+
+ - `ipAddress` - string
- **Returns**: `bool`
@@ -502,7 +524,8 @@ Attempts to remove a node from the connected network nodes.
- **Web API path**: `/api/net/peer` (DELETE)
- **Parameters** :
- - ipAddress - string
+
+ - `ipAddress` - string
- **Returns**: `bool`
@@ -521,12 +544,14 @@ Estimate transaction fee.
- **Web API path**: `/api/blockChain/calculateTransactionFee` (POST)
- **Parameters** :
- - CalculateTransactionFeeInput - struct containing `RawTransaction` as string
+ - `CalculateTransactionFeeInput` - The object with the following structure :
+ - `RawTrasaction` - string
-- **Returns**: `TransactionFeeResultOutput`
- - Success - bool
- - TransactionFee - map[string]interface{}
- - ResourceFee - map[string]interface{}
+- **Returns**:
+ - `TransactionFeeResultOutput`
+ - `Success` - bool
+ - `TransactionFee` - map[string]interface{}
+ - `ResourceFee` - map[string]interface{}
#### Example:
@@ -544,10 +569,12 @@ Get the network information of the node.
- **Parameters** : Empty
-- **Returns**: `NetworkInfoOutput`
- - Version - string
- - ProtocolVersion - int
- - Connections - int
+- **Returns**:
+
+ - `NetworkInfoOutput`
+ - `Version` - string
+ - `ProtocolVersion` - int
+ - `Connections` - int
#### Example:
@@ -695,7 +722,11 @@ address := aelf.GetAddressFromPrivateKey(privateKey)
- **Parameters**: None
- **Returns** :
- - `KeyPairInfo`: Contains PrivateKey, PublicKey, and Address
+
+ - `KeyPairInfo`
+ - `PrivateKey`
+ - `PublicKey`
+ - `Address`
#### Example:
diff --git a/docs/Tools/chain-sdk/index.md b/docs/Tools/chain-sdk/index.md
new file mode 100644
index 00000000..871b29ef
--- /dev/null
+++ b/docs/Tools/chain-sdk/index.md
@@ -0,0 +1,4 @@
+---
+sidebar_position: 1
+title: Chain SDK
+---
\ No newline at end of file
diff --git a/docs/Developer Tools/Chain Sdk/java-sdk.md b/docs/Tools/chain-sdk/java-sdk/index.md
similarity index 87%
rename from docs/Developer Tools/Chain Sdk/java-sdk.md
rename to docs/Tools/chain-sdk/java-sdk/index.md
index a68d1587..aa4dbb4a 100644
--- a/docs/Developer Tools/Chain Sdk/java-sdk.md
+++ b/docs/Tools/chain-sdk/java-sdk/index.md
@@ -2,13 +2,14 @@
sidebar_position: 4
title: JAVA SDK
description: JAVA SDK
+image: /img/Logo.aelf.svg
---
# aelf-sdk.java - aelf Java API
## Introduction
-`aelf-sdk.java` is a set of libraries that allow interaction with a local or remote AElf node using an HTTP connection. This documentation guides you through installing and running `aelf-sdk.java`, along with providing API reference documentation and examples.
+`aelf-sdk.java` is a set of libraries that allow interaction with a local or remote aelf node using an HTTP connection. This documentation guides you through installing and running `aelf-sdk.java`, along with providing API reference documentation and examples.
For more information, you can check out the [repository](https://github.com/AElfProject/aelf-sdk.java).
@@ -29,7 +30,7 @@ To add the `aelf-sdk.java` package to your project, use the following Maven depe
### Create Instance
-Create a new instance of `AElfClient`, and set the URL of an AElf chain node.
+Create a new instance of `AElfClient`, and set the URL of an aelf chain node.
```java
import AElf.Client.Service;
@@ -40,7 +41,7 @@ AElfClient client = new AElfClient("http://127.0.0.1:1235");
### Test Connection
-Check if the AElf chain node is connectable.
+Check if the aelf chain node is connectable.
```java
boolean isConnected = client.isConnected();
@@ -48,63 +49,40 @@ boolean isConnected = client.isConnected();
### Initiate a Transfer Transaction
-Initiate a transfer transaction using the following steps:
-
-#### 1. Get Token Contract Address
```java
-Copy code
+// Get token contract address.
String tokenContractAddress = client.getContractAddressByName(privateKey, Sha256.getBytesSha256("AElf.ContractNames.Token"));
-```
-#### 2. Set Recipient Address
-
-```java
Client.Address.Builder to = Client.Address.newBuilder();
to.setValue(ByteString.copyFrom(Base58.decodeChecked("7s4XoUHfPuqoZAwnTV7pHWZAaivMiL8aZrDSnY9brE1woa8vz")));
Client.Address toObj = to.build();
-```
-
-#### 3. Create Transfer Input
-```java
TokenContract.TransferInput.Builder paramTransfer = TokenContract.TransferInput.newBuilder();
paramTransfer.setTo(toObj);
paramTransfer.setSymbol("ELF");
paramTransfer.setAmount(1000000000);
paramTransfer.setMemo("transfer in demo");
TokenContract.TransferInput paramTransferObj = paramTransfer.build();
-```
-
-#### 4. Generate and Sign Transaction
-```java
String ownerAddress = client.getAddressFromPrivateKey(privateKey);
+
Transaction.Builder transactionTransfer = client.generateTransaction(ownerAddress, tokenContractAddress, "Transfer", paramTransferObj.toByteArray());
Transaction transactionTransferObj = transactionTransfer.build();
transactionTransfer.setSignature(ByteString.copyFrom(ByteArrayHelper.hexToByteArray(client.signTransaction(privateKey, transactionTransferObj))));
transactionTransferObj = transactionTransfer.build();
-```
-
-#### 5. Send Transaction
-```java
+// Send the transfer transaction to aelf chain node.
SendTransactionInput sendTransactionInputObj = new SendTransactionInput();
sendTransactionInputObj.setRawTransaction(Hex.toHexString(transactionTransferObj.toByteArray()));
SendTransactionOutput sendResult = client.sendTransaction(sendTransactionInputObj);
-```
-
-#### 6. Query Execution Results
-```java
Thread.sleep(4000);
+// After the transaction is mined, query the execution results.
TransactionResultDto transactionResult = client.getTransactionResult(sendResult.getTransactionId());
System.out.println(transactionResult.getStatus());
-```
-#### 7. Query Account Balance
-
-```java
+// Query account balance.
Client.Address.Builder owner = Client.Address.newBuilder();
owner.setValue(ByteString.copyFrom(Base58.decodeChecked(ownerAddress)));
Client.Address ownerObj = owner.build();
@@ -128,7 +106,7 @@ TokenContract.GetBalanceOutput balance = TokenContract.GetBalanceOutput.getDefau
System.out.println(balance.getBalance());
```
-This guide provides basic steps to interact with an AElf node using the aelf-sdk.java library. For more detailed information and advanced usage, please refer to the repository documentation.
+This guide provides basic steps to interact with an aelf node using the aelf-sdk.java library. For more detailed information and advanced usage, please refer to the repository documentation.
@@ -225,9 +203,9 @@ Get block information by block hash.
- `blockHash` - String
- `includeTransactions` - boolean (true to include transaction ids list in the block, false otherwise)
-**Returns**: `BlockDto`
+**Returns**:
- - `json`
+ - `BlockDto`
- `BlockHash` - String
- `Header` - BlockHeaderDto
- `PreviousBlockHash` - String
@@ -261,9 +239,9 @@ client.getBlockByHash(blockHash);
- `blockHeight` - long
- `includeTransactions` - boolean (true to include transaction ids list in the block, false otherwise)
-**Returns**: `BlockDto`
+**Returns**:
- - `json`
+ - `BlockDto`
- `BlockHash` - String
- `Header` - BlockHeaderDto
- `PreviousBlockHash` - String
@@ -351,10 +329,11 @@ client.getTransactionResults(blockHash, 0, 10);
**Parameters:**: None
-**Returns**: `TransactionPoolStatusOutput`
+**Returns**:
-- `Queued` - int
-- `Validated` - int
+ - `TransactionPoolStatusOutput`
+ - `Queued` - int
+ - `Validated` - int
**Example**:
@@ -374,9 +353,10 @@ client.getTransactionPoolStatus();
- `SendTransactionInput` - Serialization of data into protobuf format:
- `RawTransaction` - String
-**Returns**: `SendTransactionOutput`
+**Returns**:
-- `TransactionId` - String
+ - `SendTransactionOutput`
+ - `TransactionId` - String
**Example**:
@@ -398,10 +378,11 @@ client.sendTransaction(input);
- `Signature` - String
- `ReturnTransaction` - boolean
-**Returns**: `SendRawTransactionOutput`
+**Returns**:
- - `TransactionId` - String
- - `Transaction` - TransactionDto
+ - `SendRawTransactionOutput`
+ - `TransactionId` - String
+ - `Transaction` - TransactionDto
**Example**:
@@ -452,9 +433,10 @@ Create an unsigned serialized transaction.
- `MethodName` - String
- `Params` - String
-**Returns**: `CreateRawTransactionOutput` - Serialization of data into protobuf format:
+**Returns**:
-- `RawTransaction` - String
+ - `CreateRawTransactionOutput` - Serialization of data into protobuf format:
+ - `RawTransaction` - String
**Example**:
@@ -515,22 +497,23 @@ Get peer information about the connected network nodes.
- `withMetrics` - boolean
-**Returns**: `List`
-
-- `IpAddress` - String
-- `ProtocolVersion` - int
-- `ConnectionTime` - long
-- `ConnectionStatus` - String
-- `Inbound` - boolean
-- `BufferedTransactionsCount` - int
-- `BufferedBlocksCount` - int
-- `BufferedAnnouncementsCount` - int
-- `NodeVersion` - String
-- `RequestMetrics` - List``
-- `RoundTripTime` - long
-- `MethodName` - String
-- `Info` - String
-- `RequestTime` - String
+**Returns**:
+
+ - `List`
+ - `IpAddress` - String
+ - `ProtocolVersion` - int
+ - `ConnectionTime` - long
+ - `ConnectionStatus` - String
+ - `Inbound` - boolean
+ - `BufferedTransactionsCount` - int
+ - `BufferedBlocksCount` - int
+ - `BufferedAnnouncementsCount` - int
+ - `NodeVersion` - String
+ - `RequestMetrics` - List``
+ - `RoundTripTime` - long
+ - `MethodName` - String
+ - `Info` - String
+ - `RequestTime` - String
**Example**:
@@ -597,12 +580,13 @@ Estimate transaction fee.
- `CalculateTransactionFeeInput`
- `RawTransaction` - String
-**Returns**: `CalculateTransactionFeeOutput`
-
-- `Success` - boolean
-- `TransactionFee` - HashMap``
-- `ResourceFee` - HashMap``
+**Returns**:
+ - `CalculateTransactionFeeOutput`
+ - `Success` - boolean
+ - `TransactionFee` - HashMap``
+ - `ResourceFee` - HashMap``
+
**Example**:
```java
@@ -617,11 +601,12 @@ CalculateTransactionFeeOutput output = client.calculateTransactionFee(input);
**Parameters:** None
-**Returns**: `NetworkInfoOutput`
+**Returns**:
-- `Version` - String
-- `ProtocolVersion` - int
-- `Connections` - int
+ - `NetworkInfoOutput`
+ - `Version` - String
+ - `ProtocolVersion` - int
+ - `Connections` - int
**Example**:
@@ -773,11 +758,13 @@ client.getAddressFromPrivateKey(privateKey);
**Parameters:** None
-**Returns**: `KeyPairInfo`
+**Returns**:
-- `PrivateKey` - String
-- `PublicKey` - String
-- `Address` - String
+ - `KeyPairInfo`
+
+ - `PrivateKey` - String
+ - `PublicKey` - String
+ - `Address` - String
**Example**:
diff --git a/docs/Developer Tools/Chain Sdk/javascript-sdk.md b/docs/Tools/chain-sdk/javascript-sdk/index.md
similarity index 77%
rename from docs/Developer Tools/Chain Sdk/javascript-sdk.md
rename to docs/Tools/chain-sdk/javascript-sdk/index.md
index 20c9c1b5..3e0cd155 100644
--- a/docs/Developer Tools/Chain Sdk/javascript-sdk.md
+++ b/docs/Tools/chain-sdk/javascript-sdk/index.md
@@ -2,6 +2,7 @@
sidebar_position: 1
title: Javascript SDK
description: Javascript SDK
+image: /img/Logo.aelf.svg
---
# aelf-sdk.js - aelf JavaScript API
@@ -170,6 +171,8 @@ You can access the Web API of your aelf node at `{chainAddress}/swagger/index.ht
For example, if your local node address is `http://127.0.0.1:1235`, you can view the Web API at `http://127.0.0.1:1235/swagger/index.html`.
+parameters and returns based on the URL: [https://aelf-public-node.aelf.io/swagger/index.html](https://aelf-public-node.aelf.io/swagger/index.html)
+
The methods below use an instance of aelf. If you don't have one, create it as shown:
```javascript
@@ -186,7 +189,19 @@ Get the current status of the blockchain.
- **Web API Path**: `/api/blockChain/chainStatus`
- **Method**: GET
- **Parameters**: None
-- **Returns**: Object with details like ChainId, LongestChainHeight, GenesisContractAddress, etc.
+- **Returns**: `Object`
+
+ - `ChainId` - String
+ - `Branches` - Object
+ - `NotLinkedBlocks` - Object
+ - `LongestChainHeight` - Number
+ - `LongestChainHash` - String
+ - `GenesisBlockHash` - String
+ - `GenesisContractAddress` - String
+ - `LastIrreversibleBlockHash` - String
+ - `LastIrreversibleBlockHeight` - Number
+ - `BestChainHash` - String
+ - `BestChainHeight` - Number
#### Example:
@@ -206,7 +221,7 @@ Get the protobuf definitions related to a contract.
- **Web API Path**: `/api/blockChain/contractFileDescriptorSet`
- **Method**: GET
- **Parameters**: `contractAddress` (String)
-- **Returns**: String.
+- **Returns**: `String`.
#### Example:
@@ -227,7 +242,7 @@ Get the current best height of the chain.
- **Web API Path**: `/api/blockChain/blockHeight`
- **Method**: GET
- **Parameters**: None
-- **Returns**: Number.
+- **Returns**: `Number`.
#### Example:
@@ -246,10 +261,31 @@ Get block information by block hash.
- **Web API Path**: `/api/blockChain/block`
- **Method**: GET
-- **Parameters**: `contractAddress` (String)
+- **Parameters**:
- **`blockHash`** (String)
- **`includeTransactions`** (Boolean)
-- **Returns**: object with block details
+ - `true` require transaction ids list in the block
+ - `false` Doesn’t require transaction ids list in the block
+
+- **Returns**: `Object`
+
+ - `BlockHash` - String
+
+ - `Header` - Object
+ - `PreviousBlockHash` - String
+ - `MerkleTreeRootOfTransactions` - String
+ - `MerkleTreeRootOfWorldState` - String
+ - `Extra` - Array
+ - `Height` - Number
+ - `Time` - google.protobuf.Timestamp
+ - `ChainId` - String
+ - `Bloom` - String
+ - `SignerPubkey` - String
+
+ - `Body` - Object
+ - `TransactionsCount` - Number
+ - `Transactions` - Array
+ - `transactionId` - String
#### Example:
@@ -271,7 +307,29 @@ Get block information by block height.
- **Parameters**:
- **`blockHash`** (String)
- **`includeTransactions`** (Boolean)
-- **Returns**: Object with block details
+ - `true` require transaction ids list in the block
+ - `false` Doesn’t require transaction ids list in the block
+
+- **Returns**: `Object`
+
+ - `BlockHash` - String
+
+ - `Header` - Object
+ - `PreviousBlockHash` - String
+ - `MerkleTreeRootOfTransactions` - String
+ - `MerkleTreeRootOfWorldState` - String
+ - `Extra` - Array
+ - `Height` - Number
+ - `Time` - google.protobuf.Timestamp
+ - `ChainId` - String
+ - `Bloom` - String
+ - `SignerPubkey` - String
+
+ - `Body` - Object
+ - `TransactionsCount` - Number
+ - `Transactions` - Array
+ - `transactionId` - String
+
#### Example:
@@ -289,7 +347,27 @@ aelf.chain.getBlockByHeight(12, false)
- **Web API Path**: `/api/blockChain/transactionResult`
- **Method**: GET
- **Parameters**: `transactionId` (String)
-- **Returns**: Object with transaction details
+- **Returns**: `Object`
+
+ - `TransactionId` - String
+ - `Status` - String
+ - `Logs` - Array
+ - `Address` - String
+ - `Name` - String
+ - `Indexed` - Array
+ - `NonIndexed` - Number
+ - `Bloom` - String
+ - `BlockNumber` - Number
+ - `Transaction` - Object
+ - `From` - String
+ - `To` - String
+ - `RefBlockNumber` - Number
+ - `RefBlockPrefix` - String
+ - `MethodName` - String
+ - `Params` - Object
+ - `Signature` - String
+ - `ReadableReturnValue` - Object
+ - `Error` - String
#### Example:
@@ -310,7 +388,9 @@ aelf.chain.getTxResult(transactionId)
- **`blockHash`** (String)
- **`offset`** (Number)
- **`limit`** (Number)
-- **Returns**: Array of transaction result objects
+- **Returns**:
+ - `Array` - The array of method descriptions:
+ - the transaction result object
#### Example:
@@ -328,7 +408,6 @@ aelf.chain.getTxResults(blockHash, 0, 2)
- **Web API Path**: `/api/blockChain/transactionPoolStatus`
- **Method**: GET
- **Parameters**: None
-- **Returns**: Object with transaction pool status
### 9. Send Transaction
@@ -337,61 +416,65 @@ aelf.chain.getTxResults(blockHash, 0, 2)
- **Web API Path**: `/api/blockChain/sendTransaction`
- **Method**: POST
- **Parameters**: `Object` (Serialized protobuf data with RawTransaction string)
-- **Returns**: Transaction ID
+ - `RawTransaction` - String
### 10. Send Multiple Transactions
-
- **Web API Path**: `/api/blockChain/sendTransactions`
- **Method**: POST
- **Parameters**: `Object` (Serialized protobuf data with RawTransaction string)
-- **Returns**: Transaction IDs
+ - `RawTransaction` - String
### 11. Call Read-Only Method
+Call a read-only method on a contract.
-- **Web API Path**: `/api/blockChain/callReadOnly`
- **Method**: POST
- **Parameters**: `Object` (Serialized protobuf data with RawTransaction string)
+ - `RawTransaction` - String
- **Returns**: Method call result
### 12. Get Peers
+Get peer info about the connected network nodes.
-- **Web API Path**: `/api/net/peers`
- **Method**: GET
- **Parameters**: `withMetrics` (Boolean)
-- **Returns**: Array of peer info
-
+ - `true` with metrics
+ - `false` without metrics
+
### 13. Add Peer
+Attempts to add a node to the connected network nodes
-- **Web API Path**: `/api/net/peer`
- **Method**: POST
-- **Parameters**: `Object` (Address string)
-- **Returns**: Status
-
+- **Parameters**: `Object` The object with the following structure :
+ - `Address` - String
### 14. Remove Peer
+Attempts to remove a node from the connected network nodes
-- **Web API Path**: `/api/net/peer`
- **Method**: DELETE
- **Parameters**: `address` (String)
-- **Returns**: Status
-### 15. Send Multiple Transactions
+### 15. Calculate Transaction Fee
- **Web API Path**: `/api/blockChain/calculateTransactionFee`
- **Method**: POST
-- **Parameters**: `CalculateTransactionFeeInput` (Object with RawTransaction string)
-- **Returns**: `CalculateTransactionFeeOutput` (Object with fee details)
+- **Parameters**: `CalculateTransactionFeeInput` (Object with RawTransaction string):
+ - `RawTransaction` - String
+- **Returns**: `CalculateTransactionFeeOutput` (Object with fee details):
+ - `Success` - Bool
+ - `TransactionFee` - Array
+ - `ResourceFee` - Array
+
#### Example
@@ -405,13 +488,11 @@ aelf.chain.calculateTransactionFee(rawTransaction)
### 16. Network Info
-- **Web API Path**: `/api/net/networkInfo`
- **Method**: GET
- **Parameters**: None
- **Returns**: Network connection info
-
## AElf.wallet
`AElf.wallet` is a static property of `AElf`.
diff --git a/docs/Developer Tools/Chain Sdk/php-skd.md b/docs/Tools/chain-sdk/php-sdk/index.md
similarity index 82%
rename from docs/Developer Tools/Chain Sdk/php-skd.md
rename to docs/Tools/chain-sdk/php-sdk/index.md
index ee769c4a..27ecce18 100644
--- a/docs/Developer Tools/Chain Sdk/php-skd.md
+++ b/docs/Tools/chain-sdk/php-sdk/index.md
@@ -2,6 +2,7 @@
sidebar_position: 5
title: PHP SDK
description: PHP SDK
+image: /img/Logo.aelf.svg
---
# aelf-sdk.php - aelf PHP API
@@ -93,7 +94,6 @@ print_r($result);
```
## Web API
-----------
You can access the Web API of your aelf node at:
@@ -108,7 +108,7 @@ Before using the methods, make sure you have an instance of AElf:
```php
require_once 'vendor/autoload.php';
use AElf\AElf;
-
+// create a new instance of AElf
$url = '127.0.0.1:8000';
$aelf = new AElf($url);
```
@@ -120,11 +120,28 @@ $aelf = new AElf($url);
- **Parameters**: None
-- **Returns**: Array with chain status details
+- **Returns**:
+
+ - `Array`
+ - `ChainId` - String
+ - `Branches` - Array
+ - `NotLinkedBlocks` - Array
+ - `LongestChainHeight` - Integer
+ - `LongestChainHash` - String
+ - `GenesisBlockHash` - String
+ - `GenesisContractAddress` - String
+ - `LastIrreversibleBlockHash` - String
+ - `LastIrreversibleBlockHeight` - Integer
+ - `BestChainHash` - String
+ - `BestChainHeight` - Integer
+
- **Example** :
```php
+// create a new instance of AElf
+$aelf = new AElf($url);
+
$chainStatus = $aelf->getChainStatus();
print_r($chainStatus);
```
@@ -142,12 +159,14 @@ print_r($chainStatus);
- **Example** :
```php
+$aelf = new AElf($url);
+
$height = $aelf->getBlockHeight();
print($height);
```
-### 3. Get Block by Hash
+### 3. getBlock
- **API Path**: `/api/blockChain/block`
@@ -156,11 +175,30 @@ print($height);
- `block_hash` (String)
- `include_transactions` (Boolean)
-- **Returns**: Array with block information
+- **Returns**:
+
+ - `Array`
+ - `BlockHash` - String
+ - `Header` - Array
+ - `PreviousBlockHash` - String
+ - `MerkleTreeRootOfTransactions` - String
+ - `MerkleTreeRootOfWorldState` - String
+ - `Extra` - List
+ - `Height` - Integer
+ - `Time` - String
+ - `ChainId` - String
+ - `Bloom` - String
+ - `SignerPubkey` - String
+ - `Body` - Array
+ - `TransactionsCount` - Integer
+ - `Transactions` - Array
+ - `transactionId` - String
- **Example** :
```php
+$aelf = new AElf($url);
+
$block = $aelf->getBlockByHeight(1, true);
$block2 = $aelf->getBlockByHash($block['BlockHash'], false);
print_r($block2);
@@ -176,11 +214,31 @@ print_r($block2);
- `block_height` (Number)
- `include_transactions` (Boolean)
-- **Returns**: Array with block information
+- **Returns**:
+
+ - `Array`
+ - `BlockHash` - String
+ - `Header` - Array
+ - `PreviousBlockHash` - String
+ - `MerkleTreeRootOfTransactions` - String
+ - `MerkleTreeRootOfWorldState` - String
+ - `Extra` - List
+ - `Height` - Integer
+ - `Time` - String
+ - `ChainId` - String
+ - `Bloom` - String
+ - `SignerPubkey` - String
+ - `Body` - Array
+ - `TransactionsCount` - Integer
+ - `Transactions` - Array
+ - `transactionId` - String
+
- **Example** :
```php
+$aelf = new AElf($url);
+
$block = $aelf->getBlockByHeight(1, true);
print_r($block);
```
@@ -194,11 +252,35 @@ print_r($block);
- `transactionId` (String)
-- **Returns**: Object with transaction result details
+- **Returns**:
+
+ - `Object`
+ - `TransactionId` - String
+ - `Status` - String
+ - `Logs` - Array
+ - `Address` - String
+ - `Name` - String
+ - `Indexed` - Array
+ - `NonIndexed` - String
+ - `Bloom` - String
+ - `BlockNumber` - Integer
+ - `Transaction` - Array
+ - `From` - String
+ - `To` - String
+ - `RefBlockNumber` - Integer
+ - `RefBlockPrefix` - String
+ - `MethodName` - String
+ - `Params` - json
+ - `Signature` - String
+ - `transactionId` - String
+ - `ReadableReturnValue` - String
+ - `Error` - String
- **Example** :
```php
+$aelf = new AElf($url);
+
$block = $aelf->getBlockByHeight(1, true);
$transactionResult = $aelf->getTransactionResult($block['Body']['Transactions'][0]);
print_r($transactionResult);
@@ -215,11 +297,16 @@ print_r($transactionResult);
- `offset` (Number)
- `limit` (Number)
-- **Returns**: List of transaction result objects
+- **Returns**:
+
+ - `List` - The array of method descriptions:
+ - the transaction result object
- **Example** :
```php
+$aelf = new AElf($url);
+
$block = $aelf->getBlockByHeight(1, true);
$transactionResults = $aelf->getTransactionResults($block['Body']);
print_r($transactionResults);
@@ -233,6 +320,8 @@ print_r($transactionResults);
- **Example** :
```php
+$aelf = new AElf($url);
+
$status = $aelf->getTransactionPoolStatus();
print_r($status);
```
@@ -273,6 +362,8 @@ print_r($result);
- **Example** :
```php
+$aelf = new AElf($url);
+
$paramsList = [$params1, $params2];
$rawTransactionsList = [];
foreach ($paramsList as $param) {
@@ -339,11 +430,16 @@ $aelf->removePeer($url);
- `transaction` (Array)
-- **Returns**: Array with the raw transaction hex string
+- **Returns**:
+
+ - `Array`
+ - `RawTransaction` - hex string bytes generated by transaction information
- **Example** :
```php
+$aelf = new AElf($url);
+
$status = $aelf->getChainStatus();
$params = base64_encode(hex2bin(hash('sha256', 'AElf.ContractNames.Consensus')));
$param = array('value' => $params);
@@ -373,6 +469,8 @@ print_r($rawTransaction);
- **Example** :
```php
+$aelf = new AElf($url);
+
$rawTransaction = $aelf->createRawTransaction($transaction);
$transactionId = hash('sha256', hex2bin($rawTransaction['RawTransaction']));
$sign = $aelf->getSignatureWithPrivateKey($privateKey, $transactionId);
@@ -398,6 +496,8 @@ print_r($execute);
- **Example** :
```php
+$aelf = new AElf($url);
+
$rawTransaction = $aelf->createRawTransaction($transaction);
$transactionId = hash('sha256', hex2bin($rawTransaction['RawTransaction']));
$sign = $aelf->getSignatureWithPrivateKey($privateKey, $transactionId);
@@ -418,6 +518,8 @@ print_r($execute);
- **Example** :
```php
+$aelf = new AElf($url);
+
$block = $aelf->getBlockByHeight(1, true);
$merklePath = $aelf->getMerklePathByTransactionId($block['Body']['Transactions'][0]);
print_r($merklePath);
@@ -434,11 +536,19 @@ print_r($merklePath);
- `CalculateTransactionFeeInput` (Object)
-- **Returns**: `CalculateTransactionFeeOutput (Object)`
+- **Returns**:
+
+ - `CalculateTransactionFeeOutput (Object)`
+
+ - `Success` - bool
+ - `TransactionFee` - Array
+ - `ResourceFee` - Array
- **Example** :
```php
+$aelf = new AElf($url);
+
$calculateTransactionFeeInputParam = [
"rawTransaction" => $rawTransactionInput,
];
@@ -454,6 +564,8 @@ print_r($result);
- **Example** :
```php
+$aelf = new AElf($url);
+
print_r($aelf->getNetworkInfo());
```
@@ -518,7 +630,7 @@ $tokenInfo->mergeFromString(hex2bin($response));
## Other Tool Kit
-AElf supplies some APIs to simplify development.
+aelf supplies some APIs to simplify development.
### 1. Get Chain Id
diff --git a/docs/Developer Tools/Chain Sdk/python-sdk.md b/docs/Tools/chain-sdk/python-sdk/index.md
similarity index 99%
rename from docs/Developer Tools/Chain Sdk/python-sdk.md
rename to docs/Tools/chain-sdk/python-sdk/index.md
index f2e71d82..004196d6 100644
--- a/docs/Developer Tools/Chain Sdk/python-sdk.md
+++ b/docs/Tools/chain-sdk/python-sdk/index.md
@@ -2,6 +2,7 @@
sidebar_position: 6
title: Python SDK
description: Python SDK
+image: /img/Logo.aelf.svg
---
# aelf-sdk.py - aelf Python API
diff --git a/docs/devtools/contract-sdk/aelf-core-csharp.md b/docs/Tools/contract-sdk/aelf-csharp-core/index.md
similarity index 99%
rename from docs/devtools/contract-sdk/aelf-core-csharp.md
rename to docs/Tools/contract-sdk/aelf-csharp-core/index.md
index ce6f46be..7b476fc7 100644
--- a/docs/devtools/contract-sdk/aelf-core-csharp.md
+++ b/docs/Tools/contract-sdk/aelf-csharp-core/index.md
@@ -1,3 +1,9 @@
+---
+sidebar_position: 2
+title: aelf C# Core
+---
+
+
# AElf.CSharp.Core
## Builder `type`
diff --git a/docs/devtools/contract-sdk/aelf-sdk-csharp.md b/docs/Tools/contract-sdk/aelf-sdk-csharp/index.md
similarity index 99%
rename from docs/devtools/contract-sdk/aelf-sdk-csharp.md
rename to docs/Tools/contract-sdk/aelf-sdk-csharp/index.md
index f6e6a537..9b9e93b9 100644
--- a/docs/devtools/contract-sdk/aelf-sdk-csharp.md
+++ b/docs/Tools/contract-sdk/aelf-sdk-csharp/index.md
@@ -1,3 +1,9 @@
+---
+sidebar_position: 1
+title: aelf SDK C#
+---
+
+
# AElf.Sdk.CSharp
## BoolState `type`
diff --git a/docs/Tools/contract-sdk/index.md b/docs/Tools/contract-sdk/index.md
new file mode 100644
index 00000000..bfdbf013
--- /dev/null
+++ b/docs/Tools/contract-sdk/index.md
@@ -0,0 +1,4 @@
+---
+sidebar_position: 7
+title: Contract SDK
+---
diff --git a/docs/Tools/index.md b/docs/Tools/index.md
new file mode 100644
index 00000000..8a5670c5
--- /dev/null
+++ b/docs/Tools/index.md
@@ -0,0 +1,4 @@
+---
+sidebar_position: 4
+title: Tools
+---
\ No newline at end of file
diff --git a/docs/Tools/smart-contract-templates/deploying-contracts-with-bp-approval/index.md b/docs/Tools/smart-contract-templates/deploying-contracts-with-bp-approval/index.md
new file mode 100644
index 00000000..3d664d4c
--- /dev/null
+++ b/docs/Tools/smart-contract-templates/deploying-contracts-with-bp-approval/index.md
@@ -0,0 +1,65 @@
+---
+sidebar_position: 4
+title: Deploying Contract with BP Approval
+---
+
+# Deploying Contract with BP Approval
+
+Contracts can be deployed or updated via two methods: aelf explorer or aelf-command. Ensure npm and aelf-command are installed before starting. Follow the [Deployment Environment guide](#) if needed.
+
+## Overview
+
+In these cases, BP approval is needed for contract updates:
+
+- Upgrading system contracts on MainChain.
+- Upgrading system contracts on exclusive SideChains.
+- Upgrading system contracts on shared SideChains.
+
+System contracts can only be deployed in the Genesis block. After launch, only updates are supported. This guide focuses on contract deployment on aelf Mainnet with `ContractDeploymentAuthorityRequired` set to true.
+
+## Deploy / Update through aelf Explorer
+
+To deploy/update contracts on AElf Mainnet with `ContractDeploymentAuthorityRequired` true, create an AElf wallet and have around 100 ELF. When `ContractDeploymentAuthorityRequired` is false, use `DeploySmartContract` and `UpdateSmartContract` in Contract Zero.
+
+[Learn how to deploy contracts through aelf Explorer](#)
+
+## Deploy / Update through aelf-command
+
+![Diagram for deploy through aelf command](/img/BP-approval-required.png)
+
+### Contracts Deployment/Update Procedure
+
+#### Developer: ProposeNewContract / ProposeUpdateContract
+
+**Contract Deployment**
+
+1. Developer initiates `ProposeNewContract`.
+2. A `ProposeContractCodeCheck` proposal is created for BP code review.
+3. If 2/3 (rounding down) + 1 BPs approve, the developer releases the approved proposal, triggering an automatic `CodeCheck` proposal. If denied, deployment stops.
+
+**Contract Update**
+
+1. Developer initiates `ProposeUpdateContract`.
+2. A `ProposeContractCodeCheck` proposal is created for BP code review.
+3. If 2/3 (rounding down) + 1 BPs approve, the developer releases the approved proposal, triggering an automatic `CodeCheck` proposal. If denied, the update stops.
+
+#### BP: Parliament.Approve
+
+BPs approve the `ProposeContractCodeCheck` proposal:
+
+- 2/3 (rounding down) + 1 votes in favor.
+- No more than 10% votes against.
+- No more than 10% abstentions.
+- At least 80% BP participation.
+
+#### Developer: ReleaseApprovedContract
+
+If 2/3 (rounding down) + 1 BPs approve, the developer initiates `ReleaseApprovedContract` to release the proposal, creating a `CodeCheck` proposal for automatic code check.
+
+#### BP: Parliament.ApproveMultiProposals (Automatic)
+
+BPs complete the code check. If it passes, an `ApproveMultiProposals` transaction is initiated automatically, approving the `CodeCheck` proposal. If it fails, the process stops.
+
+#### Developer: ReleaseCodeCheckedContract
+
+The developer initiates `ReleaseCodeCheckedContract` to release the `CodeCheck` proposal. The `DeploySmartContract` or `UpdateSmartContract` method is executed, completing the deployment/update.
\ No newline at end of file
diff --git a/docs/Tools/smart-contract-templates/deploying-contracts-without-bp-approval/index.md b/docs/Tools/smart-contract-templates/deploying-contracts-without-bp-approval/index.md
new file mode 100644
index 00000000..35703078
--- /dev/null
+++ b/docs/Tools/smart-contract-templates/deploying-contracts-without-bp-approval/index.md
@@ -0,0 +1,61 @@
+---
+sidebar_position: 5
+title: Deploying Contract without BP Approval
+---
+
+# Deploying Contracts without BP Approval
+
+Contracts can be deployed/updated via aelf explorer or aelf-command. Ensure npm and aelf-command are installed before starting. Follow the [Deployment Environment guide](#) if needed.
+
+## Overview
+
+In these 6 cases, BP approval is not needed for contract deployment/updates:
+
+- Deploying user contracts on shared SideChains (initiated by users or BPs).
+- Updating user contracts on shared SideChains (initiated by contract creators).
+- Deploying user contracts on exclusive SideChains (initiated by SideChain creators).
+- Updating user contracts on exclusive SideChains (initiated by contract creators).
+- Deploying user contracts on MainChain (initiated by BPs, recommended on SideChains).
+- Updating user contracts on MainChain (initiated by contract creators).
+
+![Deploying Contract without BP Approval](/img/No-BP-approval-required.webp)
+
+User contracts are non-system contracts. Contracts must implement ACS12 standards. No BP approval is needed; developers initiate 1 transaction to deploy/update contracts.
+
+## Contracts Deployment/Update Procedure
+
+### Developer: DeployUserSmartContract / UpdateUserSmartContract
+
+**Contract Deployment**
+
+1. Developer initiates `DeployUserSmartContract`.
+2. A `CodeCheck` proposal is created for BP code review.
+3. Transaction returns `CodeHash` of the contract deployment.
+
+**Contract Update**
+
+1. Developer initiates `UpdateUserSmartContract`.
+2. A `CodeCheck` proposal is created for BP code review.
+
+### BP: Parliament.ApproveMultiProposals (Automatic)
+
+BPs automatically complete the code check. If it passes, an `ApproveMultiProposals` transaction is initiated, approving the `CodeCheck` proposal.
+
+### BP: ReleaseApprovedUserSmartContract (Automatic)
+
+Once 2/3 (rounding down) + 1 BPs approve the code check, they release the `CodeCheck` proposal by initiating the `ReleaseApprovedUserSmartContract` transaction, completing the deployment/update.
+
+If the code check fails, the process stops.
+
+### Developer: GetSmartContractRegistrationByCodeHash
+
+To get the deployed/updated contract address:
+
+1. Use the `CodeHash` from `DeployUserSmartContract`/`UpdateUserSmartContract` to check the address via `GetSmartContractRegistrationByCodeHash`.
+
+The result is available after at least one round of block production.
+
+If there are errors, the transaction will fail, and error info can be obtained from the transaction results. If the address is not available after 10 minutes, check:
+
+- If the contract implements ACS12 standards.
+- If the contract development scaffold is the latest version.
\ No newline at end of file
diff --git a/docs/Tools/smart-contract-templates/developing-smart-contracts/index.md b/docs/Tools/smart-contract-templates/developing-smart-contracts/index.md
new file mode 100644
index 00000000..4853a53b
--- /dev/null
+++ b/docs/Tools/smart-contract-templates/developing-smart-contracts/index.md
@@ -0,0 +1,185 @@
+---
+sidebar_position: 3
+title: Developing Smart Contracts
+---
+
+
+# Developing Smart Contracts
+This guide shows how to develop a smart contract using the GreeterContract as an example. You’ll learn to create your own basic contract.
+
+## Steps for Developing Smart Contracts
+1. **Install template:** Install the aelf smart contract templates using the dotnet command.
+2. **Initialize project:** Create the project structure and base contract code.
+3. **Define the contract:** Use a protobuf file to define methods and types.
+4. **Implement contract code:** Write the logic for the contract methods.
+5. **Test smart contracts:** Create unit tests for the contracts.
+
+The Greeter contract includes an `AddGreeters` method to add a new greeter and a `GetGreeters` method to list all greeters.
+
+### Install Template
+1. To install the template, run:
+```sh
+dotnet new install AElf.ContractTemplates
+```
+
+2. Verify installation with:
+```sh
+dotnet new uninstall
+```
+
+### Initialize Project
+1. Create a project named GreeterContract with:
+```sh
+dotnet new aelf -n GreeterContract -N AElf.Contracts.Greeter
+```
+This generates the following structure:
+```sh
+.
+├── src
+│ ├── GreeterContract.cs
+│ ├── GreeterContract.csproj
+│ ├── GreeterContractState.cs
+│ └── Protobuf
+│ ├── contract
+│ │ └── hello_world_contract.proto
+│ └── message
+│ └── authority_info.proto
+└── test
+ ├── GreeterContract.Tests.csproj
+ ├── GreeterContractTests.cs
+ ├── Protobuf
+ │ ├── message
+ │ │ └── authority_info.proto
+ │ └── stub
+ │ └── hello_world_contract.proto
+ └── _Setup.cs
+```
+
+2. Define the Contract
+Create a greeter_contract.proto file to define the contract:
+```cs
+syntax = "proto3";
+
+import "aelf/options.proto";
+import "google/protobuf/empty.proto";
+import "google/protobuf/wrappers.proto";
+option csharp_namespace = "AElf.Contracts.Greeter";
+
+service GreeterContract {
+ option (aelf.csharp_state) = "AElf.Contracts.Greeter.GreeterContractState";
+
+ rpc AddGreeters (google.protobuf.StringValue) returns (google.protobuf.Empty) {}
+ rpc GetGreeters (google.protobuf.Empty) returns (GreeterList) {
+ option (aelf.is_view) = true;
+ }
+}
+
+message GreeterList {
+ repeated string greeter = 1;
+}
+```
+
+3. Implement Contract Code
+Run dotnet build in the src folder to compile the proto files. Implement the contract logic in GreeterContract.cs:
+```cs
+using AElf.Sdk.CSharp;
+using Google.Protobuf.WellKnownTypes;
+
+namespace AElf.Contracts.Greeter
+{
+ public class GreeterContract : GreeterContractContainer.GreeterContractBase
+ {
+ public override Empty AddGreeters(StringValue input)
+ {
+ Assert(!string.IsNullOrWhiteSpace(input.Value), "Invalid name.");
+
+ var greeterList = State.GreeterList.Value ?? new GreeterList();
+ if (!greeterList.Greeter.Contains(input.Value))
+ {
+ greeterList.Greeter.Add(input.Value);
+ }
+ State.GreeterList.Value = greeterList;
+
+ return new Empty();
+ }
+
+ public override GreeterList GetGreeters(Empty input)
+ {
+ return State.GreeterList.Value ?? new GreeterList();
+ }
+ }
+}
+```
+
+4. Define the contract state in GreeterContractState.cs:
+```cs
+using AElf.Sdk.CSharp.State;
+
+namespace AElf.Contracts.Greeter
+{
+ public class GreeterContractState : ContractState
+ {
+ public SingletonState GreeterList { get; set; }
+ }
+}
+```
+
+5. Test Smart Contracts
+Use the AElf.ContractTestKit for testing. The test folder contains the necessary files for unit testing.
+
+6. Setup the testing context in _Setup.cs:
+```cs
+using AElf.Cryptography.ECDSA;
+using AElf.Testing.TestBase;
+
+namespace AElf.Contracts.Greeter
+{
+ public class Module : ContractTestModule { }
+
+ public class TestBase : ContractTestBase
+ {
+ internal readonly GreeterContractContainer.GreeterContractStub GreeterContractStub;
+ private ECKeyPair DefaultKeyPair => Accounts[0].KeyPair;
+
+ public TestBase()
+ {
+ GreeterContractStub = GetGreeterContractContractStub(DefaultKeyPair);
+ }
+
+ private GreeterContractContainer.GreeterContractStub GetGreeterContractContractStub(ECKeyPair senderKeyPair)
+ {
+ return GetTester(ContractAddress, senderKeyPair);
+ }
+ }
+}
+```
+
+7. Write unit tests in GreeterContractTests.cs:
+```cs
+using System.Threading.Tasks;
+using Google.Protobuf.WellKnownTypes;
+using Shouldly;
+using Xunit;
+
+namespace AElf.Contracts.Greeter
+{
+ public class GreeterContractTests : TestBase
+ {
+ [Fact]
+ public async Task AddGreetersTest()
+ {
+ var user1 = new StringValue { Value = "Tom" };
+ var user2 = new StringValue { Value = "Jerry" };
+ var expectList = new GreeterList();
+ expectList.Greeter.Add(user1.Value);
+ expectList.Greeter.Add(user2.Value);
+
+ await GreeterContractStub.AddGreeters.SendAsync(user1);
+ await GreeterContractStub.AddGreeters.SendAsync(user2);
+
+ var greeterList = await GreeterContractStub.GetGreeters.CallAsync(new Empty());
+ greeterList.ShouldBe(expectList);
+ }
+ }
+}
+```
\ No newline at end of file
diff --git a/docs/Tools/smart-contract-templates/development-environment/index.md b/docs/Tools/smart-contract-templates/development-environment/index.md
new file mode 100644
index 00000000..5e7668f7
--- /dev/null
+++ b/docs/Tools/smart-contract-templates/development-environment/index.md
@@ -0,0 +1,242 @@
+---
+sidebar_position: 2
+title: Development Environment
+---
+
+## Development Environment
+
+### Before You Start
+To develop smart contracts, you need to install the .NET SDK. Other tools for starting aelf nodes and publishing contracts are optional.
+
+### macOS Setup
+1. **Requirements**:
+ - macOS 10.7 or higher
+ - 2GHz processor (3GHz recommended)
+ - 8 GB RAM (16 GB recommended)
+ - 10 GB free space
+ - Broadband internet
+
+2. **Apple M1 Support**: Install Rosetta:
+ ```bash
+ /usr/sbin/softwareupdate --install-rosetta --agree-to-license
+ ```
+
+3. Install Homebrew:
+ ```sh
+ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
+ brew --version
+ brew update
+ ```
+
+4. Install Git:
+ ```sh
+ brew install git
+ git --version
+ ```
+
+5. Install .NET SDK:
+ ```sh
+ brew install --cask dotnet-sdk
+ dotnet --version
+ ```
+
+6. Install protoBuf:
+ ```sh
+ brew install protobuf
+ protoc --version
+ ```
+
+7. Install Redis:
+ ```sh
+ brew install redis
+ redis-server
+ ```
+![mac_install_redis1](/img/mac_install_redis1.png)
+
+8. Install Node.js:
+ ```sh
+ brew install node
+ npm --version
+ ```
+
+9. Install aelf-command:
+ ```sh
+ npm i aelf-command -g
+ ```
+
+10. Create an aelf Account:
+ ```sh
+ aelf-command create
+ ```
+
+ Similar Output:
+ ```sh
+ AElf [Info]: Your wallet info is :
+ AElf [Info]: Mnemonic : mirror among battle muffin cattle plunge tuition buzz hip mad surround recall
+ AElf [Info]: Private Key : 4bf625afea60e21aa5afcab5ea682b3dfb614941245698632d72a09ae13*****
+ AElf [Info]: Public Key : 04f9bb56a9eca921bd494e677307f0279c98f1d2ed6bdeaa6dd256878272eabd14e91ec61469d2a32ce5e63205930dabdc0b9f13fc80c1f4e31760618d182*****
+ AElf [Info]: Address : 21qciGwcaowwBttKMjMk86AW6WajhcodSHytY1vCyZb7p*****
+ ```
+
+### Linux Setup
+1. **Requirements**:
+ - Ubuntu 18.04
+ - Broadband internet
+
+2. Update Environment:
+ ```sh
+ sudo apt-get update
+ ```
+
+3. Install Git:
+ ```sh
+ sudo apt-get install git -y
+ git --version
+ ```
+
+4. Install .NET SDK:
+ ```sh
+ wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
+ sudo dpkg -i packages-microsoft-prod.deb
+ sudo apt-get update
+ sudo apt-get install -y dotnet-sdk-6.0
+ dotnet --version
+ ```
+
+5. Install protoBuf:
+ ```sh
+ curl -OL https://github.com/google/protobuf/releases/download/v21.9/protoc-21.9-linux-x86_64.zip
+ unzip protoc-21.9-linux-x86_64.zip -d protoc3
+ sudo mv protoc3/bin/* /usr/local/bin/
+ sudo mv protoc3/include/* /usr/local/include/
+ protoc --version
+ ```
+
+6. Install Redis:
+ ```sh
+ sudo apt-get install redis -y
+ redis-server
+ ```
+
+7. Install Node.js:
+ ```sh
+ curl -fsSL https://deb.nodesource.com/setup_14.x | sudo -E bash -
+ sudo apt-get install -y nodejs
+ npm --version
+ ```
+
+8. Install aelf-command:
+ ```sh
+ npm i aelf-command -g
+ ```
+
+9. Create an aelf Account:
+ ```sh
+ aelf-command create
+ ```
+
+### Windows Setup
+1. **Requirements**:
+ - Windows 10 or higher
+ - Broadband internet
+
+2. Install Chocolatey:
+ ```sh
+ Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
+ choco
+ ```
+
+3. Install Git:
+ ```sh
+ choco install git -y
+ git --version
+ ```
+
+4. Install .NET SDK:
+ ```sh
+ choco install dotnetcore-sdk -y
+ dotnet --version
+ ```
+
+5. Install protoBuf:
+ ```sh
+ choco install protoc -y
+ protoc --version
+ ```
+
+6. Install Redis:
+ ```sh
+ choco install redis-64 -y
+ redis-server
+ ```
+![windows_install_redis1](/img/windows_install_redis1.webp)
+
+7. Install Node.js:
+ ```sh
+ choco install nodejs -y
+ npm --version
+ ```
+
+8. Install aelf-command:
+ ```sh
+ npm i aelf-command -g
+ ```
+
+9. Create an aelf Account:
+ ```sh
+ aelf-command create
+ ```
+
+### Codespaces Setup
+1. Open Codespaces:
+![codespaces11](/img/codespaces11.webp)
+
+2. Visit the aelfProject repo.
+
+3. Click "Code" > "Codespaces" > "+" to create a new codespace.
+![codespaces21](/img/codespaces21.webp)
+
+4. Check Installed Versions:
+ ```sh
+ git --version
+ npm --version
+ ```
+
+5. Update Environment:
+ ```sh
+ sudo apt-get update
+ ```
+
+6. Install .NET SDK:
+ ```sh
+ wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
+ sudo dpkg -i packages-microsoft-prod.deb
+ sudo apt-get update
+ sudo apt-get install -y dotnet-sdk-6.0
+ dotnet --version
+ ```
+
+7. Install protoBuf:
+ ```sh
+ curl -OL https://github.com/google/protobuf/releases/download/v21.9/protoc-21.9-linux-x86_64.zip
+ unzip protoc-21.9-linux-x86_64.zip -d protoc3
+ sudo mv protoc3/bin/* /usr/local/bin/
+ sudo mv protoc3/include/* /usr/local/include/
+ protoc --version
+ ```
+
+8. Install Redis:
+ ```sh
+ sudo apt-get install redis -y
+ redis-server
+ ```
+
+9. Install aelf-command:
+ ```sh
+ npm i aelf-command -g
+ ```
+
+10. Create an aelf Account:
+ ```sh
+ aelf-command create
+ ```
diff --git a/docs/Tools/smart-contract-templates/index.md b/docs/Tools/smart-contract-templates/index.md
new file mode 100644
index 00000000..8bd9b769
--- /dev/null
+++ b/docs/Tools/smart-contract-templates/index.md
@@ -0,0 +1,4 @@
+---
+sidebar_position: 4
+title: Smart Contract Templates
+---
\ No newline at end of file
diff --git a/docs/Tools/smart-contract-templates/overview/index.md b/docs/Tools/smart-contract-templates/overview/index.md
new file mode 100644
index 00000000..219a25d2
--- /dev/null
+++ b/docs/Tools/smart-contract-templates/overview/index.md
@@ -0,0 +1,28 @@
+---
+sidebar_position: 1
+title: Smart Contracts Overview
+---
+
+## Smart Contracts Overview
+
+This section helps you learn to write smart contracts. It will take about 40 minutes to complete. Follow the steps and examples to set up your development environment using C# and AElf-developer-tools. You'll learn to develop, test, and deploy/update smart contracts.
+
+There are two types of smart contract deployment/update:
+1. Requires approval from a BP.
+2. Does not require approval.
+
+The tutorials explain when to use each type.
+
+Blockchain platforms are like a shared database storing the status of all deployed smart contracts. Each smart contract gets a unique address upon deployment. This address is used to check the contract's execution status and acts as an identifier for queries and updates. The contract code details how to verify permissions and complete operations.
+
+### Development Steps
+1. Set up the development environment.
+2. Develop the smart contract.
+3. Test the smart contract.
+4. Deploy or update the smart contract.
+
+### Deployment/Update Types
+- **With BP Approval**: Needed in certain scenarios.
+- **Without BP Approval**: Used in other scenarios.
+
+This overview provides a basic understanding to get started with smart contracts on the AElf platform.
\ No newline at end of file
diff --git a/docs/Tutorials/index.md b/docs/Tutorials/index.md
new file mode 100644
index 00000000..31c9b263
--- /dev/null
+++ b/docs/Tutorials/index.md
@@ -0,0 +1,4 @@
+---
+sidebar_position: 3
+title: Tutorials
+---
diff --git a/docs/Tutorials/operate-a-node/index.md b/docs/Tutorials/operate-a-node/index.md
new file mode 100644
index 00000000..e3fa3766
--- /dev/null
+++ b/docs/Tutorials/operate-a-node/index.md
@@ -0,0 +1,4 @@
+---
+sidebar_position: 2
+title: Operate a Node
+---
diff --git a/docs/getting-started/mainnet.md b/docs/Tutorials/operate-a-node/run-a-mainnet-node/index.md
similarity index 99%
rename from docs/getting-started/mainnet.md
rename to docs/Tutorials/operate-a-node/run-a-mainnet-node/index.md
index d93c9fe6..3fff67df 100644
--- a/docs/getting-started/mainnet.md
+++ b/docs/Tutorials/operate-a-node/run-a-mainnet-node/index.md
@@ -1,6 +1,6 @@
---
-sidebar_position: 3
-title: Mainnet
+sidebar_position: 2
+title: Run a Mainnet Node
---
## How to Join the Mainnet
diff --git a/docs/Tutorials/operate-a-node/run-a-side-chain/request-side-chain-creation/index.md b/docs/Tutorials/operate-a-node/run-a-side-chain/request-side-chain-creation/index.md
new file mode 100644
index 00000000..753e2ba9
--- /dev/null
+++ b/docs/Tutorials/operate-a-node/run-a-side-chain/request-side-chain-creation/index.md
@@ -0,0 +1,424 @@
+---
+sidebar_position: 1
+title: Request a Side Chain
+---
+
+
+Side chains can be created in the aelf ecosystem to enable scalability. This section introduces the process in detail.
+
+## Side Chain Creation API
+
+Anyone can request the creation of a side chain in the aelf ecosystem. The proposer/creator of a new side chain needs to request the creation through the cross-chain contract on the main chain. The request contains fields that determine the type of side chain to be created.
+
+### API for Proposing Side Chain Creation
+
+The fields in the `SideChainCreationRequest` determine the type of side chain that is created. For more details, follow `RequestSideChainCreation` in the [Crosschain contract documentation](../../../reference/smart-contract-api/cross-chain).
+
+Upon creating a new proposal for the side chain, the `ProposalCreated` event containing the proposal ID will be fired. A parliament organization, specified since the chain's launch, will approve this proposal within 24 hours (refer to the [Parliament contract documentation](../../../reference/smart-contract-api/parliament) for details). The proposer can release the side chain creation request with the proposal ID once it can be released. Refer to `ReleaseSideChainCreation` in the [Crosschain contract documentation](../../../reference/smart-contract-api/cross-chain).
+
+Once the side chain is created, the `SideChainCreatedEvent` containing the chain ID will be fired.
+
+The side chain node can be launched once it is created on the main chain. Ensure the side chain ID from the creation result is configured correctly before launching the side chain node. Make sure the cross-chain communication context is correctly set, as the side chain node will request main chain node for chain initialization data. For more details, check the [side chain node running tutorial](running-side-chain).
+
+## Side Chain Types
+
+Two types of side chains currently exist: **exclusive** and **shared**. An **exclusive** side chain allows developers to choose the transaction fee model and set the transaction fee price. Only the creator of an **exclusive** side chain can propose deploying a new contract.
+
+## Paying for Side Chain
+
+### Indexing Fee
+
+The indexing fee is paid for side chain indexing. You can specify the indexing fee price and prepayments amount when requesting side chain creation. The cross-chain contract charges prepayments once the side chain is created and pays the miner who indexes the side chain block every time.
+
+### Resource Fee
+
+Developers of an exclusive side chain pay producers for running it by paying CPU, RAM, DISK, and NET resource tokens. This model is called _charge-by-time_. The amount the side chain creator must share with the producers is set after the chain's creation. The **exclusive** side chain is priced according to the time used. The unit price of the fee is determined through negotiation between the production node and the developer.
+
+For more information, see the [Economic whitepaper - 4.3 Sidechain Developer Charging Model](https://aelf.com/gridcn/aelf_Economic_and_Governance_Whitepaper_v1.2_en.pdf).
+
+## Simple Demo for Side Chain Creation Request
+
+When a user (usually a developer) feels the need to create a new side chain on aelf, they must call the cross-chain contract and request a side chain creation. After the request, parliament organization members will either approve or reject the creation. If the request is approved, the developer must then release the proposal.
+
+### Step-by-Step Code Snippets
+
+We'll use the [aelf-js-sdk](https://github.com/AElfProject/aelf-sdk.js/tree/master) to create a new side chain. The full script will be provided at the end.
+
+This creation of a side chain (logical, on-chain creation) is done in four steps:
+
+1. The developer must _allow/approve_ some tokens to the cross-chain contract of the main chain.
+2. The developer calls the cross-chain contract of the main chain to _request_ the creation.
+3. The parliament organization members must _approve_ this request.
+4. Finally, the developer must _release_ the request to finalize the creation.
+
+### Set-Up
+
+To test the creation process, you will need a producer node running and the following:
+
+- A `key-pair` (account) created; this will be your Producer (also used to create the creation request in this tutorial).
+- The node needs to be configured with an API endpoint, account, and miner list that correspond to what is in the script.
+
+Here is the initialization code:
+
+```javascript
+const AElf = require('aelf-sdk');
+const Wallet = AElf.wallet;
+
+const { sha256 } = AElf.utils;
+
+// set the private key of the block producer.
+// REPLACE
+const defaultPrivateKey = 'e119487fea0658badc42f089fbaa56de23d8c0e8d999c5f76ac12ad8ae897d76';
+const defaultPrivateKeyAddress = 'HEtBQStfqu53cHVC3PxJU6iGP3RGxiNUfQGvAPTjfrF3ZWH3U';
+
+// load the wallet associated with your block producer's account.
+const wallet = Wallet.getWalletByPrivateKey(defaultPrivateKey);
+
+// API link to the node
+// REPLACE
+const aelf = new AElf(new AElf.providers.HttpProvider('http://127.0.0.1:1234'));
+
+// names of the contracts that will be used.
+const tokenContractName = 'AElf.ContractNames.Token';
+const parliamentContractName = 'AElf.ContractNames.Parliament';
+const crossChainContractName = 'AElf.ContractNames.CrossChain';
+
+...
+
+const createSideChain = async () => {
+ // check the chain status to make sure the node is running
+ const chainStatus = await aelf.chain.getChainStatus({sync: true});
+ const genesisContract = await aelf.chain.contractAt(chainStatus.GenesisContractAddress, wallet)
+ .catch((err) => {
+ console.log(err);
+ });
+
+ // get the addresses of the contracts that we'll need to call
+ const tokenContractAddress = await genesisContract.GetContractAddressByName.call(sha256(tokenContractName));
+ const parliamentContractAddress = await genesisContract.GetContractAddressByName.call(sha256(parliamentContractName));
+ const crossChainContractAddress = await genesisContract.GetContractAddressByName.call(sha256(crossChainContractName));
+
+ // build the aelf-sdk contract instance objects
+ const parliamentContract = await aelf.chain.contractAt(parliamentContractAddress, wallet);
+ const tokenContract = await aelf.chain.contractAt(tokenContractAddress, wallet);
+ const crossChainContract = await aelf.chain.contractAt(crossChainContractAddress, wallet);
+
+ ...
+}
+```
+
+When running the script, the **createSideChain** function will be executed and will run through the full process of creating the side chain.
+
+### Creation of the Side Chain
+
+#### Set the Allowance
+
+First, the developer must approve some ELF tokens for use by the cross-chain contract.
+
+```javascript
+var setAllowance = async function (tokenContract, crossChainContractAddress) {
+ // set some allowance to the cross-chain contract
+ const approvalResult = await tokenContract.Approve({
+ symbol: "ELF",
+ spender: crossChainContractAddress,
+ amount: 20000,
+ });
+
+ let approveTransactionResult = await pollMining(approvalResult.TransactionId);
+};
+```
+
+#### Creation Request
+
+To request a side chain creation, the developer must call **RequestSideChainCreation** on the cross-chain contract. This creates a proposal with the **Parliament** contract. After calling this method, a **ProposalCreated** log will be created containing the **ProposalId**.
+
+```protobuf
+rpc RequestSideChainCreation(SideChainCreationRequest) returns (google.protobuf.Empty){}
+
+message SideChainCreationRequest {
+ int64 indexing_price = 1; // The cross chain indexing price.
+ int64 locked_token_amount = 2; // Initial locked balance for a new side chain.
+ bool is_privilege_preserved = 3; // Creator privilege boolean flag.
+ SideChainTokenCreationRequest side_chain_token_creation_request = 4; // Side chain token information.
+ repeated SideChainTokenInitialIssue side_chain_token_initial_issue_list = 5; // A list of accounts and amounts that will be issued when the chain starts.
+ map initial_resource_amount = 6; // The initial rent resources.
+}
+
+message SideChainTokenCreationRequest{
+ string side_chain_token_symbol = 1; // Token symbol of the side chain to be created.
+ string side_chain_token_name = 2; // Token name of the side chain to be created.
+ int64 side_chain_token_total_supply = 3; // Token total supply of the side chain to be created.
+ int32 side_chain_token_decimals = 4; // Token decimals of the side chain to be created.
+}
+
+message SideChainTokenInitialIssue{
+ aelf.Address address = 1; // The account that will be issued.
+ int64 amount = 2; // The amount that will be issued.
+}
+```
+
+In order for the creation request to succeed, some assertions must pass:
+
+- The Sender can only have one pending request at any time.
+- The `locked_token_amount` cannot be lower than the indexing price.
+- If `is_privilege_preserved` is true (exclusive side chain), the token initial issue list cannot be empty and all with an `amount` greater than 0.
+- If `is_privilege_preserved` is true (exclusive side chain), the `initial_resource_amount` must contain all resource tokens of the chain, and the value must be greater than 0.
+- The allowance approved to cross-chain contract from the proposer (Sender of the transaction) cannot be lower than the `locked_token_amount`.
+- No need to provide data about side chain token if `is_privilege_preserved` is false.
+
+```javascript
+var sideChainCreationRequest = async function (crossChainContract) {
+ // call the cross-chain contract to request the creation
+ const creationRequestResult =
+ await crossChainContract.RequestSideChainCreation({
+ indexing_price: 1,
+ locked_token_amount: 20000,
+ is_privilege_preserved: true,
+ side_chain_token_creation_request: {
+ side_chain_token_symbol: "MEGA",
+ side_chain_token_name: "MEGA",
+ side_chain_token_total_supply: 100000000,
+ side_chain_token_decimals: 8,
+ },
+ side_chain_token_initial_issue_list: [
+ {
+ address: defaultPrivateKeyAddress,
+ amount: 10000000,
+ },
+ ],
+ initial_resource_amount: {
+ CPU: 100,
+ RAM: 100,
+ DISK: 100,
+ NET: 100,
+ },
+ });
+
+ let sideChainProposalResult = await pollMining(
+ creationRequestResult.TransactionId
+ );
+ let logs = parseLogs(sideChainProposalResult.Logs);
+ let proposalId = logs.ProposalId;
+};
+```
+
+The **cross-chain** contract emits an event containing the **ProposalId**. This is needed for the last step.
+
+#### Approve the Proposal
+
+This is where the parliament organization members approve the proposal:
+
+```protobuf
+var proposalApproveTx = await parliamentContract.Approve(deserializedLogs[0].proposalId);
+
+await pollMining(proposalApproveTx.TransactionId);
+```
+
+**Note**: when calling **Approve** it will be the _Sender_ of the transaction that approves. Here the script is set to use the key of one parliament organization member, see full script at the end.
+
+#### Release the Proposal
+
+This part of the script releases the proposal:
+
+```protobuf
+var releaseResult = await crossChainContract.ReleaseSideChainCreation({
+ proposalId: deserializedLogs[0].proposalId
+});
+
+let releaseTxResult = await pollMining(releaseResult.TransactionId);
+
+// Parse the logs to get the chain id.
+let sideChainCreationEvent = crossChainContract.deserializeLog(releaseTxResult.Logs, 'SideChainCreatedEvent');
+```
+
+This is the last step involved in creating a side chain, after this the chain id of the new side chain is accessible in the **SideChainCreatedEvent** event log.
+
+### Complete Script
+
+This script demonstrates the essential steps to create a side chain in the aelf ecosystem. The developer must approve some ELF tokens, request the side chain creation, get approval from the parliament organization, and finally release the proposal to create the side chain. Ensure to set the proper configurations and values as per your blockchain environment.
+
+```javascript
+const AElf = require("aelf-sdk");
+const Wallet = AElf.wallet;
+
+const { sha256 } = AElf.utils;
+
+// set the private key of the block producer
+const defaultPrivateKey =
+ "e119487fea0658badc42f089fbaa56de23d8c0e8d999c5f76ac12ad8ae897d76";
+const defaultPrivateKeyAddress =
+ "HEtBQStfqu53cHVC3PxJU6iGP3RGxiNUfQGvAPTjfrF3ZWH3U";
+
+const wallet = Wallet.getWalletByPrivateKey(defaultPrivateKey);
+
+// link to the node
+const aelf = new AElf(new AElf.providers.HttpProvider("http://127.0.0.1:8000"));
+
+if (!aelf.isConnected()) {
+ console.log("Could not connect to the node.");
+}
+
+const tokenContractName = "AElf.ContractNames.Token";
+const parliamentContractName = "AElf.ContractNames.Parliament";
+const crossChainContractName = "AElf.ContractNames.CrossChain";
+
+var pollMining = async function (transactionId) {
+ console.log(`>> Waiting for ${transactionId} the transaction to be mined.`);
+
+ for (i = 0; i < 10; i++) {
+ const currentResult = await aelf.chain.getTxResult(transactionId);
+ // console.log('transaction status: ' + currentResult.Status);
+
+ if (currentResult.Status === "MINED") return currentResult;
+
+ await new Promise((resolve) => setTimeout(resolve, 2000)).catch(
+ function () {
+ console.log("Promise Rejected");
+ }
+ );
+ }
+};
+
+var setAllowance = async function (tokenContract, crossChainContractAddress) {
+ console.log("\n>>>> Setting allowance for the cross-chain contract.");
+
+ // set some allowance to the cross-chain contract
+ const approvalResult = await tokenContract.Approve({
+ symbol: "ELF",
+ spender: crossChainContractAddress,
+ amount: 20000,
+ });
+
+ await pollMining(approvalResult.TransactionId);
+};
+
+var checkAllowance = async function (tokenContract, owner, spender) {
+ console.log("\n>>>> Checking the cross-chain contract's allowance");
+
+ const checkAllowanceTx = await tokenContract.GetAllowance.call({
+ symbol: "ELF",
+ owner: owner,
+ spender: spender,
+ });
+
+ console.log(
+ `>> allowance to the cross-chain contract: ${checkAllowanceTx.allowance} ${checkAllowanceTx.symbol}`
+ );
+};
+
+const createSideChain = async () => {
+ // get the status of the chain in order to get the genesis contract address
+ console.log("Starting side chain creation script\n");
+
+ const chainStatus = await aelf.chain.getChainStatus({ sync: true });
+ const genesisContract = await aelf.chain
+ .contractAt(chainStatus.GenesisContractAddress, wallet)
+ .catch((err) => {
+ console.log(err);
+ });
+
+ // get the addresses of the contracts that we'll need to call
+ const tokenContractAddress =
+ await genesisContract.GetContractAddressByName.call(
+ sha256(tokenContractName)
+ );
+ const parliamentContractAddress =
+ await genesisContract.GetContractAddressByName.call(
+ sha256(parliamentContractName)
+ );
+ const crossChainContractAddress =
+ await genesisContract.GetContractAddressByName.call(
+ sha256(crossChainContractName)
+ );
+
+ // build the aelf-sdk contract object
+ const parliamentContract = await aelf.chain.contractAt(
+ parliamentContractAddress,
+ wallet
+ );
+ const tokenContract = await aelf.chain.contractAt(
+ tokenContractAddress,
+ wallet
+ );
+ const crossChainContract = await aelf.chain.contractAt(
+ crossChainContractAddress,
+ wallet
+ );
+
+ // 1. set and check the allowance, spender is the cross-chain contract
+ await setAllowance(tokenContract, crossChainContractAddress);
+ await checkAllowance(
+ tokenContract,
+ defaultPrivateKeyAddress,
+ crossChainContractAddress
+ );
+
+ // 2. request the creation of the side chain with the cross=chain contract
+ console.log("\n>>>> Requesting the side chain creation.");
+ const sideChainCreationRequestTx =
+ await crossChainContract.RequestSideChainCreation({
+ indexingPrice: 1,
+ lockedTokenAmount: "20000",
+ isPrivilegePreserved: true,
+ sideChainTokenCreationRequest: {
+ sideChainTokenDecimals: 8,
+ sideChainTokenName: "SCATokenName",
+ sideChainTokenSymbol: "SCA",
+ sideChainTokenTotalSupply: "100000000000000000",
+ },
+ sideChainTokenInitialIssueList: [
+ {
+ address: "28Y8JA1i2cN6oHvdv7EraXJr9a1gY6D1PpJXw9QtRMRwKcBQMK",
+ amount: "1000000000000000",
+ },
+ ],
+ initialResourceAmount: { CPU: 2, RAM: 4, DISK: 512, NET: 1024 },
+ });
+
+ let sideChainCreationRequestTxResult = await pollMining(
+ sideChainCreationRequestTx.TransactionId
+ );
+
+ // deserialize the log to get the proposal's ID.
+ let deserializedLogs = parliamentContract.deserializeLog(
+ sideChainCreationRequestTxResult.Logs,
+ "ProposalCreated"
+ );
+ console.log(
+ `>> side chain creation request proposal id ${JSON.stringify(
+ deserializedLogs[0].proposalId
+ )}`
+ );
+
+ // 3. Approve the proposal
+ console.log("\n>>>> Approving the proposal.");
+
+ var proposalApproveTx = await parliamentContract.Approve(
+ deserializedLogs[0].proposalId
+ );
+ await pollMining(proposalApproveTx.TransactionId);
+
+ // 3. Release the side chain
+ console.log("\n>>>> Release the side chain.");
+
+ var releaseResult = await crossChainContract.ReleaseSideChainCreation({
+ proposalId: deserializedLogs[0].proposalId,
+ });
+
+ let releaseTxResult = await pollMining(releaseResult.TransactionId);
+
+ // Parse the logs to get the chain id.
+ let sideChainCreationEvent = crossChainContract.deserializeLog(
+ releaseTxResult.Logs,
+ "SideChainCreatedEvent"
+ );
+ console.log("Chain chain created : ");
+ console.log(sideChainCreationEvent);
+};
+
+createSideChain().then(() => {
+ console.log("Done.");
+});
+```
+
+**Note**: Replace the placeholders in the script with actual values and logic for your use case.
diff --git a/docs/Tutorials/operate-a-node/run-a-side-chain/running-a-side-chain/index.md b/docs/Tutorials/operate-a-node/run-a-side-chain/running-a-side-chain/index.md
new file mode 100644
index 00000000..191c35be
--- /dev/null
+++ b/docs/Tutorials/operate-a-node/run-a-side-chain/running-a-side-chain/index.md
@@ -0,0 +1,95 @@
+---
+sidebar_position: 1
+title: Run a Side Chain
+---
+
+
+# Running a Side Chain (After its Release)
+
+This tutorial explains how to run a side chain node after it has been approved by the producers and released by the creator. After creating the side chain, producers need to run a side chain node.
+
+## Prerequisites
+
+- You already have a main-chain node running.
+- The creation of the side chain has been approved and released.
+
+## Important Note
+
+The key-pair (account) used for mining on the side chain must be the same as the one used on the main-chain node. Both production nodes need to be launched with the same key-pair.
+
+For more information about side chain creation, refer to the document in the [request-side-chain section](request-new-side-chain).
+
+## Side Chain Configuration
+
+### Configuration Files
+
+Two configuration files must be placed in the configuration folder of the side chain, from which you will launch the node:
+
+- `appsettings.json`
+- `appsettings.SideChain.MainNet.json`
+
+### Chain ID and Settings
+
+After the release of the side chain creation request, the ChainId of the new side chain will be accessible in the SideChainCreatedEvent logged by the transaction that released it.
+
+In this example, we will set up the side chain node with ChainId `tDVV` (1866392 converted to base58), connecting to Redis `db2`, and using web API port `1235`. Don’t forget to change the `account`, `password`, and `initial miner`.
+
+#### appsettings.json
+
+```json
+{
+ "ChainId": "tDVV",
+ "ChainType": "SideChain",
+ "NetType": "MainNet",
+ "ConnectionStrings": {
+ "BlockchainDb": "redis://localhost:6379?db=2",
+ "StateDb": "redis://localhost:6379?db=2"
+ },
+ "Account": {
+ "NodeAccount": "YOUR PRODUCER ACCOUNT",
+ "NodeAccountPassword": "YOUR PRODUCER PASSWORD"
+ },
+ "Kestrel": {
+ "EndPoints": {
+ "Http": {
+ "Url": "http://*:1235/"
+ }
+ }
+ },
+ "Consensus": {
+ "MiningInterval": 4000,
+ "StartTimestamp": 0
+ }
+}
+```
+
+#### appsettings.SideChain.MainNet.json
+
+```json
+{
+ "CrossChain": {
+ "Grpc": {
+ "ParentChainServerPort": 5010,
+ "ListeningPort": 5000,
+ "ParentChainServerIp": "127.0.0.1"
+ },
+ "ParentChainId": "AELF"
+ }
+}
+```
+
+Change `ParentChainServerIp` and `ParentChainServerPort` depending on the listening address of your mainchain node.
+
+## Launching the Side Chain Node
+
+Open a terminal and navigate to the folder where you created the side chain configuration:
+
+```bash
+dotnet ../AElf.Launcher.dll
+```
+
+You can try out a few commands from another terminal to check if everything is fine, for example:
+
+```bash
+aelf-command get-blk-height -e http://127.0.0.1:1235
+```
diff --git a/docs/getting-started/testnet.md b/docs/Tutorials/operate-a-node/run-a-testnet-node/index.md
similarity index 99%
rename from docs/getting-started/testnet.md
rename to docs/Tutorials/operate-a-node/run-a-testnet-node/index.md
index 82a8cace..a3049409 100644
--- a/docs/getting-started/testnet.md
+++ b/docs/Tutorials/operate-a-node/run-a-testnet-node/index.md
@@ -1,6 +1,6 @@
---
-sidebar_position: 2
-title: Testnet
+sidebar_position: 1
+title: Run a Testnet Node
---
# How to Join the Testnet
diff --git a/docs/tutorials/aelf On The Cloud/googleCloud.md b/docs/Tutorials/operate-a-node/run-aelf-on-cloud/index.md
similarity index 77%
rename from docs/tutorials/aelf On The Cloud/googleCloud.md
rename to docs/Tutorials/operate-a-node/run-aelf-on-cloud/index.md
index ce22bace..ef06ddd8 100644
--- a/docs/tutorials/aelf On The Cloud/googleCloud.md
+++ b/docs/Tutorials/operate-a-node/run-aelf-on-cloud/index.md
@@ -1,3 +1,9 @@
+---
+sidebar_position: 4
+title: Run aelf on Cloud
+---
+
+
# Getting Started with Google Cloud
This guide will walk you through the steps required to run an aelf node on Google Cloud Platform (GCP).
@@ -6,21 +12,21 @@ This guide will walk you through the steps required to run an aelf node on Googl
1. Go to the [Google Cloud Marketplace](https://console.cloud.google.com/marketplace) and search for "aelf blockchain for enterprise".
- ![image](gcp-step1.png)
+ ![image](../../../../static/img/gcp-step1.png)
2. Find the aelf image and click on "LAUNCH ON COMPUTE ENGINE".
- ![image](gcp-step2-b.png)
+ ![image](../../../../static/img/gcp-step2-b.png)
3. Keep the default settings and click "DEPLOY" at the bottom left of the page.
- ![image](gcp-deployed.png)
+ ![image](../../../../static/img/gcp-deployed.png)
## Step 2: Access and Start the Chain
1. Login to the launched VM instance via SSH. You can do this by clicking the SSH drop-down and selecting "Open in browser window".
- ![image](gcp-ssh-select.png)
+ ![image](../../../../static/img/gcp-ssh-select.png)
2. In the SSH session, execute `sudo bash` to elevate your privileges.
@@ -35,7 +41,7 @@ This guide will walk you through the steps required to run an aelf node on Googl
cd /opt/aelf-node && docker-compose up -d
```
- ![image](gcp-docker-compose.png)
+ ![image](../../../../static/img/gcp-docker-compose.png)
## Step 3: Verify Chain Status
@@ -45,6 +51,6 @@ This guide will walk you through the steps required to run an aelf node on Googl
curl -X GET "http://127.0.0.1:8001/api/blockChain/chainStatus" -H "accept: text/plain; v=1.0"
```
- ![image](gcp-curl-chain-stat.png)
+ ![image](../../../../static/img/gcp-curl-chain-stat.png)
2. If everything is working normally, you should see the chain status increase with each request.
diff --git a/docs/Tutorials/smart-contract-development/index.md b/docs/Tutorials/smart-contract-development/index.md
new file mode 100644
index 00000000..da0be56c
--- /dev/null
+++ b/docs/Tutorials/smart-contract-development/index.md
@@ -0,0 +1,4 @@
+---
+sidebar_position: 1
+title: Smart Contract Development
+---
diff --git a/docs/docs/index.md b/docs/docs/index.md
new file mode 100644
index 00000000..b06459bb
--- /dev/null
+++ b/docs/docs/index.md
@@ -0,0 +1,4 @@
+---
+sidebar_position: 5
+title: Docs Reference
+---
diff --git a/docs/docs/smart-contract-api/association-contract/index.md b/docs/docs/smart-contract-api/association-contract/index.md
new file mode 100644
index 00000000..661505d1
--- /dev/null
+++ b/docs/docs/smart-contract-api/association-contract/index.md
@@ -0,0 +1,417 @@
+---
+sidebar_position: 1
+title: Association Contract
+---
+
+# AElf.Contracts.Association
+
+## Association contract
+
+Organizations established to achieve specific goals can use this contract to cooperatively handle transactions within the organization.
+
+Implements aelf Standards ACS1 and ACS3.
+
+## Contract Methods
+
+| Method Name | Request Type | Response Type | Description |
+| -------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------------------ |
+| **CreateOrganization** | [`Association.CreateOrganizationInput`](#Association.CreateOrganizationInput) | [`aelf.Address`](#aelf.Address) | Create an organization and return its address. |
+| **CreateOrganizationBySystemContract** | [`Association.CreateOrganizationBySystemContractInput`](#Association.CreateOrganizationBySystemContractInput) | [`aelf.Address`](#aelf.Address) | Creates an organization by system contract and return its address. |
+| **AddMember** | [`aelf.Address`](#aelf.Address) | [`google.protobuf.Empty`](#google.protobuf.Empty) | Add organization members. |
+| **RemoveMember** | [`aelf.Address`](#aelf.Address) | [`google.protobuf.Empty`](#google.protobuf.Empty) | Remove organization members. |
+| **ChangeMember** | [`Association.ChangeMemberInput`](#Association.ChangeMemberInput) | [`google.protobuf.Empty`](#google.protobuf.Empty) | Replace organization member with a new member. |
+| **GetOrganization** | [`aelf.Address`](#aelf.Address) | [`Association.Organization`](#Association.Organization) | Get the organization according to the organization address. |
+| **CalculateOrganizationAddress** | [`Association.CreateOrganizationInput`](#Association.CreateOrganizationInput) | [`aelf.Address`](#aelf.Address) | Calculate the input and return the organization address. |
+
+### AElf.Standards.ACS1
+
+| Method Name | Request Type | Response Type | Description |
+| ----------------------------- | ------------------------------------------------------------- | ------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
+| **SetMethodFee** | [`acs1.MethodFees`](#acs1.MethodFees) | [`google.protobuf.Empty`](#google.protobuf.Empty) | Set the method fees for the specified method. Note that this will override all fees of the method. |
+| **ChangeMethodFeeController** | [`AuthorityInfo`](#AuthorityInfo) | [`google.protobuf.Empty`](#google.protobuf.Empty) | Change the method fee controller, the default is parliament and default organization. |
+| **GetMethodFee** | [`google.protobuf.StringValue`](#google.protobuf.StringValue) | [`acs1.MethodFees`](#acs1.MethodFees) | Query method fee information by method name. |
+| **GetMethodFeeController** | [`google.protobuf.Empty`](#google.protobuf.Empty) | [`AuthorityInfo`](#AuthorityInfo) | Query the method fee controller. |
+
+### AElf.Standards.ACS3
+
+| Method Name | Request Type | Response Type | Description |
+| --------------------------------------- | --------------------------------------------------------------------------------------- | --------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| **CreateProposal** | [`acs3.CreateProposalInput`](#acs3.CreateProposalInput) | [`aelf.Hash`](#aelf.Hash) | Create a proposal for which organization members can vote. When the proposal is released, a transaction will be sent to the specified contract. Return id of the newly created proposal. |
+| **Approve** | [`aelf.Hash`](#aelf.Hash) | [`google.protobuf.Empty`](#google.protobuf.Empty) | Approve a proposal according to the proposal ID. |
+| **Reject** | [`aelf.Hash`](#aelf.Hash) | [`google.protobuf.Empty`](#google.protobuf.Empty) | Reject a proposal according to the proposal ID. |
+| **Abstain** | [`aelf.Hash`](#aelf.Hash) | [`google.protobuf.Empty`](#google.protobuf.Empty) | Abstain a proposal according to the proposal ID. |
+| **Release** | [`aelf.Hash`](#aelf.Hash) | [`google.protobuf.Empty`](#google.protobuf.Empty) | Release a proposal according to the proposal ID and send a transaction to the specified contract. |
+| **ChangeOrganizationThreshold** | [`acs3.ProposalReleaseThreshold`](#acs3.ProposalReleaseThreshold) | [`google.protobuf.Empty`](#google.protobuf.Empty) | Change the thresholds associated with proposals. All fields will be overwritten by the input value and this will affect all current proposals of the organization. Note: only the organization can execute this through a proposal. |
+| **ChangeOrganizationProposerWhiteList** | [`acs3.ProposerWhiteList`](#acs3.ProposerWhiteList) | [`google.protobuf.Empty`](#google.protobuf.Empty) | Change the white list of organization proposer. This method overrides the list of whitelisted proposers. |
+| **CreateProposalBySystemContract** | [`acs3.CreateProposalBySystemContractInput`](#acs3.CreateProposalBySystemContractInput) | [`aelf.Hash`](#aelf.Hash) | Create a proposal by system contracts, and return id of the newly created proposal. |
+| **ClearProposal** | [`aelf.Hash`](#aelf.Hash) | [`google.protobuf.Empty`](#google.protobuf.Empty) | Remove the specified proposal. If the proposal is in effect, the cleanup fails. |
+| **GetProposal** | [`aelf.Hash`](#aelf.Hash) | [`acs3.ProposalOutput`](#acs3.ProposalOutput) | Get the proposal according to the proposal ID. |
+| **ValidateOrganizationExist** | [`aelf.Address`](#aelf.Address) | [`google.protobuf.BoolValue`](#google.protobuf.BoolValue) | Check the existence of an organization. |
+| **ValidateProposerInWhiteList** | [`acs3.ValidateProposerInWhiteListInput`](#acs3.ValidateProposerInWhiteListInput) | [`google.protobuf.BoolValue`](#google.protobuf.BoolValue) | Check if the proposer is whitelisted. |
+
+# Contract Types
+
+## AElf.Contracts.Association
+
+### Association.ChangeMemberInput
+
+| Field | Type | Description | Label |
+| ---------- | ------------------------------- | ----------------------- | ----- |
+| old_member | [`aelf.Address`](#aelf.Address) | The old member address. | |
+| new_member | [`aelf.Address`](#aelf.Address) | The new member address. | |
+
+### Association.CreateOrganizationBySystemContractInput
+
+| Field | Type | Description | Label |
+| ------------------------------------ | ----------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | ----- |
+| organization_creation_input | [`CreateOrganizationInput`](#Association.CreateOrganizationInput) | The parameters of creating organization. | |
+| organization_address_feedback_method | [`string`](#string) | The organization address callback method which replies the organization address to caller contract. | |
+
+### Association.CreateOrganizationInput
+
+| Field | Type | Description | Label |
+| -------------------------- | ----------------------------------------------------------------- | ---------------------------------------------------------- | ----- |
+| organization_member_list | [`OrganizationMemberList`](#Association.OrganizationMemberList) | Initial organization members. | |
+| proposal_release_threshold | [`acs3.ProposalReleaseThreshold`](#acs3.ProposalReleaseThreshold) | The threshold for releasing the proposal. | |
+| proposer_white_list | [`acs3.ProposerWhiteList`](#acs3.ProposerWhiteList) | The proposer whitelist. | |
+| creation_token | [`aelf.Hash`](#aelf.Hash) | The creation token is for organization address generation. | |
+
+### Association.MemberAdded
+
+| Field | Type | Description | Label |
+| -------------------- | ------------------------------- | ------------------------- | ----- |
+| member | [`aelf.Address`](#aelf.Address) | The added member address. | |
+| organization_address | [`aelf.Address`](#aelf.Address) | The organization address. | |
+
+### Association.MemberChanged
+
+| Field | Type | Description | Label |
+| -------------------- | ------------------------------- | ------------------------- | ----- |
+| old_member | [`aelf.Address`](#aelf.Address) | The old member address. | |
+| new_member | [`aelf.Address`](#aelf.Address) | The new member address. | |
+| organization_address | [`aelf.Address`](#aelf.Address) | The organization address. | |
+
+### Association.MemberRemoved
+
+| Field | Type | Description | Label |
+| -------------------- | ------------------------------- | --------------------------- | ----- |
+| member | [`aelf.Address`](#aelf.Address) | The removed member address. | |
+| organization_address | [`aelf.Address`](#aelf.Address) | The organization address. | |
+
+### Association.Organization
+
+| Field | Type | Description | Label |
+| -------------------------- | ------------------------------- | ---------------------------------------------------------- | ----- |
+| organization_member_list | `OrganizationMemberList` | The organization members. | |
+| proposal_release_threshold | `acs3.ProposalReleaseThreshold` | The threshold for releasing the proposal. | |
+| proposer_white_list | `acs3.ProposerWhiteList` | The proposer whitelist. | |
+| organization_address | `aelf.Address` | The address of organization. | |
+| organization_hash | `aelf.Hash` | The organizations id. | |
+| creation_token | `aelf.Hash` | The creation token is for organization address generation. | |
+
+### Association.OrganizationMemberList
+
+| Field | Type | Description | Label |
+| -------------------- | -------------- | ------------------------------------ | -------- |
+| organization_members | `aelf.Address` | The address of organization members. | repeated |
+
+# Association.ProposalInfo
+
+| Field | Type | Description | Label |
+| ------------------------ | --------------------------- | ------------------------------------------------------------ | -------- |
+| proposal_id | `aelf.Hash` | The proposal ID. | |
+| contract_method_name | `string` | The method that this proposal will call when being released. | |
+| to_address | `aelf.Address` | The address of the target contract. | |
+| params | `bytes` | The parameters of the release transaction. | |
+| expired_time | `google.protobuf.Timestamp` | The date at which this proposal will expire. | |
+| proposer | `aelf.Address` | The address of the proposer of this proposal. | |
+| organization_address | `aelf.Address` | The address of this proposals organization. | |
+| approvals | `aelf.Address` | Address list of approved. | repeated |
+| rejections | `aelf.Address` | Address list of rejected. | repeated |
+| abstentions | `aelf.Address` | Address list of abstained. | repeated |
+| proposal_description_url | `string` | Url is used for proposal describing. | |
+
+## ACS1
+
+### acs1.MethodFee
+
+| Field | Type | Description | Label |
+| --------- | -------- | ----------------------------------- | ----- |
+| symbol | `string` | The token symbol of the method fee. | |
+| basic_fee | `int64` | The amount of fees to be charged. | |
+
+### acs1.MethodFees
+
+| Field | Type | Description | Label |
+| ---------------- | ----------- | ------------------------------------------------------------ | -------- |
+| method_name | `string` | The name of the method to be charged. | |
+| fees | `MethodFee` | List of fees to be charged. | repeated |
+| is_size_fee_free | `bool` | Optional based on the implementation of SetMethodFee method. | |
+
+## ACS3
+
+### acs3.CreateProposalBySystemContractInput
+
+| Field | Type | Description | Label |
+| --------------- | --------------------- | ------------------------------------ | ----- |
+| proposal_input | `CreateProposalInput` | The parameters of creating proposal. | |
+| origin_proposer | `aelf.Address` | The actor that trigger the call. | |
+
+### acs3.CreateProposalInput
+
+| Field | Type | Description | Label |
+| ------------------------ | --------------------------- | ------------------------------------------------------------------------------------------------------------ | ----- |
+| contract_method_name | `string` | The name of the method to call after release. | |
+| to_address | `aelf.Address` | The address of the contract to call after release. | |
+| params | `bytes` | The parameter of the method to be called after the release. | |
+| expired_time | `google.protobuf.Timestamp` | The timestamp at which this proposal will expire. | |
+| organization_address | `aelf.Address` | The address of the organization. | |
+| proposal_description_url | `string` | Url is used for proposal describing. | |
+| token | `aelf.Hash` | The token is for proposal id generation and with this token, proposal id can be calculated before proposing. | |
+
+### ac3.organizationCreated
+
+| Field | Type | Description | Label |
+| -------------------- | --------------- | ------------------------------------ | ----- |
+| organization_address | `aelf.Address ` | Address of the created organization. | |
+
+### ac3.organizationHashAddressPair
+
+| Field | Type | Description | Label |
+| -------------------- | --------------- | ---------------------------- | ----- |
+| organization_hash | `aelf.Hash ` | ID of the organization. | |
+| organization_address | `aelf.Address ` | Address of the organization. | |
+
+### ac3.organizationThresholdChanged
+
+| Field | Type | Description | Label |
+| -------------------------- | --------------------------- | ---------------------- | ----- |
+| organization_address | `aelf.Address ` | Organization address | |
+| proposer_release_threshold | `ProposalReleaseThreshold ` | New release threshold. | |
+
+### ac3.organizationWhiteListChanged
+
+| Field | Type | Description | Label |
+| -------------------- | ------------------- | ----------------------- | ----- |
+| organization_address | `aelf.Address ` | Organization address | |
+| proposer_white_list | `ProposerWhiteList` | New proposer whitelist. | |
+
+### ac3.proposalCreated
+
+| Field | Type | Description | Label |
+| -------------------- | --------------- | --------------------------------------------- | ----- |
+| proposal_id | `aelf.Hash ` | ID of the created proposal. | |
+| organization_address | `aelf.Address ` | Organization address of the created proposal. | |
+
+### ac3.proposalOutput
+
+| Field | Type | Description | Label |
+| -------------------- | ---------------------------- | -------------------------------------------- | ----- |
+| proposal_id | `aelf.Hash ` | ID of the proposal. | |
+| contract_method_name | `string ` | Method called when the proposal is released. | |
+| to_address | `aelf.Address ` | Address of the target contract. | |
+| params | `bytes ` | Parameters of the release transaction. | |
+| expired_time | `google.protobuf.Timestamp ` | Expiry date of the proposal. | |
+| organization_address | `aelf.Address ` | Organization's address for the proposal. | |
+| proposer | `aelf.Address ` | Address of the proposer. | |
+| to_be_released | `bool ` | Indicates if the proposal is releasable. | |
+| approval_count | `int64 ` | Number of approvals. | |
+| rejection_count | `int64 ` | Number of rejections. | |
+| abstention_count | `int64 ` | Number of abstentions. | |
+
+### ac3.proposalReleaseThreshold
+
+| Field | Type | Description | Label |
+| ---------------------------- | -------- | ----------------------------- | ----- |
+| minimal_approval_threshold | `int64 ` | Minimum approval threshold. | |
+| maximal_rejection_threshold | `int64 ` | Maximum rejection threshold. | |
+| maximal_abstention_threshold | `int64 ` | Maximum abstention threshold. | |
+| minimal_vote_threshold | `int64 ` | Minimum vote threshold. | |
+
+### ac3.proposalReleased
+
+| Field | Type | Description | Label |
+| -------------------- | --------------- | ------------------------------------------------ | ----- |
+| proposal_id | `aelf.Hash ` | ID of the released proposal. | |
+| organization_address | `aelf.Address ` | Organization's address of the released proposal. | |
+
+### ac3.proposerWhiteList
+
+| Field | Type | Description | Label |
+| --------- | --------------- | --------------------------- | -------- |
+| proposers | `aelf.Address ` | Addresses of the proposers. | repeated |
+
+### ac3.receiptCreated
+
+| Field | Type | Description | Label |
+| -------------------- | --------------------------- | ---------------------------------------------- | ----- |
+| proposal_id | `aelf.Hash ` | ID of the proposal. | |
+| address | `aelf.Address ` | Sender's address. | |
+| receipt_type | `string ` | Type of receipt (Approve, Reject, or Abstain). | |
+| time | `google.protobuf.Timestamp` | Timestamp of the method call. | |
+| organization_address | `aelf.Address ` | Organization's address. | |
+
+### acs3.ValidateProposerInWhiteListInput
+
+| Field | Type | Description | Label |
+| -------------------- | --------------- | -------------------------------- | ----- |
+| proposer | `aelf.Address ` | The address to search/check. | |
+| organization_address | `aelf.Address ` | The address of the organization. | |
+
+## AElf.Types
+
+### aelf.Address
+
+| Field | Type | Description | Label |
+| ----- | -------- | ----------- | ----- |
+| value | `bytes ` | | |
+
+### aelf.BinaryMerkleTree
+
+| Field | Type | Description | Label |
+| ---------- | -------- | ----------------------- | -------- |
+| nodes | `Hash ` | The leaf nodes. | repeated |
+| root | `Hash ` | The root node hash. | |
+| leaf_count | `int32 ` | The count of leaf node. | |
+
+### aelf.Hash
+
+| Field | Type | Description | Label |
+| ----- | -------- | ----------- | ----- |
+| value | `bytes ` | | |
+
+### aelf.LogEvent
+
+| Field | Type | Description | Label |
+| ----------- | ---------- | ------------------------------------------ | -------- |
+| address | `Address ` | The contract address. | |
+| name | `string ` | The name of the log event. | |
+| indexed | `bytes ` | The indexed data, used to calculate bloom. | repeated |
+| non_indexed | `bytes ` | The non indexed data. | |
+
+### aelf.MerklePath
+
+| Field | Type | Description | Label |
+| ----------------- | ----------------- | ---------------------- | -------- |
+| merkle_path_nodes | `MerklePathNode ` | The merkle path nodes. | repeated |
+
+### aelf.MerklePathNode
+
+| Field | Type | Description | Label |
+| ------------------ | ------- | -------------------------------- | ----- |
+| hash | `Hash ` | The node hash. | |
+| is_left_child_node | `bool ` | Whether it is a left child node. | |
+
+### aelf.SInt32Value
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------- | ----- |
+| value | `sint32 ` | | |
+
+### aelf.SInt64Value
+
+| Field | Type | Description | Label |
+| ----- | -------- | ----------- | ----- |
+| value | `sint64` | | |
+
+### aelf.ScopedStatePath
+
+| Field | Type | Description | Label |
+| ------- | ------------ | ------------------------------------------------------ | ----- |
+| address | `Address ` | The scope address, which will be the contract address. | |
+| path | `StatePath ` | The path of contract state. | |
+
+### aelf.SmartContractRegistration
+
+| Field | Type | Description | Label |
+| ------------------ | --------- | ------------------------------------- | ----- |
+| category | `sint32 ` | The category of contract code(0: C#). | |
+| code | `bytes ` | The byte array of the contract code. | |
+| code_hash | `Hash ` | The hash of the contract code. | |
+| is_system_contract | `bool ` | Whether it is a system contract. | |
+| version | `int32 ` | The version of the current contract. | |
+
+### aelf.StatePath
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------------------------------- | -------- |
+| parts | `string ` | The partial path of the state path. | repeated |
+
+### aelf.Transaction
+
+| Field | Type | Description | Label |
+| ---------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----- |
+| from | `Address ` | The address of the sender of the transaction. | |
+| to | `Address ` | The address of the contract when calling a contract. | |
+| ref_block_number | `int64 ` | The height of the referenced block hash. | |
+| ref_block_prefix | `bytes ` | The first four bytes of the referenced block hash. | |
+| method_name | `string ` | The name of a method in the smart contract at the To address. | |
+| params | `bytes ` | The parameters to pass to the smart contract method. | |
+| signature | `bytes ` | When signing a transaction it’s actually a subset of the fields: from/to and the target method as well as the parameter that were given. It also contains the reference block number and prefix. | |
+
+### aelf.TransactionExecutingStateSet
+
+| Field | Type | Description | Label |
+| ------- | -------------------------------------------- | ------------------- | -------- |
+| writes | `TransactionExecutingStateSet.WritesEntry ` | The changed states. | repeated |
+| reads | `TransactionExecutingStateSet.ReadsEntry ` | The read states. | repeated |
+| deletes | `TransactionExecutingStateSet.DeletesEntry ` | The deleted states. | repeated |
+
+### aelf.TransactionExecutingStateSet.DeletesEntry
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------- | ----- |
+| key | `string ` | | |
+| value | `bool ` | | |
+
+
+### aelf.TransactionExecutingStateSet.ReadsEntry
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------- | ----- |
+| key | `string ` | | |
+| value | `bool ` | | |
+
+
+### aelf.TransactionExecutingStateSet.WritesEntry
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------- | ----- |
+| key | `string ` | | |
+| value | `bytes ` | | |
+
+
+### aelf.TransactionResult
+
+| Field | Type | Description | Label |
+| -------------- | -------------------------- | ----------------------------------------------------- | -------- |
+| transaction_id | `Hash ` | The transaction id. | |
+| status | `TransactionResultStatus ` | The transaction result status. | |
+| logs | `LogEvent ` | The log events. | repeated |
+| bloom | `bytes ` | Bloom filter for transaction logs. | |
+| return_value | `bytes ` | The return value of the transaction execution. | |
+| block_number | `int64 ` | The height of the block hat packages the transaction. | |
+| block_hash | `Hash ` | The hash of the block hat packages the transaction. | |
+| error | `string ` | Failed execution error message. | |
+
+
+
+### aelf.TransactionResultStatus
+
+| Name | Number | Description |
+| ---------------------- | ------ | --------------------------------------------------------------------------------- |
+| NOT_EXISTED | 0 | The execution result of the transaction does not exist. |
+| PENDING | 1 | The transaction is in the transaction pool waiting to be packaged. |
+| FAILED | 2 | Transaction execution failed. |
+| MINED | 3 | The transaction was successfully executed and successfully packaged into a block. |
+| CONFLICT | 4 | When executed in parallel, there are conflicts with other transactions. |
+| PENDING_VALIDATION | 5 | The transaction is waiting for validation. |
+| NODE_VALIDATION_FAILED | 6 | Transaction validation failed. |
+
+
+## AuthorityInfo
+
+| Field | Type | Description | Label |
+| ---------------- | --------------- | ----------------------------------------- | ----- |
+| contract_address | `aelf.Address` | The contract address of the controller. | |
+| owner_address | `aelf.Address ` | The address of the owner of the contract. | |
diff --git a/docs/docs/smart-contract-api/configuration-contract/index.md b/docs/docs/smart-contract-api/configuration-contract/index.md
new file mode 100644
index 00000000..4a963c6f
--- /dev/null
+++ b/docs/docs/smart-contract-api/configuration-contract/index.md
@@ -0,0 +1,213 @@
+---
+sidebar_position: 15
+title: Configuration Contract
+---
+
+# Configuration contract.
+
+Used to manage the configuration on the blockchain. Implements aelf Standards ACS1.
+
+## Contract Methods
+
+| Method Name | Request Type | Response Type | Description |
+| ----------------------------- | ------------------------------------- | ---------------------------- | ------------------------------------------------------------ |
+| SetConfiguration | `Configuration.SetConfigurationInput` | `google.protobuf.Empty` | Add or update configuration. |
+| ChangeConfigurationController | `AuthorityInfo` | `google.protobuf.Empty` | Change the method fee controller, the default is Parliament. |
+| GetConfiguration | `google.protobuf.StringValue` | `google.protobuf.BytesValue` | Query the configuration by configuration’s key. |
+| GetConfigurationController | `google.protobuf.Empty` | `AuthorityInfo` | Query the controller information. |
+
+## AElf.Standards.ACS1
+
+| Method Name | Request Type | Response Type | Description |
+| ------------------------- | ----------------------------- | ----------------------- | -------------------------------------------------------------------------------------------------- |
+| SetMethodFee | `acs1.MethodFees` | `google.protobuf.Empty` | Set the method fees for the specified method. Note that this will override all fees of the method. |
+| ChangeMethodFeeController | `AuthorityInfo` | `google.protobuf.Empty` | Change the method fee controller, the default is parliament and default organization. |
+| GetMethodFee | `google.protobuf.StringValue` | `acs1.MethodFees` | Query method fee information by method name. |
+| GetMethodFeeController | `google.protobuf.Empty` | `AuthorityInfo` | Query the method fee controller. |
+
+**Contract Types**
+
+## AElf.Contracts.Configuration
+
+### Configuration.ConfigurationSet
+
+| Field | Type | Description | Label |
+| ----- | -------- | ---------------------------------------- | ----- |
+| key | `string` | The configuration’s key. | |
+| value | `bytes` | The configuration’s value (binary data). | |
+
+### Configuration.SetConfigurationInput
+
+| Field | Type | Description | Label |
+| ----- | -------- | ---------------------------------------- | ----- |
+| key | `string` | The configuration’s key. | |
+| value | `bytes` | The configuration’s value (binary data). | |
+
+## AElf.Standards.ACS1
+
+### acs1.MethodFee
+
+| Field | Type | Description | Label |
+| --------- | -------- | ----------------------------------- | ----- |
+| symbol | `string` | The token symbol of the method fee. | |
+| basic_fee | `int64` | The amount of fees to be charged. | |
+
+### acs1.MethodFees
+
+| Field | Type | Description | Label |
+| ---------------- | ----------- | ------------------------------------------------------------ | -------- |
+| method_name | `string` | The name of the method to be charged. | |
+| fees | `MethodFee` | List of fees to be charged. | repeated |
+| is_size_fee_free | `bool` | Optional based on the implementation of SetMethodFee method. | |
+
+## AElf.Types
+
+### aelf.Address
+
+| Field | Type | Description | Label |
+| ----- | ------- | ----------- | ----- |
+| value | `bytes` | | |
+
+### aelf.BinaryMerkleTree
+
+| Field | Type | Description | Label |
+| ---------- | ------- | ----------------------- | -------- |
+| nodes | `Hash` | The leaf nodes. | repeated |
+| root | `Hash` | The root node hash. | |
+| leaf_count | `int32` | The count of leaf node. | |
+
+### aelf.Hash
+
+| Field | Type | Description | Label |
+| ----- | ------- | ----------- | ----- |
+| value | `bytes` | | |
+
+### aelf.LogEvent
+
+| Field | Type | Description | Label |
+| ----------- | ------------------------ | ------------------------------------------ | -------- |
+| address | `Address` | The contract address. | |
+| name | `string` | The name of the log event. | |
+| indexed | `bytes` | The indexed data, used to calculate bloom. | repeated |
+| non_indexed | `bytes` | The non indexed data. | |
+
+### aelf.MerklePath
+
+| Field | Type | Description | Label |
+| ----------------- | -------------------------------------- | ---------------------- | -------- |
+| merkle_path_nodes | `MerklePathNode` | The merkle path nodes. | repeated |
+
+### aelf.MerklePathNode
+
+| Field | Type | Description | Label |
+| ------------------ | ------------------ | -------------------------------- | ----- |
+| hash | `Hash` | The node hash. | |
+| is_left_child_node | `bool` | Whether it is a left child node. | |
+
+### aelf.SInt32Value
+
+| Field | Type | Description | Label |
+| ----- | ----------------- | ----------- | ----- |
+| value | `sint32` | | |
+
+### aelf.SInt64Value
+
+| Field | Type | Description | Label |
+| ----- | ----------------- | ----------- | ----- |
+| value | `sint64` | | |
+
+### aelf.ScopedStatePath
+
+| Field | Type | Description | Label |
+| ------- | ---------------------------- | ------------------------------------------------------ | ----- |
+| address | `Address` | The scope address, which will be the contract address. | |
+| path | `StatePath` | The path of contract state. | |
+
+### aelf.SmartContractRegistration
+
+| Field | Type | Description | Label |
+| ------------------ | ------------------ | ------------------------------------- | ----- |
+| category | `sint32` | The category of contract code(0: C#). | |
+| code | `bytes` | The byte array of the contract code. | |
+| code_hash | `Hash` | The hash of the contract code. | |
+| is_system_contract | `bool` | Whether it is a system contract. | |
+| version | `int32` | The version of the current contract. | |
+
+### aelf.StatePath
+
+| Field | Type | Description | Label |
+| ----- | ----------------- | ----------------------------------- | -------- |
+| parts | `string` | The partial path of the state path. | repeated |
+
+### aelf.Transaction
+
+| Field | Type | Description | Label |
+| ---------------- | ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----- |
+| from | `Address` | The address of the sender of the transaction. | |
+| to | `Address` | The address of the contract when calling a contract. | |
+| ref_block_number | [int64] | The height of the referenced block hash. | |
+| ref_block_prefix | `bytes` | The first four bytes of the referenced block hash. | |
+| method_name | `string` | The name of a method in the smart contract at the To address. | |
+| params | `bytes` | The parameters to pass to the smart contract method. | |
+| signature | `bytes` | When signing a transaction it’s actually a subset of the fields: from/to and the target method as well as the parameter that were given. It also contains the reference block number and prefix. | |
+
+### aelf.TransactionExecutingStateSet
+
+| Field | Type | Description | Label |
+| ------- | -------------------------------------------------------------------------------------------- | ------------------- | -------- |
+| writes | [TransactionExecutingStateSet.WritesEntry](#aelf.TransactionExecutingStateSet.WritesEntry) | The changed states. | repeated |
+| reads | [TransactionExecutingStateSet.ReadsEntry](#aelf.TransactionExecutingStateSet.ReadsEntry) | The read states. | repeated |
+| deletes | [TransactionExecutingStateSet.DeletesEntry](#aelf.TransactionExecutingStateSet.DeletesEntry) | The deleted states. | repeated |
+
+### aelf.TransactionExecutingStateSet.DeletesEntry
+
+| Field | Type | Description | Label |
+| ----- | ----------------- | ----------- | ----- |
+| key | `string` | | |
+| value | `bool` | | |
+
+### aelf.TransactionExecutingStateSet.ReadsEntry
+
+| Field | Type | Description | Label |
+| ----- | ----------------- | ----------- | ----- |
+| key | `string` | | |
+| value | `bool` | | |
+
+### aelf.TransactionExecutingStateSet.WritesEntry
+
+| Field | Type | Description | Label |
+| ----- | ----------------- | ----------- | ----- |
+| key | `string` | | |
+| value | `bytes` | | |
+
+### aelf.TransactionResult
+
+| Field | Type | Description | Label |
+| -------------- | -------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------- |
+| transaction_id | `Hash` | The transaction id. | |
+| status | `TransactionResultStatus | The transaction result status. | |
+| logs | `LogEvent` | The log events. | repeated |
+| bloom | `bytes` | Bloom filter for transaction logs. A transaction log event can be defined in the contract and stored in the bloom filter after the transaction is executed. Through this filter, we can quickly search for and determine whether a log exists in the transaction result. | |
+| return_value | `bytes` | The return value of the transaction execution. | |
+| block_number | `int64` | The height of the block that packages the transaction. | |
+| block_hash | `Hash` | The hash of the block that packages the transaction. | |
+| error | `string` | Failed execution error message. | |
+
+### aelf.TransactionResultStatus
+
+| Name | Number | Description |
+| ---------------------- | ------ | --------------------------------------------------------------------------------- |
+| NOT_EXISTED | 0 | The execution result of the transaction does not exist. |
+| PENDING | 1 | The transaction is in the transaction pool waiting to be packaged. |
+| FAILED | 2 | Transaction execution failed. |
+| MINED | 3 | The transaction was successfully executed and successfully packaged into a block. |
+| CONFLICT | 4 | When executed in parallel, there are conflicts with other transactions. |
+| PENDING_VALIDATION | 5 | The transaction is waiting for validation. |
+| NODE_VALIDATION_FAILED | 6 | Transaction validation failed. |
+
+## AuthorityInfo
+
+| Field | Type | Description | Label |
+| ---------------- | ----------------------------- | ----------------------------------------- | ----- |
+| contract_address | `aelf.Address` | The contract address of the controller. | |
+| owner_address | `aelf.Address` | The address of the owner of the contract. | |
diff --git a/docs/docs/smart-contract-api/consensus-contract/index.md b/docs/docs/smart-contract-api/consensus-contract/index.md
new file mode 100644
index 00000000..5b84de16
--- /dev/null
+++ b/docs/docs/smart-contract-api/consensus-contract/index.md
@@ -0,0 +1,726 @@
+---
+sidebar_position: 4
+title: Consensus Contract
+---
+
+# AElf.Contracts.Consensus.AEDPoS
+
+## AEDPoS contract
+
+Used to manage block producers and synchronize data. Implements aelf Standards ACS1, ACS4, ACS6, ACS10, and ACS11.
+
+## Contract Methods
+
+| Method Name | Request Type | Response Type | Description |
+| ---------------------------------- | ------------------------------------------ | --------------------------------- | ------------------------------------------------------------------------ |
+| InitialAElfConsensusContract | `AEDPoS.InitialAElfConsensusContractInput` | `google.protobuf.Empty` | Initialize the consensus contract. |
+| FirstRound | `AEDPoS.Round` | `google.protobuf.Empty` | Initializes the consensus information in the first round. |
+| UpdateValue | `AEDPoS.UpdateValueInput` | `google.protobuf.Empty` | Update consensus information. |
+| NextRound | `AEDPoS.NextRoundInput` | `google.protobuf.Empty` | Update consensus information, create a new round. |
+| NextTerm | `AEDPoS.NextTermInput` | `google.protobuf.Empty` | Update consensus information, create a new term. |
+| UpdateTinyBlockInformation | `AEDPoS.TinyBlockInput` | `google.protobuf.Empty` | Update consensus tiny block information. |
+| SetMaximumMinersCount | `google.protobuf.Int32Value` | `google.protobuf.Empty` | Set the maximum count of miners, by default, is unlimited. |
+| ChangeMaximumMinersCountController | `AuthorityInfo` | `google.protobuf.Empty` | Change the authority information for maximum miners count. |
+| RecordCandidateReplacement | `AEDPoS.RecordCandidateReplacementInput` | `google.protobuf.Empty` | Notify AEDPoS Contract of candidate replacement. |
+| GetCurrentMinerList | `google.protobuf.Empty` | `AEDPoS.MinerList` | Get the list of current miners. |
+| GetCurrentMinerPubkeyList | `google.protobuf.Empty` | `AEDPoS.PubkeyList` | Get the list of current miners in hexadecimal format. |
+| GetCurrentMinerListWithRoundNumber | `google.protobuf.Empty` | `AEDPoS.MinerListWithRoundNumber` | Get the list of current miners and current round number. |
+| GetRoundInformation | `google.protobuf.Int64Value` | `AEDPoS.Round` | Get information of the round according to round number. |
+| GetCurrentRoundNumber | `google.protobuf.Empty` | `google.protobuf.Int64Value` | Get the current round number. |
+| GetCurrentRoundInformation | `google.protobuf.Empty` | `AEDPoS.Round` | Get the current round information. |
+| GetPreviousRoundInformation | `google.protobuf.Empty` | `AEDPoS.Round` | Get the previous round information. |
+| GetCurrentTermNumber | `google.protobuf.Empty` | `google.protobuf.Int64Value` | Get the current term number. |
+| GetCurrentTermMiningReward | `google.protobuf.Empty` | `google.protobuf.Int64Value` | Get the welfare reward for the current term. |
+| GetMinerList | `AEDPoS.GetMinerListInput` | `AEDPoS.MinerList` | Get the list of miners according to term number. |
+| GetPreviousMinerList | `google.protobuf.Empty` | `AEDPoS.MinerList` | Get the list of miners in the previous term. |
+| GetMinedBlocksOfPreviousTerm | `google.protobuf.Empty` | `google.protobuf.Int64Value` | Get the amount of mined blocks in the previous term. |
+| GetNextMinerPubkey | `google.protobuf.Empty` | `google.protobuf.StringValue` | Get the miner that produces the next block. |
+| IsCurrentMiner | `aelf.Address` | `google.protobuf.BoolValue` | Check if the account address is on the miner list for the current round. |
+| GetNextElectCountDown | `google.protobuf.Empty` | `google.protobuf.Int64Value` | Get the left time before the next election takes effect (seconds). |
+| GetPreviousTermInformation | `google.protobuf.Int64Value` | `AEDPoS.Round` | Get term information according to term number. |
+| GetRandomHash | `google.protobuf.Int64Value` | `aelf.Hash` | Get random hash (Compatibility note). |
+| GetMaximumBlocksCount | `google.protobuf.Empty` | `google.protobuf.Int32Value` | Get the maximum of tiny blocks produced by a miner each round. |
+| GetMaximumMinersCount | `google.protobuf.Empty` | `google.protobuf.Int32Value` | Get the maximum count of miners. |
+| GetMaximumMinersCountController | `google.protobuf.Empty` | `AuthorityInfo` | Get the authority information for maximum miners count. |
+| GetMainChainCurrentMinerList | `google.protobuf.Empty` | `AEDPoS.MinerList` | Get the list of miners in the main chain. |
+| GetPreviousTermMinerPubkeyList | `google.protobuf.Empty` | `AEDPoS.PubkeyList` | Get the list of miners in the previous term. |
+| GetCurrentMiningRewardPerBlock | `google.protobuf.Empty` | `google.protobuf.Int64Value` | Query the current mining reward for each block. |
+| SetMinerIncreaseInterval | `google.protobuf.Int64Value` | `google.protobuf.Empty` | Set the current miner growth time interval. |
+| GetMinerIncreaseInterval | `google.protobuf.Empty` | `google.protobuf.Int64Value` | Get the current miner growth time interval. |
+
+# AElf.Standards.ACS1
+
+## ACS1 Standard Methods
+
+| Method Name | Request Type | Response Type | Description |
+| ------------------------- | ----------------------------- | ----------------------- | --------------------------------------------- |
+| SetMethodFee | `acs1.MethodFees` | `google.protobuf.Empty` | Set the method fees for the specified method. |
+| ChangeMethodFeeController | `AuthorityInfo` | `google.protobuf.Empty` | Change the method fee controller. |
+| GetMethodFee | `google.protobuf.StringValue` | `acs1.MethodFees` | Query method fee information by method name. |
+| GetMethodFeeController | `google.protobuf.Empty` | `AuthorityInfo` | Query the method fee controller. |
+
+## AElf.Contracts.Consensus.AEDPoS
+
+## AEDPoS contract
+
+Used for managing block producers and synchronizing data.
+
+Implement aelf Standards ACS1, ACS4, ACS6, ACS10, and ACS11.
+
+### Contract Methods
+
+| Method Name | Request Type | Response Type | Description |
+| ---------------------------------- | ------------------------------------------ | --------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
+| InitialAElfConsensusContract | `AEDPoS.InitialAElfConsensusContractInput` | `google.protobuf.Empty` | Initialize the consensus contract. |
+| FirstRound | `AEDPoS.Round` | `google.protobuf.Empty` | Initializes the consensus information in the first round. |
+| UpdateValue | `AEDPoS.UpdateValueInput` | `google.protobuf.Empty` | Update consensus information. |
+| NextRound | `AEDPoS.NextRoundInput` | `google.protobuf.Empty` | Update consensus information, create a new round. |
+| NextTerm | `AEDPoS.NextTermInput` | `google.protobuf.Empty` | Update consensus information, create a new term. |
+| UpdateTinyBlockInformation | `AEDPoS.TinyBlockInput` | `google.protobuf.Empty` | Update consensus tiny block information. |
+| SetMaximumMinersCount | `google.protobuf.Int32Value` | `google.protobuf.Empty` | Set the maximum count of miners, by default, is unlimited. If you want to control the count of miners, you need to set it through parliament. |
+| ChangeMaximumMinersCountController | `AuthorityInfo` | `google.protobuf.Empty` | The authority information for SetMaximumMinersCount, by default, is governed by parliament. |
+| RecordCandidateReplacement | `AEDPoS.RecordCandidateReplacementInput` | `google.protobuf.Empty` | Election Contract can notify AEDPoS Contract to aware candidate replacement happened. |
+| GetCurrentMinerList | `google.protobuf.Empty` | `AEDPoS.MinerList` | Get the list of current miners. |
+| GetCurrentMinerPubkeyList | `google.protobuf.Empty` | `AEDPoS.PubkeyList` | Get the list of current miners (hexadecimal format). |
+| GetCurrentMinerListWithRoundNumber | `google.protobuf.Empty` | `AEDPoS.MinerListWithRoundNumber` | Get the list of current miners and current round number. |
+| GetRoundInformation | `google.protobuf.Int64Value` | `AEDPoS.Round` | Get information of the round according to round number. |
+| GetCurrentRoundNumber | `google.protobuf.Empty` | `google.protobuf.Int64Value` | Get the current round number. |
+| GetCurrentRoundInformation | `google.protobuf.Empty` | `AEDPoS.Round` | Get the current round information. |
+| GetPreviousRoundInformation | `google.protobuf.Empty` | `AEDPoS.Round` | Get the previous round information. |
+| GetCurrentTermNumber | `google.protobuf.Empty` | `google.protobuf.Int64Value` | Get the current term number. |
+| GetCurrentTermMiningReward | `google.protobuf.Empty` | `google.protobuf.Int64Value` | Get the welfare reward the current term. |
+| GetMinerList | `AEDPoS.GetMinerListInput` | `AEDPoS.MinerList` | Get the list of miners according to term number. |
+| GetPreviousMinerList | `google.protobuf.Empty` | `AEDPoS.MinerList` | Get the list of miner in previous term. |
+| GetMinedBlocksOfPreviousTerm | `google.protobuf.Empty` | `google.protobuf.Int64Value` | Get the amount of mined blocks in previous term. |
+| GetNextMinerPubkey | `google.protobuf.Empty` | `google.protobuf.StringValue` | Get the miner that produces the next block. |
+| IsCurrentMiner | `aelf.Address` | `google.protobuf.BoolValue` | Check to see if the account address is on the miner list for the current round. |
+| GetNextElectCountDown | `google.protobuf.Empty` | `google.protobuf.Int64Value` | Query the left time before the next election takes effects (seconds). |
+| GetPreviousTermInformation | `google.protobuf.Int64Value` | `AEDPoS.Round` | Get term information according term number. |
+| GetRandomHash | `google.protobuf.Int64Value` | `aelf.Hash` | Get random hash (Keep this for compatibility). |
+| GetMaximumBlocksCount | `google.protobuf.Empty` | `google.protobuf.Int32Value` | Get maximum tiny blocks produced by miner each round. |
+| GetMaximumMinersCount | `google.protobuf.Empty` | `google.protobuf.Int32Value` | Get the maximum count of miners. |
+| GetMaximumMinersCountController | `google.protobuf.Empty` | `AuthorityInfo` | The authority information for GetMaximumMinersCount, by default, is governed by parliament. |
+| GetMainChainCurrentMinerList | `google.protobuf.Empty` | `AEDPoS.MinerList` | Get the list of miners in main chain. |
+| GetPreviousTermMinerPubkeyList | `google.protobuf.Empty` | `AEDPoS.PubkeyList` | Get the list of miners in previous term. |
+| GetCurrentMiningRewardPerBlock | `google.protobuf.Empty` | `google.protobuf.Int64Value` | Query the current mining reward for each block. |
+| SetMinerIncreaseInterval | `google.protobuf.Int64Value` | `google.protobuf.Empty` | Set the current miner growth time interval. |
+| GetMinerIncreaseInterval | `google.protobuf.Empty` | `google.protobuf.Int64Value` | Get the current miner growth time interval. |
+
+## AElf.Standards.ACS4
+
+### ACS4 Standard Methods
+
+| Method Name | Request Type | Response Type | Description |
+| -------------------------------- | ---------------------------- | ---------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| GetConsensusCommand | `google.protobuf.BytesValue` | `acs4.ConsensusCommand` | Generate a consensus command based on the consensus contract state and the input public key. |
+| GetConsensusExtraData | `google.protobuf.BytesValue` | `google.protobuf.BytesValue` | Generate consensus extra data when a block is generated. |
+| GenerateConsensusTransactions | `google.protobuf.BytesValue` | `acs4.TransactionList` | Generate consensus system transactions when a block is generated. Each block will contain only one consensus transaction, which is used to write the latest consensus information to the State database. |
+| ValidateConsensusBeforeExecution | `google.protobuf.BytesValue` | `acs4.ValidationResult` | Before executing the block, verify that the consensus information in the block header is correct. |
+| ValidateConsensusAfterExecution | `google.protobuf.BytesValue` | `acs4.ValidationResult` | After executing the block, verify that the state information written to the consensus is correct. |
+
+## AElf.Standards.ACS6
+
+### ACS6 Standard Methods
+
+| Method Name | Request Type | Response Type | Description |
+| -------------- | ---------------------------- | ---------------------------- | -------------------------------------------- |
+| GetRandomBytes | `google.protobuf.BytesValue` | `google.protobuf.BytesValue` | Get random number according to block height. |
+
+## AElf.Standards.ACS10
+
+### ACS10 Standard Methods
+
+| Method Name | Request Type | Response Type | Description |
+| ------------------------- | ---------------------------- | ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| Donate | `acs10.DonateInput` | `google.protobuf.Empty` | Donates tokens from the caller to the treasury. If the tokens are not native tokens in the current chain, they will be first converted to the native token. |
+| Release | `acs10.ReleaseInput` | `google.protobuf.Empty` | Release dividend pool according the period number. |
+| SetSymbolList | `acs10.SymbolList` | `google.protobuf.Empty` | Set the token symbols dividend pool supports. |
+| GetSymbolList | `google.protobuf.Empty` | `acs10.SymbolList` | Query the token symbols dividend pool supports. |
+| GetUndistributedDividends | `google.protobuf.Empty` | `acs10.Dividends` | Query the balance of undistributed tokens whose symbols are included in the symbol list. |
+| GetDividends | `google.protobuf.Int64Value` | `acs10.Dividends` | Query the dividend information according to the height. |
+
+## AElf.Standards.ACS11
+
+### ACS11 Standard Methods
+
+| Method Name | Request Type | Response Type | Description |
+| --------------------------------- | ---------------------------- | ---------------------------- | ----------------------------------------------------------- |
+| UpdateInformationFromCrossChain | `google.protobuf.BytesValue` | `google.protobuf.Empty` | Update the consensus information of the side chain. |
+| GetChainInitializationInformation | `google.protobuf.BytesValue` | `google.protobuf.BytesValue` | Get the current miner list and consensus round information. |
+| CheckCrossChainIndexingPermission | `aelf.Address` | `google.protobuf.BoolValue` | Verify that the input address is the current miner. |
+
+# Contract Types
+
+## AElf.Contracts.Consensus.AEDPoS
+
+### AEDPoS.AElfConsensusHeaderInformation
+
+| Field | Type | Description | Label |
+| ------------- | ------------------------ | --------------------------- | ----- |
+| sender_pubkey | `bytes` | The sender public key. | |
+| round | `Round` | The round information. | |
+| behaviour | `AElfConsensusBehaviour` | The behaviour of consensus. | |
+
+### AEDPoS.AElfConsensusHint
+
+| Field | Type | Description | Label |
+| ----------------- | ------------------------ | --------------------------- | ----- |
+| behaviour | `AElfConsensusBehaviour` | The behaviour of consensus. | |
+| round_id | `int64` | The round id. | |
+| previous_round_id | `int64` | The previous round id. | |
+
+### AEDPoS.AElfConsensusTriggerInformation
+
+| Field | Type | Description | Label |
+| ------------------ | ------------------------ | -------------------------------- | -------- |
+| pubkey | `bytes` | The miner public key. | |
+| in_value | `aelf.Hash` | The InValue for current round. | |
+| previous_in_value | `aelf.Hash` | The InValue for previous round. | |
+| behaviour | `AElfConsensusBehaviour` | The behaviour of consensus. | |
+| encrypted_pieces | `EncryptedPiecesEntry` | The encrypted pieces of InValue. | repeated |
+| decrypted_pieces | `DecryptedPiecesEntry` | The decrypted pieces of InValue. | repeated |
+| revealed_in_values | `RevealedInValuesEntry` | The revealed InValues. | repeated |
+
+### AEDPoS.AElfConsensusTriggerInformation.DecryptedPiecesEntry
+
+| Field | Type | Description | Label |
+| ----- | -------- | ----------- | ----- |
+| key | `string` | | |
+| value | `bytes` | | |
+
+### AEDPoS.AElfConsensusTriggerInformation.EncryptedPiecesEntry
+
+| Field | Type | Description | Label |
+| ----- | -------- | ----------- | ----- |
+| key | `string` | | |
+| value | `bytes` | | |
+
+### AEDPoS.AElfConsensusTriggerInformation.RevealedInValuesEntry
+
+| Field | Type | Description | Label |
+| ----- | ----------- | ----------- | ----- |
+| key | `string` | | |
+| value | `aelf.Hash` | | |
+
+### AEDPoS.Candidates
+
+| Field | Type | Description | Label |
+| ------- | ------- | -------------------------- | -------- |
+| pubkeys | `bytes` | The candidate public keys. | repeated |
+
+### AEDPoS.ConsensusInformation
+
+| Field | Type | Description | Label |
+| ----- | ------- | ----------- | ----- |
+| value | `bytes` | | |
+
+### AEDPoS.GetMinerListInput
+
+| Field | Type | Description | Label |
+| ----------- | ------- | ---------------- | ----- |
+| term_number | `int64` | The term number. | |
+
+### AEDPoS.HashList
+
+| Field | Type | Description | Label |
+| ------ | ----------- | ----------- | -------- |
+| values | `aelf.Hash` | | repeated |
+
+### AEDPoS.InitialAElfConsensusContractInput
+
+| Field | Type | Description | Label |
+| ----------------------- | ------- | ------------------------------------------ | ----- |
+| is_term_stay_one | `bool` | Whether not to change the term. | |
+| is_side_chain | `bool` | Is a side chain. | |
+| period_seconds | `int64` | The number of seconds per term. | |
+| miner_increase_interval | `int64` | The interval second that increases miners. | |
+
+### AEDPoS.IrreversibleBlockFound
+
+| Field | Type | Description | Label |
+| ------------------------- | ------- | ------------------------------------ | ----- |
+| irreversible_block_height | `int64` | The irreversible block height found. | |
+
+### AEDPoS.IrreversibleBlockHeightUnacceptable
+
+| Field | Type | Description | Label |
+| ------------------------------------- | ------- | ------------------------------------------------------ | ----- |
+| distance_to_irreversible_block_height | `int64` | Distance to the height of the last irreversible block. | |
+
+### AEDPoS.LatestPubkeyToTinyBlocksCount
+
+| Field | Type | Description | Label |
+| ------------ | -------- | --------------------------------------- | ----- |
+| pubkey | `string` | The miner public key. | |
+| blocks_count | `int64` | The count of blocks the miner produced. | |
+
+### AEDPoS.MinerInRound
+
+| Field | Type | Description | Label |
+| --------------------------------- | ----------------------------------- | ---------------------------------------------------------------------------------------- | -------- |
+| order | `int32` | The order of the miner producing a block. | |
+| is_extra_block_producer | `bool` | Is the extra block producer in the current round. | |
+| in_value | `aelf.Hash` | Generated by secret sharing and used for validation between miners. | |
+| out_value | `aelf.Hash` | Calculated from the current in value. | |
+| signature | `aelf.Hash` | Calculated from the current in value and signatures of the previous round. | |
+| expected_mining_time | `Timestamp` | The expected mining time. | |
+| produced_blocks | `int64` | The amount of produced blocks. | |
+| missed_time_slots | `int64` | The amount of missed time slots. | |
+| pubkey | `string` | The public key of this miner. | |
+| previous_in_value | `aelf.Hash` | The InValue of the previous round. | |
+| supposed_order_of_next_round | `int32` | The supposed order of mining for the next round. | |
+| final_order_of_next_round | `int32` | The final order of mining for the next round. | |
+| actual_mining_times | `Timestamp` | The actual mining time, miners must fill the actual mining time when they do the mining. | repeated |
+| encrypted_pieces | `MinerInRound.EncryptedPiecesEntry` | The encrypted pieces of InValue. | repeated |
+| decrypted_pieces | `MinerInRound.DecryptedPiecesEntry` | The decrypted pieces of InValue. | repeated |
+| produced_tiny_blocks | `int64` | The amount of produced tiny blocks. | |
+| implied_irreversible_block_height | `int64` | The irreversible block height that the current miner recorded. | |
+
+### AEDPoS.MinerInRound.DecryptedPiecesEntry
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------- | ----- |
+| key | `string ` | | |
+| value | `bytes ` | | |
+
+### AEDPoS.MinerInRound.EncryptedPiecesEntry
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------- | ----- |
+| key | `string ` | | |
+| value | `bytes ` | | |
+
+### AEDPoS.MinerList
+
+| Field | Type | Description | Label |
+| ------- | -------- | --------------------------- | -------- |
+| pubkeys | `bytes ` | The miners public key list. | repeated |
+
+### AEDPoS.MinerListWithRoundNumber
+
+| Field | Type | Description | Label |
+| ------------ | ------------ | ------------------- | ----- |
+| miner_list | `MinerList ` | The list of miners. | |
+| round_number | `int64 ` | The round number. | |
+
+### AEDPoS.MinerReplaced
+
+| Field | Type | Description | Label |
+| ---------------- | --------- | ------------------------- | ----- |
+| new_miner_pubkey | `string ` | The new miner public key. | |
+
+### AEDPoS.MiningInformationUpdated
+
+| Field | Type | Description | Label |
+| ------------------- | ------------------------------ | --------------------------- | ----- |
+| pubkey | `string ` | The miner public key. | |
+| mining_time | `google.protobuf.Timestamp ` | The current block time. | |
+| behaviour | `string ` | The behaviour of consensus. | |
+| block_height | `int64 ` | The current block height. | |
+| previous_block_hash | `aelf.Hash ` | The previous block hash. | |
+
+### AEDPoS.MiningRewardGenerated
+
+| Field | Type | Description | Label |
+| ----------- | -------- | -------------------------------------------------- | ----- |
+| term_number | `int64 ` | The number of term the mining reward is generated. | |
+| amount | `int64 ` | The amount of mining reward. | |
+
+### AEDPoS.PubkeyList
+
+| Field | Type | Description | Label |
+| ------- | --------- | --------------------------- | -------- |
+| pubkeys | `string ` | The miners public key list. | repeated |
+
+### AEDPoS.RandomNumberRequestInformation
+
+| Field | Type | Description | Label |
+| --------------------- | -------- | ------------------------------------------------------ | ----- |
+| target_round_number | `int64 ` | The random hash is likely generated during this round. | |
+| order | `int64 ` | | |
+| expected_block_height | `int64 ` | | |
+
+### AEDPoS.RecordCandidateReplacementInput
+
+| Field | Type | Description | Label |
+| ---------- | --------- | ----------- | ----- |
+| old_pubkey | `string ` | | |
+| new_pubkey | `string ` | | |
+
+### AEDPoS.NextRoundInput
+
+| Field | Type | Description | Label |
+| ----------------------------------------- | --------------------------------------- | ----------------------------------------------------------------------------- | -------- |
+| round_number | `int64 ` | The round number. | |
+| real_time_miners_information | `Round.RealTimeMinersInformationEntry ` | Current miner information, miner public key -> miner information. | repeated |
+| main_chain_miners_round_number | `int64 ` | The round number on the main chain. | |
+| blockchain_age | `int64 ` | The time from chain start to current round (seconds). | |
+| extra_block_producer_of_previous_round | `string ` | The miner public key that produced the extra block in the previous round. | |
+| term_number | `int64 ` | The current term number. | |
+| confirmed_irreversible_block_height | `int64 ` | The height of the confirmed irreversible block. | |
+| confirmed_irreversible_block_round_number | `int64 ` | The round number of the confirmed irreversible block. | |
+| is_miner_list_just_changed | `bool ` | Is miner list different from the the miner list in the previous round. | |
+| round_id_for_validation | `int64 ` | The round id, calculated by summing block producers’ expecting time (second). | |
+| random_number | `bytes ` | The random number. | |
+
+### AEDPoS.NextTermInput
+
+| Field | Type | Description | Label |
+| ----------------------------------------- | --------------------------------------- | ----------------------------------------------------------------------------- | -------- |
+| round_number | `int64 ` | The round number. | |
+| real_time_miners_information | `Round.RealTimeMinersInformationEntry ` | Current miner information, miner public key -> miner information. | repeated |
+| main_chain_miners_round_number | `int64 ` | The round number on the main chain. | |
+| blockchain_age | `int64 ` | The time from chain start to current round (seconds). | |
+| extra_block_producer_of_previous_round | `string ` | The miner public key that produced the extra block in the previous round. | |
+| term_number | `int64 ` | The current term number. | |
+| confirmed_irreversible_block_height | `int64 ` | The height of the confirmed irreversible block. | |
+| confirmed_irreversible_block_round_number | `int64 ` | The round number of the confirmed irreversible block. | |
+| is_miner_list_just_changed | `bool ` | Is miner list different from the the miner list in the previous round. | |
+| round_id_for_validation | `int64 ` | The round id, calculated by summing block producers’ expecting time (second). | |
+| random_number | `bytes ` | The random number. | |
+
+### AEDPoS.Round.RealTimeMinersInformationEntry
+
+| Field | Type | Description | Label |
+| ----- | --------------- | ----------- | ----- |
+| key | `string ` | | |
+| value | `MinerInRound ` | | |
+
+### AEDPoS.SecretSharingInformation
+
+| Field | Type | Description | Label |
+| ----------------- | -------- | ------------------------------- | ----- |
+| previous_round | `Round ` | The previous round information. | |
+| current_round_id | `int64 ` | The current round id. | |
+| previous_round_id | `int64 ` | The previous round id. | |
+
+### AEDPoS.TermInfo
+
+| Field | Type | Description | Label |
+| ------------ | -------- | ----------- | ----- |
+| term_number | `int64 ` | | |
+| round_number | `int64 ` | | |
+
+### AEDPoS.TermNumberLookUp
+
+| Field | Type | Description | Label |
+| ----- | ---------------------------- | ---------------------------- | -------- |
+| map | `TermNumberLookUp.MapEntry ` | Term number -> Round number. | repeated |
+
+
+
+
+### AEDPoS.TermNumberLookUp.MapEntry
+
+| Field | Type | Description | Label |
+| ----- | -------- | ----------- | ----- |
+| key | `int64 ` | | |
+| value | `int64 ` | | |
+
+### AEDPoS.TinyBlockInput
+
+| Field | Type | Description | Label |
+| ------------------ | ------------------------------ | ------------------------- | ----- |
+| round_id | `int64 ` | The round id. | |
+| actual_mining_time | `google.protobuf.Timestamp ` | The actual mining time. | |
+| produced_blocks | `int64 ` | Count of blocks produced. | |
+
+### AEDPoS.UpdateValueInput
+
+| Field | Type | Description | Label |
+| --------------------------------- | ----------------------------------------------- | ---------------------------------------------------------------------------------------- | -------- |
+| out_value | `aelf.Hash ` | Calculated from current in value. | |
+| signature | `aelf.Hash ` | Calculated from current in value and signatures of previous round. | |
+| round_id | `int64 ` | To ensure the values to update will apply to the correct round by comparing round id. | |
+| previous_in_value | `aelf.Hash ` | Publishes previous in value for validation of previous signature and previous out value. | |
+| actual_mining_time | `google.protobuf.Timestamp ` | The actual mining time; miners must fill actual mining time when they mine. | |
+| supposed_order_of_next_round | `int32 ` | The supposed order of mining for the next round. | |
+| tune_order_information | `UpdateValueInput.TuneOrderInformationEntry ` | The tuning order of mining for the next round, miner public key -> order. | repeated |
+| encrypted_pieces | `UpdateValueInput.EncryptedPiecesEntry ` | The encrypted pieces of InValue. | repeated |
+| decrypted_pieces | `UpdateValueInput.DecryptedPiecesEntry ` | The decrypted pieces of InValue. | repeated |
+| produced_blocks | `int64 ` | The amount of produced blocks. | |
+| miners_previous_in_values | `UpdateValueInput.MinersPreviousInValuesEntry ` | The InValue in the previous round, miner public key -> InValue. | repeated |
+| implied_irreversible_block_height | `int64 ` | The irreversible block height that the miner recorded. | |
+
+### AEDPoS.UpdateValueInput.DecryptedPiecesEntry
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------- | ----- |
+| key | `string ` | | |
+| value | `bytes ` | | |
+
+### AEDPoS.UpdateValueInput.EncryptedPiecesEntry
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------- | ----- |
+| key | `string ` | | |
+| value | `bytes ` | | |
+
+### AEDPoS.UpdateValueInput.MinersPreviousInValuesEntr
+
+| Field | Type | Description | Label |
+| ----- | -------------- | ----------- | ----- |
+| key | `string ` | | |
+| value | `aelf.Hash ` | | |
+
+### AEDPoS.UpdateValueInput.TuneOrderInformationEntry
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------- | ----- |
+| key | `string ` | | |
+| value | `int32 ` | | |
+
+### AEDPoS.VoteMinersCountInput
+
+| Field | Type | Description | Label |
+| ------------ | -------- | ----------- | ----- |
+| miners_count | `int32 ` | | |
+| amount | `int64 ` | | |
+
+### AEDPoS.AElfConsensusBehaviour
+
+| Name | Number | Description |
+| ------------ | ------ | ----------- |
+| UPDATE_VALUE | 0 | |
+| NEXT_ROUND | 1 | |
+| NEXT_TERM | 2 | |
+| NOTHING | 3 | |
+| TINY_BLOCK | 4 | |
+
+## AElf.Standards.ACS1
+
+### acs1.MethodFee
+
+| Field | Type | Description | Label |
+| --------- | --------- | ----------------------------------- | ----- |
+| symbol | `string ` | The token symbol of the method fee. | |
+| basic_fee | `int64 ` | The amount of fees to be charged. | |
+
+### acs1.MethodFees
+
+| Field | Type | Description | Label |
+| ---------------- | -------------- | ------------------------------------------------------------ | -------- |
+| method_name | `string ` | The name of the method to be charged. | |
+| fees | `MethodFee ` | List of fees to be charged. | repeated |
+| is_size_fee_free | `bool ` | Optional based on the implementation of SetMethodFee method. | |
+
+## AElf.Standards.ACS4
+
+### acs4.ConsensusCommand
+
+| Field | Type | Description | Label |
+| ---------------------------------- | ------------------------------ | ------------------------------------------------------------------------------------------ | ----- |
+| limit_milliseconds_of_mining_block | `int32 ` | Time limit of mining next block. | |
+| hint | `bytes ` | Context of Hint is diverse according to the consensus protocol we choose, so we use bytes. | |
+| arranged_mining_time | `google.protobuf.Timestamp ` | The time of arrange mining. | |
+| mining_due_time | `google.protobuf.Timestamp ` | The expiration time of mining. | |
+
+### acs4.TransactionList
+
+| Field | Type | Description | Label |
+| ------------ | --------------------- | ------------------------------ | -------- |
+| transactions | `aelf.Transaction ` | Consensus system transactions. | repeated |
+
+### acs4.ValidationResult
+
+| Field | Type | Description | Label |
+| ------------- | --------- | -------------------------------- | ----- |
+| success | `bool ` | Is successful. | |
+| message | `string ` | The error message. | |
+| is_re_trigger | `bool ` | Whether to trigger mining again. | |
+
+## AElf.Standards.ACS10
+
+### acs10.Dividends
+
+| Field | Type | Description | Label |
+| ----- | ------------------------- | -------------------------------- | -------- |
+| value | `Dividends.ValueEntry ` | The dividends, symbol -> amount. | repeated |
+
+### acs10.Dividends.ValueEntry
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------- | ----- |
+| key | `string ` | | |
+| value | `int64 ` | | |
+
+### acs10.DonateInput
+
+| Field | Type | Description | Label |
+| ------ | --------- | --------------------------- | ----- |
+| symbol | `string ` | The token symbol to donate. | |
+| amount | `int64 ` | The amount to donate. | |
+
+### acs10.DonationReceived
+
+| Field | Type | Description | Label |
+| ------------- | --------------- | ----------------------------- | ----- |
+| from | `aelf.Address ` | The address of donors. | |
+| pool_contract | `aelf.Address ` | The address of dividend pool. | |
+| symbol | `string ` | The token symbol Donated. | |
+| amount | `int64 ` | The amount Donated. | |
+
+### acs10.ReleaseInput
+
+| Field | Type | Description | Label |
+| ------------- | -------- | ----------------------------- | ----- |
+| period_number | `int64 ` | The period number to release. | |
+
+### acs10.SymbolList
+
+| Field | Type | Description | Label |
+| ----- | --------- | ---------------------- | -------- |
+| value | `string ` | The token symbol list. | repeated |
+
+## AElf.Standards.ACS11
+**AElf.Types**
+
+### aelf.Address
+
+| Field | Type | Description | Label |
+| ----- | -------- | ----------- | ----- |
+| value | `bytes ` | | |
+
+### aelf.BinaryMerkleTree
+
+| Field | Type | Description | Label |
+| ---------- | --------- | ----------------------- | -------- |
+| nodes | `Hash ` | The leaf nodes. | repeated |
+| root | `Hash ` | The root node hash. | |
+| leaf_count | `int32 ` | The count of leaf node. | |
+
+### aelf.Hash
+
+| Field | Type | Description | Label |
+| ----- | -------- | ----------- | ----- |
+| value | `bytes ` | | |
+
+### aelf.LogEvent
+
+| Field | Type | Description | Label |
+| ----------- | ---------- | -------------------------- | -------- |
+| address | `Address ` | The contract address. | |
+| name | `string ` | The name of the log event. | |
+| indexed | `bytes ` | The indexed data. | repeated |
+| non_indexed | `bytes ` | The non indexed data. | |
+
+### aelf.MerklePath
+
+| Field | Type | Description | Label |
+| ----------------- | ---------------- | ---------------------- | -------- |
+| merkle_path_nodes | `MerklePathNode` | The merkle path nodes. | repeated |
+
+### aelf.MerklePathNode
+
+| Field | Type | Description | Label |
+| ------------------ | ------- | -------------------------------- | ----- |
+| hash | `Hash ` | The node hash. | |
+| is_left_child_node | `bool ` | Whether it is a left child node. | |
+
+### aelf.SInt32Value
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------- | ----- |
+| value | `sint32 ` | | |
+
+### aelf.SInt64Value
+
+| Field | Type | Description | Label |
+| ----- | -------- | ----------- | ----- |
+| value | `sint64` | | |
+
+### aelf.ScopedStatePath
+
+| Field | Type | Description | Label |
+| ------- | ----------- | ------------------------------------------------------ | ----- |
+| address | `Address ` | The scope address, which will be the contract address. | |
+| path | `StatePath` | The path of contract state. | |
+
+### aelf.SmartContractRegistration
+
+| Field | Type | Description | Label |
+| ------------------ | --------- | -------------------------------------- | ----- |
+| category | `sint32 ` | The category of contract code (0: C#). | |
+| code | `bytes ` | The byte array of the contract code. | |
+| code_hash | `Hash ` | The hash of the contract code. | |
+| is_system_contract | `bool ` | Whether it is a system contract. | |
+| version | `int32 ` | The version of the current contract. | |
+
+### aelf.StatePath
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------------------------------- | -------- |
+| parts | `string ` | The partial path of the state path. | repeated |
+
+### aelf.Transaction
+
+| Field | Type | Description | Label |
+| ---------------- | ---------- | ------------------------------------------------------------------ | ----- |
+| from | `Address ` | The address of the sender of the transaction. | |
+| to | `Address ` | The address of the contract when calling a contract. | |
+| ref_block_number | `int64 ` | The height of the referenced block hash. | |
+| ref_block_prefix | `bytes ` | The first four bytes of the referenced block hash. | |
+| method_name | `string ` | The name of a method in the smart contract at the To address. | |
+| params | `bytes ` | The parameters to pass to the smart contract method. | |
+| signature | `bytes ` | When signing a transaction it’s actually a subset of the fields... | |
+
+### aelf.TransactionExecutingStateSet
+
+| Field | Type | Description | Label |
+| ------- | -------------------------------------------- | ------------------- | -------- |
+| writes | `TransactionExecutingStateSet.WritesEntry ` | The changed states. | repeated |
+| reads | `TransactionExecutingStateSet.ReadsEntry ` | The read states. | repeated |
+| deletes | `TransactionExecutingStateSet.DeletesEntry ` | The deleted states. | repeated |
+
+### aelf.TransactionExecutingStateSet.DeletesEntry
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------- | ----- |
+| key | `string ` | | |
+| value | `bool ` | | |
+
+### aelf.TransactionExecutingStateSet.ReadsEntry
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------- | ----- |
+| key | `string ` | | |
+| value | `bool ` | | |
+
+### aelf.TransactionExecutingStateSet.WritesEntry
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------- | ----- |
+| key | `string ` | | |
+| value | `bytes ` | | |
+
+### aelf.TransactionResult
+
+| Field | Type | Description | Label |
+| -------------- | ------------------------- | ------------------------------------------------------ | -------- |
+| transaction_id | `Hash ` | The transaction id. | |
+| status | `TransactionResultStatus` | The transaction result status. | |
+| logs | `LogEvent ` | The log events. | repeated |
+| bloom | `bytes ` | Bloom filter for transaction logs. | |
+| return_value | `bytes ` | The return value of the transaction execution. | |
+| block_number | `int64 ` | The height of the block that packages the transaction. | |
+| block_hash | `Hash ` | The hash of the block that packages the transaction. | |
+| error | `string ` | Failed execution error message. | |
+
+### aelf.TransactionResultStatus
+
+| Name | Number | Description |
+| ---------------------- | ------ | ------------------------------------------------------------------ |
+| NOT_EXISTED | 0 | The execution result of the transaction does not exist. |
+| PENDING | 1 | The transaction is in the transaction pool waiting to be packaged. |
+| FAILED | 2 | Transaction execution failed. |
+| MINED | 3 | The transaction was successfully executed and successfully... |
+| CONFLICT | 4 | When executed in parallel, there are conflicts with other... |
+| PENDING_VALIDATION | 5 | The transaction is waiting for validation. |
+| NODE_VALIDATION_FAILED | 6 | Transaction validation failed. |
+
+## AuthorityInfo
+
+| Field | Type | Description | Label |
+| ---------------- | --------------- | ----------------------------------------- | ----- |
+| contract_address | `aelf.Address ` | The contract address of the controller. | |
+| owner_address | `aelf.Address ` | The address of the owner of the contract. | |
diff --git a/docs/docs/smart-contract-api/cross-chain-contract/index.md b/docs/docs/smart-contract-api/cross-chain-contract/index.md
new file mode 100644
index 00000000..ad61dfed
--- /dev/null
+++ b/docs/docs/smart-contract-api/cross-chain-contract/index.md
@@ -0,0 +1,628 @@
+---
+sidebar_position: 9
+title: Cross Chain Contract
+---
+
+
+# Cross-Chain contract.
+
+Implement aelf Standards ACS1 and ACS7.
+
+## Contract Methods
+
+| Method Name | Request Type | Response Type | Description |
+| -------------------------------------------- | ------------------------------------------------------ | -------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
+| Initialize | `CrossChain.InitializeInput` | `google.protobuf.Empty` | Propose once cross chain indexing. |
+| SetInitialSideChainLifetimeControllerAddress | `aelf.Address` | `google.protobuf.Empty` | Set the initial SideChainLifetimeController address which should be parliament organization by default. |
+| SetInitialIndexingControllerAddress | `aelf.Address` | `google.protobuf.Empty` | Set the initial CrossChainIndexingController address which should be parliament organization by default. |
+| ChangeCrossChainIndexingController | `AuthorityInfo` | `google.protobuf.Empty` | Change the cross chain indexing controller. |
+| ChangeSideChainLifetimeController | `AuthorityInfo` | `google.protobuf.Empty` | Change the lifetime controller of the side chain. |
+| ChangeSideChainIndexingFeeController | `CrossChain.ChangeSideChainIndexingFeeControllerInput` | `google.protobuf.Empty` | Change indexing fee adjustment controller for specific side chain. |
+| AcceptCrossChainIndexingProposal | `CrossChain.AcceptCrossChainIndexingProposalInput` | `google.protobuf.Empty` | When the indexing proposal is released, clean up the pending proposal. |
+| GetSideChainCreator | `google.protobuf.Int32Value` | `aelf.Address` | Get the side chain creator address according to side chain id. |
+| GetChainStatus | `google.protobuf.Int32Value` | `CrossChain.GetChainStatusOutput` | Get the current status of side chain according to side chain id. |
+| GetSideChainHeight | `google.protobuf.Int32Value` | `google.protobuf.Int64Value` | Get the side chain height according to side chain id. |
+| GetParentChainHeight | `google.protobuf.Empty` | `google.protobuf.Int64Value` | Get the height of parent chain. |
+| GetParentChainId | `google.protobuf.Empty` | `google.protobuf.Int32Value` | Get the chain id of parent chain. |
+| GetSideChainBalance | `google.protobuf.Int32Value` | `google.protobuf.Int64Value` | Get the balance of side chain indexing according to side chain id. |
+| GetSideChainIndexingFeeDebt | `google.protobuf.Int32Value` | `google.protobuf.Int64Value` | Get the fee debt of side chain indexing according to side chain id. |
+| GetIndexingProposalStatus | `google.protobuf.Empty` | `CrossChain.GetIndexingProposalStatusOutput` | Get the status of the current indexing proposal. |
+| GetSideChainIndexingFeePrice | `google.protobuf.Int32Value` | `google.protobuf.Int64Value` | Get the side chain indexing fee price according to side chain id. |
+| GetSideChainLifetimeController | `google.protobuf.Empty` | `AuthorityInfo` | Get the lifetime controller of the side chain. |
+| GetCrossChainIndexingController | `google.protobuf.Empty` | `AuthorityInfo` | Get the cross chain indexing controller. |
+| GetSideChainIndexingFeeController | `google.protobuf.Int32Value` | `AuthorityInfo` | Get the indexing fee controller of side chain according to side chain id. |
+
+## AElf.Standards.ACS1
+
+| Method Name | Request Type | Response Type | Description |
+| ------------------------- | ----------------------------- | ----------------------- | -------------------------------------------------------------------------------------------------- |
+| SetMethodFee | `acs1.MethodFees` | `google.protobuf.Empty` | Set the method fees for the specified method. Note that this will override all fees of the method. |
+| ChangeMethodFeeController | `AuthorityInfo` | `google.protobuf.Empty` | Change the method fee controller, the default is parliament and default organization. |
+| GetMethodFee | `google.protobuf.StringValue` | `acs1.MethodFees` | Query method fee information by method name. |
+| GetMethodFeeController | `google.protobuf.Empty` | `AuthorityInfo` | Query the method fee controller. |
+
+## AElf.Standards.ACS7
+
+| Method Name | Request Type | Response Type | Description |
+| ---------------------------------------------- | --------------------------------------------- | --------------------------------------- | -------------------------------------------------------------------------------------------------------- |
+| ProposeCrossChainIndexing | `acs7.CrossChainBlockData` | `google.protobuf.Empty` | Propose once cross chain indexing. |
+| ReleaseCrossChainIndexingProposal | `acs7.ReleaseCrossChainIndexingProposalInput` | `google.protobuf.Empty` | Release the proposed indexing if already approved. |
+| RequestSideChainCreation | `acs7.SideChainCreationRequest` | `google.protobuf.Empty` | Request side chain creation. |
+| ReleaseSideChainCreation | `acs7.ReleaseSideChainCreationInput` | `google.protobuf.Empty` | Release the side chain creation request if already approved and it will call the method CreateSideChain. |
+| CreateSideChain | `acs7.CreateSideChainInput` | `google.protobuf.Int32Value` | Create the side chain and returns the newly created side chain ID. |
+| Recharge | `acs7.RechargeInput` | `google.protobuf.Empty` | Recharge for the specified side chain. |
+| DisposeSideChain | `google.protobuf.Int32Value` | `google.protobuf.Int32Value` | Dispose a side chain according to side chain id. |
+| AdjustIndexingFeePrice | `acs7.AdjustIndexingFeeInput` | `google.protobuf.Empty` | Adjust side chain indexing fee. |
+| VerifyTransaction | `acs7.VerifyTransactionInput` | `google.protobuf.BoolValue` | Verify cross chain transaction. |
+| GetSideChainIdAndHeight | `google.protobuf.Empty` | `acs7.ChainIdAndHeightDict` | Gets all the side chain id and height of the current chain. |
+| GetSideChainIndexingInformationList | `google.protobuf.Empty` | `acs7.SideChainIndexingInformationList` | Get indexing information of side chains. |
+| GetAllChainsIdAndHeight | `google.protobuf.Empty` | `acs7.ChainIdAndHeightDict` | Get id and recorded height of all chains. |
+| GetIndexedSideChainBlockDataByHeight | `google.protobuf.Int64Value` | `acs7.IndexedSideChainBlockData` | Get block data of indexed side chain according to height. |
+| GetBoundParentChainHeightAndMerklePathByHeight | `google.protobuf.Int64Value` | `acs7.CrossChainMerkleProofContext` | Get merkle path bound up with side chain according to height. |
+| GetChainInitializationData | `google.protobuf.Int32Value` | `acs7.ChainInitializationData` | Get initialization data for specified side chain. |
+
+**Contract Types**
+## AElf.Contracts.CrossChain
+### CrossChain.AcceptCrossChainIndexingProposalInput
+
+| Field | Type | Description | Label |
+| -------- | ----- | ---------------------------------- | ----- |
+| chain_id | int32 | The chain id of accepted indexing. | |
+
+### CrossChain.ChainIndexingProposal
+
+| Field | Type | Description | Label |
+| ------------------------------- | -------------------------------- | -------------------------------------------- | ----- |
+| proposal_id | aelf.Hash | The id of cross chain indexing proposal. | |
+| proposer | aelf.Address | The proposer of cross chain indexing. | |
+| proposed_cross_chain_block_data | acs7.CrossChainBlockData | The cross chain data proposed. | |
+| status | CrossChainIndexingProposalStatus | The status of cross chain indexing proposal. | |
+| chain_id | int32 | The chain id of the indexing. | |
+
+### CrossChain.ChangeSideChainIndexingFeeControllerInput
+
+| Field | Type | Description | Label |
+| -------------- | ------------- | --------------------------------------- | ----- |
+| chain_id | int32 | The side chain id. | |
+| authority_info | AuthorityInfo | The changed controller of indexing fee. | |
+
+### CrossChain.CrossChainIndexingControllerChanged
+
+| Field | Type | Description | Label |
+| -------------- | ------------- | ----------------------------------- | ----- |
+| authority_info | AuthorityInfo | The changed controller of indexing. | |
+
+### CrossChain.Disposed
+
+| Field | Type | Description | Label |
+| -------- | ----- | --------------------------- | ----- |
+| chain_id | int32 | The disposed side chain id. | |
+
+### CrossChain.GetChainStatusOutput
+
+| Field | Type | Description | Label |
+| ------ | --------------- | ------------------------- | ----- |
+| status | SideChainStatus | The status of side chain. | |
+
+### CrossChain.GetIndexingProposalStatusOutput
+
+| Field | Type | Description | Label |
+| ------------------------------ | ---------------------------------------------------------------- | ----------------------------------------------------------------- | -------- |
+| chain_indexing_proposal_status | GetIndexingProposalStatusOutput.ChainIndexingProposalStatusEntry | The collection of pending indexing proposal, the key is chain id. | repeated |
+
+### CrossChain.GetIndexingProposalStatusOutput.ChainIndexingProposalStatusEntry
+
+| Field | Type | Description | Label |
+| ----- | ---------------------------------- | ----------- | ----- |
+| key | int32 | | |
+| value | PendingChainIndexingProposalStatus | | |
+
+### CrossChain.GetPendingCrossChainIndexingProposalOutput
+
+| Field | Type | Description | Label |
+| ------------------------------- | ------------------------- | ------------------------------------------------------ | ----- |
+| proposal_id | aelf.Hash | The proposal id of cross chain indexing. | |
+| proposer | aelf.Address | The proposer of cross chain indexing proposal. | |
+| to_be_released | bool | True if the proposal can be released, otherwise false. | |
+| proposed_cross_chain_block_data | acs7.CrossChainBlockData | The cross chain data proposed. | |
+| expired_time | google.protobuf.Timestamp | The proposal expiration time. | |
+
+### CrossChain.InitializeInput
+
+| Field | Type | Description | Label |
+| ------------------------------- | ----- | ------------------------------------------------- | ----- |
+| parent_chain_id | int32 | The id of parent chain. | |
+| creation_height_on_parent_chain | int64 | The height of side chain created on parent chain. | |
+| is_privilege_preserved | bool | True if chain privilege needed, otherwise false. | |
+
+### CrossChain.ParentChainIndexed
+
+| Field | Type | Description | Label |
+| -------------- | ----- | ------------------------ | ----- |
+| chain_id | bytes | Indexed parent chain id. | |
+| indexed_height | int64 | Indexed block height. | |
+
+### CrossChain.PendingChainIndexingProposalStatus
+
+| Field | Type | Description | Label |
+| ------------------------------- | ------------------------- | ------------------------------------------------------ | ----- |
+| proposal_id | aelf.Hash | The id of cross chain indexing proposal. | |
+| proposer | aelf.Address | The proposer of cross chain indexing. | |
+| to_be_released | bool | True if the proposal can be released, otherwise false. | |
+| proposed_cross_chain_block_data | acs7.CrossChainBlockData | The cross chain data proposed. | |
+| expired_time | google.protobuf.Timestamp | The proposal expiration time. | |
+
+### CrossChain.ProposedCrossChainIndexing
+
+| Field | Type | Description | Label |
+| ----------------------------------- | ---------------------------------------------------------------- | --------------------------------------------------------------- | -------- |
+| chain_indexing_proposal_collections | ProposedCrossChainIndexing.ChainIndexingProposalCollectionsEntry | The collection of chain indexing proposal, the key is chain id. | repeated |
+
+### CrossChain.ProposedCrossChainIndexing.ChainIndexingProposalCollectionsEntry
+
+| Field | Type | Description | Label |
+| ----- | --------------------- | ----------- | ----- |
+| key | int32 | | |
+| value | ChainIndexingProposal | | |
+
+### CrossChain.SideChainCreatedEvent
+
+| Field | Type | Description | Label |
+| ------- | ------------ | -------------------------------------------------- | ----- |
+| creator | aelf.Address | The proposer who propose to create the side chain. | |
+| chainId | int32 | The created side chain id. | |
+
+### CrossChain.SideChainCreationRequestState
+
+| Field | Type | Description | Label |
+| --------------------------- | ----------------------------- | --------------------------------------------------- | ----- |
+| side_chain_creation_request | acs7.SideChainCreationRequest | The parameters of creating side chain. | |
+| expired_time | google.protobuf.Timestamp | The expiration date of the proposal. | |
+| proposer | aelf.Address | The proposer who proposed to create the side chain. | |
+
+### CrossChain.SideChainIndexed
+
+| Field | Type | Description | Label |
+| -------------- | ----- | ---------------------- | ----- |
+| chain_id | bytes | Indexed side chain id. | |
+| indexed_height | int64 | Indexed block height. | |
+
+### CrossChain.SideChainIndexingFeeControllerChanged
+
+| Field | Type | Description | Label |
+| -------------- | ------------- | -------------------------------------------------- | ----- |
+| chain_id | int32 | The side chain id. | |
+| authority_info | AuthorityInfo | The changed controller of side chain indexing fee. | |
+
+### CrossChain.SideChainInfo
+
+| Field | Type | Description | Label |
+| ------------------------------- | ----------------------------------------- | ---------------------------------------------------- | -------- |
+| proposer | aelf.Address | The proposer who propose to create the side chain. | |
+| side_chain_status | CrossChain.SideChainStatus | The status of side chain. | |
+| side_chain_id | int32 | The side chain id. | |
+| creation_timestamp | google.protobuf.Timestamp | The time of side chain created. | |
+| creation_height_on_parent_chain | int64 | The height of side chain created on parent chain. | |
+| indexing_price | int64 | The price of indexing fee. | |
+| is_privilege_preserved | bool | True if chain privilege needed, otherwise false. | |
+| arrears_info | CrossChain.SideChainInfo.ArrearsInfoEntry | Creditor and amounts for the chain indexing fee debt | repeated |
+| indexing_fee_controller | AuthorityInfo | The controller of indexing fee. | |
+
+### CrossChain.SideChainInfo.ArrearsInfoEntry
+
+| Field | Type | Description | Label |
+| ----- | ------ | ----------- | ----- |
+| key | string | | |
+| value | int64 | | |
+
+### CrossChain.SideChainLifetimeControllerChanged
+
+| Field | Type | Description | Label |
+| -------------- | ------------- | ---------------------------------------------- | ----- |
+| authority_info | AuthorityInfo | The changed controller of side chain lifetime. | |
+
+### CrossChain.CrossChainIndexingProposalStatus
+
+| Name | Number | Description |
+| ------------ | ------ | ------------------------------- |
+| NON_PROPOSED | 0 | |
+| PENDING | 1 | The proposal is pending. |
+| ACCEPTED | 2 | The proposal has been released. |
+
+### CrossChain.SideChainStatus
+
+| Name | Number | Description |
+| ----------------- | ------ | ------------------------------------------- |
+| FATAL | 0 | Currently no meaning. |
+| ACTIVE | 1 | The side chain is being indexed. |
+| INDEXING_FEE_DEBT | 2 | The side chain is in debt for indexing fee. |
+| TERMINATED | 3 | The side chain is disposed. |
+
+## AElf.Standards.ACS1
+
+### acs1.MethodFee
+
+| Field | Type | Description | Label |
+| --------- | ------ | ----------------------------------- | ----- |
+| symbol | string | The token symbol of the method fee. | |
+| basic_fee | int64 | The amount of fees to be charged. | |
+
+### acs1.MethodFees
+
+| Field | Type | Description | Label |
+| ---------------- | -------------- | ------------------------------------------------------------ | -------- |
+| method_name | string | The name of the method to be charged. | |
+| fees | acs1.MethodFee | List of fees to be charged. | repeated |
+| is_size_fee_free | bool | Optional based on the implementation of SetMethodFee method. | |
+
+## AElf.Standards.ACS7
+
+### acs7.AdjustIndexingFeeInput
+
+| Field | Type | Description | Label |
+| ------------- | ----- | ------------------------------ | ----- |
+| side_chain_id | int32 | The side chain id to adjust. | |
+| indexing_fee | int64 | The new price of indexing fee. | |
+
+### acs7.ChainIdAndHeightDict
+
+| Field | Type | Description | Label |
+| -------------- | -------------------------------------- | ------------------------------------------------------------------------------------------------- | -------- |
+| id_height_dict | ChainIdAndHeightDict.IdHeightDictEntry | A collection of chain ids and heights, where the key is the chain id and the value is the height. | repeated |
+
+### acs7.ChainIdAndHeightDict.IdHeightDictEntry
+
+| Field | Type | Description | Label |
+| ----- | ----- | ----------- | ----- |
+| key | int32 | | |
+| value | int64 | | |
+
+### acs7.ChainInitializationConsensusInfo
+
+| Field | Type | Description | Label |
+| ---------------------- | ----- | ----------------------- | ----- |
+| initial_consensus_data | bytes | Initial consensus data. | |
+
+### acs7.ChainInitializationData
+
+| Field | Type | Description | Label |
+| ----------------------------------- | -------------------------------- | ------------------------------------------------------------------------------------------- | ----- |
+| chain_id | int32 | The id of side chain. | |
+| creator | aelf.Address | The side chain creator. | |
+| creation_timestamp | google.protobuf.Timestamp | The timestamp for side chain creation. | |
+| creation_height_on_parent_chain | int64 | The height of side chain creation on parent chain. | |
+| chain_creator_privilege_preserved | bool | Creator privilege boolean flag: True if chain creator privilege preserved, otherwise false. | |
+| parent_chain_token_contract_address | aelf.Address | Parent chain token contract address. | |
+| chain_initialization_consensus_info | ChainInitializationConsensusInfo | Initial consensus information. | |
+| native_token_info_data | bytes | The native token info. | |
+| resource_token_info | ResourceTokenInfo | The resource token information. | |
+| chain_primary_token_info | ChainPrimaryTokenInfo | The chain primary token information. | |
+
+### acs7.ChainPrimaryTokenInfo
+
+| Field | Type | Description | Label |
+| ----------------------------------- | -------------------------- | ------------------------------------------------ | -------- |
+| chain_primary_token_data | bytes | The side chain primary token data. | |
+| side_chain_token_initial_issue_list | SideChainTokenInitialIssue | The side chain primary token initial issue list. | repeated |
+
+### acs7.CreateSideChainInput
+
+| Field | Type | Description | Label |
+| --------------------------- | ------------------------ | --------------------------------------------------- | ----- |
+| side_chain_creation_request | SideChainCreationRequest | The request information of the side chain creation. | |
+| proposer | aelf.Address | The proposer of the side chain creation. | |
+
+### acs7.CrossChainBlockData
+
+| Field | Type | Description | Label |
+| ---------------------------- | -------------------- | ------------------------------------------ | -------- |
+| side_chain_block_data_list | SideChainBlockData | The side chain block data list to index. | repeated |
+| parent_chain_block_data_list | ParentChainBlockData | The parent chain block data list to index. | repeated |
+
+### acs7.CrossChainExtraData
+
+| Field | Type | Description | Label |
+| ----------------------------------- | --------- | ------------------------------------------------------------- | ----- |
+| transaction_status_merkle_tree_root | aelf.Hash | Merkle tree root of side chain block transaction status root. | |
+
+### acs7.CrossChainIndexingDataProposedEvent
+
+| Field | Type | Description | Label |
+| ------------------------- | ------------------- | ---------------------------------------- | ----- |
+| proposed_cross_chain_data | CrossChainBlockData | Proposed cross chain data to be indexed. | |
+| proposal_id | aelf.Hash | The proposal id. | |
+
+### acs7.CrossChainMerkleProofContext
+
+| Field | Type | Description | Label |
+| ----------------------------- | --------------- | ---------------------------------------------------- | ----- |
+| bound_parent_chain_height | int64 | The height of parent chain bound up with side chain. | |
+| merkle_path_from_parent_chain | aelf.MerklePath | The merkle path generated from parent chain. | |
+
+### acs7.IndexedParentChainBlockData
+
+| Field | Type | Description | Label |
+| ---------------------------- | -------------------- | ------------------------------------------------------------- | -------- |
+| local_chain_height | int64 | The height of the local chain when indexing the parent chain. | |
+| parent_chain_block_data_list | ParentChainBlockData | Parent chain block data. | repeated |
+
+### acs7.IndexedSideChainBlockData
+
+| Field | Type | Description | Label |
+| -------------------------- | ------------------ | ---------------------- | -------- |
+| side_chain_block_data_list | SideChainBlockData | Side chain block data. | repeated |
+
+### acs7.ParentChainBlockData
+
+| Field | Type | Description | Label |
+| ----------------------------------- | ------------------------------------------- | ------------------------------------------------------------------------------- | -------- |
+| height | int64 | The height of parent chain. | |
+| cross_chain_extra_data | CrossChainExtraData | The merkle tree root computing from side chain roots. | |
+| chain_id | int32 | The parent chain id. | |
+| transaction_status_merkle_tree_root | aelf.Hash | The merkle tree root computing from transactions status in parent chain block. | |
+| indexed_merkle_path | ParentChainBlockData.IndexedMerklePathEntry | Indexed block height from side chain and merkle path for this side chain block. | repeated |
+| extra_data | ParentChainBlockData.ExtraDataEntry | Extra data map. | repeated |
+
+### acs7.ParentChainBlockData.ExtraDataEntry
+
+| Field | Type | Description | Label |
+| ----- | ------ | ----------- | ----- |
+| key | string | | |
+| value | bytes | | |
+
+### acs7.ParentChainBlockData.IndexedMerklePathEntry
+
+| Field | Type | Description | Label |
+| ----- | ----------------- | ----------- | ----- |
+| key | `int64 ` | | |
+| value | `aelf.MerklePath` | | |
+
+### acs7.RechargeInput
+
+| Field | Type | Description | Label |
+| -------- | -------- | ------------------------- | ----- |
+| chain_id | `int32 ` | The chain id to recharge. | |
+| amount | `int64 ` | The amount to recharge. | |
+
+### acs7.ReleaseCrossChainIndexingProposalInput
+
+| Field | Type | Description | Label |
+| ------------- | -------- | ----------------------------- | -------- |
+| chain_id_list | `int32 ` | List of chain ids to release. | repeated |
+
+### acs7.ReleaseSideChainCreationInput
+
+| Field | Type | Description | Label |
+| ----------- | ------------ | --------------------------------------- | ----- |
+| proposal_id | `aelf.Hash ` | The proposal id of side chain creation. | |
+
+### acs7.ResourceTokenInfo
+
+| Field | Type | Description | Label |
+| ------------------------ | ----------------------------- | ---------------------------------- | -------- |
+| resource_token_list_data | `bytes ` | The resource token information. | |
+| initial_resource_amount | `InitialResourceAmountEntry ` | The initial resource token amount. | repeated |
+
+### acs7.ResourceTokenInfo.InitialResourceAmountEntry
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------- | ----- |
+| key | `string ` | | |
+| value | `int32 ` | | |
+
+### acs7.SideChainBlockData
+
+| Field | Type | Description | Label |
+| ----------------------------------- | ------------ | ---------------------------------------------------------------------------- | ----- |
+| height | `int64 ` | The height of side chain block. | |
+| block_header_hash | `aelf.Hash ` | The hash of side chain block. | |
+| transaction_status_merkle_tree_root | `aelf.Hash ` | The merkle tree root computing from transactions status in side chain block. | |
+| chain_id | `int32 ` | The id of side chain. | |
+
+### acs7.SideChainCreationRequest
+
+| Field | Type | Description | Label |
+| ----------------------------------- | -------------------------------- | ------------------------------------------------------------------------------------------- | -------- |
+| indexing_price | `int64 ` | The cross chain indexing price. | |
+| locked_token_amount | `int64 ` | Initial locked balance for a new side chain. | |
+| is_privilege_preserved | `bool ` | Creator privilege boolean flag: True if chain creator privilege preserved, otherwise false. | |
+| side_chain_token_creation_request | `SideChainTokenCreationRequest ` | Side chain token information. | |
+| side_chain_token_initial_issue_list | `SideChainTokenInitialIssue ` | A list of accounts and amounts that will be issued when the chain starts. | repeated |
+| initial_resource_amount | `InitialResourceAmountEntry ` | The initial rent resources. | repeated |
+
+### acs7.SideChainCreationRequest.InitialResourceAmountEntry
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------- | ----- |
+| key | `string ` | | |
+| value | `int32 ` | | |
+
+### acs7.SideChainIndexingInformation
+
+| Field | Type | Description | Label |
+| -------------- | -------- | ------------------- | ----- |
+| chain_id | `int32 ` | The side chain id. | |
+| indexed_height | `int64 ` | The indexed height. | |
+
+### acs7.SideChainIndexingInformationList
+
+| Field | Type | Description | Label |
+| ------------------------- | ------------------------------- | ---------------------------------------------------- | -------- |
+| indexing_information_list | `SideChainIndexingInformation ` | A list contains indexing information of side chains. | repeated |
+
+### acs7.SideChainTokenCreationRequest
+
+| Field | Type | Description | Label |
+| ----------------------------- | --------- | -------------------------------------------------- | ----- |
+| side_chain_token_symbol | `string ` | Token symbol of the side chain to be created | |
+| side_chain_token_name | `string ` | Token name of the side chain to be created | |
+| side_chain_token_total_supply | `int64 ` | Token total supply of the side chain to be created | |
+| side_chain_token_decimals | `int32 ` | Token decimals of the side chain to be created | |
+
+### acs7.SideChainTokenInitialIssue
+
+| Field | Type | Description | Label |
+| ------- | --------------- | -------------------------------- | ----- |
+| address | `aelf.Address ` | The account that will be issued. | |
+| amount | `int64 ` | The amount that will be issued. | |
+
+### acs7.VerifyTransactionInput
+
+| Field | Type | Description | Label |
+| ------------------- | ------------------- | ---------------------------------------------------------- | ----- |
+| transaction_id | `aelf.Hash ` | The cross chain transaction id to verify. | |
+| path | `aelf.MerklePath ` | The merkle path of the transaction. | |
+| parent_chain_height | `int64 ` | The height of parent chain that indexing this transaction. | |
+| verified_chain_id | `int32 ` | The chain if to verify. | |
+
+## AElf.Types
+
+### aelf.Address
+
+| Field | Type | Description | Label |
+| ----- | -------- | ----------- | ----- |
+| value | `bytes ` | | |
+
+### aelf.BinaryMerkleTree
+
+| Field | Type | Description | Label |
+| ---------- | -------- | ----------------------- | -------- |
+| nodes | `Hash ` | The leaf nodes. | repeated |
+| root | `Hash ` | The root node hash. | |
+| leaf_count | `int32 ` | The count of leaf node. | |
+
+### aelf.Hash
+
+| Field | Type | Description | Label |
+| ----- | -------- | ----------- | ----- |
+| value | `bytes ` | | |
+
+### aelf.LogEvent
+
+| Field | Type | Description | Label |
+| ----------- | ---------- | ------------------------------------------ | -------- |
+| address | `Address ` | The contract address. | |
+| name | `string ` | The name of the log event. | |
+| indexed | `bytes ` | The indexed data, used to calculate bloom. | repeated |
+| non_indexed | `bytes ` | The non-indexed data. | |
+
+### aelf.MerklePath
+
+| Field | Type | Description | Label |
+| ----------------- | ------------------ | ---------------------- | -------- |
+| merkle_path_nodes | `MerklePathNode ` | The merkle path nodes. | repeated |
+
+### aelf.MerklePathNode
+
+| Field | Type | Description | Label |
+| ------------------ | ------- | -------------------------------- | ----- |
+| hash | `Hash ` | The node hash. | |
+| is_left_child_node | `bool ` | Whether it is a left child node. | |
+
+### aelf.SInt32Value
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------- | ----- |
+| value | `sint32 ` | | |
+
+### aelf.SInt64Value
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------- | ----- |
+| value | `sint64 ` | | |
+
+### aelf.ScopedStatePath
+
+| Field | Type | Description | Label |
+| ------- | ------------ | ------------------------------------------------------ | ----- |
+| address | `Address ` | The scope address, which will be the contract address. | |
+| path | `StatePath ` | The path of contract state. | |
+
+### aelf.SmartContractRegistration
+
+| Field | Type | Description | Label |
+| ------------------ | --------- | -------------------------------------- | ----- |
+| category | `sint32 ` | The category of contract code (0: C#). | |
+| code | `bytes ` | The byte array of the contract code. | |
+| code_hash | `Hash ` | The hash of the contract code. | |
+| is_system_contract | `bool ` | Whether it is a system contract. | |
+| version | `int32 ` | The version of the current contract. | |
+
+### aelf.StatePath
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------------------------------- | -------- |
+| parts | `string ` | The partial path of the state path. | repeated |
+
+### aelf.Transaction
+
+| Field | Type | Description | Label |
+| ---------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----- |
+| from | `Address ` | The address of the sender of the transaction. | |
+| to | `Address ` | The address of the contract when calling a contract. | |
+| ref_block_number | `int64 ` | The height of the referenced block hash. | |
+| ref_block_prefix | `bytes ` | The first four bytes of the referenced block hash. | |
+| method_name | `string ` | The name of a method in the smart contract at the To address. | |
+| params | `bytes ` | The parameters to pass to the smart contract method. | |
+| signature | `bytes ` | When signing a transaction it’s actually a subset of the fields: from/to and the target method as well as the parameter that were given. It also contains the reference block number and prefix. | |
+
+### aelf.TransactionExecutingStateSet
+
+| Field | Type | Description | Label |
+| ------- | -------------------------------------------- | ------------------- | -------- |
+| writes | `TransactionExecutingStateSet.WritesEntry ` | The changed states. | repeated |
+| reads | `TransactionExecutingStateSet.ReadsEntry ` | The read states. | repeated |
+| deletes | `TransactionExecutingStateSet.DeletesEntry ` | The deleted states. | repeated |
+
+### aelf.TransactionExecutingStateSet.DeletesEntry
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------- | ----- |
+| key | `string ` | | |
+| value | `bool ` | | |
+
+### aelf.TransactionExecutingStateSet.ReadsEntry
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------- | ----- |
+| key | `string ` | | |
+| value | `bool ` | | |
+
+### aelf.TransactionExecutingStateSet.WritesEntry
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------- | ----- |
+| key | `string ` | | |
+| value | `bytes ` | | |
+
+### aelf.TransactionResult
+
+| Field | Type | Description | Label |
+| -------------- | -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- |
+| transaction_id | `Hash ` | The transaction id. | |
+| status | `TransactionResultStatus ` | The transaction result status. | |
+| logs | `LogEvent ` | The log events. | repeated |
+| bloom | `bytes ` | Bloom filter for transaction logs. A transaction log event can be defined in the contract and stored in the bloom filter after the transaction is executed. | |
+| return_value | `bytes ` | The return value of the transaction execution. | |
+| block_number | `int64 ` | The height of the block that packages the transaction. | |
+| block_hash | `Hash ` | The hash of the block that packages the transaction. | |
+| error | `string ` | Failed execution error message. | |
+
+### aelf.TransactionResultStatus
+
+| Name | Number | Description |
+| ---------------------- | ------ | --------------------------------------------------------------------------------- |
+| NOT_EXISTED | 0 | The execution result of the transaction does not exist. |
+| PENDING | 1 | The transaction is in the transaction pool waiting to be packaged. |
+| FAILED | 2 | Transaction execution failed. |
+| MINED | 3 | The transaction was successfully executed and successfully packaged into a block. |
+| CONFLICT | 4 | When executed in parallel, there are conflicts with other transactions. |
+| PENDING_VALIDATION | 5 | The transaction is waiting for validation. |
+| NODE_VALIDATION_FAILED | 6 | Transaction validation failed. |
+
+## AuthorityInfo
+
+| Field | Type | Description | Label |
+| ---------------- | --------------- | ----------------------------------------- | ----- |
+| contract_address | `aelf.Address ` | The contract address of the controller. | |
+| owner_address | `aelf.Address ` | The address of the owner of the contract. | |
diff --git a/docs/docs/smart-contract-api/economic-contract/index.md b/docs/docs/smart-contract-api/economic-contract/index.md
new file mode 100644
index 00000000..aa49d748
--- /dev/null
+++ b/docs/docs/smart-contract-api/economic-contract/index.md
@@ -0,0 +1,228 @@
+---
+sidebar_position: 13
+title: Economic Contract
+---
+
+# Economic Contract
+
+The Economic contract establishes the economic system of the aelf. When the blockchain starts to work, this contract will initialize other contracts related to economic activities.
+
+Implements aelf Standards ACS1.
+
+## Contract Methods
+
+| Method Name | Request Type | Response Type | Description |
+| --------------------- | -------------------------------------------------------------------------- | --------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| IssueNativeToken | [Economic.IssueNativeTokenInput](#economicissuenativetokeninput) | [google.protobuf.Empty](#googleprotobufempty) | Only ZeroContract is able to issue the native token. |
+| InitialEconomicSystem | [Economic.InitialEconomicSystemInput](#economicinitialeconomicsysteminput) | [google.protobuf.Empty](#googleprotobufempty) | It will initialize other contracts related to economic activities (For instance, create the native token). This transaction only can be sent once because after the first sending, its state will be set to initialized. |
+
+## AElf.Standards.ACS1
+
+| Method Name | Request Type | Response Type | Description |
+| ------------------------- | --------------------------------------------------------- | --------------------------------------------- | -------------------------------------------------------------------------------------------------- |
+| SetMethodFee | [acs1.MethodFees](#acs1methodfees) | [google.protobuf.Empty](#googleprotobufempty) | Set the method fees for the specified method. Note that this will override all fees of the method. |
+| ChangeMethodFeeController | [AuthorityInfo](#authorityinfo) | [google.protobuf.Empty](#googleprotobufempty) | Change the method fee controller, the default is parliament and default organization. |
+| GetMethodFee | [google.protobuf.StringValue](#googleprotobufstringvalue) | [acs1.MethodFees](#acs1methodfees) | Query method fee information by method name. |
+| GetMethodFeeController | [google.protobuf.Empty](#googleprotobufempty) | [AuthorityInfo](#authorityinfo) | Query the method fee controller. |
+
+**Contract Types**
+
+## AElf.Contracts.Economic
+
+### Economic.InitialEconomicSystemInput
+
+| Field | Type | Description | Label |
+| ------------------------------- | ----------------- | ----------------------------------------------------------------- | ----- |
+| native_token_symbol | `string` | The native token symbol. | |
+| native_token_name | `string` | The native token name. | |
+| native_token_total_supply | `int64 `| The native token total supply. | |
+| native_token_decimals | `int32 ` | The accuracy of the native token. | |
+| is_native_token_burnable | `bool ` | It indicates if the token is burnable. | |
+| mining_reward_total_amount | `int64` | It determines how much native token is used to reward the miners. | |
+| transaction_size_fee_unit_price | `int64` | todo: remove unused fields | |
+
+### Economic.IssueNativeTokenInput
+
+| Field | Type | Description | Label |
+| ------ | ---------------------------- | --------------------------- | ----- |
+| amount | `int64` | The amount of token. | |
+| memo | `string` | The memo. | |
+| to | `aelf.Address` | The recipient of the token. | |
+
+### Economic.IssueResourceTokenInput
+
+| Field | Type | Description | Label |
+| ------ | ---------------------------- | ----------------------------- | ----- |
+| symbol | `string` | The symbol of resource token. | |
+| amount | `int64` | The amount of resource token. | |
+| memo | `string` | The memo. | |
+| to | `aelf.Address` | The recipient of the token. | |
+
+## AElf.Standards.ACS1
+
+### acs1.MethodFee
+
+| Field | Type | Description | Label |
+| --------- | ----------------- | ----------------------------------- | ----- |
+| symbol | `string` | The token symbol of the method fee. | |
+| basic_fee | `int64` | The amount of fees to be charged. | |
+
+### acs1.MethodFees
+
+| Field | Type | Description | Label |
+| ---------------- | --------------------------- | ------------------------------------------------------------ | -------- |
+| method_name | `string` | The name of the method to be charged. | |
+| fees | `MethodFee` | List of fees to be charged. | repeated |
+| is_size_fee_free | `bool` | Optional based on the implementation of SetMethodFee method. | |
+
+## AElf.Types
+
+### aelf.Address
+
+| Field | Type | Description | Label |
+| ----- | --------------- | ----------- | ----- |
+| value | `bytes` | | |
+
+### aelf.BinaryMerkleTree
+
+| Field | Type | Description | Label |
+| ---------- | ----------------- | ----------------------- | -------- |
+| nodes | `Hash` | The leaf nodes. | repeated |
+| root | `Hash` | The root node hash. | |
+| leaf_count | `int32` | The count of leaf node. | |
+
+### aelf.Hash
+
+| Field | Type | Description | Label |
+| ----- | -------- | ----------- | ----- |
+| value | `bytes ` | | |
+
+### aelf.LogEvent
+
+| Field | Type | Description | Label |
+| ----------- | ---------- | ------------------------------------------ | -------- |
+| address | `Address ` | The contract address. | |
+| name | `string ` | The name of the log event. | |
+| indexed | `bytes ` | The indexed data, used to calculate bloom. | repeated |
+| non_indexed | `bytes ` | The non indexed data. | |
+
+### aelf.MerklePath
+
+| Field | Type | Description | Label |
+| ----------------- | ----------------- | ---------------------- | -------- |
+| merkle_path_nodes | `MerklePathNode ` | The merkle path nodes. | repeated |
+
+### aelf.MerklePathNode
+
+| Field | Type | Description | Label |
+| ------------------ | ------- | -------------------------------- | ----- |
+| hash | `Hash ` | The node hash. | |
+| is_left_child_node | `bool ` | Whether it is a left child node. | |
+
+### aelf.SInt32Value
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------- | ----- |
+| value | `sint32 ` | | |
+
+### aelf.SInt64Value
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------- | ----- |
+| value | `sint64 ` | | |
+
+### aelf.ScopedStatePath
+
+| Field | Type | Description | Label |
+| ------- | ------------ | ------------------------------------------------------ | ----- |
+| address | `Address ` | The scope address, which will be the contract address. | |
+| path | `StatePath ` | The path of contract state. | |
+
+### aelf.SmartContractRegistration
+
+| Field | Type | Description | Label |
+| ------------------ | --------- | ------------------------------------- | ----- |
+| category | `sint32 ` | The category of contract code(0: C#). | |
+| code | `bytes ` | The byte array of the contract code. | |
+| code_hash | `Hash ` | The hash of the contract code. | |
+| is_system_contract | `bool ` | Whether it is a system contract. | |
+| version | `int32 ` | The version of the current contract. | |
+
+### aelf.StatePath
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------------------------------- | -------- |
+| parts | `string ` | The partial path of the state path. | repeated |
+
+### aelf.Transaction
+
+| Field | Type | Description | Label |
+| ---------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----- |
+| from | `Address ` | The address of the sender of the transaction. | |
+| to | `Address ` | The address of the contract when calling a contract. | |
+| ref_block_number | `int64 ` | The height of the referenced block hash. | |
+| ref_block_prefix | `bytes ` | The first four bytes of the referenced block hash. | |
+| method_name | `string ` | The name of a method in the smart contract at the To address. | |
+| params | `bytes ` | The parameters to pass to the smart contract method. | |
+| signature | `bytes ` | When signing a transaction it’s actually a subset of the fields: from/to and the target method as well as the parameter that were given. It also contains the reference block number and prefix. | |
+
+### aelf.TransactionExecutingStateSet
+
+| Field | Type | Description | Label |
+| ------- | -------------------------------------------- | ------------------- | -------- |
+| writes | `TransactionExecutingStateSet.WritesEntry ` | The changed states. | repeated |
+| reads | `TransactionExecutingStateSet.ReadsEntry` | The read states. | repeated |
+| deletes | `TransactionExecutingStateSet.DeletesEntry ` | The deleted states. | repeated |
+
+### aelf.TransactionExecutingStateSet.DeletesEntry
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------- | ----- |
+| key | `string ` | | |
+| value | `bool ` | | |
+
+### aelf.TransactionExecutingStateSet.ReadsEntry
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------- | ----- |
+| key | `string ` | | |
+| value | `bool ` | | |
+
+### aelf.TransactionExecutingStateSet.WritesEntry
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------- | ----- |
+| key | `string ` | | |
+| value | `bytes ` | | |
+
+### aelf.TransactionResult
+
+| Field | Type | Description | Label |
+| -------------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------- |
+| transaction_id | `Hash ` | The transaction id. | |
+| status | `TransactionResultStatus ` | The transaction result status. | |
+| logs | `LogEvent ` | The log events. | repeated |
+| bloom | `bytes ` | Bloom filter for transaction logs. A transaction log event can be defined in the contract and stored in the bloom filter after the transaction is executed. Through this filter, we can quickly search for and determine whether a log exists in the transaction result. | |
+| return_value | `bytes ` | The return value of the transaction execution. | |
+| block_number | `int64 ` | The height of the block hat packages the transaction. | |
+| block_hash | `Hash ` | The hash of the block hat packages the transaction. | |
+| error | `string ` | Failed execution error message. | |
+
+### aelf.TransactionResultStatus
+
+| Name | Number | Description |
+| ---------------------- | ------ | --------------------------------------------------------------------------------- |
+| NOT_EXISTED | 0 | The execution result of the transaction does not exist. |
+| PENDING | 1 | The transaction is in the transaction pool waiting to be packaged. |
+| FAILED | 2 | Transaction execution failed. |
+| MINED | 3 | The transaction was successfully executed and successfully packaged into a block. |
+| CONFLICT | 4 | When executed in parallel, there are conflicts with other transactions. |
+| PENDING_VALIDATION | 5 | The transaction is waiting for validation. |
+| NODE_VALIDATION_FAILED | 6 | Transaction validation failed. |
+
+## AuthorityInfo
+
+| Field | Type | Description | Label |
+| ---------------- | --------------- | ----------------------------------------- | ----- |
+| contract_address | `aelf.Address ` | The contract address of the controller. | |
+| owner_address | `aelf.Address ` | The address of the owner of the contract. | |
diff --git a/docs/docs/smart-contract-api/election-contract/index.md b/docs/docs/smart-contract-api/election-contract/index.md
new file mode 100644
index 00000000..b62543c5
--- /dev/null
+++ b/docs/docs/smart-contract-api/election-contract/index.md
@@ -0,0 +1,531 @@
+---
+sidebar_position: 5
+title: Election Contract
+---
+
+# Election contract
+
+Used for voting for Block Producers.Implement aelf Standards ACS1.
+
+## Contract Methods
+
+| Method Name | Request Type | Response Type | Description |
+| ---------------------------------- | -------------------------------------------------- | ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| InitialElectionContract | `Election.InitialElectionContractInput` | `google.protobuf.Empty` | Initialize the election contract. |
+| RegisterElectionVotingEvent | `google.protobuf.Empty` | `google.protobuf.Empty` | Register a new voting item through the vote contract. |
+| TakeSnapshot | `Election.TakeElectionSnapshotInput` | `google.protobuf.Empty` | Take a snapshot according to the term number and distribute profits. |
+| AnnounceElection | `aelf.Address` | `google.protobuf.Empty` | To be a block producer, a user should first register to be a candidate and lock some tokens as a deposit. If the data center is not full, the user will be added automatically and get one weight for sharing a bonus in the future. |
+| QuitElection | `google.protobuf.StringValue` | `google.protobuf.Empty` | A candidate is able to quit the election provided they are not currently elected. If you quit successfully, the candidate will get their locked tokens back and will not receive any more bonus. |
+| Vote | `Election.VoteMinerInput` | `aelf.Hash` | Used for voting for a candidate to be elected. The tokens you vote with will be locked until the end time. According to the number of tokens you voted and their lock time, you can get a corresponding weight for sharing the bonus in the future. Returns the vote id. |
+| ChangeVotingOption | `Election.ChangeVotingOptionInput` | `google.protobuf.Empty` | Before the end time, you are able to change your vote target to other candidates. |
+| Withdraw | `aelf.Hash` | `google.protobuf.Empty` | After the lock time, your locked tokens will be unlocked, and you can withdraw them according to the vote id. |
+| UpdateCandidateInformation | `Election.UpdateCandidateInformationInput` | `google.protobuf.Empty` | Update candidate information by the consensus contract. |
+| UpdateMultipleCandidateInformation | `Election.UpdateMultipleCandidateInformationInput` | `google.protobuf.Empty` | Batch update candidate information by the consensus contract. |
+| UpdateMinersCount | `Election.UpdateMinersCountInput` | `google.protobuf.Empty` | Update the count of miners by the consensus contract. |
+| SetProfitsReceiver | `Election.SetProfitsReceiverInput` | `google.protobuf.Empty` | Set the collect profits receiver address. |
+| SetTreasurySchemeIds | `Election.SetTreasurySchemeIdsInput` | `google.protobuf.Empty` | Set the treasury profit ids. |
+| SetVoteWeightInterest | `Election.VoteWeightInterestList` | `google.protobuf.Empty` | Set the weight of vote interest. |
+| SetVoteWeightProportion | `Election.VoteWeightProportion` | `google.protobuf.Empty` | Set the weight of lock time and votes in the calculation of voting weight. |
+| ChangeVoteWeightInterestController | `AuthorityInfo` | `google.protobuf.Empty` | Change the controller for the weight of vote interest. |
+| ReplaceCandidatePubkey | `Election.ReplaceCandidatePubkeyInput` | `google.protobuf.Empty` | Candidate admin can replace the candidate pubkey with a new pubkey. |
+| SetCandidateAdmin | `Election.SetCandidateAdminInput` | `google.protobuf.Empty` | Set the admin address of the candidate (mostly supply). |
+| GetCandidates | `google.protobuf.Empty` | `Election.PubkeyList` | Get all candidates' public keys. |
+| GetVotedCandidates | `google.protobuf.Empty` | `Election.PubkeyList` | Get all candidates whose number of votes is greater than 0. |
+| |
+| GetCandidateInformation | `google.protobuf.StringValue` | `Election.CandidateInformation` | Get a candidate’s information. |
+| GetVictories | `google.protobuf.Empty` | `Election.PubkeyList` | Get the victories of the latest term. |
+| GetTermSnapshot | `Election.GetTermSnapshotInput` | `Election.TermSnapshot` | Get the snapshot of term according to the term number. |
+| GetMinersCount | `google.protobuf.Empty` | `google.protobuf.Int32Value` | Get the count of miners. |
+| GetElectionResult | `Election.GetElectionResultInput` | `Election.ElectionResult` | Get the election result according to the term id. |
+| GetElectorVote | `google.protobuf.StringValue` | `Election.ElectorVote` | Get the voter information according to the voter public key. |
+| GetElectorVoteWithRecords | `google.protobuf.StringValue` | `Election.ElectorVote` | Gets the voter information including the active voting records (excluding withdrawn voting records). |
+| GetElectorVoteWithAllRecords | `google.protobuf.StringValue` | `Election.ElectorVote` | Gets the voter information including the active and withdrawn voting records. |
+| GetCandidateVote | `google.protobuf.StringValue` | `Election.CandidateVote` | Get voting information for the candidate according to the public key of the candidate. |
+| GetCandidateVoteWithRecords | `google.protobuf.StringValue` | `Election.CandidateVote` | Get voting information for the candidate according to the public key of the candidate. |
+| GetCandidateVoteWithAllRecords | `google.protobuf.StringValue` | `Election.CandidateVote` | Get voting information for the candidate according to the public key of the candidate (including the active and withdrawn voting records). |
+| GetVotersCount | `google.protobuf.Empty` | `google.protobuf.Int64Value` | Get the total number of voters. |
+| GetVotesAmount | `google.protobuf.Empty` | `google.protobuf.Int64Value` | Get the total number of vote tokens. |
+| GetPageableCandidateInformation | `Election.PageInformation` | `Election.GetPageableCandidateInformationOutput` | Get candidate information according to the index and length. |
+| GetMinerElectionVotingItemId | `google.protobuf.Empty` | `aelf.Hash` | Get the voting item id of miner election. |
+| GetDataCenterRankingList | `google.protobuf.Empty` | `Election.DataCenterRankingList` | Get the data center ranking list. |
+| GetVoteWeightSetting | `google.protobuf.Empty` | `Election.VoteWeightInterestList` | Get the weight of vote interest. |
+| GetVoteWeightProportion | `google.protobuf.Empty` | `Election.VoteWeightProportion` | Get the weight of lock time and votes in the calculation of voting weight. |
+| GetCalculateVoteWeight | `Election.VoteInformation` | `google.protobuf.Int64Value` | Used to calculate the bonus weights that users can get by voting. |
+| GetVoteWeightInterestController | `google.protobuf.Empty` | `AuthorityInfo` | Query the controller for the weight of vote interest. |
+| GetMinerReplacementInformation | `Election.GetMinerReplacementInformationInput` | `Election.MinerReplacementInformation` | Inspect the evil nodes included in the specified miners and return to the replacement node. |
+| GetCandidateAdmin | `google.protobuf.StringValue` | `aelf.Address` | Query candidate admin. |
+| GetNewestPubkey | `google.protobuf.StringValue` | `google.protobuf.StringValue` | Query the newest pubkey of an old pubkey. |
+| GetReplacedPubkey | `google.protobuf.StringValue` | `google.protobuf.StringValue` | Query the old pubkey. |
+
+## AElf.Standards.ACS1
+
+| Method Name | Request Type | Response Type | Description |
+| ------------------------- | ----------------------------- | ----------------------- | -------------------------------------------------------------------------------------------------- |
+| SetMethodFee | `acs1.MethodFees` | `google.protobuf.Empty` | Set the method fees for the specified method. Note that this will override all fees of the method. |
+| ChangeMethodFeeController | `AuthorityInfo` | `google.protobuf.Empty` | Change the method fee controller, the default is parliament and default organization. |
+| GetMethodFee | `google.protobuf.StringValue` | `acs1.MethodFees` | Query method fee information by method name. |
+| GetMethodFeeController | `google.protobuf.Empty` | `AuthorityInfo` | Query the method fee controller. |
+
+ **Contract Types**
+
+## AElf.Contracts.Election
+
+### Election.CandidateDetail
+
+| Field | Type | Description | Label |
+| --------------------- | ---------------------- | --------------------------------------------- | ----- |
+| candidate_information | `CandidateInformation` | The candidate information. | |
+| obtained_votes_amount | `int64` | The number of votes a candidate has obtained. | |
+
+### Election.CandidateInformation
+
+| Field | Type | Description | Label |
+| --------------------------- | ----------- | ------------------------------------------------------------------ | -------- |
+| pubkey | `string` | Candidate’s public key. | |
+| terms | `int64` | The number of terms that the candidate is elected. | repeated |
+| produced_blocks | `int64` | The number of blocks the candidate has produced. | |
+| missed_time_slots | `int64` | The time slot for which the candidate failed to produce blocks. | |
+| continual_appointment_count | `int64` | The count of continual appointment. | |
+| announcement_transaction_id | `aelf.Hash` | The transaction id when the candidate announced. | |
+| is_current_candidate | `bool` | Indicate whether the candidate can be elected in the current term. | |
+
+### Election.CandidatePubkeyReplaced
+
+| Field | Type | Description | Label |
+| ---------- | -------- | ----------- | ----- |
+| old_pubkey | `string` | | |
+| new_pubkey | `string` | | |
+
+### Election.CandidateVote
+
+| Field | Type | Description | Label |
+| ------------------------------------ | ---------------------- | ------------------------------------------------- | -------- |
+| obtained_active_voting_record_ids | `aelf.Hash` | The active voting record ids obtained. | repeated |
+| obtained_withdrawn_voting_record_ids | `aelf.Hash` | The active voting record ids that were withdrawn. | repeated |
+| obtained_active_voted_votes_amount | `int64` | The total number of active votes obtained. | |
+| all_obtained_voted_votes_amount | `int64` | The total number of votes obtained. | |
+| obtained_active_voting_records | `ElectionVotingRecord` | The active voting records. | repeated |
+| obtained_withdrawn_votes_records | `ElectionVotingRecord` | The voting records that were withdrawn. | repeated |
+| pubkey | `bytes` | Public key for candidate. | |
+
+### Election.ChangeVotingOptionInput
+
+| Field | Type | Description | Label |
+| ---------------- | ----------- | ----------------------------- | ----- |
+| vote_id | `aelf.Hash` | The vote id to change. | |
+| candidate_pubkey | `string` | The new candidate public key. | |
+
+### Election.DataCenterRankingList
+
+| Field | Type | Description | Label |
+| ------------ | ---------------------------------------- | -------------------------------------------------------------------------------- | -------- |
+| data_centers | `DataCenterRankingList.DataCentersEntry` | The top n \* 5 candidates with vote amount, candidate public key -> vote amount. | repeated |
+
+### Election.DataCenterRankingList.DataCentersEntry
+
+| Field | Type | Description | Label |
+| ----- | -------- | ----------- | ----- |
+| key | `string` | | |
+| value | `int64` | | |
+
+### Election.ElectionResult
+
+| Field | Type | Description | Label |
+| ----------- | ----------------------------- | --------------------------------------------------------------- | -------- |
+| term_number | `int64` | The term number | |
+| results | `ElectionResult.ResultsEntry` | The election result, candidates’ public key -> number of votes. | repeated |
+| is_active | `bool` | Whether an election is currently being held. | |
+
+### Election.ElectionResult.ResultsEntry
+
+| Field | Type | Description | Label |
+| ----- | -------- | ----------- | ----- |
+| key | `string` | | |
+| value | `int64` | | |
+
+### Election.ElectionVotingRecord
+
+| Field | Type | Description | Label |
+| ------------------ | --------------------------- | ----------------------------------------- | ----- |
+| voter | `aelf.Address` | The address of voter. | |
+| candidate | `string` | The public key of candidate. | |
+| amount | `int64` | Amount of voting. | |
+| term_number | `int64` | The term number of voting. | |
+| vote_id | `aelf.Hash` | The vote id. | |
+| lock_time | `int64` | Vote lock time. | |
+| unlock_timestamp | `google.protobuf.Timestamp` | The unlock timestamp. | |
+| withdraw_timestamp | `google.protobuf.Timestamp` | The withdraw timestamp. | |
+| vote_timestamp | `google.protobuf.Timestamp` | The vote timestamp. | |
+| is_withdrawn | `bool` | Indicates if the vote has been withdrawn. | |
+| weight | `int64` | Vote weight for sharing bonus. | |
+| is_change_target | `bool` | Whether vote others. | |
+
+### Election.ElectorVote
+
+| Field | Type | Description | Label |
+| --------------------------- | ---------------------- | -------------------------------------------------------------------- | -------- |
+| active_voting_record_ids | `aelf.Hash` | The active voting record ids. | repeated |
+| withdrawn_voting_record_ids | `aelf.Hash` | The voting record ids that were withdrawn. | repeated |
+| active_voted_votes_amount | `int64` | The total number of active votes. | |
+| all_voted_votes_amount | `int64` | The total number of votes (including the number of votes withdrawn). | |
+| active_voting_records | `ElectionVotingRecord` | The active voting records. | repeated |
+| withdrawn_votes_records | `ElectionVotingRecord` | The voting records that were withdrawn. | repeated |
+| pubkey | `bytes` | Public key for voter. | |
+| address | `aelf.Address` | Address for voter. | |
+
+### Election.EvilMinerDetected
+
+| Field | Type | Description | Label |
+| ------ | -------- | ----------------------------- | ----- |
+| pubkey | `string` | The public key of evil miner. | |
+
+### Election.GetElectionResultInput
+
+| Field | Type | Description | Label |
+| ----------- | ------- | ---------------- | ----- |
+| term_number | `int64` | The term number. | |
+
+### Election.GetMinerReplacementInformationInput
+
+| Field | Type | Description | Label |
+| ------------------ | -------- | ---------------------------------- | -------- |
+| current_miner_list | `string` | The current miner list to inspect. | repeated |
+
+### Election.GetPageableCandidateInformationOutput
+
+| Field | Type | Description | Label |
+| ----- | ----------------- | ------------------------------ | -------- |
+| value | `CandidateDetail` | The details of the candidates. | repeated |
+
+### Election.GetTermSnapshotInput
+
+| Field | Type | Description | Label |
+| ----------- | ------- | ---------------- | ----- |
+| term_number | `int64` | The term number. | |
+
+### Election.InitialElectionContractInput
+
+| Field | Type | Description | Label |
+| ----------------------- | -------- | -------------------------------------------------------- | -------- |
+| minimum_lock_time | `int64` | Minimum number of seconds for locking. | |
+| maximum_lock_time | `int64` | Maximum number of seconds for locking. | |
+| miner_list | `string` | The current miner list. | repeated |
+| time_each_term | `int64` | The number of seconds per term. | |
+| miner_increase_interval | `int64` | The interval second that increases the number of miners. | |
+
+### Election.MinerReplacementInformation
+
+| Field | Type | Description | Label |
+| ----------------------------- | -------- | -------------------------------------- | -------- |
+| alternative_candidate_pubkeys | `string` | The alternative candidate public keys. | repeated |
+| evil_miner_pubkeys | `string` | The evil miner public keys. | repeated |
+
+### Election.PageInformation
+
+| Field | Type | Description | Label |
+| ------ | ------- | ---------------------- | ----- |
+| start | `int32` | The start index. | |
+| length | `int32` | The number of records. | |
+
+### Election.PubkeyList
+
+| Field | Type | Description | Label |
+| ----- | ------- | ----------------------- | -------- |
+| value | `bytes` | Candidates’ public keys | repeated |
+
+### Election.ReplaceCandidatePubkeyInput
+
+| Field | Type | Description | Label |
+| ---------- | -------- | ----------- | ----- |
+| old_pubkey | `string` | | |
+| new_pubkey | `string` | | |
+
+### Election.SetCandidateAdminInput
+
+| Field | Type | Description | Label |
+| ------ | -------------- | ----------- | ----- |
+| pubkey | `string` | | |
+| admin | `aelf.Address` | | |
+
+### Election.SetProfitsReceiverInput
+
+| Field | Type | Description | Label |
+| ------------------------- | -------------- | ----------------------------------------- | ----- |
+| candidate_pubkey | `string` | The candidate's public key. | |
+| profits_receiver_address | `aelf.Address` | The address of profits receiver. | |
+| previous_receiver_address | `aelf.Address` | The previous address of profits receiver. | |
+
+### Election.SetTreasurySchemeIdsInput
+
+| Field | Type | Description | Label |
+| ----------------------- | ----------- | ------------------------------------ | ----- |
+| treasury_hash | `aelf.Hash` | The scheme id of treasury reward. | |
+| welfare_hash | `aelf.Hash` | The scheme id of welfare reward. | |
+| subsidy_hash | `aelf.Hash` | The scheme id of subsidy reward. | |
+| votes_reward_hash | `aelf.Hash` | The scheme id of votes reward. | |
+| re_election_reward_hash | `aelf.Hash` | The scheme id of re-election reward. | |
+
+### Election.TakeElectionSnapshotInput
+
+| Field | Type | Description | Label |
+| ------------ | ------- | ---------------------------------------- | ----- |
+| term_number | `int64` | The term number to take snapshot. | |
+| mined_blocks | `int64` | The number of mined blocks of this term. | |
+| round_number | `int64` | The end round number of this term. | |
+
+### Election.TermSnapshot
+
+| Field | Type | Description | Label |
+| ---------------- | -------------------------------------------------------------- | --------------------------------------------------------------- | -------- |
+| end_round_number | `int64` | The end round number of this term. | |
+| mined_blocks | `int64` | The number of blocks mined in this term. | |
+| election_result | `TermSnapshot.ElectionResultEntry` (key: string, value: int64) | The election result, candidates’ public key -> number of votes. | repeated |
+
+### Election.TermSnapshot.ElectionResultEntry
+
+| Field | Type | Description | Label |
+| ----- | -------- | ----------- | ----- |
+| key | `string` | | |
+| value | `int64` | | |
+
+### Election.UpdateCandidateInformationInput
+
+| Field | Type | Description | Label |
+| -------------------------- | -------- | ------------------------------------------------------- | ----- |
+| pubkey | `string` | The candidate public key. | |
+| recently_produced_blocks | `int64` | The number of blocks recently produced. | |
+| recently_missed_time_slots | `int64` | The number of time slots recently missed. | |
+| is_evil_node | `bool` | Is it an evil node. If true, will remove the candidate. | |
+
+### Election.UpdateMinersCountInput
+
+| Field | Type | Description | Label |
+| ------------ | ------- | ------------------- | ----- |
+| miners_count | `int32` | The count of miner. | |
+
+### Election.UpdateMultipleCandidateInformationInput
+
+| Field | Type | Description | Label |
+| ----- | --------------------------------------------- | ------------------------------------ | -------- |
+| value | `UpdateCandidateInformationInput` (see below) | The candidate information to update. | repeated |
+
+### UpdateCandidateInformationInput
+
+| Field | Type | Description | Label |
+| -------------------------- | -------- | ------------------------------------------------------- | ----- |
+| pubkey | `string` | The candidate public key. | |
+| recently_produced_blocks | `int64` | The number of blocks recently produced. | |
+| recently_missed_time_slots | `int64` | The number of time slots recently missed. | |
+| is_evil_node | `bool` | Is it an evil node. If true, will remove the candidate. | |
+
+### Election.UpdateTermNumberInput
+
+| Field | Type | Description | Label |
+| ----------- | ------- | ---------------- | ----- |
+| term_number | `int64` | The term number. | |
+
+### Election.VoteInformation
+
+| Field | Type | Description | Label |
+| --------- | ------- | ----------------- | ----- |
+| amount | `int64` | Amount of voting. | |
+| lock_time | `int64` | Vote lock time. | |
+
+### Election.VoteMinerInput
+
+| Field | Type | Description | Label |
+| ---------------- | --------------------------- | ------------------------------- | ----- |
+| candidate_pubkey | `string` | The candidate public key. | |
+| amount | `int64` | The amount token to vote. | |
+| end_timestamp | `google.protobuf.Timestamp` | The end timestamp of this vote. | |
+| token | `aelf.Hash` | Used to generate vote id. | |
+
+### Election.VoteWeightInterest
+
+| Field | Type | Description | Label |
+| -------- | ------- | ---------------------- | ----- |
+| day | `int32` | Number of days locked. | |
+| interest | `int32` | Locked interest. | |
+| capital | `int32` | | |
+
+### Election.VoteWeightInterestList
+
+| Field | Type | Description | Label |
+| -------------------------- | -------------------------------- | ---------------------------- | -------- |
+| vote_weight_interest_infos | `VoteWeightInterest` (see above) | The weight of vote interest. | repeated |
+
+### Election.VoteWeightProportion
+
+| Field | Type | Description | Label |
+| ----------------- | ------- | ----------------------------- | ----- |
+| time_proportion | `int32` | The weight of lock time. | |
+| amount_proportion | `int32` | The weight of the votes cast. | |
+
+## AElf.Standards.ACS1
+
+### acs1.MethodFee
+
+| Field | Type | Description | Label |
+| --------- | -------- | ----------------------------------- | ----- |
+| symbol | `string` | The token symbol of the method fee. | |
+| basic_fee | `int64` | The amount of fees to be charged. | |
+
+### acs1.MethodFees
+
+| Field | Type | Description | Label |
+| ---------------- | ----------------------- | ------------------------------------------------------------ | -------- |
+| method_name | `string` | The name of the method to be charged. | |
+| fees | `MethodFee` (see above) | List of fees to be charged. | repeated |
+| is_size_fee_free | `bool` | Optional based on the implementation of SetMethodFee method. | |
+
+## AElf.Types
+
+### aelf.Address
+
+| Field | Type | Description | Label |
+| ----- | ------- | ----------- | ----- |
+| value | `bytes` | | |
+
+### aelf.BinaryMerkleTree
+
+| Field | Type | Description | Label |
+| ---------- | ------------------ | ----------------------- | -------- |
+| nodes | `Hash` (see below) | The leaf nodes. | repeated |
+| root | `Hash` (see below) | The root node hash. | |
+| leaf_count | `int32` | The count of leaf node. | |
+
+### aelf.Hash
+
+| Field | Type | Description | Label |
+| ----- | ------- | ----------- | ----- |
+| value | `bytes` | | |
+
+### aelf.LogEvent
+
+| Field | Type | Description | Label |
+| ----------- | --------------------- | ------------------------------------------ | -------- |
+| address | `Address` (see above) | The contract address. | |
+| name | `string` | The name of the log event. | |
+| indexed | `bytes` (see below) | The indexed data, used to calculate bloom. | repeated |
+| non_indexed | `bytes` | The non indexed data. | |
+
+### aelf.MerklePath
+
+| Field | Type | Description | Label |
+| ----------------- | ---------------------------- | ---------------------- | -------- |
+| merkle_path_nodes | `MerklePathNode` (see below) | The merkle path nodes. | repeated |
+
+### aelf.MerklePathNode
+
+| Field | Type | Description | Label |
+| ------------- | ------ | ----------- | ----- |
+| hash | `Hash` | | |
+| is_left_child | `bool` | | |
+
+### aelf.SInt32Value
+
+| Field | Type | Description | Label |
+| ----- | ---------- | ----------- | ----- |
+| value | `sint32 ` | | |
+
+### aelf.SInt64Value
+
+| Field | Type | Description | Label |
+| ----- | ----------- | ----------- | ----- |
+| value | `sint64 ` | | |
+
+### aelf.ScopedStatePath
+
+| Field | Type | Description | Label |
+| ------- | ------------ | ------------------------------------------------------ | ----- |
+| address | `Address ` | The scope address, which will be the contract address. | |
+| path | `StatePath ` | The path of contract state. | |
+
+### aelf.SmartContractRegistration
+
+| Field | Type | Description | Label |
+| ------------------ | ---------- | ------------------------------------- | ----- |
+| category | `sint32 ` | The category of contract code(0: C#). | |
+| code | `bytes ` | The byte array of the contract code. | |
+| code_hash | `Hash ` | The hash of the contract code. | |
+| is_system_contract | `bool ` | Whether it is a system contract. | |
+| version | `int32 ` | The version of the current contract. | |
+
+### aelf.StatePath
+
+| Field | Type | Description | Label |
+| ----- | ----------- | ----------------------------------- | -------- |
+| parts | `string ` | The partial path of the state path. | repeated |
+
+### aelf.Transaction
+
+| Field | Type | Description | Label |
+| ---------------- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----- |
+| from | `Address ` | The address of the sender of the transaction. | |
+| to | `Address ` | The address of the contract when calling a contract. | |
+| ref_block_number | `int64 ` | The height of the referenced block hash. | |
+| ref_block_prefix | `bytes ` | The first four bytes of the referenced block hash. | |
+| method_name | `string ` | The name of a method in the smart contract at the To address. | |
+| params | `bytes ` | The parameters to pass to the smart contract method. | |
+| signature | `bytes ` | When signing a transaction it’s actually a subset of the fields: from/to and the target method as well as the parameter that were given. It also contains the reference block number and prefix. | |
+
+### aelf.TransactionExecutingStateSet
+
+| Field | Type | Description | Label |
+| ------- | -------------------------------------------- | ------------------- | -------- |
+| writes | `TransactionExecutingStateSet.WritesEntry ` | The changed states. | repeated |
+| reads | `TransactionExecutingStateSet.ReadsEntry` | The read states. | repeated |
+| deletes | `TransactionExecutingStateSet.DeletesEntry ` | The deleted states. | repeated |
+
+### aelf.TransactionExecutingStateSet.DeletesEntry
+
+| Field | Type | Description | Label |
+| ----- | ----------- | ----------- | ----- |
+| key | `string ` | | |
+| value | `bool ` | | |
+
+### aelf.TransactionExecutingStateSet.ReadsEntry
+
+| Field | Type | Description | Label |
+| ----- | ----------- | ----------- | ----- |
+| key | `string ` | | |
+| value | `bool ` | | |
+
+### aelf.TransactionExecutingStateSet.WritesEntry
+
+| Field | Type | Description | Label |
+| ----- | ----------- | ----------- | ----- |
+| key | `string ` | | |
+| value | `bytes ` | | |
+
+### aelf.TransactionResult
+
+| Field | Type | Description | Label |
+| -------------- | -------------------------- | ----------------------------------------------------- | -------- |
+| transaction_id | `Hash ` | The transaction id. | |
+| status | `TransactionResultStatus ` | The transaction result status. | |
+| logs | `LogEvent ` | The log events. | repeated |
+| bloom | `bytes ` | Bloom filter for transaction logs. | |
+| return_value | `bytes ` | The return value of the transaction execution. | |
+| block_number | `int64 ` | The height of the block hat packages the transaction. | |
+| block_hash | `Hash ` | The hash of the block hat packages the transaction. | |
+| error | `string ` | Failed execution error message. | |
+
+### aelf.TransactionResultStatus
+
+| Name | Number | Description |
+| ---------------------- | ------ | --------------------------------------------------------------------------------- |
+| NOT_EXISTED | 0 | The execution result of the transaction does not exist. |
+| PENDING | 1 | The transaction is in the transaction pool waiting to be packaged. |
+| FAILED | 2 | Transaction execution failed. |
+| MINED | 3 | The transaction was successfully executed and successfully packaged into a block. |
+| CONFLICT | 4 | When executed in parallel, there are conflicts with other transactions. |
+| PENDING_VALIDATION | 5 | The transaction is waiting for validation. |
+| NODE_VALIDATION_FAILED | 6 | Transaction validation failed. |
+
+## AuthorityInfo
+
+| Field | Type | Description | Label |
+| ---------------- | ----------------- | ----------------------------------------- | ----- |
+| contract_address | `aelf.Address ` | The contract address of the controller. | |
+| owner_address | `aelf.Address ` | The address of the owner of the contract. | |
diff --git a/docs/docs/smart-contract-api/genesis-contract/index.md b/docs/docs/smart-contract-api/genesis-contract/index.md
new file mode 100644
index 00000000..53b092a7
--- /dev/null
+++ b/docs/docs/smart-contract-api/genesis-contract/index.md
@@ -0,0 +1,429 @@
+---
+sidebar_position: 6
+title: Genesis Contract
+---
+
+# AElf.Contracts.Genesis
+
+Genesis contract. Used to manage the deployment and update of contracts.
+Implement aelf Standards ACS0 and ACS1.
+
+## Contract Methods
+
+| Method Name | Request Type | Response Type | Description |
+| ---------------------------------------------- | --------------------------------------------------- | ----------------------- | ----------------------------------------------------------- |
+| Initialize | `Zero.InitializeInput` | `google.protobuf.Empty` | Initializes the genesis contract. |
+| SetInitialControllerAddress | `aelf.Address` | `google.protobuf.Empty` | Sets the initial controller address. |
+| ChangeContractDeploymentController | `AuthorityInfo` | `google.protobuf.Empty` | Modifies the contract deployment controller authority. |
+| ChangeCodeCheckController | `AuthorityInfo` | `google.protobuf.Empty` | Modifies the contract code check controller authority. |
+| GetContractDeploymentController | `google.protobuf.Empty` | `AuthorityInfo` | Queries the ContractDeploymentController authority info. |
+| GetCodeCheckController | `google.protobuf.Empty` | `AuthorityInfo` | Queries the CodeCheckController authority info. |
+| SetContractProposalExpirationTimePeriod | `Zero.SetContractProposalExpirationTimePeriodInput` | `google.protobuf.Empty` | Sets expiration time for contract proposals. |
+| GetCurrentContractProposalExpirationTimePeriod | `google.protobuf.Empty` | `int32` | Gets the expiration time for the current contract proposal. |
+
+## AElf.Standards.ACS0
+
+### Contract Methods
+
+| Method Name | Request Type | Response Type | Description |
+| -------------------------------------- | ----------------------------------------- | ------------------------------------ | --------------------------------------------------------- |
+| DeploySystemSmartContract | `acs0.SystemContractDeploymentInput` | `aelf.Address` | Deploys a system smart contract and returns the address. |
+| DeploySmartContract | `acs0.ContractDeploymentInput` | `aelf.Address` | Deploys a smart contract and returns the address. |
+| UpdateSmartContract | `acs0.ContractUpdateInput` | `aelf.Address` | Updates a smart contract on chain. |
+| ProposeNewContract | `acs0.ContractDeploymentInput` | `aelf.Hash` | Creates a proposal to deploy a new contract. |
+| ProposeContractCodeCheck | `acs0.ContractCodeCheckInput` | `aelf.Hash` | Creates a proposal to check the code of a contract. |
+| ProposeUpdateContract | `acs0.ContractUpdateInput` | `aelf.Hash` | Creates a proposal to update a contract. |
+| ReleaseApprovedContract | `acs0.ReleaseContractInput` | `google.protobuf.Empty` | Releases an approved contract proposal. |
+| ReleaseCodeCheckedContract | `acs0.ReleaseContractInput` | `google.protobuf.Empty` | Releases a code-checked contract proposal. |
+| ValidateSystemContractAddress | `acs0.ValidateSystemContractAddressInput` | `google.protobuf.Empty` | Validates the existence of an input system contract. |
+| SetContractProposerRequiredState | `google.protobuf.BoolValue` | `google.protobuf.Empty` | Sets authority of contract deployment. |
+| CurrentContractSerialNumber | `google.protobuf.Empty` | `google.protobuf.Int64Value` | Gets the current serial number of the genesis contract. |
+| GetContractInfo | `aelf.Address` | `acs0.ContractInfo` | Gets detailed information about a contract. |
+| GetContractAuthor | `aelf.Address` | `aelf.Address` | Gets the author of a contract. |
+| GetContractHash | `aelf.Address` | `aelf.Hash` | Gets the code hash of a contract. |
+| GetContractAddressByName | `aelf.Hash` | `aelf.Address` | Gets the address of a system contract by its name. |
+| GetSmartContractRegistrationByAddress | `aelf.Address` | `aelf.SmartContractRegistration` | Gets the registration of a smart contract by its address. |
+| GetSmartContractRegistrationByCodeHash | `aelf.Hash` | `aelf.SmartContractRegistration` | Gets the registration of a smart contract by code hash. |
+| DeployUserSmartContract | `acs0.UserContractDeploymentInput` | `acs0.DeployUserSmartContractOutput` | Deploys a user smart contract and returns the code hash. |
+| UpdateUserSmartContract | `acs0.UserContractUpdateInput` | `google.protobuf.Empty` | Updates a user smart contract on chain. |
+| ReleaseApprovedUserSmartContract | `acs0.ReleaseContractInput` | `google.protobuf.Empty` | Releases an approved user smart contract proposal. |
+| PerformDeployUserSmartContract | `acs0.UserContractDeploymentInput` | `aelf.Address` | Performs user contract deployment. |
+| PerformUpdateUserSmartContract | `acs0.UserContractUpdateInput` | `google.protobuf.Empty` | Performs user contract update. |
+| SetContractAuthor | `acs0.SetContractAuthorInput` | `google.protobuf.Empty` | Sets the author of a contract. |
+| SetSigner | `aelf.Address` | `google.protobuf.Empty` | Sets proxy signer for contract deployment/update. |
+| RemoveSigner | `google.protobuf.Empty` | `google.protobuf.Empty` | Removes proxy signer for contract deployment/update. |
+| GetSigner | `aelf.Address` | `aelf.Address` | Queries signer of specified address. |
+
+## AElf.Standards.ACS1
+
+| Method Name | Request Type | Response Type | Description |
+| ------------------------- | ----------------------------- | ----------------------- | ---------------------------------------------- |
+| SetMethodFee | `acs1.MethodFees` | `google.protobuf.Empty` | Sets method fees for the specified method. |
+| ChangeMethodFeeController | `AuthorityInfo` | `google.protobuf.Empty` | Changes the method fee controller. |
+| GetMethodFee | `google.protobuf.StringValue` | `acs1.MethodFees` | Queries method fee information by method name. |
+| GetMethodFeeController | `google.protobuf.Empty` | `AuthorityInfo` | Queries the method fee controller. |
+
+ **Contract Types**
+
+## AElf.Contracts.Genesis
+
+### Zero.ContractProposingInput
+
+| Field | Type | Description | Label |
+| ------------ | ------------------------------ | ------------------------------------------------------- | ----- |
+| proposer | `aelf.Address` | The address of proposer for contract deployment/update. | |
+| status | `ContractProposingInputStatus` | The status of proposal. | |
+| expired_time | `google.protobuf.Timestamp` | The expiration time of proposal. | |
+
+### Zero.InitializeInput
+
+| Field | Type | Description | Label |
+| -------------------------------------- | ------ | ------------------------------------------------------ | ----- |
+| contract_deployment_authority_required | `bool` | Whether contract deployment/update requires authority. | |
+
+### Zero.ContractProposingInputStatus
+
+| Name | Number | Description |
+| ------------------- | ------ | ----------------------------------- |
+| PROPOSED | 0 | Proposal is proposed. |
+| APPROVED | 1 | Proposal is approved by parliament. |
+| CODE_CHECK_PROPOSED | 2 | Code check is proposed. |
+| CODE_CHECKED | 3 | Passed code checks. |
+
+### Zero.SetContractProposalExpirationTimePeriodInput
+
+| Field | Type | Description | Label |
+| ---------------------- | ------- | ----------------------------- | ----- |
+| expiration_time_period | `int32` | The period of expiration time | |
+
+## AElf.Standards.ACS0
+
+### acs0.AuthorUpdated
+
+| Field | Type | Description | Label |
+| --------------------- | -------------- | ------------------------------------------------- | ----- |
+| address | `aelf.address` | The byte array of the contract code. | |
+| old_author | `aelf.address` | The category of contract code (0: C#). | |
+| CrossChainCreateToken | `aelf.address` | Indicates if the contract is the system contract. | |
+
+### acs0.CodeCheckRequired
+
+| Field | Type | Description | Label |
+| ---------------------------- | ----------- | ------------------------------------------------- | ----- |
+| code | `bytes` | The byte array of the contract code. | |
+| proposed_contract_input_hash | `aelf.Hash` | The id of the proposed contract. | |
+| category | `sint32` | The category of contract code (0: C#). | |
+| is_system_contract | `bool` | Indicates if the contract is the system contract. | |
+| is_user_contract | `bool` | Indicates if the contract is the user contract. | |
+
+### acs0.CodeUpdated
+
+| Field | Type | Description | Label |
+| ------------- | -------------- | ---------------------------------------- | ----- |
+| address | `aelf.Address` | The address of the updated contract. | |
+| old_code_hash | `aelf.Hash` | The byte array of the old contract code. | |
+| new_code_hash | `aelf.Hash` | The byte array of the new contract code. | |
+| version | `int32` | The version of the current contract. | |
+
+### acs0.ContractCodeCheckInput
+
+| Field | Type | Description | Label |
+| ---------------------------- | ----------- | -------------------------------------------------------------------------------------- | ----- |
+| contract_input | `bytes` | The byte array of the contract code to be checked. | |
+| is_contract_deployment | `bool` | Whether the input contract is to be deployed or updated. | |
+| code_check_release_method | `string` | Method to call after code check complete (DeploySmartContract or UpdateSmartContract). | |
+| proposed_contract_input_hash | `aelf.Hash` | The id of the proposed contract. | |
+| category | `sint32` | The category of contract code (0: C#). | |
+| is_system_contract | `bool` | Indicates if the contract is the system contract. | |
+
+### acs0.ContractDeployed
+
+| Field | Type | Description | Label |
+| ---------------- | -------------- | ---------------------------------------------------------- | ----- |
+| author | `aelf.Address` | The author of the contract. | |
+| code_hash | `aelf.Hash` | The hash of the contract code. | |
+| address | `aelf.Address` | The address of the contract. | |
+| version | `int32` | The version of the current contract. | |
+| name | `aelf.Hash` | The name of the contract. | |
+| contract_version | `string` | The version of the current contract. | |
+| deployer | `aelf.Address` | The actual address that initiated the contract deployment. | |
+
+### acs0.ContractDeploymentInput
+
+| Field | Type | Description | Label |
+| ------------------ | ------------------------ | ----------------------------------------------- | ----- |
+| category | `sint32` | The category of contract code (0: C#). | |
+| code | `bytes` | The byte array of the contract code. | |
+| contract_operation | `acs0.ContractOperation` | The information needed for contract deployment. | |
+
+### acs0.ContractInfo
+
+| Field | Type | Description | Label |
+| ------------------ | -------------- | ---------------------------------------------------------- | ----- |
+| serial_number | `int64` | The serial number of the contract. | |
+| author | `aelf.Address` | The author of the contract. | |
+| category | `sint32` | The category of contract code (0: C#). | |
+| code_hash | `aelf.Hash` | The hash of the contract code. | |
+| is_system_contract | `bool` | Whether it is a system contract. | |
+| version | `int32` | The version of the current contract. | |
+| contract_version | `string` | The version of the current contract. | |
+| is_user_contract | `bool` | Indicates if the contract is the user contract. | |
+| deployer | `aelf.Address` | The actual address that initiated the contract deployment. | |
+
+### acs0.ContractProposed
+
+| Field | Type | Description | Label |
+| ---------------------------- | ----------- | -------------------------------- | ----- |
+| proposed_contract_input_hash | `aelf.Hash` | The id of the proposed contract. | |
+
+### acs0.ContractUpdateInput
+
+| Field | Type | Description | Label |
+| ------------------ | ------------------------- | ---------------------------------------------- | ----- |
+| address | `aelf.Address ` | The contract address that needs to be updated. | |
+| code | `bytes ` | The byte array of the new contract code. | |
+| contract_operation | `acs0.ContractOperation ` | The information needed for contract update. | |
+
+### acs0.UserContractUpdateInput
+
+| Field | Type | Description | Label |
+| ------- | ------------------ | --------------------------------------------------- | ----- |
+| address | `aelf.Address ` | The user contract address that needs to be updated. | |
+| code | `bytes ` | The byte array of the new user contract code. | |
+
+### acs0.ReleaseContractInput
+
+| Field | Type | Description | Label |
+| ---------------------------- | --------------- | -------------------------------- | ----- |
+| proposal_id | `aelf.Hash ` | The hash of the proposal. | |
+| proposed_contract_input_hash | `aelf.Hash ` | The id of the proposed contract. | |
+
+### acs0.SystemContractDeploymentInput
+
+| Field | Type | Description | Label |
+| ---------------------------- | ---------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | ----- |
+| category | `sint32 ` | The category of contract code(0: C#). | |
+| code | `bytes ` | The byte array of the contract code. | |
+| name | `aelf.Hash ` | The name of the contract. It has to be unique. | |
+| transaction_method_call_list | `SystemContractDeploymentInput.SystemTransactionMethodCallList ` | An initial list of transactions for the system contract, which is executed in sequence when the contract is deployed. | |
+
+### acs0.SystemContractDeploymentInput.SystemTransactionMethodCall
+
+| Field | Type | Description | Label |
+| ----------- | ------------ | ---------------------------------------- | ----- |
+| method_name | `string ` | The method name of system transaction. | |
+| params | `bytes ` | The params of system transaction method. | |
+
+### acs0.SystemContractDeploymentInput.SystemTransactionMethodCallList
+
+| Field | Type | Description | Label |
+| ----- | ------------------------------------------------------------ | -------------------------------- | -------- |
+| value | `SystemContractDeploymentInput.SystemTransactionMethodCall ` | The list of system transactions. | repeated |
+
+### acs0.ValidateSystemContractAddressInput
+
+| Field | Type | Description | Label |
+| ------------------------- | ------------------ | ------------------------------ | ----- |
+| system_contract_hash_name | `aelf.Hash ` | The name hash of the contract. | |
+| address | `aelf.Address ` | The address of the contract. | |
+
+### acs0.DeployUserSmartContractOutput
+
+| Field | Type | Description | Label |
+| --------- | --------------- | ------------------------------------------- | ----- |
+| code_hash | `aelf.Hash ` | The deployed or updated contract code hash. | |
+
+### acs0.SetContractAuthorInput
+
+| Field | Type | Description | Label |
+| ---------------- | ------------------ | -------------------------------------------------- | ----- |
+| contract_address | `aelf.Address ` | The author's contract address needs to be updated. | |
+| new_author | `aelf.Address ` | The new contract author. | |
+
+### acs0.ContractOperation
+
+| Field | Type | Description | Label |
+| --------- | ------------------ | --------------------------------------------------------------- | ----- |
+| chain_id | `int32 ` | The ID of the chain where the contract is deployed/updated. | |
+| code_hash | `aelf.Hash ` | The hash of the contract code. | |
+| deployer | `aelf.Address ` | The actual address that initiates the contract deployment. | |
+| salt | `aelf.Hash ` | The hash based on which the user contract address is generated. | |
+| version | `int32 ` | The version of the deployed/updated contract. | |
+| signature | `bytes ` | The signature for deployer verification. | |
+
+### acs0.UserContractDeploymentInput
+
+| Field | Type | Description | Label |
+| -------- | --------------- | ----------------------------------------------------------- | ----- |
+| category | `sint32 ` | The category of contract code(0: C#). | |
+| code | `bytes ` | The byte array of the contract code. | |
+| salt | `aelf.Hash ` | The hash based on which user contract address is generated. | |
+
+## AElf.Standards.ACS1
+
+### acs1.MethodFee
+
+| Field | Type | Description | Label |
+| --------- | -------- | ----------------------------------- | ----- |
+| symbol | `string` | The token symbol of the method fee. | |
+| basic_fee | `int64` | The amount of fees to be charged. | |
+
+### acs1.MethodFees
+
+| Field | Type | Description | Label |
+| ---------------- | ------------------ | ------------------------------------------------------------ | -------- |
+| method_name | `string` | The name of the method to be charged. | |
+| fees | `MethodFee` (List) | List of fees to be charged. | repeated |
+| is_size_fee_free | `bool` | Optional based on the implementation of SetMethodFee method. | |
+
+## AElf.Types
+
+### aelf.Address
+
+| Field | Type | Description | Label |
+| ----- | ------- | ----------- | ----- |
+| value | `bytes` | | |
+
+### aelf.BinaryMerkleTree
+
+| Field | Type | Description | Label |
+| ---------- | ------------- | ----------------------- | -------- |
+| nodes | `Hash` (List) | The leaf nodes. | repeated |
+| root | `Hash` | The root node hash. | |
+| leaf_count | `int32` | The count of leaf node. | |
+
+### aelf.Hash
+
+| Field | Type | Description | Label |
+| ----- | ------- | ----------- | ----- |
+| value | `bytes` | | |
+
+### aelf.LogEvent
+
+| Field | Type | Description | Label |
+| ----------- | -------------- | -------------------------- | -------- |
+| address | `Address` | The contract address. | |
+| name | `string` | The name of the log event. | |
+| indexed | `bytes` (List) | The indexed data. | repeated |
+| non_indexed | `bytes` | The non indexed data. | |
+
+### aelf.MerklePath
+
+| Field | Type | Description | Label |
+| ----------------- | ----------------------- | ---------------------- | -------- |
+| merkle_path_nodes | `MerklePathNode` (List) | The merkle path nodes. | repeated |
+
+### aelf.MerklePathNode
+
+| Field | Type | Description | Label |
+| ------------------ | ------ | -------------------------------- | ----- |
+| hash | `Hash` | The node hash. | |
+| is_left_child_node | `bool` | Whether it is a left child node. | |
+
+### aelf.SInt32Value
+
+| Field | Type | Description | Label |
+| ----- | -------- | ----------- | ----- |
+| value | `sint32` | | |
+
+### aelf.SInt64Value
+
+| Field | Type | Description | Label |
+| ----- | -------- | ----------- | ----- |
+| value | `sint64` | | |
+
+### aelf.ScopedStatePath
+
+| Field | Type | Description | Label |
+| ------- | ----------- | ------------------------------------------------------ | ----- |
+| address | `Address` | The scope address, which will be the contract address. | |
+| path | `StatePath` | The path of contract state. | |
+
+### aelf.SmartContractRegistration
+
+| Field | Type | Description | Label |
+| ------------------ | -------- | ------------------------------------- | ----- |
+| category | `sint32` | The category of contract code(0: C#). | |
+| code | `bytes` | The byte array of the contract code. | |
+| code_hash | `Hash` | The hash of the contract code. | |
+| is_system_contract | `bool` | Whether it is a system contract. | |
+| version | `int32` | The version of the current contract. | |
+
+### aelf.StatePath
+
+| Field | Type | Description | Label |
+| ----- | --------------- | ----------------------------------- | -------- |
+| parts | `string` (List) | The partial path of the state path. | repeated |
+
+### aelf.Transaction
+
+| Field | Type | Description | Label |
+| ---------------- | -------------- | -------------------------------------------------------------------------------------------------------------------------------- | ----- |
+| from | `aelf.Address` | The address of the sender of the transaction. | |
+| to | `aelf.Address` | The address of the contract when calling a contract. | |
+| ref_block_number | `int64` | The height of the referenced block hash. | |
+| ref_block_prefix | `bytes` | The first four bytes of the referenced block hash. | |
+| method_name | `string` | The name of a method in the smart contract at the To address. | |
+| params | `bytes` | The parameters to pass to the smart contract method. | |
+| signature | `bytes` | When signing a transaction, it's a subset of the fields: from/to and the target method as well as the parameter that were given. | |
+
+### aelf.TransactionExecutingStateSet
+
+| Field | Type | Description | Label |
+| ------- | ---------------------------------------------------------------------------------------------------------- | ------------------- | -------- |
+| writes | `TransactionExecutingStateSet.WritesEntry` ([see details](#aelftransactionexecutingstatesetwritesentry)) | The changed states. | repeated |
+| reads | `TransactionExecutingStateSet.ReadsEntry` ([see details](#aelftransactionexecutingstatesetreadsentry)) | The read states. | repeated |
+| deletes | `TransactionExecutingStateSet.DeletesEntry` ([see details](#aelftransactionexecutingstatesetdeletesentry)) | The deleted states. | repeated |
+
+### aelf.TransactionExecutingStateSet.DeletesEntry
+
+| Field | Type | Description | Label |
+| ----- | -------- | ----------- | ----- |
+| key | `string` | | |
+| value | `bool` | | |
+
+### aelf.TransactionExecutingStateSet.ReadsEntry
+
+| Field | Type | Description | Label |
+| ----- | -------- | ----------- | ----- |
+| key | `string` | | |
+| value | `bool` | | |
+
+### aelf.TransactionExecutingStateSet.WritesEntry
+
+| Field | Type | Description | Label |
+| ----- | -------- | ----------- | ----- |
+| key | `string` | | |
+| value | `bytes` | | |
+
+### aelf.TransactionResult
+
+| Field | Type | Description | Label |
+| -------------- | ------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- |
+| transaction_id | `aelf.Hash` | The transaction id. | |
+| status | `TransactionResultStatus` | The transaction result status. | |
+| logs | `aelf.LogEvent` (List) | The log events. | repeated |
+| bloom | `bytes` | Bloom filter for transaction logs. A transaction log event can be defined in the contract and stored in the bloom filter after the transaction is executed. | |
+| return_value | `bytes` | The return value of the transaction execution. | |
+| block_number | `int64` | The height of the block that packages the transaction. | |
+| block_hash | `aelf.Hash` | The hash of the block that packages the transaction. | |
+| error | `string` | Failed execution error message. | |
+
+### aelf.TransactionResultStatus
+
+| Name | Number | Description |
+| ---------------------- | ------ | --------------------------------------------------------------------------------- |
+| NOT_EXISTED | 0 | The execution result of the transaction does not exist. |
+| PENDING | 1 | The transaction is in the transaction pool waiting to be packaged. |
+| FAILED | 2 | Transaction execution failed. |
+| MINED | 3 | The transaction was successfully executed and successfully packaged into a block. |
+| CONFLICT | 4 | When executed in parallel, there are conflicts with other transactions. |
+| PENDING_VALIDATION | 5 | The transaction is waiting for validation. |
+| NODE_VALIDATION_FAILED | 6 | Transaction validation failed. |
+
+## AuthorityInfo
+
+| Field | Type | Description | Label |
+| ---------------- | -------------- | ----------------------------------------- | ----- |
+| contract_address | `aelf.Address` | The contract address of the controller. | |
+| owner_address | `aelf.Address` | The address of the owner of the contract. | |
diff --git a/docs/docs/smart-contract-api/index.md b/docs/docs/smart-contract-api/index.md
new file mode 100644
index 00000000..6c9428cf
--- /dev/null
+++ b/docs/docs/smart-contract-api/index.md
@@ -0,0 +1,407 @@
+---
+sidebar_position: 2
+title: Smart Contract API
+---
+
+# AElf.Contracts.Vote
+
+Vote contract.
+
+The Vote contract is an abstract layer for voting. Developers implement
+concrete voting activities by calling this contract.
+
+Implements aelf Standards ACS1.
+
+## Contract Methods
+
+| Method Name | Request Type | Response Type | Description |
+| --------------------- | ----------------------------- | ------------------------------------------------ | ------------------------------------------------------------------------------------- |
+| Register | `Vote.VotingRegisterInput ` | `google.protobuf.Empty <#google.protobuf.Empty>` | Create a voting activity. |
+| Vote | `Vote.VoteInput ` | `google.protobuf.Empty <#google.protobuf.Empty>` | After successfully creating a voting activity, others are able to vote. |
+| Withdraw | `Vote.WithdrawInput ` | `google.protobuf.Empty <#google.protobuf.Empty>` | A voter can withdraw the token after the lock time. |
+| TakeSnapshot | `Vote.TakeSnapshotInput ` | `google.protobuf.Empty <#google.protobuf.Empty>` | Save the result of the specified number of votes and generates a new round of votes. |
+| AddOption | `Vote.AddOptionInput ` | `google.protobuf.Empty <#google.protobuf.Empty>` | Add an option to a voting activity. |
+| RemoveOption | `Vote.RemoveOptionInput ` | `google.protobuf.Empty <#google.protobuf.Empty>` | Remove an option from a voting activity. |
+| AddOptions | `Vote.AddOptionsInput ` | `google.protobuf.Empty <#google.protobuf.Empty>` | Add multiple options to a voting activity. |
+| RemoveOptions | `Vote.RemoveOptionsInput ` | `google.protobuf.Empty <#google.protobuf.Empty>` | Remove multiple options from a voting activity. |
+| GetVotingItem | `Vote.GetVotingItemInput ` | `Vote.VotingItem ` | Get a voting activity information. |
+| GetVotingResult | `Vote.GetVotingResultInput ` | `Vote.VotingResult ` | Get a voting result according to the provided voting activity id and snapshot number. |
+| GetLatestVotingResult | `aelf.Hash ` | `Vote.VotingResult ` | Gets the latest result according to the voting activity id. |
+| GetVotingRecord | `aelf.Hash ` | `Vote.VotingRecord ` | Get the voting record according to vote id. |
+| GetVotingRecords | `Vote.GetVotingRecordsInput ` | `Vote.VotingRecords <#Vote.VotingRecords>` | Get the voting record according to vote ids. |
+| GetVotedItems | `aelf.Address ` | `Vote.VotedItems <#Vote.VotedItems>` | Get all voted information according to voter address. |
+| GetVotingIds | `Vote.GetVotingIdsInput ` | `Vote.VotedIds ` | Get the vote ids according to voting activity id. |
+
+# AElf.Standards.ACS1
+
+| Method Name | Request Type | Response Type | Description |
+| ------------------------- | ------------------------------ | ------------------------ | -------------------------------------------------------------------------------------------------- |
+| SetMethodFee | `acs1.MethodFees ` | `google.protobuf.Empty ` | Set the method fees for the specified method. Note that this will override all fees of the method. |
+| ChangeMethodFeeController | `AuthorityInfo` | `google.protobuf.Empty ` | Change the method fee controller, the default is parliament and default organization. |
+| GetMethodFee | `google.protobuf.StringValue ` | `acs1.MethodFees ` | Query method fee information by method name. |
+| GetMethodFeeController | `google.protobuf.Empty ` | `AuthorityInfo` | Query the method fee controller. |
+
+# Contract Types
+
+## AElf.Contracts.Vote
+
+### Vote.AddOptionInput
+
+| Field | Type | Description | Label |
+| -------------- | ------------ | ----------------------- | ----- |
+| voting_item_id | `aelf.Hash ` | The voting activity id. | |
+| option | `string ` | The new option to add. | |
+
+### Vote.AddOptionsInput
+
+| Field | Type | Description | Label |
+| -------------- | ------------ | ----------------------- | -------- |
+| voting_item_id | `aelf.Hash ` | The voting activity id. | |
+| options | `string ` | The new options to add. | repeated |
+
+### Vote.GetVotingIdsInput
+
+| Field | Type | Description | Label |
+| -------------- | --------------- | ----------------------- | ----- |
+| voter | `aelf.Address ` | The address of voter. | |
+| voting_item_id | `aelf.Hash ` | The voting activity id. | |
+
+### Vote.GetVotingItemInput
+
+| Field | Type | Description | Label |
+| -------------- | ------------ | ----------------------- | ----- |
+| voting_item_id | `aelf.Hash ` | The voting activity id. | |
+
+### Vote.GetVotingRecordsInput
+
+| Field | Type | Description | Label |
+| ----- | ------------ | ------------- | -------- |
+| ids | `aelf.Hash ` | The vote ids. | repeated |
+
+### Vote.GetVotingResultInput
+
+| Field | Type | Description | Label |
+| --------------- | ------------ | ----------------------- | ----- |
+| voting_item_id | `aelf.Hash ` | The voting activity id. | |
+| snapshot_number | `int64 ` | The snapshot number. | |
+
+### Vote.RemoveOptionInput
+
+| Field | Type | Description | Label |
+| -------------- | ------------ | ----------------------- | ----- |
+| voting_item_id | `aelf.Hash ` | The voting activity id. | |
+| option | `string ` | The option to remove. | |
+
+### Vote.RemoveOptionsInput
+
+| Field | Type | Description | Label |
+| -------------- | ------------ | ----------------------- | -------- |
+| voting_item_id | `aelf.Hash ` | The voting activity id. | |
+| options | `string ` | The options to remove. | repeated |
+
+### Vote.TakeSnapshotInput
+
+| Field | Type | Description | Label |
+| --------------- | ------------ | ---------------------------- | ----- |
+| voting_item_id | `aelf.Hash ` | The voting activity id. | |
+| snapshot_number | `int64 ` | The snapshot number to take. | |
+
+### Vote.VoteInput
+
+| Field | Type | Description | Label |
+| ---------------- | --------------- | ----------------------- | ----- |
+| voting_item_id | `aelf.Hash ` | The voting activity id. | |
+| voter | `aelf.Address ` | The address of voter. | |
+| amount | `int64 ` | The amount of vote. | |
+| option | `string ` | The option to vote. | |
+| vote_id | `aelf.Hash ` | The vote id. | |
+| is_change_target | `bool ` | Whether vote others. | |
+
+### Vote.Voted
+
+| Field | Type | Description | Label |
+| --------------- | -------------------------------------------------------- | ----------------------- | ----- |
+| voting_item_id | `aelf.Hash ` | The voting activity id. | |
+| voter | `aelf.Address ` | The address of voter. | |
+| snapshot_number | `int64 ` | The snapshot number. | |
+| amount | `int64 ` | The amount of vote. | |
+| vote_timestamp | `google.protobuf.Timestamp <#google.protobuf.Timestamp>` | The time of vote. | |
+| option | `string ` | The option voted. | |
+| vote_id | `aelf.Hash ` | The vote id. | |
+
+### Vote.VotedIds
+
+| Field | Type | Description | Label |
+| --------------- | ------------ | ----------------------- | -------- |
+| active_votes | `aelf.Hash ` | The active vote ids. | repeated |
+| withdrawn_votes | `aelf.Hash ` | The withdrawn vote ids. | repeated |
+
+### Vote.VotedItems
+
+| Field | Type | Description | Label |
+| ------------------- | ----------------------------------- | -------------- | -------- |
+| voted_item_vote_ids | `VotedItems.VotedItemVoteIdsEntry ` | The voted ids. | repeated |
+
+### Vote.VotedItems.VotedItemVoteIdsEntry
+
+| Field | Type | Description | Label |
+| ----- | ----------- | ----------- | ----- |
+| key | `string ` | | |
+| value | `VotedIds ` | | |
+
+### Vote.VotingItem
+
+| Field | Type | Description | Label |
+| -------------------------------- | -------------------------------------------------------- | ---------------------------------------------- | -------- |
+| voting_item_id | `aelf.Hash ` | The voting activity id. | |
+| accepted_currency | `string ` | The token symbol which will be accepted. | |
+| is_lock_token | `bool ` | Whether the vote will lock token. | |
+| current_snapshot_number | `int64 ` | The current snapshot number. | |
+| total_snapshot_number | `int64 ` | The total snapshot number. | |
+| options | `string ` | The list of options. | repeated |
+| register_timestamp | `google.protobuf.Timestamp <#google.protobuf.Timestamp>` | The register time of the voting activity. | |
+| start_timestamp | `google.protobuf.Timestamp <#google.protobuf.Timestamp>` | The start time of the voting. | |
+| end_timestamp | `google.protobuf.Timestamp <#google.protobuf.Timestamp>` | The end time of the voting. | |
+| current_snapshot_start_timestamp | `google.protobuf.Timestamp <#google.protobuf.Timestamp>` | The start time of current round of the voting. | |
+| sponsor | `aelf.Address ` | The sponsor address of the voting activity. | |
+
+### Vote.VotingItemRegistered
+
+| Field | Type | Description | Label |
+| -------------------------------- | -------------------------------------------------------- | ---------------------------------------------- | ----- |
+| voting_item_id | `aelf.Hash ` | The voting activity id. | |
+| accepted_currency | `string ` | The token symbol which will be accepted. | |
+| is_lock_token | `bool ` | Whether the vote will lock token. | |
+| current_snapshot_number | `int64 ` | The current snapshot number. | |
+| total_snapshot_number | `int64 ` | The total number of snapshots of the vote. | |
+| register_timestamp | `google.protobuf.Timestamp <#google.protobuf.Timestamp>` | The register time of the voting activity. | |
+| start_timestamp | `google.protobuf.Timestamp <#google.protobuf.Timestamp>` | The start time of the voting. | |
+| end_timestamp | `google.protobuf.Timestamp <#google.protobuf.Timestamp>` | The end time of the voting. | |
+| current_snapshot_start_timestamp | `google.protobuf.Timestamp <#google.protobuf.Timestamp>` | The start time of current round of the voting. | |
+| sponsor | `aelf.Address ` | The sponsor address of the voting activity. | |
+
+### Vote.VotingRecord
+
+| Field | Type | Description | Label |
+| ------------------ | -------------------------------------------------------- | ------------------------------------ | ----- |
+| voting_item_id | `aelf.Hash ` | The voting activity id. | |
+| voter | `aelf.Address ` | The address of voter. | |
+| snapshot_number | `int64 ` | The snapshot number. | |
+| amount | `int64 ` | The amount of vote. | |
+| withdraw_timestamp | `google.protobuf.Timestamp <#google.protobuf.Timestamp>` | The time of withdraw. | |
+| vote_timestamp | `google.protobuf.Timestamp <#google.protobuf.Timestamp>` | The time of vote. | |
+| is_withdrawn | `bool ` | Whether the vote had been withdrawn. | |
+| option | `string ` | The option voted. | |
+| is_change_target | `bool ` | Whether vote others. | |
+
+### Vote.VotingRecords
+
+| Field | Type | Description | Label |
+| ------- | --------------- | ------------------- | -------- |
+| records | `VotingRecord ` | The voting records. | repeated |
+
+### Vote.VotingRegisterInput
+
+| Field | Type | Description | Label |
+| --------------------- | -------------------------------------------------------- | ------------------------------------------ | -------- |
+| start_timestamp | `google.protobuf.Timestamp <#google.protobuf.Timestamp>` | The start time of the voting. | |
+| end_timestamp | `google.protobuf.Timestamp <#google.protobuf.Timestamp>` | The end time of the voting. | |
+| accepted_currency | `string ` | The token symbol which will be accepted. | |
+| is_lock_token | `bool ` | Whether the vote will lock token. | |
+| total_snapshot_number | `int64 ` | The total number of snapshots of the vote. | |
+| options | `string ` | The list of options. | repeated |
+
+### Vote.VotingResult
+
+| Field | Type | Description | Label |
+| ------------------------ | -------------------------------------------------------- | --------------------------------------------------------- | -------- |
+| voting_item_id | `aelf.Hash ` | The voting activity id. | |
+| results | `VotingResult.ResultsEntry ` | The voting result, option -> amount of votes, | repeated |
+| snapshot_number | `int64 ` | The snapshot number. | |
+| voters_count | `int64 ` | The total number of voters. | |
+| snapshot_start_timestamp | `google.protobuf.Timestamp <#google.protobuf.Timestamp>` | The start time of this snapshot. | |
+| snapshot_end_timestamp | `google.protobuf.Timestamp <#google.protobuf.Timestamp>` | The end time of this snapshot. | |
+| votes_amount | `int64 ` | Total votes received during the process of this snapshot. | |
+
+### Vote.VotingResult.ResultsEntry
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------- | ----- |
+| key | `string ` | | |
+| value | `int64 ` | | |
+
+### Vote.WithdrawInput
+
+| Field | Type | Description | Label |
+| ------- | ------------ | ------------ | ----- |
+| vote_id | `aelf.Hash ` | The vote id. | |
+
+### Vote.Withdrawn
+
+| Field | Type | Description | Label |
+| ------- | ------------ | ------------ | ----- |
+| vote_id | `aelf.Hash ` | The vote id. | |
+
+## AElf.Standards.ACS1
+
+### acs1.MethodFee
+
+| Field | Type | Description | Label |
+| --------- | --------- | ----------------------------------- | ----- |
+| symbol | `string ` | The token symbol of the method fee. | |
+| basic_fee | `int64 ` | The amount of fees to be charged. | |
+
+### acs1.MethodFees
+
+| Field | Type | Description | Label |
+| ---------------- | ------------ | ------------------------------------------------------------ | -------- |
+| method_name | `string ` | The name of the method to be charged. | |
+| fees | `MethodFee ` | List of fees to be charged. | repeated |
+| is_size_fee_free | `bool ` | Optional based on the implementation of SetMethodFee method. | |
+
+## AElf.Types
+
+### aelf.Address
+
+| Field | Type | Description | Label |
+| ----- | -------- | ----------- | ----- |
+| value | `bytes ` | | |
+
+### aelf.BinaryMerkleTree
+
+| Field | Type | Description | Label |
+| ---------- | -------- | ----------------------- | -------- |
+| nodes | `Hash ` | The leaf nodes. | repeated |
+| root | `Hash ` | The root node hash. | |
+| leaf_count | `int32 ` | The count of leaf node. | |
+
+### aelf.Hash
+
+| Field | Type | Description | Label |
+| ----- | -------- | ----------- | ----- |
+| value | `bytes ` | | |
+
+### aelf.LogEvent
+
+| Field | Type | Description | Label |
+| ----------- | ---------- | -------------------------- | -------- |
+| address | `Address ` | The contract address. | |
+| name | `string ` | The name of the log event. | |
+| indexed | `bytes ` | The indexed data. | repeated |
+| non_indexed | `bytes ` | The non indexed data. | |
+
+### aelf.MerklePath
+
+| Field | Type | Description | Label |
+| ----------------- | ----------------- | ---------------------- | -------- |
+| merkle_path_nodes | `MerklePathNode ` | The merkle path nodes. | repeated |
+
+### aelf.MerklePathNode
+
+| Field | Type | Description | Label |
+| ------------------ | ------- | -------------------------------- | ----- |
+| hash | `Hash ` | The node hash. | |
+| is_left_child_node | `bool ` | Whether it is a left child node. | |
+
+### aelf.SInt32Value
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------- | ----- |
+| value | `sint32 ` | | |
+
+### aelf.SInt64Value
+
+| Field | Type | Description | Label |
+| ----- | -------- | ----------- | ----- |
+| value | `sint64` | | |
+
+### aelf.ScopedStatePath
+
+| Field | Type | Description | Label |
+| ------- | ----------------------------- | ------------------------------------------------------ | ----- |
+| address | `Address ` | The scope address, which will be the contract address. | |
+| path | `StatePath <#aelf.StatePath>` | The path of contract state. | |
+
+### aelf.SmartContractRegistration
+
+| Field | Type | Description | Label |
+| ------------------ | --------- | ------------------------------------- | ----- |
+| category | `sint32 ` | The category of contract code(0: C#). | |
+| code | `bytes ` | The byte array of the contract code. | |
+| code_hash | `Hash ` | The hash of the contract code. | |
+| is_system_contract | `bool ` | Whether it is a system contract. | |
+| version | `int32 ` | The version of the current contract. | |
+
+### aelf.StatePath
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------------------------------- | -------- |
+| parts | `string ` | The partial path of the state path. | repeated |
+
+### aelf.Transaction
+
+| Field | Type | Description | Label |
+| ---------------- | ---------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ----- |
+| from | `Address ` | The address of the sender of the transaction. | |
+| to | `Address ` | The address of the contract when calling a contract. | |
+| ref_block_number | `int64 ` | The height of the referenced block hash. | |
+| ref_block_prefix | `bytes ` | The first four bytes of the referenced block hash. | |
+| method_name | `string ` | The name of a method in the smart contract at the To address. | |
+| params | `bytes ` | The parameters to pass to the smart contract method. | |
+| signature | `bytes ` | When signing a transaction it’s actually a subset of the fields: from/to and the target method as well as the parameter that were given. | |
+
+## aelf.TransactionExecutingStateSet.DeletesEntry
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------- | ----- |
+| key | `string ` | | |
+| value | `bool ` | | |
+
+### aelf.TransactionExecutingStateSet.ReadsEntry
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------- | ----- |
+| key | `string ` | | |
+| value | `bool ` | | |
+
+### aelf.TransactionExecutingStateSet.WritesEntry
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------- | ----- |
+| key | `string ` | | |
+| value | `bytes ` | | |
+
+## aelf.TransactionResult
+
+| Field | Type | Description | Label |
+| -------------- | -------------------------- | ---------------------------------------------- | -------- |
+| transaction_id | `Hash ` | The transaction id. | |
+| status | `TransactionResultStatus ` | The transaction result status. | |
+| logs | `LogEvent ` | The log events. | repeated |
+| bloom | `bytes ` | Bloom filter for transaction logs. | |
+| return_value | `bytes ` | The return value of the transaction execution. |
+
+ | |
+
+| block_number | `int64 `** | The height of the block that packages the transaction. | |
+| block_hash | `Hash `** | The hash of the block that packages the transaction. | |
+| error | `string ` | Failed execution error message. | |
+
+## aelf.TransactionResultStatus
+
+| Name | Number | Description |
+| ---------------------- | ------ | --------------------------------------------------------------------------------- |
+| NOT_EXISTED | 0 | The execution result of the transaction does not exist. |
+| PENDING | 1 | The transaction is in the transaction pool waiting to be packaged. |
+| FAILED | 2 | Transaction execution failed. |
+| MINED | 3 | The transaction was successfully executed and successfully packaged into a block. |
+| CONFLICT | 4 | When executed in parallel, there are conflicts with other transactions. |
+| PENDING_VALIDATION | 5 | The transaction is waiting for validation. |
+| NODE_VALIDATION_FAILED | 6 | Transaction validation failed. |
+
+# AuthorityInfo
+
+| Field | Type | Description | Label |
+| ---------------- | --------------- | ----------------------------------------- | ----- |
+| contract_address | `aelf.Address ` | The contract address of the controller. | |
+| owner_address | `aelf.Address ` | The address of the owner of the contract. | |
diff --git a/docs/docs/smart-contract-api/multi-token-contract/index.md b/docs/docs/smart-contract-api/multi-token-contract/index.md
new file mode 100644
index 00000000..afc1d4c3
--- /dev/null
+++ b/docs/docs/smart-contract-api/multi-token-contract/index.md
@@ -0,0 +1,1100 @@
+---
+sidebar_position: 7
+title: Multi Token Contract
+---
+
+# AElf.Contracts.MultiToken
+
+MultiToken contract.
+
+The MultiToken contract is mainly used to manage the user's account and transaction fees related settings.
+
+Implements aelf Standards ACS1 and ACS2.
+
+## Contract Methods
+
+| Method Name | Request Type | Response Type | Description |
+| --------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| AdvanceResourceToken | [`tokenimpl.AdvanceResourceTokenInput`](#tokenimpl.AdvanceResourceTokenInput) | [`google.protobuf.Empty`](#google.protobuf.Empty) | Transfer resource tokens to designated contract address. |
+| TakeResourceTokenBack | [`tokenimpl.TakeResourceTokenBackInput`](#tokenimpl.TakeResourceTokenBackInput) | [`google.protobuf.Empty`](#google.protobuf.Empty) | Take token from contract address. |
+| RegisterCrossChainTokenContractAddress | [`tokenimpl.RegisterCrossChainTokenContractAddressInput`](#tokenimpl.RegisterCrossChainTokenContractAddressInput) | [`google.protobuf.Empty`](#google.protobuf.Empty) | Register the token contract address for cross chain. |
+| SetFeeReceiver | [`aelf.Address`](#aelf.Address) | [`google.protobuf.Empty`](#google.protobuf.Empty) | Set the receiver address of the side chain transaction fee. |
+| ValidateTokenInfoExists | [`tokenimpl.ValidateTokenInfoExistsInput`](#tokenimpl.ValidateTokenInfoExistsInput) | [`google.protobuf.Empty`](#google.protobuf.Empty) | Validates if the token exist. |
+| UpdateRental | [`tokenimpl.UpdateRentalInput`](#tokenimpl.UpdateRentalInput) | [`google.protobuf.Empty`](#google.protobuf.Empty) | Update the rental unit price of the side chain. |
+| UpdateRentedResources | [`tokenimpl.UpdateRentedResourcesInput`](#tokenimpl.UpdateRentedResourcesInput) | [`google.protobuf.Empty`](#google.protobuf.Empty) | Set the amount of resources fee per minute for the side chain. |
+| TransferToContract | [`tokenimpl.TransferToContractInput`](#tokenimpl.TransferToContractInput) | [`google.protobuf.Empty`](#google.protobuf.Empty) | Transfer Token to the specified contract. |
+| ChangeSideChainRentalController | [`AuthorityInfo`](#AuthorityInfo) | [`google.protobuf.Empty`](#google.protobuf.Empty) | Change the governance organization of side chain rental. |
+| ChangeSymbolsToPayTXSizeFeeController | [`AuthorityInfo`](#AuthorityInfo) | [`google.protobuf.Empty`](#google.protobuf.Empty) | Change the governance organization for tokens to pay transaction fees. |
+| ChangeCrossChainTokenContractRegistrationController | [`AuthorityInfo`](#AuthorityInfo) | [`google.protobuf.Empty`](#google.protobuf.Empty) | Change the governance organization for cross-chain token contract address registration. |
+| ChangeUserFeeController | [`AuthorityInfo`](#AuthorityInfo) | [`google.protobuf.Empty`](#google.protobuf.Empty) | Change the governance organization of the coefficient of the user transaction fee calculation formula. |
+| ChangeDeveloperController | [`AuthorityInfo`](#AuthorityInfo) | [`google.protobuf.Empty`](#google.protobuf.Empty) | Change the governance organization of the coefficient of the developer's transaction resource fee calculation formula. |
+| ConfigTransactionFeeFreeAllowances | [`token.ConfigTransactionFeeFreeAllowancesInput`](#token.ConfigTransactionFeeFreeAllowancesInput) | [`google.protobuf.Empty`](#google.protobuf.Empty) | Set allowance configurations for transaction fee exemption. |
+| GetFeeReceiver | [`google.protobuf.Empty`](#google.protobuf.Empty) | [`aelf.Address`](#aelf.Address) | Get the address of fee receiver. |
+| GetResourceUsage | `google.protobuf.Empty ` | `tokenimpl.ResourceUsage ` | Query the amount of resources usage currently. |
+| GetSymbolsToPayTXSizeFeeController | `google.protobuf.Empty ` | `AuthorityInfo ` | Query the governance organization for tokens to pay transaction fees. |
+| GetCrossChainTokenContractRegistrationController | `google.protobuf.Empty ` | `AuthorityInfo ` | Query the governance organization of the |
+| GetUserFeeController | `google.protobuf.Empty ` | `tokenimpl.UserFeeController ` | Query the governance organization that calculates the formula coefficient for the transaction cost the user sends the contract. |
+| GetDeveloperFeeController | `google.protobuf.Empty ` | `tokenimpl.DeveloperFeeController ` | Query the governing organization of the formula coefficients for calculating developer contract transaction fee. |
+| GetSideChainRentalControllerCreateInfo | `google.protobuf.Empty ` | `AuthorityInfo ` | Query the organization that governs the side chain rental fee. |
+| GetTransactionFeeFreeAllowances | `aelf.Address ` | `token.TransactionFeeFreeAllowancesMap >` | Get the allowances for transaction fee exemption. |
+| GetTransactionFeeFreeAllowancesConfig | `google.protobuf.Empty ` | `token.GetTransactionFeeFreeAllowancesConfigOutput ` | Query allowance configurations for transaction fee exemption. |
+| GetTransactionFeeDelegatees | `token.GetTransactionFeeDelegateesInput ` | `token.GetTransactionFeeDelegateesOutput ` | Retrieve a list of proxy addresses corresponding to a given address. |
+| GetVirtualAddressForLocking | `tokenimpl.GetVirtualAddressForLockingInput ` | `aelf.Address ` | Compute the virtual address for locking. |
+| GetOwningRental | `google.protobuf.Empty ` | `tokenimpl.OwningRental ` | Query how much resource tokens should be paid currently. |
+| GetOwningRentalUnitValue | `google.protobuf.Empty ` | `tokenimpl.OwningRentalUnitValue ` | Query the unit price of the side chain resource cost resource cost = unit price \* quantity the quantity can be queried through GetResourceUsage. |
+| Create | `token.CreateInput ` | `google.protobuf.Empty ` | Create a new token/collection/nft. |
+| Issue | `token.IssueInput ` | `google.protobuf.Empty ` | Issuing some amount of tokens/collection/nft to an address is the action of increasing that addresses balance for the given token. The total amount of issued tokens must not exceed the total supply of the token and only the issuer (creator) of the token/collection/nft can issue tokens. Issuing token/collection/nft effectively increases the circulating supply. |
+| Transfer | `token.TransferInput ` | `google.protobuf.Empty ` | Transferring tokens simply is the action of transferring a given amount of tokens from one address to another. The origin or source address is the signer of the transaction. The balance of the sender must be higher than the amount that is transferred. |
+| TransferFrom | `token.TransferFromInput ` | `google.protobuf.Empty ` | The TransferFrom action will transfer a specified amount of tokens from one address to another. For this operation to succeed the from address needs to have approved (see allowances) enough tokens to Sender of this transaction. If successful the amount will be removed from the allowance. |
+| Approve | `token.ApproveInput ` | `google.protobuf.Empty ` | The approve action increases the allowance from the Sender to the Spender address enabling the Spender to call TransferFrom. |
+| UnApprove | `token.UnApproveInput ` | `google.protobuf.Empty ` | This is the reverse operation for Approve it will decrease the allowance. |
+| Lock | `token.LockInput ` | `google.protobuf.Empty ` | This method can be used to lock tokens. |
+| Unlock | `token.UnlockInput ` | `google.protobuf.Empty ` | This is the reverse operation of locking it un-locks some previously locked tokens. |
+| Burn | `token.BurnInput ` | `google.protobuf.Empty ` | This action will burn the specified amount of tokens removing them from the token’s Supply. |
+| SetPrimaryTokenSymbol | `token.SetPrimaryTokenSymbolInput ` | `google.protobuf.Empty ` | Set the primary token of side chain. |
+| CrossChainTransfer | `token.CrossChainTransferInput ` | `google.protobuf.Empty ` | This interface is used for cross-chain transfer. |
+| CrossChainReceiveToken | `token.CrossChainReceiveTokenInput ` | `google.protobuf.Empty ` | This method is used to receive cross-chain transfers. |
+| CrossChainCreateToken | `token.CrossChainCreateTokenInput ` | `google.protobuf.Empty ` | Create token/collection/nft on the other chain. Collection must be created before creating nft. |
+| InitializeFromParentChain | `token.InitializeFromParentChainInput ` | `google.protobuf.Empty ` | When the side chain is started the side chain is initialized with the parent chain information. |
+| ClaimTransactionFees | `token.TotalTransactionFeesMap ` | `google.protobuf.Empty ` | Handle the transaction fees charged by ChargeTransactionFees. |
+| ChargeTransactionFees | `token.ChargeTransactionFeesInput` | `token.ChargeTransactionFeesOutput ` | Used to collect transaction fees. |
+| ChargeUserContractTransactionFees | `token.ChargeTransactionFeesInput` | `token.ChargeTransactionFeesOutput ` | Used to collect transaction fees of user contract . |
+| CheckThreshold | `token.CheckThresholdInput ` | `google.protobuf.Empty ` | Check the token threshold. |
+| InitialCoefficients | `google.protobuf.Empty ` | `google.protobuf.Empty ` | Initialize coefficients of every type of tokens supporting charging fee. |
+| DonateResourceToken | `token.TotalResourceTokensMaps ` | `google.protobuf.Empty ` | Processing resource token received. |
+| ChargeResourceToken | `token.ChargeResourceTokenInput ` | `google.protobuf.Empty ` | A transaction resource fee is charged to implement the ACS8 standards. |
+| CheckResourceToken | `google.protobuf.Empty ` | `google.protobuf.Empty ` | Verify that the resource token are sufficient. |
+| SetSymbolsToPayTxSizeFee | `token.SymbolListToPayTxSizeFee ` | `google.protobuf.Empty ` | Set the list of tokens to pay transaction fees. |
+| UpdateCoefficientsForSender | `token.UpdateCoefficientsInput ` | `google.protobuf.Empty ` | Update the coefficient of the transaction fee calculation formula. | |
+| UpdateCoefficientsForContract | `token.UpdateCoefficientsInput ` | `google.protobuf.Empty ` | Update the coefficient of the transaction fee calculation formula. |
+| InitializeAuthorizedController | `google.protobuf.Empty ` | `google.protobuf.Empty ` | This method is used to initialize the governance organization for some functions including: the coefficient of the user transaction fee calculation formula the coefficient of the contract developer resource fee calculation formula and the side chain rental fee. |
+| GetTokenInfo | `token.GetTokenInfoInput ` | `token.TokenInfo ` | Query token information. |
+| GetNativeTokenInfo | `google.protobuf.Empty ` | `token.TokenInfo ` | Query native token information. |
+| GetResourceTokenInfo | `google.protobuf.Empty ` | `token.TokenInfoList <#token.TokenInfoList>` | Query resource token information. |
+| GetBalance | `token.GetBalanceInput ` | `token.GetBalanceOutput ` | Query the balance at the specified address. |
+| GetAllowance | `token.GetAllowanceInput ` | `token.GetAllowanceOutput ` | Query the account's allowance for other addresses |
+| IsInWhiteList | `token.IsInWhiteListInput ` | `google.protobuf.BoolValue ` | Check whether the token is in the whitelist of an address which can be called TransferFrom to transfer the token under the condition of not being credited. |
+| GetLockedAmount | `token.GetLockedAmountInput ` | `token.GetLockedAmountOutput <#token.GetLockedAmountOutput>` | Query the information for a lock. |
+| GetCrossChainTransferTokenContractAddress | `token.GetCrossChainTransferTokenContractAddressInput <#token.GetCrossChainTransferTokenContractAddressInput>` | `aelf.Address ` | Query the address of receiving token in cross-chain transfer. |
+| GetPrimaryTokenSymbol | `google.protobuf.Empty ` | `google.protobuf.StringValue ` | Query the name of the primary Token. |
+| GetCalculateFeeCoefficientsForContract | `google.protobuf.Int32Value ` | `token.CalculateFeeCoefficients ` | Query the coefficient of the transaction fee calculation formula. |
+| UpdateCoefficientsForContract | `token.UpdateCoefficientsInput ` | `google.protobuf.Empty ` | Update the coefficient of the transaction fee calculation formula. |
+| InitializeAuthorizedController | `google.protobuf.Empty ` | `google.protobuf.Empty ` | This method is used to initialize the governance organization for some functions including: the coefficient of the user transaction fee calculation formula the coefficient of the contract developer resource fee calculation formula and the side chain rental fee. |
+| GetTokenInfo | `token.GetTokenInfoInput ` | `token.TokenInfo ` | Query token information. |
+| GetNativeTokenInfo | `google.protobuf.Empty ` | `token.TokenInfo ` | Query native token information. |
+| GetResourceTokenInfo | `google.protobuf.Empty ` | `token.TokenInfoList ` | Query resource token information. |
+| GetBalance | `token.GetBalanceInput ` | `token.GetBalanceOutput` | Query the balance at the specified address. |
+| GetAllowance | `token.GetAllowanceInput ` | `token.GetAllowanceOutput ` | Query the account's allowance for other addresses |
+| IsInWhiteList | `token.IsInWhiteListInput ` | `google.protobuf.BoolValue ` | Check whether the token is in the whitelist of an address which can be called TransferFrom to transfer the token under the condition of not being credited. |
+| GetLockedAmount | `token.GetLockedAmountInput ` | `token.GetLockedAmountOutput ` | Query the information for a lock. |
+| GetCrossChainTransferTokenContractAddress | `token.GetCrossChainTransferTokenContractAddressInput ` | `aelf.Address ` | Query the address of receiving token in cross-chain transfer. |
+| GetPrimaryTokenSymbol | `google.protobuf.Empty ` | `google.protobuf.StringValue ` | Query the name of the primary Token. |
+| GetCalculateFeeCoefficientsForContract | `google.protobuf.Int32Value ` | `token.CalculateFeeCoefficients ` | Query the coefficient of the transaction fee calculation formula. |
+| GetCalculateFeeCoefficientsForSender | `google.protobuf.Empty ` | `token.CalculateFeeCoefficients ` | Query the coefficient of the transaction fee calculation formula. |
+| GetSymbolsToPayTxSizeFee | `google.protobuf.Empty ` | `token.SymbolListToPayTxSizeFee ` | Query tokens that can pay transaction fees. |
+| GetLatestTotalTransactionFeesMapHash | `google.protobuf.Empty ` | `aelf.Hash ` | Query the hash of the last input of ClaimTransactionFees. |
+| GetLatestTotalResourceTokensMapsHash | `google.protobuf.Empty ` | `aelf.Hash ` | Query the hash of the last input of DonateResourceToken. |
+| IsTokenAvailableForMethodFee | `google.protobuf.StringValue ` | `google.protobuf.BoolValue ` | |
+| SetTransactionFeeDelegations | `token.SetTransactionFeeDelegationsInput ` | `token.SetTransactionFeeDelegationsOutput <#token.SetTransactionFeeDelegationsOutput>` | Set delegation of transaction fee payment. |
+| SetTransactionFeeDelegateInfos | `token.SetTransactionFeeDelegateInfosInput ` | `google.protobuf.Empty ` | Set delegate info to pay transaction fee. |
+| RemoveTransactionFeeFreeAllowancesConfig | `token.RemoveTransactionFeeFreeAllowancesConfigInput ` | `google.protobuf.Empty ` | Remove allowance configurations for transaction fee exemption. |
+| RemoveTransactionFeeDelegator | `token.RemoveTransactionFeeDelegatorInput ` | `google.protobuf.Empty ` | Remove transaction fee delegator. |
+| RemoveTransactionFeeDelegatorInfos | `token.RemoveTransactionFeeDelegatorInfosInput ` | `google.protobuf.Empty ` | Remove delegator info of the delegatee. |
+| RemoveTransactionFeeDelegatee | `token.RemoveTransactionFeeDelegateeInput ` | `google.protobuf.Empty ` | Remove transaction fee delegatee. |
+| RemoveTransactionFeeDelegateeInfos | `token.RemoveTransactionFeeDelegateeInfosInput` | `google.protobuf.Empty ` | Remove delegatee info of the delegator. |
+| GetTransactionFeeDelegationsOfADelegatee | `token.GetTransactionFeeDelegationsOfADelegateeInput ` | `token.TransactionFeeDelegations ` | Get the delegation of transaction fee payment of a delegatee. |
+| GetTransactionFeeDelegateeList | `token.GetTransactionFeeDelegateeListInput ` | `token.GetTransactionFeeDelegateeListOutput ` | Get all delegatee list of a delegator. |
+| GetTransactionFeeDelegateInfo | `token.GetTransactionFeeDelegateInfoInput ` | `token.TransactionFeeDelegations ` | Get delegate info for transaction fee. | |
+
+## AElf.Standards.ACS1
+
+| Method Name | Request Type | Response Type | Description |
+| ------------------------- | ------------------------------ | ------------------------ | -------------------------------------------------------------------------------------------------- |
+| SetMethodFee | `acs1.MethodFees ` | `google.protobuf.Empty ` | Set the method fees for the specified method. Note that this will override all fees of the method. |
+| ChangeMethodFeeController | `AuthorityInfo ` | `google.protobuf.Empty ` | Change the method fee controller the default is parliament and default organization. |
+| GetMethodFee | `google.protobuf.StringValue ` | `acs1.MethodFees ` | Query method fee information by method name. |
+| GetMethodFeeController | `google.protobuf.Empty ` | `AuthorityInfo ` | Query the method fee controller. |
+
+## AElf.Standards.ACS2
+
+| Method Name | Request Type | Response Type | Description |
+| --------------- | -------------------------------------- | -------------------- | ------------------------------------------------------------------------ |
+| GetResourceInfo | `aelf.Transaction <#aelf.Transaction>` | `acs2.ResourceInfo ` | Gets the resource information that the transaction execution depends on. |
+
+**Contract Types**
+
+## AElf.Contracts.MultiToken
+
+### tokenimpl.AdvanceResourceTokenInput
+
+| Field | Type | Description | Label |
+| --------------------- | --------------- | ----------------------------------------- | ----- |
+| contract_address | `aelf.Address ` | The contract address to transfer. | |
+| resource_token_symbol | `string ` | The resource token symbol to transfer. | |
+| amount | `int64 ` | The amount of resource token to transfer. | |
+
+### tokenimpl.DeveloperFeeController
+
+| Field | Type | Description | Label |
+| --------------------- | ---------------- | ---------------------------------------------- | ----- |
+| root_controller | `AuthorityInfo ` | The association that governs the organization. | |
+| parliament_controller | `AuthorityInfo ` | The parliament organization of members. | |
+| developer_controller | `AuthorityInfo ` | The developer organization of members. | |
+
+### tokenimpl.GetVirtualAddressForLockingInput
+
+| Field | Type | Description | Label |
+| ------- | --------------- | ------------------------ | ----- |
+| address | `aelf.Address ` | The address of the lock. | |
+| lock_id | `aelf.Hash ` | The id of the lock. | |
+
+### tokenimpl.OwningRental
+
+| Field | Type | Description | Label |
+| --------------- | ----------------------------------- | ---------------------------------------------------- | -------- |
+| resource_amount | `OwningRental.ResourceAmountEntry ` | The amount of resource tokens owed symbol -> amount. | repeated |
+
+### tokenimpl.OwningRental.ResourceAmountEntry
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------- | ----- |
+| key | `string ` | | |
+| value | `int64 ` | | |
+
+### tokenimpl.OwningRentalUnitValue
+
+| Field | Type | Description | Label |
+| ------------------- | ----------------------------------------------- | ----------------------------------------- | -------- |
+| resource_unit_value | `OwningRentalUnitValue.ResourceUnitValueEntry ` | Resource unit price symbol -> unit price. | repeated |
+
+### tokenimpl.OwningRentalUnitValue.ResourceUnitValueEntry
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------- | ----- |
+| key | `string ` | | |
+| value | `int64 ` | | |
+
+## AElf.Standards.ACS1
+
+| Method Name | Request Type | Response Type | Description |
+| ------------------------- | ----------------------------- | ----------------------- | -------------------------------------------------------------------------------------------------- |
+| SetMethodFee | `acs1.MethodFees` | `google.protobuf.Empty` | Set the method fees for the specified method. Note that this will override all fees of the method. |
+| ChangeMethodFeeController | `AuthorityInfo` | `google.protobuf.Empty` | Change the method fee controller the default is parliament and default organization. |
+| GetMethodFee | `google.protobuf.StringValue` | `acs1.MethodFees` | Query method fee information by method name. |
+| GetMethodFeeController | `google.protobuf.Empty` | `AuthorityInfo` | Query the method fee controller. |
+
+## AElf.Standards.ACS2
+
+| Method Name | Request Type | Response Type | Description |
+| --------------- | ------------------ | ------------------- | ------------------------------------------------------------------------ |
+| GetResourceInfo | `aelf.Transaction` | `acs2.ResourceInfo` | Gets the resource information that the transaction execution depends on. |
+
+## AElf.Contracts.MultiToken - tokenimpl.AdvanceResourceTokenInput
+
+| Field | Type | Description | Label |
+| --------------------- | -------------- | ----------------------------------------- | ----- |
+| contract_address | `aelf.Address` | The contract address to transfer. | |
+| resource_token_symbol | `string` | The resource token symbol to transfer. | |
+| amount | `int64` | The amount of resource token to transfer. | |
+
+
+### tokenimpl.RegisterCrossChainTokenContractAddressInput
+
+| Field | Type | Description | Label |
+| ---------------------- | ----------------- | --------------------------------------------- | ----- |
+| from_chain_id | `int32` | The source chain id. | |
+| parent_chain_height | `int64` | The parent chain height of the transaction. | |
+| transaction_bytes | `bytes` | The raw bytes of the transfer transaction. | |
+| merkle_path | `aelf.MerklePath` | The merkle path created from the transaction. | |
+| token_contract_address | `aelf.Address` | The token contract address. | |
+
+
+### tokenimpl.ValidateTokenInfoExistsInput
+
+| Field | Type | Description | Label |
+| -------------- | ------------------- | ------------------------------------------------------------------ | ----- |
+| symbol | `string` | The symbol of the token. | |
+| token_name | `string` | The full name of the token. | |
+| total_supply | `int64` | The total supply of the token. | |
+| decimals | `int32` | The precision of the token. | |
+| issuer | `aelf.Address` | The address that has permission to issue the token/collection/nft. | |
+| is_burnable | `bool` | A flag indicating if this token is burnable. | |
+| issue_chain_id | `int32` | The chain id of the token. | |
+| external_info | `map` | Attributes or description of the token/collection/nft. | |
+| owner | `aelf.Address` | The address that has permission to create nft. | |
+
+### token.AllCalculateFeeCoefficients
+
+| Field | Type | Description | Label |
+| ----- | -------------------------- | ------------------------------------ | -------- |
+| value | `CalculateFeeCoefficients` | The coefficients of fee Calculation. | repeated |
+
+### token.ApproveInput
+
+| Field | Type | Description | Label |
+| ------- | -------------- | --------------------------------------------- | ----- |
+| spender | `aelf.Address` | The address that allowance will be increased. | |
+| symbol | `string` | The symbol of token to approve. | |
+| amount | `int64` | The amount of token to approve. | |
+
+### token.Approved
+
+| Field | Type | Description | Label |
+| ------- | -------------- | ---------------------------------------- | ----- |
+| owner | `aelf.Address` | The address of the token owner. | |
+| spender | `aelf.Address` | The address that allowance be increased. | |
+| symbol | `string` | The symbol of approved token. | |
+| amount | `int64` | The amount of approved token. | |
+
+### token.BurnInput
+
+| Field | Type | Description | Label |
+| ------ | -------- | ---------------------------- | ----- |
+| symbol | `string` | The symbol of token to burn. | |
+| amount | `int64` | The amount of token to burn. | |
+
+### token.Burned
+
+| Field | Type | Description | Label |
+| ------ | -------------- | ------------------------------------ | ----- |
+| burner | `aelf.Address` | The address who wants to burn token. | |
+| symbol | `string` | The symbol of burned token. | |
+| amount | `int64` | The amount of burned token. | |
+
+### token.CalculateFeeAlgorithmUpdated
+
+| Field | Type | Description | Label |
+| ------------------------- | ----------------------------- | -------------------------------------------------- | ----- |
+| all_type_fee_coefficients | `AllCalculateFeeCoefficients` | All calculate fee coefficients after modification. | |
+
+### token.CalculateFeeCoefficients
+
+| Field | Type | Description | Label |
+| ----------------------- | ------------------------------- | ------------------------------------------ | -------- |
+| fee_token_type | `int32` | The resource fee type like READ WRITE etc. | |
+| piece_coefficients_list | `CalculateFeePieceCoefficients` | Coefficients of one single piece. | repeated |
+
+### token.CalculateFeePieceCoefficients
+
+| Field | Type | Description | Label |
+| ----- | ------- | ---------------------------------------------------------------------------------------------------------------------- | -------- |
+| value | `int32` | Coefficients of one single piece. The first char is its type: liner / power. The second char is its piece upper bound. | repeated |
+
+### token.ChainPrimaryTokenSymbolSet
+
+| Field | Type | Description | Label |
+| ------------ | -------- | -------------------- | ----- |
+| token_symbol | `string` | The symbol of token. | |
+
+### token.ChargeResourceTokenInput
+
+| Field | Type | Description | Label |
+| -------- | --------------------------------------- | --------------------------------------------------- | -------- |
+| cost_dic | `ChargeResourceTokenInput.CostDicEntry` | Collection of charge resource token Symbol->Amount. | repeated |
+| caller | `aelf.Address` | The sender of the transaction. | |
+
+### token.ChargeResourceTokenInput.CostDicEntry
+
+| Field | Type | Description | Label |
+| ----- | -------- | ----------- | ----- |
+| key | `string` | | |
+| value | `int64` | | |
+
+### token.ChargeTransactionFeesInput
+
+| Field | Type | Description | Label |
+| -------------------------- | ---------------------- | ------------------------------------ | -------- |
+| method_name | `string` | The method name of transaction. | |
+| contract_address | `aelf.Address` | The contract address of transaction. | |
+| transaction_size_fee | `int64` | The amount of transaction size fee. | |
+| symbols_to_pay_tx_size_fee | `SymbolToPayTxSizeFee` | Transaction fee token information. | repeated |
+
+### token.ChargeTransactionFeesOutput
+
+| Field | Type | Description |
+| -------------------- | -------- | ---------------------------------- |
+| success | `bool` | Whether the charge was successful. |
+| charging_information | `string` | The charging information. |
+
+### token.CheckThresholdInput
+
+| Field | Type | Description |
+| ------------------- | ------------------------ | --------------------------------------- |
+| sender | `aelf.Address` | The sender of the transaction. |
+| symbol_to_threshold | `SymbolToThresholdEntry` | The threshold to set Symbol->Threshold. |
+| is_check_allowance | `bool` | Whether to check the allowance. |
+
+### token.CheckThresholdInput.SymbolToThresholdEntry
+
+| Field | Type | Description |
+| ----- | -------- | ----------- |
+| key | `string` | |
+| value | `int64` | |
+
+### token.ConfigTransactionFeeFreeAllowancesInput
+
+| Field | Type | Description |
+| ----- | ----------------------------------- | ------------------------------------ |
+| value | `ConfigTransactionFeeFreeAllowance` | The configuration of free allowance. |
+
+### token.ConfigTransactionFeeFreeAllowance
+
+| Field | Type | Description |
+| ------------------------------- | ------------------------------ | --------------------------------------------------------------------------------------------------- |
+| symbol | `string` | The symbol of threshold token. |
+| transaction_fee_free_allowances | `TransactionFeeFreeAllowances` | The allowance of each token when a user gets his allowance of the full amount. |
+| refresh_seconds | `int64` | The time needed for a user’s allowance to be refreshed back to the full amount. Unit: second |
+| threshold | `int64` | The required amount of Token in possession for a user to be eligible for transaction fee exemption. |
+
+### token.TransactionFeeFreeAllowances
+
+| Field | Type | Description |
+| ----- | ----------------------------- | --------------------------- |
+| value | `TransactionFeeFreeAllowance` | The allowance of the token. |
+
+### token.TransactionFeeFreeAllowance
+
+| Field | Type | Description |
+| ------ | -------- | --------------------------------- |
+| symbol | `string` | Token symbol. |
+| amount | `int64` | The amount of fee free allowance. |
+
+### token.TransactionFeeFreeAllowanceConfig
+
+| Field | Type | Description |
+| --------------- | -------------------------------- | --------------------------------------------------------------------------------------------------- |
+| symbol | `string` | The symbol of threshold token. |
+| free_allowances | `TransactionFeeFreeAllowanceMap` | The allowance of each token when a user gets his allowance of the full amount. |
+| refresh_seconds | `int64` | The time needed for a user’s allowance to be refreshed back to the full amount. Unit: second |
+| threshold | `int64` | The required amount of Token in possession for a user to be eligible for transaction fee exemption. |
+
+### token.TransactionFeeFreeAllowanceMap
+
+| Field | Type | Description |
+| ----- | ----------------------------------------- | ------------------------------------ |
+| map | `map` | free allowance symbol free allowance |
+
+### token.ContractTotalResourceTokens
+
+| Field | Type | Description |
+| ---------------- | ------------------------ | -------------------------- |
+| contract_address | `aelf.Address` | The contract address. |
+| tokens_map | `TotalResourceTokensMap` | Resource tokens to charge. |
+
+### token.CreateInput
+
+| Field | Type | Description |
+| --------------- | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| symbol | `string` | The symbol of the token/collection/nft. |
+| token_name | `string` | The full name of the token/collection/nft. |
+| total_supply | `int64` | The total supply of the token/collection/nft. |
+| decimals | `int32` | The precision of the toke/collection/nft. |
+| issuer | `aelf.Address` | The address that has permission to issue the token/collection/nft. |
+| is_burnable | `bool` | A flag indicating if this token/collection/nft is burnable. |
+| lock_white_list | `aelf.Address` | A whitelist address list used to lock tokens/collection/nft. |
+| issue_chain_id | `int32` | The chain id of the token/collection/nft. |
+| external_info | `map` | Attributes or description of the token/collcection/nft. There is no mandatory constraint on the naming of the key. But it is recommended to use **nft as the prefix key to set the nft attribute such as**nft_image_url. |
+| owner | `aelf.Address` | The address that has permission to create nft. |
+
+### token.CrossChainCreateTokenInput
+
+| Field | Type | Description | Label |
+| ------------------- | ----------------- | -------------------------------------------------------------------------- | ----- |
+| from_chain_id | `int32` | The chain id of the chain on which the token was created. | |
+| parent_chain_height | `int64` | The height of the transaction that created the token/collection/nft. | |
+| transaction_bytes | `bytes` | The transaction that created the token/collection/nft. | |
+| merkle_path | `aelf.MerklePath` | The merkle path created from the transaction that created the transaction. | |
+
+### token.CrossChainReceiveTokenInput
+
+| Field | Type | Description | Label |
+| -------------------------- | ----------------- | ------------------------------------------------------ | ----- |
+| from_chain_id | `int32` | The source chain id. | |
+| parent_chain_height | `int64` | The height of the transfer transaction. | |
+| transfer_transaction_bytes | `bytes` | The raw bytes of the transfer transaction. | |
+| merkle_path | `aelf.MerklePath` | The merkle path created from the transfer transaction. | |
+
+### token.CrossChainReceived
+
+| Field | Type | Description | Label |
+| ----------------------- | -------------- | ---------------------------------------------------- | ----- |
+| from | `aelf.Address` | The source address of the transferred token. | |
+| to | `aelf.Address` | The destination address of the transferred token. | |
+| symbol | `string` | The symbol of the received token. | |
+| amount | `int64` | The amount of the received token. | |
+| memo | `string` | The memo. | |
+| from_chain_id | `int32` | The destination chain id. | |
+| issue_chain_id | `int32` | The chain id of the token. | |
+| parent_chain_height | `int64` | The parent chain height of the transfer transaction. | |
+| transfer_transaction_id | `aelf.Hash` | The id of transfer transaction. | |
+
+### token.CrossChainTransferInput
+
+| Field | Type | Description | Label |
+| -------------- | -------------- | -------------------------------- | ----- |
+| to | `aelf.Address` | The receiver of transfer. | |
+| symbol | `string` | The symbol of token. | |
+| amount | `int64` | The amount of token to transfer. | |
+| memo | `string` | The memo. | |
+| to_chain_id | `int32` | The destination chain id. | |
+| issue_chain_id | `int32` | The chain id of the token. | |
+
+### token.CrossChainTransferred
+
+| Field | Type | Description | Label |
+| -------------- | -------------- | ------------------------------------------------- | ----- |
+| from | `aelf.Address` | The source address of the transferred token. | |
+| to | `aelf.Address` | The destination address of the transferred token. | |
+| symbol | `string` | The symbol of the transferred token. | |
+| amount | `int64` | The amount of the transferred token. | |
+| memo | `string` | The memo. | |
+| to_chain_id | `int32` | The destination chain id. | |
+| issue_chain_id | `int32` | The chain id of the token. | |
+
+### token.ExtraTokenListModified
+
+| Field | Type | Description | Label |
+| ------------------------------ | -------------------------- | ---------------------------------- | ----- |
+| symbol_list_to_pay_tx_size_fee | `SymbolListToPayTxSizeFee` | Transaction fee token information. | |
+
+### token.GetAllowanceInput
+
+| Field | Type | Description | Label |
+| ------- | -------------- | ------------------------------- | ----- |
+| symbol | `string` | The symbol of token. | |
+| owner | `aelf.Address` | The address of the token owner. | |
+| spender | `aelf.Address` | The address of the spender. | |
+
+### token.GetAllowanceOutput
+
+| Field | Type | Description | Label |
+| --------- | -------------- | ------------------------------- | ----- |
+| symbol | `string` | The symbol of token. | |
+| owner | `aelf.Address` | The address of the token owner. | |
+| spender | `aelf.Address` | The address of the spender. | |
+| allowance | `int64` | The amount of allowance. | |
+
+### token.GetBalanceInput
+
+| Field | Type | Description | Label |
+| ------ | -------------- | -------------------------------- | ----- |
+| symbol | `string` | The symbol of token. | |
+| owner | `aelf.Address` | The target address of the query. | |
+
+### token.GetBalanceOutput
+
+| Field | Type | Description | Label |
+| ------- | -------------- | -------------------------------- | ----- |
+| symbol | `string` | The symbol of token. | |
+| owner | `aelf.Address` | The target address of the query. | |
+| balance | `int64` | The balance of the owner. | |
+
+### token.GetCrossChainTransferTokenContractAddressInput
+
+| Field | Type | Description | Label |
+| ------- | ------- | ------------- | ----- |
+| chainId | `int32` | The chain id. | |
+
+### token.GetLockedAmountInput
+
+| Field | Type | Description | Label |
+| ------- | -------------- | ------------------------ | ----- |
+| address | `aelf.Address` | The address of the lock. | |
+| symbol | `string` | The token symbol. | |
+| lock_id | `aelf.Hash` | The id of the lock. | |
+
+### token.GetLockedAmountOutput
+
+| Field | Type | Description | Label |
+| ------- | -------------- | ------------------------ | ----- |
+| address | `aelf.Address` | The address of the lock. | |
+| symbol | `string` | The token symbol. | |
+| lock_id | `aelf.Hash` | The id of the lock. | |
+| amount | `int64` | The locked amount. | |
+
+### token.GetTokenInfoInput
+
+| Field | Type | Description | Label |
+| ------ | -------- | -------------------- | ----- |
+| symbol | `string` | The symbol of token. | |
+
+### token.GetTransactionFeeDelegateesInput
+
+| Field | Type | Description | Label |
+| ----------------- | -------------- | ------------------------- | ----- |
+| delegator_address | `aelf.Address` | The address of delegator. | |
+
+### token.GetTransactionFeeDelegateeListInput
+
+| Field | Type | Description | Label |
+| ----------------- | -------------- | ------------------------- | ----- |
+| delegator_address | `aelf.Address` | The address of delegator. | |
+| contract_address | `aelf.Address` | The contract address. | |
+| method_name | `string` | The method name. | |
+
+### token.GetTransactionFeeDelegateeListOutput
+
+| Field | Type | Description | Label |
+| ------------------- | -------------- | ------------------------------ | -------- |
+| delegatee_addresses | `aelf.Address` | The address list of delegatee. | repeated |
+
+### token.GetTransactionFeeDelegateInfoInput
+
+| Field | Type | Description | Label |
+| ----------------- | -------------- | ------------------------- | ----- |
+| delegator_address | `aelf.Address` | The address of delegator. | |
+| delegatee_address | `aelf.Address` | The address of delegatee. | |
+| contract_address | `aelf.Address` | The contract address. | |
+| method_name | `string` | The method name. | |
+
+### token.GetTransactionFeeFreeAllowancesConfigOutput
+
+| Field | Type | Description | Label |
+| ----- | ------------------------------------------ | ---------------------------------------------------- | -------- |
+| value | `token.TransactionFeeFreeAllowanceConfigs` | The configuration of transaction fee free allowance. | repeated |
+
+### token.InitializeFromParentChainInput
+
+| Field | Type | Description | Label |
+| ----------------------------------------- | --------------------------------------------------------------------------- | ------------------------------ | -------- |
+| resource_amount | `InitializeFromParentChainInput.ResourceAmountEntry` | The amount of resource. | repeated |
+| registered_other_token_contract_addresses | `InitializeFromParentChainInput.RegisteredOtherTokenContractAddressesEntry` | The token contract addresses. | repeated |
+| creator | `aelf.Address` | The creator of the side chain. | |
+
+### token.InitializeFromParentChainInput.RegisteredOtherTokenContractAddressesEntry
+
+| Field | Type | Description | Label |
+| ----- | -------------- | ----------- | ----- |
+| key | `int32` | | |
+| value | `aelf.Address` | | |
+
+### token.InitializeFromParentChainInput.ResourceAmountEntry
+
+| Field | Type | Description | Label |
+| ----- | -------- | ----------- | ----- |
+| key | `string` | | |
+| value | `int32` | | |
+
+### token.IsInWhiteListInput
+
+| Field | Type | Description | Label |
+| ------- | -------------- | --------------------- | ----- |
+| symbol | `string` | The symbol of token. | |
+| address | `aelf.Address` | The address to check. | |
+
+### token.IssueInput
+
+| Field | Type | Description | Label |
+| ------ | -------------- | ----------------------------------------- | ----- |
+| symbol | `string` | The token/collection/nft symbol to issue. | |
+| amount | `int64` | The token/collection/nft amount to issue. | |
+| memo | `string` | The memo. | |
+| to | `aelf.Address` | The target address to issue. | |
+
+### token.Issued
+
+| Field | Type | Description | Label |
+| ------ | -------------- | --------------------------- | ----- |
+| symbol | `string` | The symbol of issued token. | |
+| amount | `int64` | The amount of issued token. | |
+| memo | `string` | The memo. | |
+| to | `aelf.Address` | The issued target address. | |
+
+### token.LockInput
+
+| Field | Type | Description | Label |
+| ------- | -------------- | -------------------------------------- | ----- |
+| address | `aelf.Address` | The one who wants to lock their token. | |
+| lock_id | `aelf.Hash` | The id of the lock. | |
+| symbol | `string` | The symbol of the token to lock. | |
+| usage | `string` | A memo. | |
+| amount | `int64` | The amount of tokens to lock. | |
+
+### token.RemoveTransactionFeeDelegatorInfosInput
+
+| Field | Type | Description | Label |
+| ------------------------- | --------------------------- | --------------------------------- | -------- |
+| delegator_address | `aelf.Address` | The address of delegator. | |
+| delegate_transaction_list | `token.DelegateTransaction` | The transaction list of delegate. | repeated |
+
+### token.RemoveTransactionFeeDelegateeInfosInput
+
+| Field | Type | Description | Label |
+| ------------------------- | --------------------------- | --------------------------------- | -------- |
+| delegator_address | `aelf.Address` | The address of delegatee. | |
+| delegate_transaction_list | `token.DelegateTransaction` | The transaction list of delegate. | repeated |
+
+### token.DelegateTransaction
+
+| Field | Type | Description | Label |
+| ---------------- | --------------- | --------------------- | ----- |
+| contract_address | `aelf.Address ` | The contract address. | |
+| method_name | `string ` | The method name. | |
+
+### token.RentalAccountBalanceInsufficient
+
+| Field | Type | Description | Label |
+| ------ | --------- | -------------------------------------------------- | ----- |
+| symbol | `string ` | The symbol of insufficient rental account balance. | |
+| amount | `int64 ` | The balance of the account. | |
+
+### token.RentalCharged
+
+| Field | Type | Description | Label |
+| -------- | --------------- | --------------------------------- | ----- |
+| symbol | `string ` | The symbol of rental fee charged. | |
+| amount | `int64 ` | The amount of rental fee charged. | |
+| payer | `aelf.Address ` | The payer of rental fee. | |
+| receiver | `aelf.Address ` | The receiver of rental fee. | |
+
+### token.RemoveTransactionFeeFreeAllowancesConfigInput
+
+| Field | Type | Description | Label |
+| ------- | --------- | ------------------------------------------------------------------------------- | -------- |
+| symbols | `string ` | List of symbols to remove from configuration of transaction fee free allowance. | repeated |
+
+### token.ResourceTokenClaimed
+
+| Field | Type | Description | Label |
+| -------- | --------------- | -------------------------- | ----- |
+| symbol | `string ` | The symbol of fee claimed. | |
+| amount | `int64 ` | The amount of fee claimed. | |
+| payer | `aelf.Address ` | The payer of fee. | |
+| receiver | `aelf.Address ` | The receiver of fee. | |
+
+### token.SetTransactionFeeDelegateInfos
+
+| Field | Type | Description | Label |
+| ------------------ | --------------------- | --------------------------------------------- | -------- |
+| delegator_address | `aelf.Address ` | The address of delegator. | |
+| delegate_info_list | `token.DelegateInfo ` | The delegate information for the transaction. | repeated |
+
+### token.DelegateInfo
+
+| Field | Type | Description | Label |
+| ------------------- | -------------------- | --------------------------------------------------------------- | ----- |
+| delegations | `map ` | token symbol amount | |
+| contract_address | `aelf.Address ` | The contract address. | |
+| method_name | `string ` | The method name. | |
+| isUnlimitedDelegate | `bool ` | Whether to pay transaction fee continuously without limitation. | |
+
+### token.SetPrimaryTokenSymbolInput
+
+| Field | Type | Description | Label |
+| ------ | --------- | ------------------------ | ----- |
+| symbol | `string ` | The symbol of the token. | |
+
+### token.SymbolListToPayTxSizeFee
+
+| Field | Type | Description | Label |
+| -------------------------- | ----------------------- | ---------------------------------- | -------- |
+| symbols_to_pay_tx_size_fee | `SymbolToPayTxSizeFee ` | Transaction fee token information. | repeated |
+
+### token.SymbolToPayTxSizeFee
+
+| Field | Type | Description | Label |
+| ------------------ | --------- | ----------------------------------- | ----- |
+| token_symbol | `string ` | The symbol of token. | |
+| base_token_weight | `int32 ` | The charge weight of primary token. | |
+| added_token_weight | `int32 ` | The new added token charge weight. | |
+
+### token.TransactionFeeClaimed
+
+| Field | Type | Description | Label |
+| -------- | --------------- | -------------------------- | ----- |
+| symbol | `string ` | The symbol of fee claimed. | |
+| amount | `int64 ` | The amount of fee claimed. | |
+| receiver | `aelf.Address ` | The receiver of fee. | |
+
+### token.TransactionFeeFreeAllowancesMap
+
+| Field | Type | Description | Label |
+| ----- | --------------------------------------------- | -------------------------------- | ----- |
+| map | `map ` | threshold symbol free allowances | |
+
+### token.TokenCreated
+
+| Field | Type | Description | Label |
+| -------------- | --------------- | -------------------------------------------- | ----- |
+| symbol | `string ` | The symbol of the token. | |
+| token_name | `string ` | The full name of the token. | |
+| total_supply | `int64 ` | The total supply of the token. | |
+| decimals | `int32 ` | The precision of the token. | |
+| issuer | `aelf.Address ` | The address that created the token. | |
+| is_burnable | `bool ` | A flag indicating if this token is burnable. | |
+| issue_chain_id | `int32 ` | The chain id of the token. | |
+
+### token.TokenInfo
+
+| Field | Type | Description | Label |
+| -------------- | --------------- | -------------------------------------------- | ----- |
+| symbol | `string ` | The symbol of the token. | |
+| token_name | `string ` | The full name of the token. | |
+| supply | `int64 ` | The current supply of the token. | |
+| total_supply | `int64 ` | The total supply of the token. | |
+| decimals | `int32 ` | The precision of the token. | |
+| issuer | `aelf.Address ` | The address that created the token. | |
+| is_burnable | `bool ` | A flag indicating if this token is burnable. | |
+| issue_chain_id | `int32 ` | The chain id of the token. | |
+| issued | `int64 ` | The amount of issued tokens. | |
+
+### token.TokenInfoList
+
+| Field | Type | Description | Label |
+| ----- | ------------ | -------------------------- | -------- |
+| value | `TokenInfo ` | List of token information. | repeated |
+
+### token.TotalResourceTokensMap
+
+| Field | Type | Description | Label |
+| ----- | ------------------------------------ | ----------------------------------------- | -------- |
+| value | `TotalResourceTokensMap.ValueEntry ` | Resource token dictionary Symbol->Amount. | repeated |
+
+### token.TotalResourceTokensMap.ValueEntry
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------- | ----- |
+| key | `string ` | | |
+| value | `int64 ` | | |
+
+### token.TotalResourceTokensMaps
+
+| Field | Type | Description | Label |
+| ------------ | ------------------------------ | --------------------------------------------------- | -------- |
+| value | `ContractTotalResourceTokens ` | Resource tokens to charge. | repeated |
+| block_hash | `aelf.Hash ` | The hash of the block processing the transaction. | |
+| block_height | `int64 ` | The height of the block processing the transaction. | |
+
+### token.TotalTransactionFeesMap
+
+| Field | Type | Description | Label |
+| ------------ | ------------------------------------- | ------------------------------------------------------------ | -------- |
+| value | `TotalTransactionFeesMap.ValueEntry ` | Token dictionary that charge transaction fee Symbol->Amount. | repeated |
+| block_hash | `aelf.Hash ` | The hash of the block processing the transaction. | |
+| block_height | `int64 ` | The height of the block processing the transaction. | |
+
+### token.TransactionFeeCharged
+
+| Field | Type | Description | Label |
+| --------------- | ------------ | --------------------------------------------------- | -------- |
+| symbol | `string ` | Resource tokens to charge. | repeated |
+| amount | `int64 ` | The hash of the block processing the transaction. | |
+| chargingAddress | `aelf.Hash ` | The height of the block processing the transaction. | |
+
+### token.TotalTransactionFeesMap.ValueEntry
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------- | ----- |
+| key | `string ` | | |
+| value | `int64 ` | | |
+
+### token.TransactionFeeBill
+
+| Field | Type | Description | Label |
+| -------- | ---------------------------------- | ------------------------------------------- | -------- |
+| fees_map | `TransactionFeeBill.FeesMapEntry ` | The transaction fee dictionary Symbol->fee. | repeated |
+
+### token.TransactionFeeBill.FeesMapEntry
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------- | ----- |
+| key | `string ` | | |
+| value | `int64 ` | | |
+
+### token.TransferFromInput
+
+| Field | Type | Description | Label |
+| ------ | --------------- | ------------------------------------- | ----- |
+| from | `aelf.Address ` | The source address of the token. | |
+| to | `aelf.Address ` | The destination address of the token. | |
+| symbol | `string ` | The symbol of the token to transfer. | |
+| amount | `int64 ` | The amount to transfer. | |
+| memo | `string ` | The memo. | |
+
+### token.TransferInput
+
+| Field | Type | Description | Label |
+| ------ | --------------- | ----------------------------- | ----- |
+| to | `aelf.Address ` | The receiver of the token. | |
+| symbol | `string ` | The token symbol to transfer. | |
+| amount | `int64 ` | The amount to transfer. | |
+| memo | `string ` | The memo. | |
+
+### token.Transferred
+
+| Field | Type | Description | Label |
+| ------ | --------------- | ------------------------------------------------- | ----- |
+| from | `aelf.Address ` | The source address of the transferred token. | |
+| to | `aelf.Address ` | The destination address of the transferred token. | |
+| symbol | `string ` | The symbol of the transferred token. | |
+| amount | `int64 ` | The amount of the transferred token. | |
+| memo | `string ` | The memo. | |
+
+### token.UnApproveInput
+
+| Field | Type | Description | Label |
+| ------- | --------------- | --------------------------------------------- | ----- |
+| spender | `aelf.Address ` | The address that allowance will be decreased. | |
+| symbol | `string ` | The symbol of token to un-approve. | |
+| amount | `int64 ` | The amount of token to un-approve. | |
+
+### token.UnApproved
+
+| Field | Type | Description | Label |
+| ------- | --------------- | ---------------------------------------- | ----- |
+| owner | `aelf.Address ` | The address of the token owner. | |
+| spender | `aelf.Address ` | The address that allowance be decreased. | |
+| symbol | `string ` | The symbol of un-approved token. | |
+| amount | `int64 ` | The amount of un-approved token. | |
+
+### token.UnlockInput
+
+| Field | Type | Description | Label |
+| ------- | --------------- | ----------------------------------- | ----- |
+| address | `aelf.Address ` | The one want to un-lock his token. | |
+| lock_id | `aelf.Hash ` | Id of the lock. | |
+| symbol | `string ` | The symbol of the token to un-lock. | |
+| usage | `string `\*\* | A memo. | |
+| amount | `int64 `\*\* | The amount of tokens to un-lock. | |
+
+### token.UpdateCoefficientsInput
+
+| Field | Type | Description | Label |
+| ------------- | --------------------------- | -------------------------------- | -------- |
+| piece_numbers | `int32 ` | The specify pieces gonna update. | repeated |
+| coefficients | `CalculateFeeCoefficients ` | Coefficients of one single type. | |
+
+### token.FeeTypeEnum
+
+| Name | Number | Description |
+| ------- | ------ | ----------- |
+| READ | 0 | |
+| STORAGE | 1 | |
+| WRITE | 2 | |
+| TRAFFIC | 3 | |
+| TX | 4 | |
+
+### token.SetTransactionFeeDelegationsInput
+
+| Field | Type | Description | Label |
+| ----------------- | -------------------- | -------------------------- | ----- |
+| delegator_address | `aelf.Addresss ` | The address of delegator. | |
+| delegations | `map ` | \ | |
+
+### token.SetTransactionFeeDelegationsOutput
+
+| Field | Type | Description | Label |
+| ------- | ------- | ------------------------------- | ----- |
+| success | `bool ` | Whether set delegation success. | |
+
+### token.RemoveTransactionFeeDelegatorInput
+
+| Field | Type | Description | Label |
+| ----------------- | ---------------- | ------------------------- | ----- |
+| delegator_address | `aelf.Addresss ` | The address of delegator. | |
+
+### token.RemoveTransactionFeeDelegateeInput
+
+| Field | Type | Description | Label |
+| ----------------- | ---------------- | ------------------------- | ----- |
+| delegatee_address | `aelf.Addresss ` | The address of delegatee. | |
+
+### token.MethodFeeFreeAllowance
+
+| Field | Type | Description | Label |
+| ------ | --------- | -------------------------------- | ----- |
+| symbol | `string ` | Token symbol | |
+| amount | `int64 ` | The amount of fee free allowance | |
+
+### token.GetTransactionFeeDelegationsOfADelegateeInput
+
+| Field | Type | Description | Label |
+| ----------------- | ---------------- | ------------------------- | ----- |
+| delegatee_address | `aelf.Addresss ` | The address of delegatee. | |
+| delegator_address | `aelf.Addresss ` | The address of delegator. | |
+
+### token.TransactionFeeDelegations
+
+| Field | Type | Description | Label |
+| ------------ | -------------------- | ------------------------------------------------------------ | ----- |
+| delegations | `map ` | The number of tokens allowed to be delegated | |
+| block_height | `int64 ` | The block height when the information of delegation is added | |
+
+## AElf.Standards.ACS1
+
+### acs1.MethodFee
+
+| Field | Type | Description | Label |
+| --------- | --------- | ----------------------------------- | ----- |
+| symbol | `string ` | The token symbol of the method fee. | |
+| basic_fee | `int64 ` | The amount of fees to be charged. | |
+
+### acs1.MethodFees
+
+| Field | Type | Description | Label |
+| ---------------- | ------------ | ------------------------------------------------------------ | -------- |
+| method_name | `string ` | The name of the method to be charged. | |
+| fees | `MethodFee ` | List of fees to be charged. | repeated |
+| is_size_fee_free | `bool ` | Optional based on the implementation of SetMethodFee method. | |
+
+## AElf.Standards.ACS2
+
+### acs2.ResourceInfo
+
+| Field | Type | Description | Label |
+| ------------------ | ----------------------- | ---------------------------------------------------- | -------- |
+| write_paths | `aelf.ScopedStatePath ` | The state path that depends on when writing. | repeated |
+| read_paths | `aelf.ScopedStatePath ` | The state path that depends on when reading. | repeated |
+| non_parallelizable | `bool ` | Whether the transaction is not executed in parallel. | |
+
+## AElf.Types
+
+### aelf.Address
+
+| Field | Type | Description | Label |
+| ----- | -------- | ----------- | ----- |
+| value | `bytes ` | | |
+
+### aelf.BinaryMerkleTree
+
+| Field | Type | Description | Label |
+| ---------- | -------- | ----------------------- | -------- |
+| nodes | `Hash ` | The leaf nodes. | repeated |
+| root | `Hash ` | The root node hash. | |
+| leaf_count | `int32 ` | The count of leaf node. | |
+
+### aelf.Hash
+
+| Field | Type | Description | Label |
+| ----- | -------- | ----------- | ----- |
+| value | `bytes ` | | |
+
+### aelf.LogEvent
+
+| Field | Type | Description | Label |
+| ----------- | ---------- | ----------------------------------------- | -------- |
+| address | `Address ` | The contract address. | |
+| name | `string ` | The name of the log event. | |
+| indexed | `bytes ` | The indexed data used to calculate bloom. | repeated |
+| non_indexed | `bytes ` | The non indexed data. | |
+
+### aelf.MerklePath
+
+| Field | Type | Description | Label |
+| ----------------- | ----------------- | ---------------------- | -------- |
+| merkle_path_nodes | `MerklePathNode ` | The merkle path nodes. | repeated |
+
+### aelf.MerklePathNode
+
+| Field | Type | Description | Label |
+| ------------------ | ------- | -------------------------------- | ----- |
+| hash | `Hash ` | The node hash. | |
+| is_left_child_node | `bool ` | Whether it is a left child node. | |
+
+### aelf.SInt32Value
+
+| Field | Type | Description | Label |
+| ----- | -------- | ----------- | ----- |
+| value | `sint32` | | |
+
+### aelf.SInt64Value
+
+| Field | Type | Description | Label |
+| ----- | -------- | ----------- | ----- |
+| value | `sint64` | | |
+
+### aelf.ScopedStatePath
+
+| Field | Type | Description | Label |
+| ------- | ------------ | ----------------------------------------------------- | ----- |
+| address | `Address ` | The scope address which will be the contract address. | |
+| path | `StatePath ` | The path of contract state. | |
+
+### aelf.SmartContractRegistration
+
+| Field | Type | Description | Label |
+| ------------------ | --------- | ------------------------------------- | ----- |
+| category | `sint32 ` | The category of contract code(0: C#). | |
+| code | `bytes ` | The byte array of the contract code. | |
+| code_hash | `Hash ` | The hash of the contract code. | |
+| is_system_contract | `bool ` | Whether it is a system contract. | |
+| version | `int32 ` | The version of the current contract. | |
+
+### aelf.StatePath
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------------------------------- | -------- |
+| parts | `string ` | The partial path of the state path. | repeated |
+
+### aelf.Transaction
+
+| Field | Type | Description | Label |
+| ---------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----- |
+| from | `Address ` | The address of the sender of the transaction. | |
+| to | `Address ` | The address of the contract when calling a contract. | |
+| ref_block_number | `int64 ` | The height of the referenced block hash. | |
+| ref_block_prefix | `bytes ` | The first four bytes of the referenced block hash. | |
+| method_name | `string ` | The name of a method in the smart contract at the To address. | |
+| params | `bytes ` | The parameters to pass to the smart contract method. | |
+| signature | `bytes ` | When signing a transaction it’s actually a subset of the fields: from/to and the target method as well as the parameter that were given. It also contains the reference block number and prefix. | |
+
+### aelf.TransactionExecutingStateSet
+
+| Field | Type | Description | Label |
+| ------- | --------------------------------------------- | ------------------- | -------- |
+| writes | `TransactionExecutingStateSet.WritesEntry ` | The changed states. | repeated |
+| reads | `TransactionExecutingStateSet.ReadsEntry ` | The read states. | repeated |
+| deletes | `TransactionExecutingStateSet.DeletesEntry >` | The deleted states. | repeated |
+
+### aelf.TransactionExecutingStateSet.DeletesEntry
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------- | ----- |
+| key | `string ` | | |
+| value | `bool ` | | |
+
+### aelf.TransactionExecutingStateSet.ReadsEntry
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------- | ----- |
+| key | `string ` | | |
+| value | `bool ` | | |
+
+### aelf.TransactionExecutingStateSet.WritesEntry
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------- | ----- |
+| key | `string ` | | |
+| value | `bytes ` | | |
+
+### aelf.TransactionResult
+
+| Field | Type | Description | Label |
+| -------------- | -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- |
+| transaction_id | `Hash ` | The transaction id. | |
+| status | `TransactionResultStatus ` | The transaction result status. | |
+| logs | `LogEvent ` | The log events. | repeated |
+| bloom | `bytes ` | Bloom filter for transaction logs. A transaction log event can be defined in the contract and stored in the bloom filter after the transaction is executed. Through this filter we can quickly search for and determine whether a log exists in the transaction result. | |
+| return_value | `bytes ` | The return value of the transaction execution. | |
+| block_number | `int64 ` | The height of the block that packages the transaction. | |
+| block_hash | `Hash ` | The hash of the block that packages the transaction. | |
+| error | `string ` | Failed execution error message. | |
+
+### aelf.TransactionResultStatus
+
+| Name | Number | Description |
+| ---------------------- | ------ | --------------------------------------------------------------------------------- |
+| NOT_EXISTED | 0 | The execution result of the transaction does not exist. |
+| PENDING | 1 | The transaction is in the transaction pool waiting to be packaged. |
+| FAILED | 2 | Transaction execution failed. |
+| MINED | 3 | The transaction was successfully executed and successfully packaged into a block. |
+| CONFLICT | 4 | When executed in parallel there are conflicts with other transactions. |
+| PENDING_VALIDATION | 5 | The transaction is waiting for validation. |
+| NODE_VALIDATION_FAILED | 6 | Transaction validation failed. |
+
+## AuthorityInfo
+
+| Field | Type | Description | Label |
+| ---------------- | --------------- | ----------------------------------------- | ----- |
+| contract_address | `aelf.Address ` | The contract address of the controller. | |
+| owner_address | `aelf.Address ` | The address of the owner of the contract. | |
diff --git a/docs/docs/smart-contract-api/parliament-contract/index.md b/docs/docs/smart-contract-api/parliament-contract/index.md
new file mode 100644
index 00000000..edaad6e3
--- /dev/null
+++ b/docs/docs/smart-contract-api/parliament-contract/index.md
@@ -0,0 +1,395 @@
+---
+sidebar_position: 3
+title: Parliament Contract
+---
+
+# AElf.Contracts.Parliament
+
+Parliament contract.
+
+The production nodes use the Parliament contract to govern important matters. In the initial state, the production nodes are members of the parliament, and only when two-thirds of the production nodes vote in favor of a given decision, will it be executed.
+
+Implement aelf Standards ACS1 and ACS3.
+
+## Contract Methods
+
+| Method Name | Request Type | Response Type | Description |
+| ----------------------------------- | --------------------------------------------------------------------------------------------------------- | ------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
+| Initialize | [Parliament.InitializeInput](#Parliament.InitializeInput) | [google.protobuf.Empty](#google.protobuf.Empty) | Initialize parliament proposer whitelist and create the first parliament organization with specific proposer_authority_required. |
+| CreateOrganization | [Parliament.CreateOrganizationInput](#Parliament.CreateOrganizationInput) | [aelf.Address](#aelf.Address) | Create an organization and return its address. |
+| ApproveMultiProposals | [Parliament.ProposalIdList](#Parliament.ProposalIdList) | [google.protobuf.Empty](#google.protobuf.Empty) | Batch approval proposal. |
+| CreateOrganizationBySystemContract | [Parliament.CreateOrganizationBySystemContractInput](#Parliament.CreateOrganizationBySystemContractInput) | [aelf.Address](#aelf.Address) | Creates an organization by system contract and return its address. |
+| GetOrganization | [aelf.Address](#aelf.Address) | [Parliament.Organization](#Parliament.Organization) | Get the organization according to the organization address. |
+| GetDefaultOrganizationAddress | [google.protobuf.Empty](#google.protobuf.Empty) | [aelf.Address](#aelf.Address) | Get the default organization address. |
+| ValidateAddressIsParliamentMember | [aelf.Address](#aelf.Address) | [google.protobuf.BoolValue](#google.protobuf.BoolValue) | Validates if the provided address is a parliament member. |
+| GetProposerWhiteList | [google.protobuf.Empty](#google.protobuf.Empty) | [acs3.ProposerWhiteList](#acs3.ProposerWhiteList) | Returns the list of whitelisted proposers. |
+| GetNotVotedPendingProposals | [Parliament.ProposalIdList](#Parliament.ProposalIdList) | [Parliament.ProposalIdList](#Parliament.ProposalIdList) | Filter still pending ones not yet voted by the sender from provided proposals. |
+| GetNotVotedProposals | [Parliament.ProposalIdList](#Parliament.ProposalIdList) | [Parliament.ProposalIdList](#Parliament.ProposalIdList) | Filter not yet voted ones by the sender from provided proposals. |
+| CalculateOrganizationAddress | [Parliament.CreateOrganizationInput](#Parliament.CreateOrganizationInput) | [aelf.Address](#aelf.Address) | Calculates with input and return the organization address. |
+| GetReleaseThresholdReachedProposals | [Parliament.ProposalIdList](#Parliament.ProposalIdList) | [Parliament.ProposalIdList](#Parliament.ProposalIdList) | Filter reached release threshold proposals. |
+| GetAvailableProposals | [Parliament.ProposalIdList](#Parliament.ProposalIdList) | [Parliament.ProposalIdList](#Parliament.ProposalIdList) | Filter available proposals. |
+
+## AElf.Standards.ACS1
+
+| Method Name | Request Type | Response Type | Description |
+| ------------------------- | ----------------------------------------------------------- | ----------------------------------------------- | -------------------------------------------------------------------------------------------------- |
+| SetMethodFee | [acs1.MethodFees](#acs1.MethodFees) | [google.protobuf.Empty](#google.protobuf.Empty) | Set the method fees for the specified method. Note that this will override all fees of the method. |
+| ChangeMethodFeeController | [AuthorityInfo](#AuthorityInfo) | [google.protobuf.Empty](#google.protobuf.Empty) | Change the method fee controller, the default is parliament and default organization. |
+| GetMethodFee | [google.protobuf.StringValue](#google.protobuf.StringValue) | [acs1.MethodFees](#acs1.MethodFees) | Query method fee information by method name. |
+| GetMethodFeeController | [google.protobuf.Empty](#google.protobuf.Empty) | [AuthorityInfo](#AuthorityInfo) | Query the method fee controller. |
+
+## AElf.Standards.ACS3
+
+
+| Method Name | Request Type | Response Type | Description |
+| ----------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| CreateProposal | [acs3.CreateProposalInput](#acs3.CreateProposalInput) | [aelf.Hash](#aelf.Hash) | Create a proposal for which organization members can vote. When the proposal is released, a transaction will be sent to the specified contract. Return id of the newly created proposal. |
+| Approve | [aelf.Hash](#aelf.Hash) | [google.protobuf.Empty](#google.protobuf.Empty) | Approve a proposal according to the proposal ID. |
+| Reject | [aelf.Hash](#aelf.Hash) | [google.protobuf.Empty](#google.protobuf.Empty) | Reject a proposal according to the proposal ID. |
+| Abstain | [aelf.Hash](#aelf.Hash) | [google.protobuf.Empty](#google.protobuf.Empty) | Abstain a proposal according to the proposal ID. |
+| Release | [aelf.Hash](#aelf.Hash) | [google.protobuf.Empty](#google.protobuf.Empty) | Release a proposal according to the proposal ID and send a transaction to the specified contract. |
+| ChangeOrganizationThreshold | [acs3.ProposalReleaseThreshold](#acs3.ProposalReleaseThreshold) | [google.protobuf.Empty](#google.protobuf.Empty) | Change the thresholds associated with proposals. All fields will be overwritten by the input value and this will affect all current proposals of the organization. Note: only the organization can execute this through a proposal. |
+| ChangeOrganizationProposerWhiteList | [acs3.ProposerWhiteList](#acs3.ProposerWhiteList) | [google.protobuf.Empty](#google.protobuf.Empty) | Change the white list of organization proposer. This method overrides the list of whitelisted proposers. |
+| CreateProposalBySystemContract | [acs3.CreateProposalBySystemContractInput](#acs3.CreateProposalBySystemContractInput) | [aelf.Hash](#aelf.Hash) | Create a proposal by system contracts, and return id of the newly created proposal. |
+| ClearProposal | [aelf.Hash](#aelf.Hash) | [google.protobuf.Empty](#google.protobuf.Empty) | Remove the specified proposal. If the proposal is in effect, the cleanup fails. |
+| GetProposal | [aelf.Hash](#aelf.Hash) | [acs3.ProposalOutput](#acs3.ProposalOutput) | Get the proposal according to the proposal ID. |
+| ValidateOrganizationExist | [aelf.Address](#aelf.Address) | [google.protobuf.BoolValue](#google.protobuf.BoolValue) | Check the existence of an organization. |
+| ValidateProposerInWhiteList | [acs3.ValidateProposerInWhiteListInput](#acs3.ValidateProposerInWhiteListInput) | [google.protobuf.BoolValue](#google.protobuf.BoolValue) | Check if the proposer is whitelisted. |
+
+## Contract Types
+
+## AElf.Contracts.Parliament
+
+### Parliament.CreateOrganizationBySystemContractInput
+
+| Field | Type | Description | Label |
+| ------------------------------------ | ------------------------- | --------------------------------------------------------------------------------------------------- | ----- |
+| organization_creation_input | `CreateOrganizationInput` | The parameters of creating organization. |
+| organization_address_feedback_method | `string` | The organization address callback method which replies the organization address to caller contract. |
+
+### Parliament.CreateOrganizationInput
+
+| Field | Type | Description | Label |
+| ----------------------------------- | ------------------------------- | --------------------------------------------------------------------- | ----- |
+| proposal_release_threshold | `acs3.ProposalReleaseThreshold` | The threshold for releasing the proposal. |
+| proposer_authority_required | `bool ` | Setting this to true can allow anyone to create proposals. |
+| parliament_member_proposing_allowed | `bool ` | Setting this to true can allow parliament member to create proposals. |
+| creation_token | `aelf.Hash` | The creation token is for organization address generation. |
+
+### Parliament.InitializeInput
+
+| Field | Type | Description | Label |
+| --------------------------- | -------------- | ---------------------------------------------------------------------------------------------------------- | ----- |
+| privileged_proposer | `aelf.Address` | Privileged proposer would be the first address in parliament proposer whitelist. |
+| proposer_authority_required | `bool ` | The setting indicates if proposals need authority to be created for first/default parliament organization. |
+
+### Parliament.Organization
+
+| Field | Type | Description | Label |
+| ----------------------------------- | ------------------------------- | ---------------------------------------------------------------- | ----- |
+| proposer_authority_required | `bool ` | Indicates if proposals need authority to be created. |
+| organization_address | `aelf.Address` | The organization address. |
+| organization_hash | `aelf.Hash` | The organization id. |
+| proposal_release_threshold | `acs3.ProposalReleaseThreshold` | The threshold for releasing the proposal. |
+| parliament_member_proposing_allowed | `bool ` | Indicates if parliament member can propose to this organization. |
+| creation_token | `aelf.Hash` | The creation token is for organization address generation. |
+
+### Parliament.ProposalIdList
+
+| Field | Type | Description | Label |
+| ------------ | ----------- | ------------------------- | -------- |
+| proposal_ids | `aelf.Hash` | The list of proposal ids. | repeated |
+
+### Parliament.ProposalInfo
+
+| Field | Type | Description | Label |
+| ------------------------ | ---------------------------- | ------------------------------------------------------------ | -------- |
+| proposal_id | `aelf.Hash` | The proposal ID. |
+| contract_method_name | `string ` | The method that this proposal will call when being released. |
+| to_address | `aelf.Address` | The address of the target contract. |
+| params | `bytes ` | The parameters of the release transaction. |
+| expired_time | `google.protobuf.Timestamp ` | The date at which this proposal will expire. |
+| proposer | `aelf.Address` | The address of the proposer of this proposal. |
+| organization_address | `aelf.Address` | The address of this proposals organization. |
+| approvals | `aelf.Address` | Address list of approved. | repeated |
+| rejections | `aelf.Address` | Address list of rejected. | repeated |
+| abstentions | `aelf.Address` | Address list of abstained. | repeated |
+| proposal_description_url | `string ` | Url is used for proposal describing. |
+
+## AElf.Standards.ACS1
+
+### acs1.MethodFee
+
+| Field | Type | Description | Label |
+| --------- | --------- | ----------------------------------- | ----- |
+| symbol | `string ` | The token symbol of the method fee. |
+| basic_fee | `int64 ` | The amount of fees to be charged. |
+
+### acs1.MethodFees
+
+| Field | Type | Description | Label |
+| ---------------- | ------------ | ------------------------------------------------------------ | -------- |
+| method_name | `string ` | The name of the method to be charged. |
+| fees | `MethodFee ` | List of fees to be charged. | repeated |
+| is_size_fee_free | `bool ` | Optional based on the implementation of SetMethodFee method. |
+
+## AElf.Standards.ACS3
+
+### acs3.CreateProposalBySystemContractInput
+
+| Field | Type | Description | Label |
+| --------------- | ---------------------- | ------------------------------------ | ----- |
+| proposal_input | `CreateProposalInput ` | The parameters of creating proposal. |
+| origin_proposer | `aelf.Address` | The actor that triggers the call. |
+
+### acs3.CreateProposalInput
+
+| Field | Type | Description | Label |
+| ------------------------ | ---------------------------- | ------------------------------------------------------------ | ----- |
+| contract_method_name | `string ` | The name of the method to call after release. |
+| to_address | `aelf.Address` | The address of the contract to call after release. |
+| params | `bytes ` | The parameters of the method to be called after the release. |
+| expired_time | `google.protobuf.Timestamp ` | The timestamp at which this proposal will expire. |
+| organization_address | `aelf.Address` | The address of the organization. |
+| proposal_description_url | `string ` | URL used for proposal description. |
+| token | `aelf.Hash` | The token for proposal ID generation and calculation. |
+
+### acs3.OrganizationCreated
+
+| Field | Type | Description | Label |
+| -------------------- | -------------- | ---------------------------------------- | ----- |
+| organization_address | `aelf.Address` | The address of the created organization. |
+
+### acs3.OrganizationHashAddressPair
+
+| Field | Type | Description | Label |
+| -------------------- | -------------- | -------------------------------- | ----- |
+| organization_hash | `aelf.Hash` | The ID of the organization. |
+| organization_address | `aelf.Address` | The address of the organization. |
+
+### acs3.OrganizationThresholdChanged
+
+| Field | Type | Description | Label |
+| -------------------------- | -------------------------- | -------------------------- | ----- |
+| organization_address | `aelf.Address` | The organization address |
+| proposer_release_threshold | `ProposalReleaseThreshold` | The new release threshold. |
+
+### acs3.OrganizationWhiteListChanged
+
+| Field | Type | Description | Label |
+| -------------------- | -------------------- | --------------------------- | ----- |
+| organization_address | `aelf.Address` | The organization address. |
+| proposer_white_list | `ProposerWhiteList ` | The new proposer whitelist. |
+
+### acs3.ProposalCreated
+
+| Field | Type | Description | Label |
+| -------------------- | -------------- | ------------------------------------------------- | ----- |
+| proposal_id | `aelf.Hash` | The id of the created proposal. |
+| organization_address | `aelf.Address` | The organization address of the created proposal. |
+
+### acs3.ProposalOutput
+
+| Field | Type | Description | Label |
+| -------------------- | ---------------------------- | ------------------------------------------------------------ | ----- |
+| proposal_id | `aelf.Hash` | The id of the proposal. |
+| contract_method_name | `string ` | The method that this proposal will call when being released. |
+| to_address | `aelf.Address` | The address of the target contract. |
+| params | `bytes ` | The parameters of the release transaction. |
+| expired_time | `google.protobuf.Timestamp ` | The date at which this proposal will expire. |
+| organization_address | `aelf.Address` | The address of this proposals organization. |
+| proposer | `aelf.Address` | The address of the proposer of this proposal. |
+| to_be_released | `bool ` | Indicates if this proposal is releasable. |
+| approval_count | `int64 ` | Approval count for this proposal. |
+| rejection_count | `int64 ` | Rejection count for this proposal. |
+| abstention_count | `int64 ` | Abstention count for this proposal. |
+
+### acs3.ProposalReleaseThreshold
+
+| Field | Type | Description | Label |
+| ---------------------------- | -------- | ----------------------------------------------- | ----- |
+| minimal_approval_threshold | `int64 ` | The value for the minimum approval threshold. |
+| maximal_rejection_threshold | `int64 ` | The value for the maximal rejection threshold. |
+| maximal_abstention_threshold | `int64 ` | The value for the maximal abstention threshold. |
+| minimal_vote_threshold | `int64 ` | The value for the minimal vote threshold. |
+
+### acs3.ProposalReleased
+
+| Field | Type | Description | Label |
+| -------------------- | -------------- | -------------------------------------------------- | ----- |
+| proposal_id | `aelf.Hash` | The id of the released proposal. |
+| organization_address | `aelf.Address` | The organization address of the released proposal. |
+
+### acs3.ProposerWhiteList
+
+| Field | Type | Description | Label |
+| --------- | -------------- | ---------------------------- | -------- |
+| proposers | `aelf.Address` | The address of the proposers | repeated |
+
+### acs3.ReceiptCreated
+
+| Field | Type | Description | Label |
+| -------------------- | ---------------------------- | ---------------------------------- | ----- |
+| proposal_id | `aelf.Hash` | The id of the proposal. |
+| address | `aelf.Address` | The sender address. |
+| receipt_type | `string ` | The type of receipt |
+| time | `google.protobuf.Timestamp ` | The timestamp of this method call. |
+| organization_address | `aelf.Address` | The address of the organization. |
+
+### acs3.ValidateProposerInWhiteListInput
+
+| Field | Type | Description | Label |
+| -------------------- | -------------- | -------------------------------- | ----- |
+| proposer | `aelf.Address` | The address to search/check. |
+| organization_address | `aelf.Address` | The address of the organization. |
+
+## AElf.Types
+
+### aelf.Address
+
+| Field | Type | Description | Label |
+| ----- | -------- | ----------- | ----- |
+| value | `bytes ` | |
+
+### aelf.BinaryMerkleTree
+
+| Field | Type | Description | Label |
+| ---------- | -------- | ----------------------- | -------- |
+| nodes | `Hash` | The leaf nodes. | repeated |
+| root | `Hash` | The root node hash. |
+| leaf_count | `int32 ` | The count of leaf node. |
+
+### aelf.Hash
+
+| Field | Type | Description | Label |
+| ----- | -------- | ----------- | ----- |
+| value | `bytes ` | |
+
+### aelf.LogEvent
+
+| Field | Type | Description | Label |
+| ----------- | --------- | ------------------------------------------ | -------- |
+| address | `Address` | The contract address. |
+| name | `string ` | The name of the log event. |
+| indexed | `bytes ` | The indexed data, used to calculate bloom. | repeated |
+| non_indexed | `bytes ` | The non indexed data. |
+
+### aelf.MerklePath
+
+| Field | Type | Description | Label |
+| ----------------- | ----------------- | ---------------------- | -------- |
+| merkle_path_nodes | `MerklePathNode ` | The merkle path nodes. | repeated |
+
+### aelf.MerklePathNode
+
+| Field | Type | Description | Label |
+| ------------------ | ------- | -------------------------------- | ----- |
+| hash | `Hash` | The node hash. |
+| is_left_child_node | `bool ` | Whether it is a left child node. |
+
+### aelf.SInt32Value
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------- | ----- |
+| value | `sint32 ` | |
+
+### aelf.SInt64Value
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------- | ----- |
+| value | `sint64 ` | |
+
+### aelf.ScopedStatePath
+
+| Field | Type | Description | Label |
+| ------- | ------------ | ------------------------------------------------------ | ----- |
+| address | `Address` | The scope address, which will be the contract address. |
+| path | `StatePath ` | The path of contract state. |
+
+### aelf.SmartContractRegistration
+
+| Field | Type | Description | Label |
+| ------------------ | --------- | ------------------------------------- | ----- |
+| category | `sint32 ` | The category of contract code(0: C#). |
+| code | `bytes` | The byte array of the contract code. |
+| code_hash | `Hash` | The hash of the contract code. |
+| is_system_contract | `bool` | Whether it is a system contract. |
+| version | `int32` | The version of the current contract. |
+
+### aelf.StatePath
+| Field | Type | Description | Label |
+| ----- | -------- | ----------------------------------- | -------- |
+| parts | `string` | The partial path of the state path. | repeated |
+
+### aelf.Transaction
+
+| Field | Type | Description | Label |
+| ---------------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----- |
+| from | `Address` | The address of the sender of the transaction. |
+| to | `Address` | The address of the contract when calling a contract. |
+| ref_block_number | `int64` | The height of the referenced block hash. |
+| ref_block_prefix | `bytes` | The first four bytes of the referenced block hash. |
+| method_name | `string` | The name of a method in the smart contract at the To address. |
+| params | `bytes` | The parameters to pass to the smart contract method. |
+| signature | `bytes` | When signing a transaction it's actually a subset of the fields: from/to and the target method as well as the parameter that were given. It also contains the reference block number and prefix. |
+
+### aelf.TransactionExecutingStateSet
+
+| Field | Type | Description | Label |
+| ------- | ------------------------------------------- | ------------------- | -------- |
+| writes | `TransactionExecutingStateSet.WritesEntry` | The changed states. | repeated |
+| reads | `TransactionExecutingStateSet.ReadsEntry` | The read states. | repeated |
+| deletes | `TransactionExecutingStateSet.DeletesEntry` | The deleted states. | repeated |
+
+### aelf.TransactionExecutingStateSet.DeletesEntry
+
+| Field | Type | Description | Label |
+| ----- | -------- | ----------- | ----- |
+| key | `string` | |
+| value | `bool` | |
+
+### aelf.TransactionExecutingStateSet.ReadsEntry
+
+| Field | Type | Description | Label |
+| ----- | -------- | ----------- | ----- |
+| key | `string` | |
+| value | `bool` | |
+
+### aelf.TransactionExecutingStateSet.WritesEntry
+
+| Field | Type | Description | Label |
+| ----- | -------- | ----------- | ----- |
+| key | `string` | |
+| value | `bytes` | |
+
+### aelf.TransactionResult
+
+| Field | Type | Description | Label |
+| -------------- | ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------- |
+| transaction_id | `Hash` | The transaction id. |
+| status | `TransactionResultStatus` | The transaction result status. |
+| logs | `LogEvent` | The log events. | repeated |
+| bloom | `bytes ` | Bloom filter for transaction logs. A transaction log event can be defined in the contract and stored in the bloom filter after the transaction is executed. Through this filter, we can quickly search for and determine whether a log exists in the transaction result. |
+| return_value | `bytes ` | The return value of the transaction execution. |
+| block_number | `int64` | The height of the block hat packages the transaction. |
+| block_hash | `Hash` | The hash of the block hat packages the transaction. |
+| error | `string` | Failed execution error message. |
+
+### aelf.TransactionResultStatus
+
+| Name | Number | Description |
+| ---------------------- | ------ | --------------------------------------------------------------------------------- |
+| NOT_EXISTED | 0 | The execution result of the transaction does not exist. |
+| PENDING | 1 | The transaction is in the transaction pool waiting to be packaged. |
+| FAILED | 2 | Transaction execution failed. |
+| MINED | 3 | The transaction was successfully executed and successfully packaged into a block. |
+| CONFLICT | 4 | When executed in parallel, there are conflicts with other transactions. |
+| PENDING_VALIDATION | 5 | The transaction is waiting for validation. |
+| NODE_VALIDATION_FAILED | 6 | Transaction validation failed. |
+
+## AuthorityInfo
+
+| Field | Type | Description | Label |
+| ---------------- | -------------- | ----------------------------------------- | ----- |
+| contract_address | `aelf.Address` | The contract address of the controller. |
+| owner_address | `aelf.Address` | The address of the owner of the contract. |
diff --git a/docs/docs/smart-contract-api/profit-contract/index.md b/docs/docs/smart-contract-api/profit-contract/index.md
new file mode 100644
index 00000000..06cd34dc
--- /dev/null
+++ b/docs/docs/smart-contract-api/profit-contract/index.md
@@ -0,0 +1,459 @@
+---
+sidebar_position: 8
+title: Profit Contract
+---
+
+# AElf.Contracts.Profit
+
+## Profit contract
+
+The Profit contract is an abstract layer for creating a scheme to share bonuses. Developers can build a system to distribute bonuses by calling this contract.
+
+Implement aelf Standards ACS1.
+
+## Contract Methods
+
+| Method Name | Request Type | Response Type | Description |
+| ------------------------- | -------------------------------- | ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
+| CreateScheme | Profit.CreateSchemeInput | aelf.Hash | Create a scheme for profit distribution and return the created scheme id. |
+| AddBeneficiary | Profit.AddBeneficiaryInput | google.protobuf.Empty | Add beneficiary to scheme. |
+| RemoveBeneficiary | Profit.RemoveBeneficiaryInput | google.protobuf.Empty | Remove beneficiary from scheme. |
+| AddBeneficiaries | Profit.AddBeneficiariesInput | google.protobuf.Empty | Batch add beneficiaries to scheme. |
+| RemoveBeneficiaries | Profit.RemoveBeneficiariesInput | google.protobuf.Empty | Batch remove beneficiaries from scheme. |
+| ContributeProfits | Profit.ContributeProfitsInput | google.protobuf.Empty | Contribute profit to a scheme. |
+| ClaimProfits | Profit.ClaimProfitsInput | google.protobuf.Empty | The beneficiary draws tokens from the scheme. |
+| DistributeProfits | Profit.DistributeProfitsInput | google.protobuf.Empty | Distribute profits to schemes, including its sub-schemes according to period and token symbol; should be called by the manager. |
+| AddSubScheme | Profit.AddSubSchemeInput | google.protobuf.Empty | Add sub-scheme to a scheme. This effectively adds the specified sub-scheme as a beneficiary of the parent scheme. |
+| RemoveSubScheme | Profit.RemoveSubSchemeInput | google.protobuf.Empty | Remove sub-scheme from a scheme. |
+| ResetManager | Profit.ResetManagerInput | google.protobuf.Empty | Reset the manager of a scheme. |
+| GetManagingSchemeIds | Profit.GetManagingSchemeIdsInput | Profit.CreatedSchemeIds | Get all schemes managed by the specified manager. |
+| GetScheme | aelf.Hash | Profit.Scheme | Get scheme according to scheme id. |
+| GetSchemeAddress | Profit.SchemePeriod | aelf.Address | Get the virtual address of the number of periods of the scheme. |
+| GetDistributedProfitsInfo | Profit.SchemePeriod | Profit.DistributedProfitsInfo | Query the distributed profit information for the specified period. |
+| GetProfitDetails | Profit.GetProfitDetailsInput | Profit.ProfitDetails | Query the beneficiary's profit information on the scheme. |
+| GetProfitAmount | Profit.GetProfitAmountInput | google.protobuf.Int64Value | Query the amount of profit according to token symbol (up to 10 periods). |
+| GetProfitsMap | Profit.ClaimProfitsInput | Profit.ReceivedProfitsMap | Query all profit (up to 10 periods). |
+
+## AElf.Standards.ACS1
+
+| Method Name | Request Type | Response Type | Description |
+| ------------------------- | --------------------------- | --------------------- | -------------------------------------------------------------------------------------------------- |
+| SetMethodFee | acs1.MethodFees | google.protobuf.Empty | Set the method fees for the specified method. Note that this will override all fees of the method. |
+| ChangeMethodFeeController | AuthorityInfo | google.protobuf.Empty | Change the method fee controller; the default is parliament and default organization. |
+| GetMethodFee | google.protobuf.StringValue | acs1.MethodFees | Query method fee information by method name. |
+| GetMethodFeeController | google.protobuf.Empty | AuthorityInfo | Query the method fee controller. |
+
+ **Contract Types**
+
+## AElf.Contracts.Profit
+
+### Profit.AddBeneficiariesInput
+
+| Field | Type | Description | Label |
+| ------------------ | ---------------- | --------------------------------------- | -------- |
+| scheme_id | aelf.Hash | The scheme id. | |
+| beneficiary_shares | BeneficiaryShare | The beneficiary information. | repeated |
+| end_period | int64 | The end period for beneficiary profits. | |
+
+### Profit.AddBeneficiaryInput
+
+| Field | Type | Description | Label |
+| ----------------- | ---------------- | --------------------------------------- | ----- |
+| scheme_id | aelf.Hash | The scheme id. | |
+| beneficiary_share | BeneficiaryShare | The beneficiary information. | |
+| end_period | int64 | The end period for beneficiary profits. | |
+
+### Profit.AddSubSchemeInput
+
+| Field | Type | Description | Label |
+| ----------------- | --------- | -------------------------------- | ----- |
+| scheme_id | aelf.Hash | The parent scheme id. | |
+| sub_scheme_id | aelf.Hash | The sub scheme id. | |
+| sub_scheme_shares | int64 | The profit weight of sub scheme. | |
+
+### Profit.BeneficiaryShare
+
+| Field | Type | Description | Label |
+| ----------- | ------------ | ------------------------------------- | ----- |
+| beneficiary | aelf.Address | The beneficiary's address. | |
+| shares | int64 | The profit weight of the beneficiary. | |
+
+### Profit.ClaimProfitsInput
+
+| Field | Type | Description | Label |
+| ----------- | ------------ | -------------------------- | ----- |
+| scheme_id | aelf.Hash | The scheme id. | |
+| beneficiary | aelf.Address | The beneficiary's address. | |
+
+### Profit.ContributeProfitsInput
+
+| Field | Type | Description | Label |
+| --------- | --------- | ------------------------------------ | ----- |
+| scheme_id | aelf.Hash | The scheme id to contribute. | |
+| amount | int64 | The amount to contribute. | |
+| period | int64 | The number of periods for dividends. | |
+| symbol | string | The token symbol to contribute. | |
+
+### Profit.CreateSchemeInput
+
+| Field | Type | Description | Label |
+| -------------------------------------------- | ------------ | ---------------------------------------------------------- | ----- |
+| profit_receiving_due_period_count | int64 | Period of profit distribution. | |
+| is_release_all_balance_every_time_by_default | bool | Whether all the scheme balance is distributed each period. | |
+| delay_distribute_period_count | int32 | Delay distribute period. | |
+| manager | aelf.Address | The manager of the scheme. | |
+| can_remove_beneficiary_directly | bool | Whether you can directly remove beneficiaries. | |
+| token | aelf.Hash | Used to generate scheme id. | |
+
+### Profit.CreatedSchemeIds
+
+| Field | Type | Description | Label |
+| ---------- | --------- | --------------- | -------- |
+| scheme_ids | aelf.Hash | The scheme ids. | repeated |
+
+Here's the content converted to Markdown format with the information presented in boxes:
+
+### Profit.DistributeProfitsInput
+
+| Field | Type | Description | Label |
+| ----------- | --------------- | ------------------------------------------------ | -------- |
+| scheme_id | aelf.Hash | The scheme id to distribute. | |
+| period | int64 | The period number to distribute, current period. | |
+| amounts_map | AmountsMapEntry | The amount to distribute, symbol -> amount. | repeated |
+
+#### Profit.DistributeProfitsInput.AmountsMapEntry
+
+| Field | Type | Description | Label |
+| ----- | ------ | ----------- | ----- |
+| key | string | | |
+| value | int64 | | |
+
+### Profit.DistributedProfitsInfo
+
+| Field | Type | Description | Label |
+| ------------ | --------------- | -------------------------------------------------------- | -------- |
+| total_shares | int64 | Total shares in this scheme at the current period. | |
+| amounts_map | AmountsMapEntry | Contributed amount in this scheme at the current period. | repeated |
+| is_released | bool | Whether released. | |
+
+### Profit.DistributedProfitsInfo.AmountsMapEntry
+
+| Field | Type | Description | Label |
+| ----- | ------ | ----------- | ----- |
+| key | string | | |
+| value | sint64 | | |
+
+### Profit.GetManagingSchemeIdsInput
+
+| Field | Type | Description | Label |
+| ------- | ------------ | -------------------- | ----- |
+| manager | aelf.Address | The manager address. | |
+
+### Profit.GetProfitAmountInput
+
+| Field | Type | Description | Label |
+| ----------- | ------------ | ---------------------- | ----- |
+| scheme_id | aelf.Hash | The scheme id. | |
+| symbol | string | The token symbol. | |
+| beneficiary | aelf.Address | Beneficiary's address. | |
+
+### Profit.GetProfitDetailsInput
+
+| Field | Type | Description | Label |
+| ----------- | ------------ | ---------------------- | ----- |
+| scheme_id | aelf.Hash | The scheme id. | |
+| beneficiary | aelf.Address | Beneficiary's address. | |
+
+### Profit.ProfitDetail
+
+| Field | Type | Description | Label |
+| ------------------ | ----- | ---------------------------------------------------------------- | ----- |
+| start_period | int64 | The start period number. | |
+| end_period | int64 | The end period number. | |
+| shares | int64 | The weight of the proceeds on the current period of the scheme. | |
+| last_profit_period | int64 | The last period number that the beneficiary received the profit. | |
+| is_weight_removed | bool | Whether the weight has been removed. | |
+
+### Profit.ProfitDetails
+
+| Field | Type | Description | Label |
+| ------- | ------------ | ----------------------- | -------- |
+| details | ProfitDetail | The profit information. | repeated |
+
+### Profit.ProfitDetails.ProfitDetail
+
+| Field | Type | Description | Label |
+| ------------------ | ----- | --------------------------- | ----- |
+| start_period | int64 | The start period number. | |
+| end_period | int64 | The end period number. | |
+| shares | int64 | The weight of the proceeds. | |
+| last_profit_period | int64 | The last period received. | |
+| is_weight_removed | bool | Whether weight removed. | |
+
+### Profit.ProfitsClaimed
+
+| Field | Type | Description | Label |
+| -------------- | ------------ | ------------------------------- | ----- |
+| beneficiary | aelf.Address | Beneficiary's address claimed. | |
+| symbol | string | Token symbol claimed. | |
+| amount | int64 | The amount claimed. | |
+| period | int64 | The period number claimed. | |
+| claimer_shares | int64 | Shares of the claimer. | |
+| total_shares | int64 | Total shares at current period. | |
+
+### Profit.ReceivedProfitsMap
+
+| Field | Type | Description | Label |
+| ----- | ----------------------------- | ------------------------------------------------- | -------- |
+| value | ReceivedProfitsMap.ValueEntry | Collection of profits received, symbol -> amount. | repeated |
+
+### Profit.ReceivedProfitsMap.ValueEntry
+
+| Field | Type | Description | Label |
+| ----- | ------ | ----------- | ----- |
+| key | string | | |
+| value | int64 | | |
+
+### Profit.RemoveBeneficiariesInput
+
+| Field | Type | Description | Label |
+| ------------- | ------------ | --------------------------- | -------- |
+| beneficiaries | aelf.Address | Addresses of beneficiaries. | repeated |
+| scheme_id | aelf.Hash | The scheme id. | |
+
+### Profit.RemoveBeneficiaryInput
+
+| Field | Type | Description | Label |
+| ----------- | ------------ | ---------------------- | ----- |
+| beneficiary | aelf.Address | Beneficiary's address. | |
+| scheme_id | aelf.Hash | The scheme id. | |
+
+### Profit.RemoveSubSchemeInput
+
+| Field | Type | Description | Label |
+| ------------- | --------- | --------------------- | ----- |
+| scheme_id | aelf.Hash | The parent scheme id. | |
+| sub_scheme_id | aelf.Hash | The sub scheme id. | |
+
+### Profit.ResetManagerInput
+
+| Field | Type | Description | Label |
+| ----------- | ------------ | ----------------------- | ----- |
+| scheme_id | aelf.Hash | The scheme id. | |
+| new_manager | aelf.Address | Address of new manager. | |
+
+### Profit.Scheme
+
+| Field | Type | Description | Label |
+| -------------------------------------------- | ---------------------------------- | ------------------------------------------------------------------------------------------------------ | -------- |
+| virtual_address | aelf.Address | The virtual address of the scheme. | |
+| total_shares | int64 | The total weight of the scheme. | |
+| manager | aelf.Address | The manager of the scheme. | |
+| current_period | int64 | The current period. | |
+| sub_schemes | SchemeBeneficiaryShare | Sub schemes information. | repeated |
+| can_remove_beneficiary_directly | bool | Whether you can directly remove the beneficiary. | |
+| profit_receiving_due_period_count | int64 | Period of profit distribution. | |
+| is_release_all_balance_every_time_by_default | bool | Whether all the schemes balance will be distributed during distribution each period. | |
+| scheme_id | aelf.Hash | The is of the scheme. | |
+| delay_distribute_period_count | int32 | Delay distribute period. | |
+| cached_delay_total_shares | Scheme.CachedDelayTotalSharesEntry | Record the scheme's current total share for deferred distribution of benefits, period -> total shares. | repeated |
+| received_token_symbols | string | The received token symbols. | repeated |
+
+### Profit.Scheme.CachedDelayTotalSharesEntry
+
+| Field | Type | Description | Label |
+| ----- | ----- | ----------- | ----- |
+| key | int64 | | |
+| value | int64 | | |
+
+### Profit.SchemeBeneficiaryShare
+
+| Field | Type | Description | Label |
+| --------- | --------- | ----------------------------- | ----- |
+| scheme_id | aelf.Hash | The id of the sub scheme. | |
+| shares | int64 | The weight of the sub scheme. | |
+
+### Profit.SchemeCreated
+
+| Field | Type | Description | Label |
+| -------------------------------------------- | ------------ | ---------------------------------------------------------------- | ----- |
+| virtual_address | aelf.Address | The virtual address of the created scheme. | |
+| manager | aelf.Address | The manager of the created scheme. | |
+| profit_receiving_due_period_count | int64 | Period of profit distribution. | |
+| is_release_all_balance_every_time_by_default | bool | Whether all the schemes balance will be distributed each period. | |
+| scheme_id | aelf.Hash | The id of the created scheme. | |
+
+### Profit.SchemePeriod
+
+| Field | Type | Description | Label |
+| --------- | --------- | ------------------ | ----- |
+| scheme_id | aelf.Hash | The scheme id. | |
+| period | int64 | The period number. | |
+
+## AElf.Standards.ACS1
+
+### acs1.MethodFee
+
+| Field | Type | Description | Label |
+| --------- | ------ | ----------------------------------- | ----- |
+| symbol | string | The token symbol of the method fee. | |
+| basic_fee | int64 | The amount of fees to be charged. | |
+
+### acs1.MethodFees
+
+| Field | Type | Description | Label |
+| ---------------- | --------- | ------------------------------------------------------------ | -------- |
+| method_name | string | The name of the method. | |
+| fees | MethodFee | List of fees to be charged. | repeated |
+| is_size_fee_free | bool | Optional based on the implementation of SetMethodFee method. | |
+
+## AElf.Types
+
+### aelf.Address
+
+| Field | Type | Description | Label |
+| ----- | ----- | ----------- | ----- |
+| value | bytes | | |
+
+### aelf.BinaryMerkleTree
+
+| Field | Type | Description | Label |
+| ---------- | ----- | ----------------------- | -------- |
+| nodes | Hash | The leaf nodes. | repeated |
+| root | Hash | The root node hash. | |
+| leaf_count | int32 | The count of leaf node. | |
+
+### aelf.Hash
+
+| Field | Type | Description | Label |
+| ----- | ----- | ----------- | ----- |
+| value | bytes | | |
+
+### aelf.LogEvent
+
+| Field | Type | Description | Label |
+| ----------- | ------- | ------------------------------------------ | -------- |
+| address | Address | The contract address. | |
+| name | string | The name of the log event. | |
+| indexed | bytes | The indexed data, used to calculate bloom. | repeated |
+| non_indexed | bytes | The non indexed data. | |
+
+### aelf.MerklePath
+
+| Field | Type | Description | Label |
+| ----------------- | -------------- | ---------------------- | -------- |
+| merkle_path_nodes | MerklePathNode | The merkle path nodes. | repeated |
+
+### aelf.MerklePathNode
+
+| Field | Type | Description | Label |
+| ------------------ | ---- | -------------------------------- | ----- |
+| hash | Hash | The node hash. | |
+| is_left_child_node | bool | Whether it is a left child node. | |
+
+### aelf.SInt32Value
+
+| Field | Type | Description | Label |
+| ----- | ------ | ----------- | ----- |
+| value | sint32 | | |
+
+### aelf.SInt64Value
+
+| Field | Type | Description | Label |
+| ----- | ------ | ----------- | ----- |
+| value | sint64 | | |
+
+### aelf.ScopedStatePath
+
+| Field | Type | Description | Label |
+| ------- | --------- | ------------------------------------------------------ | ----- |
+| address | Address | The scope address, which will be the contract address. | |
+| path | StatePath | The path of contract state. | |
+
+### aelf.SmartContractRegistration
+
+| Field | Type | Description | Label |
+| ------------------ | ------ | ------------------------------------- | ----- |
+| category | sint32 | The category of contract code(0: C#). | |
+| code | bytes | The byte array of the contract code. | |
+| code_hash | Hash | The hash of the contract code. | |
+| is_system_contract | bool | Whether it is a system contract. | |
+| version | int32 | The version of the current contract. | |
+
+### aelf.StatePath
+
+| Field | Type | Description | Label |
+| ----- | ------ | ----------------------------------- | -------- |
+| parts | string | The partial path of the state path. | repeated |
+
+### aelf.Transaction
+
+| Field | Type | Description | Label |
+| ---------------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ----- |
+| from | Address | The address of the sender of the transaction. | |
+| to | Address | The address of the contract when calling a contract. | |
+| ref_block_number | int64 | The height of the referenced block hash. | |
+| ref_block_prefix | bytes | The first four bytes of the referenced block hash. | |
+| method_name | string | The name of a method in the smart contract at the To address. | |
+| params | bytes | The parameters to pass to the smart contract method. | |
+| signature | bytes | When signing a transaction it’s actually a subset of the fields: from/to and the target method as well as the parameter that were given. | |
+
+### aelf.TransactionExecutingStateSet
+
+| Field | Type | Description | Label |
+| ------- | ----------------------------------------- | ------------------- | -------- |
+| writes | TransactionExecutingStateSet.WritesEntry | The changed states. | repeated |
+| reads | TransactionExecutingStateSet.ReadsEntry | The read states. | repeated |
+| deletes | TransactionExecutingStateSet.DeletesEntry | The deleted states. | repeated |
+
+### aelf.TransactionExecutingStateSet.DeletesEntry
+
+| Field | Type | Description | Label |
+| ----- | ------ | ----------- | ----- |
+| key | string | | |
+| value | bool | | |
+
+### aelf.TransactionExecutingStateSet.ReadsEntry
+
+| Field | Type | Description | Label |
+| ----- | ------ | ----------- | ----- |
+| key | string | | |
+| value | bool | | |
+
+### aelf.TransactionExecutingStateSet.WritesEntry
+
+| Field | Type | Description | Label |
+| ----- | ------ | ----------- | ----- |
+| key | string | | |
+| value | bytes | | |
+
+### aelf.TransactionResult
+
+| Field | Type | Description | Label |
+| -------------- | ----------------------- | ------------------------------------------------------ | -------- |
+| transaction_id | Hash | The transaction id. | |
+| status | TransactionResultStatus | The transaction result status. | |
+| logs | LogEvent | The log events. | repeated |
+| bloom | bytes | Bloom filter for transaction logs. | |
+| return_value | bytes | The return value of the transaction execution. | |
+| block_number | int64 | The height of the block that packages the transaction. | |
+| block_hash | Hash | The hash of the block that packages the transaction. | |
+| error | string | Failed execution error message. | |
+
+### aelf.TransactionResultStatus
+
+| Name | Number | Description |
+| ---------------------- | ------ | --------------------------------------------------------------------------------- |
+| NOT_EXISTED | 0 | The execution result of the transaction does not exist. |
+| PENDING | 1 | The transaction is in the transaction pool waiting to be packaged. |
+| FAILED | 2 | Transaction execution failed. |
+| MINED | 3 | The transaction was successfully executed and successfully packaged into a block. |
+| CONFLICT | 4 | When executed in parallel, there are conflicts with other transactions. |
+| PENDING_VALIDATION | 5 | The transaction is waiting for validation. |
+| NODE_VALIDATION_FAILED | 6 | Transaction validation failed. |
+
+## AuthorityInfo
+
+| Field | Type | Description | Label |
+| ---------------- | ------------ | --------------------------------------- | ----- |
+| contract_address | aelf.Address | The contract address of the controller. | |
diff --git a/docs/docs/smart-contract-api/referendum-contract/index.md b/docs/docs/smart-contract-api/referendum-contract/index.md
new file mode 100644
index 00000000..b89c79ee
--- /dev/null
+++ b/docs/docs/smart-contract-api/referendum-contract/index.md
@@ -0,0 +1,492 @@
+---
+sidebar_position: 2
+title: Referendum Contract
+---
+
+# Referendum
+
+Referendum contract.
+
+Production nodes or associations cannot determine all decisions. Some extremely important decisions, especially those involving user rights and interests, should involve all users and give full control to the user's voting for governance. The Referendum contract is built for this.
+
+Implement aelf Standards ACS1 and ACS3.
+
+## Contract Methods
+
+| Method Name | Request Type | Response Type | Description |
+| ---------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------- | ------------------------------------------------------------------ |
+| ReclaimVoteToken | `aelf.Hash ` | `google.protobuf.Empty ` | Unlock the token used for voting according to proposal id. |
+| CreateOrganization | `Referendum.CreateOrganizationInput ` | `aelf.Address ` | Create an organization and return its address. |
+| CreateOrganizationBySystemContract | `Referendum.CreateOrganizationBySystemContractInput ` | `aelf.Address ` | Creates an organization by system contract and return its address. |
+| GetOrganization | `aelf.Address ` | `Referendum.Organization ` | Get the organization according to the organization address. |
+| CalculateOrganizationAddress | `Referendum.CreateOrganizationInput ` | `aelf.Address ` | Calculate the input and return the organization address. |
+| GetProposalVirtualAddress | `aelf.Hash ` | `aelf.Address ` | Get the virtual address of a proposal based on the proposal id. |
+
+## AElf.Standards.ACS1
+
+| Method Name | Request Type | Response Type | Description |
+| ------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
+| SetMethodFee | `acs1.MethodFees ` | `google.protobuf.Empty ` | Set the method fees for the specified method. Note that this will override all fees of the method. |
+| ChangeMethodFeeController | `AuthorityInfo ` | `google.protobuf.Empty ` | Change the method fee controller, the default is parliament and default organization. |
+| GetMethodFee | `google.protobuf.StringValue ` | `acs1.MethodFees ` | Query method fee information by method name. |
+| GetMethodFeeController | `google.protobuf.Empty ` | `AuthorityInfo ` | Query the method fee controller. |
+
+## AElf.Standards.ACS3
+
+| Method Name | Request Type | Response Type | Description |
+| ----------------------------------- | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| CreateProposal | `acs3.CreateProposalInput ` | `aelf.Hash ` | Create a proposal for which organization members can vote. When the proposal is released, a transaction will be sent to the specified contract. Return id of the newly created proposal. |
+| Approve | `aelf.Hash ` | `google.protobuf.Empty ` | Approve a proposal according to the proposal ID. |
+| Reject | `aelf.Hash ` | `google.protobuf.Empty ` | Reject a proposal according to the proposal ID. |
+| Abstain | `aelf.Hash ` | `google.protobuf.Empty ` | Abstain a proposal according to the proposal ID. |
+| Release | `aelf.Hash ` | `google.protobuf.Empty ` | Release a proposal according to the proposal ID and send a transaction to the specified contract. |
+| ChangeOrganizationThreshold | `acs3.ProposalReleaseThreshold ` | `google.protobuf.Empty ` | Change the thresholds associated with proposals. All fields will be overwritten by the input value and this will affect all current proposals of the organization. Note: only the organization can execute this through a proposal. |
+| ChangeOrganizationProposerWhiteList | `acs3.ProposerWhiteList ` | `google.protobuf.Empty ` | Change the white list of organization proposer. This method overrides the list of whitelisted proposers. |
+| CreateProposalBySystemContract | `acs3.CreateProposalBySystemContractInput ` | `aelf.Hash ` | Create a proposal by system contracts, and return id of the newly created proposal. |
+| ClearProposal | `aelf.Hash ` | `google.protobuf.Empty ` | Remove the specified proposal. If the proposal is in effect, the cleanup fails. |
+| GetProposal | `aelf.Hash ` | `acs3.ProposalOutput ` | Get the proposal according to the proposal ID. |
+| ValidateOrganizationExist | `aelf.Address ` | `google.protobuf.BoolValue ` | Check the existence of an organization. |
+| ValidateProposerInWhiteList | `acs3.ValidateProposerInWhiteListInput ` | `google.protobuf.BoolValue ` | Check if the proposer is whitelisted. |
+
+## Contract Types
+
+### AElf.Contracts.Referendum
+
+### Referendum.CreateOrganizationBySystemContractInput
+
+| Field | Type | Description | Label |
+| ------------------------------------ | ------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | ----- |
+| organization_creation_input | `CreateOrganizationInput ` | The parameters of creating organization. | |
+| organization_address_feedback_method | `string ` | The organization address callback method which replies the organization address to caller contract. | |
+
+### Referendum.CreateOrganizationInput
+
+| Field | Type | Description | Label |
+| -------------------------- | ------------------------------- | ---------------------------------------------------------- | ----- |
+| token_symbol | `string` | The token used during proposal operations. | |
+| proposal_release_threshold | `acs3.ProposalReleaseThreshold` | The threshold for releasing the proposal. | |
+| proposer_white_list | `acs3.ProposerWhiteList` | The proposer whitelist. | |
+| creation_token | `aelf.Hash` | The creation token is for organization address generation. | |
+
+### Referendum.Organization
+
+| Field | Type | Description | Label |
+| -------------------------- | ------------------------------- | ---------------------------------------------------------- | ----- |
+| proposal_release_threshold | `acs3.ProposalReleaseThreshold` | The threshold for releasing the proposal. | |
+| token_symbol | `string` | The token used during proposal operations. | |
+| organization_address | `aelf.Address` | The address of organization. | |
+| organization_hash | `aelf.Hash` | The organization's id. | |
+| proposer_white_list | `acs3.ProposerWhiteList` | The proposer whitelist. | |
+| creation_token | `aelf.Hash` | The creation token is for organization address generation. | |
+
+### Referendum.ProposalInfo
+
+| Field | Type | Description | Label |
+| ------------------------ | --------------------------- | ------------------------------------------------------------ | ----- |
+| proposal_id | `aelf.Hash` | The proposal ID. | |
+| contract_method_name | `string` | The method that this proposal will call when being released. | |
+| to_address | `aelf.Address` | The address of the target contract. | |
+| params | `bytes` | The parameters of the release transaction. | |
+| expired_time | `google.protobuf.Timestamp` | The date at which this proposal will expire. | |
+| proposer | `aelf.Address` | The address of the proposer of this proposal. | |
+| organization_address | `aelf.Address` | The address of this proposal's organization. | |
+| approval_count | `int64` | The count of approved. | |
+| rejection_count | `int64` | The count of rejected. | |
+| abstention_count | `int64` | The count of abstained. | |
+| proposal_description_url | `string` | URL used for proposal describing. | |
+
+### Referendum.Receipt
+
+| Field | Type | Description | Label |
+| ------------ | ----------- | --------------------------- | ----- |
+| amount | `int64` | The amount of token locked. | |
+| token_symbol | `string` | The symbol of token locked. | |
+| lock_id | `aelf.Hash` | The lock ID. | |
+
+### Referendum.ReferendumReceiptCreated
+
+| Field | Type | Description | Label |
+| -------------------- | --------------------------- | -------------------------------------------------- | ----- |
+| proposal_id | `aelf.Hash` | The ID of the proposal. | |
+| address | `aelf.Address` | The sender address. | |
+| symbol | `string` | The symbol of token locked. | |
+| amount | `int64` | The amount of token locked. | |
+| receipt_type | `string` | The type of receipt (Approve, Reject, or Abstain). | |
+| time | `google.protobuf.Timestamp` | The timestamp of this method call. | |
+| organization_address | `aelf.Address` | The address of the organization. | |
+
+## AElf.Standards.ACS1
+
+### acs1.MethodFee
+
+| Field | Type | Description | Label |
+| --------- | ---------------------- | ----------------------------------- | ----- |
+| symbol | `string ` | The token symbol of the method fee. | |
+| basic_fee | `int64 ` | The amount of fees to be charged. | |
+
+### acs1.MethodFees
+
+| Field | Type | Description | Label |
+| ---------------- | --------------------------------- | ------------------------------------- | -------- |
+| method_name | `string ` | The name of the method to be charged. | |
+| fees | `MethodFee ` | List of fees to be charged. | repeated |
+| is_size_fee_free | `bool ` | Optional based on the implementation. | |
+
+## AElf.Standards.ACS3
+
+### acs3.CreateProposalBySystemContractInput
+
+| Field | Type | Description | Label |
+| --------------- | ----------------------------------------------------- | ------------------------------------ | ----- |
+| proposal_input | `CreateProposalInput ` | The parameters of creating proposal. | |
+| origin_proposer | `aelf.Address ` | The actor that triggers the call. | |
+
+### acs3.CreateProposalInput
+
+| Field | Type | Description | Label |
+| ------------------------ | ------------------------------------------------------------ | ----------------------------------------------------------- | ----- |
+| contract_method_name | `string ` | The name of the method to call after release. | |
+| to_address | `aelf.Address ` | The address of the contract to call after release. | |
+| params | `bytes ` | The parameter of the method to be called after the release. | |
+| expired_time | `google.protobuf.Timestamp ` | The timestamp at which this proposal will expire. | |
+| organization_address | `aelf.Address ` | The address of the organization. | |
+| proposal_description_url | `string ` | URL used for proposal description. | |
+| token | `aelf.Hash ` | The token for proposal ID generation. | |
+
+### acs3.OrganizationCreated
+
+| Field | Type | Description | Label |
+| -------------------- | ---------------------------------- | ---------------------------------------- | ----- |
+| organization_address | `aelf.Address ` | The address of the created organization. | |
+
+### acs3.OrganizationHashAddressPair
+
+| Field | Type | Description | Label |
+| -------------------- | ---------------------------------- | ---------------------------- | ----- |
+| organization_hash | `aelf.Hash ` | The ID of the organization. | |
+| organization_address | `aelf.Address ` | The address of organization. | |
+
+### acs3.OrganizationThresholdChanged
+
+| Field | Type | Description | Label |
+| -------------------------- | --------------------------------------------------------------- | -------------------------- | ----- |
+| organization_address | `aelf.Address ` | The organization address | |
+| proposer_release_threshold | `ProposalReleaseThreshold ` | The new release threshold. | |
+
+### acs3.OrganizationWhiteListChanged
+
+| Field | Type | Description | Label |
+| -------------------- | ------------------------------------------------- | --------------------------- | ----- |
+| organization_address | `aelf.Address ` | The organization address. | |
+| proposer_white_list | `ProposerWhiteList ` | The new proposer whitelist. | |
+
+### acs3.ProposalCreated
+
+| Field | Type | Description | Label |
+| -------------------- | ---------------------------------- | ------------------------------------------------- | ----- |
+| proposal_id | `aelf.Hash ` | The ID of the created proposal. | |
+| organization_address | `aelf.Address ` | The organization address of the created proposal. | |
+
+### acs3.ProposalOutput
+
+| Field | Type | Description | Label |
+| -------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | ----- |
+| proposal_id | `aelf.Hash ` | The ID of the proposal. | |
+| contract_method_name | `string ` | The method that this proposal will call when being released. | |
+| to_address | `aelf.Address ` | The address of the target contract. | |
+| params | `bytes ` | The parameters of the release transaction. | |
+| expired_time | `google.protobuf.Timestamp ` | The date at which this proposal will expire. | |
+| organization_address | `aelf.Address ` | The address of this proposal's organization. | |
+| proposer | `aelf.Address ` | The address of the proposer of this proposal. | |
+| to_be_released | `bool ` | Indicates if this proposal is releasable. | |
+| approval_count | `int64 ` | Approval count for this proposal. | |
+| rejection_count | `int64 ` | Rejection count for this proposal. | |
+| abstention_count | `int64 ` | Abstention count for this proposal. | |
+
+### acs3.ProposalReleaseThreshold
+
+| Field | Type | Description | Label |
+| ---------------------------- | -------------------- | ----------------------------------------------- | ----- |
+| minimal_approval_threshold | `int64 ` | The value for the minimum approval threshold. | |
+| maximal_rejection_threshold | `int64 ` | The value for the maximal rejection threshold. | |
+| maximal_abstention_threshold | `int64 ` | The value for the maximal abstention threshold. | |
+| minimal_vote_threshold | `int64 ` | The value for the minimal vote threshold. | |
+
+## AElf.Standards.ACS1
+
+### acs1.MethodFee
+
+| Field | Type | Description | Label |
+| --------- | -------- | ----------------------------------- | ----- |
+| symbol | `string` | The token symbol of the method fee. | |
+| basic_fee | `int64` | The amount of fees to be charged. | |
+
+#### acs1.MethodFees
+
+| Field | Type | Description | Label |
+| ---------------- | ----------- | ------------------------------------- | -------- |
+| method_name | `string` | The name of the method to be charged. | |
+| fees | `MethodFee` | List of fees to be charged. | repeated |
+| is_size_fee_free | `bool` | Optional based on the implementation. | |
+
+## AElf.Standards.ACS3
+
+### acs3.CreateProposalBySystemContractInput
+
+| Field | Type | Description | Label |
+| --------------- | --------------------- | ------------------------------------ | ----- |
+| proposal_input | `CreateProposalInput` | The parameters of creating proposal. | |
+| origin_proposer | `aelf.Address` | The actor that triggers the call. | |
+
+### acs3.CreateProposalInput
+
+| Field | Type | Description | Label |
+| ------------------------ | --------------------------- | ----------------------------------------------------------- | ----- |
+| contract_method_name | `string` | The name of the method to call after release. | |
+| to_address | `aelf.Address` | The address of the contract to call after release. | |
+| params | `bytes` | The parameter of the method to be called after the release. | |
+| expired_time | `google.protobuf.Timestamp` | The timestamp at which this proposal will expire. | |
+| organization_address | `aelf.Address` | The address of the organization. | |
+| proposal_description_url | `string` | URL used for proposal description. | |
+| token | `aelf.Hash` | The token for proposal ID generation. | |
+
+### acs3.OrganizationCreated
+
+| Field | Type | Description | Label |
+| -------------------- | -------------- | ---------------------------------------- | ----- |
+| organization_address | `aelf.Address` | The address of the created organization. | |
+
+### acs3.OrganizationHashAddressPair
+
+| Field | Type | Description | Label |
+| -------------------- | -------------- | ---------------------------- | ----- |
+| organization_hash | `aelf.Hash` | The ID of organization. | |
+| organization_address | `aelf.Address` | The address of organization. | |
+
+### acs3.OrganizationThresholdChanged
+
+| Field | Type | Description | Label |
+| -------------------------- | -------------------------- | -------------------------- | ----- |
+| organization_address | `aelf.Address` | The organization address | |
+| proposer_release_threshold | `ProposalReleaseThreshold` | The new release threshold. | |
+
+### acs3.OrganizationWhiteListChanged
+
+| Field | Type | Description | Label |
+| -------------------- | ------------------- | --------------------------- | ----- |
+| organization_address | `aelf.Address` | The organization address. | |
+| proposer_white_list | `ProposerWhiteList` | The new proposer whitelist. | |
+
+### acs3.ProposalCreated
+
+| Field | Type | Description | Label |
+| -------------------- | -------------- | ------------------------------- | ----- |
+| proposal_id | `aelf.Hash` | The ID of the created proposal. | |
+| organization_address | `aelf.Address` | The organization address. | |
+
+### acs3.ProposalOutput
+
+| Field | Type | Description | Label |
+| -------------------- | --------------------------- | ------------------------------------------------------------ | ----- |
+| proposal_id | `aelf.Hash` | The ID of the proposal. | |
+| contract_method_name | `string` | The method that this proposal will call when being released. | |
+| to_address | `aelf.Address` | The address of the target contract. | |
+| params | `bytes` | The parameters of the release transaction. | |
+| expired_time | `google.protobuf.Timestamp` | The date at which this proposal will expire. | |
+| organization_address | `aelf.Address` | The address of this proposal's organization. | |
+| proposer | `aelf.Address` | The address of the proposer of this proposal. | |
+| to_be_released | `bool` | Indicates if this proposal is releasable. | |
+| approval_count | `int64` | Approval count for this proposal. | |
+| rejection_count | `int64` | Rejection count for this proposal. | |
+| abstention_count | `int64` | Abstention count for this proposal. | |
+
+### acs3.ProposalReleaseThreshold
+
+| Field | Type | Description | Label |
+| ---------------------------- | ------- | ----------------------------------------------- | ----- |
+| minimal_approval_threshold | `int64` | The value for the minimum approval threshold. | |
+| maximal_rejection_threshold | `int64` | The value for the maximal rejection threshold. | |
+| maximal_abstention_threshold | `int64` | The value for the maximal abstention threshold. | |
+| minimal_vote_threshold | `int64` | The value for the minimal vote threshold. | |
+
+### acs3.ProposalReleased
+
+| Field | Type | Description | Label |
+| -------------------- | -------------- | -------------------------------------------------- | ----- |
+| proposal_id | `aelf.Hash` | The id of the released proposal. | |
+| organization_address | `aelf.Address` | The organization address of the released proposal. | |
+
+### acs3.ProposerWhiteList
+
+| Field | Type | Description | Label |
+| --------- | -------------- | ---------------------------- | -------- |
+| proposers | `aelf.Address` | The address of the proposers | repeated |
+
+### acs3.ReceiptCreated
+
+| Field | Type | Description | Label |
+| -------------------- | --------------------------- | -------------------------------------------------- | ----- |
+| proposal_id | `aelf.Hash` | The id of the proposal. | |
+| address | `aelf.Address` | The sender address. | |
+| receipt_type | `string` | The type of receipt (Approve, Reject, or Abstain). | |
+| time | `google.protobuf.Timestamp` | The timestamp of this method call. | |
+| organization_address | `aelf.Address` | The address of the organization. | |
+
+### acs3.ValidateProposerInWhiteListInput
+
+| Field | Type | Description | Label |
+| -------------------- | -------------- | -------------------------------- | --- |
+| proposer | `aelf.Address` | The address to search/check. | |
+| organization_address | `aelf.Address` | The address of the organization. | |
+
+## AElf.Types
+
+### aelf.Address
+
+| Field | Type | Description | Label |
+| ----- | ------- | ----------- | ----- |
+| value | `bytes` | | |
+
+### aelf.BinaryMerkleTree
+
+| Field | Type | Description | Label |
+| ---------- | ------- | ----------------------- | -------- |
+| nodes | `Hash` | The leaf nodes. | repeated |
+| root | `Hash` | The root node hash. | |
+| leaf_count | `int32` | The count of leaf node. | |
+
+### aelf.Hash
+
+| Field | Type | Description | Label |
+| ----- | ------- | ----------- | ----- |
+| value | `bytes` | | |
+
+### aelf.LogEvent
+
+| Field | Type | Description | Label |
+| ----------- | --------- | -------------------------- | -------- |
+| address | `Address` | The contract address. | |
+| name | `string` | The name of the log event. | |
+| indexed | `bytes` | The indexed data. | repeated |
+| non_indexed | `bytes` | The non-indexed data. | |
+
+### aelf.MerklePath
+
+| Field | Type | Description | Label |
+| ----------------- | ---------------- | ---------------------- | -------- |
+| merkle_path_nodes | `MerklePathNode` | The merkle path nodes. | repeated |
+
+### aelf.MerklePathNode
+
+| Field | Type | Description | Label |
+| ------------------ | ------ | -------------------------------- | ----- |
+| hash | `Hash` | The node hash. | |
+| is_left_child_node | `bool` | Whether it is a left child node. | |
+
+### aelf.SInt32Value
+
+| Field | Type | Description | Label |
+| ----- | -------- | ----------- | ----- |
+| value | `sint32` | | |
+
+### aelf.SInt64Value
+
+| Field | Type | Description | Label |
+| ----- | -------- | ----------- | ----- |
+| value | `sint64` | | |
+
+### aelf.ScopedStatePath
+
+| Field | Type | Description | Label |
+| ------- | ----------- | --------------------------- | ----- |
+| address | `Address` | The scope address. | |
+| path | `StatePath` | The path of contract state. | |
+
+### aelf.SmartContractRegistration
+
+| Field | Type | Description | Label |
+| ------------------ | ----------------------- | ------------------------------------- | ----- |
+| category | `sint32 ` | The category of contract code(0: C#). | |
+| code | `bytes ` | The byte array of the contract code. | |
+| code_hash | `Hash ` | The hash of the contract code. | |
+| is_system_contract | `bool ` | Whether it is a system contract. | |
+| version | `int32 ` | The version of the current contract. | |
+
+### aelf.StatePath
+
+| Field | Type | Description | Label |
+| ----- | ---------------------- | ----------------------------------- | -------- |
+| parts | `string ` | The partial path of the state path. | repeated |
+
+### aelf.Transaction
+
+| Field | Type | Description | Label |
+| ---------------- | ----------------------------- | ---------------------------------------------------------------- | ----- |
+| from | `Address ` | The address of the sender of the transaction. | |
+| to | `Address ` | The address of the contract when calling a contract. | |
+| ref_block_number | `int64 ` | The height of the referenced block hash. | |
+| ref_block_prefix | `bytes ` | The first four bytes of the referenced block hash. | |
+| method_name | `string ` | The name of a method in the smart contract at the To address. | |
+| params | `bytes ` | The parameters to pass to the smart contract method. | |
+| signature | `bytes ` | When signing a transaction it’s actually a subset of the fields. | |
+
+### aelf.TransactionExecutingStateSet
+
+| Field | Type | Description | Label |
+| ------- | ------------------------------------------------------------------------------------------------- | ------------------- | -------- |
+| writes | `TransactionExecutingStateSet.WritesEntry ` | The changed states. | repeated |
+| reads | `TransactionExecutingStateSet.ReadsEntry ` | The read states. | repeated |
+| deletes | `TransactionExecutingStateSet.DeletesEntry ` | The deleted states. | repeated |
+
+### aelf.TransactionExecutingStateSet.DeletesEntry
+
+| Field | Type | Description | Label |
+| ----- | ---------------------- | ----------- | ----- |
+| key | `string ` | | |
+| value | `bool ` | | |
+
+### aelf.TransactionExecutingStateSet.ReadsEntry
+
+| Field | Type | Description | Label |
+| ----- | ---------------------- | ----------- | ----- |
+| key | `string ` | | |
+| value | `bool ` | | |
+
+### aelf.TransactionExecutingStateSet.WritesEntry
+
+| Field | Type | Description | Label |
+| ----- | ---------------------- | ----------- | ----- |
+| key | `string ` | | |
+| value | `bytes ` | | |
+
+### aelf.TransactionResult
+
+| Field | Type | Description | Label |
+| -------------- | ------------------------------------------------------------- | ----------------------------------------------------- | -------- |
+| transaction_id | `Hash ` | The transaction id. | |
+| status | `TransactionResultStatus ` | The transaction result status. | |
+| logs | `LogEvent ` | The log events. | repeated |
+| bloom | `bytes ` | Bloom filter for transaction logs. | |
+| return_value | `bytes ` | The return value of the transaction execution. | |
+| block_number | `int64 ` | The height of the block hat packages the transaction. | |
+| block_hash | `Hash ` | The hash of the block hat packages the transaction. | |
+| error | `string ` | Failed execution error message. | |
+
+### aelf.TransactionResultStatus
+
+| Name | Number | Description |
+| ---------------------- | ------ | --------------------------------------------------------------------------------- |
+| NOT_EXISTED | 0 | The execution result of the transaction does not exist. |
+| PENDING | 1 | The transaction is in the transaction pool waiting to be packaged. |
+| FAILED | 2 | Transaction execution failed. |
+| MINED | 3 | The transaction was successfully executed and successfully packaged into a block. |
+| CONFLICT | 4 | When executed in parallel, there are conflicts with other transactions. |
+| PENDING_VALIDATION | 5 | The transaction is waiting for validation. |
+| NODE_VALIDATION_FAILED | 6 | Transaction validation failed. |
+
+## AuthorityInfo
+
+| Field | Type | Description | Label |
+| ---------------- | ------------------------------ | ----------------------------------------- | ----- |
+| contract_address | `aelf.Address ` | The contract address of the controller. | |
+| owner_address | `aelf.Address ` | The address of the owner of the contract. | |
diff --git a/docs/docs/smart-contract-api/token-convert-contract/index.md b/docs/docs/smart-contract-api/token-convert-contract/index.md
new file mode 100644
index 00000000..d359f3b7
--- /dev/null
+++ b/docs/docs/smart-contract-api/token-convert-contract/index.md
@@ -0,0 +1,308 @@
+---
+sidebar_position: 14
+title: Token Convert Contract
+---
+
+# TokenConverter
+
+Using this contract can build a connection between the base token and other tokens created on the chain. After building the connection, users can trade tokens with the Bancor model. You can find detailed information about Bancor in the AElf Economic System White Paper.
+
+Implement aelf Standards ACS1.
+
+## Contract Methods
+
+| Method Name | Request Type | Response Type | Description |
+| ------------------------------- | --------------------------------------- | ------------------------------ | --------------------------------------------------------------------------------------------------------------- |
+| Initialize | `TokenConverter.InitializeInput` | `google.protobuf.Empty` | Initialize TokenConvert contract. |
+| SetConnector | `TokenConverter.Connector` | `google.protobuf.Empty` | |
+| Buy | `TokenConverter.BuyInput` | `google.protobuf.Empty` | After establishing Bancor model of token and base token, you can buy token through this method. |
+| Sell | `TokenConverter.SellInput` | `google.protobuf.Empty` | After establishing Bancor model of token and base token, you can sell token through this method. |
+| SetFeeRate | `google.protobuf.StringValue` | `google.protobuf.Empty` | Set the fee rate for buy/sell (fee amount = cost \* feeRate). |
+| UpdateConnector | `TokenConverter.Connector` | `google.protobuf.Empty` | Before calling the EnableConnector, the connector controller can update the pair connector through this method. |
+| AddPairConnector | `TokenConverter.PairConnectorParam` | `google.protobuf.Empty` | Add a pair connector for new token and the base token. |
+| EnableConnector | `TokenConverter.ToBeConnectedTokenInfo` | `google.protobuf.Empty` | After adding a pair, you need to call this method to enable it before buying and selling tokens. |
+| ChangeConnectorController | `AuthorityInfo` | `google.protobuf.Empty` | Set the governance authority information for TokenConvert contract. |
+| GetPairConnector | `TokenConverter.TokenSymbol` | `TokenConverter.PairConnector` | Query the pair connector according to token symbol. |
+| GetFeeRate | `google.protobuf.Empty` | `google.protobuf.StringValue` | Query the fee rate for buy/sell. |
+| GetBaseTokenSymbol | `google.protobuf.Empty` | `TokenConverter.TokenSymbol` | Query the symbol of base token. |
+| GetNeededDeposit | `TokenConverter.ToBeConnectedTokenInfo` | `TokenConverter.DepositInfo` | Query how much the base token needs to be deposited before enabling the connector. |
+| GetDepositConnectorBalance | `google.protobuf.StringValue` | `google.protobuf.Int64Value` | Query how much the base token has been deposited. |
+| GetControllerForManageConnector | `google.protobuf.Empty` | `AuthorityInfo` | Query the governance authority information for TokenConvert contract. |
+| IsSymbolAbleToSell | `google.protobuf.StringValue` | `google.protobuf.BoolValue` | Query whether the token can be sold. |
+
+## AElf.Standards.ACS1
+
+| Method Name | Request Type | Response Type | Description |
+| ------------------------- | ----------------------------- | ----------------------- | -------------------------------------------------------------------------------------------------- |
+| SetMethodFee | `acs1.MethodFees` | `google.protobuf.Empty` | Set the method fees for the specified method. Note that this will override all fees of the method. |
+| ChangeMethodFeeController | `AuthorityInfo` | `google.protobuf.Empty` | Change the method fee controller, the default is parliament and default organization. |
+| GetMethodFee | `google.protobuf.StringValue` | `acs1.MethodFees` | Query method fee information by method name. |
+| GetMethodFeeController | `google.protobuf.Empty` | `AuthorityInfo` | Query the method fee controller. |
+
+# Contract Types
+
+## AElf.Contracts.TokenConverter
+
+### TokenConverter.BuyInput
+
+| Field | Type | Description | Label |
+| --------- | -------- | -------------------------------------------------------------------------------------------------------------- | ----- |
+| symbol | `string` | The token symbol you want to buy. | |
+| amount | `int64` | The amount you want to buy. | |
+| pay_limit | `int64` | Limit of cost. If the token required for buy exceeds this value, the buy will be abandoned. And 0 is no limit. | |
+
+### TokenConverter.Connector
+
+| Field | Type | Description | Label |
+| -------------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------ | ----- |
+| symbol | `string` | The token symbol. | |
+| virtual_balance | `int64` | The virtual balance for base token. | |
+| weight | `string` | The calculated weight value for this Connector. | |
+| is_virtual_balance_enabled | `bool` | Whether to use Virtual Balance. | |
+| is_purchase_enabled | `bool` | Whether the connector is enabled. | |
+| related_symbol | `string` | Indicates its related connector, the pair connector includes a new created token connector and the base token connector. | |
+| is_deposit_account | `bool` | Indicates if the connector is base token connector. | |
+
+### TokenConverter.DepositInfo
+
+| Field | Type | Description | Label |
+| --------------------------- | ------- | ---------------------------------------------------- | ----- |
+| need_amount | `int64` | How much more base Token is needed as the deposit. | |
+| amount_out_of_token_convert | `int64` | How many tokens are not on the TokenConvert address. | |
+
+### TokenConverter.InitializeInput
+
+| Field | Type | Description | Label |
+| ----------------- | ----------- | ------------------------------------------------------ | -------- |
+| base_token_symbol | `string` | Base token symbol, default is the native token symbol. | |
+| fee_rate | `string` | The fee rate for buy/sell. | |
+| connectors | `Connector` | The default added connectors. | repeated |
+
+### TokenConverter.PairConnector
+
+| Field | Type | Description | Label |
+| ------------------ | ----------- | ------------------------------------- | ----- |
+| resource_connector | `Connector` | The connector of the specified token. | |
+| deposit_connector | `Connector` | The related connector. | |
+
+### TokenConverter.PairConnectorParam
+
+| Field | Type | Description | Label |
+| ------------------------- | -------- | --------------------------------------------------- | ----- |
+| resource_connector_symbol | `string` | The token symbol. | |
+| resource_weight | `string` | The weight value of this token in the Bancor model. | |
+| native_virtual_balance | `int64` | This token corresponds to the value of base token. | |
+| native_weight | `string` | The weight value of base token in Bancor model. | |
+
+### TokenConverter.SellInput
+
+| Field | Type | Description | Label |
+| ------------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------- | ----- |
+| symbol | `string` | The token symbol you want to sell. | |
+| amount | `int64` | The amount you want to sell. | |
+| receive_limit | `int64` | Limits on tokens obtained by selling. If the token obtained is less than this value, the sale will be abandoned. And 0 is no limit. | |
+
+### TokenConverter.ToBeConnectedTokenInfo
+
+| Field | Type | Description | Label |
+| ----------------------- | -------- | ----------------------------------------------------------------------- | ----- |
+| token_symbol | `string` | The token symbol. | |
+| amount_to_token_convert | `int64` | Specifies the number of tokens to convert to the TokenConvert contract. | |
+
+### TokenConverter.TokenBought
+
+| Field | Type | Description | Label |
+| ------------- | -------- | --------------------------------- | ----- |
+| symbol | `string` | The token symbol bought. | |
+| bought_amount | `int64` | The amount bought. | |
+| base_amount | `int64` | The total cost of the base token. | |
+| fee_amount | `int64` | The fee amount. | |
+
+### TokenConverter.TokenSold
+
+| Field | Type | Description | Label |
+| ----------- | -------- | ------------------------------------- | ----- |
+| symbol | `string` | The token symbol sold. | |
+| sold_amount | `int64` | The amount sold. | |
+| base_amount | `int64` | The total received of the base token. | |
+| fee_amount | `int64` | The fee amount. | |
+
+### TokenConverter.TokenSymbol
+
+| Field | Type | Description | Label |
+| ------ | --------- | ----------------- | ----- |
+| symbol | `string ` | The token symbol. | |
+
+## AElf.Standards.ACS1
+
+### acs1.MethodFee
+
+| Field | Type | Description | Label |
+| --------- | --------- | ----------------------------------- | ----- |
+| symbol | `string ` | The token symbol of the method fee. | |
+| basic_fee | `int64 ` | The amount of fees to be charged. | |
+
+### acs1.MethodFees
+
+| Field | Type | Description | Label |
+| ---------------- | ------------ | ------------------------------------------------------------ | -------- |
+| method_name | `string ` | The name of the method to be charged. | |
+| fees | `MethodFee ` | List of fees to be charged. | repeated |
+| is_size_fee_free | `bool` | Optional based on the implementation of SetMethodFee method. | |
+
+## AElf.Types
+
+### aelf.Address
+
+| Field | Type | Description | Label |
+| ----- | -------- | ----------- | ----- |
+| value | `bytes ` | | |
+
+### aelf.BinaryMerkleTree
+
+| Field | Type | Description | Label |
+| ---------- | -------- | ----------------------- | -------- |
+| nodes | `Hash ` | The leaf nodes. | repeated |
+| root | `Hash ` | The root node hash. | |
+| leaf_count | `int32 ` | The count of leaf node. | |
+
+### aelf.Hash
+
+| Field | Type | Description | Label |
+| ----- | -------- | ----------- | ----- |
+| value | `bytes ` | | |
+
+### aelf.LogEvent
+
+| Field | Type | Description | Label |
+| ----------- | ---------- | ------------------------------------------ | -------- |
+| address | `Address ` | The contract address. | |
+| name | `string ` | The name of the log event. | |
+| indexed | `bytes ` | The indexed data, used to calculate bloom. | repeated |
+| non_indexed | `bytes ` | The non indexed data. | |
+
+### aelf.MerklePath
+
+| Field | Type | Description | Label |
+| ----------------- | ----------------- | ---------------------- | -------- |
+| merkle_path_nodes | `MerklePathNode ` | The merkle path nodes. | repeated |
+
+### aelf.MerklePathNode
+
+| Field | Type | Description | Label |
+| ------------------ | ------- | -------------------------------- | ----- |
+| hash | `Hash ` | The node hash. | |
+| is_left_child_node | `bool` | Whether it is a left child node. | |
+
+### aelf.SInt32Value
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------- | ----- |
+| value | `sint32 ` | | |
+
+### aelf.SInt64Value
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------- | ----- |
+| value | `sint64 ` | | |
+
+### aelf.ScopedStatePath
+
+| Field | Type | Description | Label |
+| ------- | ------------------------------ | ------------------------------------------------------ | ----- |
+| address | `Address` | The scope address, which will be the contract address. | |
+| path | `StatePath` | The path of contract state. | |
+
+### aelf.SmartContractRegistration
+
+| Field | Type | Description | Label |
+| ------------------ | -------------------- | -------------------------------------- | ----- |
+| category | `sint32` | The category of contract code (0: C#). | |
+| code | `bytes` | The byte array of the contract code. | |
+| code_hash | `Hash` | The hash of the contract code. | |
+| is_system_contract | `bool` | Whether it is a system contract. | |
+| version | `int32` | The version of the current contract. | |
+
+### aelf.StatePath
+
+| Field | Type | Description | Label |
+| ----- | ------------------- | ----------------------------------- | -------- |
+| parts | `string` | The partial path of the state path. | repeated |
+
+### aelf.Transaction
+
+| Field | Type | Description | Label |
+| ---------------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----- |
+| from | `Address` | The address of the sender of the transaction. | |
+| to | `Address` | The address of the contract when calling a contract. | |
+| ref_block_number | `int64` | The height of the referenced block hash. | |
+| ref_block_prefix | `bytes` | The first four bytes of the referenced block hash. | |
+| method_name | `string` | The name of a method in the smart contract at the To address. | |
+| params | `bytes` | The parameters to pass to the smart contract method. | |
+| signature | `bytes` | When signing a transaction it’s actually a subset of the fields: from/to and the target method as well as the parameter that were given. It also contains the reference block number and prefix. | |
+
+### aelf.TransactionExecutingStateSet
+
+| Field | Type | Description | Label |
+| ------- | ---------------------------------------------------------------------------------------------- | ------------------- | -------- |
+| writes | [`TransactionExecutingStateSet.WritesEntry`](#aelf.TransactionExecutingStateSet.WritesEntry) | The changed states. | repeated |
+| reads | [`TransactionExecutingStateSet.ReadsEntry`](#aelf.TransactionExecutingStateSet.ReadsEntry) | The read states. | repeated |
+| deletes | [`TransactionExecutingStateSet.DeletesEntry`](#aelf.TransactionExecutingStateSet.DeletesEntry) | The deleted states. | repeated |
+
+
+
+### aelf.TransactionExecutingStateSet.DeletesEntry
+
+| Field | Type | Description | Label |
+| ----- | ------------------- | ----------- | ----- |
+| key | `string` | | |
+| value | `bool` | | |
+
+
+
+### aelf.TransactionExecutingStateSet.ReadsEntry
+
+| Field | Type | Description | Label |
+| ----- | ------------------- | ----------- | ----- |
+| key | `string` | | |
+| value | `bool` | | |
+
+### aelf.TransactionExecutingStateSet.WritesEntry
+
+| Field | Type | Description | Label |
+| ----- | ------------------- | ----------- | ----- |
+| key | `string` | | |
+| value | `bytes` | | |
+
+### aelf.TransactionResult
+
+| Field | Type | Description | Label |
+| -------------- | ---------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------- |
+| transaction_id | `Hash` | The transaction id. | |
+| status | `TransactionResultStatus` | The transaction result status. | |
+| logs | `LogEvent` | The log events. | repeated |
+| bloom | `bytes` | Bloom filter for transaction logs. A transaction log event can be defined in the contract and stored in the bloom filter after the transaction is executed. Through this filter, we can quickly search for and determine whether a log exists in the transaction result. | |
+| return_value | `bytes` | The return value of the transaction execution. | |
+| block_number | `int64` | The height of the block hat packages the transaction. | |
+| block_hash | `Hash` | The hash of the block hat packages the transaction. | |
+| error | `string` | Failed execution error message. | |
+
+### aelf.TransactionResultStatus
+
+| Name | Number | Description |
+| ---------------------- | ------ | --------------------------------------------------------------------------------- |
+| NOT_EXISTED | 0 | The execution result of the transaction does not exist. |
+| PENDING | 1 | The transaction is in the transaction pool waiting to be packaged. |
+| FAILED | 2 | Transaction execution failed. |
+| MINED | 3 | The transaction was successfully executed and successfully packaged into a block. |
+| CONFLICT | 4 | When executed in parallel, there are conflicts with other transactions. |
+| PENDING_VALIDATION | 5 | The transaction is waiting for validation. |
+| NODE_VALIDATION_FAILED | 6 | Transaction validation failed. |
+
+## AuthorityInfo
+
+| Field | Type | Description | Label |
+| ---------------- | ------------------------------- | ----------------------------------------- | ----- |
+| contract_address | `aelf.Address` | The contract address of the controller. | |
+| owner_address | `aelf.Address` | The address of the owner of the contract. | |
+
diff --git a/docs/docs/smart-contract-api/token-holder-contract/index.md b/docs/docs/smart-contract-api/token-holder-contract/index.md
new file mode 100644
index 00000000..07c41ba7
--- /dev/null
+++ b/docs/docs/smart-contract-api/token-holder-contract/index.md
@@ -0,0 +1,301 @@
+---
+sidebar_position: 12
+title: Token Holder Contract
+---
+
+# TokenHolder contract.
+
+Used to build a bonus model for distributing bonuses to those who hold the token.
+
+Implement aelf Standards ACS1.
+
+## Contract Methods
+
+| Method Name | Request Type | Response Type | Description |
+| ------------------ | ------------------------------------------------- | ------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------- |
+| CreateScheme | `TokenHolder.CreateTokenHolderProfitSchemeInput ` | `google.protobuf.Empty <#google.protobuf.Empty>` | Create a scheme for distributing bonuses. |
+| AddBeneficiary | `TokenHolder.AddTokenHolderBeneficiaryInput ` | `google.protobuf.Empty <#google.protobuf.Empty>` | Add a beneficiary to a scheme. |
+| RemoveBeneficiary | `TokenHolder.RemoveTokenHolderBeneficiaryInput ` | `google.protobuf.Empty <#google.protobuf.Empty>` | Removes a beneficiary from a scheme. Note: amount > 0: update the weight of the beneficiary, amount = 0: remove the beneficiary. |
+| ContributeProfits | `TokenHolder.ContributeProfitsInput ` | `google.protobuf.Empty <#google.protobuf.Empty>` | Contribute profit to a scheme. |
+| DistributeProfits | `TokenHolder.DistributeProfitsInput ` | `google.protobuf.Empty <#google.protobuf.Empty>` | To distribute the profits of the scheme, the stakeholders of the project may go to receive dividends. |
+| RegisterForProfits | `TokenHolder.RegisterForProfitsInput ` | `google.protobuf.Empty <#google.protobuf.Empty>` | The user registers a bonus project. |
+| Withdraw | `aelf.Address ` | `google.protobuf.Empty <#google.protobuf.Empty>` | After the lockup time expires, the user can withdraw tokens. |
+| ClaimProfits | `TokenHolder.ClaimProfitsInput ` | `google.protobuf.Empty <#google.protobuf.Empty>` | After DistributeProfits, the holder can get his dividend. |
+| GetScheme | `aelf.Address ` | `TokenHolder.TokenHolderProfitScheme ` | Query the details of the specified scheme. |
+| GetProfitsMap | `TokenHolder.ClaimProfitsInput` | `TokenHolder.ReceivedProfitsMap ` | Query the dividends available to the holder. |
+
+## AElf.Standards.ACS1
+
+| Method Name | Request Type | Response Type | Description |
+| ------------------------- | ------------------------------------------------------------ | ------------------------------------------------ | -------------------------------------------------------------------------------------------------- |
+| SetMethodFee | `acs1.MethodFees ` | `google.protobuf.Empty <#google.protobuf.Empty>` | Set the method fees for the specified method. Note that this will override all fees of the method. |
+| ChangeMethodFeeController | `AuthorityInfo <#AuthorityInfo>` | `google.protobuf.Empty <#google.protobuf.Empty>` | Change the method fee controller, the default is parliament and default organization. |
+| GetMethodFee | `google.protobuf.StringValue <#google.protobuf.StringValue>` | `acs1.MethodFees <#acs1.MethodFees>` | Query method fee information by method name. |
+| GetMethodFeeController | `google.protobuf.Empty <#google.protobuf.Empty>` | `AuthorityInfo <#AuthorityInfo>` | Query the method fee controller. |
+
+**Contract Types**
+
+## AElf.Contracts.TokenHolder
+### TokenHolder.AddTokenHolderBeneficiaryInput
+
+| Field | Type | Description | Label |
+| ----------- | --------------- | -------------------------------------------------------- | ----- |
+| beneficiary | `aelf.Address ` | Beneficiary's address. | |
+| shares | `int64 ` | The weight of the beneficiary's dividends in the scheme. | |
+
+### TokenHolder.ClaimProfitsInput
+
+| Field | Type | Description | Label |
+| -------------- | --------------- | -------------------------- | ----- |
+| scheme_manager | `aelf.Address ` | The manager of the scheme. | |
+| beneficiary | `aelf.Address` |
+
+### TokenHolder.ContributeProfitsInput
+
+| Field | Type | Description | Label |
+| -------------- | -------------- | ---------------------------------- | ----- |
+| scheme_manager | `aelf.Address` | The manager of the scheme. | |
+| amount | `int64` | The amount of token to contribute. | |
+| symbol | `string` | The symbol of token to contribute. | |
+
+### TokenHolder.CreateTokenHolderProfitSchemeInput
+
+| Field | Type | Description | Label |
+| ------------------------- | ----------------------------------------------------------------- | ------------------------------------------ | -------- |
+| symbol | `string` | The token symbol. | |
+| minimum_lock_minutes | `int64` | Minimum lock time for holding token. | |
+| auto_distribute_threshold | `CreateTokenHolderProfitSchemeInput.AutoDistributeThresholdEntry` | Threshold setting for releasing dividends. | repeated |
+
+### TokenHolder.CreateTokenHolderProfitSchemeInput.AutoDistributeThresholdEntry
+
+| Field | Type | Description | Label |
+| ----- | -------- | ----------- | ----- |
+| key | `string` | | |
+| value | `int64` | | |
+
+### TokenHolder.DistributeProfitsInput
+
+| Field | Type | Description | Label |
+| -------------- | ---------------------------------------- | ------------------------------------------ | -------- |
+| scheme_manager | `aelf.Address` | The manager of the scheme. | |
+| amounts_map | `DistributeProfitsInput.AmountsMapEntry` | The token to distribute, symbol -> amount. | repeated |
+
+### TokenHolder.DistributeProfitsInput.AmountsMapEntry
+
+| Field | Type | Description | Label |
+| ----- | -------- | ----------- | ----- |
+| key | `string` | | |
+| value | `int64` | | |
+
+### TokenHolder.ReceivedProfitsMap
+
+| Field | Type | Description | Label |
+| ----- | ------------------------------- | -------------------------------------------------------------- | -------- |
+| value | `ReceivedProfitsMap.ValueEntry` | The amount of token the beneficiary can get, symbol -> amount. | repeated |
+
+### TokenHolder.ReceivedProfitsMap.ValueEntry
+
+| Field | Type | Description | Label |
+| ----- | -------- | ----------- | ----- |
+| key | `string` | | |
+| value | `int64` | | |
+
+### TokenHolder.RegisterForProfitsInput
+
+| Field | Type | Description | Label |
+| -------------- | -------------- | ---------------------------- | ----- |
+| scheme_manager | `aelf.Address` | The manager of the scheme. | |
+| amount | `int64` | The amount of token holding. | |
+
+### TokenHolder.RemoveTokenHolderBeneficiaryInput
+
+| Field | Type | Description | Label |
+| ----------- | -------------- | -------------------------------- | ----- |
+| beneficiary | `aelf.Address` | Beneficiary's address. | |
+| amount | `int64` | The amount of weights to remove. | |
+
+### TokenHolder.TokenHolderProfitScheme
+
+| Field | Type | Description | Label |
+| ------------------------- | ------------------------------------------------------ | ------------------------------------------ | -------- |
+| symbol | `string` | The token symbol. | |
+| scheme_id | `aelf.Hash` | The scheme id. | |
+| period | `int64` | The current dividend period. | |
+| minimum_lock_minutes | `int64` | Minimum lock time for holding token. | |
+| auto_distribute_threshold | `TokenHolderProfitScheme.AutoDistributeThresholdEntry` | Threshold setting for releasing dividends. | repeated |
+
+### TokenHolder.TokenHolderProfitScheme.AutoDistributeThresholdEntry
+
+| Field | Type | Description | Label |
+| ----- | -------- | ----------- | ----- |
+| key | `string` | | |
+| value | `int64` | | |
+
+## AElf.Standards.ACS1
+
+### acs1.MethodFee
+
+| Field | Type | Description | Label |
+| --------- | -------- | ----------------------------------- | ----- |
+| symbol | `string` | The token symbol of the method fee. | |
+| basic_fee | `int64` | The amount of fees to be charged. | |
+
+### acs1.MethodFees
+
+| Field | Type | Description | Label |
+| ---------------- | ----------- | ------------------------------------------------------------ | -------- |
+| method_name | `string` | The name of the method to be charged. | |
+| fees | `MethodFee` | List of fees to be charged. | repeated |
+| is_size_fee_free | `bool` | Optional based on the implementation of SetMethodFee method. | |
+
+## AElf.Types
+
+### aelf.Address
+
+| Field | Type | Description | Label |
+| ----- | ------- | ----------- | ----- |
+| value | `bytes` | | |
+
+### aelf.BinaryMerkleTree
+
+| Field | Type | Description | Label |
+| ---------- | ------- | ----------------------- | -------- |
+| nodes | `Hash` | The leaf nodes. | repeated |
+| root | `Hash` | The root node hash. | |
+| leaf_count | `int32` | The count of leaf node. | |
+
+### aelf.Hash
+
+| Field | Type | Description | Label |
+| ----- | -------- | ----------- | ----- |
+| value | `bytes ` | | |
+
+### aelf.LogEvent
+
+| Field | Type | Description | Label |
+| ----------- | ---------- | ------------------------------------------ | -------- |
+| address | `Address ` | The contract address. | |
+| name | `string ` | The name of the log event. | |
+| indexed | `bytes ` | The indexed data, used to calculate bloom. | repeated |
+| non_indexed | `bytes ` | The non indexed data. | |
+
+### aelf.MerklePath
+
+| Field | Type | Description | Label |
+| ----------------- | --------------------------------------- | ---------------------- | -------- |
+| merkle_path_nodes | `MerklePathNode <#aelf.MerklePathNode>` | The merkle path nodes. | repeated |
+
+### aelf.MerklePathNode
+
+| Field | Type | Description | Label |
+| ------------------ | ------- | -------------------------------- | ----- |
+| hash | `Hash ` | The node hash. | |
+| is_left_child_node | `bool ` | Whether it is a left child node. | |
+
+### aelf.SInt32Value
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------- | ----- |
+| value | `sint32 ` | | |
+
+### aelf.SInt64Value
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------- | ----- |
+| value | `sint64 ` | | |
+
+### aelf.ScopedStatePath
+
+| Field | Type | Description | Label |
+| ------- | ------------ | ------------------------------------------------------ | ----- |
+| address | `Address ` | The scope address, which will be the contract address. | |
+| path | `StatePath ` | The path of contract state. | |
+
+### aelf.SmartContractRegistration
+
+| Field | Type | Description | Label |
+| ------------------ | -------- | -------------------------------------- | ----- |
+| category | `sint32` | The category of contract code (0: C#). | |
+| code | `bytes ` | The byte array of the contract code. | |
+| code_hash | `Hash ` | The hash of the contract code. | |
+| is_system_contract | `bool ` | Whether it is a system contract. | |
+| version | `int32 ` | The version of the current contract. | |
+
+### aelf.StatePath
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------------------------------- | -------- |
+| parts | `string ` | The partial path of the state path. | repeated |
+
+### aelf.Transaction
+
+| Field | Type | Description | Label |
+| ---------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----- |
+| from | `Address ` | The address of the sender of the transaction. | |
+| to | `Address ` | The address of the contract when calling a contract. | |
+| ref_block_number | `int64 ` | The height of the referenced block hash. | |
+| ref_block_prefix | `bytes ` | The first four bytes of the referenced block hash. | |
+| method_name | `string ` | The name of a method in the smart contract at the To address. | |
+| params | `bytes ` | The parameters to pass to the smart contract method. | |
+| signature | `bytes ` | When signing a transaction it’s actually a subset of the fields: from/to and the target method as well as the parameter that were given. It also contains the reference block number and prefix. | |
+
+### aelf.TransactionExecutingStateSet
+
+| Field | Type | Description | Label |
+| ------- | -------------------------------------------- | ------------------- | -------- |
+| writes | `TransactionExecutingStateSet.WritesEntry ` | The changed states. | repeated |
+| reads | `TransactionExecutingStateSet.ReadsEntry ` | The read states. | repeated |
+| deletes | `TransactionExecutingStateSet.DeletesEntry ` | The deleted states. | repeated |
+
+### aelf.TransactionExecutingStateSet.DeletesEntry
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------- | ----- |
+| key | `string ` | | |
+| value | `bool ` | | |
+
+### aelf.TransactionExecutingStateSet.ReadsEntry
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------- | ----- |
+| key | `string ` | | |
+| value | `bool ` | | |
+
+### aelf.TransactionExecutingStateSet.WritesEntry
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------- | ----- |
+| key | `string ` | | |
+| value | `bytes ` | | |
+
+### aelf.TransactionResult
+
+| Field | Type | Description | Label |
+| -------------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------- |
+| transaction_id | `Hash ` | The transaction id. | |
+| status | `TransactionResultStatus ` | The transaction result status. | |
+| logs | `LogEvent ` | The log events. | repeated |
+| bloom | `bytes ` | Bloom filter for transaction logs. A transaction log event can be defined in the contract and stored in the bloom filter after the transaction is executed. Through this filter, we can quickly search for and determine whether a log exists in the transaction result. | |
+| return_value | `bytes ` | The return value of the transaction execution. | |
+| block_number | `int64 ` | The height of the block that packages the transaction. | |
+| block_hash | `Hash ` | The hash of the block that packages the transaction. | |
+| error | `string ` | Failed execution error message. | |
+
+### aelf.TransactionResultStatus
+
+| Name | Number | Description |
+| ---------------------- | ------ | --------------------------------------------------------------------------------- |
+| NOT_EXISTED | 0 | The execution result of the transaction does not exist. |
+| PENDING | 1 | The transaction is in the transaction pool waiting to be packaged. |
+| FAILED | 2 | Transaction execution failed. |
+| MINED | 3 | The transaction was successfully executed and successfully packaged into a block. |
+| CONFLICT | 4 | When executed in parallel, there are conflicts with other transactions. |
+| PENDING_VALIDATION | 5 | The transaction is waiting for validation. |
+| NODE_VALIDATION_FAILED | 6 | Transaction validation failed. |
+
+## AuthorityInfo
+
+| Field | Type | Description | Label |
+| ---------------- | --------------- | ----------------------------------------- | ----- |
+| contract_address | `aelf.Address ` | The contract address of the controller. | |
+| owner_address | `aelf.Address ` | The address of the owner of the contract. | |
diff --git a/docs/docs/smart-contract-api/treasury-contract/index.md b/docs/docs/smart-contract-api/treasury-contract/index.md
new file mode 100644
index 00000000..3d1c4d81
--- /dev/null
+++ b/docs/docs/smart-contract-api/treasury-contract/index.md
@@ -0,0 +1,363 @@
+---
+sidebar_position: 10
+title: Treasury Contract
+---
+
+# AElf.Contracts.Treasury
+
+Treasury contract.
+
+Used for distributing bonuses to voters and candidates during the election process.
+
+Implement aelf Standards ACS1 and ACS10.
+
+## Contract Methods
+
+| Method Name | Request Type | Response Type | Description |
+| ------------------------------- | ----------------------------------------------- | --------------------------------------------- | ---------------------------------------------------------------------------------------- |
+| InitialTreasuryContract | `google.protobuf.Empty` | `google.protobuf.Empty` | Initialize treasury contract. |
+| InitialMiningRewardProfitItem | `google.protobuf.Empty` | `google.protobuf.Empty` | Initialize the sub-item of the bonus scheme. |
+| DonateAll | `Treasury.DonateAllInput` | `google.protobuf.Empty` | Donate all tokens owned by the sender. |
+| SetDividendPoolWeightSetting | `Treasury.DividendPoolWeightSetting` | `google.protobuf.Empty` | Set the dividend weight of the sub-item of the dividend item. |
+| SetMinerRewardWeightSetting | `Treasury.MinerRewardWeightSetting` | `google.protobuf.Empty` | Set the miner reward weight. |
+| SetProfitsReceiver | `Treasury.SetProfitsReceiverInput` | `google.protobuf.Empty` | Set collect profits receiver address. |
+| UpdateMiningReward | `google.protobuf.Int64Value` | `google.protobuf.Empty` | Set the reward for mining. |
+| ChangeTreasuryController | `AuthorityInfo` | `google.protobuf.Empty` | Change the governance authority information for the treasury contract. |
+| RecordMinerReplacement | `Treasury.RecordMinerReplacementInput` | `google.protobuf.Empty` | AEDPoS Contract can notify Treasury Contract to be aware of miner replacement happening. |
+| GetWelfareRewardAmountSample | `Treasury.GetWelfareRewardAmountSampleInput` | `Treasury.GetWelfareRewardAmountSampleOutput` | Used to estimate the revenue weight of 10000 tokens voted by users. |
+| GetTreasurySchemeId | `google.protobuf.Empty` | `aelf.Hash` | Get the scheme id of treasury. |
+| GetDividendPoolWeightProportion | `google.protobuf.Empty` | `Treasury.DividendPoolWeightProportion` | Query the weight percentage of dividend pool items. |
+| GetMinerRewardWeightProportion | `google.protobuf.Empty` | `Treasury.MinerRewardWeightProportion` | Query the weight percentage of the dividend item for miners. |
+| GetTreasuryController | `google.protobuf.Empty` | `AuthorityInfo` | Query the governance authority information. |
+| GetProfitsReceiver | `google.protobuf.StringValue` | `aelf.Address` | Get profits receiver. If not set, return the candidate's address. |
+| GetProfitsReceiverOrDefault | `google.protobuf.StringValue` | `aelf.Address` | Get profits receiver. If not set, return null. |
+| ReplaceCandidateProfitsReceiver | `Treasury.ReplaceCandidateProfitsReceiverInput` | `google.protobuf.Empty` | Query the governance authority information. |
+
+## AElf.Standards.ACS1
+
+| Method Name | Request Type | Response Type | Description |
+| ------------------------- | ----------------------------- | ----------------------- | -------------------------------------------------------------------------------------------------- |
+| SetMethodFee | `acs1.MethodFees` | `google.protobuf.Empty` | Set the method fees for the specified method. Note that this will override all fees of the method. |
+| ChangeMethodFeeController | `AuthorityInfo` | `google.protobuf.Empty` | Change the method fee controller, the default is parliament and default organization. |
+| GetMethodFee | `google.protobuf.StringValue` | `acs1.MethodFees` | Query method fee information by method name. |
+| GetMethodFeeController | `google.protobuf.Empty` | `AuthorityInfo` | Query the method fee controller. |
+
+## AElf.Standards.ACS10
+
+| Method Name | Request Type | Response Type | Description |
+| ------------------------- | ---------------------------- | ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| Donate | `acs10.DonateInput` | `google.protobuf.Empty` | Donates tokens from the caller to the treasury. If the tokens are not native tokens in the current chain, they will be first converted to the native token. |
+| Release | `acs10.ReleaseInput` | `google.protobuf.Empty` | Release dividend pool according to the period number. |
+| SetSymbolList | `acs10.SymbolList` | `google.protobuf.Empty` | Set the token symbols dividend pool supports. |
+| GetSymbolList | `google.protobuf.Empty` | `acs10.SymbolList` | Query the token symbols dividend pool supports. |
+| GetUndistributedDividends | `google.protobuf.Empty` | `acs10.Dividends` | Query the balance of undistributed tokens whose symbols are included in the symbol list. |
+| GetDividends | `google.protobuf.Int64Value` | `acs10.Dividends` | Query the dividend information according to the height. |
+
+**Contract Types**
+
+## AElf.Contracts.Treasury
+
+### Treasury.DividendPoolWeightProportion
+
+| Field | Type | Description | Label |
+| ------------------------------- | ---------------------- | ---------------------------------- | ----- |
+| citizen_welfare_proportion_info | `SchemeProportionInfo` | The proportion of citizen welfare. | |
+| backup_subsidy_proportion_info | `SchemeProportionInfo` | The proportion of candidate nodes. | |
+| miner_reward_proportion_info | `SchemeProportionInfo` | The proportion of miner | |
+
+### Treasury.DividendPoolWeightSetting
+
+| Field | Type | Description | Label |
+| ---------------------- | ------- | --------------------------------------- | ----- |
+| citizen_welfare_weight | `int32` | The dividend weight of citizen welfare. | |
+| backup_subsidy_weight | `int32` | The dividend weight of candidate nodes. | |
+| miner_reward_weight | `int32` | The dividend weight of miner. | |
+
+### Treasury.DonateAllInput
+
+| Field | Type | Description | Label |
+| ------ | -------- | --------------------------- | ----- |
+| symbol | `string` | The token symbol to donate. | |
+
+### Treasury.GetWelfareRewardAmountSampleInput
+
+| Field | Type | Description | Label |
+| ----- | ------- | ---------------- | -------- |
+| value | `int64` | Token lock time. | repeated |
+
+### Treasury.GetWelfareRewardAmountSampleOutput
+
+| Field | Type | Description | Label |
+| ----- | ------- | ---------------------- | -------- |
+| value | `int64` | The weight calculated. | repeated |
+
+### Treasury.MinerReElectionInformation
+
+| Field | Type | Description | Label |
+| --------------------------- | ----------------------------------------------------------- | ---------------------------------------- | -------- |
+| continual_appointment_times | `MinerReElectionInformation.ContinualAppointmentTimesEntry` | The reappointment information for miner. | repeated |
+
+### Treasury.MinerReElectionInformation.ContinualAppointmentTimesEntry
+
+| Field | Type | Description | Label |
+| ----- | -------- | ----------- | ----- |
+| key | `string` | | |
+| value | `int64` | | |
+
+### Treasury.MinerRewardWeightProportion
+
+| Field | Type | Description | Label |
+| ----------------------------------- | ---------------------- | ------------------------------------------------- | ----- |
+| basic_miner_reward_proportion_info | `SchemeProportionInfo` | The proportion of the basic income of the miner. | |
+| votes_weight_reward_proportion_info | `SchemeProportionInfo` | The proportion of the vote of the miner. | |
+| re_election_reward_proportion_info | `SchemeProportionInfo` | The proportion of the reappointment of the miner. | |
+
+### Treasury.MinerRewardWeightSetting
+
+| Field | Type | Description | Label |
+| -------------------------- | ------- | ------------------------------------------------------ | ----- |
+| basic_miner_reward_weight | `int32` | The dividend weight of the basic income of the miner. | |
+| votes_weight_reward_weight | `int32` | The dividend weight of the vote of the miner. | |
+| re_election_reward_weight | `int32` | The dividend weight of the reappointment of the miner. | |
+
+### Treasury.RecordMinerReplacementInput
+
+| Field | Type | Description | Label |
+| ------------------- | -------- | ----------- | ----- |
+| old_pubkey | `string` | | |
+| new_pubkey | `string` | | |
+| current_term_number | `int64` | | |
+
+### Treasury.SchemeProportionInfo
+
+| Field | Type | Description | Label |
+| ---------- | ----------- | --------------------------- | ----- |
+| scheme_id | `aelf.Hash` | The scheme id. | |
+| proportion | `int32` | Dividend weight percentage. | |
+
+### Treasury.SetProfitsReceiverInput
+
+| Field | Type | Description | Label |
+| ------------------------ | ----------- | -------------------------------- | ----- |
+| pubkey | `string` | The candidate's public key. | |
+| profits_receiver_address | `aelf.Hash` | The address of profits receiver. | |
+
+### Treasury.ReplaceCandidateProfitsReceiverInput
+
+| Field | Type | Description | Label |
+| ---------- | -------- | ------------------------------- | ----- |
+| old_pubkey | `string` | The old candidate's public key. | |
+| new_pubkey | `string` | The new candidate's public key. | |
+
+
+## AElf.Standards.ACS1
+
+### acs1.MethodFee
+
+| Field | Type | Description | Label |
+| --------- | --------- | ----------------------------------- | ----- |
+| symbol | `string ` | The token symbol of the method fee. | |
+| basic_fee | `int64 ` | The amount of fees to be charged. | |
+
+### acs1.MethodFees
+
+| Field | Type | Description | Label |
+| ---------------- | ------------ | ------------------------------------- | -------- |
+| method_name | `string ` | The name of the method to be charged. | |
+| fees | `MethodFee ` | List of fees to be charged. | repeated |
+| is_size_fee_free | `bool ` | Optional based on the implementation. | |
+
+## AElf.Standards.ACS10
+
+### acs10.Dividends
+
+| Field | Type | Description | Label |
+| ----- | ----------------------- | -------------------------------- | -------- |
+| value | `Dividends.ValueEntry ` | The dividends, symbol -> amount. | repeated |
+
+### acs10.Dividends.ValueEntry
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------- | ----- |
+| key | `string ` | | |
+| value | `int64 ` | | |
+
+### acs10.DonateInput
+
+| Field | Type | Description | Label |
+| ------ | --------- | --------------------------- | ----- |
+| symbol | `string ` | The token symbol to donate. | |
+| amount | `int64 ` | The amount to donate. | |
+
+### acs10.DonationReceived
+
+| Field | Type | Description | Label |
+| ------------- | --------------- | ----------------------------- | ----- |
+| from | `aelf.Address ` | The address of donors. | |
+| pool_contract | `aelf.Address ` | The address of dividend pool. | |
+| symbol | `string ` | The token symbol Donated. | |
+| amount | `int64 ` | The amount Donated. | |
+
+### acs10.ReleaseInput
+
+| Field | Type | Description | Label |
+| ------------- | -------- | ----------------------------- | ----- |
+| period_number | `int64 ` | The period number to release. | |
+
+### acs10.SymbolList
+
+| Field | Type | Description | Label |
+| ----- | --------- | ---------------------- | -------- |
+| value | `string ` | The token symbol list. | repeated |
+
+## AElf.Types
+
+### aelf.Address
+
+| Field | Type | Description | Label |
+| ----- | -------- | ----------- | ----- |
+| value | `bytes ` | | |
+
+### aelf.BinaryMerkleTree
+
+| Field | Type | Description | Label |
+| ---------- | -------- | ----------------------- | -------- |
+| nodes | `Hash ` | The leaf nodes. | repeated |
+| root | `Hash ` | The root node hash. | |
+| leaf_count | `int32 ` | The count of leaf node. | |
+
+### aelf.Hash
+
+| Field | Type | Description | Label |
+| ----- | -------- | ----------- | ----- |
+| value | `bytes ` | | |
+
+### aelf.LogEvent
+
+| Field | Type | Description | Label |
+| ----------- | ---------- | ------------------------------------------ | -------- |
+| address | `Address ` | The contract address. | |
+| name | `string ` | The name of the log event. | |
+| indexed | `bytes ` | The indexed data, used to calculate bloom. | repeated |
+| non_indexed | `bytes ` | The non-indexed data. | |
+
+### aelf.MerklePath
+
+| Field | Type | Description | Label |
+| ----------------- | ----------------- | ---------------------- | -------- |
+| merkle_path_nodes | `MerklePathNode ` | The merkle path nodes. | repeated |
+
+### aelf.MerklePathNode
+
+| Field | Type | Description | Label |
+| ------------------ | ------- | ------------------------------- | ----- |
+| hash | `Hash ` | The node hash. | |
+| is_left_child_node | `bool ` | Whether it's a left child node. | |
+
+### aelf.SInt32Value
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------- | ----- |
+| value | `sint32 ` | | |
+
+### aelf.SInt64Value
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------- | ----- |
+| value | `sint64 ` | | |
+
+### aelf.ScopedStatePath
+
+| Field | Type | Description | Label |
+| ------- | ------------ | ------------------------------------------------------ | ----- |
+| address | `Address ` | The scope address, which will be the contract address. | |
+| path | `StatePath ` | The path of contract state. | |
+
+### aelf.SmartContractRegistration
+
+| Field | Type | Description | Label |
+| ------------------ | --------- | -------------------------------------- | ----- |
+| category | `sint32 ` | The category of contract code (0: C#). | |
+| code | `bytes ` | The byte array of the contract code. | |
+| code_hash | `Hash ` | The hash of the contract code. | |
+| is_system_contract | `bool ` | Whether it is a system contract. | |
+| version | `int32 ` | The version of the current contract. | |
+
+### aelf.StatePath
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------------------------------- | -------- |
+| parts | `string ` | The partial path of the state path. | repeated |
+
+### aelf.Transaction
+
+| Field | Type | Description | Label |
+| ---------------- | ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----- |
+| from | `Address ` | The address of the sender of the transaction. | |
+| to | `Address ` | The address of the contract when calling a contract. | |
+| ref_block_number | `int64 ` | The height of the referenced block hash. | |
+| ref_block_prefix | `bytes ` | The first four bytes of the referenced block hash. | |
+| method_name | `string ` | The name of a method in the smart contract at the To address. | |
+| params | `bytes ` | The parameters to pass to the smart contract method. | |
+| signature | `bytes ` | When signing a transaction, it’s actually a subset of the fields: from/to and the target method, as well as the parameter that were given. It also contains the reference block number and prefix. | |
+
+### aelf.TransactionExecutingStateSet
+
+| Field | Type | Description | Label |
+| ------- | -------------------------------------------- | ------------------- | -------- |
+| writes | `TransactionExecutingStateSet.WritesEntry ` | The changed states. | repeated |
+| reads | `TransactionExecutingStateSet.ReadsEntry ` | The read states. | repeated |
+| deletes | `TransactionExecutingStateSet.DeletesEntry ` | The deleted states. | repeated |
+
+### aelf.TransactionExecutingStateSet.DeletesEntry
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------- | ----- |
+| key | `string ` | | |
+| value | `bool ` | | |
+
+### aelf.TransactionExecutingStateSet.ReadsEntry
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------- | ----- |
+| key | `string ` | | |
+| value | `bool ` | | |
+
+### aelf.TransactionExecutingStateSet.WritesEntry
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------- | ----- |
+| key | `string ` | | |
+| value | `bytes ` | | |
+
+### aelf.TransactionResult
+
+| Field | Type | Description | Label |
+| -------------- | -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- |
+| transaction_id | `Hash ` | The transaction id. | |
+| status | `TransactionResultStatus ` | The transaction result status. | |
+| logs | `LogEvent ` | The log events. | repeated |
+| bloom | `bytes ` | Bloom filter for transaction logs. A transaction log event can be defined in the contract and stored in the bloom filter after the transaction is executed. | |
+| return_value | `bytes ` | The return value of the transaction execution. | |
+| block_number | `int64 ` | The height of the block that packages the transaction. | |
+| block_hash | `Hash ` | The hash of the block that packages the transaction. | |
+| error | `string ` | Failed execution error message. | |
+
+### aelf.TransactionResultStatus
+
+| Name | Number | Description |
+| ---------------------- | ------ | --------------------------------------------------------------------------------- |
+| NOT_EXISTED | 0 | The execution result of the transaction does not exist. |
+| PENDING | 1 | The transaction is in the transaction pool waiting to be packaged. |
+| FAILED | 2 | Transaction execution failed. |
+| MINED | 3 | The transaction was successfully executed and successfully packaged into a block. |
+| CONFLICT | 4 | When executed in parallel, there are conflicts with other transactions. |
+| PENDING_VALIDATION | 5 | The transaction is waiting for validation. |
+| NODE_VALIDATION_FAILED | 6 | Transaction validation failed. |
+
+## AuthorityInfo
+
+| Field | Type | Description | Label |
+| ---------------- | --------------- | ----------------------------------------- | ----- |
+| contract_address | `aelf.Address ` | The contract address of the controller. | |
+| owner_address | `aelf.Address ` | The address of the owner of the contract. | |
diff --git a/docs/docs/smart-contract-api/vote-contract/index.md b/docs/docs/smart-contract-api/vote-contract/index.md
new file mode 100644
index 00000000..e9361390
--- /dev/null
+++ b/docs/docs/smart-contract-api/vote-contract/index.md
@@ -0,0 +1,402 @@
+---
+sidebar_position: 11
+title: Vote Contract
+---
+
+# Vote contract.
+
+The Vote contract is an abstract layer for voting. Developers implement
+concrete voting activities by calling this contract.
+
+Implements aelf Standards ACS1.
+
+## Contract Methods
+
+| Method Name | Request Type | Response Type | Description |
+| --------------------- | ----------------------------- | ------------------------------------------------ | ------------------------------------------------------------------------------------- |
+| Register | `Vote.VotingRegisterInput ` | `google.protobuf.Empty <#google.protobuf.Empty>` | Create a voting activity. |
+| Vote | `Vote.VoteInput ` | `google.protobuf.Empty <#google.protobuf.Empty>` | After successfully creating a voting activity, others are able to vote. |
+| Withdraw | `Vote.WithdrawInput ` | `google.protobuf.Empty <#google.protobuf.Empty>` | A voter can withdraw the token after the lock time. |
+| TakeSnapshot | `Vote.TakeSnapshotInput ` | `google.protobuf.Empty <#google.protobuf.Empty>` | Save the result of the specified number of votes and generates a new round of votes. |
+| AddOption | `Vote.AddOptionInput ` | `google.protobuf.Empty <#google.protobuf.Empty>` | Add an option to a voting activity. |
+| RemoveOption | `Vote.RemoveOptionInput ` | `google.protobuf.Empty <#google.protobuf.Empty>` | Remove an option from a voting activity. |
+| AddOptions | `Vote.AddOptionsInput ` | `google.protobuf.Empty <#google.protobuf.Empty>` | Add multiple options to a voting activity. |
+| RemoveOptions | `Vote.RemoveOptionsInput ` | `google.protobuf.Empty <#google.protobuf.Empty>` | Remove multiple options from a voting activity. |
+| GetVotingItem | `Vote.GetVotingItemInput ` | `Vote.VotingItem ` | Get a voting activity information. |
+| GetVotingResult | `Vote.GetVotingResultInput ` | `Vote.VotingResult ` | Get a voting result according to the provided voting activity id and snapshot number. |
+| GetLatestVotingResult | `aelf.Hash ` | `Vote.VotingResult ` | Gets the latest result according to the voting activity id. |
+| GetVotingRecord | `aelf.Hash ` | `Vote.VotingRecord ` | Get the voting record according to vote id. |
+| GetVotingRecords | `Vote.GetVotingRecordsInput ` | `Vote.VotingRecords <#Vote.VotingRecords>` | Get the voting record according to vote ids. |
+| GetVotedItems | `aelf.Address ` | `Vote.VotedItems <#Vote.VotedItems>` | Get all voted information according to voter address. |
+| GetVotingIds | `Vote.GetVotingIdsInput ` | `Vote.VotedIds ` | Get the vote ids according to voting activity id. |
+
+## AElf.Standards.ACS1
+
+| Method Name | Request Type | Response Type | Description |
+| ------------------------- | ------------------------------ | ------------------------ | -------------------------------------------------------------------------------------------------- |
+| SetMethodFee | `acs1.MethodFees ` | `google.protobuf.Empty ` | Set the method fees for the specified method. Note that this will override all fees of the method. |
+| ChangeMethodFeeController | `AuthorityInfo` | `google.protobuf.Empty ` | Change the method fee controller, the default is parliament and default organization. |
+| GetMethodFee | `google.protobuf.StringValue ` | `acs1.MethodFees ` | Query method fee information by method name. |
+| GetMethodFeeController | `google.protobuf.Empty ` | `AuthorityInfo` | Query the method fee controller. |
+
+ **Contract Types**
+
+## AElf.Contracts.Vote
+
+### Vote.AddOptionInput
+
+| Field | Type | Description | Label |
+| -------------- | ------------ | ----------------------- | ----- |
+| voting_item_id | `aelf.Hash ` | The voting activity id. | |
+| option | `string ` | The new option to add. | |
+
+### Vote.AddOptionsInput
+
+| Field | Type | Description | Label |
+| -------------- | ------------ | ----------------------- | -------- |
+| voting_item_id | `aelf.Hash ` | The voting activity id. | |
+| options | `string ` | The new options to add. | repeated |
+
+### Vote.GetVotingIdsInput
+
+| Field | Type | Description | Label |
+| -------------- | --------------- | ----------------------- | ----- |
+| voter | `aelf.Address ` | The address of voter. | |
+| voting_item_id | `aelf.Hash ` | The voting activity id. | |
+
+### Vote.GetVotingItemInput
+
+| Field | Type | Description | Label |
+| -------------- | ------------ | ----------------------- | ----- |
+| voting_item_id | `aelf.Hash ` | The voting activity id. | |
+
+### Vote.GetVotingRecordsInput
+
+| Field | Type | Description | Label |
+| ----- | ------------ | ------------- | -------- |
+| ids | `aelf.Hash ` | The vote ids. | repeated |
+
+### Vote.GetVotingResultInput
+
+| Field | Type | Description | Label |
+| --------------- | ------------ | ----------------------- | ----- |
+| voting_item_id | `aelf.Hash ` | The voting activity id. | |
+| snapshot_number | `int64 ` | The snapshot number. | |
+
+### Vote.RemoveOptionInput
+
+| Field | Type | Description | Label |
+| -------------- | ------------ | ----------------------- | ----- |
+| voting_item_id | `aelf.Hash ` | The voting activity id. | |
+| option | `string ` | The option to remove. | |
+
+### Vote.RemoveOptionsInput
+
+| Field | Type | Description | Label |
+| -------------- | ------------ | ----------------------- | -------- |
+| voting_item_id | `aelf.Hash ` | The voting activity id. | |
+| options | `string ` | The options to remove. | repeated |
+
+### Vote.TakeSnapshotInput
+
+| Field | Type | Description | Label |
+| --------------- | ------------ | ---------------------------- | ----- |
+| voting_item_id | `aelf.Hash ` | The voting activity id. | |
+| snapshot_number | `int64 ` | The snapshot number to take. | |
+
+### Vote.VoteInput
+
+| Field | Type | Description | Label |
+| ---------------- | --------------- | ----------------------- | ----- |
+| voting_item_id | `aelf.Hash ` | The voting activity id. | |
+| voter | `aelf.Address ` | The address of voter. | |
+| amount | `int64 ` | The amount of vote. | |
+| option | `string ` | The option to vote. | |
+| vote_id | `aelf.Hash ` | The vote id. | |
+| is_change_target | `bool ` | Whether vote others. | |
+
+### Vote.Voted
+
+| Field | Type | Description | Label |
+| --------------- | -------------------------------------------------------- | ----------------------- | ----- |
+| voting_item_id | `aelf.Hash ` | The voting activity id. | |
+| voter | `aelf.Address ` | The address of voter. | |
+| snapshot_number | `int64 ` | The snapshot number. | |
+| amount | `int64 ` | The amount of vote. | |
+| vote_timestamp | `google.protobuf.Timestamp <#google.protobuf.Timestamp>` | The time of vote. | |
+| option | `string ` | The option voted. | |
+| vote_id | `aelf.Hash ` | The vote id. | |
+
+### Vote.VotedIds
+
+| Field | Type | Description | Label |
+| --------------- | ------------ | ----------------------- | -------- |
+| active_votes | `aelf.Hash ` | The active vote ids. | repeated |
+| withdrawn_votes | `aelf.Hash ` | The withdrawn vote ids. | repeated |
+
+### Vote.VotedItems
+
+| Field | Type | Description | Label |
+| ------------------- | ----------------------------------- | -------------- | -------- |
+| voted_item_vote_ids | `VotedItems.VotedItemVoteIdsEntry ` | The voted ids. | repeated |
+
+### Vote.VotedItems.VotedItemVoteIdsEntry
+
+| Field | Type | Description | Label |
+| ----- | ----------- | ----------- | ----- |
+| key | `string ` | | |
+| value | `VotedIds ` | | |
+
+### Vote.VotingItem
+
+| Field | Type | Description | Label |
+| -------------------------------- | -------------------------------------------------------- | ---------------------------------------------- | -------- |
+| voting_item_id | `aelf.Hash ` | The voting activity id. | |
+| accepted_currency | `string ` | The token symbol which will be accepted. | |
+| is_lock_token | `bool ` | Whether the vote will lock token. | |
+| current_snapshot_number | `int64 ` | The current snapshot number. | |
+| total_snapshot_number | `int64 ` | The total snapshot number. | |
+| options | `string ` | The list of options. | repeated |
+| register_timestamp | `google.protobuf.Timestamp <#google.protobuf.Timestamp>` | The register time of the voting activity. | |
+| start_timestamp | `google.protobuf.Timestamp <#google.protobuf.Timestamp>` | The start time of the voting. | |
+| end_timestamp | `google.protobuf.Timestamp <#google.protobuf.Timestamp>` | The end time of the voting. | |
+| current_snapshot_start_timestamp | `google.protobuf.Timestamp <#google.protobuf.Timestamp>` | The start time of current round of the voting. | |
+| sponsor | `aelf.Address ` | The sponsor address of the voting activity. | |
+
+### Vote.VotingItemRegistered
+
+| Field | Type | Description | Label |
+| -------------------------------- | -------------------------------------------------------- | ---------------------------------------------- | ----- |
+| voting_item_id | `aelf.Hash ` | The voting activity id. | |
+| accepted_currency | `string ` | The token symbol which will be accepted. | |
+| is_lock_token | `bool ` | Whether the vote will lock token. | |
+| current_snapshot_number | `int64 ` | The current snapshot number. | |
+| total_snapshot_number | `int64 ` | The total number of snapshots of the vote. | |
+| register_timestamp | `google.protobuf.Timestamp <#google.protobuf.Timestamp>` | The register time of the voting activity. | |
+| start_timestamp | `google.protobuf.Timestamp <#google.protobuf.Timestamp>` | The start time of the voting. | |
+| end_timestamp | `google.protobuf.Timestamp <#google.protobuf.Timestamp>` | The end time of the voting. | |
+| current_snapshot_start_timestamp | `google.protobuf.Timestamp <#google.protobuf.Timestamp>` | The start time of current round of the voting. | |
+| sponsor | `aelf.Address ` | The sponsor address of the voting activity. | |
+
+### Vote.VotingRecord
+
+| Field | Type | Description | Label |
+| ------------------ | -------------------------------------------------------- | ------------------------------------ | ----- |
+| voting_item_id | `aelf.Hash ` | The voting activity id. | |
+| voter | `aelf.Address ` | The address of voter. | |
+| snapshot_number | `int64 ` | The snapshot number. | |
+| amount | `int64 ` | The amount of vote. | |
+| withdraw_timestamp | `google.protobuf.Timestamp <#google.protobuf.Timestamp>` | The time of withdraw. | |
+| vote_timestamp | `google.protobuf.Timestamp <#google.protobuf.Timestamp>` | The time of vote. | |
+| is_withdrawn | `bool ` | Whether the vote had been withdrawn. | |
+| option | `string ` | The option voted. | |
+| is_change_target | `bool ` | Whether vote others. | |
+
+### Vote.VotingRecords
+
+| Field | Type | Description | Label |
+| ------- | --------------- | ------------------- | -------- |
+| records | `VotingRecord ` | The voting records. | repeated |
+
+### Vote.VotingRegisterInput
+
+| Field | Type | Description | Label |
+| --------------------- | -------------------------------------------------------- | ------------------------------------------ | -------- |
+| start_timestamp | `google.protobuf.Timestamp <#google.protobuf.Timestamp>` | The start time of the voting. | |
+| end_timestamp | `google.protobuf.Timestamp <#google.protobuf.Timestamp>` | The end time of the voting. | |
+| accepted_currency | `string ` | The token symbol which will be accepted. | |
+| is_lock_token | `bool ` | Whether the vote will lock token. | |
+| total_snapshot_number | `int64 ` | The total number of snapshots of the vote. | |
+| options | `string ` | The list of options. | repeated |
+
+### Vote.VotingResult
+
+| Field | Type | Description | Label |
+| ------------------------ | -------------------------------------------------------- | --------------------------------------------------------- | -------- |
+| voting_item_id | `aelf.Hash ` | The voting activity id. | |
+| results | `VotingResult.ResultsEntry ` | The voting result, option -> amount of votes, | repeated |
+| snapshot_number | `int64 ` | The snapshot number. | |
+| voters_count | `int64 ` | The total number of voters. | |
+| snapshot_start_timestamp | `google.protobuf.Timestamp <#google.protobuf.Timestamp>` | The start time of this snapshot. | |
+| snapshot_end_timestamp | `google.protobuf.Timestamp <#google.protobuf.Timestamp>` | The end time of this snapshot. | |
+| votes_amount | `int64 ` | Total votes received during the process of this snapshot. | |
+
+### Vote.VotingResult.ResultsEntry
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------- | ----- |
+| key | `string ` | | |
+| value | `int64 ` | | |
+
+### Vote.WithdrawInput
+
+| Field | Type | Description | Label |
+| ------- | ------------ | ------------ | ----- |
+| vote_id | `aelf.Hash ` | The vote id. | |
+
+### Vote.Withdrawn
+
+| Field | Type | Description | Label |
+| ------- | ------------ | ------------ | ----- |
+| vote_id | `aelf.Hash ` | The vote id. | |
+
+## AElf.Standards.ACS1
+
+### acs1.MethodFee
+
+| Field | Type | Description | Label |
+| --------- | --------- | ----------------------------------- | ----- |
+| symbol | `string ` | The token symbol of the method fee. | |
+| basic_fee | `int64 ` | The amount of fees to be charged. | |
+
+### acs1.MethodFees
+
+| Field | Type | Description | Label |
+| ---------------- | ------------ | ------------------------------------------------------------ | -------- |
+| method_name | `string ` | The name of the method to be charged. | |
+| fees | `MethodFee ` | List of fees to be charged. | repeated |
+| is_size_fee_free | `bool ` | Optional based on the implementation of SetMethodFee method. | |
+
+## AElf.Types
+
+### aelf.Address
+
+| Field | Type | Description | Label |
+| ----- | -------- | ----------- | ----- |
+| value | `bytes ` | | |
+
+### aelf.BinaryMerkleTree
+
+| Field | Type | Description | Label |
+| ---------- | -------- | ----------------------- | -------- |
+| nodes | `Hash ` | The leaf nodes. | repeated |
+| root | `Hash ` | The root node hash. | |
+| leaf_count | `int32 ` | The count of leaf node. | |
+
+### aelf.Hash
+
+| Field | Type | Description | Label |
+| ----- | -------- | ----------- | ----- |
+| value | `bytes ` | | |
+
+### aelf.LogEvent
+
+| Field | Type | Description | Label |
+| ----------- | ---------- | -------------------------- | -------- |
+| address | `Address ` | The contract address. | |
+| name | `string ` | The name of the log event. | |
+| indexed | `bytes ` | The indexed data. | repeated |
+| non_indexed | `bytes ` | The non indexed data. | |
+
+### aelf.MerklePath
+
+| Field | Type | Description | Label |
+| ----------------- | ----------------- | ---------------------- | -------- |
+| merkle_path_nodes | `MerklePathNode ` | The merkle path nodes. | repeated |
+
+### aelf.MerklePathNode
+
+| Field | Type | Description | Label |
+| ------------------ | ------- | -------------------------------- | ----- |
+| hash | `Hash ` | The node hash. | |
+| is_left_child_node | `bool ` | Whether it is a left child node. | |
+
+### aelf.SInt32Value
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------- | ----- |
+| value | `sint32 ` | | |
+
+### aelf.SInt64Value
+
+| Field | Type | Description | Label |
+| ----- | -------- | ----------- | ----- |
+| value | `sint64` | | |
+
+### aelf.ScopedStatePath
+
+| Field | Type | Description | Label |
+| ------- | ----------------------------- | ------------------------------------------------------ | ----- |
+| address | `Address ` | The scope address, which will be the contract address. | |
+| path | `StatePath <#aelf.StatePath>` | The path of contract state. | |
+
+### aelf.SmartContractRegistration
+
+| Field | Type | Description | Label |
+| ------------------ | --------- | ------------------------------------- | ----- |
+| category | `sint32 ` | The category of contract code(0: C#). | |
+| code | `bytes ` | The byte array of the contract code. | |
+| code_hash | `Hash ` | The hash of the contract code. | |
+| is_system_contract | `bool ` | Whether it is a system contract. | |
+| version | `int32 ` | The version of the current contract. | |
+
+### aelf.StatePath
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------------------------------- | -------- |
+| parts | `string ` | The partial path of the state path. | repeated |
+
+### aelf.Transaction
+
+| Field | Type | Description | Label |
+| ---------------- | ---------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ----- |
+| from | `Address ` | The address of the sender of the transaction. | |
+| to | `Address ` | The address of the contract when calling a contract. | |
+| ref_block_number | `int64 ` | The height of the referenced block hash. | |
+| ref_block_prefix | `bytes ` | The first four bytes of the referenced block hash. | |
+| method_name | `string ` | The name of a method in the smart contract at the To address. | |
+| params | `bytes ` | The parameters to pass to the smart contract method. | |
+| signature | `bytes ` | When signing a transaction it’s actually a subset of the fields: from/to and the target method as well as the parameter that were given. | |
+
+### aelf.TransactionExecutingStateSet.DeletesEntry
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------- | ----- |
+| key | `string ` | | |
+| value | `bool ` | | |
+
+### aelf.TransactionExecutingStateSet.ReadsEntry
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------- | ----- |
+| key | `string ` | | |
+| value | `bool ` | | |
+
+### aelf.TransactionExecutingStateSet.WritesEntry
+
+| Field | Type | Description | Label |
+| ----- | --------- | ----------- | ----- |
+| key | `string ` | | |
+| value | `bytes ` | | |
+
+### aelf.TransactionResult
+
+| Field | Type | Description | Label |
+| -------------- | -------------------------- | ---------------------------------------------- | -------- |
+| transaction_id | `Hash ` | The transaction id. | |
+| status | `TransactionResultStatus ` | The transaction result status. | |
+| logs | `LogEvent ` | The log events. | repeated |
+| bloom | `bytes ` | Bloom filter for transaction logs. | |
+| return_value | `bytes ` | The return value of the transaction execution. | |
+| block_number | `int64 `** | The height of the block that packages the transaction. | |
+| block_hash | `Hash `** | The hash of the block that packages the transaction. | |
+| error | `string ` | Failed execution error message. | |
+
+### aelf.TransactionResultStatus
+
+| Name | Number | Description |
+| ---------------------- | ------ | --------------------------------------------------------------------------------- |
+| NOT_EXISTED | 0 | The execution result of the transaction does not exist. |
+| PENDING | 1 | The transaction is in the transaction pool waiting to be packaged. |
+| FAILED | 2 | Transaction execution failed. |
+| MINED | 3 | The transaction was successfully executed and successfully packaged into a block. |
+| CONFLICT | 4 | When executed in parallel, there are conflicts with other transactions. |
+| PENDING_VALIDATION | 5 | The transaction is waiting for validation. |
+| NODE_VALIDATION_FAILED | 6 | Transaction validation failed. |
+
+## AuthorityInfo
+
+| Field | Type | Description | Label |
+| ---------------- | --------------- | ----------------------------------------- | ----- |
+| contract_address | `aelf.Address ` | The contract address of the controller. | |
+| owner_address | `aelf.Address ` | The address of the owner of the contract. | |
diff --git a/docs/docs/web-api/chain-api/index.md b/docs/docs/web-api/chain-api/index.md
new file mode 100644
index 00000000..0187ef13
--- /dev/null
+++ b/docs/docs/web-api/chain-api/index.md
@@ -0,0 +1,584 @@
+---
+sidebar_position: 1
+title: Chain API
+---
+
+# Chain API
+
+## Get information about a given block by block hash. Optionally with the list of its transactions.
+
+```http
+GET /api/blockChain/block
+```
+
+| Parameter | Type | Description | Default |
+| :-------------------- | :-------- | :-------------------------------- | :-------- |
+| `blockHash` | `string` | Block hash _(optional)_ | |
+| `includeTransactions` | `boolean` | Include transactions _(optional)_ | `"false"` |
+
+### Responses
+
+- **200**: Success (`BlockDto`)
+
+### Produces
+
+- `text/plain; v=1.0`
+- `application/json; v=1.0`
+- `text/json; v=1.0`
+- `application/x-protobuf; v=1.0`
+
+### Tags
+
+- **BlockChain**
+
+---
+
+## Get information about a given block by block height. Optionally with the list of its transactions.
+
+```http
+GET /api/blockChain/blockByHeight
+```
+
+| Parameter | Type | Description | Default |
+| :-------------------- | :-------- | :-------------------------------- | :-------- |
+| `blockHeight` | `integer` | Block height _(optional)_ | |
+| `includeTransactions` | `boolean` | Include transactions _(optional)_ | `"false"` |
+
+### Responses
+
+- **200**: Success (`BlockDto`)
+
+### Produces
+
+- `text/plain; v=1.0`
+- `application/json; v=1.0`
+- `text/json; v=1.0`
+- `application/x-protobuf; v=1.0`
+
+### Tags
+
+- **BlockChain**
+
+---
+
+## Get the height of the current chain.
+
+```http
+GET /api/blockChain/blockHeight
+```
+
+### Responses
+
+- **200**: Success (integer, int64)
+
+### Produces
+
+- `text/plain; v=1.0`
+- `application/json; v=1.0`
+- `text/json; v=1.0`
+- `application/x-protobuf; v=1.0`
+
+### Tags
+
+- **BlockChain**
+
+---
+
+## Get the current state about a given block.
+
+```http
+GET /api/blockChain/blockState
+```
+
+| Parameter | Type | Description |
+| :---------- | :------- | :---------------------- |
+| `blockHash` | `string` | Block hash _(optional)_ |
+
+### Responses
+
+- **200**: Success (`BlockStateDto`)
+
+### Produces
+
+- `text/plain; v=1.0`
+- `application/json; v=1.0`
+- `text/json; v=1.0`
+- `application/x-protobuf; v=1.0`
+
+### Tags
+
+- **BlockChain**
+
+---
+
+## Get the current status of the block chain.
+
+```http
+GET /api/blockChain/chainStatus
+```
+
+### Responses
+
+- **200**: Success (`ChainStatusDto`)
+
+### Produces
+
+- `text/plain; v=1.0`
+- `application/json; v=1.0`
+- `text/json; v=1.0`
+- `application/x-protobuf; v=1.0`
+
+### Tags
+
+- **BlockChain**
+
+---
+
+## Get the protobuf definitions related to a contract.
+
+```http
+GET /api/blockChain/contractFileDescriptorSet
+```
+
+| Parameter | Type | Description |
+| :-------- | :------- | :---------------------------- |
+| `address` | `string` | Contract address _(optional)_ |
+
+### Responses
+
+- **200**: Success (string, byte)
+
+### Produces
+
+- `text/plain; v=1.0`
+- `application/json; v=1.0`
+- `text/json; v=1.0`
+- `application/x-protobuf; v=1.0`
+
+### Tags
+
+- **BlockChain**
+
+---
+
+## Execute a raw transaction.
+
+```http
+POST /api/blockChain/executeRawTransaction
+```
+
+### Parameters
+
+| Type | Name | Schema |
+| :------- | :------ | :-------------------------------------- |
+| **Body** | `input` | `ExecuteRawTransactionDto` _(optional)_ |
+
+### Responses
+
+| HTTP Code | Description | Schema |
+| :-------: | :---------- | :----- |
+| **200** | Success | string |
+
+### Consumes
+
+- `application/json-patch+json; v=1.0`
+- `application/json; v=1.0`
+- `text/json; v=1.0`
+- `application/*+json; v=1.0`
+- `application/x-protobuf; v=1.0`
+
+### Produces
+
+- `text/plain; v=1.0`
+- `application/json; v=1.0`
+- `text/json; v=1.0`
+- `application/x-protobuf; v=1.0`
+
+### Tags
+
+- **BlockChain**
+
+---
+
+## Call a read-only method on a contract.
+
+```http
+POST /api/blockChain/executeTransaction
+```
+
+### Parameters
+
+| Type | Name | Schema |
+| :------- | :------ | :----------------------------------- |
+| **Body** | `input` | `ExecuteTransactionDto` _(optional)_ |
+
+### Responses
+
+| HTTP Code | Description | Schema |
+| :-------: | :---------- | :----- |
+| **200** | Success | string |
+
+### Consumes
+
+- `application/json-patch+json; v=1.0`
+- `application/json; v=1.0`
+- `text/json; v=1.0`
+- `application/*+json; v=1.0`
+- `application/x-protobuf; v=1.0`
+
+### Produces
+
+- `text/plain; v=1.0`
+- `application/json; v=1.0`
+- `text/json; v=1.0`
+- `application/x-protobuf; v=1.0`
+
+### Tags
+
+- **BlockChain**
+
+---
+
+## Get the merkle path of a transaction.
+
+```http
+GET /api/blockChain/merklePathByTransactionId
+```
+
+### Parameters
+
+| Type | Name | Schema |
+| :-------: | :-------------- | :------------------ |
+| **Query** | `transactionId` | string _(optional)_ |
+
+### Responses
+
+| HTTP Code | Description | Schema |
+| :-------: | :---------- | :-------------- |
+| **200** | Success | `MerklePathDto` |
+
+### Produces
+
+- `text/plain; v=1.0`
+- `application/json; v=1.0`
+- `text/json; v=1.0`
+- `application/x-protobuf; v=1.0`
+
+### Tags
+
+- **BlockChain**
+
+---
+
+## Creates an unsigned serialized transaction.
+
+```http
+POST /api/blockChain/rawTransaction
+```
+
+### Parameters
+
+| Type | Name | Schema |
+| :------- | :------ | :--------------------------------------- |
+| **Body** | `input` | `CreateRawTransactionInput` _(optional)_ |
+
+### Responses
+
+| HTTP Code | Description | Schema |
+| :-------: | :---------- | :--------------------------- |
+| **200** | Success | `CreateRawTransactionOutput` |
+
+### Consumes
+
+- `application/json-patch+json; v=1.0`
+- `application/json; v=1.0`
+- `text/json; v=1.0`
+- `application/*+json; v=1.0`
+- `application/x-protobuf; v=1.0`
+
+### Produces
+
+- `text/plain; v=1.0`
+- `application/json; v=1.0`
+- `text/json; v=1.0`
+- `application/x-protobuf; v=1.0`
+
+### Tags
+
+- **BlockChain**
+
+---
+
+## Send a transaction.
+
+```http
+POST /api/blockChain/sendRawTransaction
+```
+
+### Parameters
+
+| Type | Name | Schema |
+| :------- | :------ | :------------------------------------- |
+| **Body** | `input` | `SendRawTransactionInput` _(optional)_ |
+
+### Responses
+
+| HTTP Code | Description | Schema |
+| :-------: | :---------- | :------------------------- |
+| **200** | Success | `SendRawTransactionOutput` |
+
+### Consumes
+
+- `application/json-patch+json; v=1.0`
+- `application/json; v=1.0`
+- `text/json; v=1.0`
+- `application/*+json; v=1.0`
+- `application/x-protobuf; v=1.0`
+
+### Produces
+
+- `text/plain; v=1.0`
+- `application/json; v=1.0`
+- `text/json; v=1.0`
+- `application/x-protobuf; v=1.0`
+
+### Tags
+
+- **BlockChain**
+
+---
+
+## Broadcast a Transaction
+
+```http
+POST /api/blockChain/sendTransaction
+```
+
+### Parameters
+
+| Type | Name | Schema | Description | Required |
+| -------- | ------- | ---------------------- | ----------- | -------- |
+| **Body** | `input` | `SendTransactionInput` | - | No |
+
+### Responses
+
+| HTTP Code | Description | Schema |
+| --------- | ----------- | ----------------------- |
+| **200** | Success | `SendTransactionOutput` |
+
+### Consumes
+
+- `application/json-patch+json; v=1.0`
+- `application/json; v=1.0`
+- `text/json; v=1.0`
+- `application/*+json; v=1.0`
+- `application/x-protobuf; v=1.0`
+
+### Produces
+
+- `text/plain; v=1.0`
+- `application/json; v=1.0`
+- `text/json; v=1.0`
+- `application/x-protobuf; v=1.0`
+
+\*\*Tags
+
+- BlockChain
+
+---
+
+## Broadcast Multiple Transactions
+
+```http
+POST /api/blockChain/sendTransactions
+```
+
+### Parameters
+
+| Type | Name | Schema | Description | Required |
+| -------- | ------- | ----------------------- | ----------- | -------- |
+| **Body** | `input` | `SendTransactionsInput` | - | No |
+
+### Responses
+
+| HTTP Code | Description | Schema |
+| --------- | ----------- | ------------ |
+| **200** | Success | `` |
+
+### Consumes
+
+- `application/json-patch+json; v=1.0`
+- `application/json; v=1.0`
+- `text/json; v=1.0`
+- `application/*+json; v=1.0`
+- `application/x-protobuf; v=1.0`
+
+### Produces
+
+- `text/plain; v=1.0`
+- `application/json; v=1.0`
+- `text/json; v=1.0`
+- `application/x-protobuf; v=1.0`
+
+### Tags
+
+- BlockChain
+
+---
+
+## Estimate Transaction Fee
+
+```http
+POST /api/blockChain/calculateTransactionFee
+```
+
+### Parameters
+
+| Type | Name | Schema | Description | Required |
+| -------- | ------- | ------------------------------ | ----------- | -------- |
+| **Body** | `input` | `CalculateTransactionFeeInput` | - | No |
+
+### Responses
+
+| HTTP Code | Description | Schema |
+| --------- | ----------- | ------------------------------- |
+| **200** | Success | `CalculateTransactionFeeOutput` |
+
+### Consumes
+
+- `application/json-patch+json; v=1.0`
+- `application/json; v=1.0`
+- `text/json; v=1.0`
+- `application/*+json; v=1.0`
+- `application/x-protobuf; v=1.0`
+
+### Produces
+
+- `text/plain; v=1.0`
+- `application/json; v=1.0`
+- `text/json; v=1.0`
+- `application/x-protobuf; v=1.0`
+
+### Tags
+
+- BlockChain
+
+---
+
+## Get the Current Status of a Transaction
+
+```http
+GET /api/blockChain/transactionResult
+```
+
+### Parameters
+
+| Type | Name | Schema | Description | Required |
+| --------- | --------------- | -------- | -------------- | -------- |
+| **Query** | `transactionId` | `string` | Transaction ID | No |
+
+### Responses
+
+| HTTP Code | Description | Schema |
+| --------- | ----------- | ---------------------- |
+| **200** | Success | `TransactionResultDto` |
+
+### Produces
+
+- `text/plain; v=1.0`
+- `application/json; v=1.0`
+- `text/json; v=1.0`
+- `application/x-protobuf; v=1.0`
+
+### Tags
+
+- BlockChain
+
+---
+
+## Get the Transaction Pool Status
+
+```http
+GET /api/blockChain/transactionPoolStatus
+```
+
+### Responses
+
+| HTTP Code | Description | Schema |
+| --------- | ----------- | -------------------------------- |
+| **200** | Success | `GetTransactionPoolStatusOutput` |
+
+### Produces
+
+- `text/plain; v=1.0`
+- `application/json; v=1.0`
+- `text/json; v=1.0`
+- `application/x-protobuf; v=1.0`
+
+### Tags
+
+- BlockChain
+
+---
+
+## Get the Current Status of a Transaction
+
+```http
+GET /api/blockChain/transactionResult
+```
+
+**Parameters**
+
+| Type | Name | Description | Schema |
+| --------- | ----------------- | -------------------------- | ------ |
+| **Query** | **transactionId** | _Optional_. Transaction ID | string |
+
+### Responses
+
+| HTTP Code | Description | Schema |
+| --------- | ----------- | ---------------------- |
+| **200** | Success | `TransactionResultDto` |
+
+### Produces
+
+- `text/plain; v=1.0`
+- `application/json; v=1.0`
+- `text/json; v=1.0`
+- `application/x-protobuf; v=1.0`
+
+### Tags
+
+- BlockChain
+
+---
+
+## Get Multiple Transaction Results
+
+```http
+GET /api/blockChain/transactionResults
+```
+
+### Parameters
+
+| Type | Name | Description | Schema | Default |
+| --------- | ------------- | --------------------------------- | --------------- | ------- |
+| **Query** | **blockHash** | _Optional_. Block hash | string | |
+| **Query** | **limit** | _Optional_. Limit results | integer (int32) | `10` |
+| **Query** | **offset** | _Optional_. Offset for pagination | integer (int32) | `0` |
+
+### Responses
+
+| HTTP Code | Description | Schema |
+| --------- | ----------- | ------------------------ |
+| **200** | Success | `TransactionResultDto[]` |
+
+### Produces
+
+- `text/plain; v=1.0`
+- `application/json; v=1.0`
+- `text/json; v=1.0`
+- `application/x-protobuf; v=1.0`
+
+### Tags
+
+- BlockChain
diff --git a/docs/docs/web-api/index.md b/docs/docs/web-api/index.md
new file mode 100644
index 00000000..a8d043eb
--- /dev/null
+++ b/docs/docs/web-api/index.md
@@ -0,0 +1,4 @@
+---
+sidebar_position: 1
+title: Web API
+---
\ No newline at end of file
diff --git a/docs/References/Web API/Net API.md b/docs/docs/web-api/net-api/index.md
similarity index 56%
rename from docs/References/Web API/Net API.md
rename to docs/docs/web-api/net-api/index.md
index 98c6e308..95e683cf 100644
--- a/docs/References/Web API/Net API.md
+++ b/docs/docs/web-api/net-api/index.md
@@ -1,640 +1,30 @@
-# AELF API 1.0
-
-## Chain API
-
-### Get information about a given block by block hash. Optionally with the list of its transactions.
-
-```http
-GET /api/blockChain/block
-```
-
-**Parameters**
-
-| Type | Name | Description | Schema | Default |
-| --------- | --------------------- | ------------ | ------- | ------- |
-| **Query** | `blockHash` | block hash | string | |
-| | _optional_ | | | |
-| **Query** | `includeTransactions` | include | boolean | "false" |
-| | | transactions | | |
-| | _optional_ | or not | | |
-
-**Responses**
-
-| HTTP Code | Description | Schema |
-| --------- | ----------- | ---------- |
-| **200** | Success | `BlockDto` |
-
-**Produces**
-
-- `text/plain; v=1.0`
-- `application/json; v=1.0`
-- `text/json; v=1.0`
-- `application/x-protobuf; v=1.0`
-
-**Tags**
-
-- BlockChain
-
----
-
-### Get information about a given block by block height. Optionally with the list of its transactions.
-
-```http
-GET /api/blockChain/blockByHeight
-```
-
-**Parameters**
-
-| Type | Name | Description | Schema | Default |
-| --------- | --------------------- | ------------ | ------- | ------- |
-| **Query** | `blockHeight` | block height | integer | |
-| | _optional_ | | (int64) | |
-| **Query** | `includeTransactions` | include | boolean | "false" |
-| | | transactions | | |
-| | _optional_ | or not | | |
-
-**Responses**
-
-| HTTP Code | Description | Schema |
-| --------- | ----------- | ---------- |
-| **200** | Success | `BlockDto` |
-
-**Produces**
-
-- `text/plain; v=1.0`
-- `application/json; v=1.0`
-- `text/json; v=1.0`
-- `application/x-protobuf; v=1.0`
-
-**Tags**
-
-- BlockChain
-
----
-
-### Get the height of the current chain.
-
-```http
-GET /api/blockChain/blockHeight
-```
-
-**Responses**
-
-| HTTP Code | Description | Schema |
-| --------- | ----------- | --------------- |
-| **200** | Success | integer (int64) |
-
-**Produces**
-
-- `text/plain; v=1.0`
-- `application/json; v=1.0`
-- `text/json; v=1.0`
-- `application/x-protobuf; v=1.0`
-
-**Tags**
-
-- BlockChain
-
----
-
-### Get the current state about a given block
-
-```http
-GET /api/blockChain/blockState
-```
-
-**Parameters**
-
-| Type | Name | Description | Schema |
-| --------- | ----------- | ----------- | ------ |
-| **Query** | `blockHash` | block hash | string |
-
-**Responses**
-
-| HTTP Code | Description | Schema |
-| --------- | ----------- | --------------- |
-| **200** | Success | `BlockStateDto` |
-
-**Produces**
-
-- `text/plain; v=1.0`
-- `application/json; v=1.0`
-- `text/json; v=1.0`
-- `application/x-protobuf; v=1.0`
-
-**Tags**
-
-- BlockChain
-
----
-
-### Get the current status of the block chain.
-
-```http
-GET /api/blockChain/chainStatus
-```
-
-**Responses**
-
-| HTTP Code | Description | Schema |
-| --------- | ----------- | ---------------- |
-| **200** | Success | `ChainStatusDto` |
-
-**Produces**
-
-- `text/plain; v=1.0`
-- `application/json; v=1.0`
-- `text/json; v=1.0`
-- `application/x-protobuf; v=1.0`
-
-**Tags**
-
-- BlockChain
-
----
-
-### Get the protobuf definitions related to a contract
-
-```http
-GET /api/blockChain/contractFileDescriptorSet
-```
-
-**Parameters**
-
-| Type | Name | Description | Schema |
-| --------- | --------- | ---------------- | ------ |
-| **Query** | `address` | contract address | string |
-
-**Responses**
-
-| HTTP Code | Description | Schema |
-| --------- | ----------- | ------ |
-| **200** | Success | byte |
-
-**Produces**
-
-- `text/plain; v=1.0`
-- `application/json; v=1.0`
-- `text/json; v=1.0`
-- `application/x-protobuf; v=1.0`
-
-**Tags**
-
-- BlockChain
-
----
-
-### Execute a raw transaction
-
-```http
-POST /api/blockChain/executeRawTransaction
-```
-
-**Parameters**
-
-| Type | Name | Schema |
-| -------- | ------- | -------------------------- |
-| **Body** | `input` | `ExecuteRawTransactionDto` |
-
-**Responses**
-
-| HTTP Code | Description | Schema |
-| --------- | ----------- | ------ |
-| **200** | Success | string |
-
-**Consumes**
-
-- `application/json-patch+json; v=1.0`
-- `application/json; v=1.0`
-- `text/json; v=1.0`
-- `application/*+json; v=1.0`
-- `application/x-protobuf; v=1.0`
-
-**Produces**
-
-- `text/plain; v=1.0`
-- `application/json; v=1.0`
-- `text/json; v=1.0`
-- `application/x-protobuf; v=1.0`
-
-**Tags**
-
-- BlockChain
-
----
-
-### Call a read-only method on a contract
-
-```http
-POST /api/blockChain/executeTransaction
-```
-
-**Parameters**
-
-| Type | Name | Schema |
-| -------- | ------- | ----------------------- |
-| **Body** | `input` | `ExecuteTransactionDto` |
-
-**Responses**
-
-| HTTP Code | Description | Schema |
-| --------- | ----------- | ------ |
-| **200** | Success | string |
-
-**Consumes**
-
-- `application/json-patch+json; v=1.0`
-- `application/json; v=1.0`
-- `text/json; v=1.0`
-- `application/*+json; v=1.0`
-- `application/x-protobuf; v=1.0`
-
-**Produces**
-
-- `text/plain; v=1.0`
-- `application/json; v=1.0`
-- `text/json; v=1.0`
-- `application/x-protobuf; v=1.0`
-
-**Tags**
-
-- BlockChain
-
---
-
-### Get the merkle path of a transaction
-
-```http
-GET /api/blockChain/merklePathByTransactionId
-```
-
-**Parameters**
-
-| Type | Name | Schema |
-| --------- | --------------- | ------ |
-| **Query** | `transactionId` | string |
-
-**Responses**
-
-| HTTP Code | Description | Schema |
-| --------- | ----------- | --------------- |
-| **200** | Success | `MerklePathDto` |
-
-**Produces**
-
-- `text/plain; v=1.0`
-- `application/json; v=1.0`
-- `text/json; v=1.0`
-- `application/x-protobuf; v=1.0`
-
-**Tags**
-
-- BlockChain
-
----
-
-### Create an unsigned serialized transaction
-
-```http
-POST /api/blockChain/rawTransaction
-```
-
-**Parameters**
-
-| Type | Name | Schema |
-| -------- | ------- | --------------------------- |
-| **Body** | `input` | `CreateRawTransactionInput` |
-
-**Responses**
-
-| HTTP Code | Description | Schema |
-| --------- | ----------- | ---------------------------- |
-| **200** | Success | `CreateRawTransactionOutput` |
-
-**Consumes**
-
-- `application/json-patch+json; v=1.0`
-- `application/json; v=1.0`
-- `text/json; v=1.0`
-- `application/*+json; v=1.0`
-- `application/x-protobuf; v=1.0`
-
-**Produces**
-
-- `text/plain; v=1.0`
-- `application/json; v=1.0`
-- `text/json; v=1.0`
-- `application/x-protobuf; v=1.0`
-
-**Tags**
-
-- BlockChain
-
----
-
-# Get the Current Status of a Transaction
-
-**GET** `/api/blockChain/transactionResult`
-
-**Parameters**
-
-| Type | Name | Schema | Description | Required |
-| --------- | --------------- | -------- | -------------- | -------- |
-| **Query** | `transactionId` | `string` | Transaction ID | No |
-
-**Responses**
-
-| HTTP Code | Description | Schema |
-| --------- | ----------- | ---------------------- |
-| **200** | Success | `TransactionResultDto` |
-
-**Produces**
-
-- `text/plain; v=1.0`
-- `application/json; v=1.0`
-- `text/json; v=1.0`
-- `application/x-protobuf; v=1.0`
-
-**Tags**
-
-- BlockChain
-
----
-
-# Send a Transaction
-
-**POST** `/api/blockChain/sendRawTransaction`
-
-**Parameters**
-
-| Type | Name | Schema |
-| -------- | --------- | -------------------------------------------------------- |
-| **Body** | **input** | `SendRawTransactionInput <#sendrawtransactioninput>`\_\_ |
-
-**Responses**
-
-| HTTP Code | Description | Schema |
-| --------- | ----------- | ---------------------------------------------------------- |
-| **200** | Success | `SendRawTransactionOutput <#sendrawtransactionoutput>`\_\_ |
-
-**Consumes**
-
-- `application/json-patch+json; v=1.0`
-- `application/json; v=1.0`
-- `text/json; v=1.0`
-- `application/*+json; v=1.0`
-- `application/x-protobuf; v=1.0`
-
-**Produces**
-
-- `text/plain; v=1.0`
-- `application/json; v=1.0`
-- `text/json; v=1.0`
-- `application/x-protobuf; v=1.0`
-
-**Tags**
-
-- BlockChain
-
----
-
-# Broadcast a Transaction
-
-**POST** `/api/blockChain/sendTransaction`
-
-**Parameters**
-
-| Type | Name | Schema |
-| -------- | --------- | -------------------------------------------------- |
-| **Body** | **input** | `SendTransactionInput <#sendtransactioninput>`\_\_ |
-
-**Responses**
-
-| HTTP Code | Description | Schema |
-| --------- | ----------- | ---------------------------------------------------- |
-| **200** | Success | `SendTransactionOutput <#sendtransactionoutput>`\_\_ |
-
-**Consumes**
-
-- `application/json-patch+json; v=1.0`
-- `application/json; v=1.0`
-- `text/json; v=1.0`
-- `application/*+json; v=1.0`
-- `application/x-protobuf; v=1.0`
-
-**Produces**
-
-- `text/plain; v=1.0`
-- `application/json; v=1.0`
-- `text/json; v=1.0`
-- `application/x-protobuf; v=1.0`
-
-**Tags**
-
-- BlockChain
-
----
-
-# Broadcast Multiple Transactions
-
-**POST** `/api/blockChain/sendTransactions`
-
-**Parameters**
-
-| Type | Name | Schema |
-| -------- | --------- | ---------------------------------------------------- |
-| **Body** | **input** | `SendTransactionsInput <#sendtransactionsinput>`\_\_ |
-
-**Responses**
-
-| HTTP Code | Description | Schema |
-| --------- | ----------- | ---------------- |
-| **200** | Success | `` array |
-
-**Consumes**
-
-- `application/json-patch+json; v=1.0`
-- `application/json; v=1.0`
-- `text/json; v=1.0`
-- `application/*+json; v=1.0`
-- `application/x-protobuf; v=1.0`
-
-**Produces**
-
-- `text/plain; v=1.0`
-- `application/json; v=1.0`
-- `text/json; v=1.0`
-- `application/x-protobuf; v=1.0`
-
-**Tags**
-
-- BlockChain
-
----
-
-# Estimate Transaction Fee
-
-**POST** `/api/blockChain/calculateTransactionFee`
-
-**Parameters**
-
-| Type | Name | Schema | Default |
-| -------- | --------- | ------------------------------------------------------------------ | ------- |
-| **Body** | **Input** | `CalculateTransactionFeeInput <#calculatetransactionfeeinput>`\_\_ | - |
-
-**Responses**
-
-| HTTP Code | Description | Schema |
-| --------- | ----------- | -------------------------------------------------------------------- |
-| **200** | Success | `CalculateTransactionFeeOutput <#calculatetransactionfeeoutput>`\_\_ |
-
-**Consumes**
-
-- `application/json-patch+json; v=1.0`
-- `application/json; v=1.0`
-- `text/json; v=1.0`
-- `application/*+json; v=1.0`
-- `application/x-protobuf; v=1.0`
-
-**Produces**
-
-- `text/plain; v=1.0`
-- `application/json; v=1.0`
-- `text/json; v=1.0`
-- `application/x-protobuf; v=1.0`
-
-**Tags**
-
-- BlockChain
-
----
-
-# Get the Current Status of a Transaction
-
-**GET** `/api/blockChain/transactionResult`
-
-## Parameters
-
-| Type | Name | Schema | Description | Required |
-| --------- | --------------- | -------- | -------------- | -------- |
-| **Query** | `transactionId` | `string` | Transaction ID | No |
-
-## Responses
-
-| HTTP Code | Description | Schema |
-| --------- | ----------- | ---------------------- |
-| **200** | Success | `TransactionResultDto` |
-
-## Produces
-
-- `text/plain; v=1.0`
-- `application/json; v=1.0`
-- `text/json; v=1.0`
-- `application/x-protobuf; v=1.0`
-
-## Tags
-
-- BlockChain
-
----
-
-# Get Task Queue Status
-
-**GET** `/api/blockChain/taskQueueStatus`
-
-## Responses
-
-| HTTP Code | Description | Schema |
-| --------- | ----------- | ------------------------ |
-| **200** | Success | `TaskQueueInfoDto` array |
-
-## Produces
-
-- `text/plain; v=1.0`
-- `application/json; v=1.0`
-- `text/json; v=1.0`
-- `application/x-protobuf; v=1.0`
-
-## Tags
-
-- BlockChain
-
----
-
-# Get Transaction Pool Status
-
-**GET** `/api/blockChain/transactionPoolStatus`
-
-## Responses
-
-| HTTP Code | Description | Schema |
-| --------- | ----------- | -------------------------------- |
-| **200** | Success | `GetTransactionPoolStatusOutput` |
-
-## Produces
-
-- `text/plain; v=1.0`
-- `application/json; v=1.0`
-- `text/json; v=1.0`
-- `application/x-protobuf; v=1.0`
-
-## Tags
-
-- BlockChain
-
----
-
-# Get Multiple Transaction Results
-
-**GET** `/api/blockChain/transactionResults`
-
-## Parameters
-
-| Type | Name | Description | Schema | Default |
-| --------- | ----------- | ----------- | --------------- | ------- |
-| **Query** | `blockHash` | block hash | string | |
-| **Query** | `limit` | limit | integer (int32) | `10` |
-| **Query** | `offset` | offset | integer (int32) | `0` |
-
-## Responses
-
-| HTTP Code | Description | Schema |
-| --------- | ----------- | ---------------------------- |
-| **200** | Success | `TransactionResultDto` array |
-
-## Produces
-
-- `text/plain; v=1.0`
-- `application/json; v=1.0`
-- `text/json; v=1.0`
-- `application/x-protobuf; v=1.0`
-
-## Tags
-
-- BlockChain
-
+sidebar_position: 2
+title: Net API
---
# Net API
## Get Network Information
-**GET** `/api/net/networkInfo`
+```http
+GET /api/net/networkInfo
+```
-## Responses
+### Responses
| HTTP Code | Description | Schema |
| --------- | ----------- | ---------------------- |
| **200** | Success | `GetNetworkInfoOutput` |
-## Produces
+### Produces
- `text/plain; v=1.0`
- `application/json; v=1.0`
- `text/json; v=1.0`
- `application/x-protobuf; v=1.0`
-## Tags
+### Tags
- Net
@@ -642,26 +32,28 @@ POST /api/blockChain/rawTransaction
## Add Peer
-**POST** `/api/net/peer`
+```http
+POST /api/net/peer
+```
-## Parameters
+#### Parameters
| Type | Name | Schema |
| -------- | ------- | -------------- |
| **Body** | `input` | `AddPeerInput` |
-## Responses
+### Responses
| HTTP Code | Description | Schema |
| --------- | ------------ | ------- |
| **200** | Success | boolean |
| **401** | Unauthorized | |
-## Security
+### Security
- Basic Authentication
-## Consumes
+### Consumes
- `application/json-patch+json; v=1.0`
- `application/json; v=1.0`
@@ -669,14 +61,14 @@ POST /api/blockChain/rawTransaction
- `application/*+json; v=1.0`
- `application/x-protobuf; v=1.0`
-## Produces
+### Produces
- `text/plain; v=1.0`
- `application/json; v=1.0`
- `text/json; v=1.0`
- `application/x-protobuf; v=1.0`
-## Tags
+### Tags
- Net
@@ -686,31 +78,31 @@ POST /api/blockChain/rawTransaction
**DELETE** `/api/net/peer`
-## Parameters
+### Parameters
| Type | Name | Description | Schema |
| --------- | --------- | ----------- | ------ |
| **Query** | `address` | ip address | string |
-## Responses
+### Responses
| HTTP Code | Description | Schema |
| --------- | ------------ | ------- |
| **200** | Success | boolean |
| **401** | Unauthorized | |
-## Security
+### Security
- Basic Authentication
-## Produces
+### Produces
- `text/plain; v=1.0`
- `application/json; v=1.0`
- `text/json; v=1.0`
- `application/x-protobuf; v=1.0`
-## Tags
+### Tags
- Net
@@ -720,61 +112,61 @@ POST /api/blockChain/rawTransaction
**GET** `/api/net/peers`
-## Parameters
+### Parameters
| Type | Name | Description | Schema | Default |
| --------- | ------------- | ----------- | ------ | --------- |
| **Query** | `withMetrics` | boolean | | `"false"` |
-## Responses
+### Responses
| HTTP Code | Description | Schema |
| --------- | ----------- | --------------- |
| **200** | Success | `PeerDto` array |
-## Produces
+### Produces
- `text/plain; v=1.0`
- `application/json; v=1.0`
- `text/json; v=1.0`
- `application/x-protobuf; v=1.0`
-## Tags
+### Tags
- BlockChain
---
-### Get the Current Status of a Transaction
+## Get the Current Status of a Transaction
**GET** `/api/blockChain/transactionResult`
-**Parameters**
+### Parameters
| Type | Name | Schema | Description | Required |
| --------- | --------------- | -------- | -------------- | -------- |
| **Query** | `transactionId` | `string` | Transaction ID | No |
-**Responses**
+### Responses
| HTTP Code | Description | Schema |
| --------- | ----------- | ---------------------- |
| **200** | Success | `TransactionResultDto` |
-**Produces**
+### Produces
- `text/plain; v=1.0`
- `application/json; v=1.0`
- `text/json; v=1.0`
- `application/x-protobuf; v=1.0`
-**Tags**
+### Tags
- BlockChain
---
-### Definitions
+## Definitions
#### AddPeerInput
@@ -1122,7 +514,7 @@ This structure should provide a clear overview of each variable's name, schema,
---
-### CalculateTransactionFeeOutput
+#### CalculateTransactionFeeOutput
**Name:** CalculateTransactionFeeOutput
diff --git a/docs/getting-started/_category_.json b/docs/getting-started/_category_.json
deleted file mode 100644
index 534b41fb..00000000
--- a/docs/getting-started/_category_.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "position": 1,
- "label": "Getting Started"
-}
diff --git a/docs/Reference/ACS Introduction/ACS0 - Contract Deployment Standard.md b/docs/learn/acs-introduction/acs0-contract-deployment-standard/index.md
similarity index 99%
rename from docs/Reference/ACS Introduction/ACS0 - Contract Deployment Standard.md
rename to docs/learn/acs-introduction/acs0-contract-deployment-standard/index.md
index cba403d8..57e04514 100644
--- a/docs/Reference/ACS Introduction/ACS0 - Contract Deployment Standard.md
+++ b/docs/learn/acs-introduction/acs0-contract-deployment-standard/index.md
@@ -295,4 +295,4 @@ Contracts using ACS0 need to implement these methods:
## Example
-ACS0 defines methods for contract deployment and updates. AElf provides the Genesis Contract as an implementation of ACS0.
\ No newline at end of file
+ACS0 defines methods for contract deployment and updates. aelf provides the Genesis Contract as an implementation of ACS0.
\ No newline at end of file
diff --git a/docs/Reference/ACS Introduction/ACS1 - Transaction Fee Standard.md b/docs/learn/acs-introduction/acs1-transaction-fee-standard/index.md
similarity index 99%
rename from docs/Reference/ACS Introduction/ACS1 - Transaction Fee Standard.md
rename to docs/learn/acs-introduction/acs1-transaction-fee-standard/index.md
index f4b7f766..40812839 100644
--- a/docs/Reference/ACS Introduction/ACS1 - Transaction Fee Standard.md
+++ b/docs/learn/acs-introduction/acs1-transaction-fee-standard/index.md
@@ -267,4 +267,4 @@ public override AuthorityInfo GetMethodFeeController(Empty input)
Create ACS1’s Stub and call `GetMethodFee` and `GetMethodFeeController` to check the return values.
## Example
-All AElf system contracts implement ACS1 and can be used as references.
\ No newline at end of file
+All aelf system contracts implement ACS1 and can be used as references.
\ No newline at end of file
diff --git a/docs/Reference/ACS Introduction/ACS10 - Dividend Pool Standard.md b/docs/learn/acs-introduction/acs10-dividend-pool-standard/index.md
similarity index 99%
rename from docs/Reference/ACS Introduction/ACS10 - Dividend Pool Standard.md
rename to docs/learn/acs-introduction/acs10-dividend-pool-standard/index.md
index b0f03bc0..461972d6 100644
--- a/docs/Reference/ACS Introduction/ACS10 - Dividend Pool Standard.md
+++ b/docs/learn/acs-introduction/acs10-dividend-pool-standard/index.md
@@ -178,7 +178,7 @@ To create a dividend pool, implement these optional interfaces:
| `NODE_VALIDATION_FAILED` | `6`| Transaction validation failed. |
## Usage
-ACS10 provides a standardized interface for dividend pools, independent of AElf chain interactions.
+ACS10 provides a standardized interface for dividend pools, independent of aelf chain interactions.
### Implementation
diff --git a/docs/Reference/ACS Introduction/ACS11 - Cross Chain Consensus Standard.md b/docs/learn/acs-introduction/acs11-cross-chain-consensus-standard/index.md
similarity index 99%
rename from docs/Reference/ACS Introduction/ACS11 - Cross Chain Consensus Standard.md
rename to docs/learn/acs-introduction/acs11-cross-chain-consensus-standard/index.md
index a0d5dd93..b0917c76 100644
--- a/docs/Reference/ACS Introduction/ACS11 - Cross Chain Consensus Standard.md
+++ b/docs/learn/acs-introduction/acs11-cross-chain-consensus-standard/index.md
@@ -139,4 +139,4 @@ Contracts inheriting from ACS11 must implement the following interfaces:
| `NODE_VALIDATION_FAILED` | `6`| Transaction validation failed. |
### Example
-ACS11 defines methods for customizing consensus mechanisms for cross-chain scenarios. AElf provides an implementation of ACS11 through the AEDPoS contract. Developers can refer to the AEDPoS contract API for implementation details.
\ No newline at end of file
+ACS11 defines methods for customizing consensus mechanisms for cross-chain scenarios. aelf provides an implementation of ACS11 through the AEDPoS contract. Developers can refer to the AEDPoS contract API for implementation details.
\ No newline at end of file
diff --git a/docs/Reference/ACS Introduction/ACS12 - User Contract Standard.md b/docs/learn/acs-introduction/acs12-user-contract-standard/index.md
similarity index 100%
rename from docs/Reference/ACS Introduction/ACS12 - User Contract Standard.md
rename to docs/learn/acs-introduction/acs12-user-contract-standard/index.md
diff --git a/docs/Reference/ACS Introduction/ACS2 - Parallel Execution Standard.md b/docs/learn/acs-introduction/acs2-parallel-execution-standard/index.md
similarity index 99%
rename from docs/Reference/ACS Introduction/ACS2 - Parallel Execution Standard.md
rename to docs/learn/acs-introduction/acs2-parallel-execution-standard/index.md
index a0bea4d3..c325ae68 100644
--- a/docs/Reference/ACS Introduction/ACS2 - Parallel Execution Standard.md
+++ b/docs/learn/acs-introduction/acs2-parallel-execution-standard/index.md
@@ -146,7 +146,7 @@ Contracts using ACS2 need to implement one method:
## Usage
-AElf uses a key-value database to store data. State Path determines the key for contract execution data.
+aelf uses a key-value database to store data. State Path determines the key for contract execution data.
For example, a Token contract defines a balance property:
```cs
diff --git a/docs/Reference/ACS Introduction/ACS3 - Contract Proposal Standard.md b/docs/learn/acs-introduction/acs3-contract-proposal-standard/index.md
similarity index 98%
rename from docs/Reference/ACS Introduction/ACS3 - Contract Proposal Standard.md
rename to docs/learn/acs-introduction/acs3-contract-proposal-standard/index.md
index 79b5f662..35ab591b 100644
--- a/docs/Reference/ACS Introduction/ACS3 - Contract Proposal Standard.md
+++ b/docs/learn/acs-introduction/acs3-contract-proposal-standard/index.md
@@ -325,7 +325,7 @@ await tokenContractStub.Approve.SendAsync(new ApproveInput
```
#### Create and Test Proposal
-Create a proposal to change the Slogan to "AElf":
+Create a proposal to change the Slogan to "aelf":
```cs
var proposalId = (await acs3DemoContractStub.CreateProposal.SendAsync(new CreateProposalInput
{
@@ -333,8 +333,8 @@ var proposalId = (await acs3DemoContractStub.CreateProposal.SendAsync(new Create
ContractMethodName = nameof(acs3DemoContractStub.SetSlogan),
ToAddress = DAppContractAddress,
ExpiredTime = TimestampHelper.GetUtcNow().AddHours(1),
- Params = new StringValue {Value = "AElf"}.ToByteString(),
- Token = HashHelper.ComputeFrom("AElf")
+ Params = new StringValue {Value = "aelf"}.ToByteString(),
+ Token = HashHelper.ComputeFrom("aelf")
})).Output;
```
@@ -352,6 +352,6 @@ await acs3DemoContractStub.Release.SendAsync(proposalId);
// Check slogan
{
var slogan = await acs3DemoContractStub.GetSlogan.CallAsync(new Empty());
- slogan.Value.ShouldBe("AElf");
+ slogan.Value.ShouldBe("aelf");
}
```
diff --git a/docs/Reference/ACS Introduction/ACS4 - Consensus Standard.md b/docs/learn/acs-introduction/acs4-consensus-standard/index.md
similarity index 100%
rename from docs/Reference/ACS Introduction/ACS4 - Consensus Standard.md
rename to docs/learn/acs-introduction/acs4-consensus-standard/index.md
diff --git a/docs/Reference/ACS Introduction/ACS5 - Contract Threshold Standard.md b/docs/learn/acs-introduction/acs5-contract-threshold-standard/index.md
similarity index 100%
rename from docs/Reference/ACS Introduction/ACS5 - Contract Threshold Standard.md
rename to docs/learn/acs-introduction/acs5-contract-threshold-standard/index.md
diff --git a/docs/Reference/ACS Introduction/ACS6 - Random Number Generation.md b/docs/learn/acs-introduction/acs6-random-number-generation/index.md
similarity index 100%
rename from docs/Reference/ACS Introduction/ACS6 - Random Number Generation.md
rename to docs/learn/acs-introduction/acs6-random-number-generation/index.md
diff --git a/docs/Reference/ACS Introduction/ACS7 - Cross Chain Standard.md b/docs/learn/acs-introduction/acs7-cross-chain-standard/index.md
similarity index 99%
rename from docs/Reference/ACS Introduction/ACS7 - Cross Chain Standard.md
rename to docs/learn/acs-introduction/acs7-cross-chain-standard/index.md
index 20cf9b76..993470be 100644
--- a/docs/Reference/ACS Introduction/ACS7 - Cross Chain Standard.md
+++ b/docs/learn/acs-introduction/acs7-cross-chain-standard/index.md
@@ -92,4 +92,4 @@ This involves methods for chain creation and indexing:
| `initial_resource_amount` (repeated SideChainCreationRequest.InitialResourceAmountEntry) | Initial resource amounts | repeated |
### Example
-ACS7 defines methods for cross-chain scenarios. AElf provides an implementation for ACS7 called `CrossChainContract`. Refer to this implementation for more details.
\ No newline at end of file
+ACS7 defines methods for cross-chain scenarios. aelf provides an implementation for ACS7 called `CrossChainContract`. Refer to this implementation for more details.
\ No newline at end of file
diff --git a/docs/Reference/ACS Introduction/ACS8 - Transaction Resource Token Fee Standard.md b/docs/learn/acs-introduction/acs8-transaction-resource-token-fee-standard/index.md
similarity index 100%
rename from docs/Reference/ACS Introduction/ACS8 - Transaction Resource Token Fee Standard.md
rename to docs/learn/acs-introduction/acs8-transaction-resource-token-fee-standard/index.md
diff --git a/docs/Reference/ACS Introduction/ACS9 - Contract Profit Dividend Standard.md b/docs/learn/acs-introduction/acs9-contract-profit-dividend-standard/index.md
similarity index 99%
rename from docs/Reference/ACS Introduction/ACS9 - Contract Profit Dividend Standard.md
rename to docs/learn/acs-introduction/acs9-contract-profit-dividend-standard/index.md
index 7b2ba2ca..992fab92 100644
--- a/docs/Reference/ACS Introduction/ACS9 - Contract Profit Dividend Standard.md
+++ b/docs/learn/acs-introduction/acs9-contract-profit-dividend-standard/index.md
@@ -1,5 +1,5 @@
# ACS9 - Contract Profit Dividend Standard
-ACS9 defines a standard for distributing profits on AElf's side chain contracts.
+ACS9 defines a standard for distributing profits on aelf's side chain contracts.
## Interface
ACS9 includes several methods given below:
diff --git a/docs/learn/acs-introduction/index.md b/docs/learn/acs-introduction/index.md
new file mode 100644
index 00000000..b4290807
--- /dev/null
+++ b/docs/learn/acs-introduction/index.md
@@ -0,0 +1,5 @@
+---
+sidebar_position: 8
+title: ACS Introduction
+description: aelf Contracts Standard Introduction
+---
\ No newline at end of file
diff --git a/docs/protocol/addresses/index.md b/docs/learn/addresses/index.md
similarity index 99%
rename from docs/protocol/addresses/index.md
rename to docs/learn/addresses/index.md
index b4530684..2a3e0904 100644
--- a/docs/protocol/addresses/index.md
+++ b/docs/learn/addresses/index.md
@@ -1,5 +1,5 @@
---
-sidebar_position: 1
+sidebar_position: 5
title: Addresses
description: Addresses
image: /img/Logo.aelf.svg
diff --git a/docs/Tutorials/aelf-blockchain-boot-sequance.md b/docs/learn/aelf-blockchain-boot-sequence/index.md
similarity index 97%
rename from docs/Tutorials/aelf-blockchain-boot-sequance.md
rename to docs/learn/aelf-blockchain-boot-sequence/index.md
index 7c61c897..749d7619 100644
--- a/docs/Tutorials/aelf-blockchain-boot-sequance.md
+++ b/docs/learn/aelf-blockchain-boot-sequence/index.md
@@ -1,3 +1,10 @@
+---
+sidebar_position: 9
+title: aelf Blockchain Boot Sequence
+description: aelf Blockchain Boot Sequence
+image: /img/Logo.aelf.svg
+---
+
# aelf Blockchain Boot Sequence
This guide explains how the aelf Blockchain starts from initial nodes and transitions to production nodes through elections, completing the full startup process.
@@ -11,7 +18,8 @@ To begin the aelf Blockchain, you need to start at least one initial node. It’
##### Setup Initial Nodes:
- Refer to the "Getting Started" section for detailed steps.
-- Use the :doc:`Running multi-nodes with Docker <../getting_started/development-environment/node>` guide to start the initial nodes. This example uses three initial nodes.
+
+- This example uses three initial nodes.
##### Election Time Configuration:
diff --git a/docs/protocol/consensus/index.md b/docs/learn/consensus/index.md
similarity index 75%
rename from docs/protocol/consensus/index.md
rename to docs/learn/consensus/index.md
index 18f57ee8..0ab8cc47 100644
--- a/docs/protocol/consensus/index.md
+++ b/docs/learn/consensus/index.md
@@ -1,3 +1,8 @@
+---
+sidebar_position: 3
+title: Consensus
+---
+
# Consensus
## Overview
@@ -16,16 +21,32 @@ Anyone can join the election by locking ELF tokens. The top (2N+1)*5 nodes becom
### Round
aelf operates in units called "rounds." In each round, one Core Data Center produces one block and has one extra transaction at the end.
+![Round](/img/consensus-2.webp)
+
### Main Processes
#### Pre-Verification
Before generating blocks in round (t+1), a node’s status in round t is verified by checking `hash(in_node(t)) = out_node(t)`.
#### Order Calculation
-In each round, Core Data Centers have (N+1) block generation time slots. The order and signature for each node in the first round are arbitrary. From the second round, the signature is calculated using `sig_node(t+1) = hash(in_node(t) + all_t)`. From round 3, the order is based on the previous round’s order and signature.
+In each round, Core Data Centers have (N+1) block generation time slots.
+
+![Order Calculation](/img/consensus-3.webp)
+
+The order and signature for each node in the first round are arbitrary. From the second round, the signature is calculated using `sig_node(t+1) = hash(in_node(t) + all_t)` where
+
+![Order Calculation](/img/consensus-4.webp)
+
+Here node[i][t], means the node is processing the i-th transaction in round t.
+
+From round 3, the order is based on the previous round’s order and signature. In round (t+1), we traverse the signature of nodes at round t in order. The ordering of a node in (t+1) is calculated by
+
+![Order Calculation 1](/img/consensus-5.webp)
If conflicts occur, the node is assigned to the next available place. The extra transaction node is calculated from the first place node's signature of the previous round.
+![Order Calculation 2](/img/consensus-6.webp)
+
#### Timing
Nodes have 4 seconds to process transactions. Failure to submit within this time results in a penalty. If a node fails twice consecutively, it enters a penalty period, increasing exponentially with each failure.
diff --git a/docs/Architecture/Core/Implementation.md b/docs/learn/core/implementation/index.md
similarity index 87%
rename from docs/Architecture/Core/Implementation.md
rename to docs/learn/core/implementation/index.md
index 4814df44..3ecaf18e 100644
--- a/docs/Architecture/Core/Implementation.md
+++ b/docs/learn/core/implementation/index.md
@@ -1,6 +1,11 @@
+---
+sidebar_position: 2
+title: Core Implementation
+---
+
# Design Principles
-![image](node-archi.png)
+![Design Principles](/img/node-archi.webp)
The diagram above shows the conceptual structure of the node and the separation between the OS and Kernel.
@@ -16,18 +21,18 @@ The Kernel also introduces the concept of plugins. The diagram shows that side c
## Structure of the Project
-To understand AElf's structure, this section provides an overview of the solution.
+To understand aelf's structure, this section provides an overview of the solution.
-Conceptually, AElf is built on two main layers: **OS** and **Kernel**.
+Conceptually, aelf is built on two main layers: **OS** and **Kernel**.
- **OS Layer:**
- Contains high-level definitions for a node and endpoints like RPC and P2P.
- **Kernel Layer:**
- Contains logic and definitions for smart contracts and consensus.
-AElf has a native runtime for smart contracts implemented in **C#**, for contracts written in C#. This implementation is found in the **AElf.Runtime.CSharp.\*** projects.
+aelf has a native runtime for smart contracts implemented in **C#**, for contracts written in C#. This implementation is found in the **AElf.Runtime.CSharp.** projects.
-A significant part of AElf is the side chain framework. It is mainly implemented in the **AElf.CrossChain** namespace, defining the main abstractions in the **core** project and an implementation with gRPC in the **AElf.Crosschain.Grpc** project.
+A significant part of aelf is the side chain framework. It is mainly implemented in the **AElf.CrossChain** namespace, defining the main abstractions in the **core** project and an implementation with gRPC in the **AElf.Crosschain.Grpc** project.
The **AElf.Test** solution folder contains all the tests. Ensuring maximum coverage of the main functional aspects is crucial for maintaining the quality of our system.
@@ -54,4 +59,4 @@ The networking code is defined across two modules: **CoreOSAElfModule** and **Gr
## Testing
-When writing a new component, event handler, or method, it is important for AElf's quality to consider the corresponding unit test. As previously mentioned, we have a solution-wide test folder where we place all the tests.
+When writing a new component, event handler, or method, it is important for aelf's quality to consider the corresponding unit test. As previously mentioned, we have a solution-wide test folder where we place all the tests.
diff --git a/docs/learn/core/index.md b/docs/learn/core/index.md
new file mode 100644
index 00000000..6a30e855
--- /dev/null
+++ b/docs/learn/core/index.md
@@ -0,0 +1,5 @@
+---
+sidebar_position: 1
+title: Core
+description: aelf Core
+---
\ No newline at end of file
diff --git a/docs/Architecture/Core/Introduction.md b/docs/learn/core/introduction/index.md
similarity index 97%
rename from docs/Architecture/Core/Introduction.md
rename to docs/learn/core/introduction/index.md
index c390e249..fdcd72fe 100644
--- a/docs/Architecture/Core/Introduction.md
+++ b/docs/learn/core/introduction/index.md
@@ -1,3 +1,8 @@
+---
+sidebar_position: 1
+title: Core Introduction
+---
+
# Application Pattern
We follow generally accepted good practices in programming, especially those that align with our project needs. Some of these practices are specific to C#, while others pertain to general Object-Oriented Programming (OOP) principles like **SOLID** and **DRY**.
diff --git a/docs/Architecture/Cross Chain/Architecture.md b/docs/learn/cross-chain/architecture/index.md
similarity index 91%
rename from docs/Architecture/Cross Chain/Architecture.md
rename to docs/learn/cross-chain/architecture/index.md
index 9475bc24..16037aea 100644
--- a/docs/Architecture/Cross Chain/Architecture.md
+++ b/docs/learn/cross-chain/architecture/index.md
@@ -1,10 +1,15 @@
+---
+sidebar_position: 2
+title: Architecture
+---
+
# Side Chain and Main Chain Node Documentation
## Overview
Conceptually, a side chain node and a main chain node are similar. Both are independent blockchains with their own peer-to-peer networks and possibly their own ecosystems. This setup can be implemented at multiple levels. In terms of peer-to-peer networks, all side chains operate in parallel to each other but are linked to a main chain node through a cross-chain communication mechanism.
-Through this link, messages are exchanged, and indexing is performed to ensure that transactions from the main chain or other side chains are verifiable in the side chain. Implementers can use AElf libraries and frameworks to build these chains.
+Through this link, messages are exchanged, and indexing is performed to ensure that transactions from the main chain or other side chains are verifiable in the side chain. Implementers can use aelf libraries and frameworks to build these chains.
**Key Role of the Main Chain:**
@@ -15,9 +20,9 @@ Through this link, messages are exchanged, and indexing is performed to ensure t
## Node Level Architecture
-In the current architecture, both the side chain node and the main chain node have one server and exactly one client. This forms the basis for AElf's two-way communication between the main chain and side chains. Both the server and the client are implemented as node plugins (a node has a collection of plugins). Interaction (listening and requesting) can start once both nodes are running.
+In the current architecture, both the side chain node and the main chain node have one server and exactly one client. This forms the basis for aelf's two-way communication between the main chain and side chains. Both the server and the client are implemented as node plugins (a node has a collection of plugins). Interaction (listening and requesting) can start once both nodes are running.
-![Node Level Architecture](side-chain-nodes.png)
+![Node Level Architecture](/img/side-chain-nodes.png)
The diagram above illustrates two nodes run by an entity: one main chain node and one side chain node. Note that the nodes don't have to be in the same physical location.
@@ -38,7 +43,7 @@ When the side chain node starts, it will initiate various communications. Here a
- **Handshake:** After initialization, the side chain is launched and will perform a handshake with the main chain node to signal that it is ready to be indexed.
- **Indexing Process:** During indexing, information about irreversible blocks will be exchanged between the side chain and the main chain. The main chain will write the final result in a block, which is calculated using the cross-chain data from all side chains. The side chain will also record the data in a contract from the main chain.
-AElf provides cross-chain communication implementation using gRPC.
+aelf provides cross-chain communication implementation using gRPC.
```protobuf
rpc RequestIndexingFromParentChain (CrossChainRequest) returns (stream acs7.ParentChainBlockData) {}
@@ -58,4 +63,4 @@ Apart from the data in blocks, most cross-chain data will be stored by the cross
Conceptually, the node operates as described in the following diagram. The main/side chain node receives cross-chain data from the other side and stores it in local memory. The indexing transaction is packed by the miner, and the cross-chain data is written into the `State` through the `Crosschain Contract`.
-![Data Flow](architecture-node.png)
\ No newline at end of file
+![Data Flow](/img/architecture-node.png)
diff --git a/docs/learn/cross-chain/cross-chain-transfer/index.md b/docs/learn/cross-chain/cross-chain-transfer/index.md
new file mode 100644
index 00000000..943d1ce7
--- /dev/null
+++ b/docs/learn/cross-chain/cross-chain-transfer/index.md
@@ -0,0 +1,147 @@
+---
+sidebar_position: 5
+title: Cross Chain Transfer
+---
+
+
+# Cross Chain Transfer
+
+Cross chain transfer is one of the most commonly used cases when it comes to cross chain verification. aelf already supports cross chain transfer functionality in its contract. This section will explain how to transfer tokens across chains. It assumes a side chain is already deployed and has been indexed by the main chain.
+
+The transfer process will always use the same contract methods and follow these two steps:
+
+- **Initiate the transfer**
+- **Receive the tokens**
+
+## Prepare
+
+There are a few preparation steps required before a cross chain transfer, which need to be done only once for each chain. If these steps are already completed, you can skip this part.
+
+Let's say you want to transfer token **FOO** from chain **A** to chain **B**. Before you start, make sure you understand how cross chain transaction verification works. Any input containing `MerklePath` in the following steps means that cross chain verification is needed. Refer to the [cross chain verification documentation](crosschain-verification) for more details.
+
+- **Validate `Token Contract` address on chain A**
+
+ Send transaction `tx_1` to the `Genesis Contract` with the method `ValidateSystemContractAddress`. You need to provide `system_contract_hash_name` and the address of the `Token Contract`. `tx_1` should be successfully packed in the block.
+
+ ```protobuf
+ rpc ValidateSystemContractAddress(ValidateSystemContractAddressInput) returns (google.protobuf.Empty){}
+
+ message ValidateSystemContractAddressInput {
+ aelf.Hash system_contract_hash_name = 1;
+ aelf.Address address = 2;
+ }
+ ```
+
+- **Register the token contract address of chain A on chain B**
+
+ Create a proposal for the `RegisterCrossChainTokenContractAddress` for the default parliament organization on chain B. Refer to the [Parliament contract documentation](../../reference/smart-contract-api/parliament) for more details. Apart from cross chain verification context, you also need to provide the origin data of `tx_1` and the `Token Contract` address on chain A.
+
+ ```protobuf
+ rpc RegisterCrossChainTokenContractAddress (RegisterCrossChainTokenContractAddressInput) returns (google.protobuf.Empty) {}
+
+ message RegisterCrossChainTokenContractAddressInput {
+ int32 from_chain_id = 1;
+ int64 parent_chain_height = 2;
+ bytes transaction_bytes = 3;
+ aelf.MerklePath merkle_path = 4;
+ aelf.Address token_contract_address = 5;
+ }
+ ```
+
+- **Validate `TokenInfo` of FOO on chain A**
+
+ Send transaction `tx_2` to the `Token Contract` with the method `ValidateTokenInfoExists` on chain A. You need to provide `TokenInfo` of FOO. `tx_2` should be successfully packed in the block.
+
+ ```protobuf
+ rpc ValidateTokenInfoExists(ValidateTokenInfoExistsInput) returns (google.protobuf.Empty){}
+
+ message ValidateTokenInfoExistsInput {
+ string symbol = 1;
+ string token_name = 2;
+ int64 total_supply = 3;
+ int32 decimals = 4;
+ aelf.Address issuer = 5;
+ bool is_burnable = 6;
+ int32 issue_chain_id = 7;
+ }
+ ```
+
+- **Create token FOO on chain B**
+
+ Send transaction `tx_3` to the `Token Contract` with the method `CrossChainCreateToken` on chain B. You need to provide the origin data of `tx_2` and the cross chain verification context of `tx_2`.
+
+ ```protobuf
+ rpc CrossChainCreateToken(CrossChainCreateTokenInput) returns (google.protobuf.Empty) {}
+
+ message CrossChainCreateTokenInput {
+ int32 from_chain_id = 1;
+ int64 parent_chain_height = 2;
+ bytes transaction_bytes = 3;
+ aelf.MerklePath merkle_path = 4;
+ }
+ ```
+
+## Initiate the Transfer
+
+On the token contract of the source chain, the `CrossChainTransfer` method is used to trigger the transfer:
+
+```protobuf
+rpc CrossChainTransfer (CrossChainTransferInput) returns (google.protobuf.Empty) { }
+
+message CrossChainTransferInput {
+ aelf.Address to = 1;
+ string symbol = 2;
+ sint64 amount = 3;
+ string memo = 4;
+ int32 to_chain_id = 5;
+ int32 issue_chain_id = 6;
+}
+```
+
+### The fields of the input:
+
+- `to`: the target address to receive the token
+- `symbol`: the symbol of the token to be transferred
+- `amount`: the amount of the token to be transferred
+- `memo`: a memo field for this transfer
+- `to_chain_id`: the destination chain ID where the tokens will be received
+- `issue_chain_id`: the chain ID where the token was issued
+
+## Receive on the Destination Chain
+
+On the destination chain where the tokens need to be received, the `CrossChainReceiveToken` method is used to trigger the reception:
+
+```protobuf
+rpc CrossChainReceiveToken (CrossChainReceiveTokenInput) returns (google.protobuf.Empty) { }
+
+message CrossChainReceiveTokenInput {
+ int32 from_chain_id = 1;
+ int64 parent_chain_height = 2;
+ bytes transfer_transaction_bytes = 3;
+ aelf.MerklePath merkle_path = 4;
+}
+
+rpc GetBoundParentChainHeightAndMerklePathByHeight (aelf.Int64Value) returns (CrossChainMerkleProofContext) {
+ option (aelf.is_view) = true;
+}
+
+message CrossChainMerkleProofContext {
+ int64 bound_parent_chain_height = 1;
+ aelf.MerklePath merkle_path_from_parent_chain = 2;
+}
+```
+
+### The fields of the input:
+
+- `from_chain_id`: the source chain ID from which the cross chain transfer was launched
+
+- `parent_chain_height`: the height of the block on the main chain that contains the `CrossChainTransfer` transaction (for main chain to side chain transfer). For side chain to side chain or side chain to main chain transfer, it is the result of `GetBoundParentChainHeightAndMerklePathByHeight` (input is the height of the `CrossChainTransfer`), accessible in the `bound_parent_chain_height` field.
+
+- `transfer_transaction_bytes`: the serialized form of the `CrossChainTransfer` transaction.
+
+- `merkle_path`: obtained from the source chain. The construction of merkle path data differs among cases:
+ - **Main chain to side chain transfer**: merkle path from the main chain’s web API `GetMerklePathByTransactionIdAsync` (with `CrossChainTransfer` transaction ID as input).
+ - **Side chain to side chain or side chain to main chain transfer**:
+ - merkle path from the source chain’s web API `GetMerklePathByTransactionIdAsync` (with `CrossChainTransfer` transaction ID as input).
+ - output of `GetBoundParentChainHeightAndMerklePathByHeight` method in the `CrossChain Contract` (with `CrossChainTransfer` transaction’s block height as input). Path nodes are in the `merkle_path_from_parent_chain` field of the `CrossChainMerkleProofContext` object.
+ - Concatenate the above two merkle paths.
diff --git a/docs/learn/cross-chain/cross-chain-verification/index.md b/docs/learn/cross-chain/cross-chain-verification/index.md
new file mode 100644
index 00000000..4f94d8c1
--- /dev/null
+++ b/docs/learn/cross-chain/cross-chain-verification/index.md
@@ -0,0 +1,45 @@
+---
+sidebar_position: 3
+title: Cross Chain Verification
+---
+
+
+# Cross Chain Verification
+
+Verification is the key feature that enables side chains. Because side chains do not have direct knowledge about other side chains, they need a way to verify information from other chains. Side chains need the ability to verify that a transaction was included in another side chain's block.
+
+## Indexing
+
+- The role of the main chain node is to index all the side chains' blocks.
+ - This way, it knows exactly the current state of all the side chains.
+ - Side chains also index main chain blocks, which is how they gain knowledge about the inclusion of transactions in other chains.
+- Indexing is a continuous process:
+ - The main chain permanently gathers information from the side chains.
+ - The side chains permanently gather information from the main chain.
+- When a side chain wants to verify a transaction from another side chain, it must wait until the correct main chain block has been indexed.
+
+## Merkle Tree
+
+- A Merkle tree is a basic binary tree structure.
+ - For cross-chain in aelf, the leaf value is the hash from transaction data.
+ - The node value (which is not a leaf node) is the hash calculated from its children's values up to the tree root.
+
+![Merkle Tree](/img/merkle.png)
+
+## Merkle Root
+
+- When a transaction is included in a side chain's block, the block will also include a Merkle root of the transactions in this block.
+ - This root is local to this side chain's blockchain and, by itself, of little value to other side chains because they follow a different protocol.
+ - Communication between side chains goes through the main chain in the form of a Merkle path.
+ - During the indexing process, the main chain calculates the root with the data from side chains, and side chains in turn get the root in future indexing.
+ - This root is used for the final check in cross-chain transaction verification.
+
+## Merkle Path
+
+- A Merkle path is the node collection for one leaf node to calculate to the root.
+ - A correct Merkle path is necessary to complete any work related to cross-chain verification.
+- For the transaction **tx** from chain **A**:
+ - You need the whole Merkle path root for **tx** to calculate the final root if you want to verify the existence of this transaction on other chains.
+ - Verify the root by checking whether it is equal to the one obtained from indexing before.
+
+![Merkle Path](/img/merkle-path.png)
\ No newline at end of file
diff --git a/docs/learn/cross-chain/index.md b/docs/learn/cross-chain/index.md
new file mode 100644
index 00000000..ff958bbe
--- /dev/null
+++ b/docs/learn/cross-chain/index.md
@@ -0,0 +1,4 @@
+---
+sidebar_position: 2
+title: Cross Chain
+---
\ No newline at end of file
diff --git a/docs/Architecture/Cross Chain/Introduction.md b/docs/learn/cross-chain/introduction/index.md
similarity index 74%
rename from docs/Architecture/Cross Chain/Introduction.md
rename to docs/learn/cross-chain/introduction/index.md
index f5bb819d..9b6b6241 100644
--- a/docs/Architecture/Cross Chain/Introduction.md
+++ b/docs/learn/cross-chain/introduction/index.md
@@ -1,20 +1,28 @@
+---
+sidebar_position: 1
+title: Introduction
+---
+
# Introduction
One of the major issues with current blockchain systems is scalability. This is mainly due to **congestion problems** in existing blockchains. The core problem is that when a single chain needs to sequentially order and process transactions, a popular dApp consuming a lot of resources can negatively impact other dApps.
-To address this issue, AElf introduced side chains in its initial design. The concept is that each side-chain handles one or more similar business scenarios, distributing different tasks across multiple chains to improve overall processing efficiency.
+To address this issue, aelf introduced side chains in its initial design. The concept is that each side-chain handles one or more similar business scenarios, distributing different tasks across multiple chains to improve overall processing efficiency.
## Key Points:
+
- **Independent and Specialized**: Side-chains are designed to be independent and specialized, ensuring that the dApps running on them perform efficiently and smoothly.
- **Network Link**: There is a network link between the main-chain node and side-chain nodes, with communication indirectly facilitated through a Merkle root.
-![image](introduction-topology.png)
+![Introduction Topology](/img/introduction-topology.webp)
-*The diagram above illustrates the conceptual idea behind side chains.*
+_The diagram above illustrates the conceptual idea behind side chains._
-Side chains are isolated but still need a way to interact with each other. To enable cross-chain verification scenarios, AElf introduces a communication mechanism through **Merkle roots** and **indexing**.
+Side chains are isolated but still need a way to interact with each other. To enable cross-chain verification scenarios, aelf introduces a communication mechanism through **Merkle roots** and **indexing**.
## Overview
+
The following sections of this documentation will provide:
-- An overview of the architecture of AElf's side chains.
+
+- An overview of the architecture of aelf's side chains.
- A guide explaining how to set up a main-chain and a side chain node.
diff --git a/docs/Architecture/Cross Chain/Verify.md b/docs/learn/cross-chain/verify/index.md
similarity index 95%
rename from docs/Architecture/Cross Chain/Verify.md
rename to docs/learn/cross-chain/verify/index.md
index 898d90b1..4ba269a2 100644
--- a/docs/Architecture/Cross Chain/Verify.md
+++ b/docs/learn/cross-chain/verify/index.md
@@ -1,3 +1,9 @@
+---
+sidebar_position: 4
+title: Verify
+---
+
+
# Cross Chain Transaction Verification
This section provides guidance on verifying transactions across different blockchain chains, assuming that a side chain has already been deployed and indexed by the main chain.
@@ -28,7 +34,7 @@ message VerifyTransactionInput {
The **VerifyTransaction** method is used for verification and returns whether the transaction was mined and indexed by the destination chain. The method is the same for both scenarios; only the input values differ.
-### Verifying a Main Chain Transaction
+## Verifying a Main Chain Transaction
To verify a main chain transaction on a side chain, use the **VerifyTransaction** method on the side chain with the following input values:
@@ -39,7 +45,7 @@ To verify a main chain transaction on a side chain, use the **VerifyTransaction*
You can retrieve the Merkle path of a transaction in a block by using the chain's API method **GetMerklePathByTransactionIdAsync**.
-### Verifying a Side Chain Transaction
+## Verifying a Side Chain Transaction
For verifying a side chain transaction:
diff --git a/docs/learn/index.md b/docs/learn/index.md
new file mode 100644
index 00000000..5e3f3f61
--- /dev/null
+++ b/docs/learn/index.md
@@ -0,0 +1,4 @@
+---
+sidebar_position: 2
+title: Understanding aelf
+---
\ No newline at end of file
diff --git a/docs/protocol/network/index.md b/docs/learn/network/index.md
similarity index 98%
rename from docs/protocol/network/index.md
rename to docs/learn/network/index.md
index d0ffdf72..970ae07b 100644
--- a/docs/protocol/network/index.md
+++ b/docs/learn/network/index.md
@@ -1,3 +1,10 @@
+---
+sidebar_position: 4
+title: Network
+description: Network
+image: /img/Logo.aelf.svg
+---
+
# Network
## Introduction
diff --git a/docs/Architecture/Smart Contract/architecture.md b/docs/learn/smart-contract/architecture/index.md
similarity index 95%
rename from docs/Architecture/Smart Contract/architecture.md
rename to docs/learn/smart-contract/architecture/index.md
index 4e0aaa44..4dbe16a3 100644
--- a/docs/Architecture/Smart Contract/architecture.md
+++ b/docs/learn/smart-contract/architecture/index.md
@@ -1,3 +1,8 @@
+---
+sidebar_position: 1
+title: Smart Contract Architecture
+---
+
# Smart Contract Architecture
A blockchain platform works like a distributed database that stores all smart contracts. Each contract has a unique address used for state queries and updates. Methods in the contract code handle permission checks and logic.
@@ -24,7 +29,7 @@ A smart contract consists of methods that interact with state variables. Transac
aelf defines Smart Contracts as micro-services, making them language-independent. For example, the Consensus Protocol is a service defined by a smart contract.
-
+![Smart Contract Architecture](/img/sc-as-service.png)
### Chain Interactions
diff --git a/docs/Architecture/Smart Contract/event.md b/docs/learn/smart-contract/event/index.md
similarity index 92%
rename from docs/Architecture/Smart Contract/event.md
rename to docs/learn/smart-contract/event/index.md
index 58613182..1f1b84db 100644
--- a/docs/Architecture/Smart Contract/event.md
+++ b/docs/learn/smart-contract/event/index.md
@@ -1,3 +1,8 @@
+---
+sidebar_position: 3
+title: Smart Contract Events
+---
+
# Smart Contract Events
## Event Option
diff --git a/docs/learn/smart-contract/index.md b/docs/learn/smart-contract/index.md
new file mode 100644
index 00000000..43feb679
--- /dev/null
+++ b/docs/learn/smart-contract/index.md
@@ -0,0 +1,4 @@
+---
+sidebar_position: 7
+title: Smart Contract
+---
\ No newline at end of file
diff --git a/docs/Architecture/Smart Contract/messages.md b/docs/learn/smart-contract/messages/index.md
similarity index 91%
rename from docs/Architecture/Smart Contract/messages.md
rename to docs/learn/smart-contract/messages/index.md
index ddc8f2a7..3ae256e5 100644
--- a/docs/Architecture/Smart Contract/messages.md
+++ b/docs/learn/smart-contract/messages/index.md
@@ -1,3 +1,8 @@
+---
+sidebar_position: 4
+title: Smart Contract Messages
+---
+
# Smart Contract Messages
In aelf, we use protobuf messages to call smart contracts and serialize their state. Here's a simple example of a message definition:
diff --git a/docs/learn/smart-contract/requirements-and-restrictions/index.md b/docs/learn/smart-contract/requirements-and-restrictions/index.md
new file mode 100644
index 00000000..40f76c82
--- /dev/null
+++ b/docs/learn/smart-contract/requirements-and-restrictions/index.md
@@ -0,0 +1,4 @@
+---
+sidebar_position: 5
+title: Requirements and Restrictions
+---
diff --git a/docs/Architecture/Smart Contract/requirements-and-restrictions/namespace-and-type-restrictions.md b/docs/learn/smart-contract/requirements-and-restrictions/namespace-and-type-restrictions/index.md
similarity index 98%
rename from docs/Architecture/Smart Contract/requirements-and-restrictions/namespace-and-type-restrictions.md
rename to docs/learn/smart-contract/requirements-and-restrictions/namespace-and-type-restrictions/index.md
index c3b7eba3..af0087a4 100644
--- a/docs/Architecture/Smart Contract/requirements-and-restrictions/namespace-and-type-restrictions.md
+++ b/docs/learn/smart-contract/requirements-and-restrictions/namespace-and-type-restrictions/index.md
@@ -1,3 +1,9 @@
+---
+sidebar_position: 3
+title: Type and Namespace Restrictions
+---
+
+
# Type and Namespace Restrictions
When deploying new contract code, Nodes perform checks against a whitelist. If any type used in the code is not listed in the whitelist, or if the method access or type name is denied, the deployment will fail. This ensures that only approved types and namespaces can be utilized within the contract code.
diff --git a/docs/Architecture/Smart Contract/requirements-and-restrictions/other-restrictions.md b/docs/learn/smart-contract/requirements-and-restrictions/other-restrictions/index.md
similarity index 97%
rename from docs/Architecture/Smart Contract/requirements-and-restrictions/other-restrictions.md
rename to docs/learn/smart-contract/requirements-and-restrictions/other-restrictions/index.md
index 3abf5e8f..fadc7b11 100644
--- a/docs/Architecture/Smart Contract/requirements-and-restrictions/other-restrictions.md
+++ b/docs/learn/smart-contract/requirements-and-restrictions/other-restrictions/index.md
@@ -1,3 +1,8 @@
+---
+sidebar_position: 4
+title: Other Restrictions
+---
+
# Other Restrictions
## GetHashCode Usage
diff --git a/docs/Architecture/Smart Contract/requirements-and-restrictions/project-requirements.md b/docs/learn/smart-contract/requirements-and-restrictions/project-requirements/index.md
similarity index 93%
rename from docs/Architecture/Smart Contract/requirements-and-restrictions/project-requirements.md
rename to docs/learn/smart-contract/requirements-and-restrictions/project-requirements/index.md
index da90201d..3348fe71 100644
--- a/docs/Architecture/Smart Contract/requirements-and-restrictions/project-requirements.md
+++ b/docs/learn/smart-contract/requirements-and-restrictions/project-requirements/index.md
@@ -1,3 +1,9 @@
+---
+sidebar_position: 1
+title: Contract Project Requirements
+---
+
+
# Contract Project Requirements
## Project Properties
diff --git a/docs/Architecture/Smart Contract/requirements-and-restrictions/structure-restrictions-and-requirements.md b/docs/learn/smart-contract/requirements-and-restrictions/structure-restrictions-and-requirements/index.md
similarity index 96%
rename from docs/Architecture/Smart Contract/requirements-and-restrictions/structure-restrictions-and-requirements.md
rename to docs/learn/smart-contract/requirements-and-restrictions/structure-restrictions-and-requirements/index.md
index 59163779..ee70e746 100644
--- a/docs/Architecture/Smart Contract/requirements-and-restrictions/structure-restrictions-and-requirements.md
+++ b/docs/learn/smart-contract/requirements-and-restrictions/structure-restrictions-and-requirements/index.md
@@ -1,3 +1,8 @@
+---
+sidebar_position: 2
+title: Contract Class Structure
+---
+
# Contract Class Structure
## Restrictions for Simplified Code Checks
@@ -10,7 +15,7 @@
If these rules are not followed, code deployment will fail.
-
+![Contract Class Structure](/img/contract-class-structure.webp)
## Field Usage Limitations
diff --git a/docs/Architecture/Smart Contract/service.md b/docs/learn/smart-contract/service/index.md
similarity index 96%
rename from docs/Architecture/Smart Contract/service.md
rename to docs/learn/smart-contract/service/index.md
index 914b55f6..f077e493 100644
--- a/docs/Architecture/Smart Contract/service.md
+++ b/docs/learn/smart-contract/service/index.md
@@ -1,3 +1,8 @@
+---
+sidebar_position: 2
+title: Smart Contract Service
+---
+
# Smart Contract Service
When writing a smart contract in aelf, the first step is to define it so our tools can generate it. aelf contracts are defined and generated using gRPC and protobuf.
diff --git a/docs/protocol/transactions/index.md b/docs/learn/transactions/index.md
similarity index 96%
rename from docs/protocol/transactions/index.md
rename to docs/learn/transactions/index.md
index 26f2f7d2..7468e9f8 100644
--- a/docs/protocol/transactions/index.md
+++ b/docs/learn/transactions/index.md
@@ -1,3 +1,10 @@
+---
+sidebar_position: 6
+title: Transactions
+description: Transactions
+image: /img/Logo.aelf.svg
+---
+
# Overview
Transactions play a critical role in modifying the state of the aelf blockchain through interactions with smart contracts. Here’s how transactions function:
@@ -12,7 +19,7 @@ Transactions play a critical role in modifying the state of the aelf blockchain
- Upon broadcasting a transaction, if it meets validation criteria, it becomes eligible for inclusion in a block.
- Once included in a block and executed by the node, the transaction potentially alters the state of the involved contracts.
-In essence, transactions in AElf blockchain are fundamental actions that drive changes to the blockchain’s state, ensuring secure and efficient operation across the network.
+In essence, transactions in aelf blockchain are fundamental actions that drive changes to the blockchain’s state, ensuring secure and efficient operation across the network.
## Smart Contract
@@ -67,7 +74,7 @@ rpc GetVotingResult (GetVotingResultInput) returns (VotingResult) {
- They are used for querying information stored in the contract, such as retrieving voting results, fetching account details, or checking contract status.
-These distinctions ensure that smart contracts in AElf blockchain can effectively manage state changes while maintaining secure and efficient data access.
+These distinctions ensure that smart contracts in aelf blockchain can effectively manage state changes while maintaining secure and efficient data access.
diff --git a/docs/quick-start/become-a-node-operator/index.md b/docs/quick-start/become-a-node-operator/index.md
new file mode 100644
index 00000000..4ed090f2
--- /dev/null
+++ b/docs/quick-start/become-a-node-operator/index.md
@@ -0,0 +1,8 @@
+---
+sidebar_position: 3
+title: Become a Node Operator
+---
+
+# Introduction
+
+To become a BP (Block Producer), you must run a full node and participate in the election. The total number of BPs in the aelf network is 2N+1, starting at 8 in 2022 and increasing by 1 each year. If your node ranks in the top 2N+1 in the election, you can participate in block production and aelf governance. This tutorial will guide you on how to become a BP.
\ No newline at end of file
diff --git a/docs/quick-start/become-a-node-operator/operations/index.md b/docs/quick-start/become-a-node-operator/operations/index.md
new file mode 100644
index 00000000..17810d30
--- /dev/null
+++ b/docs/quick-start/become-a-node-operator/operations/index.md
@@ -0,0 +1,52 @@
+---
+sidebar_position: 1
+title: Operations
+---
+
+# Operations
+
+## Steps to Become a BP
+
+1. Set up nodes.
+2. Participate in BP election using nodes.
+
+**Note:**
+
+- Voters stake ELF tokens to vote for their preferred nodes.
+
+**Outcome of Election:**
+
+- **Block Producer:** Elected based on top 2N+1.
+- **Candidate Nodes:** Elected based on top 5*(2N+1).
+
+## Nodes
+
+### Set up Nodes
+
+aelf doesn't have light nodes, so all nodes are full nodes. [Click here](#) to learn how to set up a full node.
+
+**Note:** To become a BP, you need to run individual nodes for both MainChain aelf and all the SideChains.
+
+### Participate in BP Election
+
+Stake 100,000 ELF to join the node election. Ensure you have enough balance.
+
+1. Go to the Governance page.
+2. Click "Become a candidate node."
+3. Stake 100,000 ELF.
+
+### Users Vote for Nodes
+
+Users can vote for candidate nodes at Governance -> Vote -> Node Table.
+
+- The top 2N+1 nodes become BPs.
+- The top 5*(2N+1) nodes become candidate nodes.
+- N starts from 8 in 2022 and increases by 1 each year.
+
+### BPs are Elected
+
+BPs are elected every seven days, starting at 7:23 (UTC) every Thursday. If your node ranks in the top 2N+1, it becomes a BP in the next term. If it ranks between top 2N+1 and top 5*(2N+1), it becomes a candidate node. Check the current elected BPs in real-time on the election page.
+
+## Simulate in Local Environment
+
+To try setting up a node and running as a BP locally, follow the instructions to simulate it in the local environment.
\ No newline at end of file
diff --git a/docs/quick-start/become-a-node-operator/simulation-in-local-environment/index.md b/docs/quick-start/become-a-node-operator/simulation-in-local-environment/index.md
new file mode 100644
index 00000000..888bdf7b
--- /dev/null
+++ b/docs/quick-start/become-a-node-operator/simulation-in-local-environment/index.md
@@ -0,0 +1,100 @@
+---
+sidebar_position: 2
+title: Simulation in the Local Environment
+---
+
+# Simulation in the Local Environment
+
+## Set up a Full Node
+
+To simulate BP nodes in a local environment, you need to set up at least three nodes, as a single node cannot become a BP. BP elections occur every 7 days, but for this tutorial, we'll change the term to 120 seconds. Follow the steps below:
+
+1. Find the `appsettings.json` file in `/.../src/AElf.Launcher` and configure the public keys of the three nodes:
+
+ ```json
+ "Consensus": {
+ "InitialMinerList": [
+ "04884d9563b3b67a5*****526dd489e3805211cba710d956718*****",
+ "045670526219d7315*****8629891b0617ab605e646ae78961c*****",
+ "046a5913eae5fee3d*****3826beb2b7109b5141679a1927338*****"
+ ],
+ "MiningInterval": 4000,
+ "StartTimestamp": 0,
+ "PeriodSeconds": 120,
+ "MinerIncreaseInterval": 31536000
+ }
+ ```
+
+2. Change `PeriodSeconds` from 604800 to 120 for a 2-minute election term.
+3. Shut down nodes and delete all Redis data. Restart your multi-nodes.
+
+# Become a Candidate Node
+
+1. Stake 100,000 ELF to join the node election. Ensure you have enough balance by checking with:
+
+ ```sh
+ aelf-command call AElf.ContractNames.Token GetBalance '{"symbol": "ELF", "owner": "YOUR_ADDRESS"}'
+ ```
+
+2. If balance < 100,005 ELF, transfer ELF tokens using:
+
+ ```sh
+ aelf-command send AElf.ContractNames.Token Transfer '{"symbol": "ELF", "to": "YOUR_ADDRESS", "amount": "10000000000000"}'
+ ```
+
+3. Announce your candidacy:
+
+ ```sh
+ aelf-command send AElf.ContractNames.Election AnnounceElection '{"value": "YOUR_ADDRESS"}' -a YOUR_ADDRESS
+ ```
+
+4. Check candidate information:
+
+ ```sh
+ aelf-command call AElf.ContractNames.Election GetCandidateInformation '{"value":"YOUR_PUBLIC_KEY"}'
+ ```
+
+# Users Vote for Nodes
+
+1. Create a user account:
+
+ ```sh
+ aelf-command create
+ ```
+
+2. Transfer ELF to the new account for voting (e.g., 2000 ELF):
+
+ ```sh
+ aelf-command send AElf.ContractNames.Token Transfer '{"symbol": "ELF", "to": "USER_ADDRESS", "amount": "200000000000"}'
+ ```
+
+3. Check balance of the new account:
+
+ ```sh
+ aelf-command call AElf.ContractNames.Token GetBalance '{"symbol": "ELF", "owner": "USER_ADDRESS"}'
+ ```
+
+4. Vote for the candidate node (e.g., 20 ELF):
+
+ ```sh
+ aelf-command send AElf.ContractNames.Election Vote '{"candidatePubkey":"CANDIDATE_PUBLIC_KEY","amount":2000000000,"endTimestamp":{"seconds":1600271999,"nanos":999000}}' -a USER_ADDRESS
+ ```
+
+5. Check candidate votes:
+
+ ```sh
+ aelf-command call AElf.ContractNames.Election GetCandidateVote '{"value":"CANDIDATE_PUBLIC_KEY"}'
+ ```
+
+# Become a BP
+
+The top 2N+1 candidate nodes are elected as BPs in the next term. Get the list of current BPs:
+
+```sh
+aelf-command call AElf.ContractNames.Consensus GetCurrentMinerPubkeyList '{}'
+```
+
+## Add More BPs
+Repeat the steps to add more BPs. No need to edit `appsettings.json` again. When candidate nodes exceed the max BPs, they replace genesis nodes, which cannot participate in elections again.
+
+Proceed to contract deployment and DApp development guides for more details.
\ No newline at end of file
diff --git a/docs/Tutorials/smart-contract-developing-demos.md b/docs/quick-start/develop-your-first-aelf-smart-contract/index.md
similarity index 97%
rename from docs/Tutorials/smart-contract-developing-demos.md
rename to docs/quick-start/develop-your-first-aelf-smart-contract/index.md
index feb8b279..eac8d814 100644
--- a/docs/Tutorials/smart-contract-developing-demos.md
+++ b/docs/quick-start/develop-your-first-aelf-smart-contract/index.md
@@ -1,3 +1,10 @@
+---
+sidebar_position: 4
+title: Smart Contract Developing Demos
+description: Smart Contract Developing Demos
+image: /img/Logo.aelf.svg
+---
+
# Smart Contract Developing Demos
### Bingo Game
@@ -145,7 +152,7 @@ message BoutInformation {
- **contract**: Store definition proto files for your contract.
- **message**: Define common properties that can be imported and used by other proto files.
- **reference**: Store proto files for contracts referenced by your contract.
- - **base**: Store basic proto files, such as ACS (AElf standard contract) proto files.
+ - **base**: Store basic proto files, such as ACS (aelf contract standard) proto files.
- For Protobuf files under the test folder:
- **contract**: Store definition proto files for your contract and any referenced contracts.
diff --git a/docs/Tutorials/Running A Side Chain/requestSideChainCreation.md b/docs/quick-start/explore-running-aelf-side-chain/index.md
similarity index 100%
rename from docs/Tutorials/Running A Side Chain/requestSideChainCreation.md
rename to docs/quick-start/explore-running-aelf-side-chain/index.md
diff --git a/docs/quick-start/index.md b/docs/quick-start/index.md
new file mode 100644
index 00000000..4cfe5aa5
--- /dev/null
+++ b/docs/quick-start/index.md
@@ -0,0 +1,6 @@
+---
+sidebar_position: 1
+title: Quick Start
+---
+
+# Quick start
\ No newline at end of file
diff --git a/docs/getting-started/overview.md b/docs/quick-start/intro-to-aelf-development/index.md
similarity index 100%
rename from docs/getting-started/overview.md
rename to docs/quick-start/intro-to-aelf-development/index.md
diff --git a/docs/Tutorials/Running A Side Chain/runningASideChain.md b/docs/quick-start/run-a-side-chain/index.md
similarity index 100%
rename from docs/Tutorials/Running A Side Chain/runningASideChain.md
rename to docs/quick-start/run-a-side-chain/index.md
diff --git a/docs/Tutorials/Running aelf On The Cloud/googleCloud.md b/docs/quick-start/start-and-run-a-node-on-aelf-locally-or-on-cloud/index.md
similarity index 81%
rename from docs/Tutorials/Running aelf On The Cloud/googleCloud.md
rename to docs/quick-start/start-and-run-a-node-on-aelf-locally-or-on-cloud/index.md
index ce22bace..09c1df6e 100644
--- a/docs/Tutorials/Running aelf On The Cloud/googleCloud.md
+++ b/docs/quick-start/start-and-run-a-node-on-aelf-locally-or-on-cloud/index.md
@@ -6,21 +6,21 @@ This guide will walk you through the steps required to run an aelf node on Googl
1. Go to the [Google Cloud Marketplace](https://console.cloud.google.com/marketplace) and search for "aelf blockchain for enterprise".
- ![image](gcp-step1.png)
+ ![image](../../../static/img/gcp-step1.png)
2. Find the aelf image and click on "LAUNCH ON COMPUTE ENGINE".
- ![image](gcp-step2-b.png)
+ ![image](../../../static/img/gcp-step2-b.png)
3. Keep the default settings and click "DEPLOY" at the bottom left of the page.
- ![image](gcp-deployed.png)
+ ![image](../../../static/img/gcp-deployed.png)
## Step 2: Access and Start the Chain
1. Login to the launched VM instance via SSH. You can do this by clicking the SSH drop-down and selecting "Open in browser window".
- ![image](gcp-ssh-select.png)
+ ![image](../../../static/img/gcp-ssh-select.png)
2. In the SSH session, execute `sudo bash` to elevate your privileges.
@@ -35,7 +35,7 @@ This guide will walk you through the steps required to run an aelf node on Googl
cd /opt/aelf-node && docker-compose up -d
```
- ![image](gcp-docker-compose.png)
+ ![image](../../../static/img/gcp-docker-compose.png)
## Step 3: Verify Chain Status
@@ -45,6 +45,6 @@ This guide will walk you through the steps required to run an aelf node on Googl
curl -X GET "http://127.0.0.1:8001/api/blockChain/chainStatus" -H "accept: text/plain; v=1.0"
```
- ![image](gcp-curl-chain-stat.png)
+ ![image](../../../static/img/gcp-curl-chain-stat.png)
2. If everything is working normally, you should see the chain status increase with each request.
diff --git a/docs/tutorials/aelf On The Cloud/gcp-curl-chain-stat.png b/docs/tutorials/aelf On The Cloud/gcp-curl-chain-stat.png
deleted file mode 100644
index d9675abf..00000000
Binary files a/docs/tutorials/aelf On The Cloud/gcp-curl-chain-stat.png and /dev/null differ
diff --git a/docs/tutorials/aelf On The Cloud/gcp-deployed.png b/docs/tutorials/aelf On The Cloud/gcp-deployed.png
deleted file mode 100644
index 1bbd4211..00000000
Binary files a/docs/tutorials/aelf On The Cloud/gcp-deployed.png and /dev/null differ
diff --git a/docs/tutorials/aelf On The Cloud/gcp-docker-compose.png b/docs/tutorials/aelf On The Cloud/gcp-docker-compose.png
deleted file mode 100644
index 31f069e7..00000000
Binary files a/docs/tutorials/aelf On The Cloud/gcp-docker-compose.png and /dev/null differ
diff --git a/docs/tutorials/aelf On The Cloud/gcp-ssh-select.png b/docs/tutorials/aelf On The Cloud/gcp-ssh-select.png
deleted file mode 100644
index ef2d1436..00000000
Binary files a/docs/tutorials/aelf On The Cloud/gcp-ssh-select.png and /dev/null differ
diff --git a/docs/tutorials/aelf On The Cloud/gcp-step1.png b/docs/tutorials/aelf On The Cloud/gcp-step1.png
deleted file mode 100644
index b447dbb0..00000000
Binary files a/docs/tutorials/aelf On The Cloud/gcp-step1.png and /dev/null differ
diff --git a/docs/tutorials/aelf On The Cloud/gcp-step2-a.png b/docs/tutorials/aelf On The Cloud/gcp-step2-a.png
deleted file mode 100644
index 764e9f51..00000000
Binary files a/docs/tutorials/aelf On The Cloud/gcp-step2-a.png and /dev/null differ
diff --git a/docs/tutorials/aelf On The Cloud/gcp-step2-b.png b/docs/tutorials/aelf On The Cloud/gcp-step2-b.png
deleted file mode 100644
index 2c1d01e7..00000000
Binary files a/docs/tutorials/aelf On The Cloud/gcp-step2-b.png and /dev/null differ
diff --git a/static/img/AetherLinkStructure.png b/static/img/AetherLinkStructure.png
new file mode 100644
index 00000000..06b24aad
Binary files /dev/null and b/static/img/AetherLinkStructure.png differ
diff --git a/static/img/BP-approval-required.png b/static/img/BP-approval-required.png
new file mode 100644
index 00000000..915148bd
Binary files /dev/null and b/static/img/BP-approval-required.png differ
diff --git a/static/img/No-BP-approval-required.webp b/static/img/No-BP-approval-required.webp
new file mode 100644
index 00000000..85ab289f
Binary files /dev/null and b/static/img/No-BP-approval-required.webp differ
diff --git a/docs/Architecture/Cross Chain/architecture-node.png b/static/img/architecture-node.png
similarity index 100%
rename from docs/Architecture/Cross Chain/architecture-node.png
rename to static/img/architecture-node.png
diff --git a/docs/Architecture/Cross Chain/architecture-topology.png b/static/img/architecture-topology.png
similarity index 100%
rename from docs/Architecture/Cross Chain/architecture-topology.png
rename to static/img/architecture-topology.png
diff --git a/static/img/codespaces11.webp b/static/img/codespaces11.webp
new file mode 100644
index 00000000..c04c59b2
Binary files /dev/null and b/static/img/codespaces11.webp differ
diff --git a/static/img/codespaces21.webp b/static/img/codespaces21.webp
new file mode 100644
index 00000000..c956f9fc
Binary files /dev/null and b/static/img/codespaces21.webp differ
diff --git a/static/img/consensus-2.webp b/static/img/consensus-2.webp
new file mode 100644
index 00000000..608fc978
Binary files /dev/null and b/static/img/consensus-2.webp differ
diff --git a/static/img/consensus-3.webp b/static/img/consensus-3.webp
new file mode 100644
index 00000000..0358aaba
Binary files /dev/null and b/static/img/consensus-3.webp differ
diff --git a/static/img/consensus-4.webp b/static/img/consensus-4.webp
new file mode 100644
index 00000000..25721292
Binary files /dev/null and b/static/img/consensus-4.webp differ
diff --git a/static/img/consensus-5.webp b/static/img/consensus-5.webp
new file mode 100644
index 00000000..96003159
Binary files /dev/null and b/static/img/consensus-5.webp differ
diff --git a/static/img/consensus-6.webp b/static/img/consensus-6.webp
new file mode 100644
index 00000000..7a490c37
Binary files /dev/null and b/static/img/consensus-6.webp differ
diff --git a/static/img/contract-class-structure.webp b/static/img/contract-class-structure.webp
new file mode 100644
index 00000000..29aa5fdc
Binary files /dev/null and b/static/img/contract-class-structure.webp differ
diff --git a/docs/Tutorials/Running aelf On The Cloud/gcp-curl-chain-stat.png b/static/img/gcp-curl-chain-stat.png
similarity index 100%
rename from docs/Tutorials/Running aelf On The Cloud/gcp-curl-chain-stat.png
rename to static/img/gcp-curl-chain-stat.png
diff --git a/docs/Tutorials/Running aelf On The Cloud/gcp-deployed.png b/static/img/gcp-deployed.png
similarity index 100%
rename from docs/Tutorials/Running aelf On The Cloud/gcp-deployed.png
rename to static/img/gcp-deployed.png
diff --git a/docs/Tutorials/Running aelf On The Cloud/gcp-docker-compose.png b/static/img/gcp-docker-compose.png
similarity index 100%
rename from docs/Tutorials/Running aelf On The Cloud/gcp-docker-compose.png
rename to static/img/gcp-docker-compose.png
diff --git a/docs/Tutorials/Running aelf On The Cloud/gcp-ssh-select.png b/static/img/gcp-ssh-select.png
similarity index 100%
rename from docs/Tutorials/Running aelf On The Cloud/gcp-ssh-select.png
rename to static/img/gcp-ssh-select.png
diff --git a/docs/Tutorials/Running aelf On The Cloud/gcp-step1.png b/static/img/gcp-step1.png
similarity index 100%
rename from docs/Tutorials/Running aelf On The Cloud/gcp-step1.png
rename to static/img/gcp-step1.png
diff --git a/docs/Tutorials/Running aelf On The Cloud/gcp-step2-a.png b/static/img/gcp-step2-a.png
similarity index 100%
rename from docs/Tutorials/Running aelf On The Cloud/gcp-step2-a.png
rename to static/img/gcp-step2-a.png
diff --git a/docs/Tutorials/Running aelf On The Cloud/gcp-step2-b.png b/static/img/gcp-step2-b.png
similarity index 100%
rename from docs/Tutorials/Running aelf On The Cloud/gcp-step2-b.png
rename to static/img/gcp-step2-b.png
diff --git a/docs/Architecture/Cross Chain/introduction-topology.png b/static/img/introduction-topology.png
similarity index 100%
rename from docs/Architecture/Cross Chain/introduction-topology.png
rename to static/img/introduction-topology.png
diff --git a/static/img/introduction-topology.webp b/static/img/introduction-topology.webp
new file mode 100644
index 00000000..b214f5d9
Binary files /dev/null and b/static/img/introduction-topology.webp differ
diff --git a/static/img/mac_install_redis1.png b/static/img/mac_install_redis1.png
new file mode 100644
index 00000000..b965f2d0
Binary files /dev/null and b/static/img/mac_install_redis1.png differ
diff --git a/docs/Architecture/Cross Chain/merkle-path.png b/static/img/merkle-path.png
similarity index 100%
rename from docs/Architecture/Cross Chain/merkle-path.png
rename to static/img/merkle-path.png
diff --git a/docs/Architecture/Cross Chain/merkle.png b/static/img/merkle.png
similarity index 100%
rename from docs/Architecture/Cross Chain/merkle.png
rename to static/img/merkle.png
diff --git a/docs/Architecture/Core/node-archi.png b/static/img/node-archi.png
similarity index 100%
rename from docs/Architecture/Core/node-archi.png
rename to static/img/node-archi.png
diff --git a/static/img/node-archi.webp b/static/img/node-archi.webp
new file mode 100644
index 00000000..27066517
Binary files /dev/null and b/static/img/node-archi.webp differ
diff --git a/static/img/oracle.png b/static/img/oracle.png
new file mode 100644
index 00000000..4ec7f621
Binary files /dev/null and b/static/img/oracle.png differ
diff --git a/static/img/protobuf-extension.gif b/static/img/protobuf-extension.gif
new file mode 100644
index 00000000..d0faf2f4
Binary files /dev/null and b/static/img/protobuf-extension.gif differ
diff --git a/static/img/sc-as-service.png b/static/img/sc-as-service.png
new file mode 100644
index 00000000..ed2680c5
Binary files /dev/null and b/static/img/sc-as-service.png differ
diff --git a/docs/Architecture/Cross Chain/side-chain-nodes.png b/static/img/side-chain-nodes.png
similarity index 100%
rename from docs/Architecture/Cross Chain/side-chain-nodes.png
rename to static/img/side-chain-nodes.png
diff --git a/static/img/windows_install_redis1.webp b/static/img/windows_install_redis1.webp
new file mode 100644
index 00000000..016fe01e
Binary files /dev/null and b/static/img/windows_install_redis1.webp differ
diff --git a/yarn.lock b/yarn.lock
new file mode 100644
index 00000000..41fc3fba
--- /dev/null
+++ b/yarn.lock
@@ -0,0 +1,8499 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@algolia/autocomplete-core@1.8.2":
+ version "1.8.2"
+ resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.8.2.tgz#8d758c8652742e2761450d2b615a841fca24e10e"
+ integrity sha512-mTeshsyFhAqw/ebqNsQpMtbnjr+qVOSKXArEj4K0d7sqc8It1XD0gkASwecm9mF/jlOQ4Z9RNg1HbdA8JPdRwQ==
+ dependencies:
+ "@algolia/autocomplete-shared" "1.8.2"
+
+"@algolia/autocomplete-core@1.9.3":
+ version "1.9.3"
+ resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.9.3.tgz#1d56482a768c33aae0868c8533049e02e8961be7"
+ integrity sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==
+ dependencies:
+ "@algolia/autocomplete-plugin-algolia-insights" "1.9.3"
+ "@algolia/autocomplete-shared" "1.9.3"
+
+"@algolia/autocomplete-plugin-algolia-insights@1.9.3":
+ version "1.9.3"
+ resolved "https://registry.yarnpkg.com/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.9.3.tgz#9b7f8641052c8ead6d66c1623d444cbe19dde587"
+ integrity sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==
+ dependencies:
+ "@algolia/autocomplete-shared" "1.9.3"
+
+"@algolia/autocomplete-preset-algolia@1.8.2":
+ version "1.8.2"
+ resolved "https://registry.yarnpkg.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.8.2.tgz#706e87f94c5f198c0e90502b97af09adeeddcc79"
+ integrity sha512-J0oTx4me6ZM9kIKPuL3lyU3aB8DEvpVvR6xWmHVROx5rOYJGQcZsdG4ozxwcOyiiu3qxMkIbzntnV1S1VWD8yA==
+ dependencies:
+ "@algolia/autocomplete-shared" "1.8.2"
+
+"@algolia/autocomplete-preset-algolia@1.9.3":
+ version "1.9.3"
+ resolved "https://registry.yarnpkg.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.9.3.tgz#64cca4a4304cfcad2cf730e83067e0c1b2f485da"
+ integrity sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==
+ dependencies:
+ "@algolia/autocomplete-shared" "1.9.3"
+
+"@algolia/autocomplete-shared@1.8.2":
+ version "1.8.2"
+ resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.8.2.tgz#e6972df5c6935a241f16e4909aa82902338e029d"
+ integrity sha512-b6Z/X4MczChMcfhk6kfRmBzPgjoPzuS9KGR4AFsiLulLNRAAqhP+xZTKtMnZGhLuc61I20d5WqlId02AZvcO6g==
+
+"@algolia/autocomplete-shared@1.9.3":
+ version "1.9.3"
+ resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.3.tgz#2e22e830d36f0a9cf2c0ccd3c7f6d59435b77dfa"
+ integrity sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==
+
+"@algolia/cache-browser-local-storage@4.24.0":
+ version "4.24.0"
+ resolved "https://registry.yarnpkg.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.24.0.tgz#97bc6d067a9fd932b9c922faa6b7fd6e546e1348"
+ integrity sha512-t63W9BnoXVrGy9iYHBgObNXqYXM3tYXCjDSHeNwnsc324r4o5UiVKUiAB4THQ5z9U5hTj6qUvwg/Ez43ZD85ww==
+ dependencies:
+ "@algolia/cache-common" "4.24.0"
+
+"@algolia/cache-common@4.24.0":
+ version "4.24.0"
+ resolved "https://registry.yarnpkg.com/@algolia/cache-common/-/cache-common-4.24.0.tgz#81a8d3a82ceb75302abb9b150a52eba9960c9744"
+ integrity sha512-emi+v+DmVLpMGhp0V9q9h5CdkURsNmFC+cOS6uK9ndeJm9J4TiqSvPYVu+THUP8P/S08rxf5x2P+p3CfID0Y4g==
+
+"@algolia/cache-in-memory@4.24.0":
+ version "4.24.0"
+ resolved "https://registry.yarnpkg.com/@algolia/cache-in-memory/-/cache-in-memory-4.24.0.tgz#ffcf8872f3a10cb85c4f4641bdffd307933a6e44"
+ integrity sha512-gDrt2so19jW26jY3/MkFg5mEypFIPbPoXsQGQWAi6TrCPsNOSEYepBMPlucqWigsmEy/prp5ug2jy/N3PVG/8w==
+ dependencies:
+ "@algolia/cache-common" "4.24.0"
+
+"@algolia/client-account@4.24.0":
+ version "4.24.0"
+ resolved "https://registry.yarnpkg.com/@algolia/client-account/-/client-account-4.24.0.tgz#eba7a921d828e7c8c40a32d4add21206c7fe12f1"
+ integrity sha512-adcvyJ3KjPZFDybxlqnf+5KgxJtBjwTPTeyG2aOyoJvx0Y8dUQAEOEVOJ/GBxX0WWNbmaSrhDURMhc+QeevDsA==
+ dependencies:
+ "@algolia/client-common" "4.24.0"
+ "@algolia/client-search" "4.24.0"
+ "@algolia/transporter" "4.24.0"
+
+"@algolia/client-analytics@4.24.0":
+ version "4.24.0"
+ resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-4.24.0.tgz#9d2576c46a9093a14e668833c505ea697a1a3e30"
+ integrity sha512-y8jOZt1OjwWU4N2qr8G4AxXAzaa8DBvyHTWlHzX/7Me1LX8OayfgHexqrsL4vSBcoMmVw2XnVW9MhL+Y2ZDJXg==
+ dependencies:
+ "@algolia/client-common" "4.24.0"
+ "@algolia/client-search" "4.24.0"
+ "@algolia/requester-common" "4.24.0"
+ "@algolia/transporter" "4.24.0"
+
+"@algolia/client-common@4.24.0":
+ version "4.24.0"
+ resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-4.24.0.tgz#77c46eee42b9444a1d1c1583a83f7df4398a649d"
+ integrity sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==
+ dependencies:
+ "@algolia/requester-common" "4.24.0"
+ "@algolia/transporter" "4.24.0"
+
+"@algolia/client-personalization@4.24.0":
+ version "4.24.0"
+ resolved "https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-4.24.0.tgz#8b47789fb1cb0f8efbea0f79295b7c5a3850f6ae"
+ integrity sha512-l5FRFm/yngztweU0HdUzz1rC4yoWCFo3IF+dVIVTfEPg906eZg5BOd1k0K6rZx5JzyyoP4LdmOikfkfGsKVE9w==
+ dependencies:
+ "@algolia/client-common" "4.24.0"
+ "@algolia/requester-common" "4.24.0"
+ "@algolia/transporter" "4.24.0"
+
+"@algolia/client-search@4.24.0":
+ version "4.24.0"
+ resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-4.24.0.tgz#75e6c02d33ef3e0f34afd9962c085b856fc4a55f"
+ integrity sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA==
+ dependencies:
+ "@algolia/client-common" "4.24.0"
+ "@algolia/requester-common" "4.24.0"
+ "@algolia/transporter" "4.24.0"
+
+"@algolia/events@^4.0.1":
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/@algolia/events/-/events-4.0.1.tgz#fd39e7477e7bc703d7f893b556f676c032af3950"
+ integrity sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==
+
+"@algolia/logger-common@4.24.0":
+ version "4.24.0"
+ resolved "https://registry.yarnpkg.com/@algolia/logger-common/-/logger-common-4.24.0.tgz#28d439976019ec0a46ba7a1a739ef493d4ef8123"
+ integrity sha512-LLUNjkahj9KtKYrQhFKCzMx0BY3RnNP4FEtO+sBybCjJ73E8jNdaKJ/Dd8A/VA4imVHP5tADZ8pn5B8Ga/wTMA==
+
+"@algolia/logger-console@4.24.0":
+ version "4.24.0"
+ resolved "https://registry.yarnpkg.com/@algolia/logger-console/-/logger-console-4.24.0.tgz#c6ff486036cd90b81d07a95aaba04461da7e1c65"
+ integrity sha512-X4C8IoHgHfiUROfoRCV+lzSy+LHMgkoEEU1BbKcsfnV0i0S20zyy0NLww9dwVHUWNfPPxdMU+/wKmLGYf96yTg==
+ dependencies:
+ "@algolia/logger-common" "4.24.0"
+
+"@algolia/recommend@4.24.0":
+ version "4.24.0"
+ resolved "https://registry.yarnpkg.com/@algolia/recommend/-/recommend-4.24.0.tgz#8a3f78aea471ee0a4836b78fd2aad4e9abcaaf34"
+ integrity sha512-P9kcgerfVBpfYHDfVZDvvdJv0lEoCvzNlOy2nykyt5bK8TyieYyiD0lguIJdRZZYGre03WIAFf14pgE+V+IBlw==
+ dependencies:
+ "@algolia/cache-browser-local-storage" "4.24.0"
+ "@algolia/cache-common" "4.24.0"
+ "@algolia/cache-in-memory" "4.24.0"
+ "@algolia/client-common" "4.24.0"
+ "@algolia/client-search" "4.24.0"
+ "@algolia/logger-common" "4.24.0"
+ "@algolia/logger-console" "4.24.0"
+ "@algolia/requester-browser-xhr" "4.24.0"
+ "@algolia/requester-common" "4.24.0"
+ "@algolia/requester-node-http" "4.24.0"
+ "@algolia/transporter" "4.24.0"
+
+"@algolia/requester-browser-xhr@4.24.0":
+ version "4.24.0"
+ resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.24.0.tgz#313c5edab4ed73a052e75803855833b62dd19c16"
+ integrity sha512-Z2NxZMb6+nVXSjF13YpjYTdvV3032YTBSGm2vnYvYPA6mMxzM3v5rsCiSspndn9rzIW4Qp1lPHBvuoKJV6jnAA==
+ dependencies:
+ "@algolia/requester-common" "4.24.0"
+
+"@algolia/requester-common@4.24.0":
+ version "4.24.0"
+ resolved "https://registry.yarnpkg.com/@algolia/requester-common/-/requester-common-4.24.0.tgz#1c60c198031f48fcdb9e34c4057a3ea987b9a436"
+ integrity sha512-k3CXJ2OVnvgE3HMwcojpvY6d9kgKMPRxs/kVohrwF5WMr2fnqojnycZkxPoEg+bXm8fi5BBfFmOqgYztRtHsQA==
+
+"@algolia/requester-node-http@4.24.0":
+ version "4.24.0"
+ resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-4.24.0.tgz#4461593714031d02aa7da221c49df675212f482f"
+ integrity sha512-JF18yTjNOVYvU/L3UosRcvbPMGT9B+/GQWNWnenIImglzNVGpyzChkXLnrSf6uxwVNO6ESGu6oN8MqcGQcjQJw==
+ dependencies:
+ "@algolia/requester-common" "4.24.0"
+
+"@algolia/transporter@4.24.0":
+ version "4.24.0"
+ resolved "https://registry.yarnpkg.com/@algolia/transporter/-/transporter-4.24.0.tgz#226bb1f8af62430374c1972b2e5c8580ab275102"
+ integrity sha512-86nI7w6NzWxd1Zp9q3413dRshDqAzSbsQjhcDhPIatEFiZrL1/TjnHL8S7jVKFePlIMzDsZWXAXwXzcok9c5oA==
+ dependencies:
+ "@algolia/cache-common" "4.24.0"
+ "@algolia/logger-common" "4.24.0"
+ "@algolia/requester-common" "4.24.0"
+
+"@ampproject/remapping@^2.2.0":
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4"
+ integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==
+ dependencies:
+ "@jridgewell/gen-mapping" "^0.3.5"
+ "@jridgewell/trace-mapping" "^0.3.24"
+
+"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.24.7", "@babel/code-frame@^7.8.3":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.7.tgz#882fd9e09e8ee324e496bd040401c6f046ef4465"
+ integrity sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==
+ dependencies:
+ "@babel/highlight" "^7.24.7"
+ picocolors "^1.0.0"
+
+"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.24.7.tgz#d23bbea508c3883ba8251fb4164982c36ea577ed"
+ integrity sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==
+
+"@babel/core@^7.21.3", "@babel/core@^7.23.3":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.7.tgz#b676450141e0b52a3d43bc91da86aa608f950ac4"
+ integrity sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==
+ dependencies:
+ "@ampproject/remapping" "^2.2.0"
+ "@babel/code-frame" "^7.24.7"
+ "@babel/generator" "^7.24.7"
+ "@babel/helper-compilation-targets" "^7.24.7"
+ "@babel/helper-module-transforms" "^7.24.7"
+ "@babel/helpers" "^7.24.7"
+ "@babel/parser" "^7.24.7"
+ "@babel/template" "^7.24.7"
+ "@babel/traverse" "^7.24.7"
+ "@babel/types" "^7.24.7"
+ convert-source-map "^2.0.0"
+ debug "^4.1.0"
+ gensync "^1.0.0-beta.2"
+ json5 "^2.2.3"
+ semver "^6.3.1"
+
+"@babel/generator@^7.23.3", "@babel/generator@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.7.tgz#1654d01de20ad66b4b4d99c135471bc654c55e6d"
+ integrity sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==
+ dependencies:
+ "@babel/types" "^7.24.7"
+ "@jridgewell/gen-mapping" "^0.3.5"
+ "@jridgewell/trace-mapping" "^0.3.25"
+ jsesc "^2.5.1"
+
+"@babel/helper-annotate-as-pure@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz#5373c7bc8366b12a033b4be1ac13a206c6656aab"
+ integrity sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==
+ dependencies:
+ "@babel/types" "^7.24.7"
+
+"@babel/helper-builder-binary-assignment-operator-visitor@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz#37d66feb012024f2422b762b9b2a7cfe27c7fba3"
+ integrity sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==
+ dependencies:
+ "@babel/traverse" "^7.24.7"
+ "@babel/types" "^7.24.7"
+
+"@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.7.tgz#4eb6c4a80d6ffeac25ab8cd9a21b5dfa48d503a9"
+ integrity sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==
+ dependencies:
+ "@babel/compat-data" "^7.24.7"
+ "@babel/helper-validator-option" "^7.24.7"
+ browserslist "^4.22.2"
+ lru-cache "^5.1.1"
+ semver "^6.3.1"
+
+"@babel/helper-create-class-features-plugin@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.7.tgz#2eaed36b3a1c11c53bdf80d53838b293c52f5b3b"
+ integrity sha512-kTkaDl7c9vO80zeX1rJxnuRpEsD5tA81yh11X1gQo+PhSti3JS+7qeZo9U4RHobKRiFPKaGK3svUAeb8D0Q7eg==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.24.7"
+ "@babel/helper-environment-visitor" "^7.24.7"
+ "@babel/helper-function-name" "^7.24.7"
+ "@babel/helper-member-expression-to-functions" "^7.24.7"
+ "@babel/helper-optimise-call-expression" "^7.24.7"
+ "@babel/helper-replace-supers" "^7.24.7"
+ "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7"
+ "@babel/helper-split-export-declaration" "^7.24.7"
+ semver "^6.3.1"
+
+"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.24.7.tgz#be4f435a80dc2b053c76eeb4b7d16dd22cfc89da"
+ integrity sha512-03TCmXy2FtXJEZfbXDTSqq1fRJArk7lX9DOFC/47VthYcxyIOx+eXQmdo6DOQvrbpIix+KfXwvuXdFDZHxt+rA==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.24.7"
+ regexpu-core "^5.3.1"
+ semver "^6.3.1"
+
+"@babel/helper-define-polyfill-provider@^0.6.1", "@babel/helper-define-polyfill-provider@^0.6.2":
+ version "0.6.2"
+ resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz#18594f789c3594acb24cfdb4a7f7b7d2e8bd912d"
+ integrity sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==
+ dependencies:
+ "@babel/helper-compilation-targets" "^7.22.6"
+ "@babel/helper-plugin-utils" "^7.22.5"
+ debug "^4.1.1"
+ lodash.debounce "^4.0.8"
+ resolve "^1.14.2"
+
+"@babel/helper-environment-visitor@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz#4b31ba9551d1f90781ba83491dd59cf9b269f7d9"
+ integrity sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==
+ dependencies:
+ "@babel/types" "^7.24.7"
+
+"@babel/helper-function-name@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz#75f1e1725742f39ac6584ee0b16d94513da38dd2"
+ integrity sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==
+ dependencies:
+ "@babel/template" "^7.24.7"
+ "@babel/types" "^7.24.7"
+
+"@babel/helper-hoist-variables@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz#b4ede1cde2fd89436397f30dc9376ee06b0f25ee"
+ integrity sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==
+ dependencies:
+ "@babel/types" "^7.24.7"
+
+"@babel/helper-member-expression-to-functions@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.7.tgz#67613d068615a70e4ed5101099affc7a41c5225f"
+ integrity sha512-LGeMaf5JN4hAT471eJdBs/GK1DoYIJ5GCtZN/EsL6KUiiDZOvO/eKE11AMZJa2zP4zk4qe9V2O/hxAmkRc8p6w==
+ dependencies:
+ "@babel/traverse" "^7.24.7"
+ "@babel/types" "^7.24.7"
+
+"@babel/helper-module-imports@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz#f2f980392de5b84c3328fc71d38bd81bbb83042b"
+ integrity sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==
+ dependencies:
+ "@babel/traverse" "^7.24.7"
+ "@babel/types" "^7.24.7"
+
+"@babel/helper-module-transforms@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.24.7.tgz#31b6c9a2930679498db65b685b1698bfd6c7daf8"
+ integrity sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==
+ dependencies:
+ "@babel/helper-environment-visitor" "^7.24.7"
+ "@babel/helper-module-imports" "^7.24.7"
+ "@babel/helper-simple-access" "^7.24.7"
+ "@babel/helper-split-export-declaration" "^7.24.7"
+ "@babel/helper-validator-identifier" "^7.24.7"
+
+"@babel/helper-optimise-call-expression@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz#8b0a0456c92f6b323d27cfd00d1d664e76692a0f"
+ integrity sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==
+ dependencies:
+ "@babel/types" "^7.24.7"
+
+"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.24.7", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.7.tgz#98c84fe6fe3d0d3ae7bfc3a5e166a46844feb2a0"
+ integrity sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==
+
+"@babel/helper-remap-async-to-generator@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.24.7.tgz#b3f0f203628522713849d49403f1a414468be4c7"
+ integrity sha512-9pKLcTlZ92hNZMQfGCHImUpDOlAgkkpqalWEeftW5FBya75k8Li2ilerxkM/uBEj01iBZXcCIB/bwvDYgWyibA==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.24.7"
+ "@babel/helper-environment-visitor" "^7.24.7"
+ "@babel/helper-wrap-function" "^7.24.7"
+
+"@babel/helper-replace-supers@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.24.7.tgz#f933b7eed81a1c0265740edc91491ce51250f765"
+ integrity sha512-qTAxxBM81VEyoAY0TtLrx1oAEJc09ZK67Q9ljQToqCnA+55eNwCORaxlKyu+rNfX86o8OXRUSNUnrtsAZXM9sg==
+ dependencies:
+ "@babel/helper-environment-visitor" "^7.24.7"
+ "@babel/helper-member-expression-to-functions" "^7.24.7"
+ "@babel/helper-optimise-call-expression" "^7.24.7"
+
+"@babel/helper-simple-access@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz#bcade8da3aec8ed16b9c4953b74e506b51b5edb3"
+ integrity sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==
+ dependencies:
+ "@babel/traverse" "^7.24.7"
+ "@babel/types" "^7.24.7"
+
+"@babel/helper-skip-transparent-expression-wrappers@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz#5f8fa83b69ed5c27adc56044f8be2b3ea96669d9"
+ integrity sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==
+ dependencies:
+ "@babel/traverse" "^7.24.7"
+ "@babel/types" "^7.24.7"
+
+"@babel/helper-split-export-declaration@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz#83949436890e07fa3d6873c61a96e3bbf692d856"
+ integrity sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==
+ dependencies:
+ "@babel/types" "^7.24.7"
+
+"@babel/helper-string-parser@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz#4d2d0f14820ede3b9807ea5fc36dfc8cd7da07f2"
+ integrity sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==
+
+"@babel/helper-validator-identifier@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz#75b889cfaf9e35c2aaf42cf0d72c8e91719251db"
+ integrity sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==
+
+"@babel/helper-validator-option@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz#24c3bb77c7a425d1742eec8fb433b5a1b38e62f6"
+ integrity sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==
+
+"@babel/helper-wrap-function@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.24.7.tgz#52d893af7e42edca7c6d2c6764549826336aae1f"
+ integrity sha512-N9JIYk3TD+1vq/wn77YnJOqMtfWhNewNE+DJV4puD2X7Ew9J4JvrzrFDfTfyv5EgEXVy9/Wt8QiOErzEmv5Ifw==
+ dependencies:
+ "@babel/helper-function-name" "^7.24.7"
+ "@babel/template" "^7.24.7"
+ "@babel/traverse" "^7.24.7"
+ "@babel/types" "^7.24.7"
+
+"@babel/helpers@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.7.tgz#aa2ccda29f62185acb5d42fb4a3a1b1082107416"
+ integrity sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==
+ dependencies:
+ "@babel/template" "^7.24.7"
+ "@babel/types" "^7.24.7"
+
+"@babel/highlight@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.7.tgz#a05ab1df134b286558aae0ed41e6c5f731bf409d"
+ integrity sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.24.7"
+ chalk "^2.4.2"
+ js-tokens "^4.0.0"
+ picocolors "^1.0.0"
+
+"@babel/parser@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.7.tgz#9a5226f92f0c5c8ead550b750f5608e766c8ce85"
+ integrity sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==
+
+"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.7.tgz#fd059fd27b184ea2b4c7e646868a9a381bbc3055"
+ integrity sha512-TiT1ss81W80eQsN+722OaeQMY/G4yTb4G9JrqeiDADs3N8lbPMGldWi9x8tyqCW5NLx1Jh2AvkE6r6QvEltMMQ==
+ dependencies:
+ "@babel/helper-environment-visitor" "^7.24.7"
+ "@babel/helper-plugin-utils" "^7.24.7"
+
+"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.7.tgz#468096ca44bbcbe8fcc570574e12eb1950e18107"
+ integrity sha512-unaQgZ/iRu/By6tsjMZzpeBZjChYfLYry6HrEXPoz3KmfF0sVBQ1l8zKMQ4xRGLWVsjuvB8nQfjNP/DcfEOCsg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.24.7"
+
+"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz#e4eabdd5109acc399b38d7999b2ef66fc2022f89"
+ integrity sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.24.7"
+ "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7"
+ "@babel/plugin-transform-optional-chaining" "^7.24.7"
+
+"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.7.tgz#71b21bb0286d5810e63a1538aa901c58e87375ec"
+ integrity sha512-utA4HuR6F4Vvcr+o4DnjL8fCOlgRFGbeeBEGNg3ZTrLFw6VWG5XmUrvcQ0FjIYMU2ST4XcR2Wsp7t9qOAPnxMg==
+ dependencies:
+ "@babel/helper-environment-visitor" "^7.24.7"
+ "@babel/helper-plugin-utils" "^7.24.7"
+
+"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2":
+ version "7.21.0-placeholder-for-preset-env.2"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703"
+ integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==
+
+"@babel/plugin-syntax-async-generators@^7.8.4":
+ version "7.8.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d"
+ integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-class-properties@^7.12.13":
+ version "7.12.13"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10"
+ integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.12.13"
+
+"@babel/plugin-syntax-class-static-block@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406"
+ integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-syntax-dynamic-import@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3"
+ integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-export-namespace-from@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a"
+ integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-syntax-import-assertions@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.7.tgz#2a0b406b5871a20a841240586b1300ce2088a778"
+ integrity sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.24.7"
+
+"@babel/plugin-syntax-import-attributes@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz#b4f9ea95a79e6912480c4b626739f86a076624ca"
+ integrity sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.24.7"
+
+"@babel/plugin-syntax-import-meta@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51"
+ integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-syntax-json-strings@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a"
+ integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-jsx@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz#39a1fa4a7e3d3d7f34e2acc6be585b718d30e02d"
+ integrity sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.24.7"
+
+"@babel/plugin-syntax-logical-assignment-operators@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699"
+ integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9"
+ integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-numeric-separator@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97"
+ integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-syntax-object-rest-spread@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871"
+ integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-optional-catch-binding@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1"
+ integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-optional-chaining@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a"
+ integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-private-property-in-object@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad"
+ integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-syntax-top-level-await@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c"
+ integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-syntax-typescript@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz#58d458271b4d3b6bb27ee6ac9525acbb259bad1c"
+ integrity sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.24.7"
+
+"@babel/plugin-syntax-unicode-sets-regex@^7.18.6":
+ version "7.18.6"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357"
+ integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.18.6"
+ "@babel/helper-plugin-utils" "^7.18.6"
+
+"@babel/plugin-transform-arrow-functions@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz#4f6886c11e423bd69f3ce51dbf42424a5f275514"
+ integrity sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.24.7"
+
+"@babel/plugin-transform-async-generator-functions@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.7.tgz#7330a5c50e05181ca52351b8fd01642000c96cfd"
+ integrity sha512-o+iF77e3u7ZS4AoAuJvapz9Fm001PuD2V3Lp6OSE4FYQke+cSewYtnek+THqGRWyQloRCyvWL1OkyfNEl9vr/g==
+ dependencies:
+ "@babel/helper-environment-visitor" "^7.24.7"
+ "@babel/helper-plugin-utils" "^7.24.7"
+ "@babel/helper-remap-async-to-generator" "^7.24.7"
+ "@babel/plugin-syntax-async-generators" "^7.8.4"
+
+"@babel/plugin-transform-async-to-generator@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz#72a3af6c451d575842a7e9b5a02863414355bdcc"
+ integrity sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==
+ dependencies:
+ "@babel/helper-module-imports" "^7.24.7"
+ "@babel/helper-plugin-utils" "^7.24.7"
+ "@babel/helper-remap-async-to-generator" "^7.24.7"
+
+"@babel/plugin-transform-block-scoped-functions@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz#a4251d98ea0c0f399dafe1a35801eaba455bbf1f"
+ integrity sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.24.7"
+
+"@babel/plugin-transform-block-scoping@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.7.tgz#42063e4deb850c7bd7c55e626bf4e7ab48e6ce02"
+ integrity sha512-Nd5CvgMbWc+oWzBsuaMcbwjJWAcp5qzrbg69SZdHSP7AMY0AbWFqFO0WTFCA1jxhMCwodRwvRec8k0QUbZk7RQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.24.7"
+
+"@babel/plugin-transform-class-properties@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz#256879467b57b0b68c7ddfc5b76584f398cd6834"
+ integrity sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==
+ dependencies:
+ "@babel/helper-create-class-features-plugin" "^7.24.7"
+ "@babel/helper-plugin-utils" "^7.24.7"
+
+"@babel/plugin-transform-class-static-block@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz#c82027ebb7010bc33c116d4b5044fbbf8c05484d"
+ integrity sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==
+ dependencies:
+ "@babel/helper-create-class-features-plugin" "^7.24.7"
+ "@babel/helper-plugin-utils" "^7.24.7"
+ "@babel/plugin-syntax-class-static-block" "^7.14.5"
+
+"@babel/plugin-transform-classes@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.7.tgz#4ae6ef43a12492134138c1e45913f7c46c41b4bf"
+ integrity sha512-CFbbBigp8ln4FU6Bpy6g7sE8B/WmCmzvivzUC6xDAdWVsjYTXijpuuGJmYkAaoWAzcItGKT3IOAbxRItZ5HTjw==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.24.7"
+ "@babel/helper-compilation-targets" "^7.24.7"
+ "@babel/helper-environment-visitor" "^7.24.7"
+ "@babel/helper-function-name" "^7.24.7"
+ "@babel/helper-plugin-utils" "^7.24.7"
+ "@babel/helper-replace-supers" "^7.24.7"
+ "@babel/helper-split-export-declaration" "^7.24.7"
+ globals "^11.1.0"
+
+"@babel/plugin-transform-computed-properties@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz#4cab3214e80bc71fae3853238d13d097b004c707"
+ integrity sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.24.7"
+ "@babel/template" "^7.24.7"
+
+"@babel/plugin-transform-destructuring@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.7.tgz#a097f25292defb6e6cc16d6333a4cfc1e3c72d9e"
+ integrity sha512-19eJO/8kdCQ9zISOf+SEUJM/bAUIsvY3YDnXZTupUCQ8LgrWnsG/gFB9dvXqdXnRXMAM8fvt7b0CBKQHNGy1mw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.24.7"
+
+"@babel/plugin-transform-dotall-regex@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz#5f8bf8a680f2116a7207e16288a5f974ad47a7a0"
+ integrity sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.24.7"
+ "@babel/helper-plugin-utils" "^7.24.7"
+
+"@babel/plugin-transform-duplicate-keys@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz#dd20102897c9a2324e5adfffb67ff3610359a8ee"
+ integrity sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.24.7"
+
+"@babel/plugin-transform-dynamic-import@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz#4d8b95e3bae2b037673091aa09cd33fecd6419f4"
+ integrity sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.24.7"
+ "@babel/plugin-syntax-dynamic-import" "^7.8.3"
+
+"@babel/plugin-transform-exponentiation-operator@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz#b629ee22645f412024297d5245bce425c31f9b0d"
+ integrity sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==
+ dependencies:
+ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.24.7"
+ "@babel/helper-plugin-utils" "^7.24.7"
+
+"@babel/plugin-transform-export-namespace-from@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz#176d52d8d8ed516aeae7013ee9556d540c53f197"
+ integrity sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.24.7"
+ "@babel/plugin-syntax-export-namespace-from" "^7.8.3"
+
+"@babel/plugin-transform-for-of@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz#f25b33f72df1d8be76399e1b8f3f9d366eb5bc70"
+ integrity sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.24.7"
+ "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7"
+
+"@babel/plugin-transform-function-name@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.7.tgz#6d8601fbffe665c894440ab4470bc721dd9131d6"
+ integrity sha512-U9FcnA821YoILngSmYkW6FjyQe2TyZD5pHt4EVIhmcTkrJw/3KqcrRSxuOo5tFZJi7TE19iDyI1u+weTI7bn2w==
+ dependencies:
+ "@babel/helper-compilation-targets" "^7.24.7"
+ "@babel/helper-function-name" "^7.24.7"
+ "@babel/helper-plugin-utils" "^7.24.7"
+
+"@babel/plugin-transform-json-strings@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz#f3e9c37c0a373fee86e36880d45b3664cedaf73a"
+ integrity sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.24.7"
+ "@babel/plugin-syntax-json-strings" "^7.8.3"
+
+"@babel/plugin-transform-literals@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.7.tgz#36b505c1e655151a9d7607799a9988fc5467d06c"
+ integrity sha512-vcwCbb4HDH+hWi8Pqenwnjy+UiklO4Kt1vfspcQYFhJdpthSnW8XvWGyDZWKNVrVbVViI/S7K9PDJZiUmP2fYQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.24.7"
+
+"@babel/plugin-transform-logical-assignment-operators@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz#a58fb6eda16c9dc8f9ff1c7b1ba6deb7f4694cb0"
+ integrity sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.24.7"
+ "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
+
+"@babel/plugin-transform-member-expression-literals@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz#3b4454fb0e302e18ba4945ba3246acb1248315df"
+ integrity sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.24.7"
+
+"@babel/plugin-transform-modules-amd@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz#65090ed493c4a834976a3ca1cde776e6ccff32d7"
+ integrity sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==
+ dependencies:
+ "@babel/helper-module-transforms" "^7.24.7"
+ "@babel/helper-plugin-utils" "^7.24.7"
+
+"@babel/plugin-transform-modules-commonjs@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.7.tgz#9fd5f7fdadee9085886b183f1ad13d1ab260f4ab"
+ integrity sha512-iFI8GDxtevHJ/Z22J5xQpVqFLlMNstcLXh994xifFwxxGslr2ZXXLWgtBeLctOD63UFDArdvN6Tg8RFw+aEmjQ==
+ dependencies:
+ "@babel/helper-module-transforms" "^7.24.7"
+ "@babel/helper-plugin-utils" "^7.24.7"
+ "@babel/helper-simple-access" "^7.24.7"
+
+"@babel/plugin-transform-modules-systemjs@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.7.tgz#f8012316c5098f6e8dee6ecd58e2bc6f003d0ce7"
+ integrity sha512-GYQE0tW7YoaN13qFh3O1NCY4MPkUiAH3fiF7UcV/I3ajmDKEdG3l+UOcbAm4zUE3gnvUU+Eni7XrVKo9eO9auw==
+ dependencies:
+ "@babel/helper-hoist-variables" "^7.24.7"
+ "@babel/helper-module-transforms" "^7.24.7"
+ "@babel/helper-plugin-utils" "^7.24.7"
+ "@babel/helper-validator-identifier" "^7.24.7"
+
+"@babel/plugin-transform-modules-umd@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz#edd9f43ec549099620df7df24e7ba13b5c76efc8"
+ integrity sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==
+ dependencies:
+ "@babel/helper-module-transforms" "^7.24.7"
+ "@babel/helper-plugin-utils" "^7.24.7"
+
+"@babel/plugin-transform-named-capturing-groups-regex@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz#9042e9b856bc6b3688c0c2e4060e9e10b1460923"
+ integrity sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.24.7"
+ "@babel/helper-plugin-utils" "^7.24.7"
+
+"@babel/plugin-transform-new-target@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz#31ff54c4e0555cc549d5816e4ab39241dfb6ab00"
+ integrity sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.24.7"
+
+"@babel/plugin-transform-nullish-coalescing-operator@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz#1de4534c590af9596f53d67f52a92f12db984120"
+ integrity sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.24.7"
+ "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
+
+"@babel/plugin-transform-numeric-separator@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz#bea62b538c80605d8a0fac9b40f48e97efa7de63"
+ integrity sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.24.7"
+ "@babel/plugin-syntax-numeric-separator" "^7.10.4"
+
+"@babel/plugin-transform-object-rest-spread@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz#d13a2b93435aeb8a197e115221cab266ba6e55d6"
+ integrity sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==
+ dependencies:
+ "@babel/helper-compilation-targets" "^7.24.7"
+ "@babel/helper-plugin-utils" "^7.24.7"
+ "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
+ "@babel/plugin-transform-parameters" "^7.24.7"
+
+"@babel/plugin-transform-object-super@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz#66eeaff7830bba945dd8989b632a40c04ed625be"
+ integrity sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.24.7"
+ "@babel/helper-replace-supers" "^7.24.7"
+
+"@babel/plugin-transform-optional-catch-binding@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz#00eabd883d0dd6a60c1c557548785919b6e717b4"
+ integrity sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.24.7"
+ "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
+
+"@babel/plugin-transform-optional-chaining@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.7.tgz#b8f6848a80cf2da98a8a204429bec04756c6d454"
+ integrity sha512-tK+0N9yd4j+x/4hxF3F0e0fu/VdcxU18y5SevtyM/PCFlQvXbR0Zmlo2eBrKtVipGNFzpq56o8WsIIKcJFUCRQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.24.7"
+ "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7"
+ "@babel/plugin-syntax-optional-chaining" "^7.8.3"
+
+"@babel/plugin-transform-parameters@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz#5881f0ae21018400e320fc7eb817e529d1254b68"
+ integrity sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.24.7"
+
+"@babel/plugin-transform-private-methods@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz#e6318746b2ae70a59d023d5cc1344a2ba7a75f5e"
+ integrity sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==
+ dependencies:
+ "@babel/helper-create-class-features-plugin" "^7.24.7"
+ "@babel/helper-plugin-utils" "^7.24.7"
+
+"@babel/plugin-transform-private-property-in-object@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz#4eec6bc701288c1fab5f72e6a4bbc9d67faca061"
+ integrity sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.24.7"
+ "@babel/helper-create-class-features-plugin" "^7.24.7"
+ "@babel/helper-plugin-utils" "^7.24.7"
+ "@babel/plugin-syntax-private-property-in-object" "^7.14.5"
+
+"@babel/plugin-transform-property-literals@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz#f0d2ed8380dfbed949c42d4d790266525d63bbdc"
+ integrity sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.24.7"
+
+"@babel/plugin-transform-react-constant-elements@^7.21.3":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.24.7.tgz#b85e8f240b14400277f106c9c9b585d9acf608a1"
+ integrity sha512-7LidzZfUXyfZ8/buRW6qIIHBY8wAZ1OrY9c/wTr8YhZ6vMPo+Uc/CVFLYY1spZrEQlD4w5u8wjqk5NQ3OVqQKA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.24.7"
+
+"@babel/plugin-transform-react-display-name@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.7.tgz#9caff79836803bc666bcfe210aeb6626230c293b"
+ integrity sha512-H/Snz9PFxKsS1JLI4dJLtnJgCJRoo0AUm3chP6NYr+9En1JMKloheEiLIhlp5MDVznWo+H3AAC1Mc8lmUEpsgg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.24.7"
+
+"@babel/plugin-transform-react-jsx-development@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.24.7.tgz#eaee12f15a93f6496d852509a850085e6361470b"
+ integrity sha512-QG9EnzoGn+Qar7rxuW+ZOsbWOt56FvvI93xInqsZDC5fsekx1AlIO4KIJ5M+D0p0SqSH156EpmZyXq630B8OlQ==
+ dependencies:
+ "@babel/plugin-transform-react-jsx" "^7.24.7"
+
+"@babel/plugin-transform-react-jsx@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.24.7.tgz#17cd06b75a9f0e2bd076503400e7c4b99beedac4"
+ integrity sha512-+Dj06GDZEFRYvclU6k4bme55GKBEWUmByM/eoKuqg4zTNQHiApWRhQph5fxQB2wAEFvRzL1tOEj1RJ19wJrhoA==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.24.7"
+ "@babel/helper-module-imports" "^7.24.7"
+ "@babel/helper-plugin-utils" "^7.24.7"
+ "@babel/plugin-syntax-jsx" "^7.24.7"
+ "@babel/types" "^7.24.7"
+
+"@babel/plugin-transform-react-pure-annotations@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.7.tgz#bdd9d140d1c318b4f28b29a00fb94f97ecab1595"
+ integrity sha512-PLgBVk3fzbmEjBJ/u8kFzOqS9tUeDjiaWud/rRym/yjCo/M9cASPlnrd2ZmmZpQT40fOOrvR8jh+n8jikrOhNA==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.24.7"
+ "@babel/helper-plugin-utils" "^7.24.7"
+
+"@babel/plugin-transform-regenerator@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz#021562de4534d8b4b1851759fd7af4e05d2c47f8"
+ integrity sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.24.7"
+ regenerator-transform "^0.15.2"
+
+"@babel/plugin-transform-reserved-words@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz#80037fe4fbf031fc1125022178ff3938bb3743a4"
+ integrity sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.24.7"
+
+"@babel/plugin-transform-runtime@^7.22.9":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.7.tgz#00a5bfaf8c43cf5c8703a8a6e82b59d9c58f38ca"
+ integrity sha512-YqXjrk4C+a1kZjewqt+Mmu2UuV1s07y8kqcUf4qYLnoqemhR4gRQikhdAhSVJioMjVTu6Mo6pAbaypEA3jY6fw==
+ dependencies:
+ "@babel/helper-module-imports" "^7.24.7"
+ "@babel/helper-plugin-utils" "^7.24.7"
+ babel-plugin-polyfill-corejs2 "^0.4.10"
+ babel-plugin-polyfill-corejs3 "^0.10.1"
+ babel-plugin-polyfill-regenerator "^0.6.1"
+ semver "^6.3.1"
+
+"@babel/plugin-transform-shorthand-properties@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz#85448c6b996e122fa9e289746140aaa99da64e73"
+ integrity sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.24.7"
+
+"@babel/plugin-transform-spread@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz#e8a38c0fde7882e0fb8f160378f74bd885cc7bb3"
+ integrity sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.24.7"
+ "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7"
+
+"@babel/plugin-transform-sticky-regex@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz#96ae80d7a7e5251f657b5cf18f1ea6bf926f5feb"
+ integrity sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.24.7"
+
+"@babel/plugin-transform-template-literals@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz#a05debb4a9072ae8f985bcf77f3f215434c8f8c8"
+ integrity sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.24.7"
+
+"@babel/plugin-transform-typeof-symbol@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.7.tgz#f074be466580d47d6e6b27473a840c9f9ca08fb0"
+ integrity sha512-VtR8hDy7YLB7+Pet9IarXjg/zgCMSF+1mNS/EQEiEaUPoFXCVsHG64SIxcaaI2zJgRiv+YmgaQESUfWAdbjzgg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.24.7"
+
+"@babel/plugin-transform-typescript@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.7.tgz#b006b3e0094bf0813d505e0c5485679eeaf4a881"
+ integrity sha512-iLD3UNkgx2n/HrjBesVbYX6j0yqn/sJktvbtKKgcaLIQ4bTTQ8obAypc1VpyHPD2y4Phh9zHOaAt8e/L14wCpw==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.24.7"
+ "@babel/helper-create-class-features-plugin" "^7.24.7"
+ "@babel/helper-plugin-utils" "^7.24.7"
+ "@babel/plugin-syntax-typescript" "^7.24.7"
+
+"@babel/plugin-transform-unicode-escapes@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz#2023a82ced1fb4971630a2e079764502c4148e0e"
+ integrity sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.24.7"
+
+"@babel/plugin-transform-unicode-property-regex@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz#9073a4cd13b86ea71c3264659590ac086605bbcd"
+ integrity sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.24.7"
+ "@babel/helper-plugin-utils" "^7.24.7"
+
+"@babel/plugin-transform-unicode-regex@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz#dfc3d4a51127108099b19817c0963be6a2adf19f"
+ integrity sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.24.7"
+ "@babel/helper-plugin-utils" "^7.24.7"
+
+"@babel/plugin-transform-unicode-sets-regex@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.7.tgz#d40705d67523803a576e29c63cef6e516b858ed9"
+ integrity sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.24.7"
+ "@babel/helper-plugin-utils" "^7.24.7"
+
+"@babel/preset-env@^7.20.2", "@babel/preset-env@^7.22.9":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.24.7.tgz#ff067b4e30ba4a72f225f12f123173e77b987f37"
+ integrity sha512-1YZNsc+y6cTvWlDHidMBsQZrZfEFjRIo/BZCT906PMdzOyXtSLTgqGdrpcuTDCXyd11Am5uQULtDIcCfnTc8fQ==
+ dependencies:
+ "@babel/compat-data" "^7.24.7"
+ "@babel/helper-compilation-targets" "^7.24.7"
+ "@babel/helper-plugin-utils" "^7.24.7"
+ "@babel/helper-validator-option" "^7.24.7"
+ "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.24.7"
+ "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.24.7"
+ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.24.7"
+ "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.24.7"
+ "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2"
+ "@babel/plugin-syntax-async-generators" "^7.8.4"
+ "@babel/plugin-syntax-class-properties" "^7.12.13"
+ "@babel/plugin-syntax-class-static-block" "^7.14.5"
+ "@babel/plugin-syntax-dynamic-import" "^7.8.3"
+ "@babel/plugin-syntax-export-namespace-from" "^7.8.3"
+ "@babel/plugin-syntax-import-assertions" "^7.24.7"
+ "@babel/plugin-syntax-import-attributes" "^7.24.7"
+ "@babel/plugin-syntax-import-meta" "^7.10.4"
+ "@babel/plugin-syntax-json-strings" "^7.8.3"
+ "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
+ "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
+ "@babel/plugin-syntax-numeric-separator" "^7.10.4"
+ "@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-private-property-in-object" "^7.14.5"
+ "@babel/plugin-syntax-top-level-await" "^7.14.5"
+ "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6"
+ "@babel/plugin-transform-arrow-functions" "^7.24.7"
+ "@babel/plugin-transform-async-generator-functions" "^7.24.7"
+ "@babel/plugin-transform-async-to-generator" "^7.24.7"
+ "@babel/plugin-transform-block-scoped-functions" "^7.24.7"
+ "@babel/plugin-transform-block-scoping" "^7.24.7"
+ "@babel/plugin-transform-class-properties" "^7.24.7"
+ "@babel/plugin-transform-class-static-block" "^7.24.7"
+ "@babel/plugin-transform-classes" "^7.24.7"
+ "@babel/plugin-transform-computed-properties" "^7.24.7"
+ "@babel/plugin-transform-destructuring" "^7.24.7"
+ "@babel/plugin-transform-dotall-regex" "^7.24.7"
+ "@babel/plugin-transform-duplicate-keys" "^7.24.7"
+ "@babel/plugin-transform-dynamic-import" "^7.24.7"
+ "@babel/plugin-transform-exponentiation-operator" "^7.24.7"
+ "@babel/plugin-transform-export-namespace-from" "^7.24.7"
+ "@babel/plugin-transform-for-of" "^7.24.7"
+ "@babel/plugin-transform-function-name" "^7.24.7"
+ "@babel/plugin-transform-json-strings" "^7.24.7"
+ "@babel/plugin-transform-literals" "^7.24.7"
+ "@babel/plugin-transform-logical-assignment-operators" "^7.24.7"
+ "@babel/plugin-transform-member-expression-literals" "^7.24.7"
+ "@babel/plugin-transform-modules-amd" "^7.24.7"
+ "@babel/plugin-transform-modules-commonjs" "^7.24.7"
+ "@babel/plugin-transform-modules-systemjs" "^7.24.7"
+ "@babel/plugin-transform-modules-umd" "^7.24.7"
+ "@babel/plugin-transform-named-capturing-groups-regex" "^7.24.7"
+ "@babel/plugin-transform-new-target" "^7.24.7"
+ "@babel/plugin-transform-nullish-coalescing-operator" "^7.24.7"
+ "@babel/plugin-transform-numeric-separator" "^7.24.7"
+ "@babel/plugin-transform-object-rest-spread" "^7.24.7"
+ "@babel/plugin-transform-object-super" "^7.24.7"
+ "@babel/plugin-transform-optional-catch-binding" "^7.24.7"
+ "@babel/plugin-transform-optional-chaining" "^7.24.7"
+ "@babel/plugin-transform-parameters" "^7.24.7"
+ "@babel/plugin-transform-private-methods" "^7.24.7"
+ "@babel/plugin-transform-private-property-in-object" "^7.24.7"
+ "@babel/plugin-transform-property-literals" "^7.24.7"
+ "@babel/plugin-transform-regenerator" "^7.24.7"
+ "@babel/plugin-transform-reserved-words" "^7.24.7"
+ "@babel/plugin-transform-shorthand-properties" "^7.24.7"
+ "@babel/plugin-transform-spread" "^7.24.7"
+ "@babel/plugin-transform-sticky-regex" "^7.24.7"
+ "@babel/plugin-transform-template-literals" "^7.24.7"
+ "@babel/plugin-transform-typeof-symbol" "^7.24.7"
+ "@babel/plugin-transform-unicode-escapes" "^7.24.7"
+ "@babel/plugin-transform-unicode-property-regex" "^7.24.7"
+ "@babel/plugin-transform-unicode-regex" "^7.24.7"
+ "@babel/plugin-transform-unicode-sets-regex" "^7.24.7"
+ "@babel/preset-modules" "0.1.6-no-external-plugins"
+ babel-plugin-polyfill-corejs2 "^0.4.10"
+ babel-plugin-polyfill-corejs3 "^0.10.4"
+ babel-plugin-polyfill-regenerator "^0.6.1"
+ core-js-compat "^3.31.0"
+ semver "^6.3.1"
+
+"@babel/preset-modules@0.1.6-no-external-plugins":
+ version "0.1.6-no-external-plugins"
+ resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a"
+ integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/types" "^7.4.4"
+ esutils "^2.0.2"
+
+"@babel/preset-react@^7.18.6", "@babel/preset-react@^7.22.5":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.24.7.tgz#480aeb389b2a798880bf1f889199e3641cbb22dc"
+ integrity sha512-AAH4lEkpmzFWrGVlHaxJB7RLH21uPQ9+He+eFLWHmF9IuFQVugz8eAsamaW0DXRrTfco5zj1wWtpdcXJUOfsag==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.24.7"
+ "@babel/helper-validator-option" "^7.24.7"
+ "@babel/plugin-transform-react-display-name" "^7.24.7"
+ "@babel/plugin-transform-react-jsx" "^7.24.7"
+ "@babel/plugin-transform-react-jsx-development" "^7.24.7"
+ "@babel/plugin-transform-react-pure-annotations" "^7.24.7"
+
+"@babel/preset-typescript@^7.21.0", "@babel/preset-typescript@^7.22.5":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.24.7.tgz#66cd86ea8f8c014855671d5ea9a737139cbbfef1"
+ integrity sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.24.7"
+ "@babel/helper-validator-option" "^7.24.7"
+ "@babel/plugin-syntax-jsx" "^7.24.7"
+ "@babel/plugin-transform-modules-commonjs" "^7.24.7"
+ "@babel/plugin-transform-typescript" "^7.24.7"
+
+"@babel/regjsgen@^0.8.0":
+ version "0.8.0"
+ resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310"
+ integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==
+
+"@babel/runtime-corejs3@^7.22.6":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.24.7.tgz#65a99097e4c28e6c3a174825591700cc5abd710e"
+ integrity sha512-eytSX6JLBY6PVAeQa2bFlDx/7Mmln/gaEpsit5a3WEvjGfiIytEsgAwuIXCPM0xvw0v0cJn3ilq0/TvXrW0kgA==
+ dependencies:
+ core-js-pure "^3.30.2"
+ regenerator-runtime "^0.14.0"
+
+"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.22.6", "@babel/runtime@^7.8.4":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.7.tgz#f4f0d5530e8dbdf59b3451b9b3e594b6ba082e12"
+ integrity sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==
+ dependencies:
+ regenerator-runtime "^0.14.0"
+
+"@babel/template@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.7.tgz#02efcee317d0609d2c07117cb70ef8fb17ab7315"
+ integrity sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==
+ dependencies:
+ "@babel/code-frame" "^7.24.7"
+ "@babel/parser" "^7.24.7"
+ "@babel/types" "^7.24.7"
+
+"@babel/traverse@^7.22.8", "@babel/traverse@^7.24.7":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.7.tgz#de2b900163fa741721ba382163fe46a936c40cf5"
+ integrity sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==
+ dependencies:
+ "@babel/code-frame" "^7.24.7"
+ "@babel/generator" "^7.24.7"
+ "@babel/helper-environment-visitor" "^7.24.7"
+ "@babel/helper-function-name" "^7.24.7"
+ "@babel/helper-hoist-variables" "^7.24.7"
+ "@babel/helper-split-export-declaration" "^7.24.7"
+ "@babel/parser" "^7.24.7"
+ "@babel/types" "^7.24.7"
+ debug "^4.3.1"
+ globals "^11.1.0"
+
+"@babel/types@^7.21.3", "@babel/types@^7.24.7", "@babel/types@^7.4.4":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.7.tgz#6027fe12bc1aa724cd32ab113fb7f1988f1f66f2"
+ integrity sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==
+ dependencies:
+ "@babel/helper-string-parser" "^7.24.7"
+ "@babel/helper-validator-identifier" "^7.24.7"
+ to-fast-properties "^2.0.0"
+
+"@colors/colors@1.5.0":
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9"
+ integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==
+
+"@discoveryjs/json-ext@0.5.7":
+ version "0.5.7"
+ resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70"
+ integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==
+
+"@docsearch/css@3.6.0":
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-3.6.0.tgz#0e9f56f704b3a34d044d15fd9962ebc1536ba4fb"
+ integrity sha512-+sbxb71sWre+PwDK7X2T8+bhS6clcVMLwBPznX45Qu6opJcgRjAp7gYSDzVFp187J+feSj5dNBN1mJoi6ckkUQ==
+
+"@docsearch/react@^3.5.2":
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/@docsearch/react/-/react-3.6.0.tgz#b4f25228ecb7fc473741aefac592121e86dd2958"
+ integrity sha512-HUFut4ztcVNmqy9gp/wxNbC7pTOHhgVVkHVGCACTuLhUKUhKAF9KYHJtMiLUJxEqiFLQiuri1fWF8zqwM/cu1w==
+ dependencies:
+ "@algolia/autocomplete-core" "1.9.3"
+ "@algolia/autocomplete-preset-algolia" "1.9.3"
+ "@docsearch/css" "3.6.0"
+ algoliasearch "^4.19.1"
+
+"@docusaurus/core@3.4.0":
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-3.4.0.tgz#bdbf1af4b2f25d1bf4a5b62ec6137d84c821cb3c"
+ integrity sha512-g+0wwmN2UJsBqy2fQRQ6fhXruoEa62JDeEa5d8IdTJlMoaDaEDfHh7WjwGRn4opuTQWpjAwP/fbcgyHKlE+64w==
+ dependencies:
+ "@babel/core" "^7.23.3"
+ "@babel/generator" "^7.23.3"
+ "@babel/plugin-syntax-dynamic-import" "^7.8.3"
+ "@babel/plugin-transform-runtime" "^7.22.9"
+ "@babel/preset-env" "^7.22.9"
+ "@babel/preset-react" "^7.22.5"
+ "@babel/preset-typescript" "^7.22.5"
+ "@babel/runtime" "^7.22.6"
+ "@babel/runtime-corejs3" "^7.22.6"
+ "@babel/traverse" "^7.22.8"
+ "@docusaurus/cssnano-preset" "3.4.0"
+ "@docusaurus/logger" "3.4.0"
+ "@docusaurus/mdx-loader" "3.4.0"
+ "@docusaurus/utils" "3.4.0"
+ "@docusaurus/utils-common" "3.4.0"
+ "@docusaurus/utils-validation" "3.4.0"
+ autoprefixer "^10.4.14"
+ babel-loader "^9.1.3"
+ babel-plugin-dynamic-import-node "^2.3.3"
+ boxen "^6.2.1"
+ chalk "^4.1.2"
+ chokidar "^3.5.3"
+ clean-css "^5.3.2"
+ cli-table3 "^0.6.3"
+ combine-promises "^1.1.0"
+ commander "^5.1.0"
+ copy-webpack-plugin "^11.0.0"
+ core-js "^3.31.1"
+ css-loader "^6.8.1"
+ css-minimizer-webpack-plugin "^5.0.1"
+ cssnano "^6.1.2"
+ del "^6.1.1"
+ detect-port "^1.5.1"
+ escape-html "^1.0.3"
+ eta "^2.2.0"
+ eval "^0.1.8"
+ file-loader "^6.2.0"
+ fs-extra "^11.1.1"
+ html-minifier-terser "^7.2.0"
+ html-tags "^3.3.1"
+ html-webpack-plugin "^5.5.3"
+ leven "^3.1.0"
+ lodash "^4.17.21"
+ mini-css-extract-plugin "^2.7.6"
+ p-map "^4.0.0"
+ postcss "^8.4.26"
+ postcss-loader "^7.3.3"
+ prompts "^2.4.2"
+ react-dev-utils "^12.0.1"
+ react-helmet-async "^1.3.0"
+ react-loadable "npm:@docusaurus/react-loadable@6.0.0"
+ react-loadable-ssr-addon-v5-slorber "^1.0.1"
+ react-router "^5.3.4"
+ react-router-config "^5.1.1"
+ react-router-dom "^5.3.4"
+ rtl-detect "^1.0.4"
+ semver "^7.5.4"
+ serve-handler "^6.1.5"
+ shelljs "^0.8.5"
+ terser-webpack-plugin "^5.3.9"
+ tslib "^2.6.0"
+ update-notifier "^6.0.2"
+ url-loader "^4.1.1"
+ webpack "^5.88.1"
+ webpack-bundle-analyzer "^4.9.0"
+ webpack-dev-server "^4.15.1"
+ webpack-merge "^5.9.0"
+ webpackbar "^5.0.2"
+
+"@docusaurus/cssnano-preset@3.4.0":
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-3.4.0.tgz#dc7922b3bbeabcefc9b60d0161680d81cf72c368"
+ integrity sha512-qwLFSz6v/pZHy/UP32IrprmH5ORce86BGtN0eBtG75PpzQJAzp9gefspox+s8IEOr0oZKuQ/nhzZ3xwyc3jYJQ==
+ dependencies:
+ cssnano-preset-advanced "^6.1.2"
+ postcss "^8.4.38"
+ postcss-sort-media-queries "^5.2.0"
+ tslib "^2.6.0"
+
+"@docusaurus/logger@3.4.0":
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/@docusaurus/logger/-/logger-3.4.0.tgz#8b0ac05c7f3dac2009066e2f964dee8209a77403"
+ integrity sha512-bZwkX+9SJ8lB9kVRkXw+xvHYSMGG4bpYHKGXeXFvyVc79NMeeBSGgzd4TQLHH+DYeOJoCdl8flrFJVxlZ0wo/Q==
+ dependencies:
+ chalk "^4.1.2"
+ tslib "^2.6.0"
+
+"@docusaurus/mdx-loader@3.4.0":
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-3.4.0.tgz#483d7ab57928fdbb5c8bd1678098721a930fc5f6"
+ integrity sha512-kSSbrrk4nTjf4d+wtBA9H+FGauf2gCax89kV8SUSJu3qaTdSIKdWERlngsiHaCFgZ7laTJ8a67UFf+xlFPtuTw==
+ dependencies:
+ "@docusaurus/logger" "3.4.0"
+ "@docusaurus/utils" "3.4.0"
+ "@docusaurus/utils-validation" "3.4.0"
+ "@mdx-js/mdx" "^3.0.0"
+ "@slorber/remark-comment" "^1.0.0"
+ escape-html "^1.0.3"
+ estree-util-value-to-estree "^3.0.1"
+ file-loader "^6.2.0"
+ fs-extra "^11.1.1"
+ image-size "^1.0.2"
+ mdast-util-mdx "^3.0.0"
+ mdast-util-to-string "^4.0.0"
+ rehype-raw "^7.0.0"
+ remark-directive "^3.0.0"
+ remark-emoji "^4.0.0"
+ remark-frontmatter "^5.0.0"
+ remark-gfm "^4.0.0"
+ stringify-object "^3.3.0"
+ tslib "^2.6.0"
+ unified "^11.0.3"
+ unist-util-visit "^5.0.0"
+ url-loader "^4.1.1"
+ vfile "^6.0.1"
+ webpack "^5.88.1"
+
+"@docusaurus/module-type-aliases@3.4.0":
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/@docusaurus/module-type-aliases/-/module-type-aliases-3.4.0.tgz#2653bde58fc1aa3dbc626a6c08cfb63a37ae1bb8"
+ integrity sha512-A1AyS8WF5Bkjnb8s+guTDuYmUiwJzNrtchebBHpc0gz0PyHJNMaybUlSrmJjHVcGrya0LKI4YcR3lBDQfXRYLw==
+ dependencies:
+ "@docusaurus/types" "3.4.0"
+ "@types/history" "^4.7.11"
+ "@types/react" "*"
+ "@types/react-router-config" "*"
+ "@types/react-router-dom" "*"
+ react-helmet-async "*"
+ react-loadable "npm:@docusaurus/react-loadable@6.0.0"
+
+"@docusaurus/plugin-content-blog@3.4.0":
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.4.0.tgz#6373632fdbababbda73a13c4a08f907d7de8f007"
+ integrity sha512-vv6ZAj78ibR5Jh7XBUT4ndIjmlAxkijM3Sx5MAAzC1gyv0vupDQNhzuFg1USQmQVj3P5I6bquk12etPV3LJ+Xw==
+ dependencies:
+ "@docusaurus/core" "3.4.0"
+ "@docusaurus/logger" "3.4.0"
+ "@docusaurus/mdx-loader" "3.4.0"
+ "@docusaurus/types" "3.4.0"
+ "@docusaurus/utils" "3.4.0"
+ "@docusaurus/utils-common" "3.4.0"
+ "@docusaurus/utils-validation" "3.4.0"
+ cheerio "^1.0.0-rc.12"
+ feed "^4.2.2"
+ fs-extra "^11.1.1"
+ lodash "^4.17.21"
+ reading-time "^1.5.0"
+ srcset "^4.0.0"
+ tslib "^2.6.0"
+ unist-util-visit "^5.0.0"
+ utility-types "^3.10.0"
+ webpack "^5.88.1"
+
+"@docusaurus/plugin-content-docs@3.4.0":
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.4.0.tgz#3088973f72169a2a6d533afccec7153c8720d332"
+ integrity sha512-HkUCZffhBo7ocYheD9oZvMcDloRnGhBMOZRyVcAQRFmZPmNqSyISlXA1tQCIxW+r478fty97XXAGjNYzBjpCsg==
+ dependencies:
+ "@docusaurus/core" "3.4.0"
+ "@docusaurus/logger" "3.4.0"
+ "@docusaurus/mdx-loader" "3.4.0"
+ "@docusaurus/module-type-aliases" "3.4.0"
+ "@docusaurus/types" "3.4.0"
+ "@docusaurus/utils" "3.4.0"
+ "@docusaurus/utils-common" "3.4.0"
+ "@docusaurus/utils-validation" "3.4.0"
+ "@types/react-router-config" "^5.0.7"
+ combine-promises "^1.1.0"
+ fs-extra "^11.1.1"
+ js-yaml "^4.1.0"
+ lodash "^4.17.21"
+ tslib "^2.6.0"
+ utility-types "^3.10.0"
+ webpack "^5.88.1"
+
+"@docusaurus/plugin-content-pages@3.4.0":
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.4.0.tgz#1846172ca0355c7d32a67ef8377750ce02bbb8ad"
+ integrity sha512-h2+VN/0JjpR8fIkDEAoadNjfR3oLzB+v1qSXbIAKjQ46JAHx3X22n9nqS+BWSQnTnp1AjkjSvZyJMekmcwxzxg==
+ dependencies:
+ "@docusaurus/core" "3.4.0"
+ "@docusaurus/mdx-loader" "3.4.0"
+ "@docusaurus/types" "3.4.0"
+ "@docusaurus/utils" "3.4.0"
+ "@docusaurus/utils-validation" "3.4.0"
+ fs-extra "^11.1.1"
+ tslib "^2.6.0"
+ webpack "^5.88.1"
+
+"@docusaurus/plugin-debug@3.4.0":
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/@docusaurus/plugin-debug/-/plugin-debug-3.4.0.tgz#74e4ec5686fa314c26f3ac150bacadbba7f06948"
+ integrity sha512-uV7FDUNXGyDSD3PwUaf5YijX91T5/H9SX4ErEcshzwgzWwBtK37nUWPU3ZLJfeTavX3fycTOqk9TglpOLaWkCg==
+ dependencies:
+ "@docusaurus/core" "3.4.0"
+ "@docusaurus/types" "3.4.0"
+ "@docusaurus/utils" "3.4.0"
+ fs-extra "^11.1.1"
+ react-json-view-lite "^1.2.0"
+ tslib "^2.6.0"
+
+"@docusaurus/plugin-google-analytics@3.4.0":
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.4.0.tgz#5f59fc25329a59decc231936f6f9fb5663da3c55"
+ integrity sha512-mCArluxEGi3cmYHqsgpGGt3IyLCrFBxPsxNZ56Mpur0xSlInnIHoeLDH7FvVVcPJRPSQ9/MfRqLsainRw+BojA==
+ dependencies:
+ "@docusaurus/core" "3.4.0"
+ "@docusaurus/types" "3.4.0"
+ "@docusaurus/utils-validation" "3.4.0"
+ tslib "^2.6.0"
+
+"@docusaurus/plugin-google-gtag@3.4.0":
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.4.0.tgz#42489ac5fe1c83b5523ceedd5ef74f9aa8bc251b"
+ integrity sha512-Dsgg6PLAqzZw5wZ4QjUYc8Z2KqJqXxHxq3vIoyoBWiLEEfigIs7wHR+oiWUQy3Zk9MIk6JTYj7tMoQU0Jm3nqA==
+ dependencies:
+ "@docusaurus/core" "3.4.0"
+ "@docusaurus/types" "3.4.0"
+ "@docusaurus/utils-validation" "3.4.0"
+ "@types/gtag.js" "^0.0.12"
+ tslib "^2.6.0"
+
+"@docusaurus/plugin-google-tag-manager@3.4.0":
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.4.0.tgz#cebb03a5ffa1e70b37d95601442babea251329ff"
+ integrity sha512-O9tX1BTwxIhgXpOLpFDueYA9DWk69WCbDRrjYoMQtFHSkTyE7RhNgyjSPREUWJb9i+YUg3OrsvrBYRl64FCPCQ==
+ dependencies:
+ "@docusaurus/core" "3.4.0"
+ "@docusaurus/types" "3.4.0"
+ "@docusaurus/utils-validation" "3.4.0"
+ tslib "^2.6.0"
+
+"@docusaurus/plugin-sitemap@3.4.0":
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.4.0.tgz#b091d64d1e3c6c872050189999580187537bcbc6"
+ integrity sha512-+0VDvx9SmNrFNgwPoeoCha+tRoAjopwT0+pYO1xAbyLcewXSemq+eLxEa46Q1/aoOaJQ0qqHELuQM7iS2gp33Q==
+ dependencies:
+ "@docusaurus/core" "3.4.0"
+ "@docusaurus/logger" "3.4.0"
+ "@docusaurus/types" "3.4.0"
+ "@docusaurus/utils" "3.4.0"
+ "@docusaurus/utils-common" "3.4.0"
+ "@docusaurus/utils-validation" "3.4.0"
+ fs-extra "^11.1.1"
+ sitemap "^7.1.1"
+ tslib "^2.6.0"
+
+"@docusaurus/preset-classic@3.4.0":
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-3.4.0.tgz#6082a32fbb465b0cb2c2a50ebfc277cff2c0f139"
+ integrity sha512-Ohj6KB7siKqZaQhNJVMBBUzT3Nnp6eTKqO+FXO3qu/n1hJl3YLwVKTWBg28LF7MWrKu46UuYavwMRxud0VyqHg==
+ dependencies:
+ "@docusaurus/core" "3.4.0"
+ "@docusaurus/plugin-content-blog" "3.4.0"
+ "@docusaurus/plugin-content-docs" "3.4.0"
+ "@docusaurus/plugin-content-pages" "3.4.0"
+ "@docusaurus/plugin-debug" "3.4.0"
+ "@docusaurus/plugin-google-analytics" "3.4.0"
+ "@docusaurus/plugin-google-gtag" "3.4.0"
+ "@docusaurus/plugin-google-tag-manager" "3.4.0"
+ "@docusaurus/plugin-sitemap" "3.4.0"
+ "@docusaurus/theme-classic" "3.4.0"
+ "@docusaurus/theme-common" "3.4.0"
+ "@docusaurus/theme-search-algolia" "3.4.0"
+ "@docusaurus/types" "3.4.0"
+
+"@docusaurus/theme-classic@3.4.0":
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-3.4.0.tgz#1b0f48edec3e3ec8927843554b9f11e5927b0e52"
+ integrity sha512-0IPtmxsBYv2adr1GnZRdMkEQt1YW6tpzrUPj02YxNpvJ5+ju4E13J5tB4nfdaen/tfR1hmpSPlTFPvTf4kwy8Q==
+ dependencies:
+ "@docusaurus/core" "3.4.0"
+ "@docusaurus/mdx-loader" "3.4.0"
+ "@docusaurus/module-type-aliases" "3.4.0"
+ "@docusaurus/plugin-content-blog" "3.4.0"
+ "@docusaurus/plugin-content-docs" "3.4.0"
+ "@docusaurus/plugin-content-pages" "3.4.0"
+ "@docusaurus/theme-common" "3.4.0"
+ "@docusaurus/theme-translations" "3.4.0"
+ "@docusaurus/types" "3.4.0"
+ "@docusaurus/utils" "3.4.0"
+ "@docusaurus/utils-common" "3.4.0"
+ "@docusaurus/utils-validation" "3.4.0"
+ "@mdx-js/react" "^3.0.0"
+ clsx "^2.0.0"
+ copy-text-to-clipboard "^3.2.0"
+ infima "0.2.0-alpha.43"
+ lodash "^4.17.21"
+ nprogress "^0.2.0"
+ postcss "^8.4.26"
+ prism-react-renderer "^2.3.0"
+ prismjs "^1.29.0"
+ react-router-dom "^5.3.4"
+ rtlcss "^4.1.0"
+ tslib "^2.6.0"
+ utility-types "^3.10.0"
+
+"@docusaurus/theme-common@3.4.0":
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/@docusaurus/theme-common/-/theme-common-3.4.0.tgz#01f2b728de6cb57f6443f52fc30675cf12a5d49f"
+ integrity sha512-0A27alXuv7ZdCg28oPE8nH/Iz73/IUejVaCazqu9elS4ypjiLhK3KfzdSQBnL/g7YfHSlymZKdiOHEo8fJ0qMA==
+ dependencies:
+ "@docusaurus/mdx-loader" "3.4.0"
+ "@docusaurus/module-type-aliases" "3.4.0"
+ "@docusaurus/plugin-content-blog" "3.4.0"
+ "@docusaurus/plugin-content-docs" "3.4.0"
+ "@docusaurus/plugin-content-pages" "3.4.0"
+ "@docusaurus/utils" "3.4.0"
+ "@docusaurus/utils-common" "3.4.0"
+ "@types/history" "^4.7.11"
+ "@types/react" "*"
+ "@types/react-router-config" "*"
+ clsx "^2.0.0"
+ parse-numeric-range "^1.3.0"
+ prism-react-renderer "^2.3.0"
+ tslib "^2.6.0"
+ utility-types "^3.10.0"
+
+"@docusaurus/theme-search-algolia@3.4.0":
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.4.0.tgz#c499bad71d668df0d0f15b0e5e33e2fc4e330fcc"
+ integrity sha512-aiHFx7OCw4Wck1z6IoShVdUWIjntC8FHCw9c5dR8r3q4Ynh+zkS8y2eFFunN/DL6RXPzpnvKCg3vhLQYJDmT9Q==
+ dependencies:
+ "@docsearch/react" "^3.5.2"
+ "@docusaurus/core" "3.4.0"
+ "@docusaurus/logger" "3.4.0"
+ "@docusaurus/plugin-content-docs" "3.4.0"
+ "@docusaurus/theme-common" "3.4.0"
+ "@docusaurus/theme-translations" "3.4.0"
+ "@docusaurus/utils" "3.4.0"
+ "@docusaurus/utils-validation" "3.4.0"
+ algoliasearch "^4.18.0"
+ algoliasearch-helper "^3.13.3"
+ clsx "^2.0.0"
+ eta "^2.2.0"
+ fs-extra "^11.1.1"
+ lodash "^4.17.21"
+ tslib "^2.6.0"
+ utility-types "^3.10.0"
+
+"@docusaurus/theme-translations@3.4.0":
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/@docusaurus/theme-translations/-/theme-translations-3.4.0.tgz#e6355d01352886c67e38e848b2542582ea3070af"
+ integrity sha512-zSxCSpmQCCdQU5Q4CnX/ID8CSUUI3fvmq4hU/GNP/XoAWtXo9SAVnM3TzpU8Gb//H3WCsT8mJcTfyOk3d9ftNg==
+ dependencies:
+ fs-extra "^11.1.1"
+ tslib "^2.6.0"
+
+"@docusaurus/tsconfig@3.4.0":
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/@docusaurus/tsconfig/-/tsconfig-3.4.0.tgz#2b6ea208e580facc6e3330433e9b4321ef0eb3f5"
+ integrity sha512-0qENiJ+TRaeTzcg4olrnh0BQ7eCxTgbYWBnWUeQDc84UYkt/T3pDNnm3SiQkqPb+YQ1qtYFlC0RriAElclo8Dg==
+
+"@docusaurus/types@3.4.0":
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-3.4.0.tgz#237c3f737e9db3f7c1a5935a3ef48d6eadde8292"
+ integrity sha512-4jcDO8kXi5Cf9TcyikB/yKmz14f2RZ2qTRerbHAsS+5InE9ZgSLBNLsewtFTcTOXSVcbU3FoGOzcNWAmU1TR0A==
+ dependencies:
+ "@mdx-js/mdx" "^3.0.0"
+ "@types/history" "^4.7.11"
+ "@types/react" "*"
+ commander "^5.1.0"
+ joi "^17.9.2"
+ react-helmet-async "^1.3.0"
+ utility-types "^3.10.0"
+ webpack "^5.88.1"
+ webpack-merge "^5.9.0"
+
+"@docusaurus/utils-common@3.4.0":
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/@docusaurus/utils-common/-/utils-common-3.4.0.tgz#2a43fefd35b85ab9fcc6833187e66c15f8bfbbc6"
+ integrity sha512-NVx54Wr4rCEKsjOH5QEVvxIqVvm+9kh7q8aYTU5WzUU9/Hctd6aTrcZ3G0Id4zYJ+AeaG5K5qHA4CY5Kcm2iyQ==
+ dependencies:
+ tslib "^2.6.0"
+
+"@docusaurus/utils-validation@3.4.0":
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-3.4.0.tgz#0176f6e503ff45f4390ec2ecb69550f55e0b5eb7"
+ integrity sha512-hYQ9fM+AXYVTWxJOT1EuNaRnrR2WGpRdLDQG07O8UOpsvCPWUVOeo26Rbm0JWY2sGLfzAb+tvJ62yF+8F+TV0g==
+ dependencies:
+ "@docusaurus/logger" "3.4.0"
+ "@docusaurus/utils" "3.4.0"
+ "@docusaurus/utils-common" "3.4.0"
+ fs-extra "^11.2.0"
+ joi "^17.9.2"
+ js-yaml "^4.1.0"
+ lodash "^4.17.21"
+ tslib "^2.6.0"
+
+"@docusaurus/utils@3.4.0":
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-3.4.0.tgz#c508e20627b7a55e2b541e4a28c95e0637d6a204"
+ integrity sha512-fRwnu3L3nnWaXOgs88BVBmG1yGjcQqZNHG+vInhEa2Sz2oQB+ZjbEMO5Rh9ePFpZ0YDiDUhpaVjwmS+AU2F14g==
+ dependencies:
+ "@docusaurus/logger" "3.4.0"
+ "@docusaurus/utils-common" "3.4.0"
+ "@svgr/webpack" "^8.1.0"
+ escape-string-regexp "^4.0.0"
+ file-loader "^6.2.0"
+ fs-extra "^11.1.1"
+ github-slugger "^1.5.0"
+ globby "^11.1.0"
+ gray-matter "^4.0.3"
+ jiti "^1.20.0"
+ js-yaml "^4.1.0"
+ lodash "^4.17.21"
+ micromatch "^4.0.5"
+ prompts "^2.4.2"
+ resolve-pathname "^3.0.0"
+ shelljs "^0.8.5"
+ tslib "^2.6.0"
+ url-loader "^4.1.1"
+ utility-types "^3.10.0"
+ webpack "^5.88.1"
+
+"@hapi/hoek@^9.0.0", "@hapi/hoek@^9.3.0":
+ version "9.3.0"
+ resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.3.0.tgz#8368869dcb735be2e7f5cb7647de78e167a251fb"
+ integrity sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==
+
+"@hapi/topo@^5.1.0":
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.1.0.tgz#dc448e332c6c6e37a4dc02fd84ba8d44b9afb012"
+ integrity sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==
+ dependencies:
+ "@hapi/hoek" "^9.0.0"
+
+"@jest/schemas@^29.6.3":
+ version "29.6.3"
+ resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03"
+ integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==
+ dependencies:
+ "@sinclair/typebox" "^0.27.8"
+
+"@jest/types@^29.6.3":
+ version "29.6.3"
+ resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59"
+ integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==
+ 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"
+
+"@jridgewell/gen-mapping@^0.3.5":
+ version "0.3.5"
+ resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36"
+ integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==
+ dependencies:
+ "@jridgewell/set-array" "^1.2.1"
+ "@jridgewell/sourcemap-codec" "^1.4.10"
+ "@jridgewell/trace-mapping" "^0.3.24"
+
+"@jridgewell/resolve-uri@^3.1.0":
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6"
+ integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==
+
+"@jridgewell/set-array@^1.2.1":
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280"
+ integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==
+
+"@jridgewell/source-map@^0.3.3":
+ version "0.3.6"
+ resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.6.tgz#9d71ca886e32502eb9362c9a74a46787c36df81a"
+ integrity sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==
+ dependencies:
+ "@jridgewell/gen-mapping" "^0.3.5"
+ "@jridgewell/trace-mapping" "^0.3.25"
+
+"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14":
+ version "1.4.15"
+ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
+ integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
+
+"@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25":
+ version "0.3.25"
+ resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0"
+ integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==
+ dependencies:
+ "@jridgewell/resolve-uri" "^3.1.0"
+ "@jridgewell/sourcemap-codec" "^1.4.14"
+
+"@leichtgewicht/ip-codec@^2.0.1":
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz#4fc56c15c580b9adb7dc3c333a134e540b44bfb1"
+ integrity sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==
+
+"@mdx-js/mdx@^3.0.0":
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/@mdx-js/mdx/-/mdx-3.0.1.tgz#617bd2629ae561fdca1bb88e3badd947f5a82191"
+ integrity sha512-eIQ4QTrOWyL3LWEe/bu6Taqzq2HQvHcyTMaOrI95P2/LmJE7AsfPfgJGuFLPVqBUE1BC1rik3VIhU+s9u72arA==
+ dependencies:
+ "@types/estree" "^1.0.0"
+ "@types/estree-jsx" "^1.0.0"
+ "@types/hast" "^3.0.0"
+ "@types/mdx" "^2.0.0"
+ collapse-white-space "^2.0.0"
+ devlop "^1.0.0"
+ estree-util-build-jsx "^3.0.0"
+ estree-util-is-identifier-name "^3.0.0"
+ estree-util-to-js "^2.0.0"
+ estree-walker "^3.0.0"
+ hast-util-to-estree "^3.0.0"
+ hast-util-to-jsx-runtime "^2.0.0"
+ markdown-extensions "^2.0.0"
+ periscopic "^3.0.0"
+ remark-mdx "^3.0.0"
+ remark-parse "^11.0.0"
+ remark-rehype "^11.0.0"
+ source-map "^0.7.0"
+ unified "^11.0.0"
+ unist-util-position-from-estree "^2.0.0"
+ unist-util-stringify-position "^4.0.0"
+ unist-util-visit "^5.0.0"
+ vfile "^6.0.0"
+
+"@mdx-js/react@^3.0.0":
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-3.0.1.tgz#997a19b3a5b783d936c75ae7c47cfe62f967f746"
+ integrity sha512-9ZrPIU4MGf6et1m1ov3zKf+q9+deetI51zprKB1D/z3NOb+rUxxtEl3mCjW5wTGh6VhRdwPueh1oRzi6ezkA8A==
+ dependencies:
+ "@types/mdx" "^2.0.0"
+
+"@nodelib/fs.scandir@2.1.5":
+ version "2.1.5"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
+ integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==
+ dependencies:
+ "@nodelib/fs.stat" "2.0.5"
+ run-parallel "^1.1.9"
+
+"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2":
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b"
+ integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
+
+"@nodelib/fs.walk@^1.2.3":
+ version "1.2.8"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a"
+ integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
+ dependencies:
+ "@nodelib/fs.scandir" "2.1.5"
+ fastq "^1.6.0"
+
+"@pnpm/config.env-replace@^1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz#ab29da53df41e8948a00f2433f085f54de8b3a4c"
+ integrity sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==
+
+"@pnpm/network.ca-file@^1.0.1":
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz#2ab05e09c1af0cdf2fcf5035bea1484e222f7983"
+ integrity sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==
+ dependencies:
+ graceful-fs "4.2.10"
+
+"@pnpm/npm-conf@^2.1.0":
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/@pnpm/npm-conf/-/npm-conf-2.2.2.tgz#0058baf1c26cbb63a828f0193795401684ac86f0"
+ integrity sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==
+ dependencies:
+ "@pnpm/config.env-replace" "^1.1.0"
+ "@pnpm/network.ca-file" "^1.0.1"
+ config-chain "^1.1.11"
+
+"@polka/url@^1.0.0-next.24":
+ version "1.0.0-next.25"
+ resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.25.tgz#f077fdc0b5d0078d30893396ff4827a13f99e817"
+ integrity sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==
+
+"@sideway/address@^4.1.5":
+ version "4.1.5"
+ resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.5.tgz#4bc149a0076623ced99ca8208ba780d65a99b9d5"
+ integrity sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==
+ dependencies:
+ "@hapi/hoek" "^9.0.0"
+
+"@sideway/formula@^3.0.1":
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.1.tgz#80fcbcbaf7ce031e0ef2dd29b1bfc7c3f583611f"
+ integrity sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==
+
+"@sideway/pinpoint@^2.0.0":
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df"
+ integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==
+
+"@sinclair/typebox@^0.27.8":
+ version "0.27.8"
+ resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e"
+ integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==
+
+"@sindresorhus/is@^4.6.0":
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f"
+ integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==
+
+"@sindresorhus/is@^5.2.0":
+ version "5.6.0"
+ resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-5.6.0.tgz#41dd6093d34652cddb5d5bdeee04eafc33826668"
+ integrity sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==
+
+"@slorber/remark-comment@^1.0.0":
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/@slorber/remark-comment/-/remark-comment-1.0.0.tgz#2a020b3f4579c89dec0361673206c28d67e08f5a"
+ integrity sha512-RCE24n7jsOj1M0UPvIQCHTe7fI0sFL4S2nwKVWwHyVr/wI/H8GosgsJGyhnsZoGFnD/P2hLf1mSbrrgSLN93NA==
+ dependencies:
+ micromark-factory-space "^1.0.0"
+ micromark-util-character "^1.1.0"
+ micromark-util-symbol "^1.0.1"
+
+"@svgr/babel-plugin-add-jsx-attribute@8.0.0":
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz#4001f5d5dd87fa13303e36ee106e3ff3a7eb8b22"
+ integrity sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==
+
+"@svgr/babel-plugin-remove-jsx-attribute@8.0.0":
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz#69177f7937233caca3a1afb051906698f2f59186"
+ integrity sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==
+
+"@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0":
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz#c2c48104cfd7dcd557f373b70a56e9e3bdae1d44"
+ integrity sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==
+
+"@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0":
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz#8fbb6b2e91fa26ac5d4aa25c6b6e4f20f9c0ae27"
+ integrity sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==
+
+"@svgr/babel-plugin-svg-dynamic-title@8.0.0":
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz#1d5ba1d281363fc0f2f29a60d6d936f9bbc657b0"
+ integrity sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==
+
+"@svgr/babel-plugin-svg-em-dimensions@8.0.0":
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz#35e08df300ea8b1d41cb8f62309c241b0369e501"
+ integrity sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==
+
+"@svgr/babel-plugin-transform-react-native-svg@8.1.0":
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz#90a8b63998b688b284f255c6a5248abd5b28d754"
+ integrity sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==
+
+"@svgr/babel-plugin-transform-svg-component@8.0.0":
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz#013b4bfca88779711f0ed2739f3f7efcefcf4f7e"
+ integrity sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==
+
+"@svgr/babel-preset@8.1.0":
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-8.1.0.tgz#0e87119aecdf1c424840b9d4565b7137cabf9ece"
+ integrity sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==
+ dependencies:
+ "@svgr/babel-plugin-add-jsx-attribute" "8.0.0"
+ "@svgr/babel-plugin-remove-jsx-attribute" "8.0.0"
+ "@svgr/babel-plugin-remove-jsx-empty-expression" "8.0.0"
+ "@svgr/babel-plugin-replace-jsx-attribute-value" "8.0.0"
+ "@svgr/babel-plugin-svg-dynamic-title" "8.0.0"
+ "@svgr/babel-plugin-svg-em-dimensions" "8.0.0"
+ "@svgr/babel-plugin-transform-react-native-svg" "8.1.0"
+ "@svgr/babel-plugin-transform-svg-component" "8.0.0"
+
+"@svgr/core@8.1.0":
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/@svgr/core/-/core-8.1.0.tgz#41146f9b40b1a10beaf5cc4f361a16a3c1885e88"
+ integrity sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==
+ dependencies:
+ "@babel/core" "^7.21.3"
+ "@svgr/babel-preset" "8.1.0"
+ camelcase "^6.2.0"
+ cosmiconfig "^8.1.3"
+ snake-case "^3.0.4"
+
+"@svgr/hast-util-to-babel-ast@8.0.0":
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz#6952fd9ce0f470e1aded293b792a2705faf4ffd4"
+ integrity sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==
+ dependencies:
+ "@babel/types" "^7.21.3"
+ entities "^4.4.0"
+
+"@svgr/plugin-jsx@8.1.0":
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz#96969f04a24b58b174ee4cd974c60475acbd6928"
+ integrity sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==
+ dependencies:
+ "@babel/core" "^7.21.3"
+ "@svgr/babel-preset" "8.1.0"
+ "@svgr/hast-util-to-babel-ast" "8.0.0"
+ svg-parser "^2.0.4"
+
+"@svgr/plugin-svgo@8.1.0":
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-8.1.0.tgz#b115b7b967b564f89ac58feae89b88c3decd0f00"
+ integrity sha512-Ywtl837OGO9pTLIN/onoWLmDQ4zFUycI1g76vuKGEz6evR/ZTJlJuz3G/fIkb6OVBJ2g0o6CGJzaEjfmEo3AHA==
+ dependencies:
+ cosmiconfig "^8.1.3"
+ deepmerge "^4.3.1"
+ svgo "^3.0.2"
+
+"@svgr/webpack@^8.1.0":
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-8.1.0.tgz#16f1b5346f102f89fda6ec7338b96a701d8be0c2"
+ integrity sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA==
+ dependencies:
+ "@babel/core" "^7.21.3"
+ "@babel/plugin-transform-react-constant-elements" "^7.21.3"
+ "@babel/preset-env" "^7.20.2"
+ "@babel/preset-react" "^7.18.6"
+ "@babel/preset-typescript" "^7.21.0"
+ "@svgr/core" "8.1.0"
+ "@svgr/plugin-jsx" "8.1.0"
+ "@svgr/plugin-svgo" "8.1.0"
+
+"@szmarczak/http-timer@^5.0.1":
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-5.0.1.tgz#c7c1bf1141cdd4751b0399c8fc7b8b664cd5be3a"
+ integrity sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==
+ dependencies:
+ defer-to-connect "^2.0.1"
+
+"@trysound/sax@0.2.0":
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad"
+ integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==
+
+"@types/acorn@^4.0.0":
+ version "4.0.6"
+ resolved "https://registry.yarnpkg.com/@types/acorn/-/acorn-4.0.6.tgz#d61ca5480300ac41a7d973dd5b84d0a591154a22"
+ integrity sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==
+ dependencies:
+ "@types/estree" "*"
+
+"@types/body-parser@*":
+ version "1.19.5"
+ resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.5.tgz#04ce9a3b677dc8bd681a17da1ab9835dc9d3ede4"
+ integrity sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==
+ dependencies:
+ "@types/connect" "*"
+ "@types/node" "*"
+
+"@types/bonjour@^3.5.9":
+ version "3.5.13"
+ resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.13.tgz#adf90ce1a105e81dd1f9c61fdc5afda1bfb92956"
+ integrity sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==
+ dependencies:
+ "@types/node" "*"
+
+"@types/connect-history-api-fallback@^1.3.5":
+ version "1.5.4"
+ resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz#7de71645a103056b48ac3ce07b3520b819c1d5b3"
+ integrity sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==
+ dependencies:
+ "@types/express-serve-static-core" "*"
+ "@types/node" "*"
+
+"@types/connect@*":
+ version "3.4.38"
+ resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858"
+ integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==
+ dependencies:
+ "@types/node" "*"
+
+"@types/debug@^4.0.0":
+ version "4.1.12"
+ resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917"
+ integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==
+ dependencies:
+ "@types/ms" "*"
+
+"@types/eslint-scope@^3.7.3":
+ version "3.7.7"
+ resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz#3108bd5f18b0cdb277c867b3dd449c9ed7079ac5"
+ integrity sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==
+ dependencies:
+ "@types/eslint" "*"
+ "@types/estree" "*"
+
+"@types/eslint@*":
+ version "8.56.10"
+ resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.56.10.tgz#eb2370a73bf04a901eeba8f22595c7ee0f7eb58d"
+ integrity sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==
+ dependencies:
+ "@types/estree" "*"
+ "@types/json-schema" "*"
+
+"@types/estree-jsx@^1.0.0":
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/@types/estree-jsx/-/estree-jsx-1.0.5.tgz#858a88ea20f34fe65111f005a689fa1ebf70dc18"
+ integrity sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==
+ dependencies:
+ "@types/estree" "*"
+
+"@types/estree@*", "@types/estree@^1.0.0", "@types/estree@^1.0.5":
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4"
+ integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==
+
+"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.33":
+ version "4.19.5"
+ resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz#218064e321126fcf9048d1ca25dd2465da55d9c6"
+ integrity sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==
+ dependencies:
+ "@types/node" "*"
+ "@types/qs" "*"
+ "@types/range-parser" "*"
+ "@types/send" "*"
+
+"@types/express@*", "@types/express@^4.17.13":
+ version "4.17.21"
+ resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.21.tgz#c26d4a151e60efe0084b23dc3369ebc631ed192d"
+ integrity sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==
+ dependencies:
+ "@types/body-parser" "*"
+ "@types/express-serve-static-core" "^4.17.33"
+ "@types/qs" "*"
+ "@types/serve-static" "*"
+
+"@types/gtag.js@^0.0.12":
+ version "0.0.12"
+ resolved "https://registry.yarnpkg.com/@types/gtag.js/-/gtag.js-0.0.12.tgz#095122edca896689bdfcdd73b057e23064d23572"
+ integrity sha512-YQV9bUsemkzG81Ea295/nF/5GijnD2Af7QhEofh7xu+kvCN6RdodgNwwGWXB5GMI3NoyvQo0odNctoH/qLMIpg==
+
+"@types/hast@^3.0.0":
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/@types/hast/-/hast-3.0.4.tgz#1d6b39993b82cea6ad783945b0508c25903e15aa"
+ integrity sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==
+ dependencies:
+ "@types/unist" "*"
+
+"@types/history@^4.7.11":
+ version "4.7.11"
+ resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.11.tgz#56588b17ae8f50c53983a524fc3cc47437969d64"
+ integrity sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==
+
+"@types/html-minifier-terser@^6.0.0":
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35"
+ integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==
+
+"@types/http-cache-semantics@^4.0.2":
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz#b979ebad3919799c979b17c72621c0bc0a31c6c4"
+ integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==
+
+"@types/http-errors@*":
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.4.tgz#7eb47726c391b7345a6ec35ad7f4de469cf5ba4f"
+ integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==
+
+"@types/http-proxy@^1.17.8":
+ version "1.17.14"
+ resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.14.tgz#57f8ccaa1c1c3780644f8a94f9c6b5000b5e2eec"
+ integrity sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==
+ dependencies:
+ "@types/node" "*"
+
+"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0":
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7"
+ integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==
+
+"@types/istanbul-lib-report@*":
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf"
+ integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==
+ dependencies:
+ "@types/istanbul-lib-coverage" "*"
+
+"@types/istanbul-reports@^3.0.0":
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54"
+ integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==
+ dependencies:
+ "@types/istanbul-lib-report" "*"
+
+"@types/json-schema@*", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9":
+ version "7.0.15"
+ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841"
+ integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==
+
+"@types/mdast@^4.0.0", "@types/mdast@^4.0.2":
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-4.0.4.tgz#7ccf72edd2f1aa7dd3437e180c64373585804dd6"
+ integrity sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==
+ dependencies:
+ "@types/unist" "*"
+
+"@types/mdx@^2.0.0":
+ version "2.0.13"
+ resolved "https://registry.yarnpkg.com/@types/mdx/-/mdx-2.0.13.tgz#68f6877043d377092890ff5b298152b0a21671bd"
+ integrity sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==
+
+"@types/mime@^1":
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690"
+ integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==
+
+"@types/ms@*":
+ version "0.7.34"
+ resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.34.tgz#10964ba0dee6ac4cd462e2795b6bebd407303433"
+ integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==
+
+"@types/node-forge@^1.3.0":
+ version "1.3.11"
+ resolved "https://registry.yarnpkg.com/@types/node-forge/-/node-forge-1.3.11.tgz#0972ea538ddb0f4d9c2fa0ec5db5724773a604da"
+ integrity sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==
+ dependencies:
+ "@types/node" "*"
+
+"@types/node@*":
+ version "20.14.9"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.9.tgz#12e8e765ab27f8c421a1820c99f5f313a933b420"
+ integrity sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==
+ dependencies:
+ undici-types "~5.26.4"
+
+"@types/node@^17.0.5":
+ version "17.0.45"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.45.tgz#2c0fafd78705e7a18b7906b5201a522719dc5190"
+ integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==
+
+"@types/parse-json@^4.0.0":
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.2.tgz#5950e50960793055845e956c427fc2b0d70c5239"
+ integrity sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==
+
+"@types/prismjs@^1.26.0":
+ version "1.26.4"
+ resolved "https://registry.yarnpkg.com/@types/prismjs/-/prismjs-1.26.4.tgz#1a9e1074619ce1d7322669e5b46fbe823925103a"
+ integrity sha512-rlAnzkW2sZOjbqZ743IHUhFcvzaGbqijwOu8QZnZCjfQzBqFE3s4lOTJEsxikImav9uzz/42I+O7YUs1mWgMlg==
+
+"@types/prop-types@*":
+ version "15.7.12"
+ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.12.tgz#12bb1e2be27293c1406acb6af1c3f3a1481d98c6"
+ integrity sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==
+
+"@types/qs@*":
+ version "6.9.15"
+ resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.15.tgz#adde8a060ec9c305a82de1babc1056e73bd64dce"
+ integrity sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==
+
+"@types/range-parser@*":
+ version "1.2.7"
+ resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb"
+ integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==
+
+"@types/react-router-config@*", "@types/react-router-config@^5.0.7":
+ version "5.0.11"
+ resolved "https://registry.yarnpkg.com/@types/react-router-config/-/react-router-config-5.0.11.tgz#2761a23acc7905a66a94419ee40294a65aaa483a"
+ integrity sha512-WmSAg7WgqW7m4x8Mt4N6ZyKz0BubSj/2tVUMsAHp+Yd2AMwcSbeFq9WympT19p5heCFmF97R9eD5uUR/t4HEqw==
+ dependencies:
+ "@types/history" "^4.7.11"
+ "@types/react" "*"
+ "@types/react-router" "^5.1.0"
+
+"@types/react-router-dom@*":
+ version "5.3.3"
+ resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-5.3.3.tgz#e9d6b4a66fcdbd651a5f106c2656a30088cc1e83"
+ integrity sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==
+ dependencies:
+ "@types/history" "^4.7.11"
+ "@types/react" "*"
+ "@types/react-router" "*"
+
+"@types/react-router@*", "@types/react-router@^5.1.0":
+ version "5.1.20"
+ resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-5.1.20.tgz#88eccaa122a82405ef3efbcaaa5dcdd9f021387c"
+ integrity sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==
+ dependencies:
+ "@types/history" "^4.7.11"
+ "@types/react" "*"
+
+"@types/react@*":
+ version "18.3.3"
+ resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.3.tgz#9679020895318b0915d7a3ab004d92d33375c45f"
+ integrity sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==
+ dependencies:
+ "@types/prop-types" "*"
+ csstype "^3.0.2"
+
+"@types/retry@0.12.0":
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d"
+ integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==
+
+"@types/sax@^1.2.1":
+ version "1.2.7"
+ resolved "https://registry.yarnpkg.com/@types/sax/-/sax-1.2.7.tgz#ba5fe7df9aa9c89b6dff7688a19023dd2963091d"
+ integrity sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==
+ dependencies:
+ "@types/node" "*"
+
+"@types/send@*":
+ version "0.17.4"
+ resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.4.tgz#6619cd24e7270793702e4e6a4b958a9010cfc57a"
+ integrity sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==
+ dependencies:
+ "@types/mime" "^1"
+ "@types/node" "*"
+
+"@types/serve-index@^1.9.1":
+ version "1.9.4"
+ resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.4.tgz#e6ae13d5053cb06ed36392110b4f9a49ac4ec898"
+ integrity sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==
+ dependencies:
+ "@types/express" "*"
+
+"@types/serve-static@*", "@types/serve-static@^1.13.10":
+ version "1.15.7"
+ resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.7.tgz#22174bbd74fb97fe303109738e9b5c2f3064f714"
+ integrity sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==
+ dependencies:
+ "@types/http-errors" "*"
+ "@types/node" "*"
+ "@types/send" "*"
+
+"@types/sockjs@^0.3.33":
+ version "0.3.36"
+ resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.36.tgz#ce322cf07bcc119d4cbf7f88954f3a3bd0f67535"
+ integrity sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==
+ dependencies:
+ "@types/node" "*"
+
+"@types/unist@*", "@types/unist@^3.0.0":
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/@types/unist/-/unist-3.0.2.tgz#6dd61e43ef60b34086287f83683a5c1b2dc53d20"
+ integrity sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==
+
+"@types/unist@^2.0.0":
+ version "2.0.10"
+ resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.10.tgz#04ffa7f406ab628f7f7e97ca23e290cd8ab15efc"
+ integrity sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==
+
+"@types/ws@^8.5.5":
+ version "8.5.10"
+ resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.10.tgz#4acfb517970853fa6574a3a6886791d04a396787"
+ integrity sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==
+ dependencies:
+ "@types/node" "*"
+
+"@types/yargs-parser@*":
+ version "21.0.3"
+ resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15"
+ integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==
+
+"@types/yargs@^17.0.8":
+ version "17.0.32"
+ resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.32.tgz#030774723a2f7faafebf645f4e5a48371dca6229"
+ integrity sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==
+ dependencies:
+ "@types/yargs-parser" "*"
+
+"@ungap/structured-clone@^1.0.0":
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406"
+ integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==
+
+"@webassemblyjs/ast@1.12.1", "@webassemblyjs/ast@^1.12.1":
+ version "1.12.1"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.12.1.tgz#bb16a0e8b1914f979f45864c23819cc3e3f0d4bb"
+ integrity sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==
+ dependencies:
+ "@webassemblyjs/helper-numbers" "1.11.6"
+ "@webassemblyjs/helper-wasm-bytecode" "1.11.6"
+
+"@webassemblyjs/floating-point-hex-parser@1.11.6":
+ version "1.11.6"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz#dacbcb95aff135c8260f77fa3b4c5fea600a6431"
+ integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==
+
+"@webassemblyjs/helper-api-error@1.11.6":
+ version "1.11.6"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz#6132f68c4acd59dcd141c44b18cbebbd9f2fa768"
+ integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==
+
+"@webassemblyjs/helper-buffer@1.12.1":
+ version "1.12.1"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz#6df20d272ea5439bf20ab3492b7fb70e9bfcb3f6"
+ integrity sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==
+
+"@webassemblyjs/helper-numbers@1.11.6":
+ version "1.11.6"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz#cbce5e7e0c1bd32cf4905ae444ef64cea919f1b5"
+ integrity sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==
+ dependencies:
+ "@webassemblyjs/floating-point-hex-parser" "1.11.6"
+ "@webassemblyjs/helper-api-error" "1.11.6"
+ "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/helper-wasm-bytecode@1.11.6":
+ version "1.11.6"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz#bb2ebdb3b83aa26d9baad4c46d4315283acd51e9"
+ integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==
+
+"@webassemblyjs/helper-wasm-section@1.12.1":
+ version "1.12.1"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz#3da623233ae1a60409b509a52ade9bc22a37f7bf"
+ integrity sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==
+ dependencies:
+ "@webassemblyjs/ast" "1.12.1"
+ "@webassemblyjs/helper-buffer" "1.12.1"
+ "@webassemblyjs/helper-wasm-bytecode" "1.11.6"
+ "@webassemblyjs/wasm-gen" "1.12.1"
+
+"@webassemblyjs/ieee754@1.11.6":
+ version "1.11.6"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz#bb665c91d0b14fffceb0e38298c329af043c6e3a"
+ integrity sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==
+ dependencies:
+ "@xtuc/ieee754" "^1.2.0"
+
+"@webassemblyjs/leb128@1.11.6":
+ version "1.11.6"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz#70e60e5e82f9ac81118bc25381a0b283893240d7"
+ integrity sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==
+ dependencies:
+ "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/utf8@1.11.6":
+ version "1.11.6"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz#90f8bc34c561595fe156603be7253cdbcd0fab5a"
+ integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==
+
+"@webassemblyjs/wasm-edit@^1.12.1":
+ version "1.12.1"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz#9f9f3ff52a14c980939be0ef9d5df9ebc678ae3b"
+ integrity sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==
+ dependencies:
+ "@webassemblyjs/ast" "1.12.1"
+ "@webassemblyjs/helper-buffer" "1.12.1"
+ "@webassemblyjs/helper-wasm-bytecode" "1.11.6"
+ "@webassemblyjs/helper-wasm-section" "1.12.1"
+ "@webassemblyjs/wasm-gen" "1.12.1"
+ "@webassemblyjs/wasm-opt" "1.12.1"
+ "@webassemblyjs/wasm-parser" "1.12.1"
+ "@webassemblyjs/wast-printer" "1.12.1"
+
+"@webassemblyjs/wasm-gen@1.12.1":
+ version "1.12.1"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz#a6520601da1b5700448273666a71ad0a45d78547"
+ integrity sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==
+ dependencies:
+ "@webassemblyjs/ast" "1.12.1"
+ "@webassemblyjs/helper-wasm-bytecode" "1.11.6"
+ "@webassemblyjs/ieee754" "1.11.6"
+ "@webassemblyjs/leb128" "1.11.6"
+ "@webassemblyjs/utf8" "1.11.6"
+
+"@webassemblyjs/wasm-opt@1.12.1":
+ version "1.12.1"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz#9e6e81475dfcfb62dab574ac2dda38226c232bc5"
+ integrity sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==
+ dependencies:
+ "@webassemblyjs/ast" "1.12.1"
+ "@webassemblyjs/helper-buffer" "1.12.1"
+ "@webassemblyjs/wasm-gen" "1.12.1"
+ "@webassemblyjs/wasm-parser" "1.12.1"
+
+"@webassemblyjs/wasm-parser@1.12.1", "@webassemblyjs/wasm-parser@^1.12.1":
+ version "1.12.1"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz#c47acb90e6f083391e3fa61d113650eea1e95937"
+ integrity sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==
+ dependencies:
+ "@webassemblyjs/ast" "1.12.1"
+ "@webassemblyjs/helper-api-error" "1.11.6"
+ "@webassemblyjs/helper-wasm-bytecode" "1.11.6"
+ "@webassemblyjs/ieee754" "1.11.6"
+ "@webassemblyjs/leb128" "1.11.6"
+ "@webassemblyjs/utf8" "1.11.6"
+
+"@webassemblyjs/wast-printer@1.12.1":
+ version "1.12.1"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz#bcecf661d7d1abdaf989d8341a4833e33e2b31ac"
+ integrity sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==
+ dependencies:
+ "@webassemblyjs/ast" "1.12.1"
+ "@xtuc/long" "4.2.2"
+
+"@xtuc/ieee754@^1.2.0":
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790"
+ integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==
+
+"@xtuc/long@4.2.2":
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d"
+ integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==
+
+accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8:
+ version "1.3.8"
+ resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e"
+ integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==
+ dependencies:
+ mime-types "~2.1.34"
+ negotiator "0.6.3"
+
+acorn-import-attributes@^1.9.5:
+ version "1.9.5"
+ resolved "https://registry.yarnpkg.com/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz#7eb1557b1ba05ef18b5ed0ec67591bfab04688ef"
+ integrity sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==
+
+acorn-jsx@^5.0.0:
+ version "5.3.2"
+ resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
+ integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
+
+acorn-walk@^8.0.0:
+ version "8.3.3"
+ resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.3.tgz#9caeac29eefaa0c41e3d4c65137de4d6f34df43e"
+ integrity sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==
+ dependencies:
+ acorn "^8.11.0"
+
+acorn@^8.0.0, acorn@^8.0.4, acorn@^8.11.0, acorn@^8.7.1, acorn@^8.8.2:
+ version "8.12.0"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.0.tgz#1627bfa2e058148036133b8d9b51a700663c294c"
+ integrity sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==
+
+address@^1.0.1, address@^1.1.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/address/-/address-1.2.2.tgz#2b5248dac5485a6390532c6a517fda2e3faac89e"
+ integrity sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==
+
+aggregate-error@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a"
+ integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==
+ dependencies:
+ clean-stack "^2.0.0"
+ indent-string "^4.0.0"
+
+ajv-formats@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520"
+ integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==
+ dependencies:
+ ajv "^8.0.0"
+
+ajv-keywords@^3.4.1, ajv-keywords@^3.5.2:
+ version "3.5.2"
+ resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d"
+ integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==
+
+ajv-keywords@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16"
+ integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==
+ dependencies:
+ fast-deep-equal "^3.1.3"
+
+ajv@^6.12.2, ajv@^6.12.5:
+ version "6.12.6"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
+ integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
+ 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"
+
+ajv@^8.0.0, ajv@^8.9.0:
+ version "8.16.0"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.16.0.tgz#22e2a92b94f005f7e0f9c9d39652ef0b8f6f0cb4"
+ integrity sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==
+ dependencies:
+ fast-deep-equal "^3.1.3"
+ json-schema-traverse "^1.0.0"
+ require-from-string "^2.0.2"
+ uri-js "^4.4.1"
+
+algoliasearch-helper@^3.10.0, algoliasearch-helper@^3.13.3:
+ version "3.22.1"
+ resolved "https://registry.yarnpkg.com/algoliasearch-helper/-/algoliasearch-helper-3.22.1.tgz#c4b91265aa2e58eea4413bc57c4611eaf391e597"
+ integrity sha512-fSxJ4YreH4kOME9CnKazbAn2tK/rvBoV37ETd6nTt4j7QfkcnW+c+F22WfuE9Q/sRpvOMnUwU/BXAVEiwW7p/w==
+ dependencies:
+ "@algolia/events" "^4.0.1"
+
+algoliasearch@^4.18.0, algoliasearch@^4.19.1:
+ version "4.24.0"
+ resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-4.24.0.tgz#b953b3e2309ef8f25da9de311b95b994ac918275"
+ integrity sha512-bf0QV/9jVejssFBmz2HQLxUadxk574t4iwjCKp5E7NBzwKkrDEhKPISIIjAU/p6K5qDx3qoeh4+26zWN1jmw3g==
+ dependencies:
+ "@algolia/cache-browser-local-storage" "4.24.0"
+ "@algolia/cache-common" "4.24.0"
+ "@algolia/cache-in-memory" "4.24.0"
+ "@algolia/client-account" "4.24.0"
+ "@algolia/client-analytics" "4.24.0"
+ "@algolia/client-common" "4.24.0"
+ "@algolia/client-personalization" "4.24.0"
+ "@algolia/client-search" "4.24.0"
+ "@algolia/logger-common" "4.24.0"
+ "@algolia/logger-console" "4.24.0"
+ "@algolia/recommend" "4.24.0"
+ "@algolia/requester-browser-xhr" "4.24.0"
+ "@algolia/requester-common" "4.24.0"
+ "@algolia/requester-node-http" "4.24.0"
+ "@algolia/transporter" "4.24.0"
+
+ansi-align@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59"
+ integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==
+ dependencies:
+ string-width "^4.1.0"
+
+ansi-html-community@^0.0.8:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41"
+ integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==
+
+ansi-regex@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
+ integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
+
+ansi-regex@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a"
+ integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==
+
+ansi-styles@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
+ integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
+ dependencies:
+ color-convert "^1.9.0"
+
+ansi-styles@^4.1.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
+ integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
+ dependencies:
+ color-convert "^2.0.1"
+
+ansi-styles@^6.1.0:
+ version "6.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5"
+ integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==
+
+anymatch@~3.1.2:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e"
+ integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==
+ dependencies:
+ normalize-path "^3.0.0"
+ picomatch "^2.0.4"
+
+arg@^5.0.0:
+ version "5.0.2"
+ resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c"
+ integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==
+
+argparse@^1.0.7:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
+ integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
+ dependencies:
+ sprintf-js "~1.0.2"
+
+argparse@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
+ integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
+
+array-flatten@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
+ integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==
+
+array-union@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
+ integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
+
+astring@^1.8.0:
+ version "1.8.6"
+ resolved "https://registry.yarnpkg.com/astring/-/astring-1.8.6.tgz#2c9c157cf1739d67561c56ba896e6948f6b93731"
+ integrity sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==
+
+asynckit@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+ integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
+
+at-least-node@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2"
+ integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==
+
+autoprefixer@^10.4.14, autoprefixer@^10.4.19:
+ version "10.4.19"
+ resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.19.tgz#ad25a856e82ee9d7898c59583c1afeb3fa65f89f"
+ integrity sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==
+ dependencies:
+ browserslist "^4.23.0"
+ caniuse-lite "^1.0.30001599"
+ fraction.js "^4.3.7"
+ normalize-range "^0.1.2"
+ picocolors "^1.0.0"
+ postcss-value-parser "^4.2.0"
+
+axios@^1.6.0:
+ version "1.7.2"
+ resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.2.tgz#b625db8a7051fbea61c35a3cbb3a1daa7b9c7621"
+ integrity sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==
+ dependencies:
+ follow-redirects "^1.15.6"
+ form-data "^4.0.0"
+ proxy-from-env "^1.1.0"
+
+babel-loader@^9.1.3:
+ version "9.1.3"
+ resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-9.1.3.tgz#3d0e01b4e69760cc694ee306fe16d358aa1c6f9a"
+ integrity sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==
+ dependencies:
+ find-cache-dir "^4.0.0"
+ schema-utils "^4.0.0"
+
+babel-plugin-dynamic-import-node@^2.3.3:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3"
+ integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==
+ dependencies:
+ object.assign "^4.1.0"
+
+babel-plugin-polyfill-corejs2@^0.4.10:
+ version "0.4.11"
+ resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz#30320dfe3ffe1a336c15afdcdafd6fd615b25e33"
+ integrity sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==
+ dependencies:
+ "@babel/compat-data" "^7.22.6"
+ "@babel/helper-define-polyfill-provider" "^0.6.2"
+ semver "^6.3.1"
+
+babel-plugin-polyfill-corejs3@^0.10.1, babel-plugin-polyfill-corejs3@^0.10.4:
+ version "0.10.4"
+ resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz#789ac82405ad664c20476d0233b485281deb9c77"
+ integrity sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==
+ dependencies:
+ "@babel/helper-define-polyfill-provider" "^0.6.1"
+ core-js-compat "^3.36.1"
+
+babel-plugin-polyfill-regenerator@^0.6.1:
+ version "0.6.2"
+ resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz#addc47e240edd1da1058ebda03021f382bba785e"
+ integrity sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==
+ dependencies:
+ "@babel/helper-define-polyfill-provider" "^0.6.2"
+
+bail@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/bail/-/bail-2.0.2.tgz#d26f5cd8fe5d6f832a31517b9f7c356040ba6d5d"
+ integrity sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==
+
+balanced-match@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
+ integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
+
+batch@0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16"
+ integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==
+
+big.js@^5.2.2:
+ version "5.2.2"
+ resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328"
+ integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==
+
+binary-extensions@^2.0.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522"
+ integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==
+
+body-parser@1.20.2:
+ version "1.20.2"
+ resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd"
+ integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==
+ dependencies:
+ bytes "3.1.2"
+ content-type "~1.0.5"
+ debug "2.6.9"
+ depd "2.0.0"
+ destroy "1.2.0"
+ http-errors "2.0.0"
+ iconv-lite "0.4.24"
+ on-finished "2.4.1"
+ qs "6.11.0"
+ raw-body "2.5.2"
+ type-is "~1.6.18"
+ unpipe "1.0.0"
+
+bonjour-service@^1.0.11:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.2.1.tgz#eb41b3085183df3321da1264719fbada12478d02"
+ integrity sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==
+ dependencies:
+ fast-deep-equal "^3.1.3"
+ multicast-dns "^7.2.5"
+
+boolbase@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
+ integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==
+
+boxen@^6.2.1:
+ version "6.2.1"
+ resolved "https://registry.yarnpkg.com/boxen/-/boxen-6.2.1.tgz#b098a2278b2cd2845deef2dff2efc38d329b434d"
+ integrity sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==
+ dependencies:
+ ansi-align "^3.0.1"
+ camelcase "^6.2.0"
+ chalk "^4.1.2"
+ cli-boxes "^3.0.0"
+ string-width "^5.0.1"
+ type-fest "^2.5.0"
+ widest-line "^4.0.1"
+ wrap-ansi "^8.0.1"
+
+boxen@^7.0.0:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/boxen/-/boxen-7.1.1.tgz#f9ba525413c2fec9cdb88987d835c4f7cad9c8f4"
+ integrity sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==
+ dependencies:
+ ansi-align "^3.0.1"
+ camelcase "^7.0.1"
+ chalk "^5.2.0"
+ cli-boxes "^3.0.0"
+ string-width "^5.1.2"
+ type-fest "^2.13.0"
+ widest-line "^4.0.1"
+ wrap-ansi "^8.1.0"
+
+brace-expansion@^1.1.7:
+ version "1.1.11"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
+ integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+ dependencies:
+ balanced-match "^1.0.0"
+ concat-map "0.0.1"
+
+braces@^3.0.3, braces@~3.0.2:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789"
+ integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==
+ dependencies:
+ fill-range "^7.1.1"
+
+browserslist@^4.0.0, browserslist@^4.18.1, browserslist@^4.21.10, browserslist@^4.22.2, browserslist@^4.23.0:
+ version "4.23.1"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.1.tgz#ce4af0534b3d37db5c1a4ca98b9080f985041e96"
+ integrity sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==
+ dependencies:
+ caniuse-lite "^1.0.30001629"
+ electron-to-chromium "^1.4.796"
+ node-releases "^2.0.14"
+ update-browserslist-db "^1.0.16"
+
+buffer-from@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
+ integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
+
+bytes@3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
+ integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==
+
+bytes@3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5"
+ integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==
+
+cacheable-lookup@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz#3476a8215d046e5a3202a9209dd13fec1f933a27"
+ integrity sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==
+
+cacheable-request@^10.2.8:
+ version "10.2.14"
+ resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-10.2.14.tgz#eb915b665fda41b79652782df3f553449c406b9d"
+ integrity sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==
+ dependencies:
+ "@types/http-cache-semantics" "^4.0.2"
+ get-stream "^6.0.1"
+ http-cache-semantics "^4.1.1"
+ keyv "^4.5.3"
+ mimic-response "^4.0.0"
+ normalize-url "^8.0.0"
+ responselike "^3.0.0"
+
+call-bind@^1.0.5, call-bind@^1.0.7:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9"
+ integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==
+ 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"
+
+callsites@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
+ integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
+
+camel-case@^4.1.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a"
+ integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==
+ dependencies:
+ pascal-case "^3.1.2"
+ tslib "^2.0.3"
+
+camelcase@^6.2.0:
+ version "6.3.0"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a"
+ integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==
+
+camelcase@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-7.0.1.tgz#f02e50af9fd7782bc8b88a3558c32fd3a388f048"
+ integrity sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==
+
+caniuse-api@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0"
+ integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==
+ dependencies:
+ browserslist "^4.0.0"
+ caniuse-lite "^1.0.0"
+ lodash.memoize "^4.1.2"
+ lodash.uniq "^4.5.0"
+
+caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001599, caniuse-lite@^1.0.30001629:
+ version "1.0.30001637"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001637.tgz#d9fab531493d9ef46a8ff305e9812190ac463f21"
+ integrity sha512-1x0qRI1mD1o9e+7mBI7XtzFAP4XszbHaVWsMiGbSPLYekKTJF7K+FNk6AsXH4sUpc+qrsI3pVgf1Jdl/uGkuSQ==
+
+ccount@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/ccount/-/ccount-2.0.1.tgz#17a3bf82302e0870d6da43a01311a8bc02a3ecf5"
+ integrity sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==
+
+chalk@^2.4.2:
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
+ integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
+ dependencies:
+ ansi-styles "^3.2.1"
+ escape-string-regexp "^1.0.5"
+ supports-color "^5.3.0"
+
+chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
+ integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
+ dependencies:
+ ansi-styles "^4.1.0"
+ supports-color "^7.1.0"
+
+chalk@^5.0.1, chalk@^5.2.0:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385"
+ integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==
+
+char-regex@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf"
+ integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==
+
+character-entities-html4@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-2.1.0.tgz#1f1adb940c971a4b22ba39ddca6b618dc6e56b2b"
+ integrity sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==
+
+character-entities-legacy@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz#76bc83a90738901d7bc223a9e93759fdd560125b"
+ integrity sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==
+
+character-entities@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-2.0.2.tgz#2d09c2e72cd9523076ccb21157dff66ad43fcc22"
+ integrity sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==
+
+character-reference-invalid@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz#85c66b041e43b47210faf401278abf808ac45cb9"
+ integrity sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==
+
+cheerio-select@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-2.1.0.tgz#4d8673286b8126ca2a8e42740d5e3c4884ae21b4"
+ integrity sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==
+ dependencies:
+ boolbase "^1.0.0"
+ css-select "^5.1.0"
+ css-what "^6.1.0"
+ domelementtype "^2.3.0"
+ domhandler "^5.0.3"
+ domutils "^3.0.1"
+
+cheerio@^1.0.0-rc.12:
+ version "1.0.0-rc.12"
+ resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.12.tgz#788bf7466506b1c6bf5fae51d24a2c4d62e47683"
+ integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==
+ dependencies:
+ cheerio-select "^2.1.0"
+ dom-serializer "^2.0.0"
+ domhandler "^5.0.3"
+ domutils "^3.0.1"
+ htmlparser2 "^8.0.1"
+ parse5 "^7.0.0"
+ parse5-htmlparser2-tree-adapter "^7.0.0"
+
+chokidar@^3.4.2, chokidar@^3.5.3:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b"
+ integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==
+ 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"
+ optionalDependencies:
+ fsevents "~2.3.2"
+
+chrome-trace-event@^1.0.2:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz#05bffd7ff928465093314708c93bdfa9bd1f0f5b"
+ integrity sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==
+
+ci-info@^3.2.0:
+ version "3.9.0"
+ resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4"
+ integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==
+
+clean-css@^5.2.2, clean-css@^5.3.2, clean-css@~5.3.2:
+ version "5.3.3"
+ resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.3.tgz#b330653cd3bd6b75009cc25c714cae7b93351ccd"
+ integrity sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==
+ dependencies:
+ source-map "~0.6.0"
+
+clean-stack@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b"
+ integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==
+
+cli-boxes@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-3.0.0.tgz#71a10c716feeba005e4504f36329ef0b17cf3145"
+ integrity sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==
+
+cli-table3@^0.6.3:
+ version "0.6.5"
+ resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.5.tgz#013b91351762739c16a9567c21a04632e449bf2f"
+ integrity sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==
+ dependencies:
+ string-width "^4.2.0"
+ optionalDependencies:
+ "@colors/colors" "1.5.0"
+
+clone-deep@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387"
+ integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==
+ dependencies:
+ is-plain-object "^2.0.4"
+ kind-of "^6.0.2"
+ shallow-clone "^3.0.0"
+
+clsx@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12"
+ integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==
+
+clsx@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.1.tgz#eed397c9fd8bd882bfb18deab7102049a2f32999"
+ integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==
+
+collapse-white-space@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-2.1.0.tgz#640257174f9f42c740b40f3b55ee752924feefca"
+ integrity sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==
+
+color-convert@^1.9.0:
+ version "1.9.3"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
+ integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
+ dependencies:
+ color-name "1.1.3"
+
+color-convert@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
+ integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
+ dependencies:
+ color-name "~1.1.4"
+
+color-name@1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
+ integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
+
+color-name@~1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
+ integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+
+colord@^2.9.3:
+ version "2.9.3"
+ resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43"
+ integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==
+
+colorette@^2.0.10:
+ version "2.0.20"
+ resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a"
+ integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==
+
+combine-promises@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/combine-promises/-/combine-promises-1.2.0.tgz#5f2e68451862acf85761ded4d9e2af7769c2ca6a"
+ integrity sha512-VcQB1ziGD0NXrhKxiwyNbCDmRzs/OShMs2GqW2DlU2A/Sd0nQxE1oWDAE5O0ygSx5mgQOn9eIFh7yKPgFRVkPQ==
+
+combined-stream@^1.0.8:
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
+ integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
+ dependencies:
+ delayed-stream "~1.0.0"
+
+comma-separated-tokens@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz#4e89c9458acb61bc8fef19f4529973b2392839ee"
+ integrity sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==
+
+commander@^10.0.0:
+ version "10.0.1"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06"
+ integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==
+
+commander@^2.20.0:
+ version "2.20.3"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
+ integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
+
+commander@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae"
+ integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==
+
+commander@^7.2.0:
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
+ integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==
+
+commander@^8.3.0:
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66"
+ integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==
+
+common-path-prefix@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0"
+ integrity sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==
+
+compressible@~2.0.16:
+ version "2.0.18"
+ resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba"
+ integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==
+ dependencies:
+ mime-db ">= 1.43.0 < 2"
+
+compression@^1.7.4:
+ version "1.7.4"
+ resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f"
+ integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==
+ dependencies:
+ accepts "~1.3.5"
+ bytes "3.0.0"
+ compressible "~2.0.16"
+ debug "2.6.9"
+ on-headers "~1.0.2"
+ safe-buffer "5.1.2"
+ vary "~1.1.2"
+
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+ integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
+
+config-chain@^1.1.11:
+ version "1.1.13"
+ resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4"
+ integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==
+ dependencies:
+ ini "^1.3.4"
+ proto-list "~1.2.1"
+
+configstore@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/configstore/-/configstore-6.0.0.tgz#49eca2ebc80983f77e09394a1a56e0aca8235566"
+ integrity sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==
+ dependencies:
+ dot-prop "^6.0.1"
+ graceful-fs "^4.2.6"
+ unique-string "^3.0.0"
+ write-file-atomic "^3.0.3"
+ xdg-basedir "^5.0.1"
+
+connect-history-api-fallback@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8"
+ integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==
+
+consola@^2.15.3:
+ version "2.15.3"
+ resolved "https://registry.yarnpkg.com/consola/-/consola-2.15.3.tgz#2e11f98d6a4be71ff72e0bdf07bd23e12cb61550"
+ integrity sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==
+
+content-disposition@0.5.2:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4"
+ integrity sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==
+
+content-disposition@0.5.4:
+ version "0.5.4"
+ resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe"
+ integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==
+ dependencies:
+ safe-buffer "5.2.1"
+
+content-type@~1.0.4, content-type@~1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918"
+ integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==
+
+convert-source-map@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a"
+ integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==
+
+cookie-signature@1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
+ integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==
+
+cookie@0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051"
+ integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==
+
+copy-text-to-clipboard@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.0.tgz#0202b2d9bdae30a49a53f898626dcc3b49ad960b"
+ integrity sha512-RnJFp1XR/LOBDckxTib5Qjr/PMfkatD0MUCQgdpqS8MdKiNUzBjAQBEN6oUy+jW7LI93BBG3DtMB2KOOKpGs2Q==
+
+copy-webpack-plugin@^11.0.0:
+ version "11.0.0"
+ resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz#96d4dbdb5f73d02dd72d0528d1958721ab72e04a"
+ integrity sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==
+ dependencies:
+ fast-glob "^3.2.11"
+ glob-parent "^6.0.1"
+ globby "^13.1.1"
+ normalize-path "^3.0.0"
+ schema-utils "^4.0.0"
+ serialize-javascript "^6.0.0"
+
+core-js-compat@^3.31.0, core-js-compat@^3.36.1:
+ version "3.37.1"
+ resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.37.1.tgz#c844310c7852f4bdf49b8d339730b97e17ff09ee"
+ integrity sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==
+ dependencies:
+ browserslist "^4.23.0"
+
+core-js-pure@^3.30.2:
+ version "3.37.1"
+ resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.37.1.tgz#2b4b34281f54db06c9a9a5bd60105046900553bd"
+ integrity sha512-J/r5JTHSmzTxbiYYrzXg9w1VpqrYt+gexenBE9pugeyhwPZTAEJddyiReJWsLO6uNQ8xJZFbod6XC7KKwatCiA==
+
+core-js@^3.31.1:
+ version "3.37.1"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.37.1.tgz#d21751ddb756518ac5a00e4d66499df981a62db9"
+ integrity sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw==
+
+core-util-is@~1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85"
+ integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==
+
+cosmiconfig@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982"
+ integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==
+ dependencies:
+ "@types/parse-json" "^4.0.0"
+ import-fresh "^3.1.0"
+ parse-json "^5.0.0"
+ path-type "^4.0.0"
+ yaml "^1.7.2"
+
+cosmiconfig@^8.1.3, cosmiconfig@^8.3.5:
+ version "8.3.6"
+ resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3"
+ integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==
+ dependencies:
+ import-fresh "^3.3.0"
+ js-yaml "^4.1.0"
+ parse-json "^5.2.0"
+ path-type "^4.0.0"
+
+cross-spawn@^7.0.3:
+ version "7.0.3"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
+ integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
+ dependencies:
+ path-key "^3.1.0"
+ shebang-command "^2.0.0"
+ which "^2.0.1"
+
+crypto-random-string@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-4.0.0.tgz#5a3cc53d7dd86183df5da0312816ceeeb5bb1fc2"
+ integrity sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==
+ dependencies:
+ type-fest "^1.0.1"
+
+css-declaration-sorter@^7.2.0:
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz#6dec1c9523bc4a643e088aab8f09e67a54961024"
+ integrity sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==
+
+css-loader@^6.8.1:
+ version "6.11.0"
+ resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.11.0.tgz#33bae3bf6363d0a7c2cf9031c96c744ff54d85ba"
+ integrity sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==
+ dependencies:
+ icss-utils "^5.1.0"
+ postcss "^8.4.33"
+ postcss-modules-extract-imports "^3.1.0"
+ postcss-modules-local-by-default "^4.0.5"
+ postcss-modules-scope "^3.2.0"
+ postcss-modules-values "^4.0.0"
+ postcss-value-parser "^4.2.0"
+ semver "^7.5.4"
+
+css-minimizer-webpack-plugin@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-5.0.1.tgz#33effe662edb1a0bf08ad633c32fa75d0f7ec565"
+ integrity sha512-3caImjKFQkS+ws1TGcFn0V1HyDJFq1Euy589JlD6/3rV2kj+w7r5G9WDMgSHvpvXHNZ2calVypZWuEDQd9wfLg==
+ dependencies:
+ "@jridgewell/trace-mapping" "^0.3.18"
+ cssnano "^6.0.1"
+ jest-worker "^29.4.3"
+ postcss "^8.4.24"
+ schema-utils "^4.0.1"
+ serialize-javascript "^6.0.1"
+
+css-select@^4.1.3:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b"
+ integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==
+ dependencies:
+ boolbase "^1.0.0"
+ css-what "^6.0.1"
+ domhandler "^4.3.1"
+ domutils "^2.8.0"
+ nth-check "^2.0.1"
+
+css-select@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6"
+ integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==
+ dependencies:
+ boolbase "^1.0.0"
+ css-what "^6.1.0"
+ domhandler "^5.0.2"
+ domutils "^3.0.1"
+ nth-check "^2.0.1"
+
+css-tree@^2.3.1:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.3.1.tgz#10264ce1e5442e8572fc82fbe490644ff54b5c20"
+ integrity sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==
+ dependencies:
+ mdn-data "2.0.30"
+ source-map-js "^1.0.1"
+
+css-tree@~2.2.0:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.2.1.tgz#36115d382d60afd271e377f9c5f67d02bd48c032"
+ integrity sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==
+ dependencies:
+ mdn-data "2.0.28"
+ source-map-js "^1.0.1"
+
+css-what@^6.0.1, css-what@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4"
+ integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==
+
+cssesc@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
+ integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==
+
+cssnano-preset-advanced@^6.1.2:
+ version "6.1.2"
+ resolved "https://registry.yarnpkg.com/cssnano-preset-advanced/-/cssnano-preset-advanced-6.1.2.tgz#82b090872b8f98c471f681d541c735acf8b94d3f"
+ integrity sha512-Nhao7eD8ph2DoHolEzQs5CfRpiEP0xa1HBdnFZ82kvqdmbwVBUr2r1QuQ4t1pi+D1ZpqpcO4T+wy/7RxzJ/WPQ==
+ dependencies:
+ autoprefixer "^10.4.19"
+ browserslist "^4.23.0"
+ cssnano-preset-default "^6.1.2"
+ postcss-discard-unused "^6.0.5"
+ postcss-merge-idents "^6.0.3"
+ postcss-reduce-idents "^6.0.3"
+ postcss-zindex "^6.0.2"
+
+cssnano-preset-default@^6.1.2:
+ version "6.1.2"
+ resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-6.1.2.tgz#adf4b89b975aa775f2750c89dbaf199bbd9da35e"
+ integrity sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg==
+ dependencies:
+ browserslist "^4.23.0"
+ css-declaration-sorter "^7.2.0"
+ cssnano-utils "^4.0.2"
+ postcss-calc "^9.0.1"
+ postcss-colormin "^6.1.0"
+ postcss-convert-values "^6.1.0"
+ postcss-discard-comments "^6.0.2"
+ postcss-discard-duplicates "^6.0.3"
+ postcss-discard-empty "^6.0.3"
+ postcss-discard-overridden "^6.0.2"
+ postcss-merge-longhand "^6.0.5"
+ postcss-merge-rules "^6.1.1"
+ postcss-minify-font-values "^6.1.0"
+ postcss-minify-gradients "^6.0.3"
+ postcss-minify-params "^6.1.0"
+ postcss-minify-selectors "^6.0.4"
+ postcss-normalize-charset "^6.0.2"
+ postcss-normalize-display-values "^6.0.2"
+ postcss-normalize-positions "^6.0.2"
+ postcss-normalize-repeat-style "^6.0.2"
+ postcss-normalize-string "^6.0.2"
+ postcss-normalize-timing-functions "^6.0.2"
+ postcss-normalize-unicode "^6.1.0"
+ postcss-normalize-url "^6.0.2"
+ postcss-normalize-whitespace "^6.0.2"
+ postcss-ordered-values "^6.0.2"
+ postcss-reduce-initial "^6.1.0"
+ postcss-reduce-transforms "^6.0.2"
+ postcss-svgo "^6.0.3"
+ postcss-unique-selectors "^6.0.4"
+
+cssnano-utils@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-4.0.2.tgz#56f61c126cd0f11f2eef1596239d730d9fceff3c"
+ integrity sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ==
+
+cssnano@^6.0.1, cssnano@^6.1.2:
+ version "6.1.2"
+ resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-6.1.2.tgz#4bd19e505bd37ee7cf0dc902d3d869f6d79c66b8"
+ integrity sha512-rYk5UeX7VAM/u0lNqewCdasdtPK81CgX8wJFLEIXHbV2oldWRgJAsZrdhRXkV1NJzA2g850KiFm9mMU2HxNxMA==
+ dependencies:
+ cssnano-preset-default "^6.1.2"
+ lilconfig "^3.1.1"
+
+csso@^5.0.5:
+ version "5.0.5"
+ resolved "https://registry.yarnpkg.com/csso/-/csso-5.0.5.tgz#f9b7fe6cc6ac0b7d90781bb16d5e9874303e2ca6"
+ integrity sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==
+ dependencies:
+ css-tree "~2.2.0"
+
+csstype@^3.0.2:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81"
+ integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==
+
+debounce@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.1.tgz#38881d8f4166a5c5848020c11827b834bcb3e0a5"
+ integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==
+
+debug@2.6.9, debug@^2.6.0:
+ version "2.6.9"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
+ integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
+ dependencies:
+ ms "2.0.0"
+
+debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1:
+ version "4.3.5"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.5.tgz#e83444eceb9fedd4a1da56d671ae2446a01a6e1e"
+ integrity sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==
+ dependencies:
+ ms "2.1.2"
+
+decode-named-character-reference@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz#daabac9690874c394c81e4162a0304b35d824f0e"
+ integrity sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==
+ dependencies:
+ character-entities "^2.0.0"
+
+decompress-response@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc"
+ integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==
+ dependencies:
+ mimic-response "^3.1.0"
+
+deep-extend@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
+ integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
+
+deepmerge@^4.2.2, deepmerge@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a"
+ integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==
+
+default-gateway@^6.0.3:
+ version "6.0.3"
+ resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-6.0.3.tgz#819494c888053bdb743edbf343d6cdf7f2943a71"
+ integrity sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==
+ dependencies:
+ execa "^5.0.0"
+
+defer-to-connect@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587"
+ integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==
+
+define-data-property@^1.0.1, define-data-property@^1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e"
+ integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==
+ dependencies:
+ es-define-property "^1.0.0"
+ es-errors "^1.3.0"
+ gopd "^1.0.1"
+
+define-lazy-prop@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f"
+ integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==
+
+define-properties@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c"
+ integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==
+ dependencies:
+ define-data-property "^1.0.1"
+ has-property-descriptors "^1.0.0"
+ object-keys "^1.1.1"
+
+del@^6.1.1:
+ version "6.1.1"
+ resolved "https://registry.yarnpkg.com/del/-/del-6.1.1.tgz#3b70314f1ec0aa325c6b14eb36b95786671edb7a"
+ integrity sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==
+ dependencies:
+ globby "^11.0.1"
+ graceful-fs "^4.2.4"
+ is-glob "^4.0.1"
+ is-path-cwd "^2.2.0"
+ is-path-inside "^3.0.2"
+ p-map "^4.0.0"
+ rimraf "^3.0.2"
+ slash "^3.0.0"
+
+delayed-stream@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+ integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
+
+depd@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df"
+ integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==
+
+depd@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
+ integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==
+
+dequal@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be"
+ integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==
+
+destroy@1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015"
+ integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==
+
+detect-node@^2.0.4:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1"
+ integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==
+
+detect-port-alt@^1.1.6:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/detect-port-alt/-/detect-port-alt-1.1.6.tgz#24707deabe932d4a3cf621302027c2b266568275"
+ integrity sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==
+ dependencies:
+ address "^1.0.1"
+ debug "^2.6.0"
+
+detect-port@^1.5.1:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.6.1.tgz#45e4073997c5f292b957cb678fb0bb8ed4250a67"
+ integrity sha512-CmnVc+Hek2egPx1PeTFVta2W78xy2K/9Rkf6cC4T59S50tVnzKj+tnx5mmx5lwvCkujZ4uRrpRSuV+IVs3f90Q==
+ dependencies:
+ address "^1.0.1"
+ debug "4"
+
+devlop@^1.0.0, devlop@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/devlop/-/devlop-1.1.0.tgz#4db7c2ca4dc6e0e834c30be70c94bbc976dc7018"
+ integrity sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==
+ dependencies:
+ dequal "^2.0.0"
+
+dir-glob@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
+ integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==
+ dependencies:
+ path-type "^4.0.0"
+
+dns-packet@^5.2.2:
+ version "5.6.1"
+ resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.6.1.tgz#ae888ad425a9d1478a0674256ab866de1012cf2f"
+ integrity sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==
+ dependencies:
+ "@leichtgewicht/ip-codec" "^2.0.1"
+
+docusaurus-theme-search-typesense@^0.20.0-0:
+ version "0.20.0"
+ resolved "https://registry.yarnpkg.com/docusaurus-theme-search-typesense/-/docusaurus-theme-search-typesense-0.20.0.tgz#e7ee5fff28ecab8f0f143f5fca38f05ca705e046"
+ integrity sha512-ESzngK32c+fY40uT9L0Nq0bH1luHk2DjBeUCWHjGMZ2Y7/AFgBII8SZMkzsSqkGFIEh3tM/80g4uNobQhYgCqA==
+ dependencies:
+ "@docusaurus/logger" "3.4.0"
+ "@docusaurus/plugin-content-docs" "3.4.0"
+ "@docusaurus/theme-translations" "3.4.0"
+ "@docusaurus/utils" "3.4.0"
+ "@docusaurus/utils-validation" "3.4.0"
+ algoliasearch-helper "^3.10.0"
+ clsx "^1.2.1"
+ eta "^2.0.0"
+ fs-extra "^10.1.0"
+ lodash "^4.17.21"
+ tslib "^2.4.0"
+ typesense-docsearch-react "^3.4.1"
+ typesense-instantsearch-adapter "^2.7.1"
+ utility-types "^3.10.0"
+
+dom-converter@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768"
+ integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==
+ dependencies:
+ utila "~0.4"
+
+dom-serializer@^1.0.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30"
+ integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==
+ dependencies:
+ domelementtype "^2.0.1"
+ domhandler "^4.2.0"
+ entities "^2.0.0"
+
+dom-serializer@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53"
+ integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==
+ dependencies:
+ domelementtype "^2.3.0"
+ domhandler "^5.0.2"
+ entities "^4.2.0"
+
+domelementtype@^2.0.1, domelementtype@^2.2.0, domelementtype@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d"
+ integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==
+
+domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c"
+ integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==
+ dependencies:
+ domelementtype "^2.2.0"
+
+domhandler@^5.0.2, domhandler@^5.0.3:
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31"
+ integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==
+ dependencies:
+ domelementtype "^2.3.0"
+
+domutils@^2.5.2, domutils@^2.8.0:
+ version "2.8.0"
+ resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135"
+ integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==
+ dependencies:
+ dom-serializer "^1.0.1"
+ domelementtype "^2.2.0"
+ domhandler "^4.2.0"
+
+domutils@^3.0.1:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e"
+ integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==
+ dependencies:
+ dom-serializer "^2.0.0"
+ domelementtype "^2.3.0"
+ domhandler "^5.0.3"
+
+dot-case@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751"
+ integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==
+ dependencies:
+ no-case "^3.0.4"
+ tslib "^2.0.3"
+
+dot-prop@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-6.0.1.tgz#fc26b3cf142b9e59b74dbd39ed66ce620c681083"
+ integrity sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==
+ dependencies:
+ is-obj "^2.0.0"
+
+duplexer@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6"
+ integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==
+
+eastasianwidth@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb"
+ integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==
+
+ee-first@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
+ integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==
+
+electron-to-chromium@^1.4.796:
+ version "1.4.812"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.812.tgz#21b78709c5a13af5d5c688d135a22dcea7617acf"
+ integrity sha512-7L8fC2Ey/b6SePDFKR2zHAy4mbdp1/38Yk5TsARO66W3hC5KEaeKMMHoxwtuH+jcu2AYLSn9QX04i95t6Fl1Hg==
+
+emoji-regex@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
+ integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
+
+emoji-regex@^9.2.2:
+ version "9.2.2"
+ resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72"
+ integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==
+
+emojilib@^2.4.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/emojilib/-/emojilib-2.4.0.tgz#ac518a8bb0d5f76dda57289ccb2fdf9d39ae721e"
+ integrity sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==
+
+emojis-list@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78"
+ integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==
+
+emoticon@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/emoticon/-/emoticon-4.0.1.tgz#2d2bbbf231ce3a5909e185bbb64a9da703a1e749"
+ integrity sha512-dqx7eA9YaqyvYtUhJwT4rC1HIp82j5ybS1/vQ42ur+jBe17dJMwZE4+gvL1XadSFfxaPFFGt3Xsw+Y8akThDlw==
+
+encodeurl@~1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
+ integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==
+
+enhanced-resolve@^5.17.0:
+ version "5.17.0"
+ resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz#d037603789dd9555b89aaec7eb78845c49089bc5"
+ integrity sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==
+ dependencies:
+ graceful-fs "^4.2.4"
+ tapable "^2.2.0"
+
+entities@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55"
+ integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==
+
+entities@^4.2.0, entities@^4.4.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48"
+ integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==
+
+error-ex@^1.3.1:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
+ integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
+ dependencies:
+ is-arrayish "^0.2.1"
+
+es-define-property@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845"
+ integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==
+ dependencies:
+ get-intrinsic "^1.2.4"
+
+es-errors@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f"
+ integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==
+
+es-module-lexer@^1.2.1:
+ version "1.5.4"
+ resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.5.4.tgz#a8efec3a3da991e60efa6b633a7cad6ab8d26b78"
+ integrity sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==
+
+escalade@^3.1.1, escalade@^3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27"
+ integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==
+
+escape-goat@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-4.0.0.tgz#9424820331b510b0666b98f7873fe11ac4aa8081"
+ integrity sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==
+
+escape-html@^1.0.3, escape-html@~1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
+ integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==
+
+escape-string-regexp@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+ integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==
+
+escape-string-regexp@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
+ integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
+
+escape-string-regexp@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8"
+ integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==
+
+eslint-scope@5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c"
+ integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==
+ dependencies:
+ esrecurse "^4.3.0"
+ estraverse "^4.1.1"
+
+esprima@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
+ integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
+
+esrecurse@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
+ integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
+ dependencies:
+ estraverse "^5.2.0"
+
+estraverse@^4.1.1:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
+ integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
+
+estraverse@^5.2.0:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123"
+ integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
+
+estree-util-attach-comments@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz#344bde6a64c8a31d15231e5ee9e297566a691c2d"
+ integrity sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==
+ dependencies:
+ "@types/estree" "^1.0.0"
+
+estree-util-build-jsx@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz#b6d0bced1dcc4f06f25cf0ceda2b2dcaf98168f1"
+ integrity sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==
+ dependencies:
+ "@types/estree-jsx" "^1.0.0"
+ devlop "^1.0.0"
+ estree-util-is-identifier-name "^3.0.0"
+ estree-walker "^3.0.0"
+
+estree-util-is-identifier-name@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz#0b5ef4c4ff13508b34dcd01ecfa945f61fce5dbd"
+ integrity sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==
+
+estree-util-to-js@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz#10a6fb924814e6abb62becf0d2bc4dea51d04f17"
+ integrity sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==
+ dependencies:
+ "@types/estree-jsx" "^1.0.0"
+ astring "^1.8.0"
+ source-map "^0.7.0"
+
+estree-util-value-to-estree@^3.0.1:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/estree-util-value-to-estree/-/estree-util-value-to-estree-3.1.2.tgz#d2f0e5d350a6c181673eb7299743325b86a9bf5c"
+ integrity sha512-S0gW2+XZkmsx00tU2uJ4L9hUT7IFabbml9pHh2WQqFmAbxit++YGZne0sKJbNwkj9Wvg9E4uqWl4nCIFQMmfag==
+ dependencies:
+ "@types/estree" "^1.0.0"
+
+estree-util-visit@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/estree-util-visit/-/estree-util-visit-2.0.0.tgz#13a9a9f40ff50ed0c022f831ddf4b58d05446feb"
+ integrity sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==
+ dependencies:
+ "@types/estree-jsx" "^1.0.0"
+ "@types/unist" "^3.0.0"
+
+estree-walker@^3.0.0:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-3.0.3.tgz#67c3e549ec402a487b4fc193d1953a524752340d"
+ integrity sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==
+ dependencies:
+ "@types/estree" "^1.0.0"
+
+esutils@^2.0.2:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
+ integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
+
+eta@^2.0.0, eta@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/eta/-/eta-2.2.0.tgz#eb8b5f8c4e8b6306561a455e62cd7492fe3a9b8a"
+ integrity sha512-UVQ72Rqjy/ZKQalzV5dCCJP80GrmPrMxh6NlNf+erV6ObL0ZFkhCstWRawS85z3smdr3d2wXPsZEY7rDPfGd2g==
+
+etag@~1.8.1:
+ version "1.8.1"
+ resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
+ integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==
+
+eval@^0.1.8:
+ version "0.1.8"
+ resolved "https://registry.yarnpkg.com/eval/-/eval-0.1.8.tgz#2b903473b8cc1d1989b83a1e7923f883eb357f85"
+ integrity sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==
+ dependencies:
+ "@types/node" "*"
+ require-like ">= 0.1.1"
+
+eventemitter3@^4.0.0:
+ version "4.0.7"
+ resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f"
+ integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==
+
+events@^3.2.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400"
+ integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==
+
+execa@^5.0.0:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd"
+ integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==
+ 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"
+
+express@^4.17.3:
+ version "4.19.2"
+ resolved "https://registry.yarnpkg.com/express/-/express-4.19.2.tgz#e25437827a3aa7f2a827bc8171bbbb664a356465"
+ integrity sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==
+ dependencies:
+ accepts "~1.3.8"
+ array-flatten "1.1.1"
+ body-parser "1.20.2"
+ content-disposition "0.5.4"
+ content-type "~1.0.4"
+ cookie "0.6.0"
+ cookie-signature "1.0.6"
+ debug "2.6.9"
+ depd "2.0.0"
+ encodeurl "~1.0.2"
+ escape-html "~1.0.3"
+ etag "~1.8.1"
+ finalhandler "1.2.0"
+ fresh "0.5.2"
+ http-errors "2.0.0"
+ merge-descriptors "1.0.1"
+ methods "~1.1.2"
+ on-finished "2.4.1"
+ parseurl "~1.3.3"
+ path-to-regexp "0.1.7"
+ proxy-addr "~2.0.7"
+ qs "6.11.0"
+ range-parser "~1.2.1"
+ safe-buffer "5.2.1"
+ send "0.18.0"
+ serve-static "1.15.0"
+ setprototypeof "1.2.0"
+ statuses "2.0.1"
+ type-is "~1.6.18"
+ utils-merge "1.0.1"
+ vary "~1.1.2"
+
+extend-shallow@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
+ integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==
+ dependencies:
+ is-extendable "^0.1.0"
+
+extend@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
+ integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
+
+fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
+ integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
+
+fast-glob@^3.2.11, fast-glob@^3.2.9, fast-glob@^3.3.0:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129"
+ integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==
+ 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"
+
+fast-json-stable-stringify@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
+ integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
+
+fast-url-parser@1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/fast-url-parser/-/fast-url-parser-1.1.3.tgz#f4af3ea9f34d8a271cf58ad2b3759f431f0b318d"
+ integrity sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==
+ dependencies:
+ punycode "^1.3.2"
+
+fastq@^1.6.0:
+ version "1.17.1"
+ resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47"
+ integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==
+ dependencies:
+ reusify "^1.0.4"
+
+fault@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/fault/-/fault-2.0.1.tgz#d47ca9f37ca26e4bd38374a7c500b5a384755b6c"
+ integrity sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==
+ dependencies:
+ format "^0.2.0"
+
+faye-websocket@^0.11.3:
+ version "0.11.4"
+ resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da"
+ integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==
+ dependencies:
+ websocket-driver ">=0.5.1"
+
+feed@^4.2.2:
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/feed/-/feed-4.2.2.tgz#865783ef6ed12579e2c44bbef3c9113bc4956a7e"
+ integrity sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==
+ dependencies:
+ xml-js "^1.6.11"
+
+file-loader@^6.2.0:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d"
+ integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==
+ dependencies:
+ loader-utils "^2.0.0"
+ schema-utils "^3.0.0"
+
+filesize@^8.0.6:
+ version "8.0.7"
+ resolved "https://registry.yarnpkg.com/filesize/-/filesize-8.0.7.tgz#695e70d80f4e47012c132d57a059e80c6b580bd8"
+ integrity sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==
+
+fill-range@^7.1.1:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292"
+ integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==
+ dependencies:
+ to-regex-range "^5.0.1"
+
+finalhandler@1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32"
+ integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==
+ dependencies:
+ debug "2.6.9"
+ encodeurl "~1.0.2"
+ escape-html "~1.0.3"
+ on-finished "2.4.1"
+ parseurl "~1.3.3"
+ statuses "2.0.1"
+ unpipe "~1.0.0"
+
+find-cache-dir@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-4.0.0.tgz#a30ee0448f81a3990708f6453633c733e2f6eec2"
+ integrity sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==
+ dependencies:
+ common-path-prefix "^3.0.0"
+ pkg-dir "^7.0.0"
+
+find-up@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
+ integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==
+ dependencies:
+ locate-path "^3.0.0"
+
+find-up@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc"
+ integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==
+ dependencies:
+ locate-path "^6.0.0"
+ path-exists "^4.0.0"
+
+find-up@^6.3.0:
+ version "6.3.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-6.3.0.tgz#2abab3d3280b2dc7ac10199ef324c4e002c8c790"
+ integrity sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==
+ dependencies:
+ locate-path "^7.1.0"
+ path-exists "^5.0.0"
+
+flat@^5.0.2:
+ version "5.0.2"
+ resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241"
+ integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==
+
+follow-redirects@^1.0.0, follow-redirects@^1.15.6:
+ version "1.15.6"
+ resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b"
+ integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==
+
+fork-ts-checker-webpack-plugin@^6.5.0:
+ version "6.5.3"
+ resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz#eda2eff6e22476a2688d10661688c47f611b37f3"
+ integrity sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==
+ dependencies:
+ "@babel/code-frame" "^7.8.3"
+ "@types/json-schema" "^7.0.5"
+ chalk "^4.1.0"
+ chokidar "^3.4.2"
+ cosmiconfig "^6.0.0"
+ deepmerge "^4.2.2"
+ fs-extra "^9.0.0"
+ glob "^7.1.6"
+ memfs "^3.1.2"
+ minimatch "^3.0.4"
+ schema-utils "2.7.0"
+ semver "^7.3.2"
+ tapable "^1.0.0"
+
+form-data-encoder@^2.1.2:
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-2.1.4.tgz#261ea35d2a70d48d30ec7a9603130fa5515e9cd5"
+ integrity sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==
+
+form-data@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
+ integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.8"
+ mime-types "^2.1.12"
+
+format@^0.2.0:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/format/-/format-0.2.2.tgz#d6170107e9efdc4ed30c9dc39016df942b5cb58b"
+ integrity sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==
+
+forwarded@0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811"
+ integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==
+
+fraction.js@^4.3.7:
+ version "4.3.7"
+ resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7"
+ integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==
+
+fresh@0.5.2:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
+ integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==
+
+fs-extra@^10.1.0:
+ version "10.1.0"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf"
+ integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==
+ dependencies:
+ graceful-fs "^4.2.0"
+ jsonfile "^6.0.1"
+ universalify "^2.0.0"
+
+fs-extra@^11.1.1, fs-extra@^11.2.0:
+ version "11.2.0"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b"
+ integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==
+ dependencies:
+ graceful-fs "^4.2.0"
+ jsonfile "^6.0.1"
+ universalify "^2.0.0"
+
+fs-extra@^9.0.0:
+ version "9.1.0"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d"
+ integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==
+ dependencies:
+ at-least-node "^1.0.0"
+ graceful-fs "^4.2.0"
+ jsonfile "^6.0.1"
+ universalify "^2.0.0"
+
+fs-monkey@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.6.tgz#8ead082953e88d992cf3ff844faa907b26756da2"
+ integrity sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==
+
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+ integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
+
+fsevents@~2.3.2:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
+ integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
+
+function-bind@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c"
+ integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==
+
+gensync@^1.0.0-beta.2:
+ version "1.0.0-beta.2"
+ resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
+ integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
+
+get-intrinsic@^1.1.3, get-intrinsic@^1.2.4:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd"
+ integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==
+ 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"
+
+get-own-enumerable-property-symbols@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664"
+ integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==
+
+get-stream@^6.0.0, get-stream@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7"
+ integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==
+
+github-slugger@^1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.5.0.tgz#17891bbc73232051474d68bd867a34625c955f7d"
+ integrity sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==
+
+glob-parent@^5.1.2, glob-parent@~5.1.2:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
+ integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
+ dependencies:
+ is-glob "^4.0.1"
+
+glob-parent@^6.0.1:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3"
+ integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==
+ dependencies:
+ is-glob "^4.0.3"
+
+glob-to-regexp@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e"
+ integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==
+
+glob@^7.0.0, glob@^7.1.3, glob@^7.1.6:
+ version "7.2.3"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
+ integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
+ 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"
+
+global-dirs@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.1.tgz#0c488971f066baceda21447aecb1a8b911d22485"
+ integrity sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==
+ dependencies:
+ ini "2.0.0"
+
+global-modules@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780"
+ integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==
+ dependencies:
+ global-prefix "^3.0.0"
+
+global-prefix@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97"
+ integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==
+ dependencies:
+ ini "^1.3.5"
+ kind-of "^6.0.2"
+ which "^1.3.1"
+
+globals@^11.1.0:
+ version "11.12.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
+ integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
+
+globby@^11.0.1, globby@^11.0.4, globby@^11.1.0:
+ version "11.1.0"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b"
+ integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==
+ 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"
+
+globby@^13.1.1:
+ version "13.2.2"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-13.2.2.tgz#63b90b1bf68619c2135475cbd4e71e66aa090592"
+ integrity sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==
+ dependencies:
+ dir-glob "^3.0.1"
+ fast-glob "^3.3.0"
+ ignore "^5.2.4"
+ merge2 "^1.4.1"
+ slash "^4.0.0"
+
+gopd@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c"
+ integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==
+ dependencies:
+ get-intrinsic "^1.1.3"
+
+got@^12.1.0:
+ version "12.6.1"
+ resolved "https://registry.yarnpkg.com/got/-/got-12.6.1.tgz#8869560d1383353204b5a9435f782df9c091f549"
+ integrity sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==
+ dependencies:
+ "@sindresorhus/is" "^5.2.0"
+ "@szmarczak/http-timer" "^5.0.1"
+ cacheable-lookup "^7.0.0"
+ cacheable-request "^10.2.8"
+ decompress-response "^6.0.0"
+ form-data-encoder "^2.1.2"
+ get-stream "^6.0.1"
+ http2-wrapper "^2.1.10"
+ lowercase-keys "^3.0.0"
+ p-cancelable "^3.0.0"
+ responselike "^3.0.0"
+
+graceful-fs@4.2.10:
+ version "4.2.10"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c"
+ integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==
+
+graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9:
+ version "4.2.11"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
+ integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
+
+gray-matter@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-4.0.3.tgz#e893c064825de73ea1f5f7d88c7a9f7274288798"
+ integrity sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==
+ dependencies:
+ js-yaml "^3.13.1"
+ kind-of "^6.0.2"
+ section-matter "^1.0.0"
+ strip-bom-string "^1.0.0"
+
+gzip-size@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462"
+ integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==
+ dependencies:
+ duplexer "^0.1.2"
+
+handle-thing@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e"
+ integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==
+
+has-flag@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
+ integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==
+
+has-flag@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
+ integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
+
+has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854"
+ integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==
+ dependencies:
+ es-define-property "^1.0.0"
+
+has-proto@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd"
+ integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==
+
+has-symbols@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
+ integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
+
+has-yarn@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-3.0.0.tgz#c3c21e559730d1d3b57e28af1f30d06fac38147d"
+ integrity sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA==
+
+hasown@^2.0.0, hasown@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003"
+ integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==
+ dependencies:
+ function-bind "^1.1.2"
+
+hast-util-from-parse5@^8.0.0:
+ version "8.0.1"
+ resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-8.0.1.tgz#654a5676a41211e14ee80d1b1758c399a0327651"
+ integrity sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==
+ dependencies:
+ "@types/hast" "^3.0.0"
+ "@types/unist" "^3.0.0"
+ devlop "^1.0.0"
+ hastscript "^8.0.0"
+ property-information "^6.0.0"
+ vfile "^6.0.0"
+ vfile-location "^5.0.0"
+ web-namespaces "^2.0.0"
+
+hast-util-parse-selector@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz#352879fa86e25616036037dd8931fb5f34cb4a27"
+ integrity sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==
+ dependencies:
+ "@types/hast" "^3.0.0"
+
+hast-util-raw@^9.0.0:
+ version "9.0.4"
+ resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-9.0.4.tgz#2da03e37c46eb1a6f1391f02f9b84ae65818f7ed"
+ integrity sha512-LHE65TD2YiNsHD3YuXcKPHXPLuYh/gjp12mOfU8jxSrm1f/yJpsb0F/KKljS6U9LJoP0Ux+tCe8iJ2AsPzTdgA==
+ dependencies:
+ "@types/hast" "^3.0.0"
+ "@types/unist" "^3.0.0"
+ "@ungap/structured-clone" "^1.0.0"
+ hast-util-from-parse5 "^8.0.0"
+ hast-util-to-parse5 "^8.0.0"
+ html-void-elements "^3.0.0"
+ mdast-util-to-hast "^13.0.0"
+ parse5 "^7.0.0"
+ unist-util-position "^5.0.0"
+ unist-util-visit "^5.0.0"
+ vfile "^6.0.0"
+ web-namespaces "^2.0.0"
+ zwitch "^2.0.0"
+
+hast-util-to-estree@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/hast-util-to-estree/-/hast-util-to-estree-3.1.0.tgz#f2afe5e869ddf0cf690c75f9fc699f3180b51b19"
+ integrity sha512-lfX5g6hqVh9kjS/B9E2gSkvHH4SZNiQFiqWS0x9fENzEl+8W12RqdRxX6d/Cwxi30tPQs3bIO+aolQJNp1bIyw==
+ dependencies:
+ "@types/estree" "^1.0.0"
+ "@types/estree-jsx" "^1.0.0"
+ "@types/hast" "^3.0.0"
+ comma-separated-tokens "^2.0.0"
+ devlop "^1.0.0"
+ estree-util-attach-comments "^3.0.0"
+ estree-util-is-identifier-name "^3.0.0"
+ hast-util-whitespace "^3.0.0"
+ mdast-util-mdx-expression "^2.0.0"
+ mdast-util-mdx-jsx "^3.0.0"
+ mdast-util-mdxjs-esm "^2.0.0"
+ property-information "^6.0.0"
+ space-separated-tokens "^2.0.0"
+ style-to-object "^0.4.0"
+ unist-util-position "^5.0.0"
+ zwitch "^2.0.0"
+
+hast-util-to-jsx-runtime@^2.0.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.0.tgz#3ed27caf8dc175080117706bf7269404a0aa4f7c"
+ integrity sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ==
+ dependencies:
+ "@types/estree" "^1.0.0"
+ "@types/hast" "^3.0.0"
+ "@types/unist" "^3.0.0"
+ comma-separated-tokens "^2.0.0"
+ devlop "^1.0.0"
+ estree-util-is-identifier-name "^3.0.0"
+ hast-util-whitespace "^3.0.0"
+ mdast-util-mdx-expression "^2.0.0"
+ mdast-util-mdx-jsx "^3.0.0"
+ mdast-util-mdxjs-esm "^2.0.0"
+ property-information "^6.0.0"
+ space-separated-tokens "^2.0.0"
+ style-to-object "^1.0.0"
+ unist-util-position "^5.0.0"
+ vfile-message "^4.0.0"
+
+hast-util-to-parse5@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz#477cd42d278d4f036bc2ea58586130f6f39ee6ed"
+ integrity sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==
+ dependencies:
+ "@types/hast" "^3.0.0"
+ comma-separated-tokens "^2.0.0"
+ devlop "^1.0.0"
+ property-information "^6.0.0"
+ space-separated-tokens "^2.0.0"
+ web-namespaces "^2.0.0"
+ zwitch "^2.0.0"
+
+hast-util-whitespace@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz#7778ed9d3c92dd9e8c5c8f648a49c21fc51cb621"
+ integrity sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==
+ dependencies:
+ "@types/hast" "^3.0.0"
+
+hastscript@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-8.0.0.tgz#4ef795ec8dee867101b9f23cc830d4baf4fd781a"
+ integrity sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==
+ dependencies:
+ "@types/hast" "^3.0.0"
+ comma-separated-tokens "^2.0.0"
+ hast-util-parse-selector "^4.0.0"
+ property-information "^6.0.0"
+ space-separated-tokens "^2.0.0"
+
+he@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
+ integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
+
+history@^4.9.0:
+ version "4.10.1"
+ resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3"
+ integrity sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==
+ dependencies:
+ "@babel/runtime" "^7.1.2"
+ loose-envify "^1.2.0"
+ resolve-pathname "^3.0.0"
+ tiny-invariant "^1.0.2"
+ tiny-warning "^1.0.0"
+ value-equal "^1.0.1"
+
+hoist-non-react-statics@^3.1.0:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45"
+ integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==
+ dependencies:
+ react-is "^16.7.0"
+
+hpack.js@^2.1.6:
+ version "2.1.6"
+ resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2"
+ integrity sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==
+ dependencies:
+ inherits "^2.0.1"
+ obuf "^1.0.0"
+ readable-stream "^2.0.1"
+ wbuf "^1.1.0"
+
+html-entities@^2.3.2:
+ version "2.5.2"
+ resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.5.2.tgz#201a3cf95d3a15be7099521620d19dfb4f65359f"
+ integrity sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==
+
+html-escaper@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453"
+ integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==
+
+html-minifier-terser@^6.0.2:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab"
+ integrity sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==
+ dependencies:
+ camel-case "^4.1.2"
+ clean-css "^5.2.2"
+ commander "^8.3.0"
+ he "^1.2.0"
+ param-case "^3.0.4"
+ relateurl "^0.2.7"
+ terser "^5.10.0"
+
+html-minifier-terser@^7.2.0:
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz#18752e23a2f0ed4b0f550f217bb41693e975b942"
+ integrity sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==
+ dependencies:
+ camel-case "^4.1.2"
+ clean-css "~5.3.2"
+ commander "^10.0.0"
+ entities "^4.4.0"
+ param-case "^3.0.4"
+ relateurl "^0.2.7"
+ terser "^5.15.1"
+
+html-tags@^3.3.1:
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.3.1.tgz#a04026a18c882e4bba8a01a3d39cfe465d40b5ce"
+ integrity sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==
+
+html-void-elements@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-3.0.0.tgz#fc9dbd84af9e747249034d4d62602def6517f1d7"
+ integrity sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==
+
+html-webpack-plugin@^5.5.3:
+ version "5.6.0"
+ resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.6.0.tgz#50a8fa6709245608cb00e811eacecb8e0d7b7ea0"
+ integrity sha512-iwaY4wzbe48AfKLZ/Cc8k0L+FKG6oSNRaZ8x5A/T/IVDGyXcbHncM9TdDa93wn0FsSm82FhTKW7f3vS61thXAw==
+ dependencies:
+ "@types/html-minifier-terser" "^6.0.0"
+ html-minifier-terser "^6.0.2"
+ lodash "^4.17.21"
+ pretty-error "^4.0.0"
+ tapable "^2.0.0"
+
+htmlparser2@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7"
+ integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==
+ dependencies:
+ domelementtype "^2.0.1"
+ domhandler "^4.0.0"
+ domutils "^2.5.2"
+ entities "^2.0.0"
+
+htmlparser2@^8.0.1:
+ version "8.0.2"
+ resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21"
+ integrity sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==
+ dependencies:
+ domelementtype "^2.3.0"
+ domhandler "^5.0.3"
+ domutils "^3.0.1"
+ entities "^4.4.0"
+
+http-cache-semantics@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a"
+ integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==
+
+http-deceiver@^1.2.7:
+ version "1.2.7"
+ resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87"
+ integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==
+
+http-errors@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3"
+ integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==
+ dependencies:
+ depd "2.0.0"
+ inherits "2.0.4"
+ setprototypeof "1.2.0"
+ statuses "2.0.1"
+ toidentifier "1.0.1"
+
+http-errors@~1.6.2:
+ version "1.6.3"
+ resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d"
+ integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==
+ dependencies:
+ depd "~1.1.2"
+ inherits "2.0.3"
+ setprototypeof "1.1.0"
+ statuses ">= 1.4.0 < 2"
+
+http-parser-js@>=0.5.1:
+ version "0.5.8"
+ resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.8.tgz#af23090d9ac4e24573de6f6aecc9d84a48bf20e3"
+ integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==
+
+http-proxy-middleware@^2.0.3:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz#e1a4dd6979572c7ab5a4e4b55095d1f32a74963f"
+ integrity sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==
+ dependencies:
+ "@types/http-proxy" "^1.17.8"
+ http-proxy "^1.18.1"
+ is-glob "^4.0.1"
+ is-plain-obj "^3.0.0"
+ micromatch "^4.0.2"
+
+http-proxy@^1.18.1:
+ version "1.18.1"
+ resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549"
+ integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==
+ dependencies:
+ eventemitter3 "^4.0.0"
+ follow-redirects "^1.0.0"
+ requires-port "^1.0.0"
+
+http2-wrapper@^2.1.10:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-2.2.1.tgz#310968153dcdedb160d8b72114363ef5fce1f64a"
+ integrity sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==
+ dependencies:
+ quick-lru "^5.1.1"
+ resolve-alpn "^1.2.0"
+
+human-signals@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0"
+ integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==
+
+iconv-lite@0.4.24:
+ version "0.4.24"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
+ integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
+ dependencies:
+ safer-buffer ">= 2.1.2 < 3"
+
+icss-utils@^5.0.0, icss-utils@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae"
+ integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==
+
+ignore@^5.2.0, ignore@^5.2.4:
+ version "5.3.1"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef"
+ integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==
+
+image-size@^1.0.2:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/image-size/-/image-size-1.1.1.tgz#ddd67d4dc340e52ac29ce5f546a09f4e29e840ac"
+ integrity sha512-541xKlUw6jr/6gGuk92F+mYM5zaFAc5ahphvkqvNe2bQ6gVBkd6bfrmVJ2t4KDAfikAYZyIqTnktX3i6/aQDrQ==
+ dependencies:
+ queue "6.0.2"
+
+immer@^9.0.7:
+ version "9.0.21"
+ resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.21.tgz#1e025ea31a40f24fb064f1fef23e931496330176"
+ integrity sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==
+
+import-fresh@^3.1.0, import-fresh@^3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
+ integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
+ dependencies:
+ parent-module "^1.0.0"
+ resolve-from "^4.0.0"
+
+import-lazy@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-4.0.0.tgz#e8eb627483a0a43da3c03f3e35548be5cb0cc153"
+ integrity sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==
+
+imurmurhash@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+ integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==
+
+indent-string@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
+ integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
+
+infima@0.2.0-alpha.43:
+ version "0.2.0-alpha.43"
+ resolved "https://registry.yarnpkg.com/infima/-/infima-0.2.0-alpha.43.tgz#f7aa1d7b30b6c08afef441c726bac6150228cbe0"
+ integrity sha512-2uw57LvUqW0rK/SWYnd/2rRfxNA5DDNOh33jxF7fy46VWoNhGxiUQyVZHbBMjQ33mQem0cjdDVwgWVAmlRfgyQ==
+
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==
+ dependencies:
+ once "^1.3.0"
+ wrappy "1"
+
+inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
+ integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
+
+inherits@2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+ integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==
+
+ini@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5"
+ integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==
+
+ini@^1.3.4, ini@^1.3.5, ini@~1.3.0:
+ version "1.3.8"
+ resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
+ integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
+
+inline-style-parser@0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1"
+ integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==
+
+inline-style-parser@0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.2.3.tgz#e35c5fb45f3a83ed7849fe487336eb7efa25971c"
+ integrity sha512-qlD8YNDqyTKTyuITrDOffsl6Tdhv+UC4hcdAVuQsK4IMQ99nSgd1MIA/Q+jQYoh9r3hVUXhYh7urSRmXPkW04g==
+
+interpret@^1.0.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e"
+ integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==
+
+invariant@^2.2.4:
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
+ integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==
+ dependencies:
+ loose-envify "^1.0.0"
+
+ipaddr.js@1.9.1:
+ version "1.9.1"
+ resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"
+ integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
+
+ipaddr.js@^2.0.1:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.2.0.tgz#d33fa7bac284f4de7af949638c9d68157c6b92e8"
+ integrity sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==
+
+is-alphabetical@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-2.0.1.tgz#01072053ea7c1036df3c7d19a6daaec7f19e789b"
+ integrity sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==
+
+is-alphanumerical@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz#7c03fbe96e3e931113e57f964b0a368cc2dfd875"
+ integrity sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==
+ dependencies:
+ is-alphabetical "^2.0.0"
+ is-decimal "^2.0.0"
+
+is-arrayish@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+ integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==
+
+is-binary-path@~2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
+ integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
+ dependencies:
+ binary-extensions "^2.0.0"
+
+is-ci@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867"
+ integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==
+ dependencies:
+ ci-info "^3.2.0"
+
+is-core-module@^2.13.0:
+ version "2.14.0"
+ resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.14.0.tgz#43b8ef9f46a6a08888db67b1ffd4ec9e3dfd59d1"
+ integrity sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==
+ dependencies:
+ hasown "^2.0.2"
+
+is-decimal@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-2.0.1.tgz#9469d2dc190d0214fd87d78b78caecc0cc14eef7"
+ integrity sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==
+
+is-docker@^2.0.0, is-docker@^2.1.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa"
+ integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==
+
+is-extendable@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
+ integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==
+
+is-extglob@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
+ integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
+
+is-fullwidth-code-point@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
+ integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
+
+is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
+ integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
+ dependencies:
+ is-extglob "^2.1.1"
+
+is-hexadecimal@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz#86b5bf668fca307498d319dfc03289d781a90027"
+ integrity sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==
+
+is-installed-globally@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520"
+ integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==
+ dependencies:
+ global-dirs "^3.0.0"
+ is-path-inside "^3.0.2"
+
+is-npm@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-6.0.0.tgz#b59e75e8915543ca5d881ecff864077cba095261"
+ integrity sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==
+
+is-number@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
+ integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
+
+is-obj@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
+ integrity sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==
+
+is-obj@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982"
+ integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==
+
+is-path-cwd@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb"
+ integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==
+
+is-path-inside@^3.0.2:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283"
+ integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==
+
+is-plain-obj@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7"
+ integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==
+
+is-plain-obj@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz#d65025edec3657ce032fd7db63c97883eaed71f0"
+ integrity sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==
+
+is-plain-object@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
+ integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
+ dependencies:
+ isobject "^3.0.1"
+
+is-reference@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-3.0.2.tgz#154747a01f45cd962404ee89d43837af2cba247c"
+ integrity sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==
+ dependencies:
+ "@types/estree" "*"
+
+is-regexp@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069"
+ integrity sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==
+
+is-root@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c"
+ integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==
+
+is-stream@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077"
+ integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==
+
+is-typedarray@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
+ integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==
+
+is-wsl@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271"
+ integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==
+ dependencies:
+ is-docker "^2.0.0"
+
+is-yarn-global@^0.4.0:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.4.1.tgz#b312d902b313f81e4eaf98b6361ba2b45cd694bb"
+ integrity sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ==
+
+isarray@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
+ integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==
+
+isarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+ integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==
+
+isexe@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+ integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
+
+isobject@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
+ integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==
+
+jest-util@^29.7.0:
+ version "29.7.0"
+ resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc"
+ integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==
+ 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"
+
+jest-worker@^27.4.5:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0"
+ integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==
+ dependencies:
+ "@types/node" "*"
+ merge-stream "^2.0.0"
+ supports-color "^8.0.0"
+
+jest-worker@^29.4.3:
+ version "29.7.0"
+ resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a"
+ integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==
+ dependencies:
+ "@types/node" "*"
+ jest-util "^29.7.0"
+ merge-stream "^2.0.0"
+ supports-color "^8.0.0"
+
+jiti@^1.20.0:
+ version "1.21.6"
+ resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.6.tgz#6c7f7398dd4b3142767f9a168af2f317a428d268"
+ integrity sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==
+
+joi@^17.9.2:
+ version "17.13.3"
+ resolved "https://registry.yarnpkg.com/joi/-/joi-17.13.3.tgz#0f5cc1169c999b30d344366d384b12d92558bcec"
+ integrity sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==
+ dependencies:
+ "@hapi/hoek" "^9.3.0"
+ "@hapi/topo" "^5.1.0"
+ "@sideway/address" "^4.1.5"
+ "@sideway/formula" "^3.0.1"
+ "@sideway/pinpoint" "^2.0.0"
+
+"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
+ integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+
+js-yaml@^3.13.1:
+ version "3.14.1"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537"
+ integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==
+ dependencies:
+ argparse "^1.0.7"
+ esprima "^4.0.0"
+
+js-yaml@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
+ integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
+ dependencies:
+ argparse "^2.0.1"
+
+jsesc@^2.5.1:
+ version "2.5.2"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
+ integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
+
+jsesc@~0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
+ integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==
+
+json-buffer@3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13"
+ integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==
+
+json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
+ integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
+
+json-schema-traverse@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
+ integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
+
+json-schema-traverse@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2"
+ integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==
+
+json5@^2.1.2, json5@^2.2.3:
+ version "2.2.3"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283"
+ integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
+
+jsonfile@^6.0.1:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"
+ integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==
+ dependencies:
+ universalify "^2.0.0"
+ optionalDependencies:
+ graceful-fs "^4.1.6"
+
+keyv@^4.5.3:
+ version "4.5.4"
+ resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93"
+ integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==
+ dependencies:
+ json-buffer "3.0.1"
+
+kind-of@^6.0.0, kind-of@^6.0.2:
+ version "6.0.3"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
+ integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
+
+kleur@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e"
+ integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==
+
+latest-version@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-7.0.0.tgz#843201591ea81a4d404932eeb61240fe04e9e5da"
+ integrity sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==
+ dependencies:
+ package-json "^8.1.0"
+
+launch-editor@^2.6.0:
+ version "2.8.0"
+ resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.8.0.tgz#7255d90bdba414448e2138faa770a74f28451305"
+ integrity sha512-vJranOAJrI/llyWGRQqiDM+adrw+k83fvmmx3+nV47g3+36xM15jE+zyZ6Ffel02+xSvuM0b2GDRosXZkbb6wA==
+ dependencies:
+ picocolors "^1.0.0"
+ shell-quote "^1.8.1"
+
+leven@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2"
+ integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==
+
+lilconfig@^3.1.1:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.2.tgz#e4a7c3cb549e3a606c8dcc32e5ae1005e62c05cb"
+ integrity sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==
+
+lines-and-columns@^1.1.6:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632"
+ integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==
+
+loader-runner@^4.2.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1"
+ integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==
+
+loader-utils@^2.0.0:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c"
+ integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==
+ dependencies:
+ big.js "^5.2.2"
+ emojis-list "^3.0.0"
+ json5 "^2.1.2"
+
+loader-utils@^3.2.0:
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-3.3.1.tgz#735b9a19fd63648ca7adbd31c2327dfe281304e5"
+ integrity sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==
+
+locate-path@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
+ integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==
+ dependencies:
+ p-locate "^3.0.0"
+ path-exists "^3.0.0"
+
+locate-path@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286"
+ integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==
+ dependencies:
+ p-locate "^5.0.0"
+
+locate-path@^7.1.0:
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-7.2.0.tgz#69cb1779bd90b35ab1e771e1f2f89a202c2a8a8a"
+ integrity sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==
+ dependencies:
+ p-locate "^6.0.0"
+
+lodash.debounce@^4.0.8:
+ version "4.0.8"
+ resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
+ integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==
+
+lodash.memoize@^4.1.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
+ integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==
+
+lodash.uniq@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
+ integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==
+
+lodash@^4.17.20, lodash@^4.17.21:
+ version "4.17.21"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
+ integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
+
+loglevel@^1.8.1:
+ version "1.9.1"
+ resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.9.1.tgz#d63976ac9bcd03c7c873116d41c2a85bafff1be7"
+ integrity sha512-hP3I3kCrDIMuRwAwHltphhDM1r8i55H33GgqjXbrisuJhF4kRhW1dNuxsRklp4bXl8DSdLaNLuiL4A/LWRfxvg==
+
+longest-streak@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-3.1.0.tgz#62fa67cd958742a1574af9f39866364102d90cd4"
+ integrity sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==
+
+loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
+ integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
+ dependencies:
+ js-tokens "^3.0.0 || ^4.0.0"
+
+lower-case@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28"
+ integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==
+ dependencies:
+ tslib "^2.0.3"
+
+lowercase-keys@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-3.0.0.tgz#c5e7d442e37ead247ae9db117a9d0a467c89d4f2"
+ integrity sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==
+
+lru-cache@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
+ integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
+ dependencies:
+ yallist "^3.0.2"
+
+markdown-extensions@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/markdown-extensions/-/markdown-extensions-2.0.0.tgz#34bebc83e9938cae16e0e017e4a9814a8330d3c4"
+ integrity sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==
+
+markdown-table@^3.0.0:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-3.0.3.tgz#e6331d30e493127e031dd385488b5bd326e4a6bd"
+ integrity sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==
+
+mdast-util-directive@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/mdast-util-directive/-/mdast-util-directive-3.0.0.tgz#3fb1764e705bbdf0afb0d3f889e4404c3e82561f"
+ integrity sha512-JUpYOqKI4mM3sZcNxmF/ox04XYFFkNwr0CFlrQIkCwbvH0xzMCqkMqAde9wRd80VAhaUrwFwKm2nxretdT1h7Q==
+ dependencies:
+ "@types/mdast" "^4.0.0"
+ "@types/unist" "^3.0.0"
+ devlop "^1.0.0"
+ mdast-util-from-markdown "^2.0.0"
+ mdast-util-to-markdown "^2.0.0"
+ parse-entities "^4.0.0"
+ stringify-entities "^4.0.0"
+ unist-util-visit-parents "^6.0.0"
+
+mdast-util-find-and-replace@^3.0.0, mdast-util-find-and-replace@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.1.tgz#a6fc7b62f0994e973490e45262e4bc07607b04e0"
+ integrity sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==
+ dependencies:
+ "@types/mdast" "^4.0.0"
+ escape-string-regexp "^5.0.0"
+ unist-util-is "^6.0.0"
+ unist-util-visit-parents "^6.0.0"
+
+mdast-util-from-markdown@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.1.tgz#32a6e8f512b416e1f51eb817fc64bd867ebcd9cc"
+ integrity sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA==
+ dependencies:
+ "@types/mdast" "^4.0.0"
+ "@types/unist" "^3.0.0"
+ decode-named-character-reference "^1.0.0"
+ devlop "^1.0.0"
+ mdast-util-to-string "^4.0.0"
+ micromark "^4.0.0"
+ micromark-util-decode-numeric-character-reference "^2.0.0"
+ micromark-util-decode-string "^2.0.0"
+ micromark-util-normalize-identifier "^2.0.0"
+ micromark-util-symbol "^2.0.0"
+ micromark-util-types "^2.0.0"
+ unist-util-stringify-position "^4.0.0"
+
+mdast-util-frontmatter@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/mdast-util-frontmatter/-/mdast-util-frontmatter-2.0.1.tgz#f5f929eb1eb36c8a7737475c7eb438261f964ee8"
+ integrity sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==
+ dependencies:
+ "@types/mdast" "^4.0.0"
+ devlop "^1.0.0"
+ escape-string-regexp "^5.0.0"
+ mdast-util-from-markdown "^2.0.0"
+ mdast-util-to-markdown "^2.0.0"
+ micromark-extension-frontmatter "^2.0.0"
+
+mdast-util-gfm-autolink-literal@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.0.tgz#5baf35407421310a08e68c15e5d8821e8898ba2a"
+ integrity sha512-FyzMsduZZHSc3i0Px3PQcBT4WJY/X/RCtEJKuybiC6sjPqLv7h1yqAkmILZtuxMSsUyaLUWNp71+vQH2zqp5cg==
+ dependencies:
+ "@types/mdast" "^4.0.0"
+ ccount "^2.0.0"
+ devlop "^1.0.0"
+ mdast-util-find-and-replace "^3.0.0"
+ micromark-util-character "^2.0.0"
+
+mdast-util-gfm-footnote@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.0.0.tgz#25a1753c7d16db8bfd53cd84fe50562bd1e6d6a9"
+ integrity sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==
+ dependencies:
+ "@types/mdast" "^4.0.0"
+ devlop "^1.1.0"
+ mdast-util-from-markdown "^2.0.0"
+ mdast-util-to-markdown "^2.0.0"
+ micromark-util-normalize-identifier "^2.0.0"
+
+mdast-util-gfm-strikethrough@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz#d44ef9e8ed283ac8c1165ab0d0dfd058c2764c16"
+ integrity sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==
+ dependencies:
+ "@types/mdast" "^4.0.0"
+ mdast-util-from-markdown "^2.0.0"
+ mdast-util-to-markdown "^2.0.0"
+
+mdast-util-gfm-table@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz#7a435fb6223a72b0862b33afbd712b6dae878d38"
+ integrity sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==
+ dependencies:
+ "@types/mdast" "^4.0.0"
+ devlop "^1.0.0"
+ markdown-table "^3.0.0"
+ mdast-util-from-markdown "^2.0.0"
+ mdast-util-to-markdown "^2.0.0"
+
+mdast-util-gfm-task-list-item@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz#e68095d2f8a4303ef24094ab642e1047b991a936"
+ integrity sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==
+ dependencies:
+ "@types/mdast" "^4.0.0"
+ devlop "^1.0.0"
+ mdast-util-from-markdown "^2.0.0"
+ mdast-util-to-markdown "^2.0.0"
+
+mdast-util-gfm@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/mdast-util-gfm/-/mdast-util-gfm-3.0.0.tgz#3f2aecc879785c3cb6a81ff3a243dc11eca61095"
+ integrity sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==
+ dependencies:
+ mdast-util-from-markdown "^2.0.0"
+ mdast-util-gfm-autolink-literal "^2.0.0"
+ mdast-util-gfm-footnote "^2.0.0"
+ mdast-util-gfm-strikethrough "^2.0.0"
+ mdast-util-gfm-table "^2.0.0"
+ mdast-util-gfm-task-list-item "^2.0.0"
+ mdast-util-to-markdown "^2.0.0"
+
+mdast-util-mdx-expression@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.0.tgz#4968b73724d320a379110d853e943a501bfd9d87"
+ integrity sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw==
+ dependencies:
+ "@types/estree-jsx" "^1.0.0"
+ "@types/hast" "^3.0.0"
+ "@types/mdast" "^4.0.0"
+ devlop "^1.0.0"
+ mdast-util-from-markdown "^2.0.0"
+ mdast-util-to-markdown "^2.0.0"
+
+mdast-util-mdx-jsx@^3.0.0:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.2.tgz#daae777c72f9c4a106592e3025aa50fb26068e1b"
+ integrity sha512-eKMQDeywY2wlHc97k5eD8VC+9ASMjN8ItEZQNGwJ6E0XWKiW/Z0V5/H8pvoXUf+y+Mj0VIgeRRbujBmFn4FTyA==
+ dependencies:
+ "@types/estree-jsx" "^1.0.0"
+ "@types/hast" "^3.0.0"
+ "@types/mdast" "^4.0.0"
+ "@types/unist" "^3.0.0"
+ ccount "^2.0.0"
+ devlop "^1.1.0"
+ mdast-util-from-markdown "^2.0.0"
+ mdast-util-to-markdown "^2.0.0"
+ parse-entities "^4.0.0"
+ stringify-entities "^4.0.0"
+ unist-util-remove-position "^5.0.0"
+ unist-util-stringify-position "^4.0.0"
+ vfile-message "^4.0.0"
+
+mdast-util-mdx@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz#792f9cf0361b46bee1fdf1ef36beac424a099c41"
+ integrity sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==
+ dependencies:
+ mdast-util-from-markdown "^2.0.0"
+ mdast-util-mdx-expression "^2.0.0"
+ mdast-util-mdx-jsx "^3.0.0"
+ mdast-util-mdxjs-esm "^2.0.0"
+ mdast-util-to-markdown "^2.0.0"
+
+mdast-util-mdxjs-esm@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz#019cfbe757ad62dd557db35a695e7314bcc9fa97"
+ integrity sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==
+ dependencies:
+ "@types/estree-jsx" "^1.0.0"
+ "@types/hast" "^3.0.0"
+ "@types/mdast" "^4.0.0"
+ devlop "^1.0.0"
+ mdast-util-from-markdown "^2.0.0"
+ mdast-util-to-markdown "^2.0.0"
+
+mdast-util-phrasing@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz#7cc0a8dec30eaf04b7b1a9661a92adb3382aa6e3"
+ integrity sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==
+ dependencies:
+ "@types/mdast" "^4.0.0"
+ unist-util-is "^6.0.0"
+
+mdast-util-to-hast@^13.0.0:
+ version "13.2.0"
+ resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz#5ca58e5b921cc0a3ded1bc02eed79a4fe4fe41f4"
+ integrity sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==
+ dependencies:
+ "@types/hast" "^3.0.0"
+ "@types/mdast" "^4.0.0"
+ "@ungap/structured-clone" "^1.0.0"
+ devlop "^1.0.0"
+ micromark-util-sanitize-uri "^2.0.0"
+ trim-lines "^3.0.0"
+ unist-util-position "^5.0.0"
+ unist-util-visit "^5.0.0"
+ vfile "^6.0.0"
+
+mdast-util-to-markdown@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz#9813f1d6e0cdaac7c244ec8c6dabfdb2102ea2b4"
+ integrity sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==
+ dependencies:
+ "@types/mdast" "^4.0.0"
+ "@types/unist" "^3.0.0"
+ longest-streak "^3.0.0"
+ mdast-util-phrasing "^4.0.0"
+ mdast-util-to-string "^4.0.0"
+ micromark-util-decode-string "^2.0.0"
+ unist-util-visit "^5.0.0"
+ zwitch "^2.0.0"
+
+mdast-util-to-string@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz#7a5121475556a04e7eddeb67b264aae79d312814"
+ integrity sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==
+ dependencies:
+ "@types/mdast" "^4.0.0"
+
+mdn-data@2.0.28:
+ version "2.0.28"
+ resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.28.tgz#5ec48e7bef120654539069e1ae4ddc81ca490eba"
+ integrity sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==
+
+mdn-data@2.0.30:
+ version "2.0.30"
+ resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.30.tgz#ce4df6f80af6cfbe218ecd5c552ba13c4dfa08cc"
+ integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==
+
+media-typer@0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
+ integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==
+
+memfs@^3.1.2, memfs@^3.4.3:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.6.0.tgz#d7a2110f86f79dd950a8b6df6d57bc984aa185f6"
+ integrity sha512-EGowvkkgbMcIChjMTMkESFDbZeSh8xZ7kNSF0hAiAN4Jh6jgHCRS0Ga/+C8y6Au+oqpezRHCfPsmJ2+DwAgiwQ==
+ dependencies:
+ fs-monkey "^1.0.4"
+
+merge-descriptors@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
+ integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==
+
+merge-stream@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
+ integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
+
+merge2@^1.3.0, merge2@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
+ integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
+
+methods@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
+ integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==
+
+micromark-core-commonmark@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/micromark-core-commonmark/-/micromark-core-commonmark-2.0.1.tgz#9a45510557d068605c6e9a80f282b2bb8581e43d"
+ integrity sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==
+ dependencies:
+ decode-named-character-reference "^1.0.0"
+ devlop "^1.0.0"
+ micromark-factory-destination "^2.0.0"
+ micromark-factory-label "^2.0.0"
+ micromark-factory-space "^2.0.0"
+ micromark-factory-title "^2.0.0"
+ micromark-factory-whitespace "^2.0.0"
+ micromark-util-character "^2.0.0"
+ micromark-util-chunked "^2.0.0"
+ micromark-util-classify-character "^2.0.0"
+ micromark-util-html-tag-name "^2.0.0"
+ micromark-util-normalize-identifier "^2.0.0"
+ micromark-util-resolve-all "^2.0.0"
+ micromark-util-subtokenize "^2.0.0"
+ micromark-util-symbol "^2.0.0"
+ micromark-util-types "^2.0.0"
+
+micromark-extension-directive@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/micromark-extension-directive/-/micromark-extension-directive-3.0.0.tgz#527869de497a6de9024138479091bc885dae076b"
+ integrity sha512-61OI07qpQrERc+0wEysLHMvoiO3s2R56x5u7glHq2Yqq6EHbH4dW25G9GfDdGCDYqA21KE6DWgNSzxSwHc2hSg==
+ dependencies:
+ devlop "^1.0.0"
+ micromark-factory-space "^2.0.0"
+ micromark-factory-whitespace "^2.0.0"
+ micromark-util-character "^2.0.0"
+ micromark-util-symbol "^2.0.0"
+ micromark-util-types "^2.0.0"
+ parse-entities "^4.0.0"
+
+micromark-extension-frontmatter@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/micromark-extension-frontmatter/-/micromark-extension-frontmatter-2.0.0.tgz#651c52ffa5d7a8eeed687c513cd869885882d67a"
+ integrity sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==
+ dependencies:
+ fault "^2.0.0"
+ micromark-util-character "^2.0.0"
+ micromark-util-symbol "^2.0.0"
+ micromark-util-types "^2.0.0"
+
+micromark-extension-gfm-autolink-literal@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.0.0.tgz#f1e50b42e67d441528f39a67133eddde2bbabfd9"
+ integrity sha512-rTHfnpt/Q7dEAK1Y5ii0W8bhfJlVJFnJMHIPisfPK3gpVNuOP0VnRl96+YJ3RYWV/P4gFeQoGKNlT3RhuvpqAg==
+ dependencies:
+ micromark-util-character "^2.0.0"
+ micromark-util-sanitize-uri "^2.0.0"
+ micromark-util-symbol "^2.0.0"
+ micromark-util-types "^2.0.0"
+
+micromark-extension-gfm-footnote@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.0.0.tgz#91afad310065a94b636ab1e9dab2c60d1aab953c"
+ integrity sha512-6Rzu0CYRKDv3BfLAUnZsSlzx3ak6HAoI85KTiijuKIz5UxZxbUI+pD6oHgw+6UtQuiRwnGRhzMmPRv4smcz0fg==
+ dependencies:
+ devlop "^1.0.0"
+ micromark-core-commonmark "^2.0.0"
+ micromark-factory-space "^2.0.0"
+ micromark-util-character "^2.0.0"
+ micromark-util-normalize-identifier "^2.0.0"
+ micromark-util-sanitize-uri "^2.0.0"
+ micromark-util-symbol "^2.0.0"
+ micromark-util-types "^2.0.0"
+
+micromark-extension-gfm-strikethrough@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.0.0.tgz#6917db8e320da70e39ffbf97abdbff83e6783e61"
+ integrity sha512-c3BR1ClMp5fxxmwP6AoOY2fXO9U8uFMKs4ADD66ahLTNcwzSCyRVU4k7LPV5Nxo/VJiR4TdzxRQY2v3qIUceCw==
+ dependencies:
+ devlop "^1.0.0"
+ micromark-util-chunked "^2.0.0"
+ micromark-util-classify-character "^2.0.0"
+ micromark-util-resolve-all "^2.0.0"
+ micromark-util-symbol "^2.0.0"
+ micromark-util-types "^2.0.0"
+
+micromark-extension-gfm-table@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.0.0.tgz#2cf3fe352d9e089b7ef5fff003bdfe0da29649b7"
+ integrity sha512-PoHlhypg1ItIucOaHmKE8fbin3vTLpDOUg8KAr8gRCF1MOZI9Nquq2i/44wFvviM4WuxJzc3demT8Y3dkfvYrw==
+ dependencies:
+ devlop "^1.0.0"
+ micromark-factory-space "^2.0.0"
+ micromark-util-character "^2.0.0"
+ micromark-util-symbol "^2.0.0"
+ micromark-util-types "^2.0.0"
+
+micromark-extension-gfm-tagfilter@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz#f26d8a7807b5985fba13cf61465b58ca5ff7dc57"
+ integrity sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==
+ dependencies:
+ micromark-util-types "^2.0.0"
+
+micromark-extension-gfm-task-list-item@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.0.1.tgz#ee8b208f1ced1eb9fb11c19a23666e59d86d4838"
+ integrity sha512-cY5PzGcnULaN5O7T+cOzfMoHjBW7j+T9D2sucA5d/KbsBTPcYdebm9zUd9zzdgJGCwahV+/W78Z3nbulBYVbTw==
+ dependencies:
+ devlop "^1.0.0"
+ micromark-factory-space "^2.0.0"
+ micromark-util-character "^2.0.0"
+ micromark-util-symbol "^2.0.0"
+ micromark-util-types "^2.0.0"
+
+micromark-extension-gfm@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz#3e13376ab95dd7a5cfd0e29560dfe999657b3c5b"
+ integrity sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==
+ dependencies:
+ micromark-extension-gfm-autolink-literal "^2.0.0"
+ micromark-extension-gfm-footnote "^2.0.0"
+ micromark-extension-gfm-strikethrough "^2.0.0"
+ micromark-extension-gfm-table "^2.0.0"
+ micromark-extension-gfm-tagfilter "^2.0.0"
+ micromark-extension-gfm-task-list-item "^2.0.0"
+ micromark-util-combine-extensions "^2.0.0"
+ micromark-util-types "^2.0.0"
+
+micromark-extension-mdx-expression@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.0.tgz#1407b9ce69916cf5e03a196ad9586889df25302a"
+ integrity sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ==
+ dependencies:
+ "@types/estree" "^1.0.0"
+ devlop "^1.0.0"
+ micromark-factory-mdx-expression "^2.0.0"
+ micromark-factory-space "^2.0.0"
+ micromark-util-character "^2.0.0"
+ micromark-util-events-to-acorn "^2.0.0"
+ micromark-util-symbol "^2.0.0"
+ micromark-util-types "^2.0.0"
+
+micromark-extension-mdx-jsx@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.0.tgz#4aba0797c25efb2366a3fd2d367c6b1c1159f4f5"
+ integrity sha512-uvhhss8OGuzR4/N17L1JwvmJIpPhAd8oByMawEKx6NVdBCbesjH4t+vjEp3ZXft9DwvlKSD07fCeI44/N0Vf2w==
+ dependencies:
+ "@types/acorn" "^4.0.0"
+ "@types/estree" "^1.0.0"
+ devlop "^1.0.0"
+ estree-util-is-identifier-name "^3.0.0"
+ micromark-factory-mdx-expression "^2.0.0"
+ micromark-factory-space "^2.0.0"
+ micromark-util-character "^2.0.0"
+ micromark-util-symbol "^2.0.0"
+ micromark-util-types "^2.0.0"
+ vfile-message "^4.0.0"
+
+micromark-extension-mdx-md@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz#1d252881ea35d74698423ab44917e1f5b197b92d"
+ integrity sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==
+ dependencies:
+ micromark-util-types "^2.0.0"
+
+micromark-extension-mdxjs-esm@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz#de21b2b045fd2059bd00d36746081de38390d54a"
+ integrity sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==
+ dependencies:
+ "@types/estree" "^1.0.0"
+ devlop "^1.0.0"
+ micromark-core-commonmark "^2.0.0"
+ micromark-util-character "^2.0.0"
+ micromark-util-events-to-acorn "^2.0.0"
+ micromark-util-symbol "^2.0.0"
+ micromark-util-types "^2.0.0"
+ unist-util-position-from-estree "^2.0.0"
+ vfile-message "^4.0.0"
+
+micromark-extension-mdxjs@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz#b5a2e0ed449288f3f6f6c544358159557549de18"
+ integrity sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==
+ dependencies:
+ acorn "^8.0.0"
+ acorn-jsx "^5.0.0"
+ micromark-extension-mdx-expression "^3.0.0"
+ micromark-extension-mdx-jsx "^3.0.0"
+ micromark-extension-mdx-md "^2.0.0"
+ micromark-extension-mdxjs-esm "^3.0.0"
+ micromark-util-combine-extensions "^2.0.0"
+ micromark-util-types "^2.0.0"
+
+micromark-factory-destination@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz#857c94debd2c873cba34e0445ab26b74f6a6ec07"
+ integrity sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==
+ dependencies:
+ micromark-util-character "^2.0.0"
+ micromark-util-symbol "^2.0.0"
+ micromark-util-types "^2.0.0"
+
+micromark-factory-label@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz#17c5c2e66ce39ad6f4fc4cbf40d972f9096f726a"
+ integrity sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==
+ dependencies:
+ devlop "^1.0.0"
+ micromark-util-character "^2.0.0"
+ micromark-util-symbol "^2.0.0"
+ micromark-util-types "^2.0.0"
+
+micromark-factory-mdx-expression@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.1.tgz#f2a9724ce174f1751173beb2c1f88062d3373b1b"
+ integrity sha512-F0ccWIUHRLRrYp5TC9ZYXmZo+p2AM13ggbsW4T0b5CRKP8KHVRB8t4pwtBgTxtjRmwrK0Irwm7vs2JOZabHZfg==
+ dependencies:
+ "@types/estree" "^1.0.0"
+ devlop "^1.0.0"
+ micromark-util-character "^2.0.0"
+ micromark-util-events-to-acorn "^2.0.0"
+ micromark-util-symbol "^2.0.0"
+ micromark-util-types "^2.0.0"
+ unist-util-position-from-estree "^2.0.0"
+ vfile-message "^4.0.0"
+
+micromark-factory-space@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz#c8f40b0640a0150751d3345ed885a080b0d15faf"
+ integrity sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==
+ dependencies:
+ micromark-util-character "^1.0.0"
+ micromark-util-types "^1.0.0"
+
+micromark-factory-space@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz#5e7afd5929c23b96566d0e1ae018ae4fcf81d030"
+ integrity sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==
+ dependencies:
+ micromark-util-character "^2.0.0"
+ micromark-util-types "^2.0.0"
+
+micromark-factory-title@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz#726140fc77892af524705d689e1cf06c8a83ea95"
+ integrity sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==
+ dependencies:
+ micromark-factory-space "^2.0.0"
+ micromark-util-character "^2.0.0"
+ micromark-util-symbol "^2.0.0"
+ micromark-util-types "^2.0.0"
+
+micromark-factory-whitespace@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz#9e92eb0f5468083381f923d9653632b3cfb5f763"
+ integrity sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==
+ dependencies:
+ micromark-factory-space "^2.0.0"
+ micromark-util-character "^2.0.0"
+ micromark-util-symbol "^2.0.0"
+ micromark-util-types "^2.0.0"
+
+micromark-util-character@^1.0.0, micromark-util-character@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-1.2.0.tgz#4fedaa3646db249bc58caeb000eb3549a8ca5dcc"
+ integrity sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==
+ dependencies:
+ micromark-util-symbol "^1.0.0"
+ micromark-util-types "^1.0.0"
+
+micromark-util-character@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-2.1.0.tgz#31320ace16b4644316f6bf057531689c71e2aee1"
+ integrity sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==
+ dependencies:
+ micromark-util-symbol "^2.0.0"
+ micromark-util-types "^2.0.0"
+
+micromark-util-chunked@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz#e51f4db85fb203a79dbfef23fd41b2f03dc2ef89"
+ integrity sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==
+ dependencies:
+ micromark-util-symbol "^2.0.0"
+
+micromark-util-classify-character@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz#8c7537c20d0750b12df31f86e976d1d951165f34"
+ integrity sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==
+ dependencies:
+ micromark-util-character "^2.0.0"
+ micromark-util-symbol "^2.0.0"
+ micromark-util-types "^2.0.0"
+
+micromark-util-combine-extensions@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz#75d6ab65c58b7403616db8d6b31315013bfb7ee5"
+ integrity sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==
+ dependencies:
+ micromark-util-chunked "^2.0.0"
+ micromark-util-types "^2.0.0"
+
+micromark-util-decode-numeric-character-reference@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz#2698bbb38f2a9ba6310e359f99fcb2b35a0d2bd5"
+ integrity sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==
+ dependencies:
+ micromark-util-symbol "^2.0.0"
+
+micromark-util-decode-string@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz#7dfa3a63c45aecaa17824e656bcdb01f9737154a"
+ integrity sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==
+ dependencies:
+ decode-named-character-reference "^1.0.0"
+ micromark-util-character "^2.0.0"
+ micromark-util-decode-numeric-character-reference "^2.0.0"
+ micromark-util-symbol "^2.0.0"
+
+micromark-util-encode@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz#0921ac7953dc3f1fd281e3d1932decfdb9382ab1"
+ integrity sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==
+
+micromark-util-events-to-acorn@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.2.tgz#4275834f5453c088bd29cd72dfbf80e3327cec07"
+ integrity sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA==
+ dependencies:
+ "@types/acorn" "^4.0.0"
+ "@types/estree" "^1.0.0"
+ "@types/unist" "^3.0.0"
+ devlop "^1.0.0"
+ estree-util-visit "^2.0.0"
+ micromark-util-symbol "^2.0.0"
+ micromark-util-types "^2.0.0"
+ vfile-message "^4.0.0"
+
+micromark-util-html-tag-name@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz#ae34b01cbe063363847670284c6255bb12138ec4"
+ integrity sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==
+
+micromark-util-normalize-identifier@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz#91f9a4e65fe66cc80c53b35b0254ad67aa431d8b"
+ integrity sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==
+ dependencies:
+ micromark-util-symbol "^2.0.0"
+
+micromark-util-resolve-all@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz#189656e7e1a53d0c86a38a652b284a252389f364"
+ integrity sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==
+ dependencies:
+ micromark-util-types "^2.0.0"
+
+micromark-util-sanitize-uri@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz#ec8fbf0258e9e6d8f13d9e4770f9be64342673de"
+ integrity sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==
+ dependencies:
+ micromark-util-character "^2.0.0"
+ micromark-util-encode "^2.0.0"
+ micromark-util-symbol "^2.0.0"
+
+micromark-util-subtokenize@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.1.tgz#76129c49ac65da6e479c09d0ec4b5f29ec6eace5"
+ integrity sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==
+ dependencies:
+ devlop "^1.0.0"
+ micromark-util-chunked "^2.0.0"
+ micromark-util-symbol "^2.0.0"
+ micromark-util-types "^2.0.0"
+
+micromark-util-symbol@^1.0.0, micromark-util-symbol@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz#813cd17837bdb912d069a12ebe3a44b6f7063142"
+ integrity sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==
+
+micromark-util-symbol@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz#12225c8f95edf8b17254e47080ce0862d5db8044"
+ integrity sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==
+
+micromark-util-types@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-1.1.0.tgz#e6676a8cae0bb86a2171c498167971886cb7e283"
+ integrity sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==
+
+micromark-util-types@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-2.0.0.tgz#63b4b7ffeb35d3ecf50d1ca20e68fc7caa36d95e"
+ integrity sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==
+
+micromark@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/micromark/-/micromark-4.0.0.tgz#84746a249ebd904d9658cfabc1e8e5f32cbc6249"
+ integrity sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==
+ dependencies:
+ "@types/debug" "^4.0.0"
+ debug "^4.0.0"
+ decode-named-character-reference "^1.0.0"
+ devlop "^1.0.0"
+ micromark-core-commonmark "^2.0.0"
+ micromark-factory-space "^2.0.0"
+ micromark-util-character "^2.0.0"
+ micromark-util-chunked "^2.0.0"
+ micromark-util-combine-extensions "^2.0.0"
+ micromark-util-decode-numeric-character-reference "^2.0.0"
+ micromark-util-encode "^2.0.0"
+ micromark-util-normalize-identifier "^2.0.0"
+ micromark-util-resolve-all "^2.0.0"
+ micromark-util-sanitize-uri "^2.0.0"
+ micromark-util-subtokenize "^2.0.0"
+ micromark-util-symbol "^2.0.0"
+ micromark-util-types "^2.0.0"
+
+micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5:
+ version "4.0.7"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.7.tgz#33e8190d9fe474a9895525f5618eee136d46c2e5"
+ integrity sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==
+ dependencies:
+ braces "^3.0.3"
+ picomatch "^2.3.1"
+
+mime-db@1.52.0, "mime-db@>= 1.43.0 < 2":
+ version "1.52.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
+ integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
+
+mime-db@~1.33.0:
+ version "1.33.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db"
+ integrity sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==
+
+mime-types@2.1.18:
+ version "2.1.18"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8"
+ integrity sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==
+ dependencies:
+ mime-db "~1.33.0"
+
+mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34:
+ version "2.1.35"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
+ integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
+ dependencies:
+ mime-db "1.52.0"
+
+mime@1.6.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
+ integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
+
+mimic-fn@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
+ integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
+
+mimic-response@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9"
+ integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==
+
+mimic-response@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-4.0.0.tgz#35468b19e7c75d10f5165ea25e75a5ceea7cf70f"
+ integrity sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==
+
+mini-css-extract-plugin@^2.7.6:
+ version "2.9.0"
+ resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.0.tgz#c73a1327ccf466f69026ac22a8e8fd707b78a235"
+ integrity sha512-Zs1YsZVfemekSZG+44vBsYTLQORkPMwnlv+aehcxK/NLKC+EGhDB39/YePYYqx/sTk6NnYpuqikhSn7+JIevTA==
+ dependencies:
+ schema-utils "^4.0.0"
+ tapable "^2.2.1"
+
+minimalistic-assert@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
+ integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==
+
+minimatch@3.1.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
+ integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
+ dependencies:
+ brace-expansion "^1.1.7"
+
+minimist@^1.2.0:
+ version "1.2.8"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
+ integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
+
+mrmime@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-2.0.0.tgz#151082a6e06e59a9a39b46b3e14d5cfe92b3abb4"
+ integrity sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==
+
+ms@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
+ integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==
+
+ms@2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
+ integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+
+ms@2.1.3:
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
+ integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
+
+multicast-dns@^7.2.5:
+ version "7.2.5"
+ resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-7.2.5.tgz#77eb46057f4d7adbd16d9290fa7299f6fa64cced"
+ integrity sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==
+ dependencies:
+ dns-packet "^5.2.2"
+ thunky "^1.0.2"
+
+nanoid@^3.3.7:
+ version "3.3.7"
+ resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8"
+ integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==
+
+negotiator@0.6.3:
+ version "0.6.3"
+ resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd"
+ integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==
+
+neo-async@^2.6.2:
+ version "2.6.2"
+ resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
+ integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
+
+no-case@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d"
+ integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==
+ dependencies:
+ lower-case "^2.0.2"
+ tslib "^2.0.3"
+
+node-emoji@^2.1.0:
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-2.1.3.tgz#93cfabb5cc7c3653aa52f29d6ffb7927d8047c06"
+ integrity sha512-E2WEOVsgs7O16zsURJ/eH8BqhF029wGpEOnv7Urwdo2wmQanOACwJQh0devF9D9RhoZru0+9JXIS0dBXIAz+lA==
+ dependencies:
+ "@sindresorhus/is" "^4.6.0"
+ char-regex "^1.0.2"
+ emojilib "^2.4.0"
+ skin-tone "^2.0.0"
+
+node-forge@^1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3"
+ integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==
+
+node-releases@^2.0.14:
+ version "2.0.14"
+ resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b"
+ integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==
+
+normalize-path@^3.0.0, normalize-path@~3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
+ integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
+
+normalize-range@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
+ integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==
+
+normalize-url@^8.0.0:
+ version "8.0.1"
+ resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-8.0.1.tgz#9b7d96af9836577c58f5883e939365fa15623a4a"
+ integrity sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==
+
+npm-run-path@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"
+ integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==
+ dependencies:
+ path-key "^3.0.0"
+
+nprogress@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/nprogress/-/nprogress-0.2.0.tgz#cb8f34c53213d895723fcbab907e9422adbcafb1"
+ integrity sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==
+
+nth-check@^2.0.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d"
+ integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==
+ dependencies:
+ boolbase "^1.0.0"
+
+object-assign@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+ integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
+
+object-inspect@^1.13.1:
+ version "1.13.2"
+ resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff"
+ integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==
+
+object-keys@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
+ integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
+
+object.assign@^4.1.0:
+ version "4.1.5"
+ resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0"
+ integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==
+ dependencies:
+ call-bind "^1.0.5"
+ define-properties "^1.2.1"
+ has-symbols "^1.0.3"
+ object-keys "^1.1.1"
+
+obuf@^1.0.0, obuf@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e"
+ integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==
+
+on-finished@2.4.1:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f"
+ integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==
+ dependencies:
+ ee-first "1.1.1"
+
+on-headers@~1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f"
+ integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==
+
+once@^1.3.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+ integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
+ dependencies:
+ wrappy "1"
+
+onetime@^5.1.2:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
+ integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
+ dependencies:
+ mimic-fn "^2.1.0"
+
+open@^8.0.9, open@^8.4.0:
+ version "8.4.2"
+ resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9"
+ integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==
+ dependencies:
+ define-lazy-prop "^2.0.0"
+ is-docker "^2.1.1"
+ is-wsl "^2.2.0"
+
+opener@^1.5.2:
+ version "1.5.2"
+ resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598"
+ integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==
+
+p-cancelable@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-3.0.0.tgz#63826694b54d61ca1c20ebcb6d3ecf5e14cd8050"
+ integrity sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==
+
+p-limit@^2.0.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
+ integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
+ dependencies:
+ p-try "^2.0.0"
+
+p-limit@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
+ integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
+ dependencies:
+ yocto-queue "^0.1.0"
+
+p-limit@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-4.0.0.tgz#914af6544ed32bfa54670b061cafcbd04984b644"
+ integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==
+ dependencies:
+ yocto-queue "^1.0.0"
+
+p-locate@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"
+ integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==
+ dependencies:
+ p-limit "^2.0.0"
+
+p-locate@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834"
+ integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==
+ dependencies:
+ p-limit "^3.0.2"
+
+p-locate@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-6.0.0.tgz#3da9a49d4934b901089dca3302fa65dc5a05c04f"
+ integrity sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==
+ dependencies:
+ p-limit "^4.0.0"
+
+p-map@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b"
+ integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==
+ dependencies:
+ aggregate-error "^3.0.0"
+
+p-retry@^4.5.0:
+ version "4.6.2"
+ resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.2.tgz#9baae7184057edd4e17231cee04264106e092a16"
+ integrity sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==
+ dependencies:
+ "@types/retry" "0.12.0"
+ retry "^0.13.1"
+
+p-try@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
+ integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
+
+package-json@^8.1.0:
+ version "8.1.1"
+ resolved "https://registry.yarnpkg.com/package-json/-/package-json-8.1.1.tgz#3e9948e43df40d1e8e78a85485f1070bf8f03dc8"
+ integrity sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==
+ dependencies:
+ got "^12.1.0"
+ registry-auth-token "^5.0.1"
+ registry-url "^6.0.0"
+ semver "^7.3.7"
+
+param-case@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5"
+ integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==
+ dependencies:
+ dot-case "^3.0.4"
+ tslib "^2.0.3"
+
+parent-module@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
+ integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
+ dependencies:
+ callsites "^3.0.0"
+
+parse-entities@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-4.0.1.tgz#4e2a01111fb1c986549b944af39eeda258fc9e4e"
+ integrity sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==
+ dependencies:
+ "@types/unist" "^2.0.0"
+ character-entities "^2.0.0"
+ character-entities-legacy "^3.0.0"
+ character-reference-invalid "^2.0.0"
+ decode-named-character-reference "^1.0.0"
+ is-alphanumerical "^2.0.0"
+ is-decimal "^2.0.0"
+ is-hexadecimal "^2.0.0"
+
+parse-json@^5.0.0, parse-json@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd"
+ integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==
+ 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"
+
+parse-numeric-range@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz#7c63b61190d61e4d53a1197f0c83c47bb670ffa3"
+ integrity sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==
+
+parse5-htmlparser2-tree-adapter@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz#23c2cc233bcf09bb7beba8b8a69d46b08c62c2f1"
+ integrity sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==
+ dependencies:
+ domhandler "^5.0.2"
+ parse5 "^7.0.0"
+
+parse5@^7.0.0:
+ version "7.1.2"
+ resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32"
+ integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==
+ dependencies:
+ entities "^4.4.0"
+
+parseurl@~1.3.2, parseurl@~1.3.3:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
+ integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
+
+pascal-case@^3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb"
+ integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==
+ dependencies:
+ no-case "^3.0.4"
+ tslib "^2.0.3"
+
+path-exists@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
+ integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==
+
+path-exists@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
+ integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
+
+path-exists@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-5.0.0.tgz#a6aad9489200b21fab31e49cf09277e5116fb9e7"
+ integrity sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==
+
+path-is-absolute@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+ integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
+
+path-is-inside@1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
+ integrity sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==
+
+path-key@^3.0.0, path-key@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
+ integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
+
+path-parse@^1.0.7:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
+ integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
+
+path-to-regexp@0.1.7:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
+ integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==
+
+path-to-regexp@2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-2.2.1.tgz#90b617025a16381a879bc82a38d4e8bdeb2bcf45"
+ integrity sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==
+
+path-to-regexp@^1.7.0:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a"
+ integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==
+ dependencies:
+ isarray "0.0.1"
+
+path-type@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
+ integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
+
+periscopic@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/periscopic/-/periscopic-3.1.0.tgz#7e9037bf51c5855bd33b48928828db4afa79d97a"
+ integrity sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==
+ dependencies:
+ "@types/estree" "^1.0.0"
+ estree-walker "^3.0.0"
+ is-reference "^3.0.0"
+
+picocolors@^1.0.0, picocolors@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1"
+ integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==
+
+picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
+ integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
+
+pkg-dir@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-7.0.0.tgz#8f0c08d6df4476756c5ff29b3282d0bab7517d11"
+ integrity sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==
+ dependencies:
+ find-up "^6.3.0"
+
+pkg-up@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5"
+ integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==
+ dependencies:
+ find-up "^3.0.0"
+
+postcss-calc@^9.0.1:
+ version "9.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-9.0.1.tgz#a744fd592438a93d6de0f1434c572670361eb6c6"
+ integrity sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==
+ dependencies:
+ postcss-selector-parser "^6.0.11"
+ postcss-value-parser "^4.2.0"
+
+postcss-colormin@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-6.1.0.tgz#076e8d3fb291fbff7b10e6b063be9da42ff6488d"
+ integrity sha512-x9yX7DOxeMAR+BgGVnNSAxmAj98NX/YxEMNFP+SDCEeNLb2r3i6Hh1ksMsnW8Ub5SLCpbescQqn9YEbE9554Sw==
+ dependencies:
+ browserslist "^4.23.0"
+ caniuse-api "^3.0.0"
+ colord "^2.9.3"
+ postcss-value-parser "^4.2.0"
+
+postcss-convert-values@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-6.1.0.tgz#3498387f8efedb817cbc63901d45bd1ceaa40f48"
+ integrity sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w==
+ dependencies:
+ browserslist "^4.23.0"
+ postcss-value-parser "^4.2.0"
+
+postcss-discard-comments@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-6.0.2.tgz#e768dcfdc33e0216380623652b0a4f69f4678b6c"
+ integrity sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw==
+
+postcss-discard-duplicates@^6.0.3:
+ version "6.0.3"
+ resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.3.tgz#d121e893c38dc58a67277f75bb58ba43fce4c3eb"
+ integrity sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw==
+
+postcss-discard-empty@^6.0.3:
+ version "6.0.3"
+ resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-6.0.3.tgz#ee39c327219bb70473a066f772621f81435a79d9"
+ integrity sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ==
+
+postcss-discard-overridden@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-6.0.2.tgz#4e9f9c62ecd2df46e8fdb44dc17e189776572e2d"
+ integrity sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ==
+
+postcss-discard-unused@^6.0.5:
+ version "6.0.5"
+ resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-6.0.5.tgz#c1b0e8c032c6054c3fbd22aaddba5b248136f338"
+ integrity sha512-wHalBlRHkaNnNwfC8z+ppX57VhvS+HWgjW508esjdaEYr3Mx7Gnn2xA4R/CKf5+Z9S5qsqC+Uzh4ueENWwCVUA==
+ dependencies:
+ postcss-selector-parser "^6.0.16"
+
+postcss-loader@^7.3.3:
+ version "7.3.4"
+ resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-7.3.4.tgz#aed9b79ce4ed7e9e89e56199d25ad1ec8f606209"
+ integrity sha512-iW5WTTBSC5BfsBJ9daFMPVrLT36MrNiC6fqOZTTaHjBNX6Pfd5p+hSBqe/fEeNd7pc13QiAyGt7VdGMw4eRC4A==
+ dependencies:
+ cosmiconfig "^8.3.5"
+ jiti "^1.20.0"
+ semver "^7.5.4"
+
+postcss-merge-idents@^6.0.3:
+ version "6.0.3"
+ resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-6.0.3.tgz#7b9c31c7bc823c94bec50f297f04e3c2b838ea65"
+ integrity sha512-1oIoAsODUs6IHQZkLQGO15uGEbK3EAl5wi9SS8hs45VgsxQfMnxvt+L+zIr7ifZFIH14cfAeVe2uCTa+SPRa3g==
+ dependencies:
+ cssnano-utils "^4.0.2"
+ postcss-value-parser "^4.2.0"
+
+postcss-merge-longhand@^6.0.5:
+ version "6.0.5"
+ resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-6.0.5.tgz#ba8a8d473617c34a36abbea8dda2b215750a065a"
+ integrity sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w==
+ dependencies:
+ postcss-value-parser "^4.2.0"
+ stylehacks "^6.1.1"
+
+postcss-merge-rules@^6.1.1:
+ version "6.1.1"
+ resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-6.1.1.tgz#7aa539dceddab56019469c0edd7d22b64c3dea9d"
+ integrity sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ==
+ dependencies:
+ browserslist "^4.23.0"
+ caniuse-api "^3.0.0"
+ cssnano-utils "^4.0.2"
+ postcss-selector-parser "^6.0.16"
+
+postcss-minify-font-values@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-6.1.0.tgz#a0e574c02ee3f299be2846369211f3b957ea4c59"
+ integrity sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg==
+ dependencies:
+ postcss-value-parser "^4.2.0"
+
+postcss-minify-gradients@^6.0.3:
+ version "6.0.3"
+ resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-6.0.3.tgz#ca3eb55a7bdb48a1e187a55c6377be918743dbd6"
+ integrity sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q==
+ dependencies:
+ colord "^2.9.3"
+ cssnano-utils "^4.0.2"
+ postcss-value-parser "^4.2.0"
+
+postcss-minify-params@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-6.1.0.tgz#54551dec77b9a45a29c3cb5953bf7325a399ba08"
+ integrity sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA==
+ dependencies:
+ browserslist "^4.23.0"
+ cssnano-utils "^4.0.2"
+ postcss-value-parser "^4.2.0"
+
+postcss-minify-selectors@^6.0.4:
+ version "6.0.4"
+ resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-6.0.4.tgz#197f7d72e6dd19eed47916d575d69dc38b396aff"
+ integrity sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ==
+ dependencies:
+ postcss-selector-parser "^6.0.16"
+
+postcss-modules-extract-imports@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz#b4497cb85a9c0c4b5aabeb759bb25e8d89f15002"
+ integrity sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==
+
+postcss-modules-local-by-default@^4.0.5:
+ version "4.0.5"
+ resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz#f1b9bd757a8edf4d8556e8d0f4f894260e3df78f"
+ integrity sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==
+ dependencies:
+ icss-utils "^5.0.0"
+ postcss-selector-parser "^6.0.2"
+ postcss-value-parser "^4.1.0"
+
+postcss-modules-scope@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz#a43d28289a169ce2c15c00c4e64c0858e43457d5"
+ integrity sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==
+ dependencies:
+ postcss-selector-parser "^6.0.4"
+
+postcss-modules-values@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c"
+ integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==
+ dependencies:
+ icss-utils "^5.0.0"
+
+postcss-normalize-charset@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-6.0.2.tgz#1ec25c435057a8001dac942942a95ffe66f721e1"
+ integrity sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ==
+
+postcss-normalize-display-values@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.2.tgz#54f02764fed0b288d5363cbb140d6950dbbdd535"
+ integrity sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg==
+ dependencies:
+ postcss-value-parser "^4.2.0"
+
+postcss-normalize-positions@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-6.0.2.tgz#e982d284ec878b9b819796266f640852dbbb723a"
+ integrity sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q==
+ dependencies:
+ postcss-value-parser "^4.2.0"
+
+postcss-normalize-repeat-style@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.2.tgz#f8006942fd0617c73f049dd8b6201c3a3040ecf3"
+ integrity sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ==
+ dependencies:
+ postcss-value-parser "^4.2.0"
+
+postcss-normalize-string@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-6.0.2.tgz#e3cc6ad5c95581acd1fc8774b309dd7c06e5e363"
+ integrity sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ==
+ dependencies:
+ postcss-value-parser "^4.2.0"
+
+postcss-normalize-timing-functions@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.2.tgz#40cb8726cef999de984527cbd9d1db1f3e9062c0"
+ integrity sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA==
+ dependencies:
+ postcss-value-parser "^4.2.0"
+
+postcss-normalize-unicode@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-6.1.0.tgz#aaf8bbd34c306e230777e80f7f12a4b7d27ce06e"
+ integrity sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg==
+ dependencies:
+ browserslist "^4.23.0"
+ postcss-value-parser "^4.2.0"
+
+postcss-normalize-url@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-6.0.2.tgz#292792386be51a8de9a454cb7b5c58ae22db0f79"
+ integrity sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ==
+ dependencies:
+ postcss-value-parser "^4.2.0"
+
+postcss-normalize-whitespace@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.2.tgz#fbb009e6ebd312f8b2efb225c2fcc7cf32b400cd"
+ integrity sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q==
+ dependencies:
+ postcss-value-parser "^4.2.0"
+
+postcss-ordered-values@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-6.0.2.tgz#366bb663919707093451ab70c3f99c05672aaae5"
+ integrity sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q==
+ dependencies:
+ cssnano-utils "^4.0.2"
+ postcss-value-parser "^4.2.0"
+
+postcss-reduce-idents@^6.0.3:
+ version "6.0.3"
+ resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-6.0.3.tgz#b0d9c84316d2a547714ebab523ec7d13704cd486"
+ integrity sha512-G3yCqZDpsNPoQgbDUy3T0E6hqOQ5xigUtBQyrmq3tn2GxlyiL0yyl7H+T8ulQR6kOcHJ9t7/9H4/R2tv8tJbMA==
+ dependencies:
+ postcss-value-parser "^4.2.0"
+
+postcss-reduce-initial@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-6.1.0.tgz#4401297d8e35cb6e92c8e9586963e267105586ba"
+ integrity sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw==
+ dependencies:
+ browserslist "^4.23.0"
+ caniuse-api "^3.0.0"
+
+postcss-reduce-transforms@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.2.tgz#6fa2c586bdc091a7373caeee4be75a0f3e12965d"
+ integrity sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA==
+ dependencies:
+ postcss-value-parser "^4.2.0"
+
+postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.16, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz#49694cb4e7c649299fea510a29fa6577104bcf53"
+ integrity sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==
+ dependencies:
+ cssesc "^3.0.0"
+ util-deprecate "^1.0.2"
+
+postcss-sort-media-queries@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/postcss-sort-media-queries/-/postcss-sort-media-queries-5.2.0.tgz#4556b3f982ef27d3bac526b99b6c0d3359a6cf97"
+ integrity sha512-AZ5fDMLD8SldlAYlvi8NIqo0+Z8xnXU2ia0jxmuhxAU+Lqt9K+AlmLNJ/zWEnE9x+Zx3qL3+1K20ATgNOr3fAA==
+ dependencies:
+ sort-css-media-queries "2.2.0"
+
+postcss-svgo@^6.0.3:
+ version "6.0.3"
+ resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-6.0.3.tgz#1d6e180d6df1fa8a3b30b729aaa9161e94f04eaa"
+ integrity sha512-dlrahRmxP22bX6iKEjOM+c8/1p+81asjKT+V5lrgOH944ryx/OHpclnIbGsKVd3uWOXFLYJwCVf0eEkJGvO96g==
+ dependencies:
+ postcss-value-parser "^4.2.0"
+ svgo "^3.2.0"
+
+postcss-unique-selectors@^6.0.4:
+ version "6.0.4"
+ resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-6.0.4.tgz#983ab308896b4bf3f2baaf2336e14e52c11a2088"
+ integrity sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg==
+ dependencies:
+ postcss-selector-parser "^6.0.16"
+
+postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514"
+ integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
+
+postcss-zindex@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-6.0.2.tgz#e498304b83a8b165755f53db40e2ea65a99b56e1"
+ integrity sha512-5BxW9l1evPB/4ZIc+2GobEBoKC+h8gPGCMi+jxsYvd2x0mjq7wazk6DrP71pStqxE9Foxh5TVnonbWpFZzXaYg==
+
+postcss@^8.4.21, postcss@^8.4.24, postcss@^8.4.26, postcss@^8.4.33, postcss@^8.4.38:
+ version "8.4.38"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.38.tgz#b387d533baf2054288e337066d81c6bee9db9e0e"
+ integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==
+ dependencies:
+ nanoid "^3.3.7"
+ picocolors "^1.0.0"
+ source-map-js "^1.2.0"
+
+pretty-error@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6"
+ integrity sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==
+ dependencies:
+ lodash "^4.17.20"
+ renderkid "^3.0.0"
+
+pretty-time@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/pretty-time/-/pretty-time-1.1.0.tgz#ffb7429afabb8535c346a34e41873adf3d74dd0e"
+ integrity sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==
+
+prism-react-renderer@^2.3.0:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-2.3.1.tgz#e59e5450052ede17488f6bc85de1553f584ff8d5"
+ integrity sha512-Rdf+HzBLR7KYjzpJ1rSoxT9ioO85nZngQEoFIhL07XhtJHlCU3SOz0GJ6+qvMyQe0Se+BV3qpe6Yd/NmQF5Juw==
+ dependencies:
+ "@types/prismjs" "^1.26.0"
+ clsx "^2.0.0"
+
+prismjs@^1.29.0:
+ version "1.29.0"
+ resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.29.0.tgz#f113555a8fa9b57c35e637bba27509dcf802dd12"
+ integrity sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==
+
+process-nextick-args@~2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
+ integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
+
+prompts@^2.4.2:
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069"
+ integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==
+ dependencies:
+ kleur "^3.0.3"
+ sisteransi "^1.0.5"
+
+prop-types@^15.6.2, prop-types@^15.7.2:
+ version "15.8.1"
+ resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5"
+ integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==
+ dependencies:
+ loose-envify "^1.4.0"
+ object-assign "^4.1.1"
+ react-is "^16.13.1"
+
+property-information@^6.0.0:
+ version "6.5.0"
+ resolved "https://registry.yarnpkg.com/property-information/-/property-information-6.5.0.tgz#6212fbb52ba757e92ef4fb9d657563b933b7ffec"
+ integrity sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==
+
+proto-list@~1.2.1:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849"
+ integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==
+
+proxy-addr@~2.0.7:
+ version "2.0.7"
+ resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025"
+ integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==
+ dependencies:
+ forwarded "0.2.0"
+ ipaddr.js "1.9.1"
+
+proxy-from-env@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
+ integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
+
+punycode@^1.3.2:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
+ integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==
+
+punycode@^2.1.0:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5"
+ integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==
+
+pupa@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/pupa/-/pupa-3.1.0.tgz#f15610274376bbcc70c9a3aa8b505ea23f41c579"
+ integrity sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==
+ dependencies:
+ escape-goat "^4.0.0"
+
+qs@6.11.0:
+ version "6.11.0"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a"
+ integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==
+ dependencies:
+ side-channel "^1.0.4"
+
+queue-microtask@^1.2.2:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
+ integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
+
+queue@6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/queue/-/queue-6.0.2.tgz#b91525283e2315c7553d2efa18d83e76432fed65"
+ integrity sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==
+ dependencies:
+ inherits "~2.0.3"
+
+quick-lru@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932"
+ integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==
+
+randombytes@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
+ integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
+ dependencies:
+ safe-buffer "^5.1.0"
+
+range-parser@1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e"
+ integrity sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==
+
+range-parser@^1.2.1, range-parser@~1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
+ integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==
+
+raw-body@2.5.2:
+ version "2.5.2"
+ resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a"
+ integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==
+ dependencies:
+ bytes "3.1.2"
+ http-errors "2.0.0"
+ iconv-lite "0.4.24"
+ unpipe "1.0.0"
+
+rc@1.2.8:
+ version "1.2.8"
+ resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
+ integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
+ dependencies:
+ deep-extend "^0.6.0"
+ ini "~1.3.0"
+ minimist "^1.2.0"
+ strip-json-comments "~2.0.1"
+
+react-dev-utils@^12.0.1:
+ version "12.0.1"
+ resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-12.0.1.tgz#ba92edb4a1f379bd46ccd6bcd4e7bc398df33e73"
+ integrity sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==
+ dependencies:
+ "@babel/code-frame" "^7.16.0"
+ address "^1.1.2"
+ browserslist "^4.18.1"
+ chalk "^4.1.2"
+ cross-spawn "^7.0.3"
+ detect-port-alt "^1.1.6"
+ escape-string-regexp "^4.0.0"
+ filesize "^8.0.6"
+ find-up "^5.0.0"
+ fork-ts-checker-webpack-plugin "^6.5.0"
+ global-modules "^2.0.0"
+ globby "^11.0.4"
+ gzip-size "^6.0.0"
+ immer "^9.0.7"
+ is-root "^2.1.0"
+ loader-utils "^3.2.0"
+ open "^8.4.0"
+ pkg-up "^3.1.0"
+ prompts "^2.4.2"
+ react-error-overlay "^6.0.11"
+ recursive-readdir "^2.2.2"
+ shell-quote "^1.7.3"
+ strip-ansi "^6.0.1"
+ text-table "^0.2.0"
+
+react-dom@^18.0.0:
+ version "18.3.1"
+ resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.3.1.tgz#c2265d79511b57d479b3dd3fdfa51536494c5cb4"
+ integrity sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==
+ dependencies:
+ loose-envify "^1.1.0"
+ scheduler "^0.23.2"
+
+react-error-overlay@^6.0.11:
+ version "6.0.11"
+ resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.11.tgz#92835de5841c5cf08ba00ddd2d677b6d17ff9adb"
+ integrity sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==
+
+react-fast-compare@^3.2.0, react-fast-compare@^3.2.2:
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.2.tgz#929a97a532304ce9fee4bcae44234f1ce2c21d49"
+ integrity sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==
+
+react-helmet-async@*:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/react-helmet-async/-/react-helmet-async-2.0.5.tgz#cfc70cd7bb32df7883a8ed55502a1513747223ec"
+ integrity sha512-rYUYHeus+i27MvFE+Jaa4WsyBKGkL6qVgbJvSBoX8mbsWoABJXdEO0bZyi0F6i+4f0NuIb8AvqPMj3iXFHkMwg==
+ dependencies:
+ invariant "^2.2.4"
+ react-fast-compare "^3.2.2"
+ shallowequal "^1.1.0"
+
+react-helmet-async@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/react-helmet-async/-/react-helmet-async-1.3.0.tgz#7bd5bf8c5c69ea9f02f6083f14ce33ef545c222e"
+ integrity sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==
+ dependencies:
+ "@babel/runtime" "^7.12.5"
+ invariant "^2.2.4"
+ prop-types "^15.7.2"
+ react-fast-compare "^3.2.0"
+ shallowequal "^1.1.0"
+
+react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0:
+ version "16.13.1"
+ resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
+ integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
+
+react-json-view-lite@^1.2.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/react-json-view-lite/-/react-json-view-lite-1.4.0.tgz#0ff493245f4550abe5e1f1836f170fa70bb95914"
+ integrity sha512-wh6F6uJyYAmQ4fK0e8dSQMEWuvTs2Wr3el3sLD9bambX1+pSWUVXIz1RFaoy3TI1mZ0FqdpKq9YgbgTTgyrmXA==
+
+react-loadable-ssr-addon-v5-slorber@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz#2cdc91e8a744ffdf9e3556caabeb6e4278689883"
+ integrity sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A==
+ dependencies:
+ "@babel/runtime" "^7.10.3"
+
+"react-loadable@npm:@docusaurus/react-loadable@6.0.0":
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/@docusaurus/react-loadable/-/react-loadable-6.0.0.tgz#de6c7f73c96542bd70786b8e522d535d69069dc4"
+ integrity sha512-YMMxTUQV/QFSnbgrP3tjDzLHRg7vsbMn8e9HAa8o/1iXoiomo48b7sk/kkmWEuWNDPJVlKSJRB6Y2fHqdJk+SQ==
+ dependencies:
+ "@types/react" "*"
+
+react-router-config@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/react-router-config/-/react-router-config-5.1.1.tgz#0f4263d1a80c6b2dc7b9c1902c9526478194a988"
+ integrity sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==
+ dependencies:
+ "@babel/runtime" "^7.1.2"
+
+react-router-dom@^5.3.4:
+ version "5.3.4"
+ resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.3.4.tgz#2ed62ffd88cae6db134445f4a0c0ae8b91d2e5e6"
+ integrity sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==
+ dependencies:
+ "@babel/runtime" "^7.12.13"
+ history "^4.9.0"
+ loose-envify "^1.3.1"
+ prop-types "^15.6.2"
+ react-router "5.3.4"
+ tiny-invariant "^1.0.2"
+ tiny-warning "^1.0.0"
+
+react-router@5.3.4, react-router@^5.3.4:
+ version "5.3.4"
+ resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.3.4.tgz#8ca252d70fcc37841e31473c7a151cf777887bb5"
+ integrity sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==
+ dependencies:
+ "@babel/runtime" "^7.12.13"
+ history "^4.9.0"
+ hoist-non-react-statics "^3.1.0"
+ loose-envify "^1.3.1"
+ path-to-regexp "^1.7.0"
+ prop-types "^15.6.2"
+ react-is "^16.6.0"
+ tiny-invariant "^1.0.2"
+ tiny-warning "^1.0.0"
+
+react@^18.0.0:
+ version "18.3.1"
+ resolved "https://registry.yarnpkg.com/react/-/react-18.3.1.tgz#49ab892009c53933625bd16b2533fc754cab2891"
+ integrity sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==
+ dependencies:
+ loose-envify "^1.1.0"
+
+readable-stream@^2.0.1:
+ version "2.3.8"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b"
+ integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.3"
+ isarray "~1.0.0"
+ process-nextick-args "~2.0.0"
+ safe-buffer "~5.1.1"
+ string_decoder "~1.1.1"
+ util-deprecate "~1.0.1"
+
+readable-stream@^3.0.6:
+ version "3.6.2"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967"
+ integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==
+ dependencies:
+ inherits "^2.0.3"
+ string_decoder "^1.1.1"
+ util-deprecate "^1.0.1"
+
+readdirp@~3.6.0:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
+ integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
+ dependencies:
+ picomatch "^2.2.1"
+
+reading-time@^1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/reading-time/-/reading-time-1.5.0.tgz#d2a7f1b6057cb2e169beaf87113cc3411b5bc5bb"
+ integrity sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==
+
+rechoir@^0.6.2:
+ version "0.6.2"
+ resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384"
+ integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==
+ dependencies:
+ resolve "^1.1.6"
+
+recursive-readdir@^2.2.2:
+ version "2.2.3"
+ resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.3.tgz#e726f328c0d69153bcabd5c322d3195252379372"
+ integrity sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==
+ dependencies:
+ minimatch "^3.0.5"
+
+regenerate-unicode-properties@^10.1.0:
+ version "10.1.1"
+ resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz#6b0e05489d9076b04c436f318d9b067bba459480"
+ integrity sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==
+ dependencies:
+ regenerate "^1.4.2"
+
+regenerate@^1.4.2:
+ version "1.4.2"
+ resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a"
+ integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==
+
+regenerator-runtime@^0.14.0:
+ version "0.14.1"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f"
+ integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==
+
+regenerator-transform@^0.15.2:
+ version "0.15.2"
+ resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4"
+ integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==
+ dependencies:
+ "@babel/runtime" "^7.8.4"
+
+regexpu-core@^5.3.1:
+ version "5.3.2"
+ resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b"
+ integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==
+ dependencies:
+ "@babel/regjsgen" "^0.8.0"
+ regenerate "^1.4.2"
+ regenerate-unicode-properties "^10.1.0"
+ regjsparser "^0.9.1"
+ unicode-match-property-ecmascript "^2.0.0"
+ unicode-match-property-value-ecmascript "^2.1.0"
+
+registry-auth-token@^5.0.1:
+ version "5.0.2"
+ resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-5.0.2.tgz#8b026cc507c8552ebbe06724136267e63302f756"
+ integrity sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==
+ dependencies:
+ "@pnpm/npm-conf" "^2.1.0"
+
+registry-url@^6.0.0:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-6.0.1.tgz#056d9343680f2f64400032b1e199faa692286c58"
+ integrity sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==
+ dependencies:
+ rc "1.2.8"
+
+regjsparser@^0.9.1:
+ version "0.9.1"
+ resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709"
+ integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==
+ dependencies:
+ jsesc "~0.5.0"
+
+rehype-raw@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/rehype-raw/-/rehype-raw-7.0.0.tgz#59d7348fd5dbef3807bbaa1d443efd2dd85ecee4"
+ integrity sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==
+ dependencies:
+ "@types/hast" "^3.0.0"
+ hast-util-raw "^9.0.0"
+ vfile "^6.0.0"
+
+relateurl@^0.2.7:
+ version "0.2.7"
+ resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9"
+ integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==
+
+remark-directive@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/remark-directive/-/remark-directive-3.0.0.tgz#34452d951b37e6207d2e2a4f830dc33442923268"
+ integrity sha512-l1UyWJ6Eg1VPU7Hm/9tt0zKtReJQNOA4+iDMAxTyZNWnJnFlbS/7zhiel/rogTLQ2vMYwDzSJa4BiVNqGlqIMA==
+ dependencies:
+ "@types/mdast" "^4.0.0"
+ mdast-util-directive "^3.0.0"
+ micromark-extension-directive "^3.0.0"
+ unified "^11.0.0"
+
+remark-emoji@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/remark-emoji/-/remark-emoji-4.0.1.tgz#671bfda668047689e26b2078c7356540da299f04"
+ integrity sha512-fHdvsTR1dHkWKev9eNyhTo4EFwbUvJ8ka9SgeWkMPYFX4WoI7ViVBms3PjlQYgw5TLvNQso3GUB/b/8t3yo+dg==
+ dependencies:
+ "@types/mdast" "^4.0.2"
+ emoticon "^4.0.1"
+ mdast-util-find-and-replace "^3.0.1"
+ node-emoji "^2.1.0"
+ unified "^11.0.4"
+
+remark-frontmatter@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/remark-frontmatter/-/remark-frontmatter-5.0.0.tgz#b68d61552a421ec412c76f4f66c344627dc187a2"
+ integrity sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ==
+ dependencies:
+ "@types/mdast" "^4.0.0"
+ mdast-util-frontmatter "^2.0.0"
+ micromark-extension-frontmatter "^2.0.0"
+ unified "^11.0.0"
+
+remark-gfm@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/remark-gfm/-/remark-gfm-4.0.0.tgz#aea777f0744701aa288b67d28c43565c7e8c35de"
+ integrity sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==
+ dependencies:
+ "@types/mdast" "^4.0.0"
+ mdast-util-gfm "^3.0.0"
+ micromark-extension-gfm "^3.0.0"
+ remark-parse "^11.0.0"
+ remark-stringify "^11.0.0"
+ unified "^11.0.0"
+
+remark-mdx@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/remark-mdx/-/remark-mdx-3.0.1.tgz#8f73dd635c1874e44426e243f72c0977cf60e212"
+ integrity sha512-3Pz3yPQ5Rht2pM5R+0J2MrGoBSrzf+tJG94N+t/ilfdh8YLyyKYtidAYwTveB20BoHAcwIopOUqhcmh2F7hGYA==
+ dependencies:
+ mdast-util-mdx "^3.0.0"
+ micromark-extension-mdxjs "^3.0.0"
+
+remark-parse@^11.0.0:
+ version "11.0.0"
+ resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-11.0.0.tgz#aa60743fcb37ebf6b069204eb4da304e40db45a1"
+ integrity sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==
+ dependencies:
+ "@types/mdast" "^4.0.0"
+ mdast-util-from-markdown "^2.0.0"
+ micromark-util-types "^2.0.0"
+ unified "^11.0.0"
+
+remark-rehype@^11.0.0:
+ version "11.1.0"
+ resolved "https://registry.yarnpkg.com/remark-rehype/-/remark-rehype-11.1.0.tgz#d5f264f42bcbd4d300f030975609d01a1697ccdc"
+ integrity sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g==
+ dependencies:
+ "@types/hast" "^3.0.0"
+ "@types/mdast" "^4.0.0"
+ mdast-util-to-hast "^13.0.0"
+ unified "^11.0.0"
+ vfile "^6.0.0"
+
+remark-stringify@^11.0.0:
+ version "11.0.0"
+ resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-11.0.0.tgz#4c5b01dd711c269df1aaae11743eb7e2e7636fd3"
+ integrity sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==
+ dependencies:
+ "@types/mdast" "^4.0.0"
+ mdast-util-to-markdown "^2.0.0"
+ unified "^11.0.0"
+
+renderkid@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-3.0.0.tgz#5fd823e4d6951d37358ecc9a58b1f06836b6268a"
+ integrity sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==
+ dependencies:
+ css-select "^4.1.3"
+ dom-converter "^0.2.0"
+ htmlparser2 "^6.1.0"
+ lodash "^4.17.21"
+ strip-ansi "^6.0.1"
+
+require-from-string@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
+ integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==
+
+"require-like@>= 0.1.1":
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/require-like/-/require-like-0.1.2.tgz#ad6f30c13becd797010c468afa775c0c0a6b47fa"
+ integrity sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==
+
+requires-port@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
+ integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==
+
+resolve-alpn@^1.2.0:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9"
+ integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==
+
+resolve-from@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
+ integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
+
+resolve-pathname@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd"
+ integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==
+
+resolve@^1.1.6, resolve@^1.14.2:
+ version "1.22.8"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d"
+ integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==
+ dependencies:
+ is-core-module "^2.13.0"
+ path-parse "^1.0.7"
+ supports-preserve-symlinks-flag "^1.0.0"
+
+responselike@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/responselike/-/responselike-3.0.0.tgz#20decb6c298aff0dbee1c355ca95461d42823626"
+ integrity sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==
+ dependencies:
+ lowercase-keys "^3.0.0"
+
+retry@^0.13.1:
+ version "0.13.1"
+ resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658"
+ integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==
+
+reusify@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
+ integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
+
+rimraf@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
+ integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
+ dependencies:
+ glob "^7.1.3"
+
+rtl-detect@^1.0.4:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/rtl-detect/-/rtl-detect-1.1.2.tgz#ca7f0330af5c6bb626c15675c642ba85ad6273c6"
+ integrity sha512-PGMBq03+TTG/p/cRB7HCLKJ1MgDIi07+QU1faSjiYRfmY5UsAttV9Hs08jDAHVwcOwmVLcSJkpwyfXszVjWfIQ==
+
+rtlcss@^4.1.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/rtlcss/-/rtlcss-4.1.1.tgz#f20409fcc197e47d1925996372be196fee900c0c"
+ integrity sha512-/oVHgBtnPNcggP2aVXQjSy6N1mMAfHg4GSag0QtZBlD5bdDgAHwr4pydqJGd+SUCu9260+Pjqbjwtvu7EMH1KQ==
+ dependencies:
+ escalade "^3.1.1"
+ picocolors "^1.0.0"
+ postcss "^8.4.21"
+ strip-json-comments "^3.1.1"
+
+run-parallel@^1.1.9:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
+ integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==
+ dependencies:
+ queue-microtask "^1.2.2"
+
+safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
+ integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
+
+safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@~5.2.0:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
+ integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
+
+"safer-buffer@>= 2.1.2 < 3":
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
+ integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+
+sax@^1.2.4:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/sax/-/sax-1.4.1.tgz#44cc8988377f126304d3b3fc1010c733b929ef0f"
+ integrity sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==
+
+scheduler@^0.23.2:
+ version "0.23.2"
+ resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.2.tgz#414ba64a3b282892e944cf2108ecc078d115cdc3"
+ integrity sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==
+ dependencies:
+ loose-envify "^1.1.0"
+
+schema-utils@2.7.0:
+ version "2.7.0"
+ resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.0.tgz#17151f76d8eae67fbbf77960c33c676ad9f4efc7"
+ integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==
+ dependencies:
+ "@types/json-schema" "^7.0.4"
+ ajv "^6.12.2"
+ ajv-keywords "^3.4.1"
+
+schema-utils@^3.0.0, schema-utils@^3.1.1, schema-utils@^3.2.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe"
+ integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==
+ dependencies:
+ "@types/json-schema" "^7.0.8"
+ ajv "^6.12.5"
+ ajv-keywords "^3.5.2"
+
+schema-utils@^4.0.0, schema-utils@^4.0.1:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.2.0.tgz#70d7c93e153a273a805801882ebd3bff20d89c8b"
+ integrity sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==
+ dependencies:
+ "@types/json-schema" "^7.0.9"
+ ajv "^8.9.0"
+ ajv-formats "^2.1.1"
+ ajv-keywords "^5.1.0"
+
+section-matter@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/section-matter/-/section-matter-1.0.0.tgz#e9041953506780ec01d59f292a19c7b850b84167"
+ integrity sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==
+ dependencies:
+ extend-shallow "^2.0.1"
+ kind-of "^6.0.0"
+
+select-hose@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca"
+ integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==
+
+selfsigned@^2.1.1:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.4.1.tgz#560d90565442a3ed35b674034cec4e95dceb4ae0"
+ integrity sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==
+ dependencies:
+ "@types/node-forge" "^1.3.0"
+ node-forge "^1"
+
+semver-diff@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-4.0.0.tgz#3afcf5ed6d62259f5c72d0d5d50dffbdc9680df5"
+ integrity sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==
+ dependencies:
+ semver "^7.3.5"
+
+semver@^6.3.1:
+ version "6.3.1"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
+ integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
+
+semver@^7.3.2, semver@^7.3.5, semver@^7.3.7, semver@^7.5.4:
+ version "7.6.2"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13"
+ integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==
+
+send@0.18.0:
+ version "0.18.0"
+ resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be"
+ integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==
+ dependencies:
+ debug "2.6.9"
+ 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 "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"
+
+serialize-javascript@^6.0.0, serialize-javascript@^6.0.1:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2"
+ integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==
+ dependencies:
+ randombytes "^2.1.0"
+
+serve-handler@^6.1.5:
+ version "6.1.5"
+ resolved "https://registry.yarnpkg.com/serve-handler/-/serve-handler-6.1.5.tgz#a4a0964f5c55c7e37a02a633232b6f0d6f068375"
+ integrity sha512-ijPFle6Hwe8zfmBxJdE+5fta53fdIY0lHISJvuikXB3VYFafRjMRpOffSPvCYsbKyBA7pvy9oYr/BT1O3EArlg==
+ dependencies:
+ bytes "3.0.0"
+ content-disposition "0.5.2"
+ fast-url-parser "1.1.3"
+ mime-types "2.1.18"
+ minimatch "3.1.2"
+ path-is-inside "1.0.2"
+ path-to-regexp "2.2.1"
+ range-parser "1.2.0"
+
+serve-index@^1.9.1:
+ version "1.9.1"
+ resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239"
+ integrity sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==
+ 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"
+
+serve-static@1.15.0:
+ version "1.15.0"
+ resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540"
+ integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==
+ dependencies:
+ encodeurl "~1.0.2"
+ escape-html "~1.0.3"
+ parseurl "~1.3.3"
+ send "0.18.0"
+
+set-function-length@^1.2.1:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449"
+ integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==
+ 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"
+
+setprototypeof@1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656"
+ integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==
+
+setprototypeof@1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424"
+ integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==
+
+shallow-clone@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3"
+ integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==
+ dependencies:
+ kind-of "^6.0.2"
+
+shallowequal@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8"
+ integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==
+
+shebang-command@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
+ integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
+ dependencies:
+ shebang-regex "^3.0.0"
+
+shebang-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
+ integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
+
+shell-quote@^1.7.3, shell-quote@^1.8.1:
+ version "1.8.1"
+ resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680"
+ integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==
+
+shelljs@^0.8.5:
+ version "0.8.5"
+ resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c"
+ integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==
+ dependencies:
+ glob "^7.0.0"
+ interpret "^1.0.0"
+ rechoir "^0.6.2"
+
+side-channel@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2"
+ integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==
+ dependencies:
+ call-bind "^1.0.7"
+ es-errors "^1.3.0"
+ get-intrinsic "^1.2.4"
+ object-inspect "^1.13.1"
+
+signal-exit@^3.0.2, signal-exit@^3.0.3:
+ version "3.0.7"
+ resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
+ integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
+
+sirv@^2.0.3:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/sirv/-/sirv-2.0.4.tgz#5dd9a725c578e34e449f332703eb2a74e46a29b0"
+ integrity sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==
+ dependencies:
+ "@polka/url" "^1.0.0-next.24"
+ mrmime "^2.0.0"
+ totalist "^3.0.0"
+
+sisteransi@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed"
+ integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==
+
+sitemap@^7.1.1:
+ version "7.1.2"
+ resolved "https://registry.yarnpkg.com/sitemap/-/sitemap-7.1.2.tgz#6ce1deb43f6f177c68bc59cf93632f54e3ae6b72"
+ integrity sha512-ARCqzHJ0p4gWt+j7NlU5eDlIO9+Rkr/JhPFZKKQ1l5GCus7rJH4UdrlVAh0xC/gDS/Qir2UMxqYNHtsKr2rpCw==
+ dependencies:
+ "@types/node" "^17.0.5"
+ "@types/sax" "^1.2.1"
+ arg "^5.0.0"
+ sax "^1.2.4"
+
+skin-tone@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/skin-tone/-/skin-tone-2.0.0.tgz#4e3933ab45c0d4f4f781745d64b9f4c208e41237"
+ integrity sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==
+ dependencies:
+ unicode-emoji-modifier-base "^1.0.0"
+
+slash@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
+ integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
+
+slash@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7"
+ integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==
+
+snake-case@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c"
+ integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==
+ dependencies:
+ dot-case "^3.0.4"
+ tslib "^2.0.3"
+
+sockjs@^0.3.24:
+ version "0.3.24"
+ resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce"
+ integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==
+ dependencies:
+ faye-websocket "^0.11.3"
+ uuid "^8.3.2"
+ websocket-driver "^0.7.4"
+
+sort-css-media-queries@2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/sort-css-media-queries/-/sort-css-media-queries-2.2.0.tgz#aa33cf4a08e0225059448b6c40eddbf9f1c8334c"
+ integrity sha512-0xtkGhWCC9MGt/EzgnvbbbKhqWjl1+/rncmhTh5qCpbYguXh6S/qwePfv/JQ8jePXXmqingylxoC49pCkSPIbA==
+
+source-map-js@^1.0.1, source-map-js@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af"
+ integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==
+
+source-map-support@~0.5.20:
+ version "0.5.21"
+ resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f"
+ integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==
+ dependencies:
+ buffer-from "^1.0.0"
+ source-map "^0.6.0"
+
+source-map@^0.6.0, source-map@~0.6.0:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
+ integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+
+source-map@^0.7.0:
+ version "0.7.4"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656"
+ integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==
+
+space-separated-tokens@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz#1ecd9d2350a3844572c3f4a312bceb018348859f"
+ integrity sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==
+
+spdy-transport@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31"
+ integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==
+ dependencies:
+ debug "^4.1.0"
+ detect-node "^2.0.4"
+ hpack.js "^2.1.6"
+ obuf "^1.1.2"
+ readable-stream "^3.0.6"
+ wbuf "^1.7.3"
+
+spdy@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b"
+ integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==
+ dependencies:
+ debug "^4.1.0"
+ handle-thing "^2.0.0"
+ http-deceiver "^1.2.7"
+ select-hose "^2.0.0"
+ spdy-transport "^3.0.0"
+
+sprintf-js@~1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
+ integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==
+
+srcset@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/srcset/-/srcset-4.0.0.tgz#336816b665b14cd013ba545b6fe62357f86e65f4"
+ integrity sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw==
+
+statuses@2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63"
+ integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==
+
+"statuses@>= 1.4.0 < 2":
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
+ integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==
+
+std-env@^3.0.1:
+ version "3.7.0"
+ resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.7.0.tgz#c9f7386ced6ecf13360b6c6c55b8aaa4ef7481d2"
+ integrity sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==
+
+string-width@^4.1.0, string-width@^4.2.0:
+ version "4.2.3"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
+ integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
+ dependencies:
+ emoji-regex "^8.0.0"
+ is-fullwidth-code-point "^3.0.0"
+ strip-ansi "^6.0.1"
+
+string-width@^5.0.1, string-width@^5.1.2:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794"
+ integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==
+ dependencies:
+ eastasianwidth "^0.2.0"
+ emoji-regex "^9.2.2"
+ strip-ansi "^7.0.1"
+
+string_decoder@^1.1.1:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
+ integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
+ dependencies:
+ safe-buffer "~5.2.0"
+
+string_decoder@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
+ integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
+ dependencies:
+ safe-buffer "~5.1.0"
+
+stringify-entities@^4.0.0:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-4.0.4.tgz#b3b79ef5f277cc4ac73caeb0236c5ba939b3a4f3"
+ integrity sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==
+ dependencies:
+ character-entities-html4 "^2.0.0"
+ character-entities-legacy "^3.0.0"
+
+stringify-object@^3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629"
+ integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==
+ dependencies:
+ get-own-enumerable-property-symbols "^3.0.0"
+ is-obj "^1.0.1"
+ is-regexp "^1.0.0"
+
+strip-ansi@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
+ integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
+ dependencies:
+ ansi-regex "^5.0.1"
+
+strip-ansi@^7.0.1:
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45"
+ integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==
+ dependencies:
+ ansi-regex "^6.0.1"
+
+strip-bom-string@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92"
+ integrity sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==
+
+strip-final-newline@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
+ integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
+
+strip-json-comments@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
+ integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
+
+strip-json-comments@~2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
+ integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==
+
+style-to-object@^0.4.0:
+ version "0.4.4"
+ resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-0.4.4.tgz#266e3dfd56391a7eefb7770423612d043c3f33ec"
+ integrity sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==
+ dependencies:
+ inline-style-parser "0.1.1"
+
+style-to-object@^1.0.0:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-1.0.6.tgz#0c28aed8be1813d166c60d962719b2907c26547b"
+ integrity sha512-khxq+Qm3xEyZfKd/y9L3oIWQimxuc4STrQKtQn8aSDRHb8mFgpukgX1hdzfrMEW6JCjyJ8p89x+IUMVnCBI1PA==
+ dependencies:
+ inline-style-parser "0.2.3"
+
+stylehacks@^6.1.1:
+ version "6.1.1"
+ resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-6.1.1.tgz#543f91c10d17d00a440430362d419f79c25545a6"
+ integrity sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg==
+ dependencies:
+ browserslist "^4.23.0"
+ postcss-selector-parser "^6.0.16"
+
+supports-color@^5.3.0:
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
+ integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
+ dependencies:
+ has-flag "^3.0.0"
+
+supports-color@^7.1.0:
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
+ integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
+ dependencies:
+ has-flag "^4.0.0"
+
+supports-color@^8.0.0:
+ version "8.1.1"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c"
+ integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==
+ dependencies:
+ has-flag "^4.0.0"
+
+supports-preserve-symlinks-flag@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
+ integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
+
+svg-parser@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5"
+ integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==
+
+svgo@^3.0.2, svgo@^3.2.0:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/svgo/-/svgo-3.3.2.tgz#ad58002652dffbb5986fc9716afe52d869ecbda8"
+ integrity sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==
+ dependencies:
+ "@trysound/sax" "0.2.0"
+ commander "^7.2.0"
+ css-select "^5.1.0"
+ css-tree "^2.3.1"
+ css-what "^6.1.0"
+ csso "^5.0.5"
+ picocolors "^1.0.0"
+
+tapable@^1.0.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2"
+ integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==
+
+tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0, tapable@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0"
+ integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==
+
+terser-webpack-plugin@^5.3.10, terser-webpack-plugin@^5.3.9:
+ version "5.3.10"
+ resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz#904f4c9193c6fd2a03f693a2150c62a92f40d199"
+ integrity sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==
+ dependencies:
+ "@jridgewell/trace-mapping" "^0.3.20"
+ jest-worker "^27.4.5"
+ schema-utils "^3.1.1"
+ serialize-javascript "^6.0.1"
+ terser "^5.26.0"
+
+terser@^5.10.0, terser@^5.15.1, terser@^5.26.0:
+ version "5.31.1"
+ resolved "https://registry.yarnpkg.com/terser/-/terser-5.31.1.tgz#735de3c987dd671e95190e6b98cfe2f07f3cf0d4"
+ integrity sha512-37upzU1+viGvuFtBo9NPufCb9dwM0+l9hMxYyWfBA+fbwrPqNJAhbZ6W47bBFnZHKHTUBnMvi87434qq+qnxOg==
+ dependencies:
+ "@jridgewell/source-map" "^0.3.3"
+ acorn "^8.8.2"
+ commander "^2.20.0"
+ source-map-support "~0.5.20"
+
+text-table@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
+ integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==
+
+thunky@^1.0.2:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d"
+ integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==
+
+tiny-invariant@^1.0.2:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.3.tgz#46680b7a873a0d5d10005995eb90a70d74d60127"
+ integrity sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==
+
+tiny-warning@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754"
+ integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==
+
+to-fast-properties@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
+ integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==
+
+to-regex-range@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
+ integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
+ dependencies:
+ is-number "^7.0.0"
+
+toidentifier@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35"
+ integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==
+
+totalist@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/totalist/-/totalist-3.0.1.tgz#ba3a3d600c915b1a97872348f79c127475f6acf8"
+ integrity sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==
+
+trim-lines@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/trim-lines/-/trim-lines-3.0.1.tgz#d802e332a07df861c48802c04321017b1bd87338"
+ integrity sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==
+
+trough@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/trough/-/trough-2.2.0.tgz#94a60bd6bd375c152c1df911a4b11d5b0256f50f"
+ integrity sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==
+
+tslib@^2.0.3, tslib@^2.4.0, tslib@^2.6.0:
+ version "2.6.3"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0"
+ integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==
+
+type-fest@^1.0.1:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1"
+ integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==
+
+type-fest@^2.13.0, type-fest@^2.5.0:
+ version "2.19.0"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b"
+ integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==
+
+type-is@~1.6.18:
+ version "1.6.18"
+ resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"
+ integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==
+ dependencies:
+ media-typer "0.3.0"
+ mime-types "~2.1.24"
+
+typedarray-to-buffer@^3.1.5:
+ version "3.1.5"
+ resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080"
+ integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==
+ dependencies:
+ is-typedarray "^1.0.0"
+
+typescript@~5.2.2:
+ version "5.2.2"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.2.2.tgz#5ebb5e5a5b75f085f22bc3f8460fba308310fa78"
+ integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==
+
+typesense-docsearch-css@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/typesense-docsearch-css/-/typesense-docsearch-css-0.4.1.tgz#457d4ad2d63021c7cc6e12081c378c0367a891c0"
+ integrity sha512-mN8K18pfIpCrhzsMAJBzoS7l/YDcC4P3f9vsScenUceXmC8n3FCPldmF10dKDJmK3Lr7aAScQt70jCA5126y2w==
+
+typesense-docsearch-react@^3.4.1:
+ version "3.4.1"
+ resolved "https://registry.yarnpkg.com/typesense-docsearch-react/-/typesense-docsearch-react-3.4.1.tgz#754d52472bb9b19a91d213f575d7cc06a58a0878"
+ integrity sha512-d0PQym/B/p5oP+hfdFEOH6goiKa1JLR63bikZSDGq1+jT2FtuwNrdMGVBZZMNFUsXVsJRA8ULHJpsREmfSJmVw==
+ dependencies:
+ "@algolia/autocomplete-core" "1.8.2"
+ "@algolia/autocomplete-preset-algolia" "1.8.2"
+ typesense "^1.7.2"
+ typesense-docsearch-css "^0.4.1"
+ typesense-instantsearch-adapter "^2.7.1"
+
+typesense-instantsearch-adapter@^2.7.1:
+ version "2.8.0"
+ resolved "https://registry.yarnpkg.com/typesense-instantsearch-adapter/-/typesense-instantsearch-adapter-2.8.0.tgz#2c01d00957cef97df5a941f55bced072013300bb"
+ integrity sha512-2q4QVpHoUV0ncf1XOqIC0dufOTkFRxQ0mHzg//H3WK02ZYqdNNPCAacZODhQlltl1cNJdTI8Y4uuGVd6fJuGzw==
+ dependencies:
+ typesense "^1.7.2"
+
+typesense@^1.7.2:
+ version "1.8.2"
+ resolved "https://registry.yarnpkg.com/typesense/-/typesense-1.8.2.tgz#16341fdd4edab02b33facc14e1d27a6d58dbe0e5"
+ integrity sha512-aBpePjA99Qvo+OP2pJwMpvga4Jrm1Y2oV5NsrWXBxlqUDNEUCPZBIksPv2Hq0jxQxHhLLyJVbjXjByXsvpCDVA==
+ dependencies:
+ axios "^1.6.0"
+ loglevel "^1.8.1"
+
+undici-types@~5.26.4:
+ version "5.26.5"
+ resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617"
+ integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==
+
+unicode-canonical-property-names-ecmascript@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc"
+ integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==
+
+unicode-emoji-modifier-base@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unicode-emoji-modifier-base/-/unicode-emoji-modifier-base-1.0.0.tgz#dbbd5b54ba30f287e2a8d5a249da6c0cef369459"
+ integrity sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==
+
+unicode-match-property-ecmascript@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3"
+ integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==
+ dependencies:
+ unicode-canonical-property-names-ecmascript "^2.0.0"
+ unicode-property-aliases-ecmascript "^2.0.0"
+
+unicode-match-property-value-ecmascript@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0"
+ integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==
+
+unicode-property-aliases-ecmascript@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd"
+ integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==
+
+unified@^11.0.0, unified@^11.0.3, unified@^11.0.4:
+ version "11.0.5"
+ resolved "https://registry.yarnpkg.com/unified/-/unified-11.0.5.tgz#f66677610a5c0a9ee90cab2b8d4d66037026d9e1"
+ integrity sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==
+ dependencies:
+ "@types/unist" "^3.0.0"
+ bail "^2.0.0"
+ devlop "^1.0.0"
+ extend "^3.0.0"
+ is-plain-obj "^4.0.0"
+ trough "^2.0.0"
+ vfile "^6.0.0"
+
+unique-string@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-3.0.0.tgz#84a1c377aff5fd7a8bc6b55d8244b2bd90d75b9a"
+ integrity sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==
+ dependencies:
+ crypto-random-string "^4.0.0"
+
+unist-util-is@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-6.0.0.tgz#b775956486aff107a9ded971d996c173374be424"
+ integrity sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==
+ dependencies:
+ "@types/unist" "^3.0.0"
+
+unist-util-position-from-estree@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz#d94da4df596529d1faa3de506202f0c9a23f2200"
+ integrity sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==
+ dependencies:
+ "@types/unist" "^3.0.0"
+
+unist-util-position@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-5.0.0.tgz#678f20ab5ca1207a97d7ea8a388373c9cf896be4"
+ integrity sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==
+ dependencies:
+ "@types/unist" "^3.0.0"
+
+unist-util-remove-position@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz#fea68a25658409c9460408bc6b4991b965b52163"
+ integrity sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==
+ dependencies:
+ "@types/unist" "^3.0.0"
+ unist-util-visit "^5.0.0"
+
+unist-util-stringify-position@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz#449c6e21a880e0855bf5aabadeb3a740314abac2"
+ integrity sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==
+ dependencies:
+ "@types/unist" "^3.0.0"
+
+unist-util-visit-parents@^6.0.0:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz#4d5f85755c3b8f0dc69e21eca5d6d82d22162815"
+ integrity sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==
+ dependencies:
+ "@types/unist" "^3.0.0"
+ unist-util-is "^6.0.0"
+
+unist-util-visit@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-5.0.0.tgz#a7de1f31f72ffd3519ea71814cccf5fd6a9217d6"
+ integrity sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==
+ dependencies:
+ "@types/unist" "^3.0.0"
+ unist-util-is "^6.0.0"
+ unist-util-visit-parents "^6.0.0"
+
+universalify@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d"
+ integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==
+
+unpipe@1.0.0, unpipe@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
+ integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==
+
+update-browserslist-db@^1.0.16:
+ version "1.0.16"
+ resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz#f6d489ed90fb2f07d67784eb3f53d7891f736356"
+ integrity sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==
+ dependencies:
+ escalade "^3.1.2"
+ picocolors "^1.0.1"
+
+update-notifier@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-6.0.2.tgz#a6990253dfe6d5a02bd04fbb6a61543f55026b60"
+ integrity sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og==
+ dependencies:
+ boxen "^7.0.0"
+ chalk "^5.0.1"
+ configstore "^6.0.0"
+ has-yarn "^3.0.0"
+ import-lazy "^4.0.0"
+ is-ci "^3.0.1"
+ is-installed-globally "^0.4.0"
+ is-npm "^6.0.0"
+ is-yarn-global "^0.4.0"
+ latest-version "^7.0.0"
+ pupa "^3.1.0"
+ semver "^7.3.7"
+ semver-diff "^4.0.0"
+ xdg-basedir "^5.1.0"
+
+uri-js@^4.2.2, uri-js@^4.4.1:
+ version "4.4.1"
+ resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
+ integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
+ dependencies:
+ punycode "^2.1.0"
+
+url-loader@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-4.1.1.tgz#28505e905cae158cf07c92ca622d7f237e70a4e2"
+ integrity sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==
+ dependencies:
+ loader-utils "^2.0.0"
+ mime-types "^2.1.27"
+ schema-utils "^3.0.0"
+
+util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+ integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
+
+utila@~0.4:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c"
+ integrity sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==
+
+utility-types@^3.10.0:
+ version "3.11.0"
+ resolved "https://registry.yarnpkg.com/utility-types/-/utility-types-3.11.0.tgz#607c40edb4f258915e901ea7995607fdf319424c"
+ integrity sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==
+
+utils-merge@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
+ integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==
+
+uuid@^8.3.2:
+ version "8.3.2"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
+ integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
+
+value-equal@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c"
+ integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==
+
+vary@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
+ integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==
+
+vfile-location@^5.0.0:
+ version "5.0.2"
+ resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-5.0.2.tgz#220d9ca1ab6f8b2504a4db398f7ebc149f9cb464"
+ integrity sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==
+ dependencies:
+ "@types/unist" "^3.0.0"
+ vfile "^6.0.0"
+
+vfile-message@^4.0.0:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-4.0.2.tgz#c883c9f677c72c166362fd635f21fc165a7d1181"
+ integrity sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==
+ dependencies:
+ "@types/unist" "^3.0.0"
+ unist-util-stringify-position "^4.0.0"
+
+vfile@^6.0.0, vfile@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/vfile/-/vfile-6.0.1.tgz#1e8327f41eac91947d4fe9d237a2dd9209762536"
+ integrity sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==
+ dependencies:
+ "@types/unist" "^3.0.0"
+ unist-util-stringify-position "^4.0.0"
+ vfile-message "^4.0.0"
+
+watchpack@^2.4.1:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.1.tgz#29308f2cac150fa8e4c92f90e0ec954a9fed7fff"
+ integrity sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==
+ dependencies:
+ glob-to-regexp "^0.4.1"
+ graceful-fs "^4.1.2"
+
+wbuf@^1.1.0, wbuf@^1.7.3:
+ version "1.7.3"
+ resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df"
+ integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==
+ dependencies:
+ minimalistic-assert "^1.0.0"
+
+web-namespaces@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-2.0.1.tgz#1010ff7c650eccb2592cebeeaf9a1b253fd40692"
+ integrity sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==
+
+webpack-bundle-analyzer@^4.9.0:
+ version "4.10.2"
+ resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz#633af2862c213730be3dbdf40456db171b60d5bd"
+ integrity sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==
+ dependencies:
+ "@discoveryjs/json-ext" "0.5.7"
+ acorn "^8.0.4"
+ acorn-walk "^8.0.0"
+ commander "^7.2.0"
+ debounce "^1.2.1"
+ escape-string-regexp "^4.0.0"
+ gzip-size "^6.0.0"
+ html-escaper "^2.0.2"
+ opener "^1.5.2"
+ picocolors "^1.0.0"
+ sirv "^2.0.3"
+ ws "^7.3.1"
+
+webpack-dev-middleware@^5.3.4:
+ version "5.3.4"
+ resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz#eb7b39281cbce10e104eb2b8bf2b63fce49a3517"
+ integrity sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==
+ dependencies:
+ colorette "^2.0.10"
+ memfs "^3.4.3"
+ mime-types "^2.1.31"
+ range-parser "^1.2.1"
+ schema-utils "^4.0.0"
+
+webpack-dev-server@^4.15.1:
+ version "4.15.2"
+ resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz#9e0c70a42a012560860adb186986da1248333173"
+ integrity sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==
+ dependencies:
+ "@types/bonjour" "^3.5.9"
+ "@types/connect-history-api-fallback" "^1.3.5"
+ "@types/express" "^4.17.13"
+ "@types/serve-index" "^1.9.1"
+ "@types/serve-static" "^1.13.10"
+ "@types/sockjs" "^0.3.33"
+ "@types/ws" "^8.5.5"
+ ansi-html-community "^0.0.8"
+ bonjour-service "^1.0.11"
+ chokidar "^3.5.3"
+ colorette "^2.0.10"
+ compression "^1.7.4"
+ connect-history-api-fallback "^2.0.0"
+ default-gateway "^6.0.3"
+ express "^4.17.3"
+ graceful-fs "^4.2.6"
+ html-entities "^2.3.2"
+ http-proxy-middleware "^2.0.3"
+ ipaddr.js "^2.0.1"
+ launch-editor "^2.6.0"
+ open "^8.0.9"
+ p-retry "^4.5.0"
+ rimraf "^3.0.2"
+ schema-utils "^4.0.0"
+ selfsigned "^2.1.1"
+ serve-index "^1.9.1"
+ sockjs "^0.3.24"
+ spdy "^4.0.2"
+ webpack-dev-middleware "^5.3.4"
+ ws "^8.13.0"
+
+webpack-merge@^5.9.0:
+ version "5.10.0"
+ resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.10.0.tgz#a3ad5d773241e9c682803abf628d4cd62b8a4177"
+ integrity sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==
+ dependencies:
+ clone-deep "^4.0.1"
+ flat "^5.0.2"
+ wildcard "^2.0.0"
+
+webpack-sources@^3.2.3:
+ version "3.2.3"
+ resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde"
+ integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==
+
+webpack@^5.88.1:
+ version "5.92.1"
+ resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.92.1.tgz#eca5c1725b9e189cffbd86e8b6c3c7400efc5788"
+ integrity sha512-JECQ7IwJb+7fgUFBlrJzbyu3GEuNBcdqr1LD7IbSzwkSmIevTm8PF+wej3Oxuz/JFBUZ6O1o43zsPkwm1C4TmA==
+ dependencies:
+ "@types/eslint-scope" "^3.7.3"
+ "@types/estree" "^1.0.5"
+ "@webassemblyjs/ast" "^1.12.1"
+ "@webassemblyjs/wasm-edit" "^1.12.1"
+ "@webassemblyjs/wasm-parser" "^1.12.1"
+ acorn "^8.7.1"
+ acorn-import-attributes "^1.9.5"
+ browserslist "^4.21.10"
+ chrome-trace-event "^1.0.2"
+ enhanced-resolve "^5.17.0"
+ es-module-lexer "^1.2.1"
+ eslint-scope "5.1.1"
+ events "^3.2.0"
+ glob-to-regexp "^0.4.1"
+ graceful-fs "^4.2.11"
+ json-parse-even-better-errors "^2.3.1"
+ loader-runner "^4.2.0"
+ mime-types "^2.1.27"
+ neo-async "^2.6.2"
+ schema-utils "^3.2.0"
+ tapable "^2.1.1"
+ terser-webpack-plugin "^5.3.10"
+ watchpack "^2.4.1"
+ webpack-sources "^3.2.3"
+
+webpackbar@^5.0.2:
+ version "5.0.2"
+ resolved "https://registry.yarnpkg.com/webpackbar/-/webpackbar-5.0.2.tgz#d3dd466211c73852741dfc842b7556dcbc2b0570"
+ integrity sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ==
+ dependencies:
+ chalk "^4.1.0"
+ consola "^2.15.3"
+ pretty-time "^1.1.0"
+ std-env "^3.0.1"
+
+websocket-driver@>=0.5.1, websocket-driver@^0.7.4:
+ version "0.7.4"
+ resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760"
+ integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==
+ dependencies:
+ http-parser-js ">=0.5.1"
+ safe-buffer ">=5.1.0"
+ websocket-extensions ">=0.1.1"
+
+websocket-extensions@>=0.1.1:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42"
+ integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==
+
+which@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
+ integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
+ dependencies:
+ isexe "^2.0.0"
+
+which@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
+ integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
+ dependencies:
+ isexe "^2.0.0"
+
+widest-line@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-4.0.1.tgz#a0fc673aaba1ea6f0a0d35b3c2795c9a9cc2ebf2"
+ integrity sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==
+ dependencies:
+ string-width "^5.0.1"
+
+wildcard@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67"
+ integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==
+
+wrap-ansi@^8.0.1, wrap-ansi@^8.1.0:
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"
+ integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==
+ dependencies:
+ ansi-styles "^6.1.0"
+ string-width "^5.0.1"
+ strip-ansi "^7.0.1"
+
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+ integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
+
+write-file-atomic@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8"
+ integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==
+ dependencies:
+ imurmurhash "^0.1.4"
+ is-typedarray "^1.0.0"
+ signal-exit "^3.0.2"
+ typedarray-to-buffer "^3.1.5"
+
+ws@^7.3.1:
+ version "7.5.10"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9"
+ integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==
+
+ws@^8.13.0:
+ version "8.17.1"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b"
+ integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==
+
+xdg-basedir@^5.0.1, xdg-basedir@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-5.1.0.tgz#1efba19425e73be1bc6f2a6ceb52a3d2c884c0c9"
+ integrity sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==
+
+xml-js@^1.6.11:
+ version "1.6.11"
+ resolved "https://registry.yarnpkg.com/xml-js/-/xml-js-1.6.11.tgz#927d2f6947f7f1c19a316dd8eea3614e8b18f8e9"
+ integrity sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==
+ dependencies:
+ sax "^1.2.4"
+
+yallist@^3.0.2:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
+ integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
+
+yaml@^1.7.2:
+ version "1.10.2"
+ resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b"
+ integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==
+
+yocto-queue@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
+ integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
+
+yocto-queue@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.0.0.tgz#7f816433fb2cbc511ec8bf7d263c3b58a1a3c251"
+ integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==
+
+zwitch@^2.0.0:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-2.0.4.tgz#c827d4b0acb76fc3e685a4c6ec2902d51070e9d7"
+ integrity sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==