Contract 0xF78765bd14B4E8527d9E4E5c5a5c11A44ad12F47 1

Bridge 
 
Txn Hash Method
Block
From
To
Value
0x85dcdf74e2061b8620c54f808bc98af658f832756bfa70c00b8fb04301b538d7Deposit Native(pending)2021-10-24 9:48:306 hrs ago0xdd38cafd017b7f31087c16fb9ada678ab9600a1d IN Biconomy: Hyphen Bridge0.02 Ether(Pending)(Pending)
0xdfcccd023ba548c35416dcd3817c7596342a6a0ffec0647f635c9e5575c246caDeposit Native(pending)2021-10-24 4:31:3511 hrs 17 mins ago0xdd38cafd017b7f31087c16fb9ada678ab9600a1d IN Biconomy: Hyphen Bridge0.023 Ether(Pending)(Pending)
0x3f2bd3c0caf6bb497ce86c8dc51a8d16487c799707e97aee0916b2228d96357cDeposit Native(pending)2021-10-24 1:46:1614 hrs 3 mins ago0xdd38cafd017b7f31087c16fb9ada678ab9600a1d IN Biconomy: Hyphen Bridge0.02 Ether(Pending)(Pending)
0xd20353b067760de19642cf4c9a94f673f67b935c935c60c78d0e7d628eb679e3Deposit Erc20134810392021-10-24 15:41:128 mins ago0x1bda0a00d113eee140757aa5603c7cca15295153 IN  Biconomy: Hyphen Bridge0 Ether0.004630150743 71.36703881
0x5016c9133aafbc3b8636d86555c05b4ec0fb69c4d8e2214e3228fa4938f52d33Send Funds To Us...134809322021-10-24 15:19:4629 mins ago0xf67cb23865e6b1731a5e610cf068808146488b65 IN  Biconomy: Hyphen Bridge0 Ether0.0099769685
0x17e135dbe9122aee3d213125dfa712305cd65327905e3e3dae9d73aa1eddd74aDeposit Erc20134808632021-10-24 15:02:5746 mins ago0x24a1b13f6af422871b005902059b2ba5b78e65e2 IN  Biconomy: Hyphen Bridge0 Ether0.006348980481 88.808108456
0x2ebb2b30b7fbfe7e610916ac777e37f556c9f7a5aa8d253d19c31ae91ec2a23eDeposit Native134807112021-10-24 14:25:321 hr 23 mins ago0xe65e3106a870cc5da5d44754bdaa0763d08564e9 IN  Biconomy: Hyphen Bridge0.16 Ether0.001548869102 49.508361905
0xad74209f704559d7072a28a7ea7d83b71496b2ccb1aacd5530d18a53ce6bddb5Send Funds To Us...134806722021-10-24 14:17:111 hr 32 mins ago0x9ee7e89713a401c9d83238092e528e4fa22bf789 IN  Biconomy: Hyphen Bridge0 Ether0.00878518573
0xdda67e2e3ff649bfe5db1b01940eae14085d5047abcdfc67a2148a84930df93bSend Funds To Us...134806642021-10-24 14:15:221 hr 33 mins ago0xf67cb23865e6b1731a5e610cf068808146488b65 IN  Biconomy: Hyphen Bridge0 Ether0.00742073454
0x989ba2e4e3d8c64a39bd698f19f045862184bfe11c0865460c8cd326c119f04bSend Funds To Us...134805692021-10-24 13:52:411 hr 56 mins ago0xcc985bc976b78232cfdc207bbadcc3766ac92939 IN  Biconomy: Hyphen Bridge0 Ether0.00658092654
0x4d1b20d59566c12c568e64e7c6bd030127332d7395645b260bb2d69279b4cc4eDeposit Native134805552021-10-24 13:49:591 hr 59 mins ago0x985e92fb38db6ff206e994ee87e7a25be488242a IN  Biconomy: Hyphen Bridge0.026 Ether0.002030160465 64.892455353
0x7c3c2ce0aeb585bca0784840bf2410f33d59beb4589d31c8c594b7f7f96ced37Deposit Erc20134805292021-10-24 13:43:422 hrs 5 mins ago0x37e608439c2ec103c08c262a6a33068c3a2d173d IN  Biconomy: Hyphen Bridge0 Ether0.003803687685 53.196197161
0x60b666550de257231f8c1249c53830e51504e1239882ff3b864952625c072b95Deposit Erc20134805172021-10-24 13:41:412 hrs 7 mins ago0x39f6f0f22eafe81b5f801dd9f2acfa0a5d54ff8a IN  Biconomy: Hyphen Bridge0 Ether0.004481919726 69.05672747
0x698e659a6c27f3d38ceaf9e1da902b8670b4406b05fa61f8d25a19d12899cffaSend Funds To Us...134804722021-10-24 13:31:502 hrs 17 mins ago0x3a344a058e5f66677e4be7c70ae6400cf89f9d52 IN  Biconomy: Hyphen Bridge0 Ether0.00995211274
0x33883cf5524c66a6f091a1965ec96b6431afacd6c0d378419bdb8d5bd4ee1e53Deposit Native134804672021-10-24 13:30:372 hrs 18 mins ago0x985e92fb38db6ff206e994ee87e7a25be488242a IN  Biconomy: Hyphen Bridge0.055 Ether0.002201236746 70.360771823
0x74efe2482d2436db9491562fecd1560ca7f0dbbee10b335e9ed3d908ea53fcadDeposit Native134804562021-10-24 13:28:012 hrs 21 mins ago0x8d0ce4d58923dffc468d30c1e1691bd6f7bdc633 IN  Biconomy: Hyphen Bridge1.5 Ether0.002328139606 74.417120242
0x84c33c9e48b942cfb664150e3e600b2c52e17a3f08d44d116c8c1bb943b8fdd1Send Funds To Us...134804062021-10-24 13:14:272 hrs 34 mins ago0xcc985bc976b78232cfdc207bbadcc3766ac92939 IN  Biconomy: Hyphen Bridge0 Ether0.00699275252
0x36808d6c53541891f4563c47005c2efa3450033274182af2c3956e653d99000fDeposit Erc20134804022021-10-24 13:13:442 hrs 35 mins ago0x0471576d6dc3e08b74de7408bcf406b5763a9eb7 IN  Biconomy: Hyphen Bridge0 Ether0.003986017751 61.415946369
0x957e72f11ab16f2e1cfb504e7c7b43fbfc818485146d2d44c3cafb63c0baa10aSend Funds To Us...134803652021-10-24 13:04:312 hrs 44 mins ago0xcc985bc976b78232cfdc207bbadcc3766ac92939 IN  Biconomy: Hyphen Bridge0 Ether0.00755881555
0x90c0464895c8280e02def24f97df961a1ad573a888ef274c0552f9efbda55e65Deposit Native134803442021-10-24 13:00:092 hrs 49 mins ago0x8d0ce4d58923dffc468d30c1e1691bd6f7bdc633 IN  Biconomy: Hyphen Bridge0.021 Ether0.001512818712 48.35604002
0x436448200733b80b4f5c6517c9497777e88ce9515d414a8a920315b0457d2d6cSend Funds To Us...134803432021-10-24 12:59:552 hrs 49 mins ago0x3a344a058e5f66677e4be7c70ae6400cf89f9d52 IN  Biconomy: Hyphen Bridge0 Ether0.0087409465
0x20968183c083e2310c40f7e157389d08b695ebefe454e5b7c9ba385f32bddf1eSend Funds To Us...134803112021-10-24 12:52:512 hrs 56 mins ago0x3a344a058e5f66677e4be7c70ae6400cf89f9d52 IN  Biconomy: Hyphen Bridge0 Ether0.00474775749
0xc692f1ce360b93f7633ff06d5449ca24765c74f5a06b7bc44dd3e5bbbccdb6b4Send Funds To Us...134802752021-10-24 12:43:383 hrs 5 mins ago0xcc985bc976b78232cfdc207bbadcc3766ac92939 IN  Biconomy: Hyphen Bridge0 Ether0.00523092654
0x49dfee37e7734de728e24133fc1209c2bf391d66e85cb5e338ed21374858bd85Deposit Erc20134802542021-10-24 12:39:303 hrs 9 mins ago0x9fe26e74ed5f6cc4248e31a51577b496d7a077c9 IN  Biconomy: Hyphen Bridge0 Ether0.003457485544 51.843360338
0xd38897f1d30c32bc2e4f5954d4fe0ac6105aaf62f856b4d9441d6b9156405563Send Funds To Us...134801732021-10-24 12:24:473 hrs 24 mins ago0x9ee7e89713a401c9d83238092e528e4fa22bf789 IN  Biconomy: Hyphen Bridge0 Ether0.00523092654
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x989ba2e4e3d8c64a39bd698f19f045862184bfe11c0865460c8cd326c119f04b134805692021-10-24 13:52:411 hr 56 mins ago Biconomy: Hyphen Bridge0xf1c66487e62e5bcfebae33bbc389a5f8bb8f92040.028735074000000004 Ether
0x20968183c083e2310c40f7e157389d08b695ebefe454e5b7c9ba385f32bddf1e134803112021-10-24 12:52:512 hrs 56 mins ago Biconomy: Hyphen Bridge0x495f4ec9d0faa09d8b79a2837b1265fe3b12cc580.26398441900000003 Ether
0xc692f1ce360b93f7633ff06d5449ca24765c74f5a06b7bc44dd3e5bbbccdb6b4134802752021-10-24 12:43:383 hrs 5 mins ago Biconomy: Hyphen BridgeENS Name dogecoinnft.eth2.492269074 Ether
0xd38897f1d30c32bc2e4f5954d4fe0ac6105aaf62f856b4d9441d6b9156405563134801732021-10-24 12:24:473 hrs 24 mins ago Biconomy: Hyphen Bridge0xde9b9a2b33e136a6fda98005e85585f83e536da71.041721074 Ether
0xd74fcfc649b7dc4d08d8731385900232cc0e48ab15735d6c31326addfcd26bdf134801402021-10-24 12:19:043 hrs 30 mins ago Biconomy: Hyphen Bridge0x51384bca09528d151dce3d769480b267b263ed7d0.27267887300000003 Ether
0xec357c0202c4d7648cf55ec3291b9c912fda80bda76a54f9364faba4a1315713134801042021-10-24 12:08:233 hrs 40 mins ago Biconomy: Hyphen Bridge0x139612df42395a9a49714f7c5fe4eff25f64d79d0.043623205 Ether
0x5a81611eb17e9b19ec79f951e3c72974b6e12441382ad06c2d31d56f0a8cd88b134799502021-10-24 11:37:454 hrs 11 mins ago Biconomy: Hyphen Bridge0xff3e828f2952169f4f16bb4fd41ddcda7a389bae0.285278397 Ether
0xfcc41f298abf239a93641e9b683b76bddd0c4c3c95599ed0d81995f7b35acf24134798942021-10-24 11:26:124 hrs 23 mins ago Biconomy: Hyphen BridgeENS Name furi.eth1.04113986 Ether
0x6387831b2b1a576d305b9f3b03f69ea975c6a12791e296e77a2d4b1218e3325b134798602021-10-24 11:18:224 hrs 30 mins ago Biconomy: Hyphen Bridge0xaacf36995db559556af6f139b95dfbe61be402bf0.284158157 Ether
0x71d00f22fd824895a98854b77b068ab7891a8595b19c57756809ccca3b893d44134797892021-10-24 11:00:594 hrs 48 mins ago Biconomy: Hyphen Bridge0x0bb75317f9487d7e4b085945f761edf9e4f4f5ed0.024611895 Ether
0xf5864dd24d2ea351c7d6b301dfd3e7cff279fd01640453bda5e354cdcd280804134796662021-10-24 10:35:255 hrs 13 mins ago Biconomy: Hyphen BridgeENS Name saushank.eth2.42772155 Ether
0xeb5c22e7a9e4b82a947d8781217133c91643f96fb78805dc35eae51f67018a5f134795702021-10-24 10:12:355 hrs 36 mins ago Biconomy: Hyphen Bridge0x0aa63dfe918b059e1f6db85c6f0105ae3221acec0.243326336 Ether
0x1dcb25d55b2d22955467fd23b79dbd41874fd51ec543779ff50528800fecd1d4134795562021-10-24 10:08:345 hrs 40 mins ago Biconomy: Hyphen Bridge0xc9da23cc53e6e69a4a6e030efbbc5b1fae19fb7a0.017812633 Ether
0x48a1f2300625402939612c8426681e89cf49d0c5e35aac00024c93e56c013f04134794502021-10-24 9:44:026 hrs 5 mins ago Biconomy: Hyphen Bridge0x19367575763c5d938f0ce720da614281954be2590.015717764 Ether
0x212c9afab5886091b49d48ce8b467cdd32d511dc663ef2a375608b2e03773c9e134793742021-10-24 9:26:356 hrs 22 mins ago Biconomy: Hyphen Bridge0xd3e5f1f4143b3b1e04f880d63c5025dd1cc9ea9c0.02509624 Ether
0x745baa6a56dca4175b71c7130745e2fcebaa3d96856f844ca6154163222fa91c134793742021-10-24 9:26:356 hrs 22 mins ago Biconomy: Hyphen Bridge0xe08c709ba513c892dc1628b8c1c99a32e0ab58f00.300723371 Ether
0xa33b63ea760b4214d03a51b7f02ffc7f43639b51547371f940b757b3c36bceed134791492021-10-24 8:36:207 hrs 13 mins ago Biconomy: Hyphen Bridge0xef8c31c5221a6f374b5be61462644c845ef8a3970.28686455 Ether
0x376ac051a8ef89a7ec0b1096bae7fcfa71658ebe416e72939fa6902c980ba2c6134789662021-10-24 7:55:397 hrs 53 mins ago Biconomy: Hyphen Bridge0xe7589a9435e27bf1443ebb279083f044c054e9fe0.015717764 Ether
0xeb24dfed856827af5dc4063c68a24748b1fc2f55a00e7df67d1ef9956ac2f8ca134788042021-10-24 7:17:038 hrs 32 mins ago Biconomy: Hyphen Bridge0xe7589a9435e27bf1443ebb279083f044c054e9fe0.015233419 Ether
0xaff41cfb26db0e5a4ca5bb64ff1e91a32b35fd1423a7588cf882ca1a23e7811c134788002021-10-24 7:16:358 hrs 32 mins ago Biconomy: Hyphen Bridge0x2075b90336909605f5d13747381fe5dfb9fb26100.031217418999999997 Ether
0x8e4a0d94861c72b4c46b941641deb45785d93643308329209c191ce6e59e6ed7134785902021-10-24 6:28:019 hrs 21 mins ago Biconomy: Hyphen Bridge0xe7589a9435e27bf1443ebb279083f044c054e9fe0.013780384 Ether
0xa1d41bb537d7bc03944f6b8373da316c9eaafe0d7de07f28908be396c56886c0134785802021-10-24 6:24:239 hrs 24 mins ago Biconomy: Hyphen Bridge0xfc6df5d4375f8e646c8cf58fff5136f80a517e500.015330288 Ether
0xa21b8035d1a043be31e29260faea5c9091bb04699e34c43002325357bdaf1327134785602021-10-24 6:19:269 hrs 29 mins ago Biconomy: Hyphen Bridge0xdda32e049c6555ba701246618f65866a679ad1680.015620895 Ether
0x2b4944a4935120704285943b5859cae50fcb24d9ee6d68b5c41932584eb8d624134782662021-10-24 5:15:2210 hrs 33 mins ago Biconomy: Hyphen Bridge0x55900e4d358131fd489e937327cc1ec44da2833e0.138140728999999981 Ether
0x455ddf74642d58fc72b3bbfb5c55a00c1a5db95fe2580ad8d202a2d0caa09dd3134781342021-10-24 4:43:2811 hrs 5 mins ago Biconomy: Hyphen Bridge0xf25fd37bd6e9d426d753152740b9d22a66729b0d2.578891467 Ether
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
LiquidityPoolManager

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
Yes with 200 runs

Other Settings:
istanbul EvmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-09-13
*/

// SPDX-License-Identifier: MIT AND Apache-2.0
// File: @openzeppelin/contracts/math/SafeMath.sol


pragma solidity >=0.6.0 <0.8.0;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

// File: contracts/6/interfaces/IRelayRecipient.sol

pragma solidity 0.7.6;

/**
 * a contract must implement this interface in order to support relayed transaction.
 * It is better to inherit the BaseRelayRecipient as its implementation.
 */
abstract contract IRelayRecipient {

    /**
     * return if the forwarder is trusted to forward relayed transactions to us.
     * the forwarder is required to verify the sender's signature, and verify
     * the call is not a replay.
     */
    function isTrustedForwarder(address forwarder) public virtual view returns(bool);

    /**
     * return the sender of this call.
     * if the call came through our trusted forwarder, then the real sender is appended as the last 20 bytes
     * of the msg.data.
     * otherwise, return `msg.sender`
     * should be used in the contract anywhere instead of msg.sender
     */
    function _msgSender() internal virtual view returns (address payable);

    function versionRecipient() external virtual view returns (string memory);
}

// File: contracts/6/libs/BaseRelayRecipient.sol

pragma solidity 0.7.6;


/**
 * A base contract to be inherited by any contract that want to receive relayed transactions
 * A subclass must use "_msgSender()" instead of "msg.sender"
 */
abstract contract BaseRelayRecipient is IRelayRecipient {

    /*
     * Forwarder singleton we accept calls from
     */
    address public trustedForwarder;

    /*
     * require a function to be called through GSN only
     */
    modifier trustedForwarderOnly() {
        require(msg.sender == address(trustedForwarder), "Function can only be called through the trusted Forwarder");
        _;
    }

    function isTrustedForwarder(address forwarder) public override view returns(bool) {
        return forwarder == trustedForwarder;
    }

    /**
     * return the sender of this call.
     * if the call came through our trusted forwarder, return the original sender.
     * otherwise, return `msg.sender`.
     * should be used in the contract anywhere instead of msg.sender
     */
    function _msgSender() internal override virtual view returns (address payable ret) {
        if (msg.data.length >= 24 && isTrustedForwarder(msg.sender)) {
            // At this point we know that the sender is a trusted forwarder,
            // so we trust that the last bytes of msg.data are the verified sender address.
            // extract sender address from the end of msg.data
            assembly {
                ret := shr(96,calldataload(sub(calldatasize(),20)))
            }
        } else {
            return msg.sender;
        }
    }
}

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


pragma solidity >=0.6.0 <0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

// File: @openzeppelin/contracts/utils/Address.sol


pragma solidity >=0.6.2 <0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: @openzeppelin/contracts/token/ERC20/SafeERC20.sol


pragma solidity >=0.6.0 <0.8.0;




/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure (when the token
 * contract returns false). Tokens that return no value (and instead revert or
 * throw on failure) are also supported, non-reverting calls are assumed to be
 * successful.
 * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    /**
     * @dev Deprecated. This function has issues similar to the ones found in
     * {IERC20-approve}, and its usage is discouraged.
     *
     * Whenever possible, use {safeIncreaseAllowance} and
     * {safeDecreaseAllowance} instead.
     */
    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        // solhint-disable-next-line max-line-length
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(value);
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

// File: contracts/6/insta-swaps/ReentrancyGuard.sol


pragma solidity 0.7.6;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

// File: contracts/6/libs/Pausable.sol


pragma solidity >=0.6.0 <0.8.0;

// import "../GSN/Context.sol";

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    event PauserChanged(
        address indexed previousPauser,
        address indexed newPauser
    );

    bool private _paused;
    address private _pauser;

    /**
     * @dev The pausable constructor sets the original `pauser` of the contract to the sender
     * account & Initializes the contract in unpaused state..
     */
    constructor(address pauser) {
        require(pauser != address(0), "Pauser Address cannot be 0");
        _pauser = pauser;
        _paused = false;
    }

    /**
     * @dev Throws if called by any account other than the pauser.
     */
    modifier onlyPauser() {
        require(
            isPauser(),
            "Only pauser is allowed to perform this operation"
        );
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!_paused, "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(_paused, "Pausable: not paused");
        _;
    }

    /**
     * @return the address of the owner.
     */
    function getPauser() public view returns (address) {
        return _pauser;
    }

    /**
     * @return true if `msg.sender` is the owner of the contract.
     */
    function isPauser() public view returns (bool) {
        return msg.sender == _pauser;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function isPaused() public view returns (bool) {
        return _paused;
    }

    /**
     * @dev Allows the current pauser to transfer control of the contract to a newPauser.
     * @param newPauser The address to transfer pauserShip to.
     */
    function changePauser(address newPauser) public onlyPauser {
        _changePauser(newPauser);
    }

    /**
     * @dev Transfers control of the contract to a newPauser.
     * @param newPauser The address to transfer ownership to.
     */
    function _changePauser(address newPauser) internal {
        require(newPauser != address(0));
        emit PauserChanged(_pauser, newPauser);
        _pauser = newPauser;
    }

    function renouncePauser() external virtual onlyPauser {
        emit PauserChanged(_pauser, address(0));
        _pauser = address(0);
    }
    
    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function pause() public onlyPauser whenNotPaused {
        _paused = true;
        emit Paused(_pauser);
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function unpause() public onlyPauser whenPaused {
        _paused = false;
        emit Unpaused(_pauser);
    }
}

// File: contracts/6/libs/Ownable.sol


pragma solidity 0.7.6;

/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
abstract contract Ownable {
    address private _owner;

    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    /**
     * @dev The Ownable constructor sets the original `owner` of the contract to the sender
     * account.
     */
    constructor(address owner) {
        require(owner != address(0), "Owner Address cannot be 0");
        _owner = owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(
            isOwner(),
            "Only contract owner is allowed to perform this operation"
        );
        _;
    }

    /**
     * @return the address of the owner.
     */
    function getOwner() public view returns (address) {
        return _owner;
    }

    /**
     * @return true if `msg.sender` is the owner of the contract.
     */
    function isOwner() public view returns (bool) {
        return msg.sender == _owner;
    }

    /**
     * @dev Allows the current owner to relinquish control of the contract.
     * @notice Renouncing to ownership will leave the contract without an owner.
     * It will not be possible to call the functions with the `onlyOwner`
     * modifier anymore.
     */
    function renounceOwnership() external virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Allows the current owner to transfer control of the contract to a newOwner.
     * @param newOwner The address to transfer ownership to.
     */
    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers control of the contract to a newOwner.
     * @param newOwner The address to transfer ownership to.
     */
    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0));
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

// File: contracts/6/ExecutorManager.sol


pragma solidity 0.7.6;


contract ExecutorManager is Ownable {
    address[] internal executors;
    mapping(address => bool) internal executorStatus;

    event ExecutorAdded(address executor, address owner);
    event ExecutorRemoved(address executor, address owner);

    // MODIFIERS
    modifier onlyExecutor() {
        require(
            executorStatus[msg.sender],
            "You are not allowed to perform this operation"
        );
        _;
    }

    constructor(address owner) Ownable(owner) {
        require( owner != address(0), "owner cannot be zero");
    }

    function getExecutorStatus(address executor)
        public
        view
        returns (bool status)
    {
        status = executorStatus[executor];
    }

    function getAllExecutors() public view returns (address[] memory) {
        return executors;
    }

    //Register new Executors
    function addExecutors(address[] calldata executorArray) external onlyOwner {
        for (uint256 i = 0; i < executorArray.length; i++) {
            addExecutor(executorArray[i]);
        }
    }

    // Register single executor
    function addExecutor(address executorAddress) public onlyOwner {
        require(executorAddress != address(0), "executor address can not be 0");
        executors.push(executorAddress);
        executorStatus[executorAddress] = true;
        emit ExecutorAdded(executorAddress, msg.sender);
    }

    //Remove registered Executors
    function removeExecutors(address[] calldata executorArray) external onlyOwner {
        for (uint256 i = 0; i < executorArray.length; i++) {
            removeExecutor(executorArray[i]);
        }
    }

    // Remove Register single executor
    function removeExecutor(address executorAddress) public onlyOwner {
        require(executorAddress != address(0), "executor address can not be 0");
        executorStatus[executorAddress] = false;
        emit ExecutorRemoved(executorAddress, msg.sender);
    }
}

// File: contracts/6/interfaces/IERC20Permit.sol

pragma solidity 0.7.6;


interface IERC20Detailed is IERC20 {
  function name() external view returns(string memory);
  function decimals() external view returns(uint256);
}

interface IERC20Nonces is IERC20Detailed {
  function nonces(address holder) external view returns(uint);
}

interface IERC20Permit is IERC20Nonces {
  function permit(address holder, address spender, uint256 nonce, uint256 expiry,
                  bool allowed, uint8 v, bytes32 r, bytes32 s) external;

  function permit(address holder, address spender, uint256 value, uint256 expiry,
                  uint8 v, bytes32 r, bytes32 s) external;
}

// File: contracts/6/insta-swaps/LiquidityPoolManager.sol


pragma solidity 0.7.6;
pragma abicoder v2;









contract LiquidityPoolManager is ReentrancyGuard, Ownable, BaseRelayRecipient, Pausable {
    using SafeMath for uint256;

    address private constant NATIVE = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;
    uint256 public baseGas;
    
    ExecutorManager private executorManager;
    uint256 public adminFee;

    struct TokenInfo {
        uint256 transferOverhead;
        bool supportedToken;
        uint256 minCap;
        uint256 maxCap;
        uint256 liquidity;
        mapping(address => uint256) liquidityProvider;
    }

     struct PermitRequest {
        uint256 nonce;
        uint256 expiry;
        bool allowed; 
        uint8 v;
        bytes32 r; 
        bytes32 s; 
    }

    mapping ( address => TokenInfo ) public tokensInfo;
    mapping ( bytes32 => bool ) public processedHash;
    mapping ( address => uint256 ) public gasFeeAccumulatedByToken;
    mapping ( address => uint256 ) public adminFeeAccumulatedByToken;

    event AssetSent(address indexed asset, uint256 indexed amount, uint256 indexed transferredAmount, address target, bytes depositHash);
    event Received(address indexed from, uint256 indexed amount);
    event Deposit(address indexed from, address indexed tokenAddress, address indexed receiver, uint256 toChainId, uint256 amount);
    event LiquidityAdded(address indexed from, address indexed tokenAddress, address indexed receiver, uint256 amount);
    event LiquidityRemoved(address indexed tokenAddress, uint256 indexed amount, address indexed sender);
    event fundsWithdraw(address indexed tokenAddress, address indexed owner,  uint256 indexed amount);
    event AdminFeeWithdraw(address indexed tokenAddress, address indexed owner,  uint256 indexed amount);
    event GasFeeWithdraw(address indexed tokenAddress, address indexed owner,  uint256 indexed amount);
    event AdminFeeChanged(uint256 indexed newAdminFee);
    event TrustedForwarderChanged(address indexed forwarderAddress);
    event EthReceived(address, uint);

    // MODIFIERS
    modifier onlyExecutor() {
        require(executorManager.getExecutorStatus(_msgSender()),
            "You are not allowed to perform this operation"
        );
        _;
    }

    modifier tokenChecks(address tokenAddress){
        require(tokenAddress != address(0), "Token address cannot be 0");
        require(tokensInfo[tokenAddress].supportedToken, "Token not supported");

        _;
    }

    constructor(address _executorManagerAddress, address owner, address pauser, address _trustedForwarder, uint256 _adminFee) Ownable(owner) Pausable(pauser) {
        require(_executorManagerAddress != address(0), "ExecutorManager Contract Address cannot be 0");
        require(_trustedForwarder != address(0), "TrustedForwarder Contract Address cannot be 0");
        require(_adminFee != 0, "AdminFee cannot be 0");
        executorManager = ExecutorManager(_executorManagerAddress);
        trustedForwarder = _trustedForwarder;
        adminFee = _adminFee;
        baseGas = 21000;
    }

    function renounceOwnership() external override onlyOwner {
        revert ("can't renounceOwnership here"); // not possible within this smart contract
    }

    function renouncePauser() external override onlyPauser {
        revert ("can't renouncePauser here"); // not possible within this smart contract
    }

    function getAdminFee() public view returns (uint256 ) {
        return adminFee;
    }

    function changeAdminFee(uint256 newAdminFee) external onlyOwner whenNotPaused {
        require(newAdminFee != 0, "Admin Fee cannot be 0");
        adminFee = newAdminFee;
        emit AdminFeeChanged(newAdminFee);
    }

    function versionRecipient() external override virtual view returns (string memory){
        return "1";
    }

    function setBaseGas(uint128 gas) external onlyOwner{
        baseGas = gas;
    }

    function getExecutorManager() public view returns (address){
        return address(executorManager);
    }

    function setExecutorManager(address _executorManagerAddress) external onlyOwner {
        require(_executorManagerAddress != address(0), "Executor Manager Address cannot be 0");
        executorManager = ExecutorManager(_executorManagerAddress);
    }

    function setTrustedForwarder( address forwarderAddress ) external onlyOwner {
        require(forwarderAddress != address(0), "Forwarder Address cannot be 0");
        trustedForwarder = forwarderAddress;
        emit TrustedForwarderChanged(forwarderAddress);
    }

    function setTokenTransferOverhead( address tokenAddress, uint256 gasOverhead ) external tokenChecks(tokenAddress) onlyOwner {
        tokensInfo[tokenAddress].transferOverhead = gasOverhead;
    }

    function addSupportedToken( address tokenAddress, uint256 minCapLimit, uint256 maxCapLimit ) external onlyOwner {
        require(tokenAddress != address(0), "Token address cannot be 0");  
        require(maxCapLimit > minCapLimit, "maxCapLimit cannot be smaller than minCapLimit");        
        tokensInfo[tokenAddress].supportedToken = true;
        tokensInfo[tokenAddress].minCap = minCapLimit;
        tokensInfo[tokenAddress].maxCap = maxCapLimit;
    }

    function removeSupportedToken( address tokenAddress ) external tokenChecks(tokenAddress) onlyOwner {
        tokensInfo[tokenAddress].supportedToken = false;
    }

    function updateTokenCap( address tokenAddress, uint256 minCapLimit, uint256 maxCapLimit ) external tokenChecks(tokenAddress) onlyOwner {
        require(maxCapLimit > minCapLimit, "maxCapLimit cannot be smaller than minCapLimit");                
        tokensInfo[tokenAddress].minCap = minCapLimit;        
        tokensInfo[tokenAddress].maxCap = maxCapLimit;
    }

    function addNativeLiquidity() external payable whenNotPaused {
        require(msg.value != 0, "Amount cannot be 0");
        address payable sender = _msgSender();
        tokensInfo[NATIVE].liquidityProvider[sender] = tokensInfo[NATIVE].liquidityProvider[sender].add(msg.value);
        tokensInfo[NATIVE].liquidity = tokensInfo[NATIVE].liquidity.add(msg.value);

        emit LiquidityAdded(sender, NATIVE, address(this), msg.value);
    }

    function removeNativeLiquidity(uint256 amount) external nonReentrant {
        require(amount != 0 , "Amount cannot be 0");
        address payable sender = _msgSender();
        require(tokensInfo[NATIVE].liquidityProvider[sender] >= amount, "Not enough balance");
        tokensInfo[NATIVE].liquidityProvider[sender] = tokensInfo[NATIVE].liquidityProvider[sender].sub(amount);
        tokensInfo[NATIVE].liquidity = tokensInfo[NATIVE].liquidity.sub(amount);
        
        bool success = sender.send(amount);
        require(success, "Native Transfer Failed");

        emit LiquidityRemoved( NATIVE, amount, sender);
    }

    function addTokenLiquidity( address tokenAddress, uint256 amount ) external tokenChecks(tokenAddress) whenNotPaused {
        require(amount != 0, "Amount cannot be 0");
        address payable sender = _msgSender();
        tokensInfo[tokenAddress].liquidityProvider[sender] = tokensInfo[tokenAddress].liquidityProvider[sender].add(amount);
        tokensInfo[tokenAddress].liquidity = tokensInfo[tokenAddress].liquidity.add(amount);
        
        SafeERC20.safeTransferFrom(IERC20(tokenAddress), sender, address(this), amount);
        emit LiquidityAdded(sender, tokenAddress, address(this), amount);
    }

    function removeTokenLiquidity( address tokenAddress, uint256 amount ) external tokenChecks(tokenAddress) {
        require(amount != 0, "Amount cannot be 0");
        address payable sender = _msgSender();
        require(tokensInfo[tokenAddress].liquidityProvider[sender] >= amount, "Not enough balance");

        tokensInfo[tokenAddress].liquidityProvider[sender] = tokensInfo[tokenAddress].liquidityProvider[sender].sub(amount);
        tokensInfo[tokenAddress].liquidity = tokensInfo[tokenAddress].liquidity.sub(amount);

        SafeERC20.safeTransfer(IERC20(tokenAddress), sender, amount);
        emit LiquidityRemoved( tokenAddress, amount, sender);

    }

    function getLiquidity(address liquidityProviderAddress, address tokenAddress) public view returns (uint256 ) {
        return tokensInfo[tokenAddress].liquidityProvider[liquidityProviderAddress];
    }

    function depositErc20( address tokenAddress, address receiver, uint256 amount, uint256 toChainId ) public tokenChecks(tokenAddress) whenNotPaused {
        require(tokensInfo[tokenAddress].minCap <= amount && tokensInfo[tokenAddress].maxCap >= amount, "Deposit amount should be within allowed Cap limits");
        require(receiver != address(0), "Receiver address cannot be 0");
        require(amount != 0, "Amount cannot be 0");

        address payable sender = _msgSender();

        SafeERC20.safeTransferFrom(IERC20(tokenAddress), sender, address(this),amount);
        emit Deposit(sender, tokenAddress, receiver, toChainId, amount);
    }

    /** 
     * DAI permit and Deposit.
     */
    function permitAndDepositErc20(
        address tokenAddress,
        address receiver,
        uint256 amount,
        uint256 toChainId,
        PermitRequest calldata permitOptions
        )
        external {
            IERC20Permit(tokenAddress).permit(_msgSender(), address(this), permitOptions.nonce, permitOptions.expiry, permitOptions.allowed, permitOptions.v, permitOptions.r, permitOptions.s);
            depositErc20(tokenAddress, receiver, amount, toChainId);
    }

    /** 
     * EIP2612 and Deposit.
     */
    function permitEIP2612AndDepositErc20(
        address tokenAddress,
        address receiver,
        uint256 amount,
        uint256 toChainId,
        PermitRequest calldata permitOptions
        )
        external {
            IERC20Permit(tokenAddress).permit(_msgSender(), address(this), amount, permitOptions.expiry, permitOptions.v, permitOptions.r, permitOptions.s);
            depositErc20(tokenAddress, receiver, amount, toChainId);            
    }

    function depositNative( address receiver, uint256 toChainId ) external whenNotPaused payable {
        require(tokensInfo[NATIVE].minCap <= msg.value && tokensInfo[NATIVE].maxCap >= msg.value, "Deposit amount should be within allowed Cap limit");
        require(receiver != address(0), "Receiver address cannot be 0");
        require(msg.value != 0, "Amount cannot be 0");

        emit Deposit(_msgSender(), NATIVE, receiver, toChainId, msg.value);
    }

    function sendFundsToUser( address tokenAddress, uint256 amount, address payable receiver, bytes memory depositHash, uint256 tokenGasPrice ) external nonReentrant onlyExecutor tokenChecks(tokenAddress) whenNotPaused {
        uint256 initialGas = gasleft();
        require(tokensInfo[tokenAddress].minCap <= amount && tokensInfo[tokenAddress].maxCap >= amount, "Withdraw amount should be within allowed Cap limits");
        require(receiver != address(0), "Bad receiver address");

        (bytes32 hashSendTransaction, bool status) = checkHashStatus(tokenAddress, amount, receiver, depositHash);

        require(!status, "Already Processed");
        processedHash[hashSendTransaction] = true;

        uint256 calculateAdminFee = amount.mul(adminFee).div(10000);

        adminFeeAccumulatedByToken[tokenAddress] = adminFeeAccumulatedByToken[tokenAddress].add(calculateAdminFee); 

        uint256 totalGasUsed = (initialGas.sub(gasleft()));
        totalGasUsed = totalGasUsed.add(tokensInfo[tokenAddress].transferOverhead);
        totalGasUsed = totalGasUsed.add(baseGas);

        gasFeeAccumulatedByToken[tokenAddress] = gasFeeAccumulatedByToken[tokenAddress].add(totalGasUsed.mul(tokenGasPrice));
        uint256 amountToTransfer = amount.sub(calculateAdminFee.add(totalGasUsed.mul(tokenGasPrice)));

        if (tokenAddress == NATIVE) {
            require(address(this).balance >= amountToTransfer, "Not Enough Balance");
            bool success = receiver.send(amountToTransfer);
            require(success, "Native Transfer Failed");
        } else {
            require(IERC20(tokenAddress).balanceOf(address(this)) >= amountToTransfer, "Not Enough Balance");
            SafeERC20.safeTransfer(IERC20(tokenAddress), receiver, amountToTransfer);
        }

        emit AssetSent(tokenAddress, amount, amountToTransfer, receiver, depositHash);
    }

    function checkHashStatus(address tokenAddress, uint256 amount, address payable receiver, bytes memory depositHash) public view returns(bytes32 hashSendTransaction, bool status){
        hashSendTransaction = keccak256(
            abi.encode(
                tokenAddress,
                amount,
                receiver,
                keccak256(depositHash)
            )
        );

        status = processedHash[hashSendTransaction];
    }

    function withdrawErc20(address tokenAddress) external onlyOwner whenNotPaused {
        uint256 profitEarned = (IERC20(tokenAddress).balanceOf(address(this)))
                                .sub(tokensInfo[tokenAddress].liquidity)
                                .sub(adminFeeAccumulatedByToken[tokenAddress])
                                .sub(gasFeeAccumulatedByToken[tokenAddress]);
        require(profitEarned != 0, "Profit earned is 0");
        address payable sender = _msgSender();

        SafeERC20.safeTransfer(IERC20(tokenAddress), sender, profitEarned);

        emit fundsWithdraw(tokenAddress, sender,  profitEarned);
    }

    function withdrawErc20AdminFee(address tokenAddress, address receiver) external onlyOwner whenNotPaused {
        require(tokenAddress != NATIVE, "Use withdrawNativeAdminFee() for native token");
        uint256 adminFeeAccumulated = adminFeeAccumulatedByToken[tokenAddress];
        require(adminFeeAccumulated != 0, "Admin Fee earned is 0");

        adminFeeAccumulatedByToken[tokenAddress] = 0;

        SafeERC20.safeTransfer(IERC20(tokenAddress), receiver, adminFeeAccumulated);
        emit AdminFeeWithdraw(tokenAddress, receiver, adminFeeAccumulated);
    }

    function withdrawErc20GasFee(address tokenAddress, address receiver) external onlyOwner whenNotPaused {
        require(tokenAddress != NATIVE, "Use withdrawNativeGasFee() for native token");
        uint256 gasFeeAccumulated = gasFeeAccumulatedByToken[tokenAddress];
        require(gasFeeAccumulated != 0, "Gas Fee earned is 0");

        gasFeeAccumulatedByToken[tokenAddress] = 0;

        SafeERC20.safeTransfer(IERC20(tokenAddress), receiver, gasFeeAccumulated);
        emit GasFeeWithdraw(tokenAddress, receiver, gasFeeAccumulated);
    }

    function withdrawNative() external onlyOwner whenNotPaused {
        uint256 profitEarned = (address(this).balance)
                                .sub(tokensInfo[NATIVE].liquidity)
                                .sub(adminFeeAccumulatedByToken[NATIVE])
                                .sub(gasFeeAccumulatedByToken[NATIVE]);
        
        require(profitEarned != 0, "Profit earned is 0");

        address payable sender = _msgSender();
        bool success = sender.send(profitEarned);
        require(success, "Native Transfer Failed");
        
        emit fundsWithdraw(address(this), sender, profitEarned);
    }

    function withdrawNativeAdminFee(address payable receiver) external onlyOwner whenNotPaused {
        uint256 adminFeeAccumulated = adminFeeAccumulatedByToken[NATIVE];
        require(adminFeeAccumulated != 0, "Admin Fee earned is 0");
        adminFeeAccumulatedByToken[NATIVE] = 0;
        bool success = receiver.send(adminFeeAccumulated);
        require(success, "Native Transfer Failed");
        
        emit AdminFeeWithdraw(address(this), receiver, adminFeeAccumulated);
    }

    function withdrawNativeGasFee(address payable receiver) external onlyOwner whenNotPaused {
        uint256 gasFeeAccumulated = gasFeeAccumulatedByToken[NATIVE];
        require(gasFeeAccumulated != 0, "Gas Fee earned is 0");
        gasFeeAccumulatedByToken[NATIVE] = 0;
        bool success = receiver.send(gasFeeAccumulated);
        require(success, "Native Transfer Failed");
        
        emit GasFeeWithdraw(address(this), receiver, gasFeeAccumulated);
    }

    receive() external payable {
        emit EthReceived(_msgSender(), msg.value);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_executorManagerAddress","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"pauser","type":"address"},{"internalType":"address","name":"_trustedForwarder","type":"address"},{"internalType":"uint256","name":"_adminFee","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newAdminFee","type":"uint256"}],"name":"AdminFeeChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"AdminFeeWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"transferredAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"bytes","name":"depositHash","type":"bytes"}],"name":"AssetSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"toChainId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"EthReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"GasFeeWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"LiquidityRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousPauser","type":"address"},{"indexed":true,"internalType":"address","name":"newPauser","type":"address"}],"name":"PauserChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Received","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"forwarderAddress","type":"address"}],"name":"TrustedForwarderChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"fundsWithdraw","type":"event"},{"inputs":[],"name":"addNativeLiquidity","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"minCapLimit","type":"uint256"},{"internalType":"uint256","name":"maxCapLimit","type":"uint256"}],"name":"addSupportedToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"addTokenLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"adminFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"adminFeeAccumulatedByToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAdminFee","type":"uint256"}],"name":"changeAdminFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPauser","type":"address"}],"name":"changePauser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"receiver","type":"address"},{"internalType":"bytes","name":"depositHash","type":"bytes"}],"name":"checkHashStatus","outputs":[{"internalType":"bytes32","name":"hashSendTransaction","type":"bytes32"},{"internalType":"bool","name":"status","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"toChainId","type":"uint256"}],"name":"depositErc20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"toChainId","type":"uint256"}],"name":"depositNative","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"gasFeeAccumulatedByToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAdminFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getExecutorManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"liquidityProviderAddress","type":"address"},{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"getLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPauser","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPauser","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"forwarder","type":"address"}],"name":"isTrustedForwarder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"toChainId","type":"uint256"},{"components":[{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"bool","name":"allowed","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct LiquidityPoolManager.PermitRequest","name":"permitOptions","type":"tuple"}],"name":"permitAndDepositErc20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"toChainId","type":"uint256"},{"components":[{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"bool","name":"allowed","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct LiquidityPoolManager.PermitRequest","name":"permitOptions","type":"tuple"}],"name":"permitEIP2612AndDepositErc20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"processedHash","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"removeNativeLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"removeSupportedToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"removeTokenLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renouncePauser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"receiver","type":"address"},{"internalType":"bytes","name":"depositHash","type":"bytes"},{"internalType":"uint256","name":"tokenGasPrice","type":"uint256"}],"name":"sendFundsToUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"gas","type":"uint128"}],"name":"setBaseGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_executorManagerAddress","type":"address"}],"name":"setExecutorManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"gasOverhead","type":"uint256"}],"name":"setTokenTransferOverhead","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"forwarderAddress","type":"address"}],"name":"setTrustedForwarder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokensInfo","outputs":[{"internalType":"uint256","name":"transferOverhead","type":"uint256"},{"internalType":"bool","name":"supportedToken","type":"bool"},{"internalType":"uint256","name":"minCap","type":"uint256"},{"internalType":"uint256","name":"maxCap","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"trustedForwarder","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"minCapLimit","type":"uint256"},{"internalType":"uint256","name":"maxCapLimit","type":"uint256"}],"name":"updateTokenCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"versionRecipient","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"withdrawErc20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"receiver","type":"address"}],"name":"withdrawErc20AdminFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"receiver","type":"address"}],"name":"withdrawErc20GasFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawNative","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"receiver","type":"address"}],"name":"withdrawNativeAdminFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"receiver","type":"address"}],"name":"withdrawNativeGasFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b5060405162003df538038062003df583398101604081905262000034916200019b565b600160005582846001600160a01b0381166200006d5760405162461bcd60e51b8152600401620000649062000238565b60405180910390fd5b600180546001600160a01b0319166001600160a01b039283161790558116620000aa5760405162461bcd60e51b815260040162000064906200026f565b600380546001600160a01b0319166001600160a01b039283161790556002805460ff60a01b191690558516620000f45760405162461bcd60e51b81526004016200006490620002f3565b6001600160a01b0382166200011d5760405162461bcd60e51b81526004016200006490620002a6565b806200013d5760405162461bcd60e51b8152600401620000649062000201565b600580546001600160a01b039687166001600160a01b031991821617909155600280549390961692169190911790935550506006556152086004556200033f565b80516001600160a01b03811681146200019657600080fd5b919050565b600080600080600060a08688031215620001b3578081fd5b620001be866200017e565b9450620001ce602087016200017e565b9350620001de604087016200017e565b9250620001ee606087016200017e565b9150608086015190509295509295909350565b60208082526014908201527f41646d696e4665652063616e6e6f742062652030000000000000000000000000604082015260600190565b60208082526019908201527f4f776e657220416464726573732063616e6e6f74206265203000000000000000604082015260600190565b6020808252601a908201527f50617573657220416464726573732063616e6e6f742062652030000000000000604082015260600190565b6020808252602d908201527f54727573746564466f7277617264657220436f6e74726163742041646472657360408201526c0732063616e6e6f74206265203609c1b606082015260800190565b6020808252602c908201527f4578656375746f724d616e6167657220436f6e7472616374204164647265737360408201526b02063616e6e6f7420626520360a41b606082015260800190565b613aa6806200034f6000396000f3fe60806040526004361061028c5760003560e01c806384d936121161015a578063c7e42b1b116100c1578063ef0d45721161007a578063ef0d457214610781578063f2fde38b146107a1578063f72780ef146107c1578063fa181699146107e1578063fc07ec2514610801578063fcc4d59a14610821576102d3565b8063c7e42b1b146106c1578063ccb844e1146106e1578063da74222814610701578063e06179fe14610721578063ea526de714610741578063edd9587b14610761576102d3565b8063a0be06f911610113578063a0be06f914610629578063ab1635b71461063e578063b187bd2614610653578063b238b53314610668578063b6632cb314610670578063ba8dbea214610690576102d3565b806384d936121461057157806385a25597146105915780638909bb83146105bf578063893d20e8146105df5780638b56d0b7146105f45780638f32d59b14610614576102d3565b806356e3866d116101fe5780637008b548116101b75780637008b548146104d0578063715018a6146104f2578063760d098a1461050757806376319190146105275780637da0a877146105475780638456cb591461055c576102d3565b806356e3866d14610424578063572b6c0514610444578063583bbc40146104715780636125ca02146104865780636a8a3b96146104a65780636ef8d66d146104bb576102d3565b806323868d6c1161025057806323868d6c1461036d5780632a905ccc1461038d5780632cd271e7146103b85780633f4ba83a146103d8578063486ff0cd146103ed57806350431ce41461040f576102d3565b806302279b4a146102d857806313fe24e1146102ed57806314fe72aa1461030d5780631a2b43811461032d5780631ff148601461034d576102d3565b366102d3577f85177f287940f2f05425a4029951af0e047a7f9c4eaa9a6e6917bcd869f866956102ba610841565b346040516102c9929190613106565b60405180910390a1005b600080fd5b6102eb6102e6366004612e11565b610872565b005b3480156102f957600080fd5b506102eb610308366004612d66565b6109eb565b34801561031957600080fd5b506102eb610328366004612e11565b610b93565b34801561033957600080fd5b506102eb610348366004612d2e565b610d41565b34801561035957600080fd5b506102eb610368366004612d2e565b610e66565b34801561037957600080fd5b506102eb610388366004612d12565b610f8b565b34801561039957600080fd5b506103a26110ea565b6040516103af9190613987565b60405180910390f35b3480156103c457600080fd5b506102eb6103d3366004612d12565b6110f0565b3480156103e457600080fd5b506102eb611120565b3480156103f957600080fd5b506104026111c1565b6040516103af9190613188565b34801561041b57600080fd5b506102eb6111dc565b34801561043057600080fd5b506102eb61043f366004612f18565b61135f565b34801561045057600080fd5b5061046461045f366004612d12565b61142c565b6040516103af919061316d565b34801561047d57600080fd5b506103a2611440565b34801561049257600080fd5b506102eb6104a1366004612dab565b611446565b3480156104b257600080fd5b506104646114e5565b3480156104c757600080fd5b506102eb6114f6565b3480156104dc57600080fd5b506104e5611532565b6040516103af9190613044565b3480156104fe57600080fd5b506102eb611541565b34801561051357600080fd5b50610464610522366004612f84565b61157d565b34801561053357600080fd5b506102eb610542366004612d12565b611592565b34801561055357600080fd5b506104e561163d565b34801561056857600080fd5b506102eb61164c565b34801561057d57600080fd5b506102eb61058c366004612e11565b6116ea565b34801561059d57600080fd5b506105b16105ac366004612e3c565b6118a2565b6040516103af929190613178565b3480156105cb57600080fd5b506102eb6105da366004612ea6565b6118f9565b3480156105eb57600080fd5b506104e5611dc1565b34801561060057600080fd5b506102eb61060f366004612e11565b611dd0565b34801561062057600080fd5b50610464611e73565b34801561063557600080fd5b506103a2611e84565b34801561064a57600080fd5b506104e5611e8a565b34801561065f57600080fd5b50610464611e99565b6102eb611ea9565b34801561067c57600080fd5b506102eb61068b366004612f84565b611ffc565b34801561069c57600080fd5b506106b06106ab366004612d12565b61209a565b6040516103af959493929190613990565b3480156106cd57600080fd5b506102eb6106dc366004612d12565b6120cd565b3480156106ed57600080fd5b506102eb6106fc366004612f9c565b61224a565b34801561070d57600080fd5b506102eb61071c366004612d12565b61227c565b34801561072d57600080fd5b506103a261073c366004612d12565b612310565b34801561074d57600080fd5b506103a261075c366004612d2e565b612322565b34801561076d57600080fd5b506102eb61077c366004612f18565b612353565b34801561078d57600080fd5b506102eb61079c366004612d12565b6123f3565b3480156107ad57600080fd5b506102eb6107bc366004612d12565b61245f565b3480156107cd57600080fd5b506102eb6107dc366004612f84565b61248c565b3480156107ed57600080fd5b506102eb6107fc366004612d12565b61266c565b34801561080d57600080fd5b506102eb61081c366004612dab565b6127cd565b34801561082d57600080fd5b506103a261083c366004612d12565b612839565b60006018361080159061085857506108583361142c565b1561086c575060131936013560601c61086f565b50335b90565b600254600160a01b900460ff16156108a55760405162461bcd60e51b815260040161089c90613496565b60405180910390fd5b600080516020613a5183398151915260005260076020527fb2084a3e4595ccf007fb44245853374aaf0de960074375e8e0fb334712e94d105434108015906109255750600080516020613a5183398151915260005260076020527fb2084a3e4595ccf007fb44245853374aaf0de960074375e8e0fb334712e94d11543411155b6109415760405162461bcd60e51b815260040161089c906134c0565b6001600160a01b0382166109675760405162461bcd60e51b815260040161089c906135ff565b346109845760405162461bcd60e51b815260040161089c90613636565b6001600160a01b038216600080516020613a518339815191526109a5610841565b6001600160a01b03167f5fe47ed6d4225326d3303476197d782ded5a4e9c14f479dc9ec4992af4e85d5984346040516109df9291906139b3565b60405180910390a45050565b836001600160a01b038116610a125760405162461bcd60e51b815260040161089c906132be565b6001600160a01b03811660009081526007602052604090206001015460ff16610a4d5760405162461bcd60e51b815260040161089c90613662565b600254600160a01b900460ff1615610a775760405162461bcd60e51b815260040161089c90613496565b6001600160a01b0385166000908152600760205260409020600201548310801590610abd57506001600160a01b0385166000908152600760205260409020600301548311155b610ad95760405162461bcd60e51b815260040161089c90613321565b6001600160a01b038416610aff5760405162461bcd60e51b815260040161089c906135ff565b82610b1c5760405162461bcd60e51b815260040161089c90613636565b6000610b26610841565b9050610b348682308761284b565b846001600160a01b0316866001600160a01b0316826001600160a01b03167f5fe47ed6d4225326d3303476197d782ded5a4e9c14f479dc9ec4992af4e85d598688604051610b839291906139b3565b60405180910390a4505050505050565b816001600160a01b038116610bba5760405162461bcd60e51b815260040161089c906132be565b6001600160a01b03811660009081526007602052604090206001015460ff16610bf55760405162461bcd60e51b815260040161089c90613662565b600254600160a01b900460ff1615610c1f5760405162461bcd60e51b815260040161089c90613496565b81610c3c5760405162461bcd60e51b815260040161089c90613636565b6000610c46610841565b6001600160a01b0380861660009081526007602090815260408083209385168352600590930190522054909150610c7d90846128a9565b6001600160a01b038086166000818152600760208181526040808420958816845260058601825283209590955591905290915260040154610cbe90846128a9565b6001600160a01b038516600090815260076020526040902060040155610ce68482308661284b565b306001600160a01b0316846001600160a01b0316826001600160a01b03167f2db8fc28326a114fe00f000205e13b79bbdeaeae6568b34ccf9fe0991da2285e86604051610d339190613987565b60405180910390a450505050565b610d49611e73565b610d655760405162461bcd60e51b815260040161089c906136dc565b600254600160a01b900460ff1615610d8f5760405162461bcd60e51b815260040161089c90613496565b6001600160a01b038216600080516020613a518339815191521415610dc65760405162461bcd60e51b815260040161089c9061323c565b6001600160a01b03821660009081526009602052604090205480610dfc5760405162461bcd60e51b815260040161089c90613373565b6001600160a01b038316600090815260096020526040812055610e208383836128d5565b80826001600160a01b0316846001600160a01b03167fc129cf8730ce23dfea8953a499f9b276ad5777855ff41fafe198ebc2a0d2324360405160405180910390a4505050565b610e6e611e73565b610e8a5760405162461bcd60e51b815260040161089c906136dc565b600254600160a01b900460ff1615610eb45760405162461bcd60e51b815260040161089c90613496565b6001600160a01b038216600080516020613a518339815191521415610eeb5760405162461bcd60e51b815260040161089c9061368f565b6001600160a01b0382166000908152600a602052604090205480610f215760405162461bcd60e51b815260040161089c906137ee565b6001600160a01b0383166000908152600a6020526040812055610f458383836128d5565b80826001600160a01b0316846001600160a01b03167f524ce1e12cd0eb0a42db4a3933bb1dbbe91edfe70b281be691fe5a2003ef904e60405160405180910390a4505050565b610f93611e73565b610faf5760405162461bcd60e51b815260040161089c906136dc565b600254600160a01b900460ff1615610fd95760405162461bcd60e51b815260040161089c90613496565b600080516020613a5183398151915260005260096020527ea206b70d87cacff7a19f3d98e0957b781c25fb4ae954252c87bcf406261742548061102e5760405162461bcd60e51b815260040161089c90613373565b600080516020613a51833981519152600090815260096020527ea206b70d87cacff7a19f3d98e0957b781c25fb4ae954252c87bcf4062617428190556040516001600160a01b0384169083156108fc0290849084818181858888f193505050509050806110ad5760405162461bcd60e51b815260040161089c90613739565b60405182906001600160a01b0385169030907fc129cf8730ce23dfea8953a499f9b276ad5777855ff41fafe198ebc2a0d2324390600090a4505050565b60065490565b6110f86114e5565b6111145760405162461bcd60e51b815260040161089c90613900565b61111d816128f9565b50565b6111286114e5565b6111445760405162461bcd60e51b815260040161089c90613900565b600254600160a01b900460ff1661116d5760405162461bcd60e51b815260040161089c9061319b565b6002805460ff60a01b191690556003546040517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa916111b7916001600160a01b0390911690613044565b60405180910390a1565b6040805180820190915260018152603160f81b602082015290565b6111e4611e73565b6112005760405162461bcd60e51b815260040161089c906136dc565b600254600160a01b900460ff161561122a5760405162461bcd60e51b815260040161089c90613496565b600080516020613a5183398151915260009081527ea206b70d87cacff7a19f3d98e0957b781c25fb4ae954252c87bcf406261742547f3e65e660a0d3d61f62bb0309259c5a3ded6558e90d0e8aff997e553e7b030a75546007602052600080516020613a11833981519152546112ae92916112a89182904790612968565b90612968565b9050806112cd5760405162461bcd60e51b815260040161089c90613592565b60006112d7610841565b90506000816001600160a01b03166108fc849081150290604051600060405180830381858888f193505050509050806113225760405162461bcd60e51b815260040161089c90613739565b60405183906001600160a01b0384169030907f8a42c105b9b9c7739e44588d5e160a2e119ec86e88b6159e003b9118d9ae7b4d90600090a4505050565b826001600160a01b0381166113865760405162461bcd60e51b815260040161089c906132be565b6001600160a01b03811660009081526007602052604090206001015460ff166113c15760405162461bcd60e51b815260040161089c90613662565b6113c9611e73565b6113e55760405162461bcd60e51b815260040161089c906136dc565b8282116114045760405162461bcd60e51b815260040161089c906137a0565b506001600160a01b039092166000908152600760205260409020600281019190915560030155565b6002546001600160a01b0390811691161490565b60045481565b846001600160a01b031663d505accf61145d610841565b308660208601356114746080880160608901612fdb565b87608001358860a001356040518863ffffffff1660e01b81526004016114a097969594939291906130a1565b600060405180830381600087803b1580156114ba57600080fd5b505af11580156114ce573d6000803e3d6000fd5b505050506114de858585856109eb565b5050505050565b6003546001600160a01b0316331490565b6114fe6114e5565b61151a5760405162461bcd60e51b815260040161089c90613900565b60405162461bcd60e51b815260040161089c9061381d565b6003546001600160a01b031690565b611549611e73565b6115655760405162461bcd60e51b815260040161089c906136dc565b60405162461bcd60e51b815260040161089c906133a0565b60086020526000908152604090205460ff1681565b806001600160a01b0381166115b95760405162461bcd60e51b815260040161089c906132be565b6001600160a01b03811660009081526007602052604090206001015460ff166115f45760405162461bcd60e51b815260040161089c90613662565b6115fc611e73565b6116185760405162461bcd60e51b815260040161089c906136dc565b506001600160a01b03166000908152600760205260409020600101805460ff19169055565b6002546001600160a01b031681565b6116546114e5565b6116705760405162461bcd60e51b815260040161089c90613900565b600254600160a01b900460ff161561169a5760405162461bcd60e51b815260040161089c90613496565b6002805460ff60a01b1916600160a01b1790556003546040517f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258916111b7916001600160a01b0390911690613044565b816001600160a01b0381166117115760405162461bcd60e51b815260040161089c906132be565b6001600160a01b03811660009081526007602052604090206001015460ff1661174c5760405162461bcd60e51b815260040161089c90613662565b816117695760405162461bcd60e51b815260040161089c90613636565b6000611773610841565b6001600160a01b03808616600090815260076020908152604080832093851683526005909301905220549091508311156117bf5760405162461bcd60e51b815260040161089c9061346a565b6001600160a01b03808516600090815260076020908152604080832093851683526005909301905220546117f39084612968565b6001600160a01b0380861660008181526007602081815260408084209588168452600586018252832095909555919052909152600401546118349084612968565b6001600160a01b03851660009081526007602052604090206004015561185b8482856128d5565b806001600160a01b031683856001600160a01b03167f70516e69d9b3069ff3184583d867f7a832772e850ba89b554ae06ff752474f9e60405160405180910390a450505050565b60008085858585805190602001206040516020016118c39493929190613143565b60408051601f19818403018152918152815160209283012060008181526008909352912054909760ff9091169650945050505050565b6002600054141561191c5760405162461bcd60e51b815260040161089c9061389e565b60026000556005546001600160a01b0316630768d65c61193a610841565b6040518263ffffffff1660e01b81526004016119569190613044565b60206040518083038186803b15801561196e57600080fd5b505afa158015611982573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a69190612f68565b6119c25760405162461bcd60e51b815260040161089c9061341d565b846001600160a01b0381166119e95760405162461bcd60e51b815260040161089c906132be565b6001600160a01b03811660009081526007602052604090206001015460ff16611a245760405162461bcd60e51b815260040161089c90613662565b600254600160a01b900460ff1615611a4e5760405162461bcd60e51b815260040161089c90613496565b60005a6001600160a01b0388166000908152600760205260409020600201549091508610801590611a9a57506001600160a01b0387166000908152600760205260409020600301548611155b611ab65760405162461bcd60e51b815260040161089c90613511565b6001600160a01b038516611adc5760405162461bcd60e51b815260040161089c90613564565b600080611aeb898989896118a2565b915091508015611b0d5760405162461bcd60e51b815260040161089c906138d5565b6000828152600860205260408120805460ff19166001179055600654611b429061271090611b3c908c906129aa565b906129e4565b6001600160a01b038b166000908152600a6020526040902054909150611b6890826128a9565b6001600160a01b038b166000908152600a6020526040812091909155611b8f5a8690612968565b6001600160a01b038c16600090815260076020526040902054909150611bb69082906128a9565b9050611bcd600454826128a990919063ffffffff16565b9050611bfb611bdc82896129aa565b6001600160a01b038d16600090815260096020526040902054906128a9565b6001600160a01b038c16600090815260096020526040812091909155611c35611c2e611c27848b6129aa565b85906128a9565b8c90612968565b90506001600160a01b038c16600080516020613a518339815191521415611cc25780471015611c765760405162461bcd60e51b815260040161089c906132f5565b6040516000906001600160a01b038c169083156108fc0290849084818181858888f19350505050905080611cbc5760405162461bcd60e51b815260040161089c90613739565b50611d69565b6040516370a0823160e01b815281906001600160a01b038e16906370a0823190611cf0903090600401613044565b60206040518083038186803b158015611d0857600080fd5b505afa158015611d1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d409190612fc3565b1015611d5e5760405162461bcd60e51b815260040161089c906132f5565b611d698c8b836128d5565b808b8d6001600160a01b03167fec1dcc5633614eade4a5730f51adc7444a5103a8477965a32f2e886f5b20f6948d8d604051611da69291906130e2565b60405180910390a45050600160005550505050505050505050565b6001546001600160a01b031690565b816001600160a01b038116611df75760405162461bcd60e51b815260040161089c906132be565b6001600160a01b03811660009081526007602052604090206001015460ff16611e325760405162461bcd60e51b815260040161089c90613662565b611e3a611e73565b611e565760405162461bcd60e51b815260040161089c906136dc565b506001600160a01b03909116600090815260076020526040902055565b6001546001600160a01b0316331490565b60065481565b6005546001600160a01b031690565b600254600160a01b900460ff1690565b600254600160a01b900460ff1615611ed35760405162461bcd60e51b815260040161089c90613496565b34611ef05760405162461bcd60e51b815260040161089c90613636565b6000611efa610841565b6001600160a01b0381166000908152600080516020613a318339815191526020526040902054909150611f2d90346128a9565b6001600160a01b0382166000908152600080516020613a3183398151915260209081526040822092909255600080516020613a51833981519152905260079052600080516020613a1183398151915254611f8790346128a9565b600080516020613a5183398151915260008190526007602052600080516020613a11833981519152919091556040513091906001600160a01b038416907f2db8fc28326a114fe00f000205e13b79bbdeaeae6568b34ccf9fe0991da2285e90611ff1903490613987565b60405180910390a450565b612004611e73565b6120205760405162461bcd60e51b815260040161089c906136dc565b600254600160a01b900460ff161561204a5760405162461bcd60e51b815260040161089c90613496565b806120675760405162461bcd60e51b815260040161089c906131c9565b600681905560405181907f11a80b766155f9b8f16a7da44d66269fd694cb1c247f4814244586f68dd5348790600090a250565b60076020526000908152604090208054600182015460028301546003840154600490940154929360ff9092169290919085565b6120d5611e73565b6120f15760405162461bcd60e51b815260040161089c906136dc565b600254600160a01b900460ff161561211b5760405162461bcd60e51b815260040161089c90613496565b6001600160a01b038116600081815260096020908152604080832054600a835281842054600790935281842060049081015492516370a0823160e01b815294956121ce9592946112a894909385939192916370a082319161217e91309101613044565b60206040518083038186803b15801561219657600080fd5b505afa1580156121aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a89190612fc3565b9050806121ed5760405162461bcd60e51b815260040161089c90613592565b60006121f7610841565b90506122048382846128d5565b81816001600160a01b0316846001600160a01b03167f8a42c105b9b9c7739e44588d5e160a2e119ec86e88b6159e003b9118d9ae7b4d60405160405180910390a4505050565b612252611e73565b61226e5760405162461bcd60e51b815260040161089c906136dc565b6001600160801b0316600455565b612284611e73565b6122a05760405162461bcd60e51b815260040161089c906136dc565b6001600160a01b0381166122c65760405162461bcd60e51b815260040161089c90613950565b600280546001600160a01b0319166001600160a01b0383169081179091556040517f871264f4293af7d2865ae7eae628b228f4991c57cb45b39c99f0b774ebe2901890600090a250565b60096020526000908152604090205481565b6001600160a01b03808216600090815260076020908152604080832093861683526005909301905220545b92915050565b61235b611e73565b6123775760405162461bcd60e51b815260040161089c906136dc565b6001600160a01b03831661239d5760405162461bcd60e51b815260040161089c906132be565b8181116123bc5760405162461bcd60e51b815260040161089c906137a0565b6001600160a01b0390921660009081526007602052604090206001818101805460ff19169091179055600281019190915560030155565b6123fb611e73565b6124175760405162461bcd60e51b815260040161089c906136dc565b6001600160a01b03811661243d5760405162461bcd60e51b815260040161089c906131f8565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b612467611e73565b6124835760405162461bcd60e51b815260040161089c906136dc565b61111d81612a26565b600260005414156124af5760405162461bcd60e51b815260040161089c9061389e565b6002600055806124d15760405162461bcd60e51b815260040161089c90613636565b60006124db610841565b6001600160a01b0381166000908152600080516020613a3183398151915260205260409020549091508211156125235760405162461bcd60e51b815260040161089c9061346a565b6001600160a01b0381166000908152600080516020613a3183398151915260205260409020546125539083612968565b6001600160a01b0382166000908152600080516020613a3183398151915260209081526040822092909255600080516020613a51833981519152905260079052600080516020613a11833981519152546125ad9083612968565b600080516020613a5183398151915260009081526007602052600080516020613a11833981519152919091556040516001600160a01b0383169084156108fc0290859084818181858888f1935050505090508061261c5760405162461bcd60e51b815260040161089c90613739565b6040516001600160a01b038316908490600080516020613a51833981519152907f70516e69d9b3069ff3184583d867f7a832772e850ba89b554ae06ff752474f9e90600090a45050600160005550565b612674611e73565b6126905760405162461bcd60e51b815260040161089c906136dc565b600254600160a01b900460ff16156126ba5760405162461bcd60e51b815260040161089c90613496565b600080516020613a51833981519152600052600a6020527f3e65e660a0d3d61f62bb0309259c5a3ded6558e90d0e8aff997e553e7b030a7554806127105760405162461bcd60e51b815260040161089c906137ee565b600080516020613a518339815191526000908152600a6020527f3e65e660a0d3d61f62bb0309259c5a3ded6558e90d0e8aff997e553e7b030a758190556040516001600160a01b0384169083156108fc0290849084818181858888f193505050509050806127905760405162461bcd60e51b815260040161089c90613739565b60405182906001600160a01b0385169030907f524ce1e12cd0eb0a42db4a3933bb1dbbe91edfe70b281be691fe5a2003ef904e90600090a4505050565b846001600160a01b0316638fcbaf0c6127e4610841565b30843560208601356127fc6060880160408901612f4c565b61280c6080890160608a01612fdb565b88608001358960a001356040518963ffffffff1660e01b81526004016114a0989796959493929190613058565b600a6020526000908152604090205481565b6128a3846323b872dd60e01b85858560405160240161286c9392919061311f565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612a95565b50505050565b6000828201838110156128ce5760405162461bcd60e51b815260040161089c90613287565b9392505050565b6128f48363a9059cbb60e01b848460405160240161286c929190613106565b505050565b6001600160a01b03811661290c57600080fd5b6003546040516001600160a01b038084169216907f95bb211a5a393c4d30c3edc9a745825fba4e6ad3e3bb949e6bf8ccdfe431a81190600090a3600380546001600160a01b0319166001600160a01b0392909216919091179055565b60006128ce83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612b24565b6000826129b95750600061234d565b828202828482816129c657fe5b04146128ce5760405162461bcd60e51b815260040161089c906135be565b60006128ce83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612b50565b6001600160a01b038116612a3957600080fd5b6001546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000612aea826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612b879092919063ffffffff16565b8051909150156128f45780806020019051810190612b089190612f68565b6128f45760405162461bcd60e51b815260040161089c90613854565b60008184841115612b485760405162461bcd60e51b815260040161089c9190613188565b505050900390565b60008183612b715760405162461bcd60e51b815260040161089c9190613188565b506000838581612b7d57fe5b0495945050505050565b6060612b968484600085612b9e565b949350505050565b606082471015612bc05760405162461bcd60e51b815260040161089c906133d7565b612bc985612c5e565b612be55760405162461bcd60e51b815260040161089c90613769565b600080866001600160a01b03168587604051612c019190613028565b60006040518083038185875af1925050503d8060008114612c3e576040519150601f19603f3d011682016040523d82523d6000602084013e612c43565b606091505b5091509150612c53828286612c64565b979650505050505050565b3b151590565b60608315612c735750816128ce565b825115612c835782518084602001fd5b8160405162461bcd60e51b815260040161089c9190613188565b600082601f830112612cad578081fd5b813567ffffffffffffffff80821115612cc257fe5b604051601f8301601f191681016020018281118282101715612ce057fe5b604052828152848301602001861015612cf7578384fd5b82602086016020830137918201602001929092529392505050565b600060208284031215612d23578081fd5b81356128ce816139ed565b60008060408385031215612d40578081fd5b8235612d4b816139ed565b91506020830135612d5b816139ed565b809150509250929050565b60008060008060808587031215612d7b578182fd5b8435612d86816139ed565b93506020850135612d96816139ed565b93969395505050506040820135916060013590565b6000806000806000858703610140811215612dc4578182fd5b8635612dcf816139ed565b95506020870135612ddf816139ed565b9450604087013593506060870135925060c0607f1982011215612e00578182fd5b506080860190509295509295909350565b60008060408385031215612e23578182fd5b8235612e2e816139ed565b946020939093013593505050565b60008060008060808587031215612e51578384fd5b8435612e5c816139ed565b9350602085013592506040850135612e73816139ed565b9150606085013567ffffffffffffffff811115612e8e578182fd5b612e9a87828801612c9d565b91505092959194509250565b600080600080600060a08688031215612ebd578081fd5b8535612ec8816139ed565b9450602086013593506040860135612edf816139ed565b9250606086013567ffffffffffffffff811115612efa578182fd5b612f0688828901612c9d565b95989497509295608001359392505050565b600080600060608486031215612f2c578283fd5b8335612f37816139ed565b95602085013595506040909401359392505050565b600060208284031215612f5d578081fd5b81356128ce81613a02565b600060208284031215612f79578081fd5b81516128ce81613a02565b600060208284031215612f95578081fd5b5035919050565b600060208284031215612fad578081fd5b81356001600160801b03811681146128ce578182fd5b600060208284031215612fd4578081fd5b5051919050565b600060208284031215612fec578081fd5b813560ff811681146128ce578182fd5b600081518084526130148160208601602086016139c1565b601f01601f19169290920160200192915050565b6000825161303a8184602087016139c1565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039889168152969097166020870152604086019490945260608501929092521515608084015260ff1660a083015260c082015260e08101919091526101000190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b6001600160a01b0383168152604060208201819052600090612b9690830184612ffc565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b039485168152602081019390935292166040820152606081019190915260800190565b901515815260200190565b9182521515602082015260400190565b6000602082526128ce6020830184612ffc565b60208082526014908201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604082015260600190565b602080825260159082015274041646d696e204665652063616e6e6f74206265203605c1b604082015260600190565b60208082526024908201527f4578656375746f72204d616e6167657220416464726573732063616e6e6f74206040820152630626520360e41b606082015260800190565b6020808252602b908201527f5573652077697468647261774e6174697665476173466565282920666f72206e60408201526a30ba34bb32903a37b5b2b760a91b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526019908201527f546f6b656e20616464726573732063616e6e6f74206265203000000000000000604082015260600190565b6020808252601290820152714e6f7420456e6f7567682042616c616e636560701b604082015260600190565b60208082526032908201527f4465706f73697420616d6f756e742073686f756c642062652077697468696e20604082015271616c6c6f77656420436170206c696d69747360701b606082015260800190565b602080825260139082015272047617320466565206561726e6564206973203606c1b604082015260600190565b6020808252601c908201527f63616e27742072656e6f756e63654f776e657273686970206865726500000000604082015260600190565b60208082526026908201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6040820152651c8818d85b1b60d21b606082015260800190565b6020808252602d908201527f596f7520617265206e6f7420616c6c6f77656420746f20706572666f726d207460408201526c3434b99037b832b930ba34b7b760991b606082015260800190565b6020808252601290820152714e6f7420656e6f7567682062616c616e636560701b604082015260600190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b60208082526031908201527f4465706f73697420616d6f756e742073686f756c642062652077697468696e20604082015270185b1b1bddd9590810d85c081b1a5b5a5d607a1b606082015260800190565b60208082526033908201527f576974686472617720616d6f756e742073686f756c642062652077697468696e60408201527220616c6c6f77656420436170206c696d69747360681b606082015260800190565b602080825260149082015273426164207265636569766572206164647265737360601b604082015260600190565b602080825260129082015271050726f666974206561726e656420697320360741b604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252601c908201527f526563656976657220616464726573732063616e6e6f74206265203000000000604082015260600190565b6020808252601290820152710416d6f756e742063616e6e6f7420626520360741b604082015260600190565b602080825260139082015272151bdad95b881b9bdd081cdd5c1c1bdc9d1959606a1b604082015260600190565b6020808252602d908201527f5573652077697468647261774e617469766541646d696e466565282920666f7260408201526c103730ba34bb32903a37b5b2b760991b606082015260800190565b60208082526038908201527f4f6e6c7920636f6e7472616374206f776e657220697320616c6c6f776564207460408201527f6f20706572666f726d2074686973206f7065726174696f6e0000000000000000606082015260800190565b60208082526016908201527513985d1a5d9948151c985b9cd9995c8811985a5b195960521b604082015260600190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252602e908201527f6d61784361704c696d69742063616e6e6f7420626520736d616c6c657220746860408201526d185b881b5a5b90d85c131a5b5a5d60921b606082015260800190565b602080825260159082015274041646d696e20466565206561726e6564206973203605c1b604082015260600190565b60208082526019908201527f63616e27742072656e6f756e6365506175736572206865726500000000000000604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b602080825260119082015270105b1c9958591e48141c9bd8d95cdcd959607a1b604082015260600190565b60208082526030908201527f4f6e6c792070617573657220697320616c6c6f77656420746f20706572666f7260408201526f36903a3434b99037b832b930ba34b7b760811b606082015260800190565b6020808252601d908201527f466f7277617264657220416464726573732063616e6e6f742062652030000000604082015260600190565b90815260200190565b948552921515602085015260408401919091526060830152608082015260a00190565b918252602082015260400190565b60005b838110156139dc5781810151838201526020016139c4565b838111156128a35750506000910152565b6001600160a01b038116811461111d57600080fd5b801515811461111d57600080fdfeb2084a3e4595ccf007fb44245853374aaf0de960074375e8e0fb334712e94d12b2084a3e4595ccf007fb44245853374aaf0de960074375e8e0fb334712e94d13000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeea26469706673582212201141730766b471ff25cb6b82a3ced58edd31585bb92d4ca555406b9a67577cc564736f6c63430007060033000000000000000000000000eed0c0aa1d73ed0f48559e6cc2c762d4ed5ca1ca000000000000000000000000f9bc6309fae18d29bf2ba0fa46afda9a8bb5b37c000000000000000000000000129443ca2a9dec2020808a2868b38dda457eacc700000000000000000000000084a0856b038eaad1cc7e297cf34a7e72685a8693000000000000000000000000000000000000000000000000000000000000000a

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

000000000000000000000000eed0c0aa1d73ed0f48559e6cc2c762d4ed5ca1ca000000000000000000000000f9bc6309fae18d29bf2ba0fa46afda9a8bb5b37c000000000000000000000000129443ca2a9dec2020808a2868b38dda457eacc700000000000000000000000084a0856b038eaad1cc7e297cf34a7e72685a8693000000000000000000000000000000000000000000000000000000000000000a

-----Decoded View---------------
Arg [0] : _executorManagerAddress (address): 0xeed0c0aa1d73ed0f48559e6cc2c762d4ed5ca1ca
Arg [1] : owner (address): 0xf9bc6309fae18d29bf2ba0fa46afda9a8bb5b37c
Arg [2] : pauser (address): 0x129443ca2a9dec2020808a2868b38dda457eacc7
Arg [3] : _trustedForwarder (address): 0x84a0856b038eaad1cc7e297cf34a7e72685a8693
Arg [4] : _adminFee (uint256): 10

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000eed0c0aa1d73ed0f48559e6cc2c762d4ed5ca1ca
Arg [1] : 000000000000000000000000f9bc6309fae18d29bf2ba0fa46afda9a8bb5b37c
Arg [2] : 000000000000000000000000129443ca2a9dec2020808a2868b38dda457eacc7
Arg [3] : 00000000000000000000000084a0856b038eaad1cc7e297cf34a7e72685a8693
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000a


Deployed ByteCode Sourcemap

33619:16574:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50146:36;50158:12;:10;:12::i;:::-;50172:9;50146:36;;;;;;;:::i;:::-;;;;;;;;33619:16574;;;;;43825:463;;;;;;:::i;:::-;;:::i;:::-;;42083:656;;;;;;;;;;-1:-1:-1;42083:656:0;;;;;:::i;:::-;;:::i;40560:620::-;;;;;;;;;;-1:-1:-1;40560:620:0;;;;;:::i;:::-;;:::i;47911:555::-;;;;;;;;;;-1:-1:-1;47911:555:0;;;;;:::i;:::-;;:::i;47328:575::-;;;;;;;;;;-1:-1:-1;47328:575:0;;;;;:::i;:::-;;:::i;49620:475::-;;;;;;;;;;-1:-1:-1;49620:475:0;;;;;:::i;:::-;;:::i;37024:88::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27246:102;;;;;;;;;;-1:-1:-1;27246:102:0;;;;;:::i;:::-;;:::i;28234:115::-;;;;;;;;;;;;;:::i;37352:111::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;48474:637::-;;;;;;;;;;;;;:::i;39075:374::-;;;;;;;;;;-1:-1:-1;39075:374:0;;;;;:::i;:::-;;:::i;7168:137::-;;;;;;;;;;-1:-1:-1;7168:137:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;33832:22::-;;;;;;;;;;;;;:::i;43344:473::-;;;;;;;;;;-1:-1:-1;43344:473:0;;;;;:::i;:::-;;:::i;26791:94::-;;;;;;;;;;;;;:::i;36863:153::-;;;;;;;;;;;;;:::i;26614:84::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;36697:158::-;;;;;;;;;;;;;:::i;34405:48::-;;;;;;;;;;-1:-1:-1;34405:48:0;;;;;:::i;:::-;;:::i;38902:165::-;;;;;;;;;;-1:-1:-1;38902:165:0;;;;;:::i;:::-;;:::i;6874:31::-;;;;;;;;;;;;;:::i;27980:113::-;;;;;;;;;;;;;:::i;41188:676::-;;;;;;;;;;-1:-1:-1;41188:676:0;;;;;:::i;:::-;;:::i;46202:457::-;;;;;;;;;;-1:-1:-1;46202:457:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;44296:1898::-;;;;;;;;;;-1:-1:-1;44296:1898:0;;;;;:::i;:::-;;:::i;29385:82::-;;;;;;;;;;;;;:::i;38219:198::-;;;;;;;;;;-1:-1:-1;38219:198:0;;;;;:::i;:::-;;:::i;29560:92::-;;;;;;;;;;;;;:::i;33913:23::-;;;;;;;;;;;;;:::i;37562:109::-;;;;;;;;;;;;;:::i;26985:80::-;;;;;;;;;;;;;:::i;39457:449::-;;;:::i;37120:224::-;;;;;;;;;;-1:-1:-1;37120:224:0;;;;;:::i;:::-;;:::i;34348:50::-;;;;;;;;;;-1:-1:-1;34348:50:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;46667:653::-;;;;;;;;;;-1:-1:-1;46667:653:0;;;;;:::i;:::-;;:::i;37471:83::-;;;;;;;;;;-1:-1:-1;37471:83:0;;;;;:::i;:::-;;:::i;37941:270::-;;;;;;;;;;-1:-1:-1;37941:270:0;;;;;:::i;:::-;;:::i;34460:62::-;;;;;;;;;;-1:-1:-1;34460:62:0;;;;;:::i;:::-;;:::i;41872:203::-;;;;;;;;;;-1:-1:-1;41872:203:0;;;;;:::i;:::-;;:::i;38425:469::-;;;;;;;;;;-1:-1:-1;38425:469:0;;;;;:::i;:::-;;:::i;37679:254::-;;;;;;;;;;-1:-1:-1;37679:254:0;;;;;:::i;:::-;;:::i;30265:109::-;;;;;;;;;;-1:-1:-1;30265:109:0;;;;;:::i;:::-;;:::i;39914:638::-;;;;;;;;;;-1:-1:-1;39914:638:0;;;;;:::i;:::-;;:::i;49119:493::-;;;;;;;;;;-1:-1:-1;49119:493:0;;;;;:::i;:::-;;:::i;42798:490::-;;;;;;;;;;-1:-1:-1;42798:490:0;;;;;:::i;:::-;;:::i;34529:64::-;;;;;;;;;;-1:-1:-1;34529:64:0;;;;;:::i;:::-;;:::i;7565:567::-;7627:19;7682:2;7663:8;:21;;;;:55;;;7688:30;7707:10;7688:18;:30::i;:::-;7659:466;;;-1:-1:-1;;;8029:14:0;8025:22;8012:36;8009:2;8005:44;7979:85;;;-1:-1:-1;8103:10:0;7659:466;7565:567;:::o;43825:463::-;26218:7;;-1:-1:-1;;;26218:7:0;;;;26217:8;26209:37;;;;-1:-1:-1;;;26209:37:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;;;;;;;43937:18:0::1;::::0;:10:::1;:18;::::0;:25;;43966:9:::1;-1:-1:-1::0;43937:38:0;::::1;::::0;:80:::1;;-1:-1:-1::0;;;;;;;;;;;;43979:18:0::1;::::0;:10:::1;:18;::::0;:25;;44008:9:::1;-1:-1:-1::0;43979:38:0::1;43937:80;43929:142;;;;-1:-1:-1::0;;;43929:142:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;44090:22:0;::::1;44082:63;;;;-1:-1:-1::0;;;44082:63:0::1;;;;;;;:::i;:::-;44164:9;44156:45;;;;-1:-1:-1::0;;;44156:45:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;44219:61:0;::::1;-1:-1:-1::0;;;;;;;;;;;44227:12:0::1;:10;:12::i;:::-;-1:-1:-1::0;;;;;44219:61:0::1;;44259:9;44270;44219:61;;;;;;;:::i;:::-;;;;;;;;43825:463:::0;;:::o;42083:656::-;42201:12;-1:-1:-1;;;;;35923:26:0;;35915:64;;;;-1:-1:-1;;;35915:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35998:24:0;;;;;;:10;:24;;;;;:39;;;;;35990:71;;;;-1:-1:-1;;;35990:71:0;;;;;;;:::i;:::-;26218:7:::1;::::0;-1:-1:-1;;;26218:7:0;::::1;;;26217:8;26209:37;;;;-1:-1:-1::0;;;26209:37:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;42248:24:0;::::2;;::::0;;;:10:::2;:24;::::0;;;;:31:::2;;::::0;:41;-1:-1:-1;42248:41:0;::::2;::::0;:86:::2;;-1:-1:-1::0;;;;;;42293:24:0;::::2;;::::0;;;:10:::2;:24;::::0;;;;:31:::2;;::::0;:41;-1:-1:-1;42293:41:0::2;42248:86;42240:149;;;;-1:-1:-1::0;;;42240:149:0::2;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;42408:22:0;::::2;42400:63;;;;-1:-1:-1::0;;;42400:63:0::2;;;;;;;:::i;:::-;42482:11:::0;42474:42:::2;;;;-1:-1:-1::0;;;42474:42:0::2;;;;;;;:::i;:::-;42529:22;42554:12;:10;:12::i;:::-;42529:37;;42579:78;42613:12;42628:6;42644:4;42650:6;42579:26;:78::i;:::-;42703:8;-1:-1:-1::0;;;;;42673:58:0::2;42689:12;-1:-1:-1::0;;;;;42673:58:0::2;42681:6;-1:-1:-1::0;;;;;42673:58:0::2;;42713:9;42724:6;42673:58;;;;;;;:::i;:::-;;;;;;;;26257:1;42083:656:::0;;;;;:::o;40560:620::-;40648:12;-1:-1:-1;;;;;35923:26:0;;35915:64;;;;-1:-1:-1;;;35915:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35998:24:0;;;;;;:10;:24;;;;;:39;;;;;35990:71;;;;-1:-1:-1;;;35990:71:0;;;;;;;:::i;:::-;26218:7:::1;::::0;-1:-1:-1;;;26218:7:0;::::1;;;26217:8;26209:37;;;;-1:-1:-1::0;;;26209:37:0::1;;;;;;;:::i;:::-;40695:11:::0;40687:42:::2;;;;-1:-1:-1::0;;;40687:42:0::2;;;;;;;:::i;:::-;40740:22;40765:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;40841:24:0;;::::2;;::::0;;;:10:::2;:24;::::0;;;;;;;:50;;::::2;::::0;;:42:::2;::::0;;::::2;:50:::0;;;;40740:37;;-1:-1:-1;40841:62:0::2;::::0;40896:6;40841:54:::2;:62::i;:::-;-1:-1:-1::0;;;;;40788:24:0;;::::2;;::::0;;;:10:::2;:24;::::0;;;;;;;:50;;::::2;::::0;;:42:::2;::::0;::::2;:50:::0;;;;:115;;;;40951:24;;;;;;:34:::2;;::::0;:46:::2;::::0;40990:6;40951:38:::2;:46::i;:::-;-1:-1:-1::0;;;;;40914:24:0;::::2;;::::0;;;:10:::2;:24;::::0;;;;:34:::2;;:83:::0;41018:79:::2;40925:12:::0;41067:6;41083:4:::2;41090:6:::0;41018:26:::2;:79::i;:::-;41158:4;-1:-1:-1::0;;;;;41113:59:0::2;41136:12;-1:-1:-1::0;;;;;41113:59:0::2;41128:6;-1:-1:-1::0;;;;;41113:59:0::2;;41165:6;41113:59;;;;;;:::i;:::-;;;;;;;;26257:1;40560:620:::0;;;:::o;47911:555::-;29204:9;:7;:9::i;:::-;29182:115;;;;-1:-1:-1;;;29182:115:0;;;;;;;:::i;:::-;26218:7:::1;::::0;-1:-1:-1;;;26218:7:0;::::1;;;26217:8;26209:37;;;;-1:-1:-1::0;;;26209:37:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;48032:22:0;::::2;-1:-1:-1::0;;;;;;;;;;;48032:22:0::2;;48024:78;;;;-1:-1:-1::0;;;48024:78:0::2;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;48141:38:0;::::2;48113:25;48141:38:::0;;;:24:::2;:38;::::0;;;;;48198:22;48190:54:::2;;;;-1:-1:-1::0;;;48190:54:0::2;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;48257:38:0;::::2;48298:1;48257:38:::0;;;:24:::2;:38;::::0;;;;:42;48312:73:::2;48282:12:::0;48357:8;48367:17;48312:22:::2;:73::i;:::-;48440:17;48430:8;-1:-1:-1::0;;;;;48401:57:0::2;48416:12;-1:-1:-1::0;;;;;48401:57:0::2;;;;;;;;;;;26257:1;47911:555:::0;;:::o;47328:575::-;29204:9;:7;:9::i;:::-;29182:115;;;;-1:-1:-1;;;29182:115:0;;;;;;;:::i;:::-;26218:7:::1;::::0;-1:-1:-1;;;26218:7:0;::::1;;;26217:8;26209:37;;;;-1:-1:-1::0;;;26209:37:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;47451:22:0;::::2;-1:-1:-1::0;;;;;;;;;;;47451:22:0::2;;47443:80;;;;-1:-1:-1::0;;;47443:80:0::2;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;47564:40:0;::::2;47534:27;47564:40:::0;;;:26:::2;:40;::::0;;;;;47623:24;47615:58:::2;;;;-1:-1:-1::0;;;47615:58:0::2;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;47686:40:0;::::2;47729:1;47686:40:::0;;;:26:::2;:40;::::0;;;;:44;47743:75:::2;47713:12:::0;47788:8;47798:19;47743:22:::2;:75::i;:::-;47875:19;47865:8;-1:-1:-1::0;;;;;47834:61:0::2;47851:12;-1:-1:-1::0;;;;;47834:61:0::2;;;;;;;;;;;26257:1;47328:575:::0;;:::o;49620:475::-;29204:9;:7;:9::i;:::-;29182:115;;;;-1:-1:-1;;;29182:115:0;;;;;;;:::i;:::-;26218:7:::1;::::0;-1:-1:-1;;;26218:7:0;::::1;;;26217:8;26209:37;;;;-1:-1:-1::0;;;26209:37:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;;;;;;49720:25:0::2;49748:32:::0;:24:::2;:32;::::0;;;49799:22;49791:54:::2;;;;-1:-1:-1::0;;;49791:54:0::2;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;;;;;;49891:1:0::2;49856:32:::0;;;:24:::2;:32;::::0;;:36;;;:32;49918;-1:-1:-1;;;;;49918:13:0;::::2;::::0;:32;::::2;;;::::0;49932:17;;49891:1;49918:32;49891:1;49918:32;49932:17;49918:13;:32;::::2;;;;;;49903:47;;49969:7;49961:42;;;;-1:-1:-1::0;;;49961:42:0::2;;;;;;;:::i;:::-;50029:58;::::0;50069:17;;-1:-1:-1;;;;;50029:58:0;::::2;::::0;50052:4:::2;::::0;50029:58:::2;::::0;;;::::2;26257:1;;49620:475:::0;:::o;37024:88::-;37096:8;;37024:88;:::o;27246:102::-;25872:10;:8;:10::i;:::-;25850:108;;;;-1:-1:-1;;;25850:108:0;;;;;;;:::i;:::-;27316:24:::1;27330:9;27316:13;:24::i;:::-;27246:102:::0;:::o;28234:115::-;25872:10;:8;:10::i;:::-;25850:108;;;;-1:-1:-1;;;25850:108:0;;;;;;;:::i;:::-;26494:7:::1;::::0;-1:-1:-1;;;26494:7:0;::::1;;;26486:40;;;;-1:-1:-1::0;;;26486:40:0::1;;;;;;;:::i;:::-;28293:7:::2;:15:::0;;-1:-1:-1;;;;28293:15:0::2;::::0;;28333:7:::2;::::0;28324:17:::2;::::0;::::2;::::0;::::2;::::0;-1:-1:-1;;;;;28333:7:0;;::::2;::::0;28324:17:::2;:::i;:::-;;;;;;;;28234:115::o:0;37352:111::-;37445:10;;;;;;;;;;;;-1:-1:-1;;;37445:10:0;;;;37352:111;:::o;48474:637::-;29204:9;:7;:9::i;:::-;29182:115;;;;-1:-1:-1;;;29182:115:0;;;;;;;:::i;:::-;26218:7:::1;::::0;-1:-1:-1;;;26218:7:0;::::1;;;26217:8;26209:37;;;;-1:-1:-1::0;;;26209:37:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;;;;;;48544:20:0::2;48771:32:::0;;;;;48697:34;;48629:10:::2;48771:32;48629:18:::0;-1:-1:-1;;;;;;;;;;;48629:28:0;48567:237:::2;::::0;48771:32;48567:165:::2;::::0;;;48568:21:::2;::::0;48567:61:::2;:91::i;:::-;:129:::0;::::2;:165::i;:237::-;48544:260:::0;-1:-1:-1;48833:17:0;48825:48:::2;;;;-1:-1:-1::0;;;48825:48:0::2;;;;;;;:::i;:::-;48886:22;48911:12;:10;:12::i;:::-;48886:37;;48934:12;48949:6;-1:-1:-1::0;;;;;48949:11:0::2;:25;48961:12;48949:25;;;;;;;;;;;;;;;;;;;;;;;48934:40;;48993:7;48985:42;;;;-1:-1:-1::0;;;48985:42:0::2;;;;;;;:::i;:::-;49053:50;::::0;49090:12;;-1:-1:-1;;;;;49053:50:0;::::2;::::0;49075:4:::2;::::0;49053:50:::2;::::0;;;::::2;26257:1;;;48474:637::o:0;39075:374::-;39186:12;-1:-1:-1;;;;;35923:26:0;;35915:64;;;;-1:-1:-1;;;35915:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35998:24:0;;;;;;:10;:24;;;;;:39;;;;;35990:71;;;;-1:-1:-1;;;35990:71:0;;;;;;;:::i;:::-;29204:9:::1;:7;:9::i;:::-;29182:115;;;;-1:-1:-1::0;;;29182:115:0::1;;;;;;;:::i;:::-;39243:11:::2;39229;:25;39221:84;;;;-1:-1:-1::0;;;39221:84:0::2;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;39332:24:0;;::::2;;::::0;;;:10:::2;:24;::::0;;;;:31:::2;::::0;::::2;:45:::0;;;;39396:31:::2;;:45:::0;39075:374::o;7168:137::-;7281:16;;-1:-1:-1;;;;;7281:16:0;;;7268:29;;;;7168:137::o;33832:22::-;;;;:::o;43344:473::-;43597:12;-1:-1:-1;;;;;43584:33:0;;43618:12;:10;:12::i;:::-;43640:4;43647:6;43655:20;;;;43677:15;;;;;;;;:::i;:::-;43694:13;:15;;;43711:13;:15;;;43584:143;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43742:55;43755:12;43769:8;43779:6;43787:9;43742:12;:55::i;:::-;43344:473;;;;;:::o;26791:94::-;26870:7;;-1:-1:-1;;;;;26870:7:0;26856:10;:21;;26791:94::o;36863:153::-;25872:10;:8;:10::i;:::-;25850:108;;;;-1:-1:-1;;;25850:108:0;;;;;;;:::i;:::-;36929:36:::1;;-1:-1:-1::0;;;36929:36:0::1;;;;;;;:::i;26614:84::-:0;26683:7;;-1:-1:-1;;;;;26683:7:0;26614:84;:::o;36697:158::-;29204:9;:7;:9::i;:::-;29182:115;;;;-1:-1:-1;;;29182:115:0;;;;;;;:::i;:::-;36765:39:::1;;-1:-1:-1::0;;;36765:39:0::1;;;;;;;:::i;34405:48::-:0;;;;;;;;;;;;;;;:::o;38902:165::-;38977:12;-1:-1:-1;;;;;35923:26:0;;35915:64;;;;-1:-1:-1;;;35915:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35998:24:0;;;;;;:10;:24;;;;;:39;;;;;35990:71;;;;-1:-1:-1;;;35990:71:0;;;;;;;:::i;:::-;29204:9:::1;:7;:9::i;:::-;29182:115;;;;-1:-1:-1::0;;;29182:115:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;39012:24:0::2;39054:5;39012:24:::0;;;:10:::2;:24;::::0;;;;:39:::2;;:47:::0;;-1:-1:-1;;39012:47:0::2;::::0;;38902:165::o;6874:31::-;;;-1:-1:-1;;;;;6874:31:0;;:::o;27980:113::-;25872:10;:8;:10::i;:::-;25850:108;;;;-1:-1:-1;;;25850:108:0;;;;;;;:::i;:::-;26218:7:::1;::::0;-1:-1:-1;;;26218:7:0;::::1;;;26217:8;26209:37;;;;-1:-1:-1::0;;;26209:37:0::1;;;;;;;:::i;:::-;28040:7:::2;:14:::0;;-1:-1:-1;;;;28040:14:0::2;-1:-1:-1::0;;;28040:14:0::2;::::0;;28077:7:::2;::::0;28070:15:::2;::::0;::::2;::::0;::::2;::::0;-1:-1:-1;;;;;28077:7:0;;::::2;::::0;28070:15:::2;:::i;41188:676::-:0;41279:12;-1:-1:-1;;;;;35923:26:0;;35915:64;;;;-1:-1:-1;;;35915:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35998:24:0;;;;;;:10;:24;;;;;:39;;;;;35990:71;;;;-1:-1:-1;;;35990:71:0;;;;;;;:::i;:::-;41312:11;41304:42:::1;;;;-1:-1:-1::0;;;41304:42:0::1;;;;;;;:::i;:::-;41357:22;41382:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;41413:24:0;;::::1;;::::0;;;:10:::1;:24;::::0;;;;;;;:50;;::::1;::::0;;:42:::1;::::0;;::::1;:50:::0;;;;41357:37;;-1:-1:-1;41413:60:0;-1:-1:-1;41413:60:0::1;41405:91;;;;-1:-1:-1::0;;;41405:91:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;41562:24:0;;::::1;;::::0;;;:10:::1;:24;::::0;;;;;;;:50;;::::1;::::0;;:42:::1;::::0;;::::1;:50:::0;;;;:62:::1;::::0;41617:6;41562:54:::1;:62::i;:::-;-1:-1:-1::0;;;;;41509:24:0;;::::1;;::::0;;;:10:::1;:24;::::0;;;;;;;:50;;::::1;::::0;;:42:::1;::::0;::::1;:50:::0;;;;:115;;;;41672:24;;;;;;:34:::1;;::::0;:46:::1;::::0;41711:6;41672:38:::1;:46::i;:::-;-1:-1:-1::0;;;;;41635:24:0;::::1;;::::0;;;:10:::1;:24;::::0;;;;:34:::1;;:83:::0;41731:60:::1;41646:12:::0;41776:6;41784;41731:22:::1;:60::i;:::-;41847:6;-1:-1:-1::0;;;;;41807:47:0::1;41839:6;41825:12;-1:-1:-1::0;;;;;41807:47:0::1;;;;;;;;;;;36074:1;41188:676:::0;;;:::o;46202:457::-;46337:27;46366:11;46464:12;46495:6;46520:8;46557:11;46547:22;;;;;;46435:149;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;46435:149:0;;;;;;;;;46411:184;;46435:149;46411:184;;;;46617:34;;;;:13;:34;;;;;;46411:184;;46617:34;;;;;-1:-1:-1;46202:457:0;-1:-1:-1;;;;;46202:457:0:o;44296:1898::-;23438:1;24034:7;;:19;;24026:63;;;;-1:-1:-1;;;24026:63:0;;;;;;;:::i;:::-;23438:1;24167:7;:18;35714:15:::1;::::0;-1:-1:-1;;;;;35714:15:0::1;:33;35748:12;:10;:12::i;:::-;35714:47;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35706:128;;;;-1:-1:-1::0;;;35706:128:0::1;;;;;;;:::i;:::-;44483:12:::0;-1:-1:-1;;;;;35923:26:0;::::2;35915:64;;;;-1:-1:-1::0;;;35915:64:0::2;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35998:24:0;::::2;;::::0;;;:10:::2;:24;::::0;;;;:39:::2;;::::0;::::2;;35990:71;;;;-1:-1:-1::0;;;35990:71:0::2;;;;;;;:::i;:::-;26218:7:::3;::::0;-1:-1:-1;;;26218:7:0;::::3;;;26217:8;26209:37;;;;-1:-1:-1::0;;;26209:37:0::3;;;;;;;:::i;:::-;44522:18:::4;44543:9;-1:-1:-1::0;;;;;44571:24:0;::::4;;::::0;;;:10:::4;:24;::::0;;;;:31:::4;;::::0;44522:30;;-1:-1:-1;44571:41:0;-1:-1:-1;44571:41:0;::::4;::::0;:86:::4;;-1:-1:-1::0;;;;;;44616:24:0;::::4;;::::0;;;:10:::4;:24;::::0;;;;:31:::4;;::::0;:41;-1:-1:-1;44616:41:0::4;44571:86;44563:150;;;;-1:-1:-1::0;;;44563:150:0::4;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;44732:22:0;::::4;44724:55;;;;-1:-1:-1::0;;;44724:55:0::4;;;;;;;:::i;:::-;44793:27;44822:11:::0;44837:60:::4;44853:12;44867:6;44875:8;44885:11;44837:15;:60::i;:::-;44792:105;;;;44919:6;44918:7;44910:37;;;;-1:-1:-1::0;;;44910:37:0::4;;;;;;;:::i;:::-;44958:34;::::0;;;:13:::4;:34;::::0;;;;:41;;-1:-1:-1;;44958:41:0::4;44995:4;44958:41;::::0;;45051:8:::4;::::0;45040:31:::4;::::0;45065:5:::4;::::0;45040:20:::4;::::0;:6;;:10:::4;:20::i;:::-;:24:::0;::::4;:31::i;:::-;-1:-1:-1::0;;;;;45127:40:0;::::4;;::::0;;;:26:::4;:40;::::0;;;;;45012:59;;-1:-1:-1;45127:63:0::4;::::0;45012:59;45127:44:::4;:63::i;:::-;-1:-1:-1::0;;;;;45084:40:0;::::4;;::::0;;;:26:::4;:40;::::0;;;;:106;;;;45228:25:::4;45243:9;45228:10:::0;;:14:::4;:25::i;:::-;-1:-1:-1::0;;;;;45297:24:0;::::4;;::::0;;;:10:::4;:24;::::0;;;;:41;45204:50;;-1:-1:-1;45280:59:0::4;::::0;45204:50;;45280:16:::4;:59::i;:::-;45265:74;;45365:25;45382:7;;45365:12;:16;;:25;;;;:::i;:::-;45350:40:::0;-1:-1:-1;45444:75:0::4;45487:31;45350:40:::0;45504:13;45487:16:::4;:31::i;:::-;-1:-1:-1::0;;;;;45444:38:0;::::4;;::::0;;;:24:::4;:38;::::0;;;;;;:42:::4;:75::i;:::-;-1:-1:-1::0;;;;;45403:38:0;::::4;;::::0;;;:24:::4;:38;::::0;;;;:116;;;;45557:66:::4;45568:54;45590:31;:12:::0;45607:13;45590:16:::4;:31::i;:::-;45568:17:::0;;:21:::4;:54::i;:::-;45557:6:::0;;:10:::4;:66::i;:::-;45530:93:::0;-1:-1:-1;;;;;;45640:22:0;::::4;-1:-1:-1::0;;;;;;;;;;;45640:22:0::4;45636:461;;;45712:16;45687:21;:41;;45679:72;;;;-1:-1:-1::0;;;45679:72:0::4;;;;;;;:::i;:::-;45781:31;::::0;45766:12:::4;::::0;-1:-1:-1;;;;;45781:13:0;::::4;::::0;:31;::::4;;;::::0;45795:16;;45766:12;45781:31;45766:12;45781:31;45795:16;45781:13;:31;::::4;;;;;;45766:46;;45835:7;45827:42;;;;-1:-1:-1::0;;;45827:42:0::4;;;;;;;:::i;:::-;45636:461;;;;45910:45;::::0;-1:-1:-1;;;45910:45:0;;45959:16;;-1:-1:-1;;;;;45910:30:0;::::4;::::0;::::4;::::0;:45:::4;::::0;45949:4:::4;::::0;45910:45:::4;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:65;;45902:96;;;;-1:-1:-1::0;;;45902:96:0::4;;;;;;;:::i;:::-;46013:72;46043:12;46058:8;46068:16;46013:22;:72::i;:::-;46146:16;46138:6;46124:12;-1:-1:-1::0;;;;;46114:72:0::4;;46164:8;46174:11;46114:72;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;23394:1:0;24346:7;:22;-1:-1:-1;;;;;;;;;;44296:1898:0:o;29385:82::-;29453:6;;-1:-1:-1;;;;;29453:6:0;29385:82;:::o;38219:198::-;38319:12;-1:-1:-1;;;;;35923:26:0;;35915:64;;;;-1:-1:-1;;;35915:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35998:24:0;;;;;;:10;:24;;;;;:39;;;;;35990:71;;;;-1:-1:-1;;;35990:71:0;;;;;;;:::i;:::-;29204:9:::1;:7;:9::i;:::-;29182:115;;;;-1:-1:-1::0;;;29182:115:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;38354:24:0;;::::2;;::::0;;;:10:::2;:24;::::0;;;;:55;38219:198::o;29560:92::-;29638:6;;-1:-1:-1;;;;;29638:6:0;29624:10;:20;;29560:92::o;33913:23::-;;;;:::o;37562:109::-;37647:15;;-1:-1:-1;;;;;37647:15:0;37562:109;:::o;26985:80::-;27050:7;;-1:-1:-1;;;27050:7:0;;;;;26985:80::o;39457:449::-;26218:7;;-1:-1:-1;;;26218:7:0;;;;26217:8;26209:37;;;;-1:-1:-1;;;26209:37:0;;;;;;;:::i;:::-;39537:9:::1;39529:45;;;;-1:-1:-1::0;;;39529:45:0::1;;;;;;;:::i;:::-;39585:22;39610:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;39680:44:0;::::1;:18;:44:::0;;;-1:-1:-1;;;;;;;;;;;39680:18:0::1;:44:::0;:18;:44;;;39585:37;;-1:-1:-1;39680:59:0::1;::::0;39729:9:::1;39680:48;:59::i;:::-;-1:-1:-1::0;;;;;39633:44:0;::::1;:18;:44:::0;;;-1:-1:-1;;;;;;;;;;;39633:18:0::1;:44:::0;;;:18;:44;;:106;;;;-1:-1:-1;;;;;;;;;;;39781:18:0;;39633:10:::1;39781:18:::0;;-1:-1:-1;;;;;;;;;;;39781:28:0;:43:::1;::::0;39814:9:::1;39781:32;:43::i;:::-;-1:-1:-1::0;;;;;;;;;;;39750:18:0::1;::::0;;;:10:::1;:18;::::0;-1:-1:-1;;;;;;;;;;;39750:74:0;;;;:18;39842:56;39881:4:::1;::::0;33783:42;-1:-1:-1;;;;;39842:56:0;::::1;::::0;::::1;::::0;::::1;::::0;39888:9:::1;::::0;39842:56:::1;:::i;:::-;;;;;;;;26257:1;39457:449::o:0;37120:224::-;29204:9;:7;:9::i;:::-;29182:115;;;;-1:-1:-1;;;29182:115:0;;;;;;;:::i;:::-;26218:7:::1;::::0;-1:-1:-1;;;26218:7:0;::::1;;;26217:8;26209:37;;;;-1:-1:-1::0;;;26209:37:0::1;;;;;;;:::i;:::-;37217:16:::0;37209:50:::2;;;;-1:-1:-1::0;;;37209:50:0::2;;;;;;;:::i;:::-;37270:8;:22:::0;;;37308:28:::2;::::0;37281:11;;37308:28:::2;::::0;;;::::2;37120:224:::0;:::o;34348:50::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;46667:653::-;29204:9;:7;:9::i;:::-;29182:115;;;;-1:-1:-1;;;29182:115:0;;;;;;;:::i;:::-;26218:7:::1;::::0;-1:-1:-1;;;26218:7:0;::::1;;;26217:8;26209:37;;;;-1:-1:-1::0;;;26209:37:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;47019:38:0;::::2;46756:20;47019:38:::0;;;:24:::2;:38;::::0;;;;;;;;46939:26:::2;:40:::0;;;;;;46865:10:::2;:24:::0;;;;;;:34:::2;::::0;;::::2;::::0;46780:45;;-1:-1:-1;;;46780:45:0;;46756:20;;46779:279:::2;::::0;47019:38;;46779:201:::2;::::0;46939:40;;46779:201;;46865:34;;47019:38;46780:30:::2;::::0;:45:::2;::::0;46819:4:::2;::::0;46780:45:::2;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;46779:279::-;46756:302:::0;-1:-1:-1;47077:17:0;47069:48:::2;;;;-1:-1:-1::0;;;47069:48:0::2;;;;;;;:::i;:::-;47128:22;47153:12;:10;:12::i;:::-;47128:37;;47178:66;47208:12;47223:6;47231:12;47178:22;:66::i;:::-;47299:12;47290:6;-1:-1:-1::0;;;;;47262:50:0::2;47276:12;-1:-1:-1::0;;;;;47262:50:0::2;;;;;;;;;;;26257:1;;46667:653:::0;:::o;37471:83::-;29204:9;:7;:9::i;:::-;29182:115;;;;-1:-1:-1;;;29182:115:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37533:13:0::1;:7;:13:::0;37471:83::o;37941:270::-;29204:9;:7;:9::i;:::-;29182:115;;;;-1:-1:-1;;;29182:115:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38036:30:0;::::1;38028:72;;;;-1:-1:-1::0;;;38028:72:0::1;;;;;;;:::i;:::-;38111:16;:35:::0;;-1:-1:-1;;;;;;38111:35:0::1;-1:-1:-1::0;;;;;38111:35:0;::::1;::::0;;::::1;::::0;;;38162:41:::1;::::0;::::1;::::0;-1:-1:-1;;38162:41:0::1;37941:270:::0;:::o;34460:62::-;;;;;;;;;;;;;:::o;41872:203::-;-1:-1:-1;;;;;41999:24:0;;;41971:7;41999:24;;;:10;:24;;;;;;;;:68;;;;;:42;;;;:68;;;;41872:203;;;;;:::o;38425:469::-;29204:9;:7;:9::i;:::-;29182:115;;;;-1:-1:-1;;;29182:115:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38556:26:0;::::1;38548:64;;;;-1:-1:-1::0;;;38548:64:0::1;;;;;;;:::i;:::-;38647:11;38633;:25;38625:84;;;;-1:-1:-1::0;;;38625:84:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;38728:24:0;;::::1;;::::0;;;:10:::1;:24;::::0;;;;38770:4:::1;38728:39:::0;;::::1;:46:::0;;-1:-1:-1;;38728:46:0::1;::::0;;::::1;::::0;;38785:31:::1;::::0;::::1;:45:::0;;;;38841:31:::1;;:45:::0;38425:469::o;37679:254::-;29204:9;:7;:9::i;:::-;29182:115;;;;-1:-1:-1;;;29182:115:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37778:37:0;::::1;37770:86;;;;-1:-1:-1::0;;;37770:86:0::1;;;;;;;:::i;:::-;37867:15;:58:::0;;-1:-1:-1;;;;;;37867:58:0::1;-1:-1:-1::0;;;;;37867:58:0;;;::::1;::::0;;;::::1;::::0;;37679:254::o;30265:109::-;29204:9;:7;:9::i;:::-;29182:115;;;;-1:-1:-1;;;29182:115:0;;;;;;;:::i;:::-;30338:28:::1;30357:8;30338:18;:28::i;39914:638::-:0;23438:1;24034:7;;:19;;24026:63;;;;-1:-1:-1;;;24026:63:0;;;;;;;:::i;:::-;23438:1;24167:7;:18;40002:11;39994:43:::1;;;;-1:-1:-1::0;;;39994:43:0::1;;;;;;;:::i;:::-;40048:22;40073:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;40104:44:0;::::1;:18;:44:::0;;;-1:-1:-1;;;;;;;;;;;40104:18:0::1;:44:::0;:18;:44;;;40048:37;;-1:-1:-1;40104:54:0;-1:-1:-1;40104:54:0::1;40096:85;;;;-1:-1:-1::0;;;40096:85:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;40239:44:0;::::1;:18;:44:::0;;;-1:-1:-1;;;;;;;;;;;40239:18:0::1;:44:::0;:18;:44;;;:56:::1;::::0;40288:6;40239:48:::1;:56::i;:::-;-1:-1:-1::0;;;;;40192:44:0;::::1;:18;:44:::0;;;-1:-1:-1;;;;;;;;;;;40192:18:0::1;:44:::0;;;:18;:44;;:103;;;;-1:-1:-1;;;;;;;;;;;40337:18:0;;40192:10:::1;40337:18:::0;;-1:-1:-1;;;;;;;;;;;40337:28:0;:40:::1;::::0;40370:6;40337:32:::1;:40::i;:::-;-1:-1:-1::0;;;;;;;;;;;40306:18:0::1;::::0;;;:10:::1;:18;::::0;-1:-1:-1;;;;;;;;;;;40306:71:0;;;;:18;40413:19;-1:-1:-1;;;;;40413:11:0;::::1;::::0;:19;::::1;;;::::0;40425:6;;40306:18;40413:19;40306:18;40413:19;40425:6;40413:11;:19;::::1;;;;;;40398:34;;40451:7;40443:42;;;;-1:-1:-1::0;;;40443:42:0::1;;;;;;;:::i;:::-;40503:41;::::0;-1:-1:-1;;;;;40503:41:0;::::1;::::0;40529:6;;-1:-1:-1;;;;;;;;;;;33783:42:0;40503:41:::1;::::0;;;::::1;-1:-1:-1::0;;23394:1:0;24346:7;:22;-1:-1:-1;39914:638:0:o;49119:493::-;29204:9;:7;:9::i;:::-;29182:115;;;;-1:-1:-1;;;29182:115:0;;;;;;;:::i;:::-;26218:7:::1;::::0;-1:-1:-1;;;26218:7:0;::::1;;;26217:8;26209:37;;;;-1:-1:-1::0;;;26209:37:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;;;;;;49221:27:0::2;49251:34:::0;:26:::2;:34;::::0;;;49304:24;49296:58:::2;;;;-1:-1:-1::0;;;49296:58:0::2;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;;;;;;49402:1:0::2;49365:34:::0;;;:26:::2;:34;::::0;;:38;;;:34;49429;-1:-1:-1;;;;;49429:13:0;::::2;::::0;:34;::::2;;;::::0;49443:19;;49402:1;49429:34;49402:1;49429:34;49443:19;49429:13;:34;::::2;;;;;;49414:49;;49482:7;49474:42;;;;-1:-1:-1::0;;;49474:42:0::2;;;;;;;:::i;:::-;49542:62;::::0;49584:19;;-1:-1:-1;;;;;49542:62:0;::::2;::::0;49567:4:::2;::::0;49542:62:::2;::::0;;;::::2;26257:1;;49119:493:::0;:::o;42798:490::-;43044:12;-1:-1:-1;;;;;43031:33:0;;43065:12;:10;:12::i;:::-;43087:4;43094:19;;43115:20;;;;43137:21;;;;;;;;:::i;:::-;43160:15;;;;;;;;:::i;:::-;43177:13;:15;;;43194:13;:15;;;43031:179;;;;;;;;;;;;;;;;;;;;;;:::i;34529:64::-;;;;;;;;;;;;;:::o;18824:205::-;18925:96;18945:5;18975:27;;;19004:4;19010:2;19014:5;18952:68;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;18952:68:0;;;;;;;;;;;;;;-1:-1:-1;;;;;18952:68:0;-1:-1:-1;;;;;;18952:68:0;;;;;;;;;;18925:19;:96::i;:::-;18824:205;;;;:::o;979:181::-;1037:7;1069:5;;;1093:6;;;;1085:46;;;;-1:-1:-1;;;1085:46:0;;;;;;;:::i;:::-;1151:1;979:181;-1:-1:-1;;;979:181:0:o;18639:177::-;18722:86;18742:5;18772:23;;;18797:2;18801:5;18749:58;;;;;;;;;:::i;18722:86::-;18639:177;;;:::o;27500:181::-;-1:-1:-1;;;;;27570:23:0;;27562:32;;;;;;27624:7;;27610:33;;-1:-1:-1;;;;;27610:33:0;;;;27624:7;;27610:33;;27624:7;;27610:33;27654:7;:19;;-1:-1:-1;;;;;;27654:19:0;-1:-1:-1;;;;;27654:19:0;;;;;;;;;;27500:181::o;1443:136::-;1501:7;1528:43;1532:1;1535;1528:43;;;;;;;;;;;;;;;;;:3;:43::i;2333:471::-;2391:7;2636:6;2632:47;;-1:-1:-1;2666:1:0;2659:8;;2632:47;2703:5;;;2707:1;2703;:5;:1;2727:5;;;;;:10;2719:56;;;;-1:-1:-1;;;2719:56:0;;;;;;;:::i;3280:132::-;3338:7;3365:39;3369:1;3372;3365:39;;;;;;;;;;;;;;;;;:3;:39::i;30524:187::-;-1:-1:-1;;;;;30598:22:0;;30590:31;;;;;;30658:6;;30637:38;;-1:-1:-1;;;;;30637:38:0;;;;30658:6;;30637:38;;30658:6;;30637:38;30686:6;:17;;-1:-1:-1;;;;;;30686:17:0;-1:-1:-1;;;;;30686:17:0;;;;;;;;;;30524:187::o;20944:761::-;21368:23;21394:69;21422:4;21394:69;;;;;;;;;;;;;;;;;21402:5;-1:-1:-1;;;;;21394:27:0;;;:69;;;;;:::i;:::-;21478:17;;21368:95;;-1:-1:-1;21478:21:0;21474:224;;21620:10;21609:30;;;;;;;;;;;;:::i;:::-;21601:85;;;;-1:-1:-1;;;21601:85:0;;;;;;;:::i;1882:192::-;1968:7;2004:12;1996:6;;;;1988:29;;;;-1:-1:-1;;;1988:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;2040:5:0;;;1882:192::o;3908:278::-;3994:7;4029:12;4022:5;4014:28;;;;-1:-1:-1;;;4014:28:0;;;;;;;;:::i;:::-;;4053:9;4069:1;4065;:5;;;;;;;3908:278;-1:-1:-1;;;;;3908:278:0:o;14638:195::-;14741:12;14773:52;14795:6;14803:4;14809:1;14812:12;14773:21;:52::i;:::-;14766:59;14638:195;-1:-1:-1;;;;14638:195:0:o;15690:530::-;15817:12;15875:5;15850:21;:30;;15842:81;;;;-1:-1:-1;;;15842:81:0;;;;;;;:::i;:::-;15942:18;15953:6;15942:10;:18::i;:::-;15934:60;;;;-1:-1:-1;;;15934:60:0;;;;;;;:::i;:::-;16068:12;16082:23;16109:6;-1:-1:-1;;;;;16109:11:0;16129:5;16137:4;16109:33;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16067:75;;;;16160:52;16178:7;16187:10;16199:12;16160:17;:52::i;:::-;16153:59;15690:530;-1:-1:-1;;;;;;;15690:530:0:o;11720:422::-;12087:20;12126:8;;;11720:422::o;17226:742::-;17341:12;17370:7;17366:595;;;-1:-1:-1;17401:10:0;17394:17;;17366:595;17515:17;;:21;17511:439;;17778:10;17772:17;17839:15;17826:10;17822:2;17818:19;17811:44;17726:148;17921:12;17914:20;;-1:-1:-1;;;17914:20:0;;;;;;;;:::i;14:694:1:-;;111:3;104:4;96:6;92:17;88:27;78:2;;133:5;126;119:20;78:2;173:6;160:20;199:18;236:2;232;229:10;226:2;;;242:9;226:2;282;276:9;351:2;332:13;;-1:-1:-1;;328:27:1;316:40;;358:4;312:51;378:18;;;398:22;;;375:46;372:2;;;424:9;372:2;451;444:22;475:18;;;512:15;;;529:4;508:26;505:35;-1:-1:-1;502:2:1;;;557:5;550;543:20;502:2;625;618:4;610:6;606:17;599:4;591:6;587:17;574:54;648:15;;;665:4;644:26;637:41;;;;652:6;68:640;-1:-1:-1;;;68:640:1:o;713:259::-;;825:2;813:9;804:7;800:23;796:32;793:2;;;846:6;838;831:22;793:2;890:9;877:23;909:33;936:5;909:33;:::i;1249:402::-;;;1378:2;1366:9;1357:7;1353:23;1349:32;1346:2;;;1399:6;1391;1384:22;1346:2;1443:9;1430:23;1462:33;1489:5;1462:33;:::i;:::-;1514:5;-1:-1:-1;1571:2:1;1556:18;;1543:32;1584:35;1543:32;1584:35;:::i;:::-;1638:7;1628:17;;;1336:315;;;;;:::o;1656:539::-;;;;;1819:3;1807:9;1798:7;1794:23;1790:33;1787:2;;;1841:6;1833;1826:22;1787:2;1885:9;1872:23;1904:33;1931:5;1904:33;:::i;:::-;1956:5;-1:-1:-1;2013:2:1;1998:18;;1985:32;2026:35;1985:32;2026:35;:::i;:::-;1777:418;;2080:7;;-1:-1:-1;;;;2134:2:1;2119:18;;2106:32;;2185:2;2170:18;2157:32;;1777:418::o;2200:714::-;;;;;;2404:9;2395:7;2391:23;2434:3;2430:2;2426:12;2423:2;;;2456:6;2448;2441:22;2423:2;2500:9;2487:23;2519:33;2546:5;2519:33;:::i;:::-;2571:5;-1:-1:-1;2628:2:1;2613:18;;2600:32;2641:35;2600:32;2641:35;:::i;:::-;2695:7;-1:-1:-1;2749:2:1;2734:18;;2721:32;;-1:-1:-1;2800:2:1;2785:18;;2772:32;;-1:-1:-1;2839:3:1;-1:-1:-1;;2820:17:1;;2816:27;2813:2;;;2861:6;2853;2846:22;2813:2;;2904:3;2893:9;2889:19;2879:29;;2371:543;;;;;;;;:::o;2919:327::-;;;3048:2;3036:9;3027:7;3023:23;3019:32;3016:2;;;3069:6;3061;3054:22;3016:2;3113:9;3100:23;3132:33;3159:5;3132:33;:::i;:::-;3184:5;3236:2;3221:18;;;;3208:32;;-1:-1:-1;;;3006:240:1:o;3251:699::-;;;;;3431:3;3419:9;3410:7;3406:23;3402:33;3399:2;;;3453:6;3445;3438:22;3399:2;3497:9;3484:23;3516:33;3543:5;3516:33;:::i;:::-;3568:5;-1:-1:-1;3620:2:1;3605:18;;3592:32;;-1:-1:-1;3676:2:1;3661:18;;3648:32;3689:35;3648:32;3689:35;:::i;:::-;3743:7;-1:-1:-1;3801:2:1;3786:18;;3773:32;3828:18;3817:30;;3814:2;;;3865:6;3857;3850:22;3814:2;3893:51;3936:7;3927:6;3916:9;3912:22;3893:51;:::i;:::-;3883:61;;;3389:561;;;;;;;:::o;3955:768::-;;;;;;4152:3;4140:9;4131:7;4127:23;4123:33;4120:2;;;4174:6;4166;4159:22;4120:2;4218:9;4205:23;4237:33;4264:5;4237:33;:::i;:::-;4289:5;-1:-1:-1;4341:2:1;4326:18;;4313:32;;-1:-1:-1;4397:2:1;4382:18;;4369:32;4410:35;4369:32;4410:35;:::i;:::-;4464:7;-1:-1:-1;4522:2:1;4507:18;;4494:32;4549:18;4538:30;;4535:2;;;4586:6;4578;4571:22;4535:2;4614:51;4657:7;4648:6;4637:9;4633:22;4614:51;:::i;:::-;4110:613;;;;-1:-1:-1;4110:613:1;;4712:3;4697:19;4684:33;;4110:613;-1:-1:-1;;;4110:613:1:o;4728:395::-;;;;4874:2;4862:9;4853:7;4849:23;4845:32;4842:2;;;4895:6;4887;4880:22;4842:2;4939:9;4926:23;4958:33;4985:5;4958:33;:::i;:::-;5010:5;5062:2;5047:18;;5034:32;;-1:-1:-1;5113:2:1;5098:18;;;5085:32;;4832:291;-1:-1:-1;;;4832:291:1:o;5128:253::-;;5237:2;5225:9;5216:7;5212:23;5208:32;5205:2;;;5258:6;5250;5243:22;5205:2;5302:9;5289:23;5321:30;5345:5;5321:30;:::i;5386:257::-;;5506:2;5494:9;5485:7;5481:23;5477:32;5474:2;;;5527:6;5519;5512:22;5474:2;5564:9;5558:16;5583:30;5607:5;5583:30;:::i;5648:190::-;;5760:2;5748:9;5739:7;5735:23;5731:32;5728:2;;;5781:6;5773;5766:22;5728:2;-1:-1:-1;5809:23:1;;5718:120;-1:-1:-1;5718:120:1:o;5843:321::-;;5955:2;5943:9;5934:7;5930:23;5926:32;5923:2;;;5976:6;5968;5961:22;5923:2;6020:9;6007:23;-1:-1:-1;;;;;6063:5:1;6059:46;6052:5;6049:57;6039:2;;6125:6;6117;6110:22;6364:194;;6487:2;6475:9;6466:7;6462:23;6458:32;6455:2;;;6508:6;6500;6493:22;6455:2;-1:-1:-1;6536:16:1;;6445:113;-1:-1:-1;6445:113:1:o;6563:289::-;;6673:2;6661:9;6652:7;6648:23;6644:32;6641:2;;;6694:6;6686;6679:22;6641:2;6738:9;6725:23;6788:4;6781:5;6777:16;6770:5;6767:27;6757:2;;6813:6;6805;6798:22;6857:259;;6938:5;6932:12;6965:6;6960:3;6953:19;6981:63;7037:6;7030:4;7025:3;7021:14;7014:4;7007:5;7003:16;6981:63;:::i;:::-;7098:2;7077:15;-1:-1:-1;;7073:29:1;7064:39;;;;7105:4;7060:50;;6908:208;-1:-1:-1;;6908:208:1:o;7121:274::-;;7288:6;7282:13;7304:53;7350:6;7345:3;7338:4;7330:6;7326:17;7304:53;:::i;:::-;7373:16;;;;;7258:137;-1:-1:-1;;7258:137:1:o;7400:203::-;-1:-1:-1;;;;;7564:32:1;;;;7546:51;;7534:2;7519:18;;7501:102::o;7824:768::-;-1:-1:-1;;;;;8229:15:1;;;8211:34;;8281:15;;;;8276:2;8261:18;;8254:43;8328:2;8313:18;;8306:34;;;;8371:2;8356:18;;8349:34;;;;8427:14;8420:22;8414:3;8399:19;;8392:51;8492:4;8480:17;8191:3;8459:19;;8452:46;8529:3;8514:19;;8507:35;8573:3;8558:19;;8551:35;;;;8160:3;8145:19;;8127:465::o;8597:686::-;-1:-1:-1;;;;;8980:15:1;;;8962:34;;9032:15;;;;9027:2;9012:18;;9005:43;9079:2;9064:18;;9057:34;;;;9122:2;9107:18;;9100:34;;;;9183:4;9171:17;9165:3;9150:19;;9143:46;8942:3;9205:19;;9198:35;9264:3;9249:19;;9242:35;;;;8911:3;8896:19;;8878:405::o;9288:324::-;-1:-1:-1;;;;;9471:32:1;;9453:51;;9540:2;9535;9520:18;;9513:30;;;9288:324;;9560:46;;9587:18;;9579:6;9560:46;:::i;9617:282::-;-1:-1:-1;;;;;9817:32:1;;;;9799:51;;9881:2;9866:18;;9859:34;9787:2;9772:18;;9754:145::o;9904:375::-;-1:-1:-1;;;;;10162:15:1;;;10144:34;;10214:15;;;;10209:2;10194:18;;10187:43;10261:2;10246:18;;10239:34;;;;10094:2;10079:18;;10061:218::o;10563:463::-;-1:-1:-1;;;;;10866:15:1;;;10848:34;;10913:2;10898:18;;10891:34;;;;10961:15;;10956:2;10941:18;;10934:43;11008:2;10993:18;;10986:34;;;;10797:3;10782:19;;10764:262::o;11031:187::-;11196:14;;11189:22;11171:41;;11159:2;11144:18;;11126:92::o;11223:258::-;11391:25;;;11459:14;11452:22;11447:2;11432:18;;11425:50;11379:2;11364:18;;11346:135::o;11486:221::-;;11635:2;11624:9;11617:21;11655:46;11697:2;11686:9;11682:18;11674:6;11655:46;:::i;11712:344::-;11914:2;11896:21;;;11953:2;11933:18;;;11926:30;-1:-1:-1;;;11987:2:1;11972:18;;11965:50;12047:2;12032:18;;11886:170::o;12061:345::-;12263:2;12245:21;;;12302:2;12282:18;;;12275:30;-1:-1:-1;;;12336:2:1;12321:18;;12314:51;12397:2;12382:18;;12235:171::o;12411:400::-;12613:2;12595:21;;;12652:2;12632:18;;;12625:30;12691:34;12686:2;12671:18;;12664:62;-1:-1:-1;;;12757:2:1;12742:18;;12735:34;12801:3;12786:19;;12585:226::o;12816:407::-;13018:2;13000:21;;;13057:2;13037:18;;;13030:30;13096:34;13091:2;13076:18;;13069:62;-1:-1:-1;;;13162:2:1;13147:18;;13140:41;13213:3;13198:19;;12990:233::o;13228:351::-;13430:2;13412:21;;;13469:2;13449:18;;;13442:30;13508:29;13503:2;13488:18;;13481:57;13570:2;13555:18;;13402:177::o;13584:349::-;13786:2;13768:21;;;13825:2;13805:18;;;13798:30;13864:27;13859:2;13844:18;;13837:55;13924:2;13909:18;;13758:175::o;13938:342::-;14140:2;14122:21;;;14179:2;14159:18;;;14152:30;-1:-1:-1;;;14213:2:1;14198:18;;14191:48;14271:2;14256:18;;14112:168::o;14285:414::-;14487:2;14469:21;;;14526:2;14506:18;;;14499:30;14565:34;14560:2;14545:18;;14538:62;-1:-1:-1;;;14631:2:1;14616:18;;14609:48;14689:3;14674:19;;14459:240::o;14704:343::-;14906:2;14888:21;;;14945:2;14925:18;;;14918:30;-1:-1:-1;;;14979:2:1;14964:18;;14957:49;15038:2;15023:18;;14878:169::o;15052:352::-;15254:2;15236:21;;;15293:2;15273:18;;;15266:30;15332;15327:2;15312:18;;15305:58;15395:2;15380:18;;15226:178::o;15409:402::-;15611:2;15593:21;;;15650:2;15630:18;;;15623:30;15689:34;15684:2;15669:18;;15662:62;-1:-1:-1;;;15755:2:1;15740:18;;15733:36;15801:3;15786:19;;15583:228::o;15816:409::-;16018:2;16000:21;;;16057:2;16037:18;;;16030:30;16096:34;16091:2;16076:18;;16069:62;-1:-1:-1;;;16162:2:1;16147:18;;16140:43;16215:3;16200:19;;15990:235::o;16230:342::-;16432:2;16414:21;;;16471:2;16451:18;;;16444:30;-1:-1:-1;;;16505:2:1;16490:18;;16483:48;16563:2;16548:18;;16404:168::o;16577:340::-;16779:2;16761:21;;;16818:2;16798:18;;;16791:30;-1:-1:-1;;;16852:2:1;16837:18;;16830:46;16908:2;16893:18;;16751:166::o;16922:413::-;17124:2;17106:21;;;17163:2;17143:18;;;17136:30;17202:34;17197:2;17182:18;;17175:62;-1:-1:-1;;;17268:2:1;17253:18;;17246:47;17325:3;17310:19;;17096:239::o;17340:415::-;17542:2;17524:21;;;17581:2;17561:18;;;17554:30;17620:34;17615:2;17600:18;;17593:62;-1:-1:-1;;;17686:2:1;17671:18;;17664:49;17745:3;17730:19;;17514:241::o;17760:344::-;17962:2;17944:21;;;18001:2;17981:18;;;17974:30;-1:-1:-1;;;18035:2:1;18020:18;;18013:50;18095:2;18080:18;;17934:170::o;18109:342::-;18311:2;18293:21;;;18350:2;18330:18;;;18323:30;-1:-1:-1;;;18384:2:1;18369:18;;18362:48;18442:2;18427:18;;18283:168::o;18456:397::-;18658:2;18640:21;;;18697:2;18677:18;;;18670:30;18736:34;18731:2;18716:18;;18709:62;-1:-1:-1;;;18802:2:1;18787:18;;18780:31;18843:3;18828:19;;18630:223::o;18858:352::-;19060:2;19042:21;;;19099:2;19079:18;;;19072:30;19138;19133:2;19118:18;;19111:58;19201:2;19186:18;;19032:178::o;19215:342::-;19417:2;19399:21;;;19456:2;19436:18;;;19429:30;-1:-1:-1;;;19490:2:1;19475:18;;19468:48;19548:2;19533:18;;19389:168::o;19562:343::-;19764:2;19746:21;;;19803:2;19783:18;;;19776:30;-1:-1:-1;;;19837:2:1;19822:18;;19815:49;19896:2;19881:18;;19736:169::o;19910:409::-;20112:2;20094:21;;;20151:2;20131:18;;;20124:30;20190:34;20185:2;20170:18;;20163:62;-1:-1:-1;;;20256:2:1;20241:18;;20234:43;20309:3;20294:19;;20084:235::o;20324:420::-;20526:2;20508:21;;;20565:2;20545:18;;;20538:30;20604:34;20599:2;20584:18;;20577:62;20675:26;20670:2;20655:18;;20648:54;20734:3;20719:19;;20498:246::o;20749:346::-;20951:2;20933:21;;;20990:2;20970:18;;;20963:30;-1:-1:-1;;;21024:2:1;21009:18;;21002:52;21086:2;21071:18;;20923:172::o;21100:353::-;21302:2;21284:21;;;21341:2;21321:18;;;21314:30;21380:31;21375:2;21360:18;;21353:59;21444:2;21429:18;;21274:179::o;21458:410::-;21660:2;21642:21;;;21699:2;21679:18;;;21672:30;21738:34;21733:2;21718:18;;21711:62;-1:-1:-1;;;21804:2:1;21789:18;;21782:44;21858:3;21843:19;;21632:236::o;21873:345::-;22075:2;22057:21;;;22114:2;22094:18;;;22087:30;-1:-1:-1;;;22148:2:1;22133:18;;22126:51;22209:2;22194:18;;22047:171::o;22223:349::-;22425:2;22407:21;;;22464:2;22444:18;;;22437:30;22503:27;22498:2;22483:18;;22476:55;22563:2;22548:18;;22397:175::o;22577:406::-;22779:2;22761:21;;;22818:2;22798:18;;;22791:30;22857:34;22852:2;22837:18;;22830:62;-1:-1:-1;;;22923:2:1;22908:18;;22901:40;22973:3;22958:19;;22751:232::o;22988:355::-;23190:2;23172:21;;;23229:2;23209:18;;;23202:30;23268:33;23263:2;23248:18;;23241:61;23334:2;23319:18;;23162:181::o;23348:341::-;23550:2;23532:21;;;23589:2;23569:18;;;23562:30;-1:-1:-1;;;23623:2:1;23608:18;;23601:47;23680:2;23665:18;;23522:167::o;23694:412::-;23896:2;23878:21;;;23935:2;23915:18;;;23908:30;23974:34;23969:2;23954:18;;23947:62;-1:-1:-1;;;24040:2:1;24025:18;;24018:46;24096:3;24081:19;;23868:238::o;24111:353::-;24313:2;24295:21;;;24352:2;24332:18;;;24325:30;24391:31;24386:2;24371:18;;24364:59;24455:2;24440:18;;24285:179::o;24469:177::-;24615:25;;;24603:2;24588:18;;24570:76::o;24651:473::-;24904:25;;;24972:14;;24965:22;24960:2;24945:18;;24938:50;25019:2;25004:18;;24997:34;;;;25062:2;25047:18;;25040:34;25105:3;25090:19;;25083:35;24891:3;24876:19;;24858:266::o;25129:248::-;25303:25;;;25359:2;25344:18;;25337:34;25291:2;25276:18;;25258:119::o;25382:258::-;25454:1;25464:113;25478:6;25475:1;25472:13;25464:113;;;25554:11;;;25548:18;25535:11;;;25528:39;25500:2;25493:10;25464:113;;;25595:6;25592:1;25589:13;25586:2;;;-1:-1:-1;;25630:1:1;25612:16;;25605:27;25435:205::o;25645:133::-;-1:-1:-1;;;;;25722:31:1;;25712:42;;25702:2;;25768:1;25765;25758:12;25783:120;25871:5;25864:13;25857:21;25850:5;25847:32;25837:2;;25893:1;25890;25883:12

Swarm Source

ipfs://1141730766b471ff25cb6b82a3ced58edd31585bb92d4ca555406b9a67577cc5
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.