Contract 0x438F5071e2f7b90599AaB4d82F4D24d0EcFDe106 1

Contract Overview

Balance:
0 AVAX
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x0ad61a48e53d20594a8d5938278af2bb958fc7eb2d0fa4f35b599ad5b95f867cInitialize55936402022-02-02 16:19:09109 days 9 hrs ago0x209484169c126f69db7c83df8d7cd0cb3db22519 IN 0x438f5071e2f7b90599aab4d82f4d24d0ecfde1060 AVAX0.0100939355
0x145bc8e687c1c24afce8c4a4fafb0c63c022ef91edf1b5856e701d59d80cd1970x6080604055935872022-02-02 16:17:19109 days 9 hrs ago0x209484169c126f69db7c83df8d7cd0cb3db22519 IN  Create: AvacashTrees0 AVAX0.612085725225
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x4095767989ddf8270bce7539429de4062217567bd88789080d48d62e461799df77655152022-03-25 16:21:2958 days 9 hrs ago 0x55c2ee4f0a21c59f949f475e52415b5684280cb10x438f5071e2f7b90599aab4d82f4d24d0ecfde1060 AVAX
0x87c104144f2d5e9fb736abe9addb7ccab261005e1cb5b400eb1f6d8f9600cfdd76678522022-03-23 8:43:5260 days 16 hrs ago 0x55c2ee4f0a21c59f949f475e52415b5684280cb10x438f5071e2f7b90599aab4d82f4d24d0ecfde1060 AVAX
0xe18636b27d97a187863935705942f92aa978d35bc15cebd82e672ed8f6d9e80776677972022-03-23 8:41:5660 days 16 hrs ago 0x55c2ee4f0a21c59f949f475e52415b5684280cb10x438f5071e2f7b90599aab4d82f4d24d0ecfde1060 AVAX
0x6465548e5439a70512c41a13d9292ee78e0d765ff824ed2e8a2585f6c2062d0176248842022-03-22 8:54:5661 days 16 hrs ago 0x55c2ee4f0a21c59f949f475e52415b5684280cb10x438f5071e2f7b90599aab4d82f4d24d0ecfde1060 AVAX
0xd0371d5f0b0354ec0c5a796b598cb4a37ac253753938dca06e7675842ac43fc776183642022-03-22 5:16:1261 days 20 hrs ago 0x55c2ee4f0a21c59f949f475e52415b5684280cb10x438f5071e2f7b90599aab4d82f4d24d0ecfde1060 AVAX
0x85921f62c4a21b3e1c5ac59059267207d8406a30c7af237b7adc3ae830b1972476182832022-03-22 5:13:2861 days 20 hrs ago 0x55c2ee4f0a21c59f949f475e52415b5684280cb10x438f5071e2f7b90599aab4d82f4d24d0ecfde1060 AVAX
0x8cda7a9a7017aeea3065f91c2dad236081093932bde3320b78ffeefb5738940c76182452022-03-22 5:12:1161 days 20 hrs ago 0x55c2ee4f0a21c59f949f475e52415b5684280cb10x438f5071e2f7b90599aab4d82f4d24d0ecfde1060 AVAX
0xd449e6bef9325e69dd7e1ce227858318af80f7cf99648a4241e36e5aef7fa49574781052022-03-18 23:06:4765 days 2 hrs ago 0x55c2ee4f0a21c59f949f475e52415b5684280cb10x438f5071e2f7b90599aab4d82f4d24d0ecfde1060 AVAX
0x9c13b13ae7ac7f76dd211e0fc6e82916e0b48b5b49cb3043f2b4a1e69870e8e074767862022-03-18 22:22:4065 days 3 hrs ago 0x55c2ee4f0a21c59f949f475e52415b5684280cb10x438f5071e2f7b90599aab4d82f4d24d0ecfde1060 AVAX
0x94ccc59a3e1bac40bd8513c7f526a60429a5115d81043b1c60506b9704c13e3a74766602022-03-18 22:18:2365 days 3 hrs ago 0x55c2ee4f0a21c59f949f475e52415b5684280cb10x438f5071e2f7b90599aab4d82f4d24d0ecfde1060 AVAX
0xcd2a66822d938482e296a9adb8a1e3410f058b5dedce52c86737aa958f263e1a74720772022-03-18 19:42:0065 days 5 hrs ago 0x55c2ee4f0a21c59f949f475e52415b5684280cb10x438f5071e2f7b90599aab4d82f4d24d0ecfde1060 AVAX
0x62ab0a5a4c1e5cad5da460842f73faba739453eab52192a48db001054ad844f974719912022-03-18 19:39:0465 days 5 hrs ago 0x55c2ee4f0a21c59f949f475e52415b5684280cb10x438f5071e2f7b90599aab4d82f4d24d0ecfde1060 AVAX
0x70b72299e76094ed33cf58b3c15bc09c5abe5194b48f4615f4d9efd4640436db74376532022-03-18 0:23:2866 days 1 hr ago 0x55c2ee4f0a21c59f949f475e52415b5684280cb10x438f5071e2f7b90599aab4d82f4d24d0ecfde1060 AVAX
0xb9cb058f80580d582133d6e712ac268d7a62bea513c7ea64a94bb8dd0fc2609773867632022-03-16 20:06:5067 days 5 hrs ago 0x55c2ee4f0a21c59f949f475e52415b5684280cb10x438f5071e2f7b90599aab4d82f4d24d0ecfde1060 AVAX
0x2cbf4804028f62a003f2364e97e44d651bc5886cad6b0871a6c5f9fd1401d62f72504122022-03-13 13:50:0670 days 11 hrs ago 0x55c2ee4f0a21c59f949f475e52415b5684280cb10x438f5071e2f7b90599aab4d82f4d24d0ecfde1060 AVAX
0x306be3e16a26c4d86ccad8e3587821f1cd45d2496a583a9b9c6eae1179f5610e72503352022-03-13 13:47:3270 days 11 hrs ago 0x55c2ee4f0a21c59f949f475e52415b5684280cb10x438f5071e2f7b90599aab4d82f4d24d0ecfde1060 AVAX
0x87b291a4ed9bdb9b40c5e0f1e871f9c830f1371aa28d8c481970eb2dd19d3a1b72498072022-03-13 13:29:1970 days 11 hrs ago 0x55c2ee4f0a21c59f949f475e52415b5684280cb10x438f5071e2f7b90599aab4d82f4d24d0ecfde1060 AVAX
0x8ca70cd690a7e78ff743d33b9079e140102bc2d1ad0dcd59a6c8942a2a1cd7ec71585682022-03-11 9:41:1472 days 15 hrs ago 0x55c2ee4f0a21c59f949f475e52415b5684280cb10x438f5071e2f7b90599aab4d82f4d24d0ecfde1060 AVAX
0x6eb3d8135eed644816f29ea2023884c5f6058c7e5d77a8c1228a090d1212ed6e71585542022-03-11 9:40:4672 days 15 hrs ago 0x55c2ee4f0a21c59f949f475e52415b5684280cb10x438f5071e2f7b90599aab4d82f4d24d0ecfde1060 AVAX
0x5372c0fba8464d8d62828a9bd7410c8ff2be80054ec017c83de0fc353f8658af71584462022-03-11 9:37:0672 days 15 hrs ago 0x55c2ee4f0a21c59f949f475e52415b5684280cb10x438f5071e2f7b90599aab4d82f4d24d0ecfde1060 AVAX
0x469c70c7ff07249712e4d73a6134a082774a8b266de7e1cb5bb5d337c13b399c70404672022-03-08 15:26:0475 days 10 hrs ago 0x55c2ee4f0a21c59f949f475e52415b5684280cb10x438f5071e2f7b90599aab4d82f4d24d0ecfde1060 AVAX
0xac9e55f415d81ae3911edacbee707745e7976880c9ee8d9901d166e57ed97f0769865922022-03-07 9:00:5076 days 16 hrs ago 0x55c2ee4f0a21c59f949f475e52415b5684280cb10x438f5071e2f7b90599aab4d82f4d24d0ecfde1060 AVAX
0x667922d75e433b5bee9c44f9459230030e3afa03ddfbbd853924c9d35c390fc169675612022-03-06 21:58:4277 days 3 hrs ago 0x55c2ee4f0a21c59f949f475e52415b5684280cb10x438f5071e2f7b90599aab4d82f4d24d0ecfde1060 AVAX
0x8206a1391e972ba863630510c018295d47f8577e3f876df61a3c82cd348c532b69675252022-03-06 21:57:2877 days 3 hrs ago 0x55c2ee4f0a21c59f949f475e52415b5684280cb10x438f5071e2f7b90599aab4d82f4d24d0ecfde1060 AVAX
0xc09b79083f62503367e6ad1bdb582d35a3e0e611239e3561e05367fcdfa0193369566012022-03-06 15:44:3077 days 9 hrs ago 0x55c2ee4f0a21c59f949f475e52415b5684280cb10x438f5071e2f7b90599aab4d82f4d24d0ecfde1060 AVAX
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
AvacashTrees

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at testnet.snowtrace.io on 2022-04-01
*/

// https://avacash.finance
/*
█████╗ ██╗   ██╗ █████╗  ██████╗ █████╗ ███████╗██╗  ██╗
██╔══██╗██║   ██║██╔══██╗██╔════╝██╔══██╗██╔════╝██║  ██║
███████║██║   ██║███████║██║     ███████║███████╗███████║
██╔══██║╚██╗ ██╔╝██╔══██║██║     ██╔══██║╚════██║██╔══██║
██║  ██║ ╚████╔╝ ██║  ██║╚██████╗██║  ██║███████║██║  ██║
╚═╝  ╚═╝  ╚═══╝  ╚═╝  ╚═╝ ╚═════╝╚═╝  ╚═╝╚══════╝╚═╝  ╚═╝

███████╗██╗███╗   ██╗ █████╗ ███╗   ██╗ ██████╗███████╗
██╔════╝██║████╗  ██║██╔══██╗████╗  ██║██╔════╝██╔════╝
█████╗  ██║██╔██╗ ██║███████║██╔██╗ ██║██║     █████╗
██╔══╝  ██║██║╚██╗██║██╔══██║██║╚██╗██║██║     ██╔══╝
██║     ██║██║ ╚████║██║  ██║██║ ╚████║╚██████╗███████╗
╚═╝     ╚═╝╚═╝  ╚═══╝╚═╝  ╚═╝╚═╝  ╚═══╝ ╚═════╝╚══════╝

*/

/*
Original code extracted from:
https://etherscan.io/address/0x200a79068d8141924b511bc78cb55dca89cf5c2e#code
License: MIT
See more in: https://etherscan.io/contract-license-types and
https://github.com/github/choosealicense.com/blob/gh-pages/_licenses/mit.txt
*/
// SPDX-License-Identifier: MIT


// File 4 of 4 : Initializable.sol
//

pragma solidity >=0.4.24 <0.7.0;


/**
 * @title Initializable
 *
 * @dev Helper contract to support initializer functions. To use it, replace
 * the constructor with a function that has the `initializer` modifier.
 * WARNING: Unlike constructors, initializer functions must be manually
 * invoked. This applies both to deploying an Initializable contract, as well
 * as extending an Initializable contract via inheritance.
 * WARNING: When used with inheritance, manual care must be taken to not invoke
 * a parent initializer twice, or ensure that all initializers are idempotent,
 * because this is not dealt with automatically as with constructors.
 */
contract Initializable {

  /**
   * @dev Indicates that the contract has been initialized.
   */
  bool private initialized;

  /**
   * @dev Indicates that the contract is in the process of being initialized.
   */
  bool private initializing;

  /**
   * @dev Modifier to use in the initializer function of a contract.
   */
  modifier initializer() {
    require(initializing || isConstructor() || !initialized, "Contract instance has already been initialized");

    bool isTopLevelCall = !initializing;
    if (isTopLevelCall) {
      initializing = true;
      initialized = true;
    }

    _;

    if (isTopLevelCall) {
      initializing = false;
    }
  }

  /// @dev Returns true if and only if the function is running in the constructor
  function isConstructor() private view returns (bool) {
    // extcodesize checks the size of the code stored in an address, and
    // address returns the current address. Since the code is still not
    // deployed when running a constructor, any checks on its code size will
    // yield zero, making it an effective way to detect if a contract is
    // under construction or not.
    address self = address(this);
    uint256 cs;
    assembly { cs := extcodesize(self) }
    return cs == 0;
  }

  // Reserved storage space to allow for layout changes in the future.
  uint256[50] private ______gap;
}

// File 3 of 4 : IBatchTreeUpdateVerifier.sol
//

pragma solidity ^0.6.0;

interface IBatchTreeUpdateVerifier {
  function verifyProof(bytes calldata proof, uint256[1] calldata input) external view returns (bool);
}

// File 2 of 4 : ITornadoTreesV1.sol
//

pragma solidity ^0.6.0;

interface ITornadoTreesV1 {
  function lastProcessedDepositLeaf() external view returns (uint256);

  function lastProcessedWithdrawalLeaf() external view returns (uint256);

  function depositRoot() external view returns (bytes32);

  function withdrawalRoot() external view returns (bytes32);

  function deposits(uint256 i) external view returns (bytes32);

  function withdrawals(uint256 i) external view returns (bytes32);

  function registerDeposit(address instance, bytes32 commitment) external;

  function registerWithdrawal(address instance, bytes32 nullifier) external;
}

// File 1 of 4 : TornadoTrees.sol
// https://tornado.cash
/*
* d888888P                                           dP              a88888b.                   dP
*    88                                              88             d8'   `88                   88
*    88    .d8888b. 88d888b. 88d888b. .d8888b. .d888b88 .d8888b.    88        .d8888b. .d8888b. 88d888b.
*    88    88'  `88 88'  `88 88'  `88 88'  `88 88'  `88 88'  `88    88        88'  `88 Y8ooooo. 88'  `88
*    88    88.  .88 88       88    88 88.  .88 88.  .88 88.  .88 dP Y8.   .88 88.  .88       88 88    88
*    dP    `88888P' dP       dP    dP `88888P8 `88888P8 `88888P' 88  Y88888P' `88888P8 `88888P' dP    dP
* ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
*/

//

pragma solidity ^0.6.0;
pragma experimental ABIEncoderV2;

//import "./interfaces/ITornadoTreesV1.sol";
//import "./interfaces/IBatchTreeUpdateVerifier.sol";
//import "@openzeppelin/upgrades-core/contracts/Initializable.sol";

/// @dev This contract holds a merkle tree of all tornado cash deposit and withdrawal events
contract AvacashTrees is Initializable {
  address public governance;
  bytes32 public depositRoot;
  bytes32 public previousDepositRoot;
  bytes32 public withdrawalRoot;
  bytes32 public previousWithdrawalRoot;
  address public tornadoProxy;
  IBatchTreeUpdateVerifier public treeUpdateVerifier;
  ITornadoTreesV1 public  tornadoTreesV1;

  uint256 public constant CHUNK_TREE_HEIGHT = 8;
  uint256 public constant CHUNK_SIZE = 2**CHUNK_TREE_HEIGHT;
  uint256 public constant ITEM_SIZE = 32 + 20 + 4;
  uint256 public constant BYTES_SIZE = 32 + 32 + 4 + CHUNK_SIZE * ITEM_SIZE;
  uint256 public constant SNARK_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;

  mapping(uint256 => bytes32) public deposits;
  uint256 public depositsLength;
  uint256 public lastProcessedDepositLeaf;
  uint256 public  depositsV1Length;

  mapping(uint256 => bytes32) public withdrawals;
  uint256 public withdrawalsLength;
  uint256 public lastProcessedWithdrawalLeaf;
  uint256 public  withdrawalsV1Length;

  event DepositData(address instance, bytes32 indexed hash, uint256 block, uint256 index);
  event WithdrawalData(address instance, bytes32 indexed hash, uint256 block, uint256 index);
  event VerifierUpdated(address newVerifier);
  event ProxyUpdated(address newProxy);

  struct TreeLeaf {
    bytes32 hash;
    address instance;
    uint32 block;
  }

  modifier onlyTornadoProxy {
    require(msg.sender == tornadoProxy, "Not authorized");
    _;
  }

  modifier onlyGovernance() {
    require(msg.sender == governance, "Only governance can perform this action");
    _;
  }

  /* struct SearchParams {
    uint256 depositsFrom;
    uint256 depositsStep;
    uint256 withdrawalsFrom;
    uint256 withdrawalsStep;
  } */

  constructor(
    /* address _governance, */
    ITornadoTreesV1 _tornadoTreesV1
    /* SearchParams memory _searchParams */
  ) public {
    /* governance = _governance; */
    governance = msg.sender;
    tornadoTreesV1 = _tornadoTreesV1;

    /* depositsV1Length = findArrayLength(
      _tornadoTreesV1,
      "deposits(uint256)",
      _searchParams.depositsFrom,
      _searchParams.depositsStep
    ); */
    depositsV1Length = 0;
    /* withdrawalsV1Length = findArrayLength(
      _tornadoTreesV1,
      "withdrawals(uint256)",
      _searchParams.withdrawalsFrom,
      _searchParams.withdrawalsStep
    );
    */
    withdrawalsV1Length=0;
  }

  event NewGovernance(address newGovernance);

  function setNewGovernance(address _newGovernance) external onlyGovernance {
    governance = _newGovernance;
    emit NewGovernance(governance);
  }

  function initialize(address _tornadoProxy, IBatchTreeUpdateVerifier _treeUpdateVerifier) public initializer onlyGovernance {
    tornadoProxy = _tornadoProxy;
    treeUpdateVerifier = _treeUpdateVerifier;

    depositRoot = tornadoTreesV1.depositRoot();
    uint256 lastDepositLeaf = tornadoTreesV1.lastProcessedDepositLeaf();
    require(lastDepositLeaf % CHUNK_SIZE == 0, "Incorrect TornadoTrees state");
    lastProcessedDepositLeaf = lastDepositLeaf;
    depositsLength = depositsV1Length;

    withdrawalRoot = tornadoTreesV1.withdrawalRoot();
    uint256 lastWithdrawalLeaf = tornadoTreesV1.lastProcessedWithdrawalLeaf();
    require(lastWithdrawalLeaf % CHUNK_SIZE == 0, "Incorrect TornadoTrees state");
    lastProcessedWithdrawalLeaf = lastWithdrawalLeaf;
    withdrawalsLength = withdrawalsV1Length;
  }

  /// @dev Queue a new deposit data to be inserted into a merkle tree
  function registerDeposit(address _instance, bytes32 _commitment) public onlyTornadoProxy {
    uint256 _depositsLength = depositsLength;
    deposits[_depositsLength] = keccak256(abi.encode(_instance, _commitment, blockNumber()));
    emit DepositData(_instance, _commitment, blockNumber(), _depositsLength);
    depositsLength = _depositsLength + 1;
  }

  /// @dev Queue a new withdrawal data to be inserted into a merkle tree
  function registerWithdrawal(address _instance, bytes32 _nullifierHash) public onlyTornadoProxy {
    uint256 _withdrawalsLength = withdrawalsLength;
    withdrawals[_withdrawalsLength] = keccak256(abi.encode(_instance, _nullifierHash, blockNumber()));
    emit WithdrawalData(_instance, _nullifierHash, blockNumber(), _withdrawalsLength);
    withdrawalsLength = _withdrawalsLength + 1;
  }

  /// @dev Insert a full batch of queued deposits into a merkle tree
  /// @param _proof A snark proof that elements were inserted correctly
  /// @param _argsHash A hash of snark inputs
  /// @param _argsHash Current merkle tree root
  /// @param _newRoot Updated merkle tree root
  /// @param _pathIndices Merkle path to inserted batch
  /// @param _events A batch of inserted events (leaves)
  function updateDepositTree(
    bytes calldata _proof,
    bytes32 _argsHash,
    bytes32 _currentRoot,
    bytes32 _newRoot,
    uint32 _pathIndices,
    TreeLeaf[CHUNK_SIZE] calldata _events
  ) public {
    uint256 offset = lastProcessedDepositLeaf;
    require(_currentRoot == depositRoot, "Proposed deposit root is invalid");
    require(_pathIndices == offset >> CHUNK_TREE_HEIGHT, "Incorrect deposit insert index");

    bytes memory data = new bytes(BYTES_SIZE);
    assembly {
      mstore(add(data, 0x44), _pathIndices)
      mstore(add(data, 0x40), _newRoot)
      mstore(add(data, 0x20), _currentRoot)
    }
    for (uint256 i = 0; i < CHUNK_SIZE; i++) {
      (bytes32 hash, address instance, uint32 blockNumber) = (_events[i].hash, _events[i].instance, _events[i].block);
      bytes32 leafHash = keccak256(abi.encode(instance, hash, blockNumber));
      bytes32 deposit = offset + i >= depositsV1Length ? deposits[offset + i] : tornadoTreesV1.deposits(offset + i);
      require(leafHash == deposit, "Incorrect deposit");
      assembly {
        let itemOffset := add(data, mul(ITEM_SIZE, i))
        mstore(add(itemOffset, 0x7c), blockNumber)
        mstore(add(itemOffset, 0x78), instance)
        mstore(add(itemOffset, 0x64), hash)
      }
      if (offset + i >= depositsV1Length) {
        delete deposits[offset + i];
      } else {
        emit DepositData(instance, hash, blockNumber, offset + i);
      }
    }

    uint256 argsHash = uint256(sha256(data)) % SNARK_FIELD;
    require(argsHash == uint256(_argsHash), "Invalid args hash");
    require(treeUpdateVerifier.verifyProof(_proof, [argsHash]), "Invalid deposit tree update proof");

    previousDepositRoot = _currentRoot;
    depositRoot = _newRoot;
    lastProcessedDepositLeaf = offset + CHUNK_SIZE;
  }

  /// @dev Insert a full batch of queued withdrawals into a merkle tree
  /// @param _proof A snark proof that elements were inserted correctly
  /// @param _argsHash A hash of snark inputs
  /// @param _argsHash Current merkle tree root
  /// @param _newRoot Updated merkle tree root
  /// @param _pathIndices Merkle path to inserted batch
  /// @param _events A batch of inserted events (leaves)
  function updateWithdrawalTree(
    bytes calldata _proof,
    bytes32 _argsHash,
    bytes32 _currentRoot,
    bytes32 _newRoot,
    uint32 _pathIndices,
    TreeLeaf[CHUNK_SIZE] calldata _events
  ) public {
    uint256 offset = lastProcessedWithdrawalLeaf;
    require(_currentRoot == withdrawalRoot, "Proposed withdrawal root is invalid");
    require(_pathIndices == offset >> CHUNK_TREE_HEIGHT, "Incorrect withdrawal insert index");

    bytes memory data = new bytes(BYTES_SIZE);
    assembly {
      mstore(add(data, 0x44), _pathIndices)
      mstore(add(data, 0x40), _newRoot)
      mstore(add(data, 0x20), _currentRoot)
    }
    for (uint256 i = 0; i < CHUNK_SIZE; i++) {
      (bytes32 hash, address instance, uint32 blockNumber) = (_events[i].hash, _events[i].instance, _events[i].block);
      bytes32 leafHash = keccak256(abi.encode(instance, hash, blockNumber));
      bytes32 withdrawal = offset + i >= withdrawalsV1Length ? withdrawals[offset + i] : tornadoTreesV1.withdrawals(offset + i);
      require(leafHash == withdrawal, "Incorrect withdrawal");
      assembly {
        let itemOffset := add(data, mul(ITEM_SIZE, i))
        mstore(add(itemOffset, 0x7c), blockNumber)
        mstore(add(itemOffset, 0x78), instance)
        mstore(add(itemOffset, 0x64), hash)
      }
      if (offset + i >= withdrawalsV1Length) {
        delete withdrawals[offset + i];
      } else {
        emit WithdrawalData(instance, hash, blockNumber, offset + i);
      }
    }

    uint256 argsHash = uint256(sha256(data)) % SNARK_FIELD;
    require(argsHash == uint256(_argsHash), "Invalid args hash");
    require(treeUpdateVerifier.verifyProof(_proof, [argsHash]), "Invalid withdrawal tree update proof");

    previousWithdrawalRoot = _currentRoot;
    withdrawalRoot = _newRoot;
    lastProcessedWithdrawalLeaf = offset + CHUNK_SIZE;
  }

  function validateRoots(bytes32 _depositRoot, bytes32 _withdrawalRoot) public view {
    require(_depositRoot == depositRoot || _depositRoot == previousDepositRoot, "Incorrect deposit tree root");
    require(_withdrawalRoot == withdrawalRoot || _withdrawalRoot == previousWithdrawalRoot, "Incorrect withdrawal tree root");
  }

  /// @dev There is no array length getter for deposit and withdrawal arrays
  /// in the previous contract, so we have to find them length manually.
  /// Used only during deployment
  /* function findArrayLength(
    ITornadoTreesV1 _tornadoTreesV1,
    string memory _type,
    uint256 _from, // most likely array length after the proposal has passed
    uint256 _step // optimal step size to find first match, approximately equals dispersion
  ) internal view virtual returns (uint256) {
    // Find the segment with correct array length
    bool direction = elementExists(_tornadoTreesV1, _type, _from);
    do {
      _from = direction ? _from + _step : _from - _step;
    } while (direction == elementExists(_tornadoTreesV1, _type, _from));
    uint256 high = direction ? _from : _from + _step;
    uint256 low = direction ? _from - _step : _from;
    uint256 mid = (high + low) / 2;

    // Perform a binary search in this segment
    while (low < mid) {
      if (elementExists(_tornadoTreesV1, _type, mid)) {
        low = mid;
      } else {
        high = mid;
      }
      mid = (low + high) / 2;
    }
    return mid + 1;
  } */

  function elementExists(
    ITornadoTreesV1 _tornadoTreesV1,
    string memory _type,
    uint256 index
  ) public view returns (bool success) {
    // Try to get the element. If it succeeds the array length is higher, it it reverts the length is equal or lower
    (success, ) = address(_tornadoTreesV1).staticcall{ gas: 2500 }(abi.encodeWithSignature(_type, index));
  }

  function setTornadoProxyContract(address _tornadoProxy) external onlyGovernance {
    tornadoProxy = _tornadoProxy;
    emit ProxyUpdated(_tornadoProxy);
  }



  function setVerifierContract(IBatchTreeUpdateVerifier _treeUpdateVerifier) external onlyGovernance {
    treeUpdateVerifier = _treeUpdateVerifier;
    emit VerifierUpdated(address(_treeUpdateVerifier));
  }

  function blockNumber() public view virtual returns (uint256) {
    return block.number;
  }
}

Contract ABI

[{"inputs":[{"internalType":"contract ITornadoTreesV1","name":"_tornadoTreesV1","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"instance","type":"address"},{"indexed":true,"internalType":"bytes32","name":"hash","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"DepositData","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newGovernance","type":"address"}],"name":"NewGovernance","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newProxy","type":"address"}],"name":"ProxyUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newVerifier","type":"address"}],"name":"VerifierUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"instance","type":"address"},{"indexed":true,"internalType":"bytes32","name":"hash","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"WithdrawalData","type":"event"},{"inputs":[],"name":"BYTES_SIZE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CHUNK_SIZE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CHUNK_TREE_HEIGHT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ITEM_SIZE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SNARK_FIELD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"depositRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"deposits","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"depositsLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"depositsV1Length","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract ITornadoTreesV1","name":"_tornadoTreesV1","type":"address"},{"internalType":"string","name":"_type","type":"string"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"elementExists","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governance","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tornadoProxy","type":"address"},{"internalType":"contract IBatchTreeUpdateVerifier","name":"_treeUpdateVerifier","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastProcessedDepositLeaf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastProcessedWithdrawalLeaf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"previousDepositRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"previousWithdrawalRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_instance","type":"address"},{"internalType":"bytes32","name":"_commitment","type":"bytes32"}],"name":"registerDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_instance","type":"address"},{"internalType":"bytes32","name":"_nullifierHash","type":"bytes32"}],"name":"registerWithdrawal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newGovernance","type":"address"}],"name":"setNewGovernance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tornadoProxy","type":"address"}],"name":"setTornadoProxyContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IBatchTreeUpdateVerifier","name":"_treeUpdateVerifier","type":"address"}],"name":"setVerifierContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tornadoProxy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tornadoTreesV1","outputs":[{"internalType":"contract ITornadoTreesV1","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treeUpdateVerifier","outputs":[{"internalType":"contract IBatchTreeUpdateVerifier","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_proof","type":"bytes"},{"internalType":"bytes32","name":"_argsHash","type":"bytes32"},{"internalType":"bytes32","name":"_currentRoot","type":"bytes32"},{"internalType":"bytes32","name":"_newRoot","type":"bytes32"},{"internalType":"uint32","name":"_pathIndices","type":"uint32"},{"components":[{"internalType":"bytes32","name":"hash","type":"bytes32"},{"internalType":"address","name":"instance","type":"address"},{"internalType":"uint32","name":"block","type":"uint32"}],"internalType":"struct AvacashTrees.TreeLeaf[256]","name":"_events","type":"tuple[256]"}],"name":"updateDepositTree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_proof","type":"bytes"},{"internalType":"bytes32","name":"_argsHash","type":"bytes32"},{"internalType":"bytes32","name":"_currentRoot","type":"bytes32"},{"internalType":"bytes32","name":"_newRoot","type":"bytes32"},{"internalType":"uint32","name":"_pathIndices","type":"uint32"},{"components":[{"internalType":"bytes32","name":"hash","type":"bytes32"},{"internalType":"address","name":"instance","type":"address"},{"internalType":"uint32","name":"block","type":"uint32"}],"internalType":"struct AvacashTrees.TreeLeaf[256]","name":"_events","type":"tuple[256]"}],"name":"updateWithdrawalTree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_depositRoot","type":"bytes32"},{"internalType":"bytes32","name":"_withdrawalRoot","type":"bytes32"}],"name":"validateRoots","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawalRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"withdrawals","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawalsLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawalsV1Length","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b50604051620030f8380380620030f88339818101604052810190620000379190620000e7565b33603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080603a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000603e8190555060006042819055505062000175565b600081519050620000e1816200015b565b92915050565b600060208284031215620000fa57600080fd5b60006200010a84828501620000d0565b91505092915050565b600062000120826200013b565b9050919050565b6000620001348262000113565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b620001668162000127565b81146200017257600080fd5b50565b612f7380620001856000396000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c80638955fe8a1161010f578063c11b9681116100a2578063e7d460bb11610071578063e7d460bb14610563578063e91e13a91461057f578063f154240a1461059d578063fe8137e2146105bb576101f0565b8063c11b9681146104f1578063c34c78821461050d578063c6758d6b1461052b578063ca3628dc14610547576101f0565b8063adc13d3c116100de578063adc13d3c14610467578063b02c43d014610485578063b3a4184b146104b5578063b4a6359e146104d3576101f0565b80638955fe8a146103f35780639e2fc73b14610411578063a25da83c1461042d578063a2b28fe614610449576101f0565b80634929afc9116101875780635cc07076116101565780635cc0707614610357578063710daf4d14610387578063715d3a43146103a55780638895b8ef146103d5576101f0565b80634929afc9146102e15780634a20de58146102fd57806357e871e71461031b5780635aa6e67514610339576101f0565b8063218df2e3116101c3578063218df2e31461026b5780632fb7749d1461028957806344c8db39146102a7578063485cc955146102c5576101f0565b806301ae1920146101f557806302709f67146102115780631c100fa61461022f578063206eb63c1461024d575b600080fd5b61020f600480360381019061020a9190611ff5565b6105d9565b005b61021961070b565b6040516102269190612c7a565b60405180910390f35b610237610711565b6040516102449190612905565b60405180910390f35b610255610737565b6040516102629190612a7f565b60405180910390f35b61027361075d565b6040516102809190612c7a565b60405180910390f35b610291610781565b60405161029e9190612c7a565b60405180910390f35b6102af610787565b6040516102bc9190612c7a565b60405180910390f35b6102df60048036038101906102da9190612031565b61078d565b005b6102fb60048036038101906102f691906120fb565b610cdf565b005b61030561121c565b6040516103129190612a64565b60405180910390f35b610323611242565b6040516103309190612c7a565b60405180910390f35b61034161124a565b60405161034e9190612905565b60405180910390f35b610371600480360381019061036c9190612233565b611270565b60405161037e9190612a17565b60405180910390f35b61038f611288565b60405161039c9190612c7a565b60405180910390f35b6103bf60048036038101906103ba91906121cc565b61128d565b6040516103cc91906129fc565b60405180910390f35b6103dd611388565b6040516103ea9190612c7a565b60405180910390f35b6103fb61138d565b6040516104089190612a17565b60405180910390f35b61042b60048036038101906104269190611fcc565b611393565b005b610447600480360381019061044291906121a3565b61149e565b005b6104516115a9565b60405161045e9190612c7a565b60405180910390f35b61046f6115af565b60405161047c9190612c7a565b60405180910390f35b61049f600480360381019061049a9190612233565b6115bd565b6040516104ac9190612a17565b60405180910390f35b6104bd6115d5565b6040516104ca9190612a17565b60405180910390f35b6104db6115db565b6040516104e89190612c7a565b60405180910390f35b61050b600480360381019061050691906120bf565b6115e1565b005b610515611685565b6040516105229190612a17565b60405180910390f35b61054560048036038101906105409190611ff5565b61168b565b005b610561600480360381019061055c91906120fb565b6117bd565b005b61057d60048036038101906105789190611fcc565b611cfa565b005b610587611e27565b6040516105949190612c7a565b60405180910390f35b6105a5611e2f565b6040516105b29190612c7a565b60405180910390f35b6105c3611e35565b6040516105d09190612a17565b60405180910390f35b603860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610669576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066090612c5a565b60405180910390fd5b60006040549050828261067a611242565b60405160200161068c93929190612920565b60405160208183030381529060405280519060200120603f600083815260200190815260200160002081905550817f5d3e96213d4520bdc95a25d628a39768f1a90a2b939894355479596910d179df846106e4611242565b846040516106f49392919061298e565b60405180910390a260018101604081905550505050565b60405481565b603860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b603a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181565b60425481565b603e5481565b600060019054906101000a900460ff16806107ac57506107ab611e3b565b5b806107c2575060008054906101000a900460ff16155b610801576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f890612b9a565b60405180910390fd5b60008060019054906101000a900460ff161590508015610851576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d890612b3a565b60405180910390fd5b82603860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081603960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550603a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638955fe8a6040518163ffffffff1660e01b815260040160206040518083038186803b1580156109cb57600080fd5b505afa1580156109df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a039190612096565b6034819055506000603a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4a6359e6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a7357600080fd5b505afa158015610a87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aab919061225c565b90506000600860020a8281610abc57fe5b0614610afd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af490612c3a565b60405180910390fd5b80603d81905550603e54603c81905550603a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c34c78826040518163ffffffff1660e01b815260040160206040518083038186803b158015610b7557600080fd5b505afa158015610b89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bad9190612096565b6036819055506000603a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a2b28fe66040518163ffffffff1660e01b815260040160206040518083038186803b158015610c1d57600080fd5b505afa158015610c31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c55919061225c565b90506000600860020a8281610c6657fe5b0614610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e90612c3a565b60405180910390fd5b8060418190555060425460408190555050508015610cda5760008060016101000a81548160ff0219169083151502179055505b505050565b6000603d5490506034548514610d2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2190612bfa565b60405180910390fd5b600881901c8363ffffffff1614610d76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6d90612c1a565b60405180910390fd5b60606038600860020a0260440167ffffffffffffffff81118015610d9957600080fd5b506040519080825280601f01601f191660200182016040528015610dcc5781602001600182028036833780820191505090505b50905083604482015284604082015285602082015260005b600860020a81101561103357600080600086846101008110610e0257fe5b606002016000013587856101008110610e1757fe5b606002016020016020810190610e2d9190611fcc565b88866101008110610e3a57fe5b606002016040016020810190610e509190612285565b9250925092506000828483604051602001610e6d93929190612957565b6040516020818303038152906040528051906020012090506000603e548689011015610f4557603a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b02c43d0878a016040518263ffffffff1660e01b8152600401610ef09190612c7a565b60206040518083038186803b158015610f0857600080fd5b505afa158015610f1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f409190612096565b610f5c565b603b6000878a018152602001908152602001600020545b9050808214610fa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9790612b1a565b60405180910390fd5b85603802870183607c82015284607882015285606482015250603e5486890110610fe257603b6000878a01815260200190815260200160002060009055611021565b847fc711bd1d2cdd9c8978324cc83ce34c17f6ada898f8273efeb9585c1312d4ef678585898c01604051611018939291906129c5565b60405180910390a25b50505050508080600101915050610de4565b5060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161106791906128d7565b602060405180830381855afa158015611084573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906110a79190612096565b60001c816110b157fe5b0690508760001c81146110f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f090612a9a565b60405180910390fd5b603960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638d8f8a5c8b8b6040518060200160405280868152506040518463ffffffff1660e01b815260040161116693929190612a32565b60206040518083038186803b15801561117e57600080fd5b505afa158015611192573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b6919061206d565b6111f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ec90612aba565b60405180910390fd5b8660358190555085603481905550600860020a8301603d8190555050505050505050505050565b603960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600043905090565b603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b603f6020528060005260406000206000915090505481565b603881565b60008373ffffffffffffffffffffffffffffffffffffffff166109c484846040516024016112bb9190612c7a565b604051602081830303815290604052906040516112d891906128ee565b60405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161133a91906128d7565b6000604051808303818686fa925050503d8060008114611376576040519150601f19603f3d011682016040523d82523d6000602084013e61137b565b606091505b5050809150509392505050565b600881565b60345481565b603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611423576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141a90612b3a565b60405180910390fd5b80603860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507ffc80377ca9c49cc11ae6982f390a42db976d5530af7c43889264b13fbbd7c57e816040516114939190612905565b60405180910390a150565b603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461152e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152590612b3a565b60405180910390fd5b80603960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fd24015cc99cc1700cafca3042840a1d8ac1e3964fd2e0e37ea29c654056ee3278160405161159e9190612905565b60405180910390a150565b60415481565b6038600860020a0260440181565b603b6020528060005260406000206000915090505481565b60375481565b603d5481565b6034548214806115f2575060355482145b611631576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162890612b7a565b60405180910390fd5b603654811480611642575060375481145b611681576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167890612b5a565b60405180910390fd5b5050565b60365481565b603860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461171b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171290612c5a565b60405180910390fd5b6000603c549050828261172c611242565b60405160200161173e93929190612920565b60405160208183030381529060405280519060200120603b600083815260200190815260200160002081905550817fc711bd1d2cdd9c8978324cc83ce34c17f6ada898f8273efeb9585c1312d4ef6784611796611242565b846040516117a69392919061298e565b60405180910390a260018101603c81905550505050565b600060415490506036548514611808576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ff90612bba565b60405180910390fd5b600881901c8363ffffffff1614611854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184b90612ada565b60405180910390fd5b60606038600860020a0260440167ffffffffffffffff8111801561187757600080fd5b506040519080825280601f01601f1916602001820160405280156118aa5781602001600182028036833780820191505090505b50905083604482015284604082015285602082015260005b600860020a811015611b11576000806000868461010081106118e057fe5b6060020160000135878561010081106118f557fe5b60600201602001602081019061190b9190611fcc565b8886610100811061191857fe5b60600201604001602081019061192e9190612285565b925092509250600082848360405160200161194b93929190612957565b60405160208183030381529060405280519060200120905060006042548689011015611a2357603a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635cc07076878a016040518263ffffffff1660e01b81526004016119ce9190612c7a565b60206040518083038186803b1580156119e657600080fd5b505afa1580156119fa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1e9190612096565b611a3a565b603f6000878a018152602001908152602001600020545b9050808214611a7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7590612bda565b60405180910390fd5b85603802870183607c8201528460788201528560648201525060425486890110611ac057603f6000878a01815260200190815260200160002060009055611aff565b847f5d3e96213d4520bdc95a25d628a39768f1a90a2b939894355479596910d179df8585898c01604051611af6939291906129c5565b60405180910390a25b505050505080806001019150506118c2565b5060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051611b4591906128d7565b602060405180830381855afa158015611b62573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611b859190612096565b60001c81611b8f57fe5b0690508760001c8114611bd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bce90612a9a565b60405180910390fd5b603960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638d8f8a5c8b8b6040518060200160405280868152506040518463ffffffff1660e01b8152600401611c4493929190612a32565b60206040518083038186803b158015611c5c57600080fd5b505afa158015611c70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c94919061206d565b611cd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cca90612afa565b60405180910390fd5b8660378190555085603681905550600860020a830160418190555050505050505050505050565b603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8190612b3a565b60405180910390fd5b80603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f4f386975ea1c2f7cf1845b08bee00626fbb624ecad16254d63d9bb9ba86526de603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051611e1c9190612905565b60405180910390a150565b600860020a81565b603c5481565b60355481565b6000803090506000813b9050600081149250505090565b600081359050611e6181612e9c565b92915050565b60008190508260606101000282011115611e8057600080fd5b92915050565b600081519050611e9581612eb3565b92915050565b600081359050611eaa81612eca565b92915050565b600081519050611ebf81612eca565b92915050565b60008083601f840112611ed757600080fd5b8235905067ffffffffffffffff811115611ef057600080fd5b602083019150836001820283011115611f0857600080fd5b9250929050565b600081359050611f1e81612ee1565b92915050565b600081359050611f3381612ef8565b92915050565b600082601f830112611f4a57600080fd5b8135611f5d611f5882612cc2565b612c95565b91508082526020830160208301858383011115611f7957600080fd5b611f84838284612e49565b50505092915050565b600081359050611f9c81612f0f565b92915050565b600081519050611fb181612f0f565b92915050565b600081359050611fc681612f26565b92915050565b600060208284031215611fde57600080fd5b6000611fec84828501611e52565b91505092915050565b6000806040838503121561200857600080fd5b600061201685828601611e52565b925050602061202785828601611e9b565b9150509250929050565b6000806040838503121561204457600080fd5b600061205285828601611e52565b925050602061206385828601611f0f565b9150509250929050565b60006020828403121561207f57600080fd5b600061208d84828501611e86565b91505092915050565b6000602082840312156120a857600080fd5b60006120b684828501611eb0565b91505092915050565b600080604083850312156120d257600080fd5b60006120e085828601611e9b565b92505060206120f185828601611e9b565b9150509250929050565b60008060008060008060006160a0888a03121561211757600080fd5b600088013567ffffffffffffffff81111561213157600080fd5b61213d8a828b01611ec5565b975097505060206121508a828b01611e9b565b95505060406121618a828b01611e9b565b94505060606121728a828b01611e9b565b93505060806121838a828b01611fb7565b92505060a06121948a828b01611e67565b91505092959891949750929550565b6000602082840312156121b557600080fd5b60006121c384828501611f0f565b91505092915050565b6000806000606084860312156121e157600080fd5b60006121ef86828701611f24565b935050602084013567ffffffffffffffff81111561220c57600080fd5b61221886828701611f39565b925050604061222986828701611f8d565b9150509250925092565b60006020828403121561224557600080fd5b600061225384828501611f8d565b91505092915050565b60006020828403121561226e57600080fd5b600061227c84828501611fa2565b91505092915050565b60006020828403121561229757600080fd5b60006122a584828501611fb7565b91505092915050565b60006122ba838361289b565b60208301905092915050565b6122cf81612d69565b82525050565b6122de81612cf8565b6122e88184612d26565b92506122f382612cee565b8060005b8381101561232457815161230b87826122ae565b965061231683612d19565b9250506001810190506122f7565b505050505050565b61233581612d7b565b82525050565b61234481612d87565b82525050565b60006123568385612d31565b9350612363838584612e49565b61236c83612e8b565b840190509392505050565b600061238282612d03565b61238c8185612d42565b935061239c818560208601612e58565b80840191505092915050565b6123b181612def565b82525050565b6123c081612e13565b82525050565b60006123d182612d0e565b6123db8185612d5e565b93506123eb818560208601612e58565b80840191505092915050565b6000612404601183612d4d565b91507f496e76616c6964206172677320686173680000000000000000000000000000006000830152602082019050919050565b6000612444602183612d4d565b91507f496e76616c6964206465706f7369742074726565207570646174652070726f6f60008301527f66000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006124aa602183612d4d565b91507f496e636f7272656374207769746864726177616c20696e7365727420696e646560008301527f78000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612510602483612d4d565b91507f496e76616c6964207769746864726177616c207472656520757064617465207060008301527f726f6f66000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612576601183612d4d565b91507f496e636f7272656374206465706f7369740000000000000000000000000000006000830152602082019050919050565b60006125b6602783612d4d565b91507f4f6e6c7920676f7665726e616e63652063616e20706572666f726d207468697360008301527f20616374696f6e000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061261c601e83612d4d565b91507f496e636f7272656374207769746864726177616c207472656520726f6f7400006000830152602082019050919050565b600061265c601b83612d4d565b91507f496e636f7272656374206465706f736974207472656520726f6f7400000000006000830152602082019050919050565b600061269c602e83612d4d565b91507f436f6e747261637420696e7374616e63652068617320616c726561647920626560008301527f656e20696e697469616c697a65640000000000000000000000000000000000006020830152604082019050919050565b6000612702602383612d4d565b91507f50726f706f736564207769746864726177616c20726f6f7420697320696e766160008301527f6c696400000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612768601483612d4d565b91507f496e636f7272656374207769746864726177616c0000000000000000000000006000830152602082019050919050565b60006127a8602083612d4d565b91507f50726f706f736564206465706f73697420726f6f7420697320696e76616c69646000830152602082019050919050565b60006127e8601e83612d4d565b91507f496e636f7272656374206465706f73697420696e7365727420696e64657800006000830152602082019050919050565b6000612828601c83612d4d565b91507f496e636f727265637420546f726e61646f5472656573207374617465000000006000830152602082019050919050565b6000612868600e83612d4d565b91507f4e6f7420617574686f72697a65640000000000000000000000000000000000006000830152602082019050919050565b6128a481612dd5565b82525050565b6128b381612dd5565b82525050565b6128c281612e37565b82525050565b6128d181612ddf565b82525050565b60006128e38284612377565b915081905092915050565b60006128fa82846123c6565b915081905092915050565b600060208201905061291a60008301846122c6565b92915050565b600060608201905061293560008301866122c6565b612942602083018561233b565b61294f60408301846128aa565b949350505050565b600060608201905061296c60008301866122c6565b612979602083018561233b565b61298660408301846128c8565b949350505050565b60006060820190506129a360008301866122c6565b6129b060208301856128aa565b6129bd60408301846128aa565b949350505050565b60006060820190506129da60008301866122c6565b6129e760208301856128b9565b6129f460408301846128aa565b949350505050565b6000602082019050612a11600083018461232c565b92915050565b6000602082019050612a2c600083018461233b565b92915050565b60006040820190508181036000830152612a4d81858761234a565b9050612a5c60208301846122d5565b949350505050565b6000602082019050612a7960008301846123a8565b92915050565b6000602082019050612a9460008301846123b7565b92915050565b60006020820190508181036000830152612ab3816123f7565b9050919050565b60006020820190508181036000830152612ad381612437565b9050919050565b60006020820190508181036000830152612af38161249d565b9050919050565b60006020820190508181036000830152612b1381612503565b9050919050565b60006020820190508181036000830152612b3381612569565b9050919050565b60006020820190508181036000830152612b53816125a9565b9050919050565b60006020820190508181036000830152612b738161260f565b9050919050565b60006020820190508181036000830152612b938161264f565b9050919050565b60006020820190508181036000830152612bb38161268f565b9050919050565b60006020820190508181036000830152612bd3816126f5565b9050919050565b60006020820190508181036000830152612bf38161275b565b9050919050565b60006020820190508181036000830152612c138161279b565b9050919050565b60006020820190508181036000830152612c33816127db565b9050919050565b60006020820190508181036000830152612c538161281b565b9050919050565b60006020820190508181036000830152612c738161285b565b9050919050565b6000602082019050612c8f60008301846128aa565b92915050565b6000604051905081810181811067ffffffffffffffff82111715612cb857600080fd5b8060405250919050565b600067ffffffffffffffff821115612cd957600080fd5b601f19601f8301169050602081019050919050565b6000819050919050565b600060019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000612d7482612db5565b9050919050565b60008115159050919050565b6000819050919050565b6000612d9c82612d69565b9050919050565b6000612dae82612d69565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b6000612dfa82612e01565b9050919050565b6000612e0c82612db5565b9050919050565b6000612e1e82612e25565b9050919050565b6000612e3082612db5565b9050919050565b6000612e4282612ddf565b9050919050565b82818337600083830152505050565b60005b83811015612e76578082015181840152602081019050612e5b565b83811115612e85576000848401525b50505050565b6000601f19601f8301169050919050565b612ea581612d69565b8114612eb057600080fd5b50565b612ebc81612d7b565b8114612ec757600080fd5b50565b612ed381612d87565b8114612ede57600080fd5b50565b612eea81612d91565b8114612ef557600080fd5b50565b612f0181612da3565b8114612f0c57600080fd5b50565b612f1881612dd5565b8114612f2357600080fd5b50565b612f2f81612ddf565b8114612f3a57600080fd5b5056fea2646970667358221220834fbbe9634dacf9cb86e26acb789d76499021de3cb5fe20495596d9adb74e8364736f6c634300060c003300000000000000000000000060d20f57aba60d0b80e3b30eb2022a454bfc5399

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000060d20f57aba60d0b80e3b30eb2022a454bfc5399

-----Decoded View---------------
Arg [0] : _tornadoTreesV1 (address): 0x60d20f57aba60d0b80e3b30eb2022a454bfc5399

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000060d20f57aba60d0b80e3b30eb2022a454bfc5399


Deployed ByteCode Sourcemap

6325:11360:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10369:395;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7257:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6545:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6632:38;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6919:115;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7341:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7167:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9025:828;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11172:1833;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6577:50;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17589:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6369:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7206:46;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6789:47;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16819:379;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6677:45;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6399:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17204:160;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17374:209;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7294:42;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6841:73;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7041:43;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6503:37;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7123:39;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15309:329;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6469:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9930:359;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13416:1887;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8868:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6727:57;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7089:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6430:34;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10369:395;7804:12;;;;;;;;;;;7790:26;;:10;:26;;;7782:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;10471:26:::1;10500:17;;10471:46;;10579:9;10590:14;10606:13;:11;:13::i;:::-;10568:52;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;10558:63;;;;;;10524:11;:31;10536:18;10524:31;;;;;;;;;;;:97;;;;10659:14;10633:76;10648:9;10675:13;:11;:13::i;:::-;10690:18;10633:76;;;;;;;;:::i;:::-;;;;;;;;10757:1;10736:18;:22;10716:17;:42;;;;7842:1;10369:395:::0;;:::o;7257:32::-;;;;:::o;6545:27::-;;;;;;;;;;;;;:::o;6632:38::-;;;;;;;;;;;;;:::o;6919:115::-;6957:77;6919:115;:::o;7341:35::-;;;;:::o;7167:32::-;;;;:::o;9025:828::-;3266:12;;;;;;;;;;;:31;;;;3282:15;:13;:15::i;:::-;3266:31;:47;;;;3302:11;;;;;;;;;;3301:12;3266:47;3258:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;3373:19;3396:12;;;;;;;;;;;3395:13;3373:35;;3419:14;3415:83;;;3459:4;3444:12;;:19;;;;;;;;;;;;;;;;;;3486:4;3472:11;;:18;;;;;;;;;;;;;;;;;;3415:83;7910:10:::1;;;;;;;;;;;7896:24;;:10;:24;;;7888:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;9170:13:::2;9155:12;;:28;;;;;;;;;;;;;;;;;;9211:19;9190:18;;:40;;;;;;;;;;;;;;;;;;9253:14;;;;;;;;;;;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9239:11;:42;;;;9288:23;9314:14;;;;;;;;;;;:39;;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9288:67;;9402:1;6721;6764;:20;9370:15;:28;;;;;;:33;9362:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;9470:15;9443:24;:42;;;;9509:16;;9492:14;:33;;;;9551:14;;;;;;;;;;;:29;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9534:14;:48;;;;9589:26;9618:14;;;;;;;;;;;:42;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9589:73;;9712:1;6721;6764;:20;9677:18;:31;;;;;;:36;9669:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;9783:18;9753:27;:48;;;;9828:19;;9808:17;:39;;;;7971:1;;3520:14:::0;3516:57;;;3560:5;3545:12;;:20;;;;;;;;;;;;;;;;;;3516:57;9025:828;;;:::o;11172:1833::-;11390:14;11407:24;;11390:41;;11462:11;;11446:12;:27;11438:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;6721:1;11541:6;:27;;11525:12;:43;;;11517:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;11612:17;6825:11;6721:1;6764;:20;6892:22;6878:11;:36;11632:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11612:41;;11702:12;11695:4;11689;11685:15;11678:37;11747:8;11740:4;11734;11730:15;11723:33;11788:12;11781:4;11775;11771:15;11764:37;11819:9;11814:828;6721:1;6764;:20;11834:1;:14;11814:828;;;11865:12;11879:16;11897:18;11920:7;11928:1;11920:10;;;;;;;;;;:15;;;11937:7;11945:1;11937:10;;;;;;;;;;:19;;;;;;;;;;:::i;:::-;11958:7;11966:1;11958:10;;;;;;;;;;:16;;;;;;;;;;:::i;:::-;11864:111;;;;;;11984:16;12024:8;12034:4;12040:11;12013:39;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;12003:50;;;;;;11984:69;;12062:15;12094:16;;12089:1;12080:6;:10;:30;;:91;;12136:14;;;;;;;;;;;:23;;;12169:1;12160:6;:10;12136:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12080:91;;;12113:8;:20;12131:1;12122:6;:10;12113:20;;;;;;;;;;;;12080:91;12062:109;;12200:7;12188:8;:19;12180:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;12301:1;12290:9;12286:17;12280:4;12276:28;12344:11;12337:4;12325:10;12321:21;12314:42;12396:8;12389:4;12377:10;12373:21;12366:39;12445:4;12438;12426:10;12422:21;12415:35;12247:212;12485:16;;12480:1;12471:6;:10;:30;12467:168;;12521:8;:20;12539:1;12530:6;:10;12521:20;;;;;;;;;;;12514:27;;;12467:168;;;12595:4;12573:52;12585:8;12601:11;12623:1;12614:6;:10;12573:52;;;;;;;;:::i;:::-;;;;;;;;12467:168;11814:828;;;;;11850:3;;;;;;;11814:828;;;;12650:16;6957:77;12677:12;12684:4;12677:12;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12669:21;;:35;;;;;;12650:54;;12739:9;12731:18;;12719:8;:30;12711:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;12786:18;;;;;;;;;;;:30;;;12817:6;;12786:50;;;;;;;;12826:8;12786:50;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12778:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;12905:12;12883:19;:34;;;;12938:8;12924:11;:22;;;;6721:1;6764;:20;12980:6;:19;12953:24;:46;;;;11172:1833;;;;;;;;;;:::o;6577:50::-;;;;;;;;;;;;;:::o;17589:93::-;17641:7;17664:12;17657:19;;17589:93;:::o;6369:25::-;;;;;;;;;;;;;:::o;7206:46::-;;;;;;;;;;;;;;;;;:::o;6789:47::-;6825:11;6789:47;:::o;16819:379::-;16952:12;17113:15;17105:35;;17147:4;17178:5;17185;17154:37;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;17105:87;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17091:101;;;;;16819:379;;;;;:::o;6677:45::-;6721:1;6677:45;:::o;6399:26::-;;;;:::o;17204:160::-;7910:10;;;;;;;;;;;7896:24;;:10;:24;;;7888:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;17306:13:::1;17291:12;;:28;;;;;;;;;;;;;;;;;;17331:27;17344:13;17331:27;;;;;;:::i;:::-;;;;;;;;17204:160:::0;:::o;17374:209::-;7910:10;;;;;;;;;;;7896:24;;:10;:24;;;7888:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;17501:19:::1;17480:18;;:40;;;;;;;;;;;;;;;;;;17532:45;17556:19;17532:45;;;;;;:::i;:::-;;;;;;;;17374:209:::0;:::o;7294:42::-;;;;:::o;6841:73::-;6825:11;6721:1;6764;:20;6892:22;6878:11;:36;6841:73;:::o;7041:43::-;;;;;;;;;;;;;;;;;:::o;6503:37::-;;;;:::o;7123:39::-;;;;:::o;15309:329::-;15422:11;;15406:12;:27;:66;;;;15453:19;;15437:12;:35;15406:66;15398:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;15538:14;;15519:15;:33;:78;;;;15575:22;;15556:15;:41;15519:78;15511:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;15309:329;;:::o;6469:29::-;;;;:::o;9930:359::-;7804:12;;;;;;;;;;;7790:26;;:10;:26;;;7782:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;10026:23:::1;10052:14;;10026:40;;10122:9;10133:11;10146:13;:11;:13::i;:::-;10111:49;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;10101:60;;;;;;10073:8;:25;10082:15;10073:25;;;;;;;;;;;:88;;;;10196:11;10173:67;10185:9;10209:13;:11;:13::i;:::-;10224:15;10173:67;;;;;;;;:::i;:::-;;;;;;;;10282:1;10264:15;:19;10247:14;:36;;;;7842:1;9930:359:::0;;:::o;13416:1887::-;13637:14;13654:27;;13637:44;;13712:14;;13696:12;:30;13688:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;6721:1;13797:6;:27;;13781:12;:43;;;13773:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;13871:17;6825:11;6721:1;6764;:20;6892:22;6878:11;:36;13891:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13871:41;;13961:12;13954:4;13948;13944:15;13937:37;14006:8;13999:4;13993;13989:15;13982:33;14047:12;14040:4;14034;14030:15;14023:37;14078:9;14073:855;6721:1;6764;:20;14093:1;:14;14073:855;;;14124:12;14138:16;14156:18;14179:7;14187:1;14179:10;;;;;;;;;;:15;;;14196:7;14204:1;14196:10;;;;;;;;;;:19;;;;;;;;;;:::i;:::-;14217:7;14225:1;14217:10;;;;;;;;;;:16;;;;;;;;;;:::i;:::-;14123:111;;;;;;14243:16;14283:8;14293:4;14299:11;14272:39;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;14262:50;;;;;;14243:69;;14321:18;14356:19;;14351:1;14342:6;:10;:33;;:100;;14404:14;;;;;;;;;;;:26;;;14440:1;14431:6;:10;14404:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14342:100;;;14378:11;:23;14399:1;14390:6;:10;14378:23;;;;;;;;;;;;14342:100;14321:121;;14471:10;14459:8;:22;14451:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;14578:1;14567:9;14563:17;14557:4;14553:28;14621:11;14614:4;14602:10;14598:21;14591:42;14673:8;14666:4;14654:10;14650:21;14643:39;14722:4;14715;14703:10;14699:21;14692:35;14524:212;14762:19;;14757:1;14748:6;:10;:33;14744:177;;14801:11;:23;14822:1;14813:6;:10;14801:23;;;;;;;;;;;14794:30;;;14744:177;;;14881:4;14856:55;14871:8;14887:11;14909:1;14900:6;:10;14856:55;;;;;;;;:::i;:::-;;;;;;;;14744:177;14073:855;;;;;14109:3;;;;;;;14073:855;;;;14936:16;6957:77;14963:12;14970:4;14963:12;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14955:21;;:35;;;;;;14936:54;;15025:9;15017:18;;15005:8;:30;14997:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;15072:18;;;;;;;;;;;:30;;;15103:6;;15072:50;;;;;;;;15112:8;15072:50;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15064:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;15197:12;15172:22;:37;;;;15233:8;15216:14;:25;;;;6721:1;6764;:20;15278:6;:19;15248:27;:49;;;;13416:1887;;;;;;;;;;:::o;8868:151::-;7910:10;;;;;;;;;;;7896:24;;:10;:24;;;7888:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;8962:14:::1;8949:10;;:27;;;;;;;;;;;;;;;;;;8988:25;9002:10;;;;;;;;;;;8988:25;;;;;;:::i;:::-;;;;;;;;8868:151:::0;:::o;6727:57::-;6721:1;6764;:20;6727:57;:::o;7089:29::-;;;;:::o;6430:34::-;;;;:::o;3667:508::-;3714:4;4061:12;4084:4;4061:28;;4096:10;4142:4;4130:17;4124:23;;4168:1;4162:2;:7;4155:14;;;;3667:508;:::o;5:130:-1:-;;85:6;72:20;63:29;;97:33;124:5;97:33;:::i;:::-;57:78;;;;:::o;184:207::-;;312:6;300:18;;364:3;356:4;348:6;344:17;334:8;330:32;327:41;324:2;;;381:1;378;371:12;324:2;293:98;;;;:::o;399:128::-;;480:6;474:13;465:22;;492:30;516:5;492:30;:::i;:::-;459:68;;;;:::o;534:130::-;;614:6;601:20;592:29;;626:33;653:5;626:33;:::i;:::-;586:78;;;;:::o;671:134::-;;755:6;749:13;740:22;;767:33;794:5;767:33;:::i;:::-;734:71;;;;:::o;826:336::-;;;940:3;933:4;925:6;921:17;917:27;907:2;;958:1;955;948:12;907:2;991:6;978:20;968:30;;1018:18;1010:6;1007:30;1004:2;;;1050:1;1047;1040:12;1004:2;1084:4;1076:6;1072:17;1060:29;;1135:3;1127:4;1119:6;1115:17;1105:8;1101:32;1098:41;1095:2;;;1152:1;1149;1142:12;1095:2;900:262;;;;;:::o;1170:192::-;;1281:6;1268:20;1259:29;;1293:64;1351:5;1293:64;:::i;:::-;1253:109;;;;:::o;1369:176::-;;1472:6;1459:20;1450:29;;1484:56;1534:5;1484:56;:::i;:::-;1444:101;;;;:::o;1553:442::-;;1655:3;1648:4;1640:6;1636:17;1632:27;1622:2;;1673:1;1670;1663:12;1622:2;1710:6;1697:20;1732:65;1747:49;1789:6;1747:49;:::i;:::-;1732:65;:::i;:::-;1723:74;;1817:6;1810:5;1803:21;1853:4;1845:6;1841:17;1886:4;1879:5;1875:16;1921:3;1912:6;1907:3;1903:16;1900:25;1897:2;;;1938:1;1935;1928:12;1897:2;1948:41;1982:6;1977:3;1972;1948:41;:::i;:::-;1615:380;;;;;;;:::o;2003:130::-;;2083:6;2070:20;2061:29;;2095:33;2122:5;2095:33;:::i;:::-;2055:78;;;;:::o;2140:134::-;;2224:6;2218:13;2209:22;;2236:33;2263:5;2236:33;:::i;:::-;2203:71;;;;:::o;2281:128::-;;2360:6;2347:20;2338:29;;2372:32;2398:5;2372:32;:::i;:::-;2332:77;;;;:::o;2416:241::-;;2520:2;2508:9;2499:7;2495:23;2491:32;2488:2;;;2536:1;2533;2526:12;2488:2;2571:1;2588:53;2633:7;2624:6;2613:9;2609:22;2588:53;:::i;:::-;2578:63;;2550:97;2482:175;;;;:::o;2664:366::-;;;2785:2;2773:9;2764:7;2760:23;2756:32;2753:2;;;2801:1;2798;2791:12;2753:2;2836:1;2853:53;2898:7;2889:6;2878:9;2874:22;2853:53;:::i;:::-;2843:63;;2815:97;2943:2;2961:53;3006:7;2997:6;2986:9;2982:22;2961:53;:::i;:::-;2951:63;;2922:98;2747:283;;;;;:::o;3037:428::-;;;3189:2;3177:9;3168:7;3164:23;3160:32;3157:2;;;3205:1;3202;3195:12;3157:2;3240:1;3257:53;3302:7;3293:6;3282:9;3278:22;3257:53;:::i;:::-;3247:63;;3219:97;3347:2;3365:84;3441:7;3432:6;3421:9;3417:22;3365:84;:::i;:::-;3355:94;;3326:129;3151:314;;;;;:::o;3472:257::-;;3584:2;3572:9;3563:7;3559:23;3555:32;3552:2;;;3600:1;3597;3590:12;3552:2;3635:1;3652:61;3705:7;3696:6;3685:9;3681:22;3652:61;:::i;:::-;3642:71;;3614:105;3546:183;;;;:::o;3736:263::-;;3851:2;3839:9;3830:7;3826:23;3822:32;3819:2;;;3867:1;3864;3857:12;3819:2;3902:1;3919:64;3975:7;3966:6;3955:9;3951:22;3919:64;:::i;:::-;3909:74;;3881:108;3813:186;;;;:::o;4006:366::-;;;4127:2;4115:9;4106:7;4102:23;4098:32;4095:2;;;4143:1;4140;4133:12;4095:2;4178:1;4195:53;4240:7;4231:6;4220:9;4216:22;4195:53;:::i;:::-;4185:63;;4157:97;4285:2;4303:53;4348:7;4339:6;4328:9;4324:22;4303:53;:::i;:::-;4293:63;;4264:98;4089:283;;;;;:::o;4379:1101::-;;;;;;;;4640:5;4628:9;4619:7;4615:23;4611:35;4608:2;;;4659:1;4656;4649:12;4608:2;4722:1;4711:9;4707:17;4694:31;4745:18;4737:6;4734:30;4731:2;;;4777:1;4774;4767:12;4731:2;4805:64;4861:7;4852:6;4841:9;4837:22;4805:64;:::i;:::-;4787:82;;;;4673:202;4906:2;4924:53;4969:7;4960:6;4949:9;4945:22;4924:53;:::i;:::-;4914:63;;4885:98;5014:2;5032:53;5077:7;5068:6;5057:9;5053:22;5032:53;:::i;:::-;5022:63;;4993:98;5122:2;5140:53;5185:7;5176:6;5165:9;5161:22;5140:53;:::i;:::-;5130:63;;5101:98;5230:3;5249:52;5293:7;5284:6;5273:9;5269:22;5249:52;:::i;:::-;5239:62;;5209:98;5338:3;5357:107;5456:7;5447:6;5436:9;5432:22;5357:107;:::i;:::-;5347:117;;5317:153;4602:878;;;;;;;;;;:::o;5487:303::-;;5622:2;5610:9;5601:7;5597:23;5593:32;5590:2;;;5638:1;5635;5628:12;5590:2;5673:1;5690:84;5766:7;5757:6;5746:9;5742:22;5690:84;:::i;:::-;5680:94;;5652:128;5584:206;;;;:::o;5797:643::-;;;;5968:2;5956:9;5947:7;5943:23;5939:32;5936:2;;;5984:1;5981;5974:12;5936:2;6019:1;6036:76;6104:7;6095:6;6084:9;6080:22;6036:76;:::i;:::-;6026:86;;5998:120;6177:2;6166:9;6162:18;6149:32;6201:18;6193:6;6190:30;6187:2;;;6233:1;6230;6223:12;6187:2;6253:63;6308:7;6299:6;6288:9;6284:22;6253:63;:::i;:::-;6243:73;;6128:194;6353:2;6371:53;6416:7;6407:6;6396:9;6392:22;6371:53;:::i;:::-;6361:63;;6332:98;5930:510;;;;;:::o;6447:241::-;;6551:2;6539:9;6530:7;6526:23;6522:32;6519:2;;;6567:1;6564;6557:12;6519:2;6602:1;6619:53;6664:7;6655:6;6644:9;6640:22;6619:53;:::i;:::-;6609:63;;6581:97;6513:175;;;;:::o;6695:263::-;;6810:2;6798:9;6789:7;6785:23;6781:32;6778:2;;;6826:1;6823;6816:12;6778:2;6861:1;6878:64;6934:7;6925:6;6914:9;6910:22;6878:64;:::i;:::-;6868:74;;6840:108;6772:186;;;;:::o;6965:239::-;;7068:2;7056:9;7047:7;7043:23;7039:32;7036:2;;;7084:1;7081;7074:12;7036:2;7119:1;7136:52;7180:7;7171:6;7160:9;7156:22;7136:52;:::i;:::-;7126:62;;7098:96;7030:174;;;;:::o;7212:173::-;;7299:46;7341:3;7333:6;7299:46;:::i;:::-;7374:4;7369:3;7365:14;7351:28;;7292:93;;;;:::o;7393:113::-;7476:24;7494:5;7476:24;:::i;:::-;7471:3;7464:37;7458:48;;:::o;7546:660::-;7679:52;7725:5;7679:52;:::i;:::-;7744:84;7821:6;7816:3;7744:84;:::i;:::-;7737:91;;7849:54;7897:5;7849:54;:::i;:::-;7923:7;7951:1;7936:258;7961:6;7958:1;7955:13;7936:258;;;8028:6;8022:13;8049:63;8108:3;8093:13;8049:63;:::i;:::-;8042:70;;8129:58;8180:6;8129:58;:::i;:::-;8119:68;;7993:201;7983:1;7980;7976:9;7971:14;;7936:258;;;7940:14;7658:548;;;;;:::o;8214:104::-;8291:21;8306:5;8291:21;:::i;:::-;8286:3;8279:34;8273:45;;:::o;8325:113::-;8408:24;8426:5;8408:24;:::i;:::-;8403:3;8396:37;8390:48;;:::o;8468:297::-;;8582:70;8645:6;8640:3;8582:70;:::i;:::-;8575:77;;8664:43;8700:6;8695:3;8688:5;8664:43;:::i;:::-;8729:29;8751:6;8729:29;:::i;:::-;8724:3;8720:39;8713:46;;8568:197;;;;;:::o;8773:356::-;;8901:38;8933:5;8901:38;:::i;:::-;8951:88;9032:6;9027:3;8951:88;:::i;:::-;8944:95;;9044:52;9089:6;9084:3;9077:4;9070:5;9066:16;9044:52;:::i;:::-;9117:6;9112:3;9108:16;9101:23;;8881:248;;;;;:::o;9136:188::-;9250:68;9312:5;9250:68;:::i;:::-;9245:3;9238:81;9232:92;;:::o;9331:172::-;9437:60;9491:5;9437:60;:::i;:::-;9432:3;9425:73;9419:84;;:::o;9510:360::-;;9640:39;9673:5;9640:39;:::i;:::-;9691:89;9773:6;9768:3;9691:89;:::i;:::-;9684:96;;9785:52;9830:6;9825:3;9818:4;9811:5;9807:16;9785:52;:::i;:::-;9858:6;9853:3;9849:16;9842:23;;9620:250;;;;;:::o;9878:317::-;;10038:67;10102:2;10097:3;10038:67;:::i;:::-;10031:74;;10138:19;10134:1;10129:3;10125:11;10118:40;10186:2;10181:3;10177:12;10170:19;;10024:171;;;:::o;10204:370::-;;10364:67;10428:2;10423:3;10364:67;:::i;:::-;10357:74;;10464:34;10460:1;10455:3;10451:11;10444:55;10533:3;10528:2;10523:3;10519:12;10512:25;10565:2;10560:3;10556:12;10549:19;;10350:224;;;:::o;10583:370::-;;10743:67;10807:2;10802:3;10743:67;:::i;:::-;10736:74;;10843:34;10839:1;10834:3;10830:11;10823:55;10912:3;10907:2;10902:3;10898:12;10891:25;10944:2;10939:3;10935:12;10928:19;;10729:224;;;:::o;10962:373::-;;11122:67;11186:2;11181:3;11122:67;:::i;:::-;11115:74;;11222:34;11218:1;11213:3;11209:11;11202:55;11291:6;11286:2;11281:3;11277:12;11270:28;11326:2;11321:3;11317:12;11310:19;;11108:227;;;:::o;11344:317::-;;11504:67;11568:2;11563:3;11504:67;:::i;:::-;11497:74;;11604:19;11600:1;11595:3;11591:11;11584:40;11652:2;11647:3;11643:12;11636:19;;11490:171;;;:::o;11670:376::-;;11830:67;11894:2;11889:3;11830:67;:::i;:::-;11823:74;;11930:34;11926:1;11921:3;11917:11;11910:55;11999:9;11994:2;11989:3;11985:12;11978:31;12037:2;12032:3;12028:12;12021:19;;11816:230;;;:::o;12055:330::-;;12215:67;12279:2;12274:3;12215:67;:::i;:::-;12208:74;;12315:32;12311:1;12306:3;12302:11;12295:53;12376:2;12371:3;12367:12;12360:19;;12201:184;;;:::o;12394:327::-;;12554:67;12618:2;12613:3;12554:67;:::i;:::-;12547:74;;12654:29;12650:1;12645:3;12641:11;12634:50;12712:2;12707:3;12703:12;12696:19;;12540:181;;;:::o;12730:383::-;;12890:67;12954:2;12949:3;12890:67;:::i;:::-;12883:74;;12990:34;12986:1;12981:3;12977:11;12970:55;13059:16;13054:2;13049:3;13045:12;13038:38;13104:2;13099:3;13095:12;13088:19;;12876:237;;;:::o;13122:372::-;;13282:67;13346:2;13341:3;13282:67;:::i;:::-;13275:74;;13382:34;13378:1;13373:3;13369:11;13362:55;13451:5;13446:2;13441:3;13437:12;13430:27;13485:2;13480:3;13476:12;13469:19;;13268:226;;;:::o;13503:320::-;;13663:67;13727:2;13722:3;13663:67;:::i;:::-;13656:74;;13763:22;13759:1;13754:3;13750:11;13743:43;13814:2;13809:3;13805:12;13798:19;;13649:174;;;:::o;13832:332::-;;13992:67;14056:2;14051:3;13992:67;:::i;:::-;13985:74;;14092:34;14088:1;14083:3;14079:11;14072:55;14155:2;14150:3;14146:12;14139:19;;13978:186;;;:::o;14173:330::-;;14333:67;14397:2;14392:3;14333:67;:::i;:::-;14326:74;;14433:32;14429:1;14424:3;14420:11;14413:53;14494:2;14489:3;14485:12;14478:19;;14319:184;;;:::o;14512:328::-;;14672:67;14736:2;14731:3;14672:67;:::i;:::-;14665:74;;14772:30;14768:1;14763:3;14759:11;14752:51;14831:2;14826:3;14822:12;14815:19;;14658:182;;;:::o;14849:314::-;;15009:67;15073:2;15068:3;15009:67;:::i;:::-;15002:74;;15109:16;15105:1;15100:3;15096:11;15089:37;15154:2;15149:3;15145:12;15138:19;;14995:168;;;:::o;15171:103::-;15244:24;15262:5;15244:24;:::i;:::-;15239:3;15232:37;15226:48;;:::o;15281:113::-;15364:24;15382:5;15364:24;:::i;:::-;15359:3;15352:37;15346:48;;:::o;15401:124::-;15483:36;15513:5;15483:36;:::i;:::-;15478:3;15471:49;15465:60;;:::o;15532:110::-;15613:23;15630:5;15613:23;:::i;:::-;15608:3;15601:36;15595:47;;:::o;15649:271::-;;15802:93;15891:3;15882:6;15802:93;:::i;:::-;15795:100;;15912:3;15905:10;;15783:137;;;;:::o;15927:275::-;;16082:95;16173:3;16164:6;16082:95;:::i;:::-;16075:102;;16194:3;16187:10;;16063:139;;;;:::o;16209:222::-;;16336:2;16325:9;16321:18;16313:26;;16350:71;16418:1;16407:9;16403:17;16394:6;16350:71;:::i;:::-;16307:124;;;;:::o;16438:444::-;;16621:2;16610:9;16606:18;16598:26;;16635:71;16703:1;16692:9;16688:17;16679:6;16635:71;:::i;:::-;16717:72;16785:2;16774:9;16770:18;16761:6;16717:72;:::i;:::-;16800;16868:2;16857:9;16853:18;16844:6;16800:72;:::i;:::-;16592:290;;;;;;:::o;16889:440::-;;17070:2;17059:9;17055:18;17047:26;;17084:71;17152:1;17141:9;17137:17;17128:6;17084:71;:::i;:::-;17166:72;17234:2;17223:9;17219:18;17210:6;17166:72;:::i;:::-;17249:70;17315:2;17304:9;17300:18;17291:6;17249:70;:::i;:::-;17041:288;;;;;;:::o;17336:444::-;;17519:2;17508:9;17504:18;17496:26;;17533:71;17601:1;17590:9;17586:17;17577:6;17533:71;:::i;:::-;17615:72;17683:2;17672:9;17668:18;17659:6;17615:72;:::i;:::-;17698;17766:2;17755:9;17751:18;17742:6;17698:72;:::i;:::-;17490:290;;;;;;:::o;17787:442::-;;17969:2;17958:9;17954:18;17946:26;;17983:71;18051:1;18040:9;18036:17;18027:6;17983:71;:::i;:::-;18065;18132:2;18121:9;18117:18;18108:6;18065:71;:::i;:::-;18147:72;18215:2;18204:9;18200:18;18191:6;18147:72;:::i;:::-;17940:289;;;;;;:::o;18236:210::-;;18357:2;18346:9;18342:18;18334:26;;18371:65;18433:1;18422:9;18418:17;18409:6;18371:65;:::i;:::-;18328:118;;;;:::o;18453:222::-;;18580:2;18569:9;18565:18;18557:26;;18594:71;18662:1;18651:9;18647:17;18638:6;18594:71;:::i;:::-;18551:124;;;;:::o;18682:529::-;;18911:2;18900:9;18896:18;18888:26;;18961:9;18955:4;18951:20;18947:1;18936:9;18932:17;18925:47;18986:86;19067:4;19058:6;19050;18986:86;:::i;:::-;18978:94;;19083:118;19197:2;19186:9;19182:18;19173:6;19083:118;:::i;:::-;18882:329;;;;;;:::o;19218:284::-;;19376:2;19365:9;19361:18;19353:26;;19390:102;19489:1;19478:9;19474:17;19465:6;19390:102;:::i;:::-;19347:155;;;;:::o;19509:268::-;;19659:2;19648:9;19644:18;19636:26;;19673:94;19764:1;19753:9;19749:17;19740:6;19673:94;:::i;:::-;19630:147;;;;:::o;19784:416::-;;19984:2;19973:9;19969:18;19961:26;;20034:9;20028:4;20024:20;20020:1;20009:9;20005:17;19998:47;20059:131;20185:4;20059:131;:::i;:::-;20051:139;;19955:245;;;:::o;20207:416::-;;20407:2;20396:9;20392:18;20384:26;;20457:9;20451:4;20447:20;20443:1;20432:9;20428:17;20421:47;20482:131;20608:4;20482:131;:::i;:::-;20474:139;;20378:245;;;:::o;20630:416::-;;20830:2;20819:9;20815:18;20807:26;;20880:9;20874:4;20870:20;20866:1;20855:9;20851:17;20844:47;20905:131;21031:4;20905:131;:::i;:::-;20897:139;;20801:245;;;:::o;21053:416::-;;21253:2;21242:9;21238:18;21230:26;;21303:9;21297:4;21293:20;21289:1;21278:9;21274:17;21267:47;21328:131;21454:4;21328:131;:::i;:::-;21320:139;;21224:245;;;:::o;21476:416::-;;21676:2;21665:9;21661:18;21653:26;;21726:9;21720:4;21716:20;21712:1;21701:9;21697:17;21690:47;21751:131;21877:4;21751:131;:::i;:::-;21743:139;;21647:245;;;:::o;21899:416::-;;22099:2;22088:9;22084:18;22076:26;;22149:9;22143:4;22139:20;22135:1;22124:9;22120:17;22113:47;22174:131;22300:4;22174:131;:::i;:::-;22166:139;;22070:245;;;:::o;22322:416::-;;22522:2;22511:9;22507:18;22499:26;;22572:9;22566:4;22562:20;22558:1;22547:9;22543:17;22536:47;22597:131;22723:4;22597:131;:::i;:::-;22589:139;;22493:245;;;:::o;22745:416::-;;22945:2;22934:9;22930:18;22922:26;;22995:9;22989:4;22985:20;22981:1;22970:9;22966:17;22959:47;23020:131;23146:4;23020:131;:::i;:::-;23012:139;;22916:245;;;:::o;23168:416::-;;23368:2;23357:9;23353:18;23345:26;;23418:9;23412:4;23408:20;23404:1;23393:9;23389:17;23382:47;23443:131;23569:4;23443:131;:::i;:::-;23435:139;;23339:245;;;:::o;23591:416::-;;23791:2;23780:9;23776:18;23768:26;;23841:9;23835:4;23831:20;23827:1;23816:9;23812:17;23805:47;23866:131;23992:4;23866:131;:::i;:::-;23858:139;;23762:245;;;:::o;24014:416::-;;24214:2;24203:9;24199:18;24191:26;;24264:9;24258:4;24254:20;24250:1;24239:9;24235:17;24228:47;24289:131;24415:4;24289:131;:::i;:::-;24281:139;;24185:245;;;:::o;24437:416::-;;24637:2;24626:9;24622:18;24614:26;;24687:9;24681:4;24677:20;24673:1;24662:9;24658:17;24651:47;24712:131;24838:4;24712:131;:::i;:::-;24704:139;;24608:245;;;:::o;24860:416::-;;25060:2;25049:9;25045:18;25037:26;;25110:9;25104:4;25100:20;25096:1;25085:9;25081:17;25074:47;25135:131;25261:4;25135:131;:::i;:::-;25127:139;;25031:245;;;:::o;25283:416::-;;25483:2;25472:9;25468:18;25460:26;;25533:9;25527:4;25523:20;25519:1;25508:9;25504:17;25497:47;25558:131;25684:4;25558:131;:::i;:::-;25550:139;;25454:245;;;:::o;25706:416::-;;25906:2;25895:9;25891:18;25883:26;;25956:9;25950:4;25946:20;25942:1;25931:9;25927:17;25920:47;25981:131;26107:4;25981:131;:::i;:::-;25973:139;;25877:245;;;:::o;26129:222::-;;26256:2;26245:9;26241:18;26233:26;;26270:71;26338:1;26327:9;26323:17;26314:6;26270:71;:::i;:::-;26227:124;;;;:::o;26358:256::-;;26420:2;26414:9;26404:19;;26458:4;26450:6;26446:17;26557:6;26545:10;26542:22;26521:18;26509:10;26506:34;26503:62;26500:2;;;26578:1;26575;26568:12;26500:2;26598:10;26594:2;26587:22;26398:216;;;;:::o;26621:322::-;;26765:18;26757:6;26754:30;26751:2;;;26797:1;26794;26787:12;26751:2;26864:4;26860:9;26853:4;26845:6;26841:17;26837:33;26829:41;;26928:4;26922;26918:15;26910:23;;26688:255;;;:::o;26950:97::-;;27034:3;27026:11;;27020:27;;;:::o;27054:108::-;;27148:4;27138:14;;27126:36;;;:::o;27169:121::-;;27262:5;27256:12;27246:22;;27227:63;;;:::o;27297:122::-;;27391:5;27385:12;27375:22;;27356:63;;;:::o;27426:106::-;;27522:4;27517:3;27513:14;27505:22;;27499:33;;;:::o;27540:140::-;;27671:3;27656:18;;27649:31;;;;:::o;27689:162::-;;27803:6;27798:3;27791:19;27840:4;27835:3;27831:14;27816:29;;27784:67;;;;:::o;27860:144::-;;27995:3;27980:18;;27973:31;;;;:::o;28013:163::-;;28128:6;28123:3;28116:19;28165:4;28160:3;28156:14;28141:29;;28109:67;;;;:::o;28185:145::-;;28321:3;28306:18;;28299:31;;;;:::o;28338:91::-;;28400:24;28418:5;28400:24;:::i;:::-;28389:35;;28383:46;;;:::o;28436:85::-;;28509:5;28502:13;28495:21;28484:32;;28478:43;;;:::o;28528:72::-;;28590:5;28579:16;;28573:27;;;:::o;28607:122::-;;28700:24;28718:5;28700:24;:::i;:::-;28689:35;;28683:46;;;:::o;28736:114::-;;28821:24;28839:5;28821:24;:::i;:::-;28810:35;;28804:46;;;:::o;28857:121::-;;28930:42;28923:5;28919:54;28908:65;;28902:76;;;:::o;28985:72::-;;29047:5;29036:16;;29030:27;;;:::o;29064:88::-;;29136:10;29129:5;29125:22;29114:33;;29108:44;;;:::o;29159:183::-;;29269:68;29331:5;29269:68;:::i;:::-;29256:81;;29250:92;;;:::o;29349:139::-;;29459:24;29477:5;29459:24;:::i;:::-;29446:37;;29440:48;;;:::o;29495:167::-;;29597:60;29651:5;29597:60;:::i;:::-;29584:73;;29578:84;;;:::o;29669:131::-;;29771:24;29789:5;29771:24;:::i;:::-;29758:37;;29752:48;;;:::o;29807:106::-;;29885:23;29902:5;29885:23;:::i;:::-;29872:36;;29866:47;;;:::o;29921:145::-;30002:6;29997:3;29992;29979:30;30058:1;30049:6;30044:3;30040:16;30033:27;29972:94;;;:::o;30075:268::-;30140:1;30147:101;30161:6;30158:1;30155:13;30147:101;;;30237:1;30232:3;30228:11;30222:18;30218:1;30213:3;30209:11;30202:39;30183:2;30180:1;30176:10;30171:15;;30147:101;;;30263:6;30260:1;30257:13;30254:2;;;30328:1;30319:6;30314:3;30310:16;30303:27;30254:2;30124:219;;;;:::o;30351:97::-;;30439:2;30435:7;30430:2;30423:5;30419:14;30415:28;30405:38;;30399:49;;;:::o;30456:117::-;30525:24;30543:5;30525:24;:::i;:::-;30518:5;30515:35;30505:2;;30564:1;30561;30554:12;30505:2;30499:74;:::o;30580:111::-;30646:21;30661:5;30646:21;:::i;:::-;30639:5;30636:32;30626:2;;30682:1;30679;30672:12;30626:2;30620:71;:::o;30698:117::-;30767:24;30785:5;30767:24;:::i;:::-;30760:5;30757:35;30747:2;;30806:1;30803;30796:12;30747:2;30741:74;:::o;30822:179::-;30922:55;30971:5;30922:55;:::i;:::-;30915:5;30912:66;30902:2;;30992:1;30989;30982:12;30902:2;30896:105;:::o;31008:163::-;31100:47;31141:5;31100:47;:::i;:::-;31093:5;31090:58;31080:2;;31162:1;31159;31152:12;31080:2;31074:97;:::o;31178:117::-;31247:24;31265:5;31247:24;:::i;:::-;31240:5;31237:35;31227:2;;31286:1;31283;31276:12;31227:2;31221:74;:::o;31302:115::-;31370:23;31387:5;31370:23;:::i;:::-;31363:5;31360:34;31350:2;;31408:1;31405;31398:12;31350:2;31344:73;:::o

Swarm Source

ipfs://834fbbe9634dacf9cb86e26acb789d76499021de3cb5fe20495596d9adb74e83
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading