diff --git a/README.md b/README.md index 1029309..6f4993e 100644 --- a/README.md +++ b/README.md @@ -13,13 +13,13 @@ The Waku Documentation Portal can be accessed at and wa Clone this repository: -```bash +```shell git clone https://github.com/waku-org/docs.waku.org ``` Install the dependencies: -```bash +```shell yarn # or @@ -29,19 +29,19 @@ yarn install ## Running Locally -```bash +```shell yarn start ``` Check for spelling errors before deploying: -```bash +```shell yarn check:spell ``` Create a production build locally to check for errors: -```bash +```shell yarn build # test the build @@ -82,6 +82,6 @@ You can find the instructions on adding more documentation sections, localisatio Docusaurus depends heavily on caching to enhance site performance. If you make changes that do not appear in the portal, try clearing the cache by running: -```bash +```shell yarn clear ``` \ No newline at end of file diff --git a/docs/guides/nwaku/build-source.md b/docs/guides/nwaku/build-source.md index 59525d1..940512f 100644 --- a/docs/guides/nwaku/build-source.md +++ b/docs/guides/nwaku/build-source.md @@ -22,7 +22,7 @@ import TabItem from '@theme/TabItem'; -```bash +```shell sudo apt-get install build-essential git libpq5 curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh ``` @@ -30,7 +30,7 @@ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -```bash +```shell sudo dnf install @development-tools git libpq-devel curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh ``` @@ -38,7 +38,7 @@ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -```bash +```shell # Using your favoured AUR helper sudo [AUR HELPER] -S base-devel git postgresql-libs curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh @@ -47,7 +47,7 @@ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -```bash +```shell brew install cmake git postgresql@15 rustup-init # Create a symbolic link to libpq.5.dylib in /usr/local/lib/ sudo mkdir -p /usr/local/lib/ @@ -61,7 +61,7 @@ sudo ln -s /opt/homebrew/opt/postgresql@15/lib/libpq.5.dylib /usr/local/lib/libp Get the source code from the GitHub repository. The default branch is `master`, the release candidate for major updates. -```bash +```shell git clone https://github.com/waku-org/nwaku cd nwaku ``` @@ -74,13 +74,13 @@ You can use `git tag -l` to check specific version tags. Build the `nwaku` binary: -```bash +```shell make wakunode2 ``` The first `make` invocation updates to all Git submodules. After each `git pull`, run `make update` to keep the submodules updated in the future. -```bash +```shell make update ``` @@ -88,7 +88,7 @@ make update Nwaku will create the `wakunode2` binary in the `./build/` directory. -```bash +```shell # Run with default configuration ./build/wakunode2 @@ -107,7 +107,7 @@ To learn more about running nwaku, have a look at these guides: Run the tests for Waku: -```bash +```shell make test ``` diff --git a/docs/guides/nwaku/config-methods.md b/docs/guides/nwaku/config-methods.md index 4738551..546cc97 100644 --- a/docs/guides/nwaku/config-methods.md +++ b/docs/guides/nwaku/config-methods.md @@ -18,13 +18,13 @@ Take note of the precedence order: Each configuration method overrides the one b Node configuration is primarily done using command line options, which override other methods. Specify [configuration options](/guides/nwaku/config-options) by providing them in this format after the binary name: -```bash +```shell ./build/wakunode2 --tcp-port=65000 ``` When running your node with Docker, provide the command line options after the image name in this format: -```bash +```shell docker run statusteam/nim-waku --tcp-port=65000 ``` @@ -34,13 +34,13 @@ Nodes can be configured using environment variables by prefixing the variable na To set the `tcp-port` configuration, the `wakunode2` binary should be called in this format: -```bash +```shell WAKUNODE2_TCP_PORT=65000 ./build/wakunode2 ``` When running your node with Docker, start the node using the `-e` command option: -```bash +```shell docker run -e "WAKUNODE2_TCP_PORT=65000" statusteam/nim-waku ``` @@ -61,13 +61,13 @@ metrics-logging = false The `config-file` [configuration option](/guides/nwaku/config-options) lets you specify the configuration file path: -```bash +```shell ./build/wakunode2 --config-file=[TOML CONFIGURATION FILE] ``` You can also specify the configuration file via environment variables: -```bash +```shell # Using environment variables WAKUNODE2_CONFIG_FILE=[TOML CONFIGURATION FILE] ./build/wakunode2 @@ -92,7 +92,7 @@ The default configuration is used when no other options are specified. By defaul To see the default values of all [configuration options](/guides/nwaku/config-options), run `wakunode2 --help`: -```bash +```shell ./build/wakunode2 --help ``` diff --git a/docs/guides/nwaku/configure-discovery.md b/docs/guides/nwaku/configure-discovery.md index 36c3108..38f2de1 100644 --- a/docs/guides/nwaku/configure-discovery.md +++ b/docs/guides/nwaku/configure-discovery.md @@ -13,7 +13,7 @@ You can configure a `nwaku` node to use multiple peer discovery mechanisms simul You can provide [static peers](/learn/concepts/static-peers) to a `nwaku` node during startup using the `staticnode` configuration option. To connect to multiple peers on startup, repeat the `staticnode` option: -```bash +```shell ./build/wakunode2 \ --staticnode=[PEER MULTIADDR 1] \ --staticnode=[PEER MULTIADDR 2] @@ -21,7 +21,7 @@ You can provide [static peers](/learn/concepts/static-peers) to a `nwaku` node d For example, consider a `nwaku` node that connects to two static peers on the same local host (IP: `0.0.0.0`) using TCP ports `60002` and `60003`: -```bash +```shell ./build/wakunode2 \ --staticnode=/ip4/0.0.0.0/tcp/60002/p2p/16Uiu2HAkzjwwgEAXfeGNMKFPSpc6vGBRqCdTLG5q3Gmk2v4pQw7H \ --staticnode=/ip4/0.0.0.0/tcp/60003/p2p/16Uiu2HAmFBA7LGtwY5WVVikdmXVo3cKLqkmvVtuDu63fe8safeQJ @@ -35,7 +35,7 @@ To enable [DNS Discovery](/learn/concepts/dns-discovery) in a `nwaku` node, use - `dns-discovery-url`: URL for DNS node list in the format `enrtree://@` where `` is the fully qualified domain name and `` is the base32 encoding of the compressed 32-byte public key that signed the list at that location. - `dns-discovery-name-server` (optional): DNS name server IPs to query. You can repeat this option to provide multiple DNS name servers. -```bash +```shell ./build/wakunode2 \ --dns-discovery=true \ --dns-discovery-url=enrtree://[PUBLIC KEY]@[DOMAIN NAME] \ @@ -48,7 +48,7 @@ If you omit the `dns-discovery-name-server` option, `nwaku` will attempt to use For example, consider a `nwaku` node that enables `DNS Discovery`, connects to a DNS node list, and queries the IPs `8.8.8.8` and `8.8.4.4`: -```bash +```shell ./build/wakunode2 \ --dns-discovery=true \ --dns-discovery-url=enrtree://ANEDLO25QVUGJOUTQFRYKWX6P4Z4GKVESBMHML7DZ6YK4LGS5FC5O@prod.wakuv2.nodes.status.im \ @@ -63,7 +63,7 @@ To enable [Discv5](/learn/concepts/discv5) in a `nwaku` node, use the following - `discv5-discovery`: Enables `Discv5` on the node (disabled by default). - `discv5-bootstrap-node`: ENR for `Discv5` routing table bootstrap node. You can repeat this option to provide multiple bootstrap entries. -```bash +```shell ./build/wakunode2 \ --discv5-discovery=true \ --discv5-bootstrap-node=[DISCV5 ENR BOOTSTRAP ENTRY 1] \ @@ -72,7 +72,7 @@ To enable [Discv5](/learn/concepts/discv5) in a `nwaku` node, use the following For example, consider a `nwaku` node that enables `Discv5` and bootstraps its routing table using a static `ENR`: -```bash +```shell ./build/wakunode2 \ --discv5-discovery=true \ --discv5-bootstrap-node=enr:-IO4QDxToTg86pPCK2KvMeVCXC2ADVZWrxXSvNZeaoa0JhShbM5qed69RQz1s1mWEEqJ3aoklo_7EU9iIBcPMVeKlCQBgmlkgnY0iXNlY3AyNTZrMaEDdBHK1Gx6y_zv5DVw5Qb3DtSOMmVHTZO1WSORrF2loL2DdWRwgiMohXdha3UyAw @@ -89,7 +89,7 @@ To enable [Peer Exchange](/learn/concepts/peer-exchange) in a `nwaku` node, use - `peer-exchange`: Enables `Peer Exchange` on the node as a responder (disabled by default). - `peer-exchange-node` (optional): Multiaddr for bootstrap node with the peer exchange protocol enabled. -```bash +```shell ./build/wakunode2 \ --peer-exchange=true \ --peer-exchange-node=[PEER MULTIADDR WITH EXCHANGE ENABLED] @@ -97,11 +97,11 @@ To enable [Peer Exchange](/learn/concepts/peer-exchange) in a `nwaku` node, use For example, consider two `nwaku` nodes configured as a `server` (peer exchange responder node) and `client` (node using peer exchange) on the same local host (IP: `0.0.0.0`): -```bash title="Server: Nwaku Node with Peer Exchange Enabled" +```shell title="Server: Nwaku Node with Peer Exchange Enabled" ./build/wakunode2 --peer-exchange=true ``` -```bash title="Client: Nwaku Node Bootstrapping with Peer Exchange" +```shell title="Client: Nwaku Node Bootstrapping with Peer Exchange" ./build/wakunode2 \ --tcp-port=30305 \ --ports-shift=1 \ diff --git a/docs/guides/nwaku/configure-nwaku.md b/docs/guides/nwaku/configure-nwaku.md index ba10598..f4fb4cd 100644 --- a/docs/guides/nwaku/configure-nwaku.md +++ b/docs/guides/nwaku/configure-nwaku.md @@ -18,13 +18,13 @@ To join the Waku Network, nodes must [bootstrap](/learn/glossary#bootstrapping) You can set up an IPv4 DNS domain name that resolves to the public IPv4 address of a node using the `dns4-domain-name` option. This allows the node's publicly announced multiaddrs to use the `/dns4` scheme. -```bash +```shell ./build/wakunode2 --dns4-domain-name=[DOMAIN NAME] ``` For example, consider the domain name `nwakunode.com`, which resolves to a `nwaku` node: -```bash +```shell ./build/wakunode2 --dns4-domain-name=nwakunode.com ``` @@ -46,7 +46,7 @@ To enable message caching and serve them to network peers, enable the [Store pro - Set this option to `none` to disable the retention policy. If you omit this option, it will default to `time:172800` (48 hours). - `store-message-db-url`: Database connection URL for persisting messages in the [SQLAlchemy database URL format](https://docs.sqlalchemy.org/en/20/core/engines.html#database-urls). Setting this option to an empty string will instruct the node to use the fallback in-memory message store. If you omit this option, it will default to `sqlite://store.sqlite3`. -```bash +```shell ./build/wakunode2 \ --store=true \ --store-message-retention-policy=[MESSAGE RETENTION POLICY] \ @@ -55,7 +55,7 @@ To enable message caching and serve them to network peers, enable the [Store pro For example, consider a `nwaku` node that is configured to be a `Store` protocol and retain messages received in the last `21600` seconds (6 hours): -```bash +```shell ./build/wakunode2 \ --store=true \ --store-message-retention-policy=time:21600 \ @@ -64,13 +64,13 @@ For example, consider a `nwaku` node that is configured to be a `Store` protocol You can configure `nwaku` as a `Store client` using the `storenode` option. This allows the node to query peers for historical messages but not store any message itself. -```bash +```shell ./build/wakunode2 --storenode=[STORE PEER MULTIADDR] ``` For example, consider a `nwaku` node that does not persist messages but can query peers for historical messages: -```bash +```shell ./build/wakunode2 --storenode=/dns4/node-01.ac-cn-hongkong-c.wakuv2.prod.statusim.net/tcp/30303/p2p/16Uiu2HAm4v86W3bmT1BiH6oSPzcsSr24iDQpSN5Qa992BCjjwgrD ``` @@ -78,13 +78,13 @@ For example, consider a `nwaku` node that does not persist messages but can quer Nodes generate [new random key pairs](/learn/glossary#node-key) at each boot, leading to different `multiaddrs`. To maintain consistency, you can use a pre-generated private key with the `nodekey` option: -```bash +```shell ./build/wakunode2 --nodekey=[NODE PRIVATE KEY] ``` This option takes a [Secp256k1](https://en.bitcoin.it/wiki/Secp256k1) private key (64-char hex string). On Linux, you can use the OpenSSL `rand` command for a pseudo-random 32-byte hex string: -```bash +```shell openssl rand -hex 32 # 286cae9f2990bfc49dafdd3a9e737f56ddba3656e5e427108cef456fb67680e8 @@ -92,7 +92,7 @@ openssl rand -hex 32 On Linux, you can create a reusable key file using OpenSSL. To get the 32-byte private key in hex format, use the `ecparam` command and some standard utilities: -```bash +```shell # Generate key file openssl ecparam -genkey -name secp256k1 -out my_private_key.pem @@ -106,7 +106,7 @@ openssl ec -in my_private_key.pem -outform DER | tail -c +8 | head -c 32| xxd -p You can use the output `286cae9f2990bfc49dafdd3a9e737f56ddba3656e5e427108cef456fb67680e8` as a `Node Key` for `nwaku`: -```bash +```shell ./build/wakunode2 --nodekey=286cae9f2990bfc49dafdd3a9e737f56ddba3656e5e427108cef456fb67680e8 ``` @@ -120,7 +120,7 @@ WebSocket is the only [transport method](/learn/concepts/transports) browser nod - `websocket-secure-key-path`: Secure WebSocket key path. - `websocket-secure-cert-path`: Secure WebSocket Certificate path. -```bash +```shell ./build/wakunode2 \ --websocket-support=true \ --websocket-port=[WEBSOCKET LISTENING PORT] \ @@ -131,7 +131,7 @@ WebSocket is the only [transport method](/learn/concepts/transports) browser nod For example, consider a `nwaku` node that enabled WebSocket (unencrypted) for local testing on port `8001`: -```bash +```shell ./build/wakunode2 \ --websocket-support=true \ --websocket-port=8001 @@ -139,7 +139,7 @@ For example, consider a `nwaku` node that enabled WebSocket (unencrypted) for lo Consider a `nwaku` node that enabled Secure WebSocket (encrypted) using its key and certificate (`privkey.pem` and `fullchain.pem`) on port `8002`: -```bash +```shell ./build/wakunode2 \ --websocket-secure-support=true \ --websocket-secure-key-path=privkey.pem \ @@ -150,7 +150,7 @@ Consider a `nwaku` node that enabled Secure WebSocket (encrypted) using its key :::tip You can use [Let's Encrypt](https://letsencrypt.org/) or [Certbot](https://certbot.eff.org/) to generate a valid certificate for your `nwaku` node: -```bash +```shell sudo letsencrypt -d ``` ::: @@ -166,7 +166,7 @@ Nwaku provides a REST API to interact with the node and Waku Network. To enable - `rest-admin` (optional): Enables access to REST admin API (disabled by default). - `rest-private` (optional): Enables access to REST private API (disabled by default). -```bash +```shell ./build/wakunode2 \ --rest=true \ --rest-address=[REST SERVER LISTENING ADDRESS] \ @@ -178,7 +178,7 @@ Nwaku provides a REST API to interact with the node and Waku Network. To enable For example, consider a `nwaku` node that enabled the REST API server on port `9000`: -```bash +```shell ./build/wakunode2 \ --rest=true \ --rest-port=9000 \ @@ -187,7 +187,7 @@ For example, consider a `nwaku` node that enabled the REST API server on port `9 Consider a `nwaku` node that enabled the REST `admin` and `private` API with a message cache capacity of `100`: -```bash +```shell ./build/wakunode2 \ --rest=true \ --rest-admin=true \ @@ -199,13 +199,13 @@ Consider a `nwaku` node that enabled the REST `admin` and `private` API with a m To enable `nwaku` to serve light clients, enable the [Filter protocol](/learn/concepts/protocols#filter) using `filter` option: -```bash +```shell ./build/wakunode2 --filter=true ``` You can configure `nwaku` as a `Filter client` using the `filternode` and `filter-timeout` options. This allows the node to request content filtering of messages from peers. -```bash +```shell ./build/wakunode2 \ --filternode=[FILTER PEER MULTIADDR] \ --filter-timeout=[FILTER PEER TIMEOUT] @@ -213,7 +213,7 @@ You can configure `nwaku` as a `Filter client` using the `filternode` and `filte For example, consider a `nwaku` node that requests content filtering of messages from peers with a timeout of `21600` seconds (6 hours): -```bash +```shell ./build/wakunode2 \ --filternode=/dns4/node-01.ac-cn-hongkong-c.wakuv2.prod.statusim.net/tcp/30303/p2p/16Uiu2HAm4v86W3bmT1BiH6oSPzcsSr24iDQpSN5Qa992BCjjwgrD \ --filter-timeout=21600 @@ -227,19 +227,19 @@ If you omit the `filter-timeout` option, it will default to `14400` seconds (4 h To enable `nwaku` to serve light clients, enable the [Light Push protocol](/learn/concepts/protocols#light-push) using the `lightpush` option: -```bash +```shell ./build/wakunode2 --lightpush=true ``` You can configure `nwaku` as a `Light Push client` using the `lightpushnode` option. This allows the node to request lightpush of published messages from peers. -```bash +```shell ./build/wakunode2 --lightpushnode=[LIGHT PUSH PEER MULTIADDR] ``` For example, consider a `nwaku` node that requests lightpush of published messages from peers: -```bash +```shell ./build/wakunode2 --lightpushnode=/dns4/node-01.ac-cn-hongkong-c.wakuv2.prod.statusim.net/tcp/30303/p2p/16Uiu2HAm4v86W3bmT1BiH6oSPzcsSr24iDQpSN5Qa992BCjjwgrD ``` @@ -247,7 +247,7 @@ For example, consider a `nwaku` node that requests lightpush of published messag When using a reverse proxy server for SSL/TLS encryption, you only want to announce the proxy server's IP or domain. Nwaku provides the `ext-multiaddr-only` and `ext-multiaddr` options for specifying published multiaddr: -```bash +```shell ./build/wakunode2 \ --ext-multiaddr-only=true \ --ext-multiaddr=[MULTIADDR TO PUBLISH] diff --git a/docs/guides/nwaku/run-docker-compose.md b/docs/guides/nwaku/run-docker-compose.md index 2c39311..4035fd5 100644 --- a/docs/guides/nwaku/run-docker-compose.md +++ b/docs/guides/nwaku/run-docker-compose.md @@ -21,7 +21,7 @@ This guide provides detailed steps to configure, run, monitor, and interact with ## Clone the repository -```bash +```shell git clone https://github.com/waku-org/nwaku-compose cd nwaku-compose ``` @@ -52,7 +52,7 @@ If you only want to relay traffic without sending messages to the network, you d Start all processes: `nwaku` node, database and Grafana for metrics. Your RLN membership is loaded into nwaku under the hood: -```bash +```shell docker-compose up -d ``` diff --git a/docs/guides/nwaku/run-docker.md b/docs/guides/nwaku/run-docker.md index 2385432..c8ecb26 100644 --- a/docs/guides/nwaku/run-docker.md +++ b/docs/guides/nwaku/run-docker.md @@ -15,7 +15,7 @@ The Nwaku Docker images are available on the Docker Hub public registry under th You can also build the Docker image locally: -```bash +```shell # Clone the repository git clone --recurse-submodules https://github.com/waku-org/nwaku cd nwaku @@ -28,7 +28,7 @@ make docker-image Run `nwaku` in a new Docker container: -```bash +```shell docker run [OPTIONS] [IMAGE] [ARG...] ``` @@ -38,7 +38,7 @@ docker run [OPTIONS] [IMAGE] [ARG...] Run `nwaku` using the most typical configuration: -```bash +```shell docker run -i -t -p 60000:60000 -p 9000:9000/udp statusteam/nim-waku:v0.20.0 \ --dns-discovery=true \ --dns-discovery-url=enrtree://ANEDLO25QVUGJOUTQFRYKWX6P4Z4GKVESBMHML7DZ6YK4LGS5FC5O@prod.wakuv2.nodes.status.im \ @@ -49,7 +49,7 @@ docker run -i -t -p 60000:60000 -p 9000:9000/udp statusteam/nim-waku:v0.20.0 \ To find your public IP, use: -```bash +```shell dig TXT +short o-o.myaddr.l.google.com @ns1.google.com | awk -F'"' '{ print $2}' ``` diff --git a/docs/guides/nwaku/run-node.md b/docs/guides/nwaku/run-node.md index c60ecae..cbcf381 100644 --- a/docs/guides/nwaku/run-node.md +++ b/docs/guides/nwaku/run-node.md @@ -41,7 +41,7 @@ You can run the `nwaku` binaries and Docker images on cloud service providers li Once you have gotten the `nwaku` binary, run it using the [default configuration](/guides/nwaku/config-methods#default-configuration-values): -```bash +```shell # Run with default configuration ./build/wakunode2 @@ -80,7 +80,7 @@ import TabItem from '@theme/TabItem'; -```bash +```shell curl --location 'http://127.0.0.1:8645/debug/v1/info' \ --header 'Accept: application/json' ``` @@ -120,7 +120,7 @@ Look for the log entry that begins with `Listening on`, for example: INF 2023-06-15 16:09:54.448+01:00 Listening on topics="waku node" tid=1623445 file=waku_node.nim:922 full=[/ip4/0.0.0.0/tcp/60000/p2p/16Uiu2HAmQCsH9V81xoqTwGuT3qwkZWbwY1TtTQwpr3DjHU2TSwMn][/ip4/0.0.0.0/tcp/8000/ws/p2p/16Uiu2HAmQCsH9V81xoqTwGuT3qwkZWbwY1TtTQwpr3DjHU2TSwMn] ``` -```bash +```shell # Listening TCP transport address /ip4/0.0.0.0/tcp/60000/p2p/16Uiu2HAmQCsH9V81xoqTwGuT3qwkZWbwY1TtTQwpr3DjHU2TSwMn @@ -140,7 +140,7 @@ Look for the log entry that begins with `DNS: discoverable ENR`, for example: INF 2023-06-15 16:09:54.448+01:00 DNS: discoverable ENR topics="waku node" tid=1623445 file=waku_node.nim:923 enr=enr:-Iu4QBKYj8Ovxwz4fIalxZ_1a8dOCU2WC-1LQrcBCCb4Np93f9-UuSZXn3vagJL1S3k3hwRYfOp3JSbW7_VqwtqMIeMBgmlkgnY0gmlwhAAAAACJc2VjcDI1NmsxoQOrmyV59dAzY4ZKrvrj32VOoZbLby8dCKFnXnqhIdQ0NYN0Y3CC6mCFd2FrdTIB ``` -```bash +```shell # ENR the node addresses are encoded in enr:-Iu4QBKYj8Ovxwz4fIalxZ_1a8dOCU2WC-1LQrcBCCb4Np93f9-UuSZXn3vagJL1S3k3hwRYfOp3JSbW7_VqwtqMIeMBgmlkgnY0gmlwhAAAAACJc2VjcDI1NmsxoQOrmyV59dAzY4ZKrvrj32VOoZbLby8dCKFnXnqhIdQ0NYN0Y3CC6mCFd2FrdTIB ``` @@ -153,7 +153,7 @@ Look for the log entry that begins with `Discv5: discoverable ENR`, for example: INF 2023-06-15 16:09:54.448+01:00 Discv5: discoverable ENR topics="waku node" tid=1623445 file=waku_node.nim:924 enr=enr:-IO4QDxToTg86pPCK2KvMeVCXC2ADVZWrxXSvNZeaoa0JhShbM5qed69RQz1s1mWEEqJ3aoklo_7EU9iIBcPMVeKlCQBgmlkgnY0iXNlY3AyNTZrMaEDdBHK1Gx6y_zv5DVw5Qb3DtSOMmVHTZO1WSORrF2loL2DdWRwgiMohXdha3UyAw ``` -```bash +```shell # ENR the node addresses are encoded in enr:-IO4QDxToTg86pPCK2KvMeVCXC2ADVZWrxXSvNZeaoa0JhShbM5qed69RQz1s1mWEEqJ3aoklo_7EU9iIBcPMVeKlCQBgmlkgnY0iXNlY3AyNTZrMaEDdBHK1Gx6y_zv5DVw5Qb3DtSOMmVHTZO1WSORrF2loL2DdWRwgiMohXdha3UyAw ```