### Casper Node Installation Guide Source: https://github.com/casper-network/casper-node/wiki/Mainnet-Node-Installation-Instructions This section links to the official Casper Documentation for detailed instructions on installing a Casper node. It covers prerequisites, installation steps, and configuration. ```Markdown This content has been moved to the [Casper Documentation](https://docs.casper.network/operators/setup/install-node/). ``` -------------------------------- ### Enable and Start Casper Node Service Source: https://github.com/casper-network/casper-node/wiki/Setup-non-root-user-for-node Commands to enable the Casper node service to start automatically on boot and to start the service immediately. This ensures the node is running and managed by systemd. ```bash sudo systemctl daemon-reload sudo systemctl enable casper-node.service sudo systemctl start casper-node.service ``` -------------------------------- ### Example JSON Response for Dump Queues Source: https://github.com/casper-network/casper-node/blob/dev/README.md A sample JSON response indicating the start of a queue dump operation. ```json { "Success": { "msg": "dumping queues" } } ``` -------------------------------- ### Install Ubuntu Prerequisites Source: https://github.com/casper-network/casper-node/blob/dev/README.md Installs necessary dependencies for building the Casper node on Ubuntu, including CMake, Rust, OpenSSL, and build tools. ```sh apt update apt install cmake libssl-dev pkg-config gcc g++ -y curl https://sh.rustup.rs -sSf | sh -s -- -y ``` -------------------------------- ### Setup Rust Environment Source: https://github.com/casper-network/casper-node/blob/dev/README.md Prepares the Rust build environment for compiling the Casper node. ```sh make setup-rs ``` -------------------------------- ### Casper Node Systemd Service File Source: https://github.com/casper-network/casper-node/wiki/Setup-non-root-user-for-node Defines the systemd service unit for the Casper node, specifying how to start, stop, and manage the service as the 'casper' user. This includes setting the working directory and user context. ```systemd [Unit] Description=Casper Node Service After=network.target [Service] User=casper Group=casper WorkingDirectory=/opt/casper ExecStart=/opt/casper/bin/casper-node run --config-path /etc/casper/config.toml Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target ``` -------------------------------- ### Example JSON Response for Dump Consensus Source: https://github.com/casper-network/casper-node/blob/dev/README.md A sample JSON response indicating the start of a consensus dump operation. ```json { "Success": { "msg": "dumping consensus state" } } ``` -------------------------------- ### Example JSON Response for Set Command Source: https://github.com/casper-network/casper-node/blob/dev/README.md A sample JSON response confirming a settings change on the diagnostics port. ```json { "Success": { "msg": "session unchanged" } } ``` -------------------------------- ### Faucet Contract Entry Points Source: https://github.com/casper-network/casper-node/blob/dev/smart_contracts/contracts/explorer/faucet/README.md This section outlines the key entry points for interacting with the Faucet Contract. It details the parameters required for setting variables and explains the funding mechanism for users and installers. ```casper-wasm Entry Point: set_variables Required Runtime Arguments: * available_amount: U512 - The total amount available for distribution each interval. * distributions_per_interval: u64 - The maximum number of distributions to be made each interval. * time_interval: u64 - The amount of time in milliseconds that must pass before the available amount is replenished. Entry Point: init Initializes a new purse for the faucet and sets up the faucet's state and named keys. Entry Point: call by installer Allows the installer to freely distribute funds from the faucet. Entry Point: call by user Allows regular users to receive funds from the faucet, subject to distribution limits and intervals. ``` -------------------------------- ### Install Prerequisite Tools Source: https://github.com/casper-network/casper-node/wiki/Install-build-environment-on-RedHat---CentOS Installs necessary development tools such as gcc, cmake, git, pkg-config, make, openssl-devel, and gcc-c++ using yum. ```bash sudo yum install gcc cmake git pkg-config make openssl-devel gcc-c++ ``` -------------------------------- ### Faucet Contract Costs Source: https://github.com/casper-network/casper-node/blob/dev/smart_contracts/contracts/explorer/faucet/README.md Provides an overview of the estimated costs associated with different operations on the Faucet Contract, including installation, setting variables, and calling the faucet by installer or user. ```casper-wasm Feature: faucet install Cost: 1492_30_872_143 Feature: faucet set variables Cost: 79_455_975 Feature: faucet call by installer Cost: 265_26_265_33 Feature: faucet call by user Cost: 2_558_318_531 ``` -------------------------------- ### Casper Smart Contract Development Source: https://github.com/casper-network/casper-node/wiki/Important-Links-for-Developers Resources for writing and deploying smart contracts on the Casper Network. Includes links to tutorials, example repositories, and essential crates for contract development. ```Rust # Essential Casper Crates for Smart Contract Development # For writing on-chain logic and interacting with the Casper runtime: # https://docs.rs/casper-contract/latest/casper_contract # For defining Casper-specific data types: # https://docs.rs/casper-types/latest/casper_types # For building command-line tools and clients: # https://docs.rs/casper-client/latest/casper_client # Example Smart Contracts Repository: # https://github.com/casper-network/casper-node/tree/dev/smart_contracts # Tutorials for contract upgrades: # https://docs.casper.network/resources/tutorials/beginner/upgrade-contract/ ``` -------------------------------- ### Set Permissions for Casper Directory Source: https://github.com/casper-network/casper-node/wiki/Setup-non-root-user-for-node Assigns ownership and appropriate permissions to the Casper installation directory for the newly created 'casper' user and group. This ensures the service can read and write necessary files. ```bash sudo chown -R casper:casper /opt/casper sudo chmod -R 755 /opt/casper ``` -------------------------------- ### Casper dApp Development with JavaScript Source: https://github.com/casper-network/casper-node/wiki/Important-Links-for-Developers Guides and SDKs for building decentralized applications on Casper using JavaScript. Covers interaction with the blockchain and contract deployment. ```JavaScript // Essential SDK for JavaScript dApp development: // https://www.npmjs.com/package/casper-js-sdk // Package for interacting with Casper contracts from JavaScript: // https://www.npmjs.com/package/casper-contract // Example: Initializing the Casper SDK // import { CasperClient, CLValueBuilder } from 'casper-js-sdk'; // const client = new CasperClient('https://your-node-url.com'); // Example: Deploying a contract (conceptual) // const deploy = contract.createContractDeploy(...); // const deployResult = await client.putDeploy(deploy); ``` -------------------------------- ### Example JSON Output for Consensus Dump Source: https://github.com/casper-network/casper-node/blob/dev/README.md An example of the actual consensus data dumped in JSON format, showing era details. ```json {"id":8,"start_time":"2022-03-01T14:54:42.176Z","start_height":88,"new_faulty" ... ``` -------------------------------- ### Example Log Entry for Queue Size Source: https://github.com/casper-network/casper-node/blob/dev/README.md An example log entry showing the current event queue size exceeding the configured threshold, along with details of event types and their counts. ```text Current event queue size (11000) is above the threshold (10000): details [("FinalitySignature", 3000), ("FromStorage", 1000), ("NetworkIncoming", 6500), ("Regular", 500)] ``` -------------------------------- ### Install Rust Toolchain Source: https://github.com/casper-network/casper-node/wiki/Install-build-environment-on-RedHat---CentOS Installs the Rust programming language toolchain using the official installation script from rust-lang.org. ```bash curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh ``` -------------------------------- ### Build and Install wabt Source: https://github.com/casper-network/casper-node/wiki/Install-build-environment-on-RedHat---CentOS Builds and installs the WebAssembly Binary Toolkit (wabt) for WASM size optimization. This involves cloning the repository, updating submodules, configuring with CMake, building with parallel jobs, and installing to the /usr prefix. ```bash BRANCH=1.0.23 git clone --branch ${BRANCH} https://github.com/WebAssembly/wabt.git "wabt-${BRANCH}" cd "wabt-${BRANCH}" git submodule update --init cd - cmake -S "wabt-${BRANCH}" -B "wabt-${BRANCH}/build" cmake --build "wabt-${BRANCH}/build" --parallel 8 sudo cmake --install "wabt-${BRANCH}/build" --prefix /usr --strip -v rm -rf "wabt-${BRANCH}" ``` -------------------------------- ### Install Casper Sidecar and Client Source: https://github.com/casper-network/casper-node/wiki/Staging-casper‐test-2.0.0-upgrade Installs the casper-sidecar (version 1.0.3) for RPC services and casper-client (version 3.0.1) compatible with Casper Node 2.0.0 using apt package manager. ```bash sudo apt update sudo apt install casper-sidecar casper-client ``` -------------------------------- ### Casper Node Binary Port Server Configuration Source: https://github.com/casper-network/casper-node/wiki/RPC-Configuration-with-2.0.0 Configuration for the binary port server in the Casper node. This includes the global QPS limit and a flag to enable/disable the retrieval of all values for potentially expensive calls. ```toml [binary_port_server] # The global max rate of requests (per second) before they are limited. # The implementation uses a sliding window algorithm. qps_limit = 110 # Flag that enables the `AllValues` get request. Disabled by default, because it can potentially be abused to retrieve huge amounts of data and clog the node. allow_request_get_all_values = false ``` -------------------------------- ### Example JSON Output for Event Queues Source: https://github.com/casper-network/casper-node/blob/dev/README.md An example of the event queue data dumped in JSON format. Empty arrays indicate no pending events. ```json {"queues":{"Regular":[],"Api":[],"Network":[],"Control":[],"NetworkIncoming":[] ``` ```json }}{"queues":{"Api":[],"Regular":[],"Control":[],"NetworkIncoming":[],"Network": []}} ``` ```json }}{"queues":{"Network":[],"Control":[],"Api":[],"NetworkIncoming":[],"Regular ":[]}} ``` -------------------------------- ### Interactive Use of Diagnostics Port Source: https://github.com/casper-network/casper-node/blob/dev/README.md Provides an example of connecting to the Casper Node's diagnostics port using `socat` for interactive debugging and command execution. ```shell socat readline unix:/path/to/debug.socket ``` -------------------------------- ### Restarting Casper Node and Sidecar Source: https://github.com/casper-network/casper-node/wiki/RPC-Configuration-with-2.0.0 Commands to restart the Casper node and its associated sidecar using the provided utility script. Ensure you have the correct version of `casper-node-launcher` if sidecar subcommands are missing. ```bash sudo /etc/casper/node_util.py restart sudo /etc/casper/node_util.py sidecar_restart ``` -------------------------------- ### Create Non-Root User and Group Source: https://github.com/casper-network/casper-node/wiki/Setup-non-root-user-for-node Creates a dedicated user and group for running the Casper node service. This is a fundamental security practice to isolate the node's operations. ```bash sudo groupadd --system casper sudo useradd --system -g casper -m -d /opt/casper -s /sbin/nologin casper ``` -------------------------------- ### Casper Sidecar RPC Server Configuration Source: https://github.com/casper-network/casper-node/wiki/RPC-Configuration-with-2.0.0 Configuration for the RPC server within the Casper sidecar. This section focuses on setting the QPS limit for handling HTTP requests to the RPC endpoint. ```toml [rpc_server.main_server] # The global maximum rate of HTTP requests (per second) before they are limited. # Request will be delayed to the next one second bucket once limited. qps_limit = 100 ``` -------------------------------- ### Casper Updater Usage Source: https://github.com/casper-network/casper-node/blob/dev/ci/casper_updater/README.md Demonstrates the basic usage of the casper-updater tool, including options for specifying the root directory and performing a dry run to preview changes. ```bash # Basic usage: prompts for version updates for each package ./casper-updater # Automatically bump the minor version for all packages ./casper-updater --bump=minor # Specify the casper-node root directory ./casper-updater --root-dir=/path/to/casper-node # Perform a dry run to see which files will be affected ./casper-updater --dry-run ``` -------------------------------- ### Verify CMake Version Source: https://github.com/casper-network/casper-node/wiki/Install-build-environment-on-RedHat---CentOS Checks the installed version of CMake to ensure it meets the minimum requirement of 3.4. ```bash cmake --version ``` -------------------------------- ### Build Casper Node Source: https://github.com/casper-network/casper-node/blob/dev/README.md Compiles the Casper node software in release mode, producing an optimized binary. ```rust cargo build -p casper-node --release ``` -------------------------------- ### Highway Rewards Analysis Tool Usage Source: https://github.com/casper-network/casper-node/blob/dev/utils/highway-rewards-analysis/README.md Demonstrates the command-line usage for the highway-rewards-analysis tool, including file input and optional verbose flag. ```bash highway-rewards-analysis [-v] FILE ``` -------------------------------- ### Stage Casper Node Protocols Source: https://github.com/casper-network/casper-node/wiki/Staging-upgrade-for-1.5.8 Stages the protocols for the Casper Node using the node_util.py script. This command requires root privileges and specifies the configuration file. ```shell sudo -u casper /etc/casper/node_util.py stage_protocols casper.conf ``` -------------------------------- ### Load Cargo Environment Source: https://github.com/casper-network/casper-node/wiki/Install-build-environment-on-RedHat---CentOS Loads the Cargo environment variables into the current shell session, making Rust tools available in the PATH. This is typically done after installing the Rust toolchain. ```bash source $HOME/.cargo/env ``` -------------------------------- ### Download and View Upgrade Script Source: https://github.com/casper-network/casper-node/wiki/Stage-upgrade-to-Casper-node-v1.5.6 Fetches the upgrade staging script from a remote URL for review before execution. This is an optional step to inspect the script's contents. ```shell curl -s genesis.casperlabs.io/casper/1_5_6/stage_upgrade.sh ``` -------------------------------- ### Download and Execute Old Upgrade Script Source: https://github.com/casper-network/casper-node/wiki/Upgrade-to-Casper-node-v1.5.3 This is an alternative method for staging the upgrade if `node_util.py` is not found. It downloads a shell script from a remote URL and executes it with root privileges. It's recommended to view the script content before execution. ```shell cd ~; curl -sSf genesis.casperlabs.io/casper/1_5_3/stage_upgrade.sh | sudo bash - ``` -------------------------------- ### Enable test-support feature Source: https://github.com/casper-network/casper-node/blob/dev/smart_contracts/contract/README.md Enables the `test-support` feature for the `casper-contract` crate, making the `contract_api::runtime::print` function available for debugging smart contracts during off-chain testing with `casper-engine-test-support`. ```toml casper-contract = { version = "1", features = ["test-support"] } ``` -------------------------------- ### Run a Validator Node Source: https://github.com/casper-network/casper-node/blob/dev/README.md Launches a Casper node as a validator, requiring a configuration file. ```sh casper-node validator /etc/casper-node/config.toml ``` -------------------------------- ### Casper Client Get Block API Source: https://github.com/casper-network/casper-node/wiki/Staging-upgrade-for-1.5.8 Retrieves information about a block from the Casper network. This is used to obtain the latest trusted hash for late staging recovery. ```APIDOC casper-client get-block --node-address Description: Retrieves the latest block information from the Casper network. Parameters: --node-address : The network address of the Casper node (e.g., https://rpc.mainnet.casperlabs.io). Returns: JSON object containing block details, including the block hash. Example: { "jsonrpc": "2.0", "id": null, "result": { "block": { "hash": "", "header": { "parent_hash": "...", "state_root_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_hash": "...", "டு_ ```