Contract 0x5575552988A3A80504bBaeB1311674fCFd40aD4B 4

 

Contract Overview

Sperax: SPA Token
Balance:
0 ETH

ETH Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x019841c42061de0bc404bf375b68263f218cdfd3ec7678989d6242cbc0f26a42Transfer271041542022-09-28 2:55:4116 mins ago0x03e6fa590cadcf15a38e86158e9b3d06ff3399ba IN  Sperax: SPA Token0 ETH0.00002113
0x6c8eedb227fc5f6e2cdbd8581e6175ee60aa0c4f5f1bde63941a219bd243d148Transfer271033482022-09-28 2:51:4120 mins ago0x03e6fa590cadcf15a38e86158e9b3d06ff3399ba IN  Sperax: SPA Token0 ETH0.00002113
0x6a04a9fd45495a75261f345812580b0ac95a7965b7a7c1ea8804bd8c7709edefApprove271022412022-09-28 2:46:1625 mins ago0x884a947e80d7c53aa5af12f279e08d3ce8cb1512 IN  Sperax: SPA Token0 ETH0.00001763
0x1279832ba6088ec0aa4452b7e2f9357107939cc804483894e8b15b02cb714068Transfer271011722022-09-28 2:40:4231 mins ago0x628a6b507a880177b2b0b7b5d676221b31fb45fb IN  Sperax: SPA Token0 ETH0.0000157
0xac221d36a0597944e843c0f1b1fef630f2957034432fb020b20bc324cd17efddTransfer270999172022-09-28 2:35:0136 mins ago0x3631a6b1318a73dd2dbf890713a8aaa2c98c9a50 IN  Sperax: SPA Token0 ETH0.00001639
0x9dadb4c5fe3c40c68e8623415f3e8fda7974ee8a2c73ab2260106d34fd9b55d9Transfer270980132022-09-28 2:25:4146 mins ago0x03e6fa590cadcf15a38e86158e9b3d06ff3399ba IN  Sperax: SPA Token0 ETH0.00001564
0x264015c3d43049825bc50d68b91271e96523db85c5d19742a29120ce51c288e5Approve270979552022-09-28 2:25:2446 mins ago0xbdd44d24dc69c809943014463ac7ffdf1d895bad IN  Sperax: SPA Token0 ETH0.00001482
0x4e4152c6e852265ab518734b68f2f8ca5adc1733b9ba13f3fb4a4a548f2b4638Transfer270978672022-09-28 2:25:0046 mins ago0x9b64203878f24eb0cdf55c8c6fa7d08ba0cf77e5 IN  Sperax: SPA Token0 ETH0.00031281
0x2f2b8d03fa07da301f267fade2e4bf73173d9a7fad59f7b2f65c01609a5a8dd2Transfer270967262022-09-28 2:20:0651 mins ago0x5989fe3ca2dafbe2ba7a95163442546df0db788b IN  Sperax: SPA Token0 ETH0.0000152
0x76540224a2f881e8645d449d0ba021f14c52a78da6f3e42e7f55b75d544edae5Transfer270960382022-09-28 2:17:4154 mins ago0x03e6fa590cadcf15a38e86158e9b3d06ff3399ba IN  Sperax: SPA Token0 ETH0.00001641
0xeaaaae36056112f2d772a7d903cebe8ba6a80fab20f9615e38c9041e109b78d4Approve270960372022-09-28 2:17:4154 mins ago0xddf347795bcd626c46397ef65132d741b68461ab IN  Sperax: SPA Token0 ETH0.0001498
0x74e2c5592dbae6f271d419d2d328f07c2a9ccb768c52cd10c4b27beb75ad51d1Transfer270922642022-09-28 1:58:411 hr 13 mins ago0x03e6fa590cadcf15a38e86158e9b3d06ff3399ba IN  Sperax: SPA Token0 ETH0.00001804
0x22b269433beb2d58c2bdcf045ece6acbba59c8b49e1e951c98b7dcd816a9b8cfTransfer270916572022-09-28 1:54:411 hr 17 mins ago0x03e6fa590cadcf15a38e86158e9b3d06ff3399ba IN  Sperax: SPA Token0 ETH0.00001633
0xa12a259804b95782e5b9f7854a5799389bbc19cb6421d6d04bb3876c5cf819a9Transfer270916552022-09-28 1:54:411 hr 17 mins ago0x03e6fa590cadcf15a38e86158e9b3d06ff3399ba IN  Sperax: SPA Token0 ETH0.00001804
0x18a3e2dc389f3b1c25f967c9b024b8c4434a13bb480a434a5216be687d3d5319Transfer270910542022-09-28 1:50:411 hr 21 mins ago0x03e6fa590cadcf15a38e86158e9b3d06ff3399ba IN  Sperax: SPA Token0 ETH0.00001791
0x63f8beac3227416a0dfead43b30995106bdcafb11568e13e0eeb0227be538704Transfer270878902022-09-28 1:33:411 hr 38 mins ago0x03e6fa590cadcf15a38e86158e9b3d06ff3399ba IN  Sperax: SPA Token0 ETH0.00001627
0xad32758c8d9f3f1251d34a9b8f1486e199435239209c8a2c6a4fec55644ff4e4Transfer270871522022-09-28 1:29:411 hr 42 mins ago0x03e6fa590cadcf15a38e86158e9b3d06ff3399ba IN  Sperax: SPA Token0 ETH0.00001676
0x86de68e1a50bd20a501b054cc2660b34a9a6049904565b3f5add1a1006678d02Approve270786462022-09-28 0:28:522 hrs 42 mins ago0xc4a5c059840a146b81c77bf79f1398f2b3d28ca7 IN  Sperax: SPA Token0 ETH0.00001831
0x1f5ad11b3df356a685c74497f0db9c81df78a64e167044eef9be21996aa8c948Approve270743082022-09-27 23:39:263 hrs 32 mins ago0xfad576ebc93a47031ba895064405f8a04b6e96fc IN  Sperax: SPA Token0 ETH0.0005358
0x84c7df03563df64c247c68c221cc5ff4a00b97c0f1f3abbe35219f29f8fd1ba8Approve270737122022-09-27 23:33:113 hrs 38 mins ago0xfad576ebc93a47031ba895064405f8a04b6e96fc IN  Sperax: SPA Token0 ETH0.00002035
0xfc33530a5341b6b851bbd180fa7e7501c96d77cc424c43a5120aa72b484f0b29Transfer270688802022-09-27 22:36:424 hrs 35 mins ago0x2b1410213554a5afd9fcd92f090f860aac1861c7 IN  Sperax: SPA Token0 ETH0.00002553
0xe5b7b90f92e6739a3ef52e0fce92f8bcc189efb5bcf51369ac3b4237e875cc34Transfer270688622022-09-27 22:36:234 hrs 35 mins ago0x2b1410213554a5afd9fcd92f090f860aac1861c7 IN  Sperax: SPA Token0 ETH0.00002553
0x3946916b3f807973d80214509a4573657e535fa615518a286f6244bb9ce7015cTransfer270670192022-09-27 22:13:414 hrs 58 mins ago0x03e6fa590cadcf15a38e86158e9b3d06ff3399ba IN  Sperax: SPA Token0 ETH0.00002435
0x878c4c7847326e42efe6cade1a40c53a5fc3626c3e0d8b44f480477dc36bea45Transfer270648482022-09-27 21:49:415 hrs 22 mins ago0x5171d9456393d33df205a53d017175203f94d968 IN  Sperax: SPA Token0 ETH0.00002575
0x618751e87d2e52f878b57a2e7f8227b7065abe55ed8a65048dd0a5fe64b2f3ffTransfer270613452022-09-27 21:09:306 hrs 2 mins ago0x0d0707963952f2fba59dd06f2b425ace40b492fe IN  Sperax: SPA Token0 ETH0.00003219
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x170fb483428b6ea6161bb5db6340c1e08e4b8552dc130e2047939556a4e8c005271068512022-09-28 3:10:481 min ago 0x7bb5e71fab18feba077b28355f20f5643ceece28 Sperax: SPA Token0 ETH
0xbb15bd33ddf73dd1dc06bdb26a1de953e9a2f7331ce7fea7baac63433a3f8675271068482022-09-28 3:10:471 min ago 0x112e05d5b51cd21006872f469cda427cd0e36e5d Sperax: SPA Token0 ETH
0x89694e9dd813aa96c0eb9fefc8790915aca15219393efb52a8c77d9d1778acda271065862022-09-28 3:09:152 mins ago 0x63850f9dccfc839534d5dc69333403c90c10c6fd Sperax: SPA Token0 ETH
0x89694e9dd813aa96c0eb9fefc8790915aca15219393efb52a8c77d9d1778acda271065862022-09-28 3:09:152 mins ago 0x5543550d65813c1fa76242227cbba0a28a297771 Sperax: SPA Token0 ETH
0x89694e9dd813aa96c0eb9fefc8790915aca15219393efb52a8c77d9d1778acda271065862022-09-28 3:09:152 mins ago 0x08e0b47588e1ac22bc0f8b4afaa017aaf273f85e Sperax: SPA Token0 ETH
0x89694e9dd813aa96c0eb9fefc8790915aca15219393efb52a8c77d9d1778acda271065862022-09-28 3:09:152 mins ago 0x5543550d65813c1fa76242227cbba0a28a297771 Sperax: SPA Token0 ETH
0xb761570480baf510f0ef194c329f9f2d8ce186f8c3144643215c2bad5ba4fba0271059432022-09-28 3:05:306 mins ago 0x112e05d5b51cd21006872f469cda427cd0e36e5d Sperax: SPA Token0 ETH
0x033de2c99befbbc320bd08f66ad93affb143c3f4ef4a02944c87a46ac46c165f271058012022-09-28 3:04:457 mins ago 0x112e05d5b51cd21006872f469cda427cd0e36e5d Sperax: SPA Token0 ETH
0xdebcf5bd5b6ca7de30691ce68271d55f9907fd7700962cac0a2f3d95591904ef271055992022-09-28 3:03:478 mins ago 0x1111111254fb6c44bac0bed2854e76f90643097d Sperax: SPA Token0 ETH
0xdebcf5bd5b6ca7de30691ce68271d55f9907fd7700962cac0a2f3d95591904ef271055992022-09-28 3:03:478 mins ago 0x1111111254fb6c44bac0bed2854e76f90643097d Sperax: SPA Token0 ETH
0xdebcf5bd5b6ca7de30691ce68271d55f9907fd7700962cac0a2f3d95591904ef271055992022-09-28 3:03:478 mins ago 0x93131efee501d5721737c32576238f619548edda Sperax: SPA Token0 ETH
0xdebcf5bd5b6ca7de30691ce68271d55f9907fd7700962cac0a2f3d95591904ef271055992022-09-28 3:03:478 mins ago 0x93131efee501d5721737c32576238f619548edda Sperax: SPA Token0 ETH
0xdebcf5bd5b6ca7de30691ce68271d55f9907fd7700962cac0a2f3d95591904ef271055992022-09-28 3:03:478 mins ago 0x93131efee501d5721737c32576238f619548edda Sperax: SPA Token0 ETH
0xdebcf5bd5b6ca7de30691ce68271d55f9907fd7700962cac0a2f3d95591904ef271055992022-09-28 3:03:478 mins ago 0x7f069df72b7a39bce9806e3afaf579e54d8cf2b9 Sperax: SPA Token0 ETH
0x3a377447c97f8ac61a0b19dc22fd486513b8ec10985dd48d4ac61370814ba062271042492022-09-28 2:56:0915 mins ago 0x112e05d5b51cd21006872f469cda427cd0e36e5d Sperax: SPA Token0 ETH
0x7bf1420bb128a7aa4b7f863cbdf5486ab5d3620b4600bdcaa694a85b818daf41271042442022-09-28 2:56:0815 mins ago 0x7bb5e71fab18feba077b28355f20f5643ceece28 Sperax: SPA Token0 ETH
0x7bf1420bb128a7aa4b7f863cbdf5486ab5d3620b4600bdcaa694a85b818daf41271042442022-09-28 2:56:0815 mins ago Uniswap V3: Router 2 Sperax: SPA Token0 ETH
0x7bf1420bb128a7aa4b7f863cbdf5486ab5d3620b4600bdcaa694a85b818daf41271042442022-09-28 2:56:0815 mins ago 0x7bb5e71fab18feba077b28355f20f5643ceece28 Sperax: SPA Token0 ETH
0x79ab1f3fba046db99bc4871b987cf59d50a1f66dadf78c78146668b6d615f1ae271034852022-09-28 2:52:2419 mins ago 0x7bb5e71fab18feba077b28355f20f5643ceece28 Sperax: SPA Token0 ETH
0x79ab1f3fba046db99bc4871b987cf59d50a1f66dadf78c78146668b6d615f1ae271034852022-09-28 2:52:2419 mins ago Uniswap V3: Router 2 Sperax: SPA Token0 ETH
0x79ab1f3fba046db99bc4871b987cf59d50a1f66dadf78c78146668b6d615f1ae271034852022-09-28 2:52:2419 mins ago 0x7bb5e71fab18feba077b28355f20f5643ceece28 Sperax: SPA Token0 ETH
0x79ab1f3fba046db99bc4871b987cf59d50a1f66dadf78c78146668b6d615f1ae271034852022-09-28 2:52:2419 mins ago 0x08e0b47588e1ac22bc0f8b4afaa017aaf273f85e Sperax: SPA Token0 ETH
0x79ab1f3fba046db99bc4871b987cf59d50a1f66dadf78c78146668b6d615f1ae271034852022-09-28 2:52:2419 mins ago Uniswap V3: Router 2 Sperax: SPA Token0 ETH
0x79ab1f3fba046db99bc4871b987cf59d50a1f66dadf78c78146668b6d615f1ae271034852022-09-28 2:52:2419 mins ago 0x08e0b47588e1ac22bc0f8b4afaa017aaf273f85e Sperax: SPA Token0 ETH
0x96f7ed63091a970d12ff41eeb663466e36b86213b56832908c9cf1f7444785e1271027212022-09-28 2:48:3823 mins ago 0x1111111254fb6c44bac0bed2854e76f90643097d Sperax: SPA Token0 ETH
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SperaxTokenL2

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Arbiscan on 2021-12-19
*/

/** 
 *  SourceUnit: /Users/dan/Sperax/USDs/contracts/token/SperaxTokenL2.sol
*/
            
////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT

pragma solidity >=0.6.0 <0.8.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with GSN meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}




/** 
 *  SourceUnit: /Users/dan/Sperax/USDs/contracts/token/SperaxTokenL2.sol
*/
            
////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT

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, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        uint256 c = a + b;
        if (c < a) return (false, 0);
        return (true, c);
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b > a) return (false, 0);
        return (true, a - b);
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, 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 (true, 0);
        uint256 c = a * b;
        if (c / a != b) return (false, 0);
        return (true, c);
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a / b);
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a % b);
    }

    /**
     * @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) {
        require(b <= a, "SafeMath: subtraction overflow");
        return a - b;
    }

    /**
     * @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) {
        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, reverting 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) {
        require(b > 0, "SafeMath: division by zero");
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting 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) {
        require(b > 0, "SafeMath: modulo by zero");
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * 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);
        return a - b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryDiv}.
     *
     * 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);
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * 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;
    }
}




/** 
 *  SourceUnit: /Users/dan/Sperax/USDs/contracts/token/SperaxTokenL2.sol
*/
            
////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT

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);
}




/** 
 *  SourceUnit: /Users/dan/Sperax/USDs/contracts/token/SperaxTokenL2.sol
*/
            
////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT

pragma solidity >=0.6.0 <0.8.0;

////import "./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 is Context {
    /**
     * @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);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor () internal {
        _paused = false;
    }

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

    /**
     * @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");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}




/** 
 *  SourceUnit: /Users/dan/Sperax/USDs/contracts/token/SperaxTokenL2.sol
*/
            
////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT

pragma solidity >=0.6.0 <0.8.0;

////import "../../utils/Context.sol";
////import "./IERC20.sol";
////import "../../math/SafeMath.sol";

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin guidelines: functions revert instead
 * of returning `false` on failure. This behavior is nonetheless conventional
 * and does not conflict with the expectations of ERC20 applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20 {
    using SafeMath for uint256;

    mapping (address => uint256) private _balances;

    mapping (address => mapping (address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    uint8 private _decimals;

    /**
     * @dev Sets the values for {name} and {symbol}, initializes {decimals} with
     * a default value of 18.
     *
     * To select a different value for {decimals}, use {_setupDecimals}.
     *
     * All three of these values are immutable: they can only be set once during
     * construction.
     */
    constructor (string memory name_, string memory symbol_) public {
        _name = name_;
        _symbol = symbol_;
        _decimals = 18;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is
     * called.
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual returns (uint8) {
        return _decimals;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(address sender, address recipient, uint256 amount) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Sets {decimals} to a value other than the default one of 18.
     *
     * WARNING: This function should only be called from the constructor. Most
     * applications that interact with token contracts will not expect
     * {decimals} to ever change, and may work incorrectly if it does.
     */
    function _setupDecimals(uint8 decimals_) internal virtual {
        _decimals = decimals_;
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }
}




/** 
 *  SourceUnit: /Users/dan/Sperax/USDs/contracts/token/SperaxTokenL2.sol
*/
            
////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT

pragma solidity >=0.6.12;

////import "@openzeppelin/contracts/utils/Context.sol";

contract MintPausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event MintPaused(address account);

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

    bool private _mintPaused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() internal {
        _mintPaused = false;
    }

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

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

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

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _mintPause() internal whenMintNotPaused {
        _mintPaused = true;
        emit MintPaused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _mintUnpause() internal whenMintPaused {
        _mintPaused = false;
        emit MintUnpaused(_msgSender());
    }
}




/** 
 *  SourceUnit: /Users/dan/Sperax/USDs/contracts/token/SperaxTokenL2.sol
*/
            
////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: Apache-2.0

/*
 * Copyright 2020, Offchain Labs, Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/**
 * @title Minimum expected interface for L2 token that interacts with the L2 token bridge (this is the interface necessary
 * for a custom token that interacts with the bridge, see TestArbCustomToken.sol for an example implementation).
 */
pragma solidity ^0.6.11;

interface IArbToken {
    /**
     * @notice should increase token supply by amount, and should (probably) only be callable by the L1 bridge.
     */
    function bridgeMint(address account, uint256 amount) external;

    /**
     * @notice should decrease token supply by amount, and should (probably) only be callable by the L1 bridge.
     */
    function bridgeBurn(address account, uint256 amount) external;

    /**
     * @return address of layer 1 token
     */
    function l1Address() external view returns (address);
}




/** 
 *  SourceUnit: /Users/dan/Sperax/USDs/contracts/token/SperaxTokenL2.sol
*/
            
////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT

pragma solidity >=0.6.0 <0.8.0;

////import "./ERC20.sol";
////import "../../utils/Pausable.sol";

/**
 * @dev ERC20 token with pausable token transfers, minting and burning.
 *
 * Useful for scenarios such as preventing trades until the end of an evaluation
 * period, or having an emergency switch for freezing all token transfers in the
 * event of a large bug.
 */
abstract contract ERC20Pausable is ERC20, Pausable {
    /**
     * @dev See {ERC20-_beforeTokenTransfer}.
     *
     * Requirements:
     *
     * - the contract must not be paused.
     */
    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual override {
        super._beforeTokenTransfer(from, to, amount);

        require(!paused(), "ERC20Pausable: token transfer while paused");
    }
}




/** 
 *  SourceUnit: /Users/dan/Sperax/USDs/contracts/token/SperaxTokenL2.sol
*/
            
////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT

pragma solidity >=0.6.0 <0.8.0;

////import "../utils/Context.sol";
/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}


/** 
 *  SourceUnit: /Users/dan/Sperax/USDs/contracts/token/SperaxTokenL2.sol
*/

////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT
pragma solidity >=0.6.12;

////import "@openzeppelin/contracts/access/Ownable.sol";
////import "@openzeppelin/contracts/token/ERC20/ERC20Pausable.sol";
////import "arb-bridge-peripherals/contracts/tokenbridge/arbitrum/IArbToken.sol";
////import "../utils/MintPausable.sol";

/**
 * @title SPA Token Contract on Arbitrum (L2)
 * @author Sperax Foundation
 */
contract SperaxTokenL2 is ERC20Pausable, MintPausable, Ownable, IArbToken {
    event BlockTransfer(address indexed account);
    event AllowTransfer(address indexed account);
    /**
    * @dev Emitted when an account is set mintabl
    */
    event Mintable(address account);
    /**
     * @dev Emitted when an account is set unmintable
     */
    event Unmintable(address account);
    event ArbitrumGatewayL1TokenChanged(address gateway, address l1token);


    modifier onlyMintableGroup() {
        require(mintableGroup[_msgSender()], "SPA: not in mintable group");
        _;
    }


    struct TimeLock {
        uint256 releaseTime;
        uint256 amount;
    }
    mapping(address => TimeLock) private _timelock;
    // @dev mintable group
    mapping(address => bool) public mintableGroup;
    // @dev record mintable accounts
    address [] public mintableAccounts;

    // Arbitrum Bridge
    address public l2Gateway;
    address public override l1Address;

    /**
     * @dev Initialize the contract give all tokens to the deployer
     * @param _l2Gateway address of Arbitrum custom L2 Gateway
     * @param _l2Gateway address of SperaxTokenL1 on L1
     */
    constructor(string memory _name, string memory _symbol, address _l2Gateway, address _l1Address)
        ERC20(_name, _symbol) public {
        l2Gateway = _l2Gateway;
        l1Address = _l1Address;
    }

    /**
     * @dev set or remove address to mintable group
     */
    function setMintable(address account, bool allow) public onlyOwner {
        mintableGroup[account] = allow;
        mintableAccounts.push(account);

        if (allow) {
            emit Mintable(account);
        }  else {
            emit Unmintable(account);
        }
    }

    /**
     * @dev remove all mintable account
     */
    function revokeAllMintable() public onlyOwner {
        uint n = mintableAccounts.length;
        for (uint i=0;i<n;i++) {
            delete mintableGroup[mintableAccounts[i]];
        }
        delete mintableAccounts;
    }


    /**
     * @dev mint SPA when USDs is burnt
     */
    function mintForUSDs(address account, uint256 amount) whenMintNotPaused onlyMintableGroup external {
        _mint(account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 amount) public {
        _burn(_msgSender(), amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, deducting from the caller's
     * allowance.
     *
     * See {ERC20-_burn} and {ERC20-allowance}.
     *
     * Requirements:
     *
     * - the caller must have allowance for ``accounts``'s tokens of at least
     * `amount`.
     */
    function burnFrom(address account, uint256 amount) public {
        uint256 decreasedAllowance = allowance(account, _msgSender()).sub(amount, "SperaxToken: burn amount exceeds allowance");

        _approve(account, _msgSender(), decreasedAllowance);
        _burn(account, amount);
    }


    /**
     * @dev View `account` locked information
     */
    function timelockOf(address account) public view returns(uint256 releaseTime, uint256 amount) {
        TimeLock memory timelock = _timelock[account];
        return (timelock.releaseTime, timelock.amount);
    }

    /**
     * @dev Transfer to the "recipient" some specified 'amount' that is locked until "releaseTime"
     * @notice only Owner call
     */
    function transferWithLock(address recipient, uint256 amount, uint256 releaseTime) public onlyOwner returns (bool) {
        require(recipient != address(0), "SperaxToken: transferWithLock to zero address");
        require(releaseTime > block.timestamp, "SperaxToken: release time before lock time");
        require(_timelock[recipient].releaseTime == 0, "SperaxToken: already locked");

        TimeLock memory timelock = TimeLock({
            releaseTime : releaseTime,
            amount      : amount
        });
        _timelock[recipient] = timelock;

        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev Release the specified `amount` of locked amount
     * @notice only Owner call
     */
    function release(address account, uint256 releaseAmount) public onlyOwner {
        require(account != address(0), "SperaxToken: release zero address");

        TimeLock storage timelock = _timelock[account];
        timelock.amount = timelock.amount.sub(releaseAmount);
        if(timelock.amount == 0) {
            timelock.releaseTime = 0;
        }
    }

    /**
     * @dev Triggers stopped state.
     * @notice only Owner call
     */
    function pause() public onlyOwner {
        _pause();
    }

    /**
     * @dev Returns to normal state.
     * @notice only Owner call
     */
    function unpause() public onlyOwner {
        _unpause();
    }

    /**
     * @dev Triggers stopped state of mint.
     * @notice only Owner call
     */
    function mintPause() public onlyOwner {
        _mintPause();
    }

    /**
     * @dev Returns to normal state of mint.
     * @notice only Owner call
     */
    function mintUnpause() public onlyOwner {
        _mintUnpause();
    }

    /**
     * @dev Batch transfer amount to recipient
     * @notice that excessive gas consumption causes transaction revert
     */
    function batchTransfer(address[] memory recipients, uint256[] memory amounts) public {
        require(recipients.length > 0, "SperaxToken: least one recipient address");
        require(recipients.length == amounts.length, "SperaxToken: number of recipient addresses does not match the number of tokens");

        for(uint256 i = 0; i < recipients.length; ++i) {
            _transfer(_msgSender(), recipients[i], amounts[i]);
        }
    }

    /**
     * @dev See {ERC20-_beforeTokenTransfer}.
     *
     * Requirements:
     *
     * - the contract must not be paused.
     * - accounts must not trigger the locked `amount` during the locked period.
     */
    function _beforeTokenTransfer(address from, address to, uint256 amount) internal override {
        require(!paused(), "SperaxToken: token transfer while paused");

        // Check whether the locked amount is triggered
        TimeLock storage timelock = _timelock[from];
        if(timelock.releaseTime != 0 && balanceOf(from).sub(amount) < timelock.amount) {
            require(block.timestamp >= timelock.releaseTime, "SperaxToken: current time is before from account release time");

            // Update the locked `amount` if the current time reaches the release time
            timelock.amount = 0;
            if(timelock.amount == 0) {
                timelock.releaseTime = 0;
            }
        }

        super._beforeTokenTransfer(from, to, amount);
    }

    // Arbitrum Bridge

    /**
     * @notice change the arbitrum bridge address and corresponding L1 token address
     * @dev normally this function should not be called
     * @param newL2Gateway the new bridge address
     * @param newL1Address the new router address
     */
    function changeArbToken(address newL2Gateway, address newL1Address) external onlyOwner {
        l2Gateway = newL2Gateway;
        l1Address = newL1Address;
        emit ArbitrumGatewayL1TokenChanged(l2Gateway, l1Address);
    }

    modifier onlyGateway() {
        require(msg.sender == l2Gateway, "ONLY_l2GATEWAY");
        _;
    }

    function bridgeMint(address account, uint256 amount) external override onlyGateway {
        _mint(account, amount);
    }

    function bridgeBurn(address account, uint256 amount) external override onlyGateway {
        _burn(account, amount);
    }
}

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"address","name":"_l2Gateway","type":"address"},{"internalType":"address","name":"_l1Address","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"AllowTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"gateway","type":"address"},{"indexed":false,"internalType":"address","name":"l1token","type":"address"}],"name":"ArbitrumGatewayL1TokenChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"BlockTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"MintPaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"MintUnpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Mintable","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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unmintable","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"batchTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"bridgeBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"bridgeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newL2Gateway","type":"address"},{"internalType":"address","name":"newL1Address","type":"address"}],"name":"changeArbToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"l1Address","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"l2Gateway","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintForUSDs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintUnpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"mintableAccounts","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mintableGroup","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"releaseAmount","type":"uint256"}],"name":"release","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revokeAllMintable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"allow","type":"bool"}],"name":"setMintable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"timelockOf","outputs":[{"internalType":"uint256","name":"releaseTime","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"releaseTime","type":"uint256"}],"name":"transferWithLock","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b506040516200272c3803806200272c833981810160405260808110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b9083019060208201858111156200006e57600080fd5b82516401000000008111828201881017156200008957600080fd5b82525081516020918201929091019080838360005b83811015620000b85781810151838201526020016200009e565b50505050905090810190601f168015620000e65780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200010a57600080fd5b9083019060208201858111156200012057600080fd5b82516401000000008111828201881017156200013b57600080fd5b82525081516020918201929091019080838360005b838110156200016a57818101518382015260200162000150565b50505050905090810190601f168015620001985780820380516001836020036101000a031916815260200191505b50604090815260208281015192909101518651929450925085918591620001c59160039185019062000292565b508051620001db90600490602084019062000292565b50506005805462ffff001960ff19909116601217169055506000620001ff6200028e565b600580546301000000600160b81b03191663010000006001600160a01b03841690810291909117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600980546001600160a01b039384166001600160a01b031991821617909155600a8054929093169116179055506200032e9050565b3390565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620002d557805160ff191683800117855562000305565b8280016001018555821562000305579182015b8281111562000305578251825591602001919060010190620002e8565b506200031392915062000317565b5090565b5b8082111562000313576000815560010162000318565b6123ee806200033e6000396000f3fe608060405234801561001057600080fd5b506004361061021c5760003560e01c806388d695b211610125578063c1708ad4116100ad578063de6baccb1161007c578063de6baccb14610720578063ec49c93814610752578063edb561c314610778578063f2fde38b146107a4578063f7eb06c4146107ca5761021c565b8063c1708ad4146106a3578063c2eeeebd146106e2578063dc923bc6146106ea578063dd62ed3e146106f25761021c565b80638fa74a0e116100f45780638fa74a0e1461063357806395d89b411461063b578063a457c2d714610643578063a9059cbb1461066f578063b803e2661461069b5761021c565b806388d695b2146104aa5780638c2a993e146105d15780638d9fd91f146105fd5780638da5cb5b1461062b5761021c565b806342966c68116101a8578063715018a611610177578063715018a61461043a57806374f4f5471461044257806379cc67901461046e5780637e4831d31461049a5780638456cb59146104a25761021c565b806342966c68146103e757806351d731e1146104045780635c975abb1461040c57806370a08231146104145761021c565b8063194efaa6116101ef578063194efaa61461032657806323b872dd1461035f578063313ce5671461039557806339509351146103b35780633f4ba83a146103df5761021c565b80630357371d1461022157806306fdde031461024f578063095ea7b3146102cc57806318160ddd1461030c575b600080fd5b61024d6004803603604081101561023757600080fd5b506001600160a01b0381351690602001356107f8565b005b6102576108db565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610291578181015183820152602001610279565b50505050905090810190601f1680156102be5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102f8600480360360408110156102e257600080fd5b506001600160a01b038135169060200135610971565b604080519115158252519081900360200190f35b61031461098e565b60408051918252519081900360200190f35b6103436004803603602081101561033c57600080fd5b5035610994565b604080516001600160a01b039092168252519081900360200190f35b6102f86004803603606081101561037557600080fd5b506001600160a01b038135811691602081013590911690604001356109bb565b61039d610a42565b6040805160ff9092168252519081900360200190f35b6102f8600480360360408110156103c957600080fd5b506001600160a01b038135169060200135610a4b565b61024d610a99565b61024d600480360360208110156103fd57600080fd5b5035610b05565b61024d610b19565b6102f8610bdb565b6103146004803603602081101561042a57600080fd5b50356001600160a01b0316610be9565b61024d610c04565b61024d6004803603604081101561045857600080fd5b506001600160a01b038135169060200135610cba565b61024d6004803603604081101561048457600080fd5b506001600160a01b038135169060200135610d18565b6102f8610d6d565b61024d610d7c565b61024d600480360360408110156104c057600080fd5b8101906020810181356401000000008111156104db57600080fd5b8201836020820111156104ed57600080fd5b8035906020019184602083028401116401000000008311171561050f57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561055f57600080fd5b82018360208201111561057157600080fd5b8035906020019184602083028401116401000000008311171561059357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610de6945050505050565b61024d600480360360408110156105e757600080fd5b506001600160a01b038135169060200135610eb2565b61024d6004803603604081101561061357600080fd5b506001600160a01b0381358116916020013516610f0c565b610343610fdf565b610343610ff5565b610257611004565b6102f86004803603604081101561065957600080fd5b506001600160a01b038135169060200135611065565b6102f86004803603604081101561068557600080fd5b506001600160a01b0381351690602001356110cd565b61024d6110e1565b6106c9600480360360208110156106b957600080fd5b50356001600160a01b031661114b565b6040805192835260208301919091528051918290030190f35b610343611191565b61024d6111a0565b6103146004803603604081101561070857600080fd5b506001600160a01b038135811691602001351661120a565b6102f86004803603606081101561073657600080fd5b506001600160a01b038135169060208101359060400135611235565b6102f86004803603602081101561076857600080fd5b50356001600160a01b03166113e7565b61024d6004803603604081101561078e57600080fd5b506001600160a01b0381351690602001356113fc565b61024d600480360360208110156107ba57600080fd5b50356001600160a01b03166114cb565b61024d600480360360408110156107e057600080fd5b506001600160a01b03813516906020013515156115df565b610800611731565b6001600160a01b0316610811610fdf565b6001600160a01b03161461085a576040805162461bcd60e51b8152602060048201819052602482015260008051602061222d833981519152604482015290519081900360640190fd5b6001600160a01b03821661089f5760405162461bcd60e51b81526004018080602001828103825260218152602001806121906021913960400191505060405180910390fd5b6001600160a01b038216600090815260066020526040902060018101546108c69083611735565b600182018190556108d657600081555b505050565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156109675780601f1061093c57610100808354040283529160200191610967565b820191906000526020600020905b81548152906001019060200180831161094a57829003601f168201915b5050505050905090565b600061098561097e611731565b8484611792565b50600192915050565b60025490565b600881815481106109a157fe5b6000918252602090912001546001600160a01b0316905081565b60006109c884848461187e565b610a38846109d4611731565b610a3385604051806060016040528060288152602001612205602891396001600160a01b038a16600090815260016020526040812090610a12611731565b6001600160a01b0316815260208101919091526040016000205491906119d9565b611792565b5060019392505050565b60055460ff1690565b6000610985610a58611731565b84610a338560016000610a69611731565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611a70565b610aa1611731565b6001600160a01b0316610ab2610fdf565b6001600160a01b031614610afb576040805162461bcd60e51b8152602060048201819052602482015260008051602061222d833981519152604482015290519081900360640190fd5b610b03611ad1565b565b610b16610b10611731565b82611b72565b50565b610b21611731565b6001600160a01b0316610b32610fdf565b6001600160a01b031614610b7b576040805162461bcd60e51b8152602060048201819052602482015260008051602061222d833981519152604482015290519081900360640190fd5b60085460005b81811015610bce576007600060088381548110610b9a57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020805460ff19169055600101610b81565b50610b1660086000612036565b600554610100900460ff1690565b6001600160a01b031660009081526020819052604090205490565b610c0c611731565b6001600160a01b0316610c1d610fdf565b6001600160a01b031614610c66576040805162461bcd60e51b8152602060048201819052602482015260008051602061222d833981519152604482015290519081900360640190fd5b600554604051600091630100000090046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546301000000600160b81b0319169055565b6009546001600160a01b03163314610d0a576040805162461bcd60e51b815260206004820152600e60248201526d4f4e4c595f6c324741544557415960901b604482015290519081900360640190fd5b610d148282611b72565b5050565b6000610d4f826040518060600160405280602a81526020016121db602a9139610d4886610d43611731565b61120a565b91906119d9565b9050610d6383610d5d611731565b83611792565b6108d68383611b72565b60055462010000900460ff1690565b610d84611731565b6001600160a01b0316610d95610fdf565b6001600160a01b031614610dde576040805162461bcd60e51b8152602060048201819052602482015260008051602061222d833981519152604482015290519081900360640190fd5b610b03611c6e565b6000825111610e265760405162461bcd60e51b815260040180806020018281038252602881526020018061224d6028913960400191505060405180910390fd5b8051825114610e665760405162461bcd60e51b815260040180806020018281038252604e815260200180612275604e913960600191505060405180910390fd5b60005b82518110156108d657610eaa610e7d611731565b848381518110610e8957fe5b6020026020010151848481518110610e9d57fe5b602002602001015161187e565b600101610e69565b6009546001600160a01b03163314610f02576040805162461bcd60e51b815260206004820152600e60248201526d4f4e4c595f6c324741544557415960901b604482015290519081900360640190fd5b610d148282611cf3565b610f14611731565b6001600160a01b0316610f25610fdf565b6001600160a01b031614610f6e576040805162461bcd60e51b8152602060048201819052602482015260008051602061222d833981519152604482015290519081900360640190fd5b600980546001600160a01b038085166001600160a01b03199283161792839055600a8054858316931692909217918290556040805193821684529116602083015280517fb5fe619c8e20580b650c3882313a43ecab6d46a2327058e3d239019688c7bb549281900390910190a15050565b600554630100000090046001600160a01b031690565b6009546001600160a01b031681565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156109675780601f1061093c57610100808354040283529160200191610967565b6000610985611072611731565b84610a338560405180606001604052806025815260200161236a602591396001600061109c611731565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906119d9565b60006109856110da611731565b848461187e565b6110e9611731565b6001600160a01b03166110fa610fdf565b6001600160a01b031614611143576040805162461bcd60e51b8152602060048201819052602482015260008051602061222d833981519152604482015290519081900360640190fd5b610b03611de3565b600080611156612054565b5050506001600160a01b0316600090815260066020908152604091829020825180840190935280548084526001909101549290910182905291565b600a546001600160a01b031681565b6111a8611731565b6001600160a01b03166111b9610fdf565b6001600160a01b031614611202576040805162461bcd60e51b8152602060048201819052602482015260008051602061222d833981519152604482015290519081900360640190fd5b610b03611e72565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600061123f611731565b6001600160a01b0316611250610fdf565b6001600160a01b031614611299576040805162461bcd60e51b8152602060048201819052602482015260008051602061222d833981519152604482015290519081900360640190fd5b6001600160a01b0384166112de5760405162461bcd60e51b815260040180806020018281038252602d81526020018061213b602d913960400191505060405180910390fd5b42821161131c5760405162461bcd60e51b815260040180806020018281038252602a8152602001806121b1602a913960400191505060405180910390fd5b6001600160a01b03841660009081526006602052604090205415611387576040805162461bcd60e51b815260206004820152601b60248201527f537065726178546f6b656e3a20616c7265616479206c6f636b65640000000000604482015290519081900360640190fd5b61138f612054565b5060408051808201825283815260208082018681526001600160a01b038816600090815260069092529290208151815591516001909201919091556113dc6113d5611731565b868661187e565b506001949350505050565b60076020526000908152604090205460ff1681565b60055462010000900460ff1615611451576040805162461bcd60e51b8152602060048201526014602482015273135a5b9d14185d5cd8589b194e881c185d5cd95960621b604482015290519081900360640190fd5b6007600061145d611731565b6001600160a01b0316815260208101919091526040016000205460ff16610f02576040805162461bcd60e51b815260206004820152601a60248201527f5350413a206e6f7420696e206d696e7461626c652067726f7570000000000000604482015290519081900360640190fd5b6114d3611731565b6001600160a01b03166114e4610fdf565b6001600160a01b03161461152d576040805162461bcd60e51b8152602060048201819052602482015260008051602061222d833981519152604482015290519081900360640190fd5b6001600160a01b0381166115725760405162461bcd60e51b81526004018080602001828103825260268152602001806120cd6026913960400191505060405180910390fd5b6005546040516001600160a01b03808416926301000000900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b039092166301000000026301000000600160b81b0319909216919091179055565b6115e7611731565b6001600160a01b03166115f8610fdf565b6001600160a01b031614611641576040805162461bcd60e51b8152602060048201819052602482015260008051602061222d833981519152604482015290519081900360640190fd5b6001600160a01b0382166000818152600760205260408120805460ff191684158015919091179091556008805460018101825592527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee390910180546001600160a01b0319169092179091556116f157604080516001600160a01b038416815290517f8fc6bf72ae36e2e0d306c3344626c34ed9bbc8c82fe8289b2f798470946375519181900360200190a1610d14565b604080516001600160a01b038416815290517fb4fa1ea6b9ba3d53e901dbf2b924fff22ac6e0658eecffa8dbd101ff61fc839d9181900360200190a15050565b3390565b60008282111561178c576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6001600160a01b0383166117d75760405162461bcd60e51b81526004018080602001828103825260248152602001806123096024913960400191505060405180910390fd5b6001600160a01b03821661181c5760405162461bcd60e51b81526004018080602001828103825260228152602001806120f36022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166118c35760405162461bcd60e51b81526004018080602001828103825260258152602001806122e46025913960400191505060405180910390fd5b6001600160a01b0382166119085760405162461bcd60e51b81526004018080602001828103825260238152602001806120886023913960400191505060405180910390fd5b611913838383611f04565b61195081604051806060016040528060268152602001612115602691396001600160a01b03861660009081526020819052604090205491906119d9565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461197f9082611a70565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115611a685760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611a2d578181015183820152602001611a15565b50505050905090810190601f168015611a5a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015611aca576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b611ad9610bdb565b611b21576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6005805461ff00191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611b55611731565b604080516001600160a01b039092168252519081900360200190a1565b6001600160a01b038216611bb75760405162461bcd60e51b81526004018080602001828103825260218152602001806122c36021913960400191505060405180910390fd5b611bc382600083611f04565b611c00816040518060600160405280602281526020016120ab602291396001600160a01b03851660009081526020819052604090205491906119d9565b6001600160a01b038316600090815260208190526040902055600254611c269082611735565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b611c76610bdb565b15611cbb576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6005805461ff0019166101001790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611b55611731565b6001600160a01b038216611d4e576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b611d5a60008383611f04565b600254611d679082611a70565b6002556001600160a01b038216600090815260208190526040902054611d8d9082611a70565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60055462010000900460ff1615611e38576040805162461bcd60e51b8152602060048201526014602482015273135a5b9d14185d5cd8589b194e881c185d5cd95960621b604482015290519081900360640190fd5b6005805462ff00001916620100001790557fee9b45d4bbbf616909699035be16f077b7459c8d4db74944d4e27d84f15faf34611b55611731565b60055462010000900460ff16611ecf576040805162461bcd60e51b815260206004820152601860248201527f4d696e745061757361626c653a206e6f74207061757365640000000000000000604482015290519081900360640190fd5b6005805462ff0000191690557f4edc83796ddd13f7381b8c91ffbca02176782693577083e23486400548aaa8a1611b55611731565b611f0c610bdb565b15611f485760405162461bcd60e51b81526004018080602001828103825260288152602001806121686028913960400191505060405180910390fd5b6001600160a01b0383166000908152600660205260409020805415801590611f8557508060010154611f8383611f7d87610be9565b90611735565b105b15611fd6578054421015611fca5760405162461bcd60e51b815260040180806020018281038252603d81526020018061232d603d913960400191505060405180910390fd5b60006001820155600081555b611fe1848484611fe7565b50505050565b611ff28383836108d6565b611ffa610bdb565b156108d65760405162461bcd60e51b815260040180806020018281038252602a81526020018061238f602a913960400191505060405180910390fd5b5080546000825590600052602060002090810190610b16919061206e565b604051806040016040528060008152602001600081525090565b5b80821115612083576000815560010161206f565b509056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365537065726178546f6b656e3a207472616e73666572576974684c6f636b20746f207a65726f2061646472657373537065726178546f6b656e3a20746f6b656e207472616e73666572207768696c6520706175736564537065726178546f6b656e3a2072656c65617365207a65726f2061646472657373537065726178546f6b656e3a2072656c656173652074696d65206265666f7265206c6f636b2074696d65537065726178546f6b656e3a206275726e20616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572537065726178546f6b656e3a206c65617374206f6e6520726563697069656e742061646472657373537065726178546f6b656e3a206e756d626572206f6620726563697069656e742061646472657373657320646f6573206e6f74206d6174636820746865206e756d626572206f6620746f6b656e7345524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373537065726178546f6b656e3a2063757272656e742074696d65206973206265666f72652066726f6d206163636f756e742072656c656173652074696d6545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f45524332305061757361626c653a20746f6b656e207472616e73666572207768696c6520706175736564a2646970667358221220921f1c08167f340dac154b6dbb6fbe32b3c0f8db91a1efa0e1e858dd865c429d64736f6c634300060c0033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000096760f208390250649e3e8763348e783aef55620000000000000000000000002a95fe4c7e64e09856989f9ea0b57b9ab5f770cb0000000000000000000000000000000000000000000000000000000000000006537065726178000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035350410000000000000000000000000000000000000000000000000000000000

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

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000096760f208390250649e3e8763348e783aef55620000000000000000000000002a95fe4c7e64e09856989f9ea0b57b9ab5f770cb0000000000000000000000000000000000000000000000000000000000000006537065726178000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035350410000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Sperax
Arg [1] : _symbol (string): SPA
Arg [2] : _l2Gateway (address): 0x096760f208390250649e3e8763348e783aef5562
Arg [3] : _l1Address (address): 0x2a95fe4c7e64e09856989f9ea0b57b9ab5f770cb

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 000000000000000000000000096760f208390250649e3e8763348e783aef5562
Arg [3] : 0000000000000000000000002a95fe4c7e64e09856989f9ea0b57b9ab5f770cb
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [5] : 5370657261780000000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [7] : 5350410000000000000000000000000000000000000000000000000000000000


Deployed ByteCode Sourcemap

32881:7902:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37215:368;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;37215:368:0;;;;;;;;:::i;:::-;;16377:91;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18523:169;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18523:169:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;17476:108;;;:::i;:::-;;;;;;;;;;;;;;;;33755:34;;;;;;;;;;;;;;;;-1:-1:-1;33755:34:0;;:::i;:::-;;;;-1:-1:-1;;;;;33755:34:0;;;;;;;;;;;;;;19174:321;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19174:321:0;;;;;;;;;;;;;;;;;:::i;17320:91::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19904:218;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19904:218:0;;;;;;;;:::i;37835:65::-;;;:::i;35301:83::-;;;;;;;;;;;;;;;;-1:-1:-1;35301:83:0;;:::i;34744:232::-;;;:::i;12815:86::-;;;:::i;17647:127::-;;;;;;;;;;;;;;;;-1:-1:-1;17647:127:0;-1:-1:-1;;;;;17647:127:0;;:::i;31808:148::-;;;:::i;40656:124::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;40656:124:0;;;;;;;;:::i;35703:293::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;35703:293:0;;;;;;;;:::i;26060:86::-;;;:::i;37678:61::-;;;:::i;38396:451::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38396:451:0;;;;;;;;-1:-1:-1;38396:451:0;;-1:-1:-1;;38396:451:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38396:451:0;;-1:-1:-1;38396:451:0;;-1:-1:-1;;;;;38396:451:0:i;40524:124::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;40524:124:0;;;;;;;;:::i;40172:232::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;40172:232:0;;;;;;;;;;:::i;31157:87::-;;;:::i;33822:24::-;;;:::i;16587:95::-;;;:::i;20625:269::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20625:269:0;;;;;;;;:::i;17987:175::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;17987:175:0;;;;;;;;:::i;38003:69::-;;;:::i;36071:215::-;;;;;;;;;;;;;;;;-1:-1:-1;36071:215:0;-1:-1:-1;;;;;36071:215:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;33853:33;;;:::i;38176:73::-;;;:::i;18225:151::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18225:151:0;;;;;;;;;;:::i;36444:652::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;36444:652:0;;;;;;;;;;;;;:::i;33665:45::-;;;;;;;;;;;;;;;;-1:-1:-1;33665:45:0;-1:-1:-1;;;;;33665:45:0;;:::i;35045:140::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;35045:140:0;;;;;;;;:::i;32111:244::-;;;;;;;;;;;;;;;;-1:-1:-1;32111:244:0;-1:-1:-1;;;;;32111:244:0;;:::i;34390:287::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;34390:287:0;;;;;;;;;;:::i;37215:368::-;31388:12;:10;:12::i;:::-;-1:-1:-1;;;;;31377:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;31377:23:0;;31369:68;;;;;-1:-1:-1;;;31369:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;31369:68:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;37308:21:0;::::1;37300:67;;;;-1:-1:-1::0;;;37300:67:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;37408:18:0;::::1;37380:25;37408:18:::0;;;:9:::1;:18;::::0;;;;37455:15:::1;::::0;::::1;::::0;:34:::1;::::0;37475:13;37455:19:::1;:34::i;:::-;37437:15;::::0;::::1;:52:::0;;;37500:76:::1;;37563:1;37540:24:::0;;37500:76:::1;31448:1;37215:368:::0;;:::o;16377:91::-;16455:5;16448:12;;;;;;;;-1:-1:-1;;16448:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16422:13;;16448:12;;16455:5;;16448:12;;16455:5;16448:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16377:91;:::o;18523:169::-;18606:4;18623:39;18632:12;:10;:12::i;:::-;18646:7;18655:6;18623:8;:39::i;:::-;-1:-1:-1;18680:4:0;18523:169;;;;:::o;17476:108::-;17564:12;;17476:108;:::o;33755:34::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33755:34:0;;-1:-1:-1;33755:34:0;:::o;19174:321::-;19280:4;19297:36;19307:6;19315:9;19326:6;19297:9;:36::i;:::-;19344:121;19353:6;19361:12;:10;:12::i;:::-;19375:89;19413:6;19375:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19375:19:0;;;;;;:11;:19;;;;;;19395:12;:10;:12::i;:::-;-1:-1:-1;;;;;19375:33:0;;;;;;;;;;;;-1:-1:-1;19375:33:0;;;:89;:37;:89::i;:::-;19344:8;:121::i;:::-;-1:-1:-1;19483:4:0;19174:321;;;;;:::o;17320:91::-;17394:9;;;;17320:91;:::o;19904:218::-;19992:4;20009:83;20018:12;:10;:12::i;:::-;20032:7;20041:50;20080:10;20041:11;:25;20053:12;:10;:12::i;:::-;-1:-1:-1;;;;;20041:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;20041:25:0;;;:34;;;;;;;;;;;:38;:50::i;37835:65::-;31388:12;:10;:12::i;:::-;-1:-1:-1;;;;;31377:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;31377:23:0;;31369:68;;;;;-1:-1:-1;;;31369:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;31369:68:0;;;;;;;;;;;;;;;37882:10:::1;:8;:10::i;:::-;37835:65::o:0;35301:83::-;35349:27;35355:12;:10;:12::i;:::-;35369:6;35349:5;:27::i;:::-;35301:83;:::o;34744:232::-;31388:12;:10;:12::i;:::-;-1:-1:-1;;;;;31377:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;31377:23:0;;31369:68;;;;;-1:-1:-1;;;31369:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;31369:68:0;;;;;;;;;;;;;;;34810:16:::1;:23:::0;34801:6:::1;34844:91;34860:1;34858;:3;34844:91;;;34889:13;:34;34903:16;34920:1;34903:19;;;;;;;;;::::0;;;::::1;::::0;;;;;::::1;::::0;-1:-1:-1;;;;;34903:19:0::1;34889:34:::0;;;::::1;::::0;;;;;;;;34882:41;;-1:-1:-1;;34882:41:0::1;::::0;;34903:19;34862:3:::1;34844:91;;;-1:-1:-1::0;34945:23:0::1;34952:16;;34945:23;:::i;12815:86::-:0;12886:7;;;;;;;;12815:86::o;17647:127::-;-1:-1:-1;;;;;17748:18:0;17721:7;17748:18;;;;;;;;;;;;17647:127::o;31808:148::-;31388:12;:10;:12::i;:::-;-1:-1:-1;;;;;31377:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;31377:23:0;;31369:68;;;;;-1:-1:-1;;;31369:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;31369:68:0;;;;;;;;;;;;;;;31899:6:::1;::::0;31878:40:::1;::::0;31915:1:::1;::::0;31899:6;;::::1;-1:-1:-1::0;;;;;31899:6:0::1;::::0;31878:40:::1;::::0;31915:1;;31878:40:::1;31929:6;:19:::0;;-1:-1:-1;;;;;;31929:19:0::1;::::0;;31808:148::o;40656:124::-;40468:9;;-1:-1:-1;;;;;40468:9:0;40454:10;:23;40446:50;;;;;-1:-1:-1;;;40446:50:0;;;;;;;;;;;;-1:-1:-1;;;40446:50:0;;;;;;;;;;;;;;;40750:22:::1;40756:7;40765:6;40750:5;:22::i;:::-;40656:124:::0;;:::o;35703:293::-;35772:26;35801:90;35838:6;35801:90;;;;;;;;;;;;;;;;;:32;35811:7;35820:12;:10;:12::i;:::-;35801:9;:32::i;:::-;:36;:90;:36;:90::i;:::-;35772:119;;35904:51;35913:7;35922:12;:10;:12::i;:::-;35936:18;35904:8;:51::i;:::-;35966:22;35972:7;35981:6;35966:5;:22::i;26060:86::-;26127:11;;;;;;;;26060:86::o;37678:61::-;31388:12;:10;:12::i;:::-;-1:-1:-1;;;;;31377:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;31377:23:0;;31369:68;;;;;-1:-1:-1;;;31369:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;31369:68:0;;;;;;;;;;;;;;;37723:8:::1;:6;:8::i;38396:451::-:0;38520:1;38500:10;:17;:21;38492:74;;;;-1:-1:-1;;;38492:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38606:7;:14;38585:10;:17;:35;38577:126;;;;-1:-1:-1;;;38577:126:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38720:9;38716:124;38739:10;:17;38735:1;:21;38716:124;;;38778:50;38788:12;:10;:12::i;:::-;38802:10;38813:1;38802:13;;;;;;;;;;;;;;38817:7;38825:1;38817:10;;;;;;;;;;;;;;38778:9;:50::i;:::-;38758:3;;38716:124;;40524;40468:9;;-1:-1:-1;;;;;40468:9:0;40454:10;:23;40446:50;;;;;-1:-1:-1;;;40446:50:0;;;;;;;;;;;;-1:-1:-1;;;40446:50:0;;;;;;;;;;;;;;;40618:22:::1;40624:7;40633:6;40618:5;:22::i;40172:232::-:0;31388:12;:10;:12::i;:::-;-1:-1:-1;;;;;31377:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;31377:23:0;;31369:68;;;;;-1:-1:-1;;;31369:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;31369:68:0;;;;;;;;;;;;;;;40270:9:::1;:24:::0;;-1:-1:-1;;;;;40270:24:0;;::::1;-1:-1:-1::0;;;;;;40270:24:0;;::::1;;::::0;;;;40305:9:::1;:24:::0;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;40345:51:::1;::::0;;40375:9;;::::1;40345:51:::0;;40386:9;::::1;40345:51;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;::::1;40172:232:::0;;:::o;31157:87::-;31230:6;;;;;-1:-1:-1;;;;;31230:6:0;;31157:87::o;33822:24::-;;;-1:-1:-1;;;;;33822:24:0;;:::o;16587:95::-;16667:7;16660:14;;;;;;;;-1:-1:-1;;16660:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16634:13;;16660:14;;16667:7;;16660:14;;16667:7;16660:14;;;;;;;;;;;;;;;;;;;;;;;;20625:269;20718:4;20735:129;20744:12;:10;:12::i;:::-;20758:7;20767:96;20806:15;20767:96;;;;;;;;;;;;;;;;;:11;:25;20779:12;:10;:12::i;:::-;-1:-1:-1;;;;;20767:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;20767:25:0;;;:34;;;;;;;;;;;:96;:38;:96::i;17987:175::-;18073:4;18090:42;18100:12;:10;:12::i;:::-;18114:9;18125:6;18090:9;:42::i;38003:69::-;31388:12;:10;:12::i;:::-;-1:-1:-1;;;;;31377:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;31377:23:0;;31369:68;;;;;-1:-1:-1;;;31369:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;31369:68:0;;;;;;;;;;;;;;;38052:12:::1;:10;:12::i;36071:215::-:0;36128:19;36149:14;36176:24;;:::i;:::-;-1:-1:-1;;;;;;;;36203:18:0;;;;;:9;:18;;;;;;;;;36176:45;;;;;;;;;;;;;;;;;;;;;;;;;;36071:215::o;33853:33::-;;;-1:-1:-1;;;;;33853:33:0;;:::o;38176:73::-;31388:12;:10;:12::i;:::-;-1:-1:-1;;;;;31377:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;31377:23:0;;31369:68;;;;;-1:-1:-1;;;31369:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;31369:68:0;;;;;;;;;;;;;;;38227:14:::1;:12;:14::i;18225:151::-:0;-1:-1:-1;;;;;18341:18:0;;;18314:7;18341:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;18225:151::o;36444:652::-;36552:4;31388:12;:10;:12::i;:::-;-1:-1:-1;;;;;31377:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;31377:23:0;;31369:68;;;;;-1:-1:-1;;;31369:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;31369:68:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;36577:23:0;::::1;36569:81;;;;-1:-1:-1::0;;;36569:81:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36683:15;36669:11;:29;36661:84;;;;-1:-1:-1::0;;;36661:84:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;36764:20:0;::::1;;::::0;;;:9:::1;:20;::::0;;;;:32;:37;36756:77:::1;;;::::0;;-1:-1:-1;;;36756:77:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;36846:24;;:::i;:::-;-1:-1:-1::0;36873:96:0::1;::::0;;;;::::1;::::0;;;;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;;;;;36980:20:0;::::1;-1:-1:-1::0;36980:20:0;;;:9:::1;:20:::0;;;;;;:31;;;;;;::::1;::::0;;::::1;::::0;;;;37024:42:::1;37034:12;:10;:12::i;:::-;37048:9;37059:6;37024:9;:42::i;:::-;-1:-1:-1::0;37084:4:0::1;::::0;36444:652;-1:-1:-1;;;;36444:652:0:o;33665:45::-;;;;;;;;;;;;;;;:::o;35045:140::-;26390:11;;;;;;;26389:12;26381:45;;;;;-1:-1:-1;;;26381:45:0;;;;;;;;;;;;-1:-1:-1;;;26381:45:0;;;;;;;;;;;;;;;33411:13:::1;:27;33425:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;33411:27:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;33411:27:0;;::::1;;33403:66;;;::::0;;-1:-1:-1;;;33403:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;32111:244:::0;31388:12;:10;:12::i;:::-;-1:-1:-1;;;;;31377:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;31377:23:0;;31369:68;;;;;-1:-1:-1;;;31369:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;31369:68:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32200:22:0;::::1;32192:73;;;;-1:-1:-1::0;;;32192:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32302:6;::::0;32281:38:::1;::::0;-1:-1:-1;;;;;32281:38:0;;::::1;::::0;32302:6;;::::1;;::::0;32281:38:::1;::::0;;;::::1;32330:6;:17:::0;;-1:-1:-1;;;;;32330:17:0;;::::1;::::0;::::1;-1:-1:-1::0;;;;;;32330:17:0;;::::1;::::0;;;::::1;::::0;;32111:244::o;34390:287::-;31388:12;:10;:12::i;:::-;-1:-1:-1;;;;;31377:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;31377:23:0;;31369:68;;;;;-1:-1:-1;;;31369:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;31369:68:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;34468:22:0;::::1;;::::0;;;:13:::1;:22;::::0;;;;:30;;-1:-1:-1;;34468:30:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;34509:16:::1;:30:::0;;-1:-1:-1;34509:30:0;::::1;::::0;;;;;;;::::1;::::0;;-1:-1:-1;;;;;;34509:30:0::1;::::0;;::::1;::::0;;;34552:118:::1;;34583:17;::::0;;-1:-1:-1;;;;;34583:17:0;::::1;::::0;;;;::::1;::::0;;;;::::1;::::0;;::::1;34552:118;;;34639:19;::::0;;-1:-1:-1;;;;;34639:19:0;::::1;::::0;;;;::::1;::::0;;;;::::1;::::0;;::::1;34390:287:::0;;:::o;740:106::-;828:10;740:106;:::o;4463:158::-;4521:7;4554:1;4549;:6;;4541:49;;;;;-1:-1:-1;;;4541:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4608:5:0;;;4463:158::o;23772:346::-;-1:-1:-1;;;;;23874:19:0;;23866:68;;;;-1:-1:-1;;;23866:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23953:21:0;;23945:68;;;;-1:-1:-1;;;23945:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24026:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;24078:32;;;;;;;;;;;;;;;;;23772:346;;;:::o;21384:539::-;-1:-1:-1;;;;;21490:20:0;;21482:70;;;;-1:-1:-1;;;21482:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21571:23:0;;21563:71;;;;-1:-1:-1;;;21563:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21647:47;21668:6;21676:9;21687:6;21647:20;:47::i;:::-;21727:71;21749:6;21727:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21727:17:0;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;21707:17:0;;;:9;:17;;;;;;;;;;;:91;;;;21832:20;;;;;;;:32;;21857:6;21832:24;:32::i;:::-;-1:-1:-1;;;;;21809:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;21880:35;;;;;;;21809:20;;21880:35;;;;;;;;;;;;;21384:539;;;:::o;6828:166::-;6914:7;6950:12;6942:6;;;;6934:29;;;;-1:-1:-1;;;6934:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;6981:5:0;;;6828:166::o;4001:179::-;4059:7;4091:5;;;4115:6;;;;4107:46;;;;;-1:-1:-1;;;4107:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;4171:1;4001:179;-1:-1:-1;;;4001:179:0:o;13874:120::-;13418:8;:6;:8::i;:::-;13410:41;;;;;-1:-1:-1;;;13410:41:0;;;;;;;;;;;;-1:-1:-1;;;13410:41:0;;;;;;;;;;;;;;;13933:7:::1;:15:::0;;-1:-1:-1;;13933:15:0::1;::::0;;13964:22:::1;13973:12;:10;:12::i;:::-;13964:22;::::0;;-1:-1:-1;;;;;13964:22:0;;::::1;::::0;;;;;;;::::1;::::0;;::::1;13874:120::o:0;22916:418::-;-1:-1:-1;;;;;23000:21:0;;22992:67;;;;-1:-1:-1;;;22992:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23072:49;23093:7;23110:1;23114:6;23072:20;:49::i;:::-;23155:68;23178:6;23155:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23155:18:0;;:9;:18;;;;;;;;;;;;:68;:22;:68::i;:::-;-1:-1:-1;;;;;23134:18:0;;:9;:18;;;;;;;;;;:89;23249:12;;:24;;23266:6;23249:16;:24::i;:::-;23234:12;:39;23289:37;;;;;;;;23315:1;;-1:-1:-1;;;;;23289:37:0;;;;;;;;;;;;22916:418;;:::o;13615:118::-;13141:8;:6;:8::i;:::-;13140:9;13132:38;;;;;-1:-1:-1;;;13132:38:0;;;;;;;;;;;;-1:-1:-1;;;13132:38:0;;;;;;;;;;;;;;;13675:7:::1;:14:::0;;-1:-1:-1;;13675:14:0::1;;;::::0;;13705:20:::1;13712:12;:10;:12::i;22205:378::-:0;-1:-1:-1;;;;;22289:21:0;;22281:65;;;;;-1:-1:-1;;;22281:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;22359:49;22388:1;22392:7;22401:6;22359:20;:49::i;:::-;22436:12;;:24;;22453:6;22436:16;:24::i;:::-;22421:12;:39;-1:-1:-1;;;;;22492:18:0;;:9;:18;;;;;;;;;;;:30;;22515:6;22492:22;:30::i;:::-;-1:-1:-1;;;;;22471:18:0;;:9;:18;;;;;;;;;;;:51;;;;22538:37;;;;;;;22471:18;;:9;;22538:37;;;;;;;;;;22205:378;;:::o;26882:126::-;26390:11;;;;;;;26389:12;26381:45;;;;;-1:-1:-1;;;26381:45:0;;;;;;;;;;;;-1:-1:-1;;;26381:45:0;;;;;;;;;;;;;;;26942:11:::1;:18:::0;;-1:-1:-1;;26942:18:0::1;::::0;::::1;::::0;;26976:24:::1;26987:12;:10;:12::i;27149:128::-:0;26678:11;;;;;;;26670:48;;;;;-1:-1:-1;;;26670:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;27208:11:::1;:19:::0;;-1:-1:-1;;27208:19:0::1;::::0;;27243:26:::1;27256:12;:10;:12::i;39083:792::-:0;39193:8;:6;:8::i;:::-;39192:9;39184:62;;;;-1:-1:-1;;;39184:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;39344:15:0;;39316:25;39344:15;;;:9;:15;;;;;39373:20;;:25;;;;:74;;;39432:8;:15;;;39402:27;39422:6;39402:15;39412:4;39402:9;:15::i;:::-;:19;;:27::i;:::-;:45;39373:74;39370:441;;;39491:20;;39472:15;:39;;39464:113;;;;-1:-1:-1;;;39464:113:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39700:1;39682:15;;;:19;39783:1;39760:24;;39716:84;39823:44;39850:4;39856:2;39860:6;39823:26;:44::i;:::-;39083:792;;;;:::o;29656:238::-;29765:44;29792:4;29798:2;29802:6;29765:26;:44::i;:::-;29831:8;:6;:8::i;:::-;29830:9;29822:64;;;;-1:-1:-1;;;29822:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o

Metadata Hash

921f1c08167f340dac154b6dbb6fbe32b3c0f8db91a1efa0e1e858dd865c429d
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.