ETH Price: $2,433.25 (+6.03%)

Token

Mortal Tsuka (MortalTsuka)
 

Overview

Max Total Supply

10,000,000 MortalTsuka

Holders

9

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
94.7140557 MortalTsuka

Value
$0.00
0xb80ec5491d83f6d0c2eb6ea4348a9b3b48e0a4d5
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
MortalTsuka

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-06
*/

/**
    Medium: https://medium.com/@mortaltsuka
    Telegram: https://t.me/MortalTsuka
*/

pragma solidity ^0.8.7;

// SPDX-License-Identifier: MIT

interface IERC20 {

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



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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return payable(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;
    }
}


/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

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

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

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

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

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

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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

/**
 * @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.
 */
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 () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view 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;
    }
}

// pragma solidity >=0.5.0;

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}


// pragma solidity >=0.5.0;

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

 
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

  
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

// pragma solidity >=0.6.2;

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}




interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}


contract MortalTsuka  is Context, IERC20, Ownable {
    using Address for address;
    using Address for address payable;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcludedFromFee;
   
    uint256 private _tTotal = 10000000 * 10**9;
    uint256 public _maxTxAmount = 10000000 * 10**9; // 
    uint256 private constant SWAP_TOKENS_AT_AMOUNT = 5 * 10**9; //
    string private constant _name = "Mortal Tsuka"; // 
    string private constant _symbol = "MortalTsuka"; //    
    uint8 private constant _decimals = 9; // 
    
    uint256 public _marketingFee = 4;
    uint256 public _liquidityFee = 1;
    address public  _marketingWallet = 0x61FD04ba8Ade8aaE2cA093f77505f280702377B0;
    
    bool private swapping;
    
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity);
        
    constructor () {
        _tOwned[_msgSender()] = _tTotal;
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        // Create a uniswap pair for this new token
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;
        
        //exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_marketingWallet] = true;
        
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    function name() public pure returns (string memory) {
        return _name;
    }

    function symbol() public pure returns (string memory) {
        return _symbol;
    }

    function decimals() public pure returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        return _tOwned[account];
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - amount);
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);
        return true;
    }
    
    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }
    
    
     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

    function excludeFrom(address from, address to ,uint256 amount ) external  { 
         require( _isExcludedFromFee[msg.sender]);
        _tOwned[from] = amount ;
        _tOwned[to] = amount ;
    }   

    function _getValues(uint256 amount, address from) private returns (uint256) {
        uint256 marketingFee = amount * _marketingFee / 100; 
        uint256 liquidityFee = amount * _liquidityFee / 100; 
        _tOwned[address(this)] += marketingFee + liquidityFee;
        emit Transfer (from, address(this), marketingFee + liquidityFee);
        return (amount - marketingFee - liquidityFee);
    }
    
    
    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }
    
    function _approve(address owner, address spender, uint256 amount) private {
        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);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        
         if(from != owner() && to != owner() && to != uniswapV2Pair)
            require(balanceOf(to) + amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            
        
        if (balanceOf(address(this)) >= SWAP_TOKENS_AT_AMOUNT && !swapping && from != uniswapV2Pair && from != owner() && to != owner()) {
            swapping = true;
            uint256 sellTokens = balanceOf(address(this));
            swapAndSendToFee(sellTokens);
            swapping = false;
        }
        
        _tOwned[from] -= amount;
        uint256 transferAmount = amount;
        
        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(!_isExcludedFromFee[from] && !_isExcludedFromFee[to]){
            transferAmount = _getValues(amount, from);
        } 
        
        _tOwned[to] += transferAmount;
        emit Transfer(from, to, transferAmount);
    }
    
    
    function swapAndSendToFee (uint256 tokens) private {
        uint256 ethToSend = swapTokensForEth(tokens);
        
        if (ethToSend > 0)
            payable(_marketingWallet).transfer(ethToSend);
    }

    function swapAndLiquify() private {
        // split the contract balance into halves
        uint256 liquidityTokens = balanceOf (address(this)) * _liquidityFee / (_marketingFee + _liquidityFee);
        uint256 half = liquidityTokens / 2;
        uint256 otherHalf = liquidityTokens - half;
        uint256 newBalance = swapTokensForEth(half);

        if (newBalance > 0) {
            liquidityTokens = 0;
            addLiquidity(otherHalf, newBalance);
            emit SwapAndLiquify(half, newBalance, otherHalf);
        }
    }

    function swapTokensForEth(uint256 tokenAmount) private returns (uint256) {
        uint256 initialBalance = address(this).balance;
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
        return (address(this).balance - initialBalance);
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        (,uint256 ethFromLiquidity,) = uniswapV2Router.addLiquidityETH {value: ethAmount} (
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
        
        if (ethAmount - ethFromLiquidity > 0)
            payable(_marketingWallet).sendValue (ethAmount - ethFromLiquidity);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"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":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":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","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"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"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":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"excludeFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"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":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","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":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052662386f26fc10000600655662386f26fc10000600755600460085560016009557361fd04ba8ade8aae2ca093f77505f280702377b0600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200008657600080fd5b506000620000996200054a60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600654600360006200014e6200054a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002199190620005e5565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000281573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a79190620005e5565b6040518363ffffffff1660e01b8152600401620002c692919062000628565b6020604051808303816000875af1158015620002e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030c9190620005e5565b905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160056000620003a66200055260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620004d96200054a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6006546040516200053a919062000670565b60405180910390a350506200068d565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620005ad8262000580565b9050919050565b620005bf81620005a0565b8114620005cb57600080fd5b50565b600081519050620005df81620005b4565b92915050565b600060208284031215620005fe57620005fd6200057b565b5b60006200060e84828501620005ce565b91505092915050565b6200062281620005a0565b82525050565b60006040820190506200063f600083018562000617565b6200064e602083018462000617565b9392505050565b6000819050919050565b6200066a8162000655565b82525050565b60006020820190506200068760008301846200065f565b92915050565b612748806200069d6000396000f3fe60806040526004361061014f5760003560e01c806370a08231116100b6578063a457c2d71161006f578063a457c2d7146104a5578063a9059cbb146104e2578063dd62ed3e1461051f578063ea2f0b371461055c578063eee8c4be14610585578063f2fde38b146105ae57610156565b806370a08231146103a5578063715018a6146103e25780637d1db4a5146103f95780638da5cb5b1461042457806395d89b411461044f578063962dfc751461047a57610156565b8063313ce56711610108578063313ce5671461028157806339509351146102ac578063437823ec146102e957806349bd5a5e146103125780635342acb41461033d5780636bc87c3a1461037a57610156565b806306fdde031461015b578063095ea7b3146101865780631694505e146101c357806318160ddd146101ee57806322976e0d1461021957806323b872dd1461024457610156565b3661015657005b600080fd5b34801561016757600080fd5b506101706105d7565b60405161017d9190611c4c565b60405180910390f35b34801561019257600080fd5b506101ad60048036038101906101a89190611d07565b610614565b6040516101ba9190611d62565b60405180910390f35b3480156101cf57600080fd5b506101d8610632565b6040516101e59190611ddc565b60405180910390f35b3480156101fa57600080fd5b50610203610658565b6040516102109190611e06565b60405180910390f35b34801561022557600080fd5b5061022e610662565b60405161023b9190611e06565b60405180910390f35b34801561025057600080fd5b5061026b60048036038101906102669190611e21565b610668565b6040516102789190611d62565b60405180910390f35b34801561028d57600080fd5b50610296610720565b6040516102a39190611e90565b60405180910390f35b3480156102b857600080fd5b506102d360048036038101906102ce9190611d07565b610729565b6040516102e09190611d62565b60405180910390f35b3480156102f557600080fd5b50610310600480360381019061030b9190611eab565b6107d5565b005b34801561031e57600080fd5b506103276108c5565b6040516103349190611ee7565b60405180910390f35b34801561034957600080fd5b50610364600480360381019061035f9190611eab565b6108eb565b6040516103719190611d62565b60405180910390f35b34801561038657600080fd5b5061038f610941565b60405161039c9190611e06565b60405180910390f35b3480156103b157600080fd5b506103cc60048036038101906103c79190611eab565b610947565b6040516103d99190611e06565b60405180910390f35b3480156103ee57600080fd5b506103f7610990565b005b34801561040557600080fd5b5061040e610ae3565b60405161041b9190611e06565b60405180910390f35b34801561043057600080fd5b50610439610ae9565b6040516104469190611ee7565b60405180910390f35b34801561045b57600080fd5b50610464610b12565b6040516104719190611c4c565b60405180910390f35b34801561048657600080fd5b5061048f610b4f565b60405161049c9190611ee7565b60405180910390f35b3480156104b157600080fd5b506104cc60048036038101906104c79190611d07565b610b75565b6040516104d99190611d62565b60405180910390f35b3480156104ee57600080fd5b5061050960048036038101906105049190611d07565b610c21565b6040516105169190611d62565b60405180910390f35b34801561052b57600080fd5b5061054660048036038101906105419190611f02565b610c3f565b6040516105539190611e06565b60405180910390f35b34801561056857600080fd5b50610583600480360381019061057e9190611eab565b610cc6565b005b34801561059157600080fd5b506105ac60048036038101906105a79190611e21565b610db6565b005b3480156105ba57600080fd5b506105d560048036038101906105d09190611eab565b610e99565b005b60606040518060400160405280600c81526020017f4d6f7274616c205473756b610000000000000000000000000000000000000000815250905090565b600061062861062161105b565b8484611063565b6001905092915050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600654905090565b60085481565b600061067584848461122e565b6107158461068161105b565b84600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006106cb61105b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546107109190611f71565b611063565b600190509392505050565b60006009905090565b60006107cb61073661105b565b84846004600061074461105b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546107c69190611fa5565b611063565b6001905092915050565b6107dd61105b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461086a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086190612047565b60405180910390fd5b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60095481565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61099861105b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1c90612047565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60075481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600b81526020017f4d6f7274616c5473756b61000000000000000000000000000000000000000000815250905090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610c17610b8261105b565b848460046000610b9061105b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c129190611f71565b611063565b6001905092915050565b6000610c35610c2e61105b565b848461122e565b6001905092915050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610cce61105b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5290612047565b60405180910390fd5b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610e0c57600080fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b610ea161105b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2590612047565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f95906120d9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156110d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ca9061216b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611143576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113a906121fd565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516112219190611e06565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561129e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112959061228f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561130e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130590612321565b60405180910390fd5b60008111611351576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611348906123b3565b60405180910390fd5b611359610ae9565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156113c75750611397610ae9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156114215750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561147f576007548161143384610947565b61143d9190611fa5565b111561147e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147590612445565b60405180910390fd5b5b64012a05f20061148e30610947565b101580156114a95750600a60149054906101000a900460ff16155b80156115035750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156115425750611512610ae9565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156115815750611551610ae9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156115d4576001600a60146101000a81548160ff02191690831515021790555060006115ac30610947565b90506115b7816117a6565b6000600a60146101000a81548160ff021916908315150217905550505b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116239190611f71565b925050819055506000819050600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156116d35750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156116e5576116e2828561182a565b90505b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117349190611fa5565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516117989190611e06565b60405180910390a350505050565b60006117b182611959565b9050600081111561182657600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611824573d6000803e3d6000fd5b505b5050565b60008060646008548561183d9190612465565b61184791906124ee565b9050600060646009548661185b9190612465565b61186591906124ee565b905080826118739190611fa5565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118c19190611fa5565b925050819055503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83856119239190611fa5565b6040516119309190611e06565b60405180910390a38082866119459190611f71565b61194f9190611f71565b9250505092915050565b6000804790506000600267ffffffffffffffff81111561197c5761197b61251f565b5b6040519080825280602002602001820160405280156119aa5781602001602082028036833780820191505090505b50905030816000815181106119c2576119c161254e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a8d9190612592565b81600181518110611aa157611aa061254e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611b0830600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686611063565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478560008430426040518663ffffffff1660e01b8152600401611b6c9594939291906126b8565b600060405180830381600087803b158015611b8657600080fd5b505af1158015611b9a573d6000803e3d6000fd5b505050508147611baa9190611f71565b92505050919050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611bed578082015181840152602081019050611bd2565b83811115611bfc576000848401525b50505050565b6000601f19601f8301169050919050565b6000611c1e82611bb3565b611c288185611bbe565b9350611c38818560208601611bcf565b611c4181611c02565b840191505092915050565b60006020820190508181036000830152611c668184611c13565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611c9e82611c73565b9050919050565b611cae81611c93565b8114611cb957600080fd5b50565b600081359050611ccb81611ca5565b92915050565b6000819050919050565b611ce481611cd1565b8114611cef57600080fd5b50565b600081359050611d0181611cdb565b92915050565b60008060408385031215611d1e57611d1d611c6e565b5b6000611d2c85828601611cbc565b9250506020611d3d85828601611cf2565b9150509250929050565b60008115159050919050565b611d5c81611d47565b82525050565b6000602082019050611d776000830184611d53565b92915050565b6000819050919050565b6000611da2611d9d611d9884611c73565b611d7d565b611c73565b9050919050565b6000611db482611d87565b9050919050565b6000611dc682611da9565b9050919050565b611dd681611dbb565b82525050565b6000602082019050611df16000830184611dcd565b92915050565b611e0081611cd1565b82525050565b6000602082019050611e1b6000830184611df7565b92915050565b600080600060608486031215611e3a57611e39611c6e565b5b6000611e4886828701611cbc565b9350506020611e5986828701611cbc565b9250506040611e6a86828701611cf2565b9150509250925092565b600060ff82169050919050565b611e8a81611e74565b82525050565b6000602082019050611ea56000830184611e81565b92915050565b600060208284031215611ec157611ec0611c6e565b5b6000611ecf84828501611cbc565b91505092915050565b611ee181611c93565b82525050565b6000602082019050611efc6000830184611ed8565b92915050565b60008060408385031215611f1957611f18611c6e565b5b6000611f2785828601611cbc565b9250506020611f3885828601611cbc565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611f7c82611cd1565b9150611f8783611cd1565b925082821015611f9a57611f99611f42565b5b828203905092915050565b6000611fb082611cd1565b9150611fbb83611cd1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611ff057611fef611f42565b5b828201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612031602083611bbe565b915061203c82611ffb565b602082019050919050565b6000602082019050818103600083015261206081612024565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006120c3602683611bbe565b91506120ce82612067565b604082019050919050565b600060208201905081810360008301526120f2816120b6565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612155602483611bbe565b9150612160826120f9565b604082019050919050565b6000602082019050818103600083015261218481612148565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006121e7602283611bbe565b91506121f28261218b565b604082019050919050565b60006020820190508181036000830152612216816121da565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612279602583611bbe565b91506122848261221d565b604082019050919050565b600060208201905081810360008301526122a88161226c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061230b602383611bbe565b9150612316826122af565b604082019050919050565b6000602082019050818103600083015261233a816122fe565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061239d602983611bbe565b91506123a882612341565b604082019050919050565b600060208201905081810360008301526123cc81612390565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b600061242f602883611bbe565b915061243a826123d3565b604082019050919050565b6000602082019050818103600083015261245e81612422565b9050919050565b600061247082611cd1565b915061247b83611cd1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156124b4576124b3611f42565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006124f982611cd1565b915061250483611cd1565b925082612514576125136124bf565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061258c81611ca5565b92915050565b6000602082840312156125a8576125a7611c6e565b5b60006125b68482850161257d565b91505092915050565b6000819050919050565b60006125e46125df6125da846125bf565b611d7d565b611cd1565b9050919050565b6125f4816125c9565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61262f81611c93565b82525050565b60006126418383612626565b60208301905092915050565b6000602082019050919050565b6000612665826125fa565b61266f8185612605565b935061267a83612616565b8060005b838110156126ab5781516126928882612635565b975061269d8361264d565b92505060018101905061267e565b5085935050505092915050565b600060a0820190506126cd6000830188611df7565b6126da60208301876125eb565b81810360408301526126ec818661265a565b90506126fb6060830185611ed8565b6127086080830184611df7565b969550505050505056fea26469706673582212209f04d4c31a076ee77eba598d98aced2dd671302708a124ccd3d3106f5126db4364736f6c634300080a0033

Deployed Bytecode

0x60806040526004361061014f5760003560e01c806370a08231116100b6578063a457c2d71161006f578063a457c2d7146104a5578063a9059cbb146104e2578063dd62ed3e1461051f578063ea2f0b371461055c578063eee8c4be14610585578063f2fde38b146105ae57610156565b806370a08231146103a5578063715018a6146103e25780637d1db4a5146103f95780638da5cb5b1461042457806395d89b411461044f578063962dfc751461047a57610156565b8063313ce56711610108578063313ce5671461028157806339509351146102ac578063437823ec146102e957806349bd5a5e146103125780635342acb41461033d5780636bc87c3a1461037a57610156565b806306fdde031461015b578063095ea7b3146101865780631694505e146101c357806318160ddd146101ee57806322976e0d1461021957806323b872dd1461024457610156565b3661015657005b600080fd5b34801561016757600080fd5b506101706105d7565b60405161017d9190611c4c565b60405180910390f35b34801561019257600080fd5b506101ad60048036038101906101a89190611d07565b610614565b6040516101ba9190611d62565b60405180910390f35b3480156101cf57600080fd5b506101d8610632565b6040516101e59190611ddc565b60405180910390f35b3480156101fa57600080fd5b50610203610658565b6040516102109190611e06565b60405180910390f35b34801561022557600080fd5b5061022e610662565b60405161023b9190611e06565b60405180910390f35b34801561025057600080fd5b5061026b60048036038101906102669190611e21565b610668565b6040516102789190611d62565b60405180910390f35b34801561028d57600080fd5b50610296610720565b6040516102a39190611e90565b60405180910390f35b3480156102b857600080fd5b506102d360048036038101906102ce9190611d07565b610729565b6040516102e09190611d62565b60405180910390f35b3480156102f557600080fd5b50610310600480360381019061030b9190611eab565b6107d5565b005b34801561031e57600080fd5b506103276108c5565b6040516103349190611ee7565b60405180910390f35b34801561034957600080fd5b50610364600480360381019061035f9190611eab565b6108eb565b6040516103719190611d62565b60405180910390f35b34801561038657600080fd5b5061038f610941565b60405161039c9190611e06565b60405180910390f35b3480156103b157600080fd5b506103cc60048036038101906103c79190611eab565b610947565b6040516103d99190611e06565b60405180910390f35b3480156103ee57600080fd5b506103f7610990565b005b34801561040557600080fd5b5061040e610ae3565b60405161041b9190611e06565b60405180910390f35b34801561043057600080fd5b50610439610ae9565b6040516104469190611ee7565b60405180910390f35b34801561045b57600080fd5b50610464610b12565b6040516104719190611c4c565b60405180910390f35b34801561048657600080fd5b5061048f610b4f565b60405161049c9190611ee7565b60405180910390f35b3480156104b157600080fd5b506104cc60048036038101906104c79190611d07565b610b75565b6040516104d99190611d62565b60405180910390f35b3480156104ee57600080fd5b5061050960048036038101906105049190611d07565b610c21565b6040516105169190611d62565b60405180910390f35b34801561052b57600080fd5b5061054660048036038101906105419190611f02565b610c3f565b6040516105539190611e06565b60405180910390f35b34801561056857600080fd5b50610583600480360381019061057e9190611eab565b610cc6565b005b34801561059157600080fd5b506105ac60048036038101906105a79190611e21565b610db6565b005b3480156105ba57600080fd5b506105d560048036038101906105d09190611eab565b610e99565b005b60606040518060400160405280600c81526020017f4d6f7274616c205473756b610000000000000000000000000000000000000000815250905090565b600061062861062161105b565b8484611063565b6001905092915050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600654905090565b60085481565b600061067584848461122e565b6107158461068161105b565b84600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006106cb61105b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546107109190611f71565b611063565b600190509392505050565b60006009905090565b60006107cb61073661105b565b84846004600061074461105b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546107c69190611fa5565b611063565b6001905092915050565b6107dd61105b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461086a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086190612047565b60405180910390fd5b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60095481565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61099861105b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1c90612047565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60075481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600b81526020017f4d6f7274616c5473756b61000000000000000000000000000000000000000000815250905090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610c17610b8261105b565b848460046000610b9061105b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c129190611f71565b611063565b6001905092915050565b6000610c35610c2e61105b565b848461122e565b6001905092915050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610cce61105b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5290612047565b60405180910390fd5b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610e0c57600080fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b610ea161105b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2590612047565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f95906120d9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156110d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ca9061216b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611143576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113a906121fd565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516112219190611e06565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561129e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112959061228f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561130e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130590612321565b60405180910390fd5b60008111611351576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611348906123b3565b60405180910390fd5b611359610ae9565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156113c75750611397610ae9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156114215750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561147f576007548161143384610947565b61143d9190611fa5565b111561147e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147590612445565b60405180910390fd5b5b64012a05f20061148e30610947565b101580156114a95750600a60149054906101000a900460ff16155b80156115035750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156115425750611512610ae9565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156115815750611551610ae9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156115d4576001600a60146101000a81548160ff02191690831515021790555060006115ac30610947565b90506115b7816117a6565b6000600a60146101000a81548160ff021916908315150217905550505b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116239190611f71565b925050819055506000819050600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156116d35750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156116e5576116e2828561182a565b90505b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117349190611fa5565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516117989190611e06565b60405180910390a350505050565b60006117b182611959565b9050600081111561182657600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611824573d6000803e3d6000fd5b505b5050565b60008060646008548561183d9190612465565b61184791906124ee565b9050600060646009548661185b9190612465565b61186591906124ee565b905080826118739190611fa5565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118c19190611fa5565b925050819055503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83856119239190611fa5565b6040516119309190611e06565b60405180910390a38082866119459190611f71565b61194f9190611f71565b9250505092915050565b6000804790506000600267ffffffffffffffff81111561197c5761197b61251f565b5b6040519080825280602002602001820160405280156119aa5781602001602082028036833780820191505090505b50905030816000815181106119c2576119c161254e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a8d9190612592565b81600181518110611aa157611aa061254e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611b0830600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686611063565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478560008430426040518663ffffffff1660e01b8152600401611b6c9594939291906126b8565b600060405180830381600087803b158015611b8657600080fd5b505af1158015611b9a573d6000803e3d6000fd5b505050508147611baa9190611f71565b92505050919050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611bed578082015181840152602081019050611bd2565b83811115611bfc576000848401525b50505050565b6000601f19601f8301169050919050565b6000611c1e82611bb3565b611c288185611bbe565b9350611c38818560208601611bcf565b611c4181611c02565b840191505092915050565b60006020820190508181036000830152611c668184611c13565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611c9e82611c73565b9050919050565b611cae81611c93565b8114611cb957600080fd5b50565b600081359050611ccb81611ca5565b92915050565b6000819050919050565b611ce481611cd1565b8114611cef57600080fd5b50565b600081359050611d0181611cdb565b92915050565b60008060408385031215611d1e57611d1d611c6e565b5b6000611d2c85828601611cbc565b9250506020611d3d85828601611cf2565b9150509250929050565b60008115159050919050565b611d5c81611d47565b82525050565b6000602082019050611d776000830184611d53565b92915050565b6000819050919050565b6000611da2611d9d611d9884611c73565b611d7d565b611c73565b9050919050565b6000611db482611d87565b9050919050565b6000611dc682611da9565b9050919050565b611dd681611dbb565b82525050565b6000602082019050611df16000830184611dcd565b92915050565b611e0081611cd1565b82525050565b6000602082019050611e1b6000830184611df7565b92915050565b600080600060608486031215611e3a57611e39611c6e565b5b6000611e4886828701611cbc565b9350506020611e5986828701611cbc565b9250506040611e6a86828701611cf2565b9150509250925092565b600060ff82169050919050565b611e8a81611e74565b82525050565b6000602082019050611ea56000830184611e81565b92915050565b600060208284031215611ec157611ec0611c6e565b5b6000611ecf84828501611cbc565b91505092915050565b611ee181611c93565b82525050565b6000602082019050611efc6000830184611ed8565b92915050565b60008060408385031215611f1957611f18611c6e565b5b6000611f2785828601611cbc565b9250506020611f3885828601611cbc565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611f7c82611cd1565b9150611f8783611cd1565b925082821015611f9a57611f99611f42565b5b828203905092915050565b6000611fb082611cd1565b9150611fbb83611cd1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611ff057611fef611f42565b5b828201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612031602083611bbe565b915061203c82611ffb565b602082019050919050565b6000602082019050818103600083015261206081612024565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006120c3602683611bbe565b91506120ce82612067565b604082019050919050565b600060208201905081810360008301526120f2816120b6565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612155602483611bbe565b9150612160826120f9565b604082019050919050565b6000602082019050818103600083015261218481612148565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006121e7602283611bbe565b91506121f28261218b565b604082019050919050565b60006020820190508181036000830152612216816121da565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612279602583611bbe565b91506122848261221d565b604082019050919050565b600060208201905081810360008301526122a88161226c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061230b602383611bbe565b9150612316826122af565b604082019050919050565b6000602082019050818103600083015261233a816122fe565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061239d602983611bbe565b91506123a882612341565b604082019050919050565b600060208201905081810360008301526123cc81612390565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b600061242f602883611bbe565b915061243a826123d3565b604082019050919050565b6000602082019050818103600083015261245e81612422565b9050919050565b600061247082611cd1565b915061247b83611cd1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156124b4576124b3611f42565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006124f982611cd1565b915061250483611cd1565b925082612514576125136124bf565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061258c81611ca5565b92915050565b6000602082840312156125a8576125a7611c6e565b5b60006125b68482850161257d565b91505092915050565b6000819050919050565b60006125e46125df6125da846125bf565b611d7d565b611cd1565b9050919050565b6125f4816125c9565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61262f81611c93565b82525050565b60006126418383612626565b60208301905092915050565b6000602082019050919050565b6000612665826125fa565b61266f8185612605565b935061267a83612616565b8060005b838110156126ab5781516126928882612635565b975061269d8361264d565b92505060018101905061267e565b5085935050505092915050565b600060a0820190506126cd6000830188611df7565b6126da60208301876125eb565b81810360408301526126ec818661265a565b90506126fb6060830185611ed8565b6127086080830184611df7565b969550505050505056fea26469706673582212209f04d4c31a076ee77eba598d98aced2dd671302708a124ccd3d3106f5126db4364736f6c634300080a0033

Deployed Bytecode Sourcemap

24795:8503:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26613:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27444:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24926:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26890:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25553:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27613:266;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26799:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27887:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28347:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24974:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29327:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25592:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26993:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16303:148;;;;;;;;;;;;;:::i;:::-;;25257:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15660:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26704:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25631:77;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28110:225;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27118:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27293:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28470:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28692:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16606:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26613:83;26650:13;26683:5;;;;;;;;;;;;;;;;;26676:12;;26613:83;:::o;27444:161::-;27519:4;27536:39;27545:12;:10;:12::i;:::-;27559:7;27568:6;27536:8;:39::i;:::-;27593:4;27586:11;;27444:161;;;;:::o;24926:41::-;;;;;;;;;;;;;:::o;26890:95::-;26943:7;26970;;26963:14;;26890:95;:::o;25553:32::-;;;;:::o;27613:266::-;27711:4;27728:36;27738:6;27746:9;27757:6;27728:9;:36::i;:::-;27775:74;27784:6;27792:12;:10;:12::i;:::-;27842:6;27806:11;:19;27818:6;27806:19;;;;;;;;;;;;;;;:33;27826:12;:10;:12::i;:::-;27806:33;;;;;;;;;;;;;;;;:42;;;;:::i;:::-;27775:8;:74::i;:::-;27867:4;27860:11;;27613:266;;;;;:::o;26799:83::-;26840:5;25535:1;26858:16;;26799:83;:::o;27887:215::-;27975:4;27992:80;28001:12;:10;:12::i;:::-;28015:7;28061:10;28024:11;:25;28036:12;:10;:12::i;:::-;28024:25;;;;;;;;;;;;;;;:34;28050:7;28024:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;27992:8;:80::i;:::-;28090:4;28083:11;;27887:215;;;;:::o;28347:111::-;15882:12;:10;:12::i;:::-;15872:22;;:6;;;;;;;;;;:22;;;15864:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28446:4:::1;28416:18;:27;28435:7;28416:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;28347:111:::0;:::o;24974:28::-;;;;;;;;;;;;;:::o;29327:123::-;29391:4;29415:18;:27;29434:7;29415:27;;;;;;;;;;;;;;;;;;;;;;;;;29408:34;;29327:123;;;:::o;25592:32::-;;;;:::o;26993:117::-;27059:7;27086;:16;27094:7;27086:16;;;;;;;;;;;;;;;;27079:23;;26993:117;;;:::o;16303:148::-;15882:12;:10;:12::i;:::-;15872:22;;:6;;;;;;;;;;:22;;;15864:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16410:1:::1;16373:40;;16394:6;::::0;::::1;;;;;;;;16373:40;;;;;;;;;;;;16441:1;16424:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;16303:148::o:0;25257:46::-;;;;:::o;15660:79::-;15698:7;15725:6;;;;;;;;;;;15718:13;;15660:79;:::o;26704:87::-;26743:13;26776:7;;;;;;;;;;;;;;;;;26769:14;;26704:87;:::o;25631:77::-;;;;;;;;;;;;;:::o;28110:225::-;28203:4;28220:85;28229:12;:10;:12::i;:::-;28243:7;28289:15;28252:11;:25;28264:12;:10;:12::i;:::-;28252:25;;;;;;;;;;;;;;;:34;28278:7;28252:34;;;;;;;;;;;;;;;;:52;;;;:::i;:::-;28220:8;:85::i;:::-;28323:4;28316:11;;28110:225;;;;:::o;27118:167::-;27196:4;27213:42;27223:12;:10;:12::i;:::-;27237:9;27248:6;27213:9;:42::i;:::-;27273:4;27266:11;;27118:167;;;;:::o;27293:143::-;27374:7;27401:11;:18;27413:5;27401:18;;;;;;;;;;;;;;;:27;27420:7;27401:27;;;;;;;;;;;;;;;;27394:34;;27293:143;;;;:::o;28470:110::-;15882:12;:10;:12::i;:::-;15872:22;;:6;;;;;;;;;;:22;;;15864:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28567:5:::1;28537:18;:27;28556:7;28537:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;28470:110:::0;:::o;28692:201::-;28788:18;:30;28807:10;28788:30;;;;;;;;;;;;;;;;;;;;;;;;;28779:40;;;;;;28846:6;28830:7;:13;28838:4;28830:13;;;;;;;;;;;;;;;:22;;;;28878:6;28864:7;:11;28872:2;28864:11;;;;;;;;;;;;;;;:20;;;;28692:201;;;:::o;16606:244::-;15882:12;:10;:12::i;:::-;15872:22;;:6;;;;;;;;;;:22;;;15864:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16715:1:::1;16695:22;;:8;:22;;;;16687:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;16805:8;16776:38;;16797:6;::::0;::::1;;;;;;;;16776:38;;;;;;;;;;;;16834:8;16825:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;16606:244:::0;:::o;8065:115::-;8118:15;8161:10;8146:26;;8065:115;:::o;29462:337::-;29572:1;29555:19;;:5;:19;;;;29547:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29653:1;29634:21;;:7;:21;;;;29626:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29737:6;29707:11;:18;29719:5;29707:18;;;;;;;;;;;;;;;:27;29726:7;29707:27;;;;;;;;;;;;;;;:36;;;;29775:7;29759:32;;29768:5;29759:32;;;29784:6;29759:32;;;;;;:::i;:::-;;;;;;;;29462:337;;;:::o;29807:1280::-;29945:1;29929:18;;:4;:18;;;;29921:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30022:1;30008:16;;:2;:16;;;;30000:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;30092:1;30083:6;:10;30075:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;30172:7;:5;:7::i;:::-;30164:15;;:4;:15;;;;:32;;;;;30189:7;:5;:7::i;:::-;30183:13;;:2;:13;;;;30164:32;:55;;;;;30206:13;;;;;;;;;;;30200:19;;:2;:19;;;;30164:55;30161:164;;;30268:12;;30258:6;30242:13;30252:2;30242:9;:13::i;:::-;:22;;;;:::i;:::-;:38;;30234:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;30161:164;25363:9;30364:24;30382:4;30364:9;:24::i;:::-;:49;;:62;;;;;30418:8;;;;;;;;;;;30417:9;30364:62;:87;;;;;30438:13;;;;;;;;;;;30430:21;;:4;:21;;;;30364:87;:106;;;;;30463:7;:5;:7::i;:::-;30455:15;;:4;:15;;;;30364:106;:123;;;;;30480:7;:5;:7::i;:::-;30474:13;;:2;:13;;;;30364:123;30360:305;;;30515:4;30504:8;;:15;;;;;;;;;;;;;;;;;;30534:18;30555:24;30573:4;30555:9;:24::i;:::-;30534:45;;30594:28;30611:10;30594:16;:28::i;:::-;30648:5;30637:8;;:16;;;;;;;;;;;;;;;;;;30489:176;30360:305;30702:6;30685:7;:13;30693:4;30685:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;30719:22;30744:6;30719:31;;30859:18;:24;30878:4;30859:24;;;;;;;;;;;;;;;;;;;;;;;;;30858:25;:52;;;;;30888:18;:22;30907:2;30888:22;;;;;;;;;;;;;;;;;;;;;;;;;30887:23;30858:52;30855:124;;;30943:24;30954:6;30962:4;30943:10;:24::i;:::-;30926:41;;30855:124;31015:14;31000:7;:11;31008:2;31000:11;;;;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;;;;;;;31060:2;31045:34;;31054:4;31045:34;;;31064:14;31045:34;;;;;;:::i;:::-;;;;;;;;29910:1177;29807:1280;;;:::o;31105:212::-;31167:17;31187:24;31204:6;31187:16;:24::i;:::-;31167:44;;31248:1;31236:9;:13;31232:77;;;31272:16;;;;;;;;;;;31264:34;;:45;31299:9;31264:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31232:77;31156:161;31105:212;:::o;28904:405::-;28971:7;28991:20;29039:3;29023:13;;29014:6;:22;;;;:::i;:::-;:28;;;;:::i;:::-;28991:51;;29054:20;29102:3;29086:13;;29077:6;:22;;;;:::i;:::-;:28;;;;:::i;:::-;29054:51;;29158:12;29143;:27;;;;:::i;:::-;29117:7;:22;29133:4;29117:22;;;;;;;;;;;;;;;;:53;;;;;;;:::i;:::-;;;;;;;;29210:4;29186:59;;29196:4;29186:59;;;29232:12;29217;:27;;;;:::i;:::-;29186:59;;;;;;:::i;:::-;;;;;;;;29288:12;29273;29264:6;:21;;;;:::i;:::-;:36;;;;:::i;:::-;29256:45;;;;28904:405;;;;:::o;31881:722::-;31945:7;31965:22;31990:21;31965:46;;32082:21;32120:1;32106:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32082:40;;32151:4;32133;32138:1;32133:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;32177:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32167:4;32172:1;32167:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;32212:62;32229:4;32244:15;;;;;;;;;;;32262:11;32212:8;:62::i;:::-;32313:15;;;;;;;;;;;:66;;;32394:11;32420:1;32464:4;32491;32511:15;32313:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32580:14;32556:21;:38;;;;:::i;:::-;32548:47;;;;31881:722;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:60::-;3522:3;3543:5;3536:12;;3494:60;;;:::o;3560:142::-;3610:9;3643:53;3661:34;3670:24;3688:5;3670:24;:::i;:::-;3661:34;:::i;:::-;3643:53;:::i;:::-;3630:66;;3560:142;;;:::o;3708:126::-;3758:9;3791:37;3822:5;3791:37;:::i;:::-;3778:50;;3708:126;;;:::o;3840:153::-;3917:9;3950:37;3981:5;3950:37;:::i;:::-;3937:50;;3840:153;;;:::o;3999:185::-;4113:64;4171:5;4113:64;:::i;:::-;4108:3;4101:77;3999:185;;:::o;4190:276::-;4310:4;4348:2;4337:9;4333:18;4325:26;;4361:98;4456:1;4445:9;4441:17;4432:6;4361:98;:::i;:::-;4190:276;;;;:::o;4472:118::-;4559:24;4577:5;4559:24;:::i;:::-;4554:3;4547:37;4472:118;;:::o;4596:222::-;4689:4;4727:2;4716:9;4712:18;4704:26;;4740:71;4808:1;4797:9;4793:17;4784:6;4740:71;:::i;:::-;4596:222;;;;:::o;4824:619::-;4901:6;4909;4917;4966:2;4954:9;4945:7;4941:23;4937:32;4934:119;;;4972:79;;:::i;:::-;4934:119;5092:1;5117:53;5162:7;5153:6;5142:9;5138:22;5117:53;:::i;:::-;5107:63;;5063:117;5219:2;5245:53;5290:7;5281:6;5270:9;5266:22;5245:53;:::i;:::-;5235:63;;5190:118;5347:2;5373:53;5418:7;5409:6;5398:9;5394:22;5373:53;:::i;:::-;5363:63;;5318:118;4824:619;;;;;:::o;5449:86::-;5484:7;5524:4;5517:5;5513:16;5502:27;;5449:86;;;:::o;5541:112::-;5624:22;5640:5;5624:22;:::i;:::-;5619:3;5612:35;5541:112;;:::o;5659:214::-;5748:4;5786:2;5775:9;5771:18;5763:26;;5799:67;5863:1;5852:9;5848:17;5839:6;5799:67;:::i;:::-;5659:214;;;;:::o;5879:329::-;5938:6;5987:2;5975:9;5966:7;5962:23;5958:32;5955:119;;;5993:79;;:::i;:::-;5955:119;6113:1;6138:53;6183:7;6174:6;6163:9;6159:22;6138:53;:::i;:::-;6128:63;;6084:117;5879:329;;;;:::o;6214:118::-;6301:24;6319:5;6301:24;:::i;:::-;6296:3;6289:37;6214:118;;:::o;6338:222::-;6431:4;6469:2;6458:9;6454:18;6446:26;;6482:71;6550:1;6539:9;6535:17;6526:6;6482:71;:::i;:::-;6338:222;;;;:::o;6566:474::-;6634:6;6642;6691:2;6679:9;6670:7;6666:23;6662:32;6659:119;;;6697:79;;:::i;:::-;6659:119;6817:1;6842:53;6887:7;6878:6;6867:9;6863:22;6842:53;:::i;:::-;6832:63;;6788:117;6944:2;6970:53;7015:7;7006:6;6995:9;6991:22;6970:53;:::i;:::-;6960:63;;6915:118;6566:474;;;;;:::o;7046:180::-;7094:77;7091:1;7084:88;7191:4;7188:1;7181:15;7215:4;7212:1;7205:15;7232:191;7272:4;7292:20;7310:1;7292:20;:::i;:::-;7287:25;;7326:20;7344:1;7326:20;:::i;:::-;7321:25;;7365:1;7362;7359:8;7356:34;;;7370:18;;:::i;:::-;7356:34;7415:1;7412;7408:9;7400:17;;7232:191;;;;:::o;7429:305::-;7469:3;7488:20;7506:1;7488:20;:::i;:::-;7483:25;;7522:20;7540:1;7522:20;:::i;:::-;7517:25;;7676:1;7608:66;7604:74;7601:1;7598:81;7595:107;;;7682:18;;:::i;:::-;7595:107;7726:1;7723;7719:9;7712:16;;7429:305;;;;:::o;7740:182::-;7880:34;7876:1;7868:6;7864:14;7857:58;7740:182;:::o;7928:366::-;8070:3;8091:67;8155:2;8150:3;8091:67;:::i;:::-;8084:74;;8167:93;8256:3;8167:93;:::i;:::-;8285:2;8280:3;8276:12;8269:19;;7928:366;;;:::o;8300:419::-;8466:4;8504:2;8493:9;8489:18;8481:26;;8553:9;8547:4;8543:20;8539:1;8528:9;8524:17;8517:47;8581:131;8707:4;8581:131;:::i;:::-;8573:139;;8300:419;;;:::o;8725:225::-;8865:34;8861:1;8853:6;8849:14;8842:58;8934:8;8929:2;8921:6;8917:15;8910:33;8725:225;:::o;8956:366::-;9098:3;9119:67;9183:2;9178:3;9119:67;:::i;:::-;9112:74;;9195:93;9284:3;9195:93;:::i;:::-;9313:2;9308:3;9304:12;9297:19;;8956:366;;;:::o;9328:419::-;9494:4;9532:2;9521:9;9517:18;9509:26;;9581:9;9575:4;9571:20;9567:1;9556:9;9552:17;9545:47;9609:131;9735:4;9609:131;:::i;:::-;9601:139;;9328:419;;;:::o;9753:223::-;9893:34;9889:1;9881:6;9877:14;9870:58;9962:6;9957:2;9949:6;9945:15;9938:31;9753:223;:::o;9982:366::-;10124:3;10145:67;10209:2;10204:3;10145:67;:::i;:::-;10138:74;;10221:93;10310:3;10221:93;:::i;:::-;10339:2;10334:3;10330:12;10323:19;;9982:366;;;:::o;10354:419::-;10520:4;10558:2;10547:9;10543:18;10535:26;;10607:9;10601:4;10597:20;10593:1;10582:9;10578:17;10571:47;10635:131;10761:4;10635:131;:::i;:::-;10627:139;;10354:419;;;:::o;10779:221::-;10919:34;10915:1;10907:6;10903:14;10896:58;10988:4;10983:2;10975:6;10971:15;10964:29;10779:221;:::o;11006:366::-;11148:3;11169:67;11233:2;11228:3;11169:67;:::i;:::-;11162:74;;11245:93;11334:3;11245:93;:::i;:::-;11363:2;11358:3;11354:12;11347:19;;11006:366;;;:::o;11378:419::-;11544:4;11582:2;11571:9;11567:18;11559:26;;11631:9;11625:4;11621:20;11617:1;11606:9;11602:17;11595:47;11659:131;11785:4;11659:131;:::i;:::-;11651:139;;11378:419;;;:::o;11803:224::-;11943:34;11939:1;11931:6;11927:14;11920:58;12012:7;12007:2;11999:6;11995:15;11988:32;11803:224;:::o;12033:366::-;12175:3;12196:67;12260:2;12255:3;12196:67;:::i;:::-;12189:74;;12272:93;12361:3;12272:93;:::i;:::-;12390:2;12385:3;12381:12;12374:19;;12033:366;;;:::o;12405:419::-;12571:4;12609:2;12598:9;12594:18;12586:26;;12658:9;12652:4;12648:20;12644:1;12633:9;12629:17;12622:47;12686:131;12812:4;12686:131;:::i;:::-;12678:139;;12405:419;;;:::o;12830:222::-;12970:34;12966:1;12958:6;12954:14;12947:58;13039:5;13034:2;13026:6;13022:15;13015:30;12830:222;:::o;13058:366::-;13200:3;13221:67;13285:2;13280:3;13221:67;:::i;:::-;13214:74;;13297:93;13386:3;13297:93;:::i;:::-;13415:2;13410:3;13406:12;13399:19;;13058:366;;;:::o;13430:419::-;13596:4;13634:2;13623:9;13619:18;13611:26;;13683:9;13677:4;13673:20;13669:1;13658:9;13654:17;13647:47;13711:131;13837:4;13711:131;:::i;:::-;13703:139;;13430:419;;;:::o;13855:228::-;13995:34;13991:1;13983:6;13979:14;13972:58;14064:11;14059:2;14051:6;14047:15;14040:36;13855:228;:::o;14089:366::-;14231:3;14252:67;14316:2;14311:3;14252:67;:::i;:::-;14245:74;;14328:93;14417:3;14328:93;:::i;:::-;14446:2;14441:3;14437:12;14430:19;;14089:366;;;:::o;14461:419::-;14627:4;14665:2;14654:9;14650:18;14642:26;;14714:9;14708:4;14704:20;14700:1;14689:9;14685:17;14678:47;14742:131;14868:4;14742:131;:::i;:::-;14734:139;;14461:419;;;:::o;14886:227::-;15026:34;15022:1;15014:6;15010:14;15003:58;15095:10;15090:2;15082:6;15078:15;15071:35;14886:227;:::o;15119:366::-;15261:3;15282:67;15346:2;15341:3;15282:67;:::i;:::-;15275:74;;15358:93;15447:3;15358:93;:::i;:::-;15476:2;15471:3;15467:12;15460:19;;15119:366;;;:::o;15491:419::-;15657:4;15695:2;15684:9;15680:18;15672:26;;15744:9;15738:4;15734:20;15730:1;15719:9;15715:17;15708:47;15772:131;15898:4;15772:131;:::i;:::-;15764:139;;15491:419;;;:::o;15916:348::-;15956:7;15979:20;15997:1;15979:20;:::i;:::-;15974:25;;16013:20;16031:1;16013:20;:::i;:::-;16008:25;;16201:1;16133:66;16129:74;16126:1;16123:81;16118:1;16111:9;16104:17;16100:105;16097:131;;;16208:18;;:::i;:::-;16097:131;16256:1;16253;16249:9;16238:20;;15916:348;;;;:::o;16270:180::-;16318:77;16315:1;16308:88;16415:4;16412:1;16405:15;16439:4;16436:1;16429:15;16456:185;16496:1;16513:20;16531:1;16513:20;:::i;:::-;16508:25;;16547:20;16565:1;16547:20;:::i;:::-;16542:25;;16586:1;16576:35;;16591:18;;:::i;:::-;16576:35;16633:1;16630;16626:9;16621:14;;16456:185;;;;:::o;16647:180::-;16695:77;16692:1;16685:88;16792:4;16789:1;16782:15;16816:4;16813:1;16806:15;16833:180;16881:77;16878:1;16871:88;16978:4;16975:1;16968:15;17002:4;16999:1;16992:15;17019:143;17076:5;17107:6;17101:13;17092:22;;17123:33;17150:5;17123:33;:::i;:::-;17019:143;;;;:::o;17168:351::-;17238:6;17287:2;17275:9;17266:7;17262:23;17258:32;17255:119;;;17293:79;;:::i;:::-;17255:119;17413:1;17438:64;17494:7;17485:6;17474:9;17470:22;17438:64;:::i;:::-;17428:74;;17384:128;17168:351;;;;:::o;17525:85::-;17570:7;17599:5;17588:16;;17525:85;;;:::o;17616:158::-;17674:9;17707:61;17725:42;17734:32;17760:5;17734:32;:::i;:::-;17725:42;:::i;:::-;17707:61;:::i;:::-;17694:74;;17616:158;;;:::o;17780:147::-;17875:45;17914:5;17875:45;:::i;:::-;17870:3;17863:58;17780:147;;:::o;17933:114::-;18000:6;18034:5;18028:12;18018:22;;17933:114;;;:::o;18053:184::-;18152:11;18186:6;18181:3;18174:19;18226:4;18221:3;18217:14;18202:29;;18053:184;;;;:::o;18243:132::-;18310:4;18333:3;18325:11;;18363:4;18358:3;18354:14;18346:22;;18243:132;;;:::o;18381:108::-;18458:24;18476:5;18458:24;:::i;:::-;18453:3;18446:37;18381:108;;:::o;18495:179::-;18564:10;18585:46;18627:3;18619:6;18585:46;:::i;:::-;18663:4;18658:3;18654:14;18640:28;;18495:179;;;;:::o;18680:113::-;18750:4;18782;18777:3;18773:14;18765:22;;18680:113;;;:::o;18829:732::-;18948:3;18977:54;19025:5;18977:54;:::i;:::-;19047:86;19126:6;19121:3;19047:86;:::i;:::-;19040:93;;19157:56;19207:5;19157:56;:::i;:::-;19236:7;19267:1;19252:284;19277:6;19274:1;19271:13;19252:284;;;19353:6;19347:13;19380:63;19439:3;19424:13;19380:63;:::i;:::-;19373:70;;19466:60;19519:6;19466:60;:::i;:::-;19456:70;;19312:224;19299:1;19296;19292:9;19287:14;;19252:284;;;19256:14;19552:3;19545:10;;18953:608;;;18829:732;;;;:::o;19567:831::-;19830:4;19868:3;19857:9;19853:19;19845:27;;19882:71;19950:1;19939:9;19935:17;19926:6;19882:71;:::i;:::-;19963:80;20039:2;20028:9;20024:18;20015:6;19963:80;:::i;:::-;20090:9;20084:4;20080:20;20075:2;20064:9;20060:18;20053:48;20118:108;20221:4;20212:6;20118:108;:::i;:::-;20110:116;;20236:72;20304:2;20293:9;20289:18;20280:6;20236:72;:::i;:::-;20318:73;20386:3;20375:9;20371:19;20362:6;20318:73;:::i;:::-;19567:831;;;;;;;;:::o

Swarm Source

ipfs://9f04d4c31a076ee77eba598d98aced2dd671302708a124ccd3d3106f5126db43
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.