ETH Price: $2,508.05 (+0.25%)

Contract

0x3ECcd83C627c8E2dAfbE7B902766ec7e984c4342
 

Overview

ETH Balance

0.002076295268416249 ETH

Eth Value

$5.21 (@ $2,508.05/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve210405792024-10-25 5:36:478 days ago1729834607IN
0x3ECcd83C...e984c4342
0 ETH0.000118324.88050266
Transfer198216652024-05-08 0:08:23178 days ago1715126903IN
0x3ECcd83C...e984c4342
0 ETH0.000562165.67485018
Transfer184038212023-10-22 5:41:35377 days ago1697953295IN
0x3ECcd83C...e984c4342
0 ETH0.000336546.2270848
Transfer184038162023-10-22 5:40:35377 days ago1697953235IN
0x3ECcd83C...e984c4342
0 ETH0.000385786.4550677
Approve183899522023-10-20 7:08:47379 days ago1697785727IN
0x3ECcd83C...e984c4342
0 ETH0.000353157.62937074
Approve183899392023-10-20 7:06:11379 days ago1697785571IN
0x3ECcd83C...e984c4342
0 ETH0.000347017.50652994
Approve182061812023-09-24 14:13:59404 days ago1695564839IN
0x3ECcd83C...e984c4342
0 ETH0.000372628.01883579
Transfer181862202023-09-21 19:05:35407 days ago1695323135IN
0x3ECcd83C...e984c4342
0 ETH0.0019264228.41256654
Transfer181862132023-09-21 19:04:11407 days ago1695323051IN
0x3ECcd83C...e984c4342
0 ETH0.0021065825.77366059
Approve181800552023-09-20 22:22:35408 days ago1695248555IN
0x3ECcd83C...e984c4342
0 ETH0.0004165514.27692319
Approve181751962023-09-20 6:03:47409 days ago1695189827IN
0x3ECcd83C...e984c4342
0 ETH0.000443639.59896902
Approve181751362023-09-20 5:51:35409 days ago1695189095IN
0x3ECcd83C...e984c4342
0 ETH0.000382288.22671151
Approve181737032023-09-20 1:02:47409 days ago1695171767IN
0x3ECcd83C...e984c4342
0 ETH0.0004941310.69723398
Approve181736952023-09-20 1:01:11409 days ago1695171671IN
0x3ECcd83C...e984c4342
0 ETH0.0005358311.53107941
Approve181736912023-09-20 1:00:23409 days ago1695171623IN
0x3ECcd83C...e984c4342
0 ETH0.0005126511.03223931
Approve181736842023-09-20 0:58:59409 days ago1695171539IN
0x3ECcd83C...e984c4342
0 ETH0.000464089.98698918
Approve181736782023-09-20 0:57:47409 days ago1695171467IN
0x3ECcd83C...e984c4342
0 ETH0.0004688310.08926389
Approve181736732023-09-20 0:56:47409 days ago1695171407IN
0x3ECcd83C...e984c4342
0 ETH0.0003230511.07694196
Approve181736482023-09-20 0:51:47409 days ago1695171107IN
0x3ECcd83C...e984c4342
0 ETH0.0004936710.68177492
Approve181731062023-09-19 23:02:23409 days ago1695164543IN
0x3ECcd83C...e984c4342
0 ETH0.000784916.9830363
Approve181730482023-09-19 22:50:47409 days ago1695163847IN
0x3ECcd83C...e984c4342
0 ETH0.0004866110.47189132
Approve181730262023-09-19 22:46:23409 days ago1695163583IN
0x3ECcd83C...e984c4342
0 ETH0.0005194411.22757019
Approve181729992023-09-19 22:40:59409 days ago1695163259IN
0x3ECcd83C...e984c4342
0 ETH0.000433479.32833298
Approve181729912023-09-19 22:39:23409 days ago1695163163IN
0x3ECcd83C...e984c4342
0 ETH0.0004579.83470124
Approve181722982023-09-19 20:19:59409 days ago1695154799IN
0x3ECcd83C...e984c4342
0 ETH0.0008325917.91730503
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
183900102023-10-20 7:20:23379 days ago1697786423
0x3ECcd83C...e984c4342
0.00415259 ETH
183900102023-10-20 7:20:23379 days ago1697786423
0x3ECcd83C...e984c4342
0.0035685 ETH
181751992023-09-20 6:04:23409 days ago1695189863
0x3ECcd83C...e984c4342
0.00532076 ETH
181751992023-09-20 6:04:23409 days ago1695189863
0x3ECcd83C...e984c4342
0.00461473 ETH
181737052023-09-20 1:03:11409 days ago1695171791
0x3ECcd83C...e984c4342
0.00673283 ETH
181737052023-09-20 1:03:11409 days ago1695171791
0x3ECcd83C...e984c4342
0.00566874 ETH
181736922023-09-20 1:00:35409 days ago1695171635
0x3ECcd83C...e984c4342
0.00886102 ETH
181736922023-09-20 1:00:35409 days ago1695171635
0x3ECcd83C...e984c4342
0.00713516 ETH
181736862023-09-20 0:59:23409 days ago1695171563
0x3ECcd83C...e984c4342
0.01231274 ETH
181736862023-09-20 0:59:23409 days ago1695171563
0x3ECcd83C...e984c4342
0.00917767 ETH
181730492023-09-19 22:50:59409 days ago1695163859
0x3ECcd83C...e984c4342
0.01858288 ETH
181730492023-09-19 22:50:59409 days ago1695163859
0x3ECcd83C...e984c4342
0.01400777 ETH
181730042023-09-19 22:41:59409 days ago1695163319
0x3ECcd83C...e984c4342
0.02773309 ETH
181730042023-09-19 22:41:59409 days ago1695163319
0x3ECcd83C...e984c4342
0.01979622 ETH
181730012023-09-19 22:41:23409 days ago1695163283
0x3ECcd83C...e984c4342
0.02773309 ETH
181730012023-09-19 22:41:23409 days ago1695163283
0x3ECcd83C...e984c4342
0.01979622 ETH
181729662023-09-19 22:34:23409 days ago1695162863
0x3ECcd83C...e984c4342
0.04360683 ETH
181729662023-09-19 22:34:23409 days ago1695162863
0x3ECcd83C...e984c4342
0.03311797 ETH
181701342023-09-19 13:03:59409 days ago1695128639
0x3ECcd83C...e984c4342
0.06458455 ETH
181701342023-09-19 13:03:59409 days ago1695128639
0x3ECcd83C...e984c4342
0.05707207 ETH
181700202023-09-19 12:41:11409 days ago1695127271
0x3ECcd83C...e984c4342
0.0796095 ETH
181700202023-09-19 12:41:11409 days ago1695127271
0x3ECcd83C...e984c4342
0.06776765 ETH
181656552023-09-18 21:59:35410 days ago1695074375
0x3ECcd83C...e984c4342
0.10329319 ETH
181656552023-09-18 21:59:35410 days ago1695074375
0x3ECcd83C...e984c4342
0.1041012 ETH
181637922023-09-18 15:44:35410 days ago1695051875
0x3ECcd83C...e984c4342
0.10167716 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TAU

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-09-15
*/

/**
// Inspired by Elon Musks Son Techno Mechanicus $TAU and the 19th letter of the Greek alphabet $TAU.
//                 
// $$$$$$$$\  $$$$$$\  $$\   $$\ 
// \__$$  __|$$  __$$\ $$ |  $$ |
//    $$ |   $$ /  $$ |$$ |  $$ |
//    $$ |   $$$$$$$$ |$$ |  $$ |
//    $$ |   $$  __$$ |$$ |  $$ |
//    $$ |   $$ |  $$ |$$ |  $$ |
//    $$ |   $$ |  $$ |\$$$$$$  |
//    \__|   \__|  \__| \______/                               
//                                                                                                         
// Telegram: https://t.me/technomechanicus_tau
// Twitter: https://twitter.com/MechanicusTau
// Website: technomechanicus.website                                                      
*/
//
// SPDX-License-Identifier: UNLICENSED

pragma solidity ^0.8.19;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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 Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        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 {
        _transferOwnership(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");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

interface IUniswapV2Router02 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address UNISWAP_V2_PAIR);
}

contract TAU is IERC20, Ownable {
    /* -------------------------------------------------------------------------- */
    /*                                   events                                   */
    /* -------------------------------------------------------------------------- */
    event Reflect(uint256 amountReflected, uint256 newTotalProportion);

    /* -------------------------------------------------------------------------- */
    /*                                  constants                                 */
    /* -------------------------------------------------------------------------- */
    address constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address constant ZERO = 0x0000000000000000000000000000000000000000;

    uint256 constant MAX_FEE = 25;

    /* -------------------------------------------------------------------------- */
    /*                                   states                                   */
    /* -------------------------------------------------------------------------- */
    IUniswapV2Router02 public constant UNISWAP_V2_ROUTER =
        IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    address public immutable UNISWAP_V2_PAIR;

    struct Fee {
        uint8 reflection;
        uint8 marketing;
        uint8 lp;
        uint8 buyback;
        uint8 burn;
        uint128 total;
    }

    string _name = "TECHNO MECHANICUS";
    string _symbol = "TAU";

    uint256 _totalSupply = 1_000_000_000 ether;
    uint256 public _maxTxAmount = _totalSupply * 2 / 100;

    /* rOwned = ratio of tokens owned relative to circulating supply (NOT total supply, since circulating <= total) */
    mapping(address => uint256) public _rOwned;
    uint256 public _totalProportion = _totalSupply;

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

    bool public limitsEnabled = true;
    mapping(address => bool) isFeeExempt;
    mapping(address => bool) isTxLimitExempt;

    Fee public buyFee = Fee({reflection: 1, marketing: 4, lp: 0, buyback: 0, burn: 0, total: 5});
    Fee public sellFee = Fee({reflection: 1, marketing: 4, lp: 0, buyback: 0, burn: 0, total: 5});

    address private marketingFeeReceiver;
    address private lpFeeReceiver;
    address private buybackFeeReceiver;

    bool public claimingFees = true;
    uint256 public swapThreshold = (_totalSupply * 2) / 1000;
    bool inSwap;
    mapping(address => bool) public blacklists;

    /* -------------------------------------------------------------------------- */
    /*                                  modifiers                                 */
    /* -------------------------------------------------------------------------- */
    modifier swapping() {
        inSwap = true;
        _;
        inSwap = false;
    }

    /* -------------------------------------------------------------------------- */
    /*                                 constructor                                */
    /* -------------------------------------------------------------------------- */
    constructor() {
        // create uniswap pair
        address _uniswapPair =
            IUniswapV2Factory(UNISWAP_V2_ROUTER.factory()).createPair(address(this), UNISWAP_V2_ROUTER.WETH());
        UNISWAP_V2_PAIR = _uniswapPair;

        _allowances[address(this)][address(UNISWAP_V2_ROUTER)] = type(uint256).max;
        _allowances[address(this)][tx.origin] = type(uint256).max;

        isTxLimitExempt[address(this)] = true;
        isTxLimitExempt[address(UNISWAP_V2_ROUTER)] = true;
        isTxLimitExempt[_uniswapPair] = true;
        isTxLimitExempt[tx.origin] = true;
        isFeeExempt[tx.origin] = true;

        marketingFeeReceiver = 0x7409dCB2CFf4867e4d75BBD588D3bd68bD7c44a2;
        lpFeeReceiver = 0x7409dCB2CFf4867e4d75BBD588D3bd68bD7c44a2;
        buybackFeeReceiver = 0x7409dCB2CFf4867e4d75BBD588D3bd68bD7c44a2;

        _rOwned[tx.origin] = _totalSupply;
        emit Transfer(address(0), tx.origin, _totalSupply);
    }

    receive() external payable {}

    /* -------------------------------------------------------------------------- */
    /*                                    ERC20                                   */
    /* -------------------------------------------------------------------------- */
    function approve(address spender, uint256 amount) public override returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function approveMax(address spender) external returns (bool) {
        return approve(spender, type(uint256).max);
    }

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        return _transferFrom(msg.sender, recipient, amount);
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if (_allowances[sender][msg.sender] != type(uint256).max) {
            require(_allowances[sender][msg.sender] >= amount, "ERC20: insufficient allowance");
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender] - amount;
        }

        return _transferFrom(sender, recipient, amount);
    }

    /* -------------------------------------------------------------------------- */
    /*                                    views                                   */
    /* -------------------------------------------------------------------------- */
    function totalSupply() external view override returns (uint256) {
        return _totalSupply;
    }

    function decimals() external pure returns (uint8) {
        return 18;
    }

    function name() external view returns (string memory) {
        return _name;
    }

    function symbol() external view returns (string memory) {
        return _symbol;
    }

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

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

    function tokensToProportion(uint256 tokens) public view returns (uint256) {
        return tokens * _totalProportion / _totalSupply;
    }

    function tokenFromReflection(uint256 proportion) public view returns (uint256) {
        return proportion * _totalSupply / _totalProportion;
    }

    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply - balanceOf(DEAD) - balanceOf(ZERO);
    }

    /* -------------------------------------------------------------------------- */
    /*                                   owners                                   */
    /* -------------------------------------------------------------------------- */
    function clearStuckBalance() external onlyOwner {
        (bool success,) = payable(msg.sender).call{value: address(this).balance}("");
        require(success);
    }

    function clearStuckToken() external onlyOwner {
        _transferFrom(address(this), msg.sender, balanceOf(address(this)));
    }

    function setSwapBackSettings(bool _enabled, uint256 _amount) external onlyOwner {
        claimingFees = _enabled;
        swapThreshold = _amount;
    }

    function changeFees(
        uint8 reflectionFeeBuy,
        uint8 marketingFeeBuy,
        uint8 lpFeeBuy,
        uint8 buybackFeeBuy,
        uint8 burnFeeBuy,
        uint8 reflectionFeeSell,
        uint8 marketingFeeSell,
        uint8 lpFeeSell,
        uint8 buybackFeeSell,
        uint8 burnFeeSell
    ) external onlyOwner {
        uint128 __totalBuyFee = reflectionFeeBuy + marketingFeeBuy + lpFeeBuy + buybackFeeBuy + burnFeeBuy;
        uint128 __totalSellFee = reflectionFeeSell + marketingFeeSell + lpFeeSell + buybackFeeSell + burnFeeSell;

        require(__totalBuyFee <= MAX_FEE, "Buy fees too high");
        require(__totalSellFee <= MAX_FEE, "Sell fees too high");

        buyFee = Fee({
            reflection: reflectionFeeBuy,
            marketing: reflectionFeeBuy,
            lp: reflectionFeeBuy,
            buyback: reflectionFeeBuy,
            burn: burnFeeBuy,
            total: __totalBuyFee
        });

        sellFee = Fee({
            reflection: reflectionFeeSell,
            marketing: reflectionFeeSell,
            lp: reflectionFeeSell,
            buyback: reflectionFeeSell,
            burn: burnFeeSell,
            total: __totalSellFee
        });
    }

    function setIsFeeExempt(address holder, bool exempt) external onlyOwner {
        isFeeExempt[holder] = exempt;
    }

    function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner {
        isTxLimitExempt[holder] = exempt;
    }

    function setFeeReceivers(address m_, address lp_, address b_) external onlyOwner {
        marketingFeeReceiver = m_;
        lpFeeReceiver = lp_;
        buybackFeeReceiver = b_;
    }

    function setMaxTxBasisPoint(uint256 p_) external onlyOwner {
        _maxTxAmount = _totalSupply * p_ / 10000;
    }

    function setLimitsEnabled(bool e_) external onlyOwner {
        limitsEnabled = e_;
    }

    function blacklist(address _address, bool _isBlacklisting) external onlyOwner {
        blacklists[_address] = _isBlacklisting;
    }

    /* -------------------------------------------------------------------------- */
    /*                                   private                                  */
    /* -------------------------------------------------------------------------- */
    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        require(!blacklists[recipient] && !blacklists[sender], "Blacklisted");

        if (inSwap) {
            return _basicTransfer(sender, recipient, amount);
        }

        if (limitsEnabled && !isTxLimitExempt[sender] && !isTxLimitExempt[recipient]) {
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
        }

        if (_shouldSwapBack()) {
            _swapBack();
        }

        uint256 proportionAmount = tokensToProportion(amount);
        require(_rOwned[sender] >= proportionAmount, "Insufficient Balance");
        _rOwned[sender] = _rOwned[sender] - proportionAmount;

        uint256 proportionReceived = _shouldTakeFee(sender, recipient)
            ? _takeFeeInProportions(sender == UNISWAP_V2_PAIR ? true : false, sender, proportionAmount)
            : proportionAmount;
        _rOwned[recipient] = _rOwned[recipient] + proportionReceived;

        emit Transfer(sender, recipient, tokenFromReflection(proportionReceived));
        return true;
    }

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        uint256 proportionAmount = tokensToProportion(amount);
        require(_rOwned[sender] >= proportionAmount, "Insufficient Balance");
        _rOwned[sender] = _rOwned[sender] - proportionAmount;
        _rOwned[recipient] = _rOwned[recipient] + proportionAmount;
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function _takeFeeInProportions(bool buying, address sender, uint256 proportionAmount) internal returns (uint256) {
        Fee memory __buyFee = buyFee;
        Fee memory __sellFee = sellFee;

        uint256 proportionFeeAmount =
            buying == true ? proportionAmount * __buyFee.total / 100 : proportionAmount * __sellFee.total / 100;

        // reflect
        uint256 proportionReflected = buying == true
            ? proportionFeeAmount * __buyFee.reflection / __buyFee.total
            : proportionFeeAmount * __sellFee.reflection / __sellFee.total;

        _totalProportion = _totalProportion - proportionReflected;

        // take fees
        uint256 _proportionToContract = proportionFeeAmount - proportionReflected;
        if (_proportionToContract > 0) {
            _rOwned[address(this)] = _rOwned[address(this)] + _proportionToContract;

            emit Transfer(sender, address(this), tokenFromReflection(_proportionToContract));
        }
        emit Reflect(proportionReflected, _totalProportion);
        return proportionAmount - proportionFeeAmount;
    }

    function _shouldSwapBack() internal view returns (bool) {
        return msg.sender != UNISWAP_V2_PAIR && !inSwap && claimingFees && balanceOf(address(this)) >= swapThreshold;
    }

    function _swapBack() internal swapping {
        Fee memory __sellFee = sellFee;

        uint256 __swapThreshold = swapThreshold;
        uint256 amountToBurn = __swapThreshold * __sellFee.burn / __sellFee.total;
        uint256 amountToSwap = __swapThreshold - amountToBurn;
        approve(address(UNISWAP_V2_ROUTER), amountToSwap);

        // burn
        _transferFrom(address(this), DEAD, amountToBurn);

        // swap
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = UNISWAP_V2_ROUTER.WETH();

        UNISWAP_V2_ROUTER.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap, 0, path, address(this), block.timestamp
        );

        uint256 amountETH = address(this).balance;

        uint256 totalSwapFee = __sellFee.total - __sellFee.reflection - __sellFee.burn;
        uint256 amountETHMarketing = amountETH * __sellFee.marketing / totalSwapFee;
        uint256 amountETHLP = amountETH * __sellFee.lp / totalSwapFee;
        uint256 amountETHBuyback = amountETH * __sellFee.buyback / totalSwapFee;

        // send
        (bool tmpSuccess,) = payable(marketingFeeReceiver).call{value: amountETHMarketing}("");
        (tmpSuccess,) = payable(lpFeeReceiver).call{value: amountETHLP}("");
        (tmpSuccess,) = payable(buybackFeeReceiver).call{value: amountETHBuyback}("");

    }

    function _shouldTakeFee(address sender, address recipient) internal view returns (bool) {
        return !isFeeExempt[sender] && !isFeeExempt[recipient];
    }
}

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":"amountReflected","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newTotalProportion","type":"uint256"}],"name":"Reflect","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":"UNISWAP_V2_PAIR","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNISWAP_V2_ROUTER","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_rOwned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalProportion","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","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":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isBlacklisting","type":"bool"}],"name":"blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blacklists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint8","name":"reflection","type":"uint8"},{"internalType":"uint8","name":"marketing","type":"uint8"},{"internalType":"uint8","name":"lp","type":"uint8"},{"internalType":"uint8","name":"buyback","type":"uint8"},{"internalType":"uint8","name":"burn","type":"uint8"},{"internalType":"uint128","name":"total","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"reflectionFeeBuy","type":"uint8"},{"internalType":"uint8","name":"marketingFeeBuy","type":"uint8"},{"internalType":"uint8","name":"lpFeeBuy","type":"uint8"},{"internalType":"uint8","name":"buybackFeeBuy","type":"uint8"},{"internalType":"uint8","name":"burnFeeBuy","type":"uint8"},{"internalType":"uint8","name":"reflectionFeeSell","type":"uint8"},{"internalType":"uint8","name":"marketingFeeSell","type":"uint8"},{"internalType":"uint8","name":"lpFeeSell","type":"uint8"},{"internalType":"uint8","name":"buybackFeeSell","type":"uint8"},{"internalType":"uint8","name":"burnFeeSell","type":"uint8"}],"name":"changeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimingFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"clearStuckToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint8","name":"reflection","type":"uint8"},{"internalType":"uint8","name":"marketing","type":"uint8"},{"internalType":"uint8","name":"lp","type":"uint8"},{"internalType":"uint8","name":"buyback","type":"uint8"},{"internalType":"uint8","name":"burn","type":"uint8"},{"internalType":"uint128","name":"total","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"m_","type":"address"},{"internalType":"address","name":"lp_","type":"address"},{"internalType":"address","name":"b_","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"e_","type":"bool"}],"name":"setLimitsEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"p_","type":"uint256"}],"name":"setMaxTxBasisPoint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"proportion","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"tokensToProportion","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e0604052601160a090815270544543484e4f204d454348414e4943555360781b60c05260019062000032908262000532565b5060408051808201909152600381526254415560e81b60208201526002906200005c908262000532565b506b033b2e3c9fd0803ce800000060035560646003546002620000809190620005fe565b6200008c91906200062a565b600490815560035460068190556008805460ff191660019081179091556040805160c080820183528382526020808301879052600083850181905260608085018290526080808601839052600560a0968701819052600b8054650500000004016001600160a81b0319918216811790925589519788018a529987529486019a909a529584018290528301819052938201939093520193909352600c8054909116909217909155600f805460ff60a01b1916600160a01b1790556103e89062000156906002620005fe565b6200016291906200062a565b6010553480156200017257600080fd5b506200017e336200043d565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001d3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f991906200064d565b6001600160a01b031663c9c6539630737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200025b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200028191906200064d565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f591906200064d565b6001600160a01b0381166080819052306000818152600760209081526040808320737a250d5630b4cf539739df2c5dacb4c659f2488d84528252808320600019908190553280855282852091909155938352600a82528083208054600160ff1991821681179092557fc90215bb1b0ac6bfa50a3c02c4b559c695b6a8e828048a88e327592fc55c5d2c80548216831790559584528184208054871682179055848452818420805487168217905560098352818420805490961617909455600d8054737409dcb2cff4867e4d75bbd588d3bd68bd7c44a26001600160a01b03199182168117909255600e8054821683179055600f80549091169091179055600354600582528483208190559351938452939450909290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3506200067f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620004b857607f821691505b602082108103620004d957634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200052d57600081815260208120601f850160051c81016020861015620005085750805b601f850160051c820191505b81811015620005295782815560010162000514565b5050505b505050565b81516001600160401b038111156200054e576200054e6200048d565b62000566816200055f8454620004a3565b84620004df565b602080601f8311600181146200059e5760008415620005855750858301515b600019600386901b1c1916600185901b17855562000529565b600085815260208120601f198616915b82811015620005cf57888601518255948401946001909101908401620005ae565b5085821015620005ee5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b80820281158282048414176200062457634e487b7160e01b600052601160045260246000fd5b92915050565b6000826200064857634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156200066057600080fd5b81516001600160a01b03811681146200067857600080fd5b9392505050565b60805161208a620006a9600039600081816107600152818161122b01526114e0015261208a6000f3fe60806040526004361061021e5760003560e01c8063571ac8b011610123578063b0f7ec38116100ab578063df20fd491161006f578063df20fd49146106ee578063e186ec741461070e578063f2fde38b1461072e578063f40acc3d1461074e578063f84ba65d1461078257600080fd5b8063b0f7ec3814610632578063c38a31de14610653578063d7c0103214610673578063d85a282814610693578063dd62ed3e146106a857600080fd5b80637d1db4a5116100f25780637d1db4a51461058d5780638da5cb5b146105a357806395d89b41146105d5578063a82ed9ec146105ea578063a9059cbb1461061257600080fd5b8063571ac8b014610518578063658d4b7f1461053857806370a0823114610558578063715018a61461057857600080fd5b80632b14ca56116101a6578063364333f411610175578063364333f41461044f578063404e51291461046657806341aea9de1461048657806345ce5365146104a657806347062402146104c657600080fd5b80632b14ca56146103625780632d838119146103f9578063313ce567146104195780633582ad231461043557600080fd5b806316c02129116101ed57806316c02129146102d2578063178002871461030257806318160ddd1461031857806323b872dd1461032d5780632b112e491461034d57600080fd5b80630445b6671461022a57806306fdde0314610253578063095ea7b3146102755780630cfc15f9146102a557600080fd5b3661022557005b600080fd5b34801561023657600080fd5b5061024060105481565b6040519081526020015b60405180910390f35b34801561025f57600080fd5b506102686107a2565b60405161024a9190611beb565b34801561028157600080fd5b50610295610290366004611c4e565b610834565b604051901515815260200161024a565b3480156102b157600080fd5b506102406102c0366004611c7a565b60056020526000908152604090205481565b3480156102de57600080fd5b506102956102ed366004611c7a565b60126020526000908152604090205460ff1681565b34801561030e57600080fd5b5061024060065481565b34801561032457600080fd5b50600354610240565b34801561033957600080fd5b50610295610348366004611c97565b6108a1565b34801561035957600080fd5b506102406109ae565b34801561036e57600080fd5b50600c546103b49060ff8082169161010081048216916201000082048116916301000000810482169164010000000082041690600160281b90046001600160801b031686565b6040805160ff9788168152958716602087015293861693850193909352908416606084015290921660808201526001600160801b0390911660a082015260c00161024a565b34801561040557600080fd5b50610240610414366004611cd8565b6109e1565b34801561042557600080fd5b506040516012815260200161024a565b34801561044157600080fd5b506008546102959060ff1681565b34801561045b57600080fd5b506104646109fe565b005b34801561047257600080fd5b50610464610481366004611d06565b610a5e565b34801561049257600080fd5b506104646104a1366004611d3b565b610a91565b3480156104b257600080fd5b506102406104c1366004611cd8565b610aac565b3480156104d257600080fd5b50600b546103b49060ff8082169161010081048216916201000082048116916301000000810482169164010000000082041690600160281b90046001600160801b031686565b34801561052457600080fd5b50610295610533366004611c7a565b610abf565b34801561054457600080fd5b50610464610553366004611d06565b610acd565b34801561056457600080fd5b50610240610573366004611c7a565b610b00565b34801561058457600080fd5b50610464610b22565b34801561059957600080fd5b5061024060045481565b3480156105af57600080fd5b506000546001600160a01b03165b6040516001600160a01b03909116815260200161024a565b3480156105e157600080fd5b50610268610b36565b3480156105f657600080fd5b506105bd737a250d5630b4cf539739df2c5dacb4c659f2488d81565b34801561061e57600080fd5b5061029561062d366004611c4e565b610b45565b34801561063e57600080fd5b50600f5461029590600160a01b900460ff1681565b34801561065f57600080fd5b5061046461066e366004611d67565b610b52565b34801561067f57600080fd5b5061046461068e366004611e21565b610ea1565b34801561069f57600080fd5b50610464610ee8565b3480156106b457600080fd5b506102406106c3366004611e6c565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b3480156106fa57600080fd5b50610464610709366004611ea5565b610f03565b34801561071a57600080fd5b50610464610729366004611cd8565b610f2d565b34801561073a57600080fd5b50610464610749366004611c7a565b610f56565b34801561075a57600080fd5b506105bd7f000000000000000000000000000000000000000000000000000000000000000081565b34801561078e57600080fd5b5061046461079d366004611d06565b610fcc565b6060600180546107b190611ec1565b80601f01602080910402602001604051908101604052809291908181526020018280546107dd90611ec1565b801561082a5780601f106107ff5761010080835404028352916020019161082a565b820191906000526020600020905b81548152906001019060200180831161080d57829003601f168201915b5050505050905090565b3360008181526007602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061088f9086815260200190565b60405180910390a35060015b92915050565b6001600160a01b038316600090815260076020908152604080832033845290915281205460001914610999576001600160a01b03841660009081526007602090815260408083203384529091529020548211156109455760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064015b60405180910390fd5b6001600160a01b0384166000908152600760209081526040808320338452909152902054610974908390611f11565b6001600160a01b03851660009081526007602090815260408083203384529091529020555b6109a4848484610fff565b90505b9392505050565b60006109ba6000610b00565b6109c561dead610b00565b6003546109d29190611f11565b6109dc9190611f11565b905090565b6000600654600354836109f49190611f24565b61089b9190611f3b565b610a06611300565b604051600090339047908381818185875af1925050503d8060008114610a48576040519150601f19603f3d011682016040523d82523d6000602084013e610a4d565b606091505b5050905080610a5b57600080fd5b50565b610a66611300565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b610a99611300565b6008805460ff1916911515919091179055565b6000600354600654836109f49190611f24565b600061089b82600019610834565b610ad5611300565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6001600160a01b03811660009081526005602052604081205461089b906109e1565b610b2a611300565b610b34600061135a565b565b6060600280546107b190611ec1565b60006109a7338484610fff565b610b5a611300565b600086888a610b698d8f611f5d565b610b739190611f5d565b610b7d9190611f5d565b610b879190611f5d565b60ff1690506000828486610b9b898b611f5d565b610ba59190611f5d565b610baf9190611f5d565b610bb99190611f5d565b60ff1690506019826001600160801b03161115610c0c5760405162461bcd60e51b8152602060048201526011602482015270084eaf240cccacae640e8dede40d0d2ced607b1b604482015260640161093c565b6019816001600160801b03161115610c5b5760405162461bcd60e51b81526020600482015260126024820152710a6cad8d840cccacae640e8dede40d0d2ced60731b604482015260640161093c565b6040518060c001604052808d60ff1681526020018d60ff1681526020018d60ff1681526020018d60ff1681526020018960ff168152602001836001600160801b0316815250600b60008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a81548160ff021916908360ff16021790555060808201518160000160046101000a81548160ff021916908360ff16021790555060a08201518160000160056101000a8154816001600160801b0302191690836001600160801b031602179055509050506040518060c001604052808860ff1681526020018860ff1681526020018860ff1681526020018860ff1681526020018460ff168152602001826001600160801b0316815250600c60008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a81548160ff021916908360ff16021790555060808201518160000160046101000a81548160ff021916908360ff16021790555060a08201518160000160056101000a8154816001600160801b0302191690836001600160801b03160217905550905050505050505050505050505050565b610ea9611300565b600d80546001600160a01b039485166001600160a01b031991821617909155600e805493851693821693909317909255600f8054919093169116179055565b610ef0611300565b610a5b3033610efe30610b00565b610fff565b610f0b611300565b600f8054921515600160a01b0260ff60a01b1990931692909217909155601055565b610f35611300565b61271081600354610f469190611f24565b610f509190611f3b565b60045550565b610f5e611300565b6001600160a01b038116610fc35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161093c565b610a5b8161135a565b610fd4611300565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6001600160a01b03821660009081526012602052604081205460ff1615801561104157506001600160a01b03841660009081526012602052604090205460ff16155b61107b5760405162461bcd60e51b815260206004820152600b60248201526a109b1858dadb1a5cdd195960aa1b604482015260640161093c565b60115460ff1615611098576110918484846113aa565b90506109a7565b60085460ff1680156110c357506001600160a01b0384166000908152600a602052604090205460ff16155b80156110e857506001600160a01b0383166000908152600a602052604090205460ff16155b15611150576004548211156111505760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b606482015260840161093c565b6111586114d3565b1561116557611165611540565b600061117083610aac565b6001600160a01b0386166000908152600560205260409020549091508111156111d25760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742042616c616e636560601b604482015260640161093c565b6001600160a01b0385166000908152600560205260409020546111f6908290611f11565b6001600160a01b03861660009081526005602052604081209190915561121c8686611932565b6112265781611273565b6112737f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316876001600160a01b03161461126957600061126c565b60015b8784611978565b6001600160a01b03861660009081526005602052604090205490915061129a908290611f76565b6001600160a01b0380871660008181526005602052604090209290925587167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6112e3846109e1565b60405190815260200160405180910390a350600195945050505050565b6000546001600160a01b03163314610b345760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161093c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000806113b683610aac565b6001600160a01b0386166000908152600560205260409020549091508111156114185760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742042616c616e636560601b604482015260640161093c565b6001600160a01b03851660009081526005602052604090205461143c908290611f11565b6001600160a01b03808716600090815260056020526040808220939093559086168152205461146c908290611f76565b6001600160a01b0380861660008181526005602052604090819020939093559151908716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906114c09087815260200190565b60405180910390a3506001949350505050565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801590611511575060115460ff16155b80156115265750600f54600160a01b900460ff165b80156109dc575060105461153930610b00565b1015905090565b60118054600160ff199091161790556040805160c081018252600c5460ff80821683526101008204811660208401526201000082048116938301939093526301000000810483166060830152640100000000810490921660808201819052600160281b9092046001600160801b031660a082018190526010549192600091906115c99084611f24565b6115d39190611f3b565b905060006115e18284611f11565b9050611601737a250d5630b4cf539739df2c5dacb4c659f2488d82610834565b5061160f3061dead84610fff565b50604080516002808252606082018352600092602083019080368337019050509050308160008151811061164557611645611f89565b60200260200101906001600160a01b031690816001600160a01b031681525050737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116db9190611f9f565b816001815181106116ee576116ee611f89565b6001600160a01b039092166020928302919091019091015260405163791ac94760e01b8152737a250d5630b4cf539739df2c5dacb4c659f2488d9063791ac94790611746908590600090869030904290600401611fbc565b600060405180830381600087803b15801561176057600080fd5b505af1158015611774573d6000803e3d6000fd5b5050505060004790506000866080015160ff16876000015160ff168860a0015161179e919061202d565b6117a8919061202d565b6001600160801b03169050600081886020015160ff16846117c99190611f24565b6117d39190611f3b565b9050600082896040015160ff16856117eb9190611f24565b6117f59190611f3b565b90506000838a6060015160ff168661180d9190611f24565b6118179190611f3b565b600d546040519192506000916001600160a01b039091169085908381818185875af1925050503d8060008114611869576040519150601f19603f3d011682016040523d82523d6000602084013e61186e565b606091505b5050600e546040519192506001600160a01b0316908490600081818185875af1925050503d80600081146118be576040519150601f19603f3d011682016040523d82523d6000602084013e6118c3565b606091505b5050600f546040519192506001600160a01b0316908390600081818185875af1925050503d8060008114611913576040519150601f19603f3d011682016040523d82523d6000602084013e611918565b606091505b50506011805460ff19169055505050505050505050505050565b6001600160a01b03821660009081526009602052604081205460ff161580156109a75750506001600160a01b031660009081526009602052604090205460ff1615919050565b6040805160c08082018352600b5460ff8082168452610100808304821660208087019190915262010000808504841687890152630100000080860485166060808a019190915264010000000080880487166080808c01919091526001600160801b03600160281b998a9004811660a0808e01919091528d519b8c018e52600c54808b168d529889048a16978c019790975294870488169b8a019b909b5291850486169088015283049093169685019690965291909104169281019290925260009182861515600114611a6e5760648260a001516001600160801b031686611a5f9190611f24565b611a699190611f3b565b611a93565b60648360a001516001600160801b031686611a899190611f24565b611a939190611f3b565b90506000600188151514611ad1578260a001516001600160801b0316836000015160ff1683611ac29190611f24565b611acc9190611f3b565b611afc565b8360a001516001600160801b0316846000015160ff1683611af29190611f24565b611afc9190611f3b565b905080600654611b0c9190611f11565b6006556000611b1b8284611f11565b90508015611b975730600090815260056020526040902054611b3e908290611f76565b306000818152600560205260409020919091556001600160a01b0389167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef611b85846109e1565b60405190815260200160405180910390a35b6006546040805184815260208101929092527fc3b3cc73ac1faef58c428c22be6cb344acfd92a699c8cd758c753af27071b5ac910160405180910390a1611bde8388611f11565b9998505050505050505050565b600060208083528351808285015260005b81811015611c1857858101830151858201604001528201611bfc565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610a5b57600080fd5b60008060408385031215611c6157600080fd5b8235611c6c81611c39565b946020939093013593505050565b600060208284031215611c8c57600080fd5b81356109a781611c39565b600080600060608486031215611cac57600080fd5b8335611cb781611c39565b92506020840135611cc781611c39565b929592945050506040919091013590565b600060208284031215611cea57600080fd5b5035919050565b80358015158114611d0157600080fd5b919050565b60008060408385031215611d1957600080fd5b8235611d2481611c39565b9150611d3260208401611cf1565b90509250929050565b600060208284031215611d4d57600080fd5b6109a782611cf1565b803560ff81168114611d0157600080fd5b6000806000806000806000806000806101408b8d031215611d8757600080fd5b611d908b611d56565b9950611d9e60208c01611d56565b9850611dac60408c01611d56565b9750611dba60608c01611d56565b9650611dc860808c01611d56565b9550611dd660a08c01611d56565b9450611de460c08c01611d56565b9350611df260e08c01611d56565b9250611e016101008c01611d56565b9150611e106101208c01611d56565b90509295989b9194979a5092959850565b600080600060608486031215611e3657600080fd5b8335611e4181611c39565b92506020840135611e5181611c39565b91506040840135611e6181611c39565b809150509250925092565b60008060408385031215611e7f57600080fd5b8235611e8a81611c39565b91506020830135611e9a81611c39565b809150509250929050565b60008060408385031215611eb857600080fd5b611c6c83611cf1565b600181811c90821680611ed557607f821691505b602082108103611ef557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561089b5761089b611efb565b808202811582820484141761089b5761089b611efb565b600082611f5857634e487b7160e01b600052601260045260246000fd5b500490565b60ff818116838216019081111561089b5761089b611efb565b8082018082111561089b5761089b611efb565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611fb157600080fd5b81516109a781611c39565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561200c5784516001600160a01b031683529383019391830191600101611fe7565b50506001600160a01b03969096166060850152505050608001529392505050565b6001600160801b0382811682821603908082111561204d5761204d611efb565b509291505056fea264697066735822122082261509f365cb4b142dec15c1b82ab6d2bd5584782a0a1153af5cc5c51707b264736f6c63430008130033

Deployed Bytecode

0x60806040526004361061021e5760003560e01c8063571ac8b011610123578063b0f7ec38116100ab578063df20fd491161006f578063df20fd49146106ee578063e186ec741461070e578063f2fde38b1461072e578063f40acc3d1461074e578063f84ba65d1461078257600080fd5b8063b0f7ec3814610632578063c38a31de14610653578063d7c0103214610673578063d85a282814610693578063dd62ed3e146106a857600080fd5b80637d1db4a5116100f25780637d1db4a51461058d5780638da5cb5b146105a357806395d89b41146105d5578063a82ed9ec146105ea578063a9059cbb1461061257600080fd5b8063571ac8b014610518578063658d4b7f1461053857806370a0823114610558578063715018a61461057857600080fd5b80632b14ca56116101a6578063364333f411610175578063364333f41461044f578063404e51291461046657806341aea9de1461048657806345ce5365146104a657806347062402146104c657600080fd5b80632b14ca56146103625780632d838119146103f9578063313ce567146104195780633582ad231461043557600080fd5b806316c02129116101ed57806316c02129146102d2578063178002871461030257806318160ddd1461031857806323b872dd1461032d5780632b112e491461034d57600080fd5b80630445b6671461022a57806306fdde0314610253578063095ea7b3146102755780630cfc15f9146102a557600080fd5b3661022557005b600080fd5b34801561023657600080fd5b5061024060105481565b6040519081526020015b60405180910390f35b34801561025f57600080fd5b506102686107a2565b60405161024a9190611beb565b34801561028157600080fd5b50610295610290366004611c4e565b610834565b604051901515815260200161024a565b3480156102b157600080fd5b506102406102c0366004611c7a565b60056020526000908152604090205481565b3480156102de57600080fd5b506102956102ed366004611c7a565b60126020526000908152604090205460ff1681565b34801561030e57600080fd5b5061024060065481565b34801561032457600080fd5b50600354610240565b34801561033957600080fd5b50610295610348366004611c97565b6108a1565b34801561035957600080fd5b506102406109ae565b34801561036e57600080fd5b50600c546103b49060ff8082169161010081048216916201000082048116916301000000810482169164010000000082041690600160281b90046001600160801b031686565b6040805160ff9788168152958716602087015293861693850193909352908416606084015290921660808201526001600160801b0390911660a082015260c00161024a565b34801561040557600080fd5b50610240610414366004611cd8565b6109e1565b34801561042557600080fd5b506040516012815260200161024a565b34801561044157600080fd5b506008546102959060ff1681565b34801561045b57600080fd5b506104646109fe565b005b34801561047257600080fd5b50610464610481366004611d06565b610a5e565b34801561049257600080fd5b506104646104a1366004611d3b565b610a91565b3480156104b257600080fd5b506102406104c1366004611cd8565b610aac565b3480156104d257600080fd5b50600b546103b49060ff8082169161010081048216916201000082048116916301000000810482169164010000000082041690600160281b90046001600160801b031686565b34801561052457600080fd5b50610295610533366004611c7a565b610abf565b34801561054457600080fd5b50610464610553366004611d06565b610acd565b34801561056457600080fd5b50610240610573366004611c7a565b610b00565b34801561058457600080fd5b50610464610b22565b34801561059957600080fd5b5061024060045481565b3480156105af57600080fd5b506000546001600160a01b03165b6040516001600160a01b03909116815260200161024a565b3480156105e157600080fd5b50610268610b36565b3480156105f657600080fd5b506105bd737a250d5630b4cf539739df2c5dacb4c659f2488d81565b34801561061e57600080fd5b5061029561062d366004611c4e565b610b45565b34801561063e57600080fd5b50600f5461029590600160a01b900460ff1681565b34801561065f57600080fd5b5061046461066e366004611d67565b610b52565b34801561067f57600080fd5b5061046461068e366004611e21565b610ea1565b34801561069f57600080fd5b50610464610ee8565b3480156106b457600080fd5b506102406106c3366004611e6c565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b3480156106fa57600080fd5b50610464610709366004611ea5565b610f03565b34801561071a57600080fd5b50610464610729366004611cd8565b610f2d565b34801561073a57600080fd5b50610464610749366004611c7a565b610f56565b34801561075a57600080fd5b506105bd7f0000000000000000000000001c6bccedb4e9637bff5a9b68a6745d8a0ef4f40181565b34801561078e57600080fd5b5061046461079d366004611d06565b610fcc565b6060600180546107b190611ec1565b80601f01602080910402602001604051908101604052809291908181526020018280546107dd90611ec1565b801561082a5780601f106107ff5761010080835404028352916020019161082a565b820191906000526020600020905b81548152906001019060200180831161080d57829003601f168201915b5050505050905090565b3360008181526007602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061088f9086815260200190565b60405180910390a35060015b92915050565b6001600160a01b038316600090815260076020908152604080832033845290915281205460001914610999576001600160a01b03841660009081526007602090815260408083203384529091529020548211156109455760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064015b60405180910390fd5b6001600160a01b0384166000908152600760209081526040808320338452909152902054610974908390611f11565b6001600160a01b03851660009081526007602090815260408083203384529091529020555b6109a4848484610fff565b90505b9392505050565b60006109ba6000610b00565b6109c561dead610b00565b6003546109d29190611f11565b6109dc9190611f11565b905090565b6000600654600354836109f49190611f24565b61089b9190611f3b565b610a06611300565b604051600090339047908381818185875af1925050503d8060008114610a48576040519150601f19603f3d011682016040523d82523d6000602084013e610a4d565b606091505b5050905080610a5b57600080fd5b50565b610a66611300565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b610a99611300565b6008805460ff1916911515919091179055565b6000600354600654836109f49190611f24565b600061089b82600019610834565b610ad5611300565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6001600160a01b03811660009081526005602052604081205461089b906109e1565b610b2a611300565b610b34600061135a565b565b6060600280546107b190611ec1565b60006109a7338484610fff565b610b5a611300565b600086888a610b698d8f611f5d565b610b739190611f5d565b610b7d9190611f5d565b610b879190611f5d565b60ff1690506000828486610b9b898b611f5d565b610ba59190611f5d565b610baf9190611f5d565b610bb99190611f5d565b60ff1690506019826001600160801b03161115610c0c5760405162461bcd60e51b8152602060048201526011602482015270084eaf240cccacae640e8dede40d0d2ced607b1b604482015260640161093c565b6019816001600160801b03161115610c5b5760405162461bcd60e51b81526020600482015260126024820152710a6cad8d840cccacae640e8dede40d0d2ced60731b604482015260640161093c565b6040518060c001604052808d60ff1681526020018d60ff1681526020018d60ff1681526020018d60ff1681526020018960ff168152602001836001600160801b0316815250600b60008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a81548160ff021916908360ff16021790555060808201518160000160046101000a81548160ff021916908360ff16021790555060a08201518160000160056101000a8154816001600160801b0302191690836001600160801b031602179055509050506040518060c001604052808860ff1681526020018860ff1681526020018860ff1681526020018860ff1681526020018460ff168152602001826001600160801b0316815250600c60008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a81548160ff021916908360ff16021790555060808201518160000160046101000a81548160ff021916908360ff16021790555060a08201518160000160056101000a8154816001600160801b0302191690836001600160801b03160217905550905050505050505050505050505050565b610ea9611300565b600d80546001600160a01b039485166001600160a01b031991821617909155600e805493851693821693909317909255600f8054919093169116179055565b610ef0611300565b610a5b3033610efe30610b00565b610fff565b610f0b611300565b600f8054921515600160a01b0260ff60a01b1990931692909217909155601055565b610f35611300565b61271081600354610f469190611f24565b610f509190611f3b565b60045550565b610f5e611300565b6001600160a01b038116610fc35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161093c565b610a5b8161135a565b610fd4611300565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6001600160a01b03821660009081526012602052604081205460ff1615801561104157506001600160a01b03841660009081526012602052604090205460ff16155b61107b5760405162461bcd60e51b815260206004820152600b60248201526a109b1858dadb1a5cdd195960aa1b604482015260640161093c565b60115460ff1615611098576110918484846113aa565b90506109a7565b60085460ff1680156110c357506001600160a01b0384166000908152600a602052604090205460ff16155b80156110e857506001600160a01b0383166000908152600a602052604090205460ff16155b15611150576004548211156111505760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b606482015260840161093c565b6111586114d3565b1561116557611165611540565b600061117083610aac565b6001600160a01b0386166000908152600560205260409020549091508111156111d25760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742042616c616e636560601b604482015260640161093c565b6001600160a01b0385166000908152600560205260409020546111f6908290611f11565b6001600160a01b03861660009081526005602052604081209190915561121c8686611932565b6112265781611273565b6112737f0000000000000000000000001c6bccedb4e9637bff5a9b68a6745d8a0ef4f4016001600160a01b0316876001600160a01b03161461126957600061126c565b60015b8784611978565b6001600160a01b03861660009081526005602052604090205490915061129a908290611f76565b6001600160a01b0380871660008181526005602052604090209290925587167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6112e3846109e1565b60405190815260200160405180910390a350600195945050505050565b6000546001600160a01b03163314610b345760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161093c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000806113b683610aac565b6001600160a01b0386166000908152600560205260409020549091508111156114185760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742042616c616e636560601b604482015260640161093c565b6001600160a01b03851660009081526005602052604090205461143c908290611f11565b6001600160a01b03808716600090815260056020526040808220939093559086168152205461146c908290611f76565b6001600160a01b0380861660008181526005602052604090819020939093559151908716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906114c09087815260200190565b60405180910390a3506001949350505050565b6000336001600160a01b037f0000000000000000000000001c6bccedb4e9637bff5a9b68a6745d8a0ef4f4011614801590611511575060115460ff16155b80156115265750600f54600160a01b900460ff165b80156109dc575060105461153930610b00565b1015905090565b60118054600160ff199091161790556040805160c081018252600c5460ff80821683526101008204811660208401526201000082048116938301939093526301000000810483166060830152640100000000810490921660808201819052600160281b9092046001600160801b031660a082018190526010549192600091906115c99084611f24565b6115d39190611f3b565b905060006115e18284611f11565b9050611601737a250d5630b4cf539739df2c5dacb4c659f2488d82610834565b5061160f3061dead84610fff565b50604080516002808252606082018352600092602083019080368337019050509050308160008151811061164557611645611f89565b60200260200101906001600160a01b031690816001600160a01b031681525050737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116db9190611f9f565b816001815181106116ee576116ee611f89565b6001600160a01b039092166020928302919091019091015260405163791ac94760e01b8152737a250d5630b4cf539739df2c5dacb4c659f2488d9063791ac94790611746908590600090869030904290600401611fbc565b600060405180830381600087803b15801561176057600080fd5b505af1158015611774573d6000803e3d6000fd5b5050505060004790506000866080015160ff16876000015160ff168860a0015161179e919061202d565b6117a8919061202d565b6001600160801b03169050600081886020015160ff16846117c99190611f24565b6117d39190611f3b565b9050600082896040015160ff16856117eb9190611f24565b6117f59190611f3b565b90506000838a6060015160ff168661180d9190611f24565b6118179190611f3b565b600d546040519192506000916001600160a01b039091169085908381818185875af1925050503d8060008114611869576040519150601f19603f3d011682016040523d82523d6000602084013e61186e565b606091505b5050600e546040519192506001600160a01b0316908490600081818185875af1925050503d80600081146118be576040519150601f19603f3d011682016040523d82523d6000602084013e6118c3565b606091505b5050600f546040519192506001600160a01b0316908390600081818185875af1925050503d8060008114611913576040519150601f19603f3d011682016040523d82523d6000602084013e611918565b606091505b50506011805460ff19169055505050505050505050505050565b6001600160a01b03821660009081526009602052604081205460ff161580156109a75750506001600160a01b031660009081526009602052604090205460ff1615919050565b6040805160c08082018352600b5460ff8082168452610100808304821660208087019190915262010000808504841687890152630100000080860485166060808a019190915264010000000080880487166080808c01919091526001600160801b03600160281b998a9004811660a0808e01919091528d519b8c018e52600c54808b168d529889048a16978c019790975294870488169b8a019b909b5291850486169088015283049093169685019690965291909104169281019290925260009182861515600114611a6e5760648260a001516001600160801b031686611a5f9190611f24565b611a699190611f3b565b611a93565b60648360a001516001600160801b031686611a899190611f24565b611a939190611f3b565b90506000600188151514611ad1578260a001516001600160801b0316836000015160ff1683611ac29190611f24565b611acc9190611f3b565b611afc565b8360a001516001600160801b0316846000015160ff1683611af29190611f24565b611afc9190611f3b565b905080600654611b0c9190611f11565b6006556000611b1b8284611f11565b90508015611b975730600090815260056020526040902054611b3e908290611f76565b306000818152600560205260409020919091556001600160a01b0389167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef611b85846109e1565b60405190815260200160405180910390a35b6006546040805184815260208101929092527fc3b3cc73ac1faef58c428c22be6cb344acfd92a699c8cd758c753af27071b5ac910160405180910390a1611bde8388611f11565b9998505050505050505050565b600060208083528351808285015260005b81811015611c1857858101830151858201604001528201611bfc565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610a5b57600080fd5b60008060408385031215611c6157600080fd5b8235611c6c81611c39565b946020939093013593505050565b600060208284031215611c8c57600080fd5b81356109a781611c39565b600080600060608486031215611cac57600080fd5b8335611cb781611c39565b92506020840135611cc781611c39565b929592945050506040919091013590565b600060208284031215611cea57600080fd5b5035919050565b80358015158114611d0157600080fd5b919050565b60008060408385031215611d1957600080fd5b8235611d2481611c39565b9150611d3260208401611cf1565b90509250929050565b600060208284031215611d4d57600080fd5b6109a782611cf1565b803560ff81168114611d0157600080fd5b6000806000806000806000806000806101408b8d031215611d8757600080fd5b611d908b611d56565b9950611d9e60208c01611d56565b9850611dac60408c01611d56565b9750611dba60608c01611d56565b9650611dc860808c01611d56565b9550611dd660a08c01611d56565b9450611de460c08c01611d56565b9350611df260e08c01611d56565b9250611e016101008c01611d56565b9150611e106101208c01611d56565b90509295989b9194979a5092959850565b600080600060608486031215611e3657600080fd5b8335611e4181611c39565b92506020840135611e5181611c39565b91506040840135611e6181611c39565b809150509250925092565b60008060408385031215611e7f57600080fd5b8235611e8a81611c39565b91506020830135611e9a81611c39565b809150509250929050565b60008060408385031215611eb857600080fd5b611c6c83611cf1565b600181811c90821680611ed557607f821691505b602082108103611ef557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561089b5761089b611efb565b808202811582820484141761089b5761089b611efb565b600082611f5857634e487b7160e01b600052601260045260246000fd5b500490565b60ff818116838216019081111561089b5761089b611efb565b8082018082111561089b5761089b611efb565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611fb157600080fd5b81516109a781611c39565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561200c5784516001600160a01b031683529383019391830191600101611fe7565b50506001600160a01b03969096166060850152505050608001529392505050565b6001600160801b0382811682821603908082111561204d5761204d611efb565b509291505056fea264697066735822122082261509f365cb4b142dec15c1b82ab6d2bd5584782a0a1153af5cc5c51707b264736f6c63430008130033

Deployed Bytecode Sourcemap

7334:14352:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9724:56;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;9724:56:0;;;;;;;;13158:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;11737:216::-;;;;;;;;;;-1:-1:-1;11737:216:0;;;;;:::i;:::-;;:::i;:::-;;;1370:14:1;;1363:22;1345:41;;1333:2;1318:18;11737:216:0;1205:187:1;9060:42:0;;;;;;;;;;-1:-1:-1;9060:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;9805;;;;;;;;;;-1:-1:-1;9805:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;9109:46;;;;;;;;;;;;;;;;12962:102;;;;;;;;;;-1:-1:-1;13044:12:0;;12962:102;;12255:441;;;;;;;;;;-1:-1:-1;12255:441:0;;;;;:::i;:::-;;:::i;13954:136::-;;;;;;;;;;;;;:::i;9462:93::-;;;;;;;;;;-1:-1:-1;9462:93:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;9462:93:0;;-1:-1:-1;;;;;9462:93:0;;;;;;;2407:4:1;2395:17;;;2377:36;;2449:17;;;2444:2;2429:18;;2422:45;2503:17;;;2483:18;;;2476:45;;;;2557:17;;;2552:2;2537:18;;2530:45;2612:17;;;2606:3;2591:19;;2584:46;-1:-1:-1;;;;;2667:47:1;;;2661:3;2646:19;;2639:76;2364:3;2349:19;9462:93:0;2110:611:1;13797:149:0;;;;;;;;;;-1:-1:-1;13797:149:0;;;;;:::i;:::-;;:::i;13072:78::-;;;;;;;;;;-1:-1:-1;13072:78:0;;13140:2;3053:36:1;;3041:2;3026:18;13072:78:0;2911:184:1;9232:32:0;;;;;;;;;;-1:-1:-1;9232:32:0;;;;;;;;14356:170;;;;;;;;;;;;;:::i;:::-;;16775:135;;;;;;;;;;-1:-1:-1;16775:135:0;;;;;:::i;:::-;;:::i;16676:91::-;;;;;;;;;;-1:-1:-1;16676:91:0;;;;;:::i;:::-;;:::i;13649:140::-;;;;;;;;;;-1:-1:-1;13649:140:0;;;;;:::i;:::-;;:::i;9363:92::-;;;;;;;;;;-1:-1:-1;9363:92:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;9363:92:0;;-1:-1:-1;;;;;9363:92:0;;;11961:122;;;;;;;;;;-1:-1:-1;11961:122:0;;;;;:::i;:::-;;:::i;16091:119::-;;;;;;;;;;-1:-1:-1;16091:119:0;;;;;:::i;:::-;;:::i;13348:138::-;;;;;;;;;;-1:-1:-1;13348:138:0;;;;;:::i;:::-;;:::i;6006:103::-;;;;;;;;;;;;;:::i;8879:52::-;;;;;;;;;;;;;;;;5358:87;;;;;;;;;;-1:-1:-1;5404:7:0;5431:6;-1:-1:-1;;;;;5431:6:0;5358:87;;;-1:-1:-1;;;;;3934:32:1;;;3916:51;;3904:2;3889:18;5358:87:0;3770:203:1;13251:89:0;;;;;;;;;;;;;:::i;8408:126::-;;;;;;;;;;;;8491:42;8408:126;;12091:156;;;;;;;;;;-1:-1:-1;12091:156:0;;;;;:::i;:::-;;:::i;9686:31::-;;;;;;;;;;-1:-1:-1;9686:31:0;;;;-1:-1:-1;;;9686:31:0;;;;;;14837:1246;;;;;;;;;;-1:-1:-1;14837:1246:0;;;;;:::i;:::-;;:::i;16353:189::-;;;;;;;;;;-1:-1:-1;16353:189:0;;;;;:::i;:::-;;:::i;14534:131::-;;;;;;;;;;;;;:::i;13494:147::-;;;;;;;;;;-1:-1:-1;13494:147:0;;;;;:::i;:::-;-1:-1:-1;;;;;13605:19:0;;;13578:7;13605:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;13494:147;14673:156;;;;;;;;;;-1:-1:-1;14673:156:0;;;;;:::i;:::-;;:::i;16550:118::-;;;;;;;;;;-1:-1:-1;16550:118:0;;;;;:::i;:::-;;:::i;6264:201::-;;;;;;;;;;-1:-1:-1;6264:201:0;;;;;:::i;:::-;;:::i;8541:40::-;;;;;;;;;;;;;;;16218:127;;;;;;;;;;-1:-1:-1;16218:127:0;;;;;:::i;:::-;;:::i;13158:85::-;13197:13;13230:5;13223:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13158:85;:::o;11737:216::-;11841:10;11812:4;11829:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;11829:32:0;;;;;;;;;;:41;;;11886:37;11812:4;;11829:32;;11886:37;;;;11864:6;160:25:1;;148:2;133:18;;14:177;11886:37:0;;;;;;;;-1:-1:-1;11941:4:0;11737:216;;;;;:::o;12255:441::-;-1:-1:-1;;;;;12376:19:0;;12355:4;12376:19;;;:11;:19;;;;;;;;12396:10;12376:31;;;;;;;;-1:-1:-1;;12376:52:0;12372:257;;-1:-1:-1;;;;;12453:19:0;;;;;;:11;:19;;;;;;;;12473:10;12453:31;;;;;;;;:41;-1:-1:-1;12453:41:0;12445:83;;;;-1:-1:-1;;;12445:83:0;;6964:2:1;12445:83:0;;;6946:21:1;7003:2;6983:18;;;6976:30;7042:31;7022:18;;;7015:59;7091:18;;12445:83:0;;;;;;;;;-1:-1:-1;;;;;12577:19:0;;;;;;:11;:19;;;;;;;;12597:10;12577:31;;;;;;;;:40;;12611:6;;12577:40;:::i;:::-;-1:-1:-1;;;;;12543:19:0;;;;;;:11;:19;;;;;;;;12563:10;12543:31;;;;;;;:74;12372:257;12648:40;12662:6;12670:9;12681:6;12648:13;:40::i;:::-;12641:47;;12255:441;;;;;;:::o;13954:136::-;14007:7;14067:15;8061:42;14067:9;:15::i;:::-;14049;7988:42;14049:9;:15::i;:::-;14034:12;;:30;;;;:::i;:::-;:48;;;;:::i;:::-;14027:55;;13954:136;:::o;13797:149::-;13867:7;13922:16;;13907:12;;13894:10;:25;;;;:::i;:::-;:44;;;;:::i;14356:170::-;5244:13;:11;:13::i;:::-;14433:58:::1;::::0;14416:12:::1;::::0;14441:10:::1;::::0;14465:21:::1;::::0;14416:12;14433:58;14416:12;14433:58;14465:21;14441:10;14433:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14415:76;;;14510:7;14502:16;;;::::0;::::1;;14404:122;14356:170::o:0;16775:135::-;5244:13;:11;:13::i;:::-;-1:-1:-1;;;;;16864:20:0;;;::::1;;::::0;;;:10:::1;:20;::::0;;;;:38;;-1:-1:-1;;16864:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16775:135::o;16676:91::-;5244:13;:11;:13::i;:::-;16741::::1;:18:::0;;-1:-1:-1;;16741:18:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16676:91::o;13649:140::-;13714:7;13769:12;;13750:16;;13741:6;:25;;;;:::i;11961:122::-;12016:4;12040:35;12048:7;-1:-1:-1;;12040:7:0;:35::i;16091:119::-;5244:13;:11;:13::i;:::-;-1:-1:-1;;;;;16174:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;16174:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16091:119::o;13348:138::-;-1:-1:-1;;;;;13461:16:0;;13414:7;13461:16;;;:7;:16;;;;;;13441:37;;:19;:37::i;6006:103::-;5244:13;:11;:13::i;:::-;6071:30:::1;6098:1;6071:18;:30::i;:::-;6006:103::o:0;13251:89::-;13292:13;13325:7;13318:14;;;;;:::i;12091:156::-;12171:4;12195:44;12209:10;12221:9;12232:6;12195:13;:44::i;14837:1246::-;5244:13;:11;:13::i;:::-;15193:21:::1;15281:10:::0;15265:13;15254:8;15217:34:::1;15236:15:::0;15217:16;:34:::1;:::i;:::-;:45;;;;:::i;:::-;:61;;;;:::i;:::-;:74;;;;:::i;:::-;15193:98;;::::0;-1:-1:-1;15302:22:0::1;15395:11:::0;15378:14;15366:9;15327:36:::1;15347:16:::0;15327:17;:36:::1;:::i;:::-;:48;;;;:::i;:::-;:65;;;;:::i;:::-;:79;;;;:::i;:::-;15302:104;;;;8139:2;15427:13;-1:-1:-1::0;;;;;15427:24:0::1;;;15419:54;;;::::0;-1:-1:-1;;;15419:54:0;;8345:2:1;15419:54:0::1;::::0;::::1;8327:21:1::0;8384:2;8364:18;;;8357:30;-1:-1:-1;;;8403:18:1;;;8396:47;8460:18;;15419:54:0::1;8143:341:1::0;15419:54:0::1;8139:2;15492:14;-1:-1:-1::0;;;;;15492:25:0::1;;;15484:56;;;::::0;-1:-1:-1;;;15484:56:0;;8691:2:1;15484:56:0::1;::::0;::::1;8673:21:1::0;8730:2;8710:18;;;8703:30;-1:-1:-1;;;8749:18:1;;;8742:48;8807:18;;15484:56:0::1;8489:342:1::0;15484:56:0::1;15562:242;;;;;;;;15593:16;15562:242;;;;;;15635:16;15562:242;;;;;;15670:16;15562:242;;;;;;15710:16;15562:242;;;;;;15747:10;15562:242;;;;;;15779:13;-1:-1:-1::0;;;;;15562:242:0::1;;;::::0;15553:6:::1;:251;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;15553:251:0::1;;;;;-1:-1:-1::0;;;;;15553:251:0::1;;;;;;;;;15827:248;;;;;;;;15858:17;15827:248;;;;;;15901:17;15827:248;;;;;;15937:17;15827:248;;;;;;15978:17;15827:248;;;;;;16016:11;15827:248;;;;;;16049:14;-1:-1:-1::0;;;;;15827:248:0::1;;;::::0;15817:7:::1;:258;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;15817:258:0::1;;;;;-1:-1:-1::0;;;;;15817:258:0::1;;;;;;;;;15182:901;;14837:1246:::0;;;;;;;;;;:::o;16353:189::-;5244:13;:11;:13::i;:::-;16445:20:::1;:25:::0;;-1:-1:-1;;;;;16445:25:0;;::::1;-1:-1:-1::0;;;;;;16445:25:0;;::::1;;::::0;;;16481:13:::1;:19:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;16511:18:::1;:23:::0;;;;;::::1;::::0;::::1;;::::0;;16353:189::o;14534:131::-;5244:13;:11;:13::i;:::-;14591:66:::1;14613:4;14620:10;14632:24;14650:4;14632:9;:24::i;:::-;14591:13;:66::i;14673:156::-:0;5244:13;:11;:13::i;:::-;14764:12:::1;:23:::0;;;::::1;;-1:-1:-1::0;;;14764:23:0::1;-1:-1:-1::0;;;;14764:23:0;;::::1;::::0;;;::::1;::::0;;;14798:13:::1;:23:::0;14673:156::o;16550:118::-;5244:13;:11;:13::i;:::-;16655:5:::1;16650:2;16635:12;;:17;;;;:::i;:::-;:25;;;;:::i;:::-;16620:12;:40:::0;-1:-1:-1;16550:118:0:o;6264:201::-;5244:13;:11;:13::i;:::-;-1:-1:-1;;;;;6353:22:0;::::1;6345:73;;;::::0;-1:-1:-1;;;6345:73:0;;9038:2:1;6345:73:0::1;::::0;::::1;9020:21:1::0;9077:2;9057:18;;;9050:30;9116:34;9096:18;;;9089:62;-1:-1:-1;;;9167:18:1;;;9160:36;9213:19;;6345:73:0::1;8836:402:1::0;6345:73:0::1;6429:28;6448:8;6429:18;:28::i;16218:127::-:0;5244:13;:11;:13::i;:::-;-1:-1:-1;;;;;16305:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;16305:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16218:127::o;17176:1149::-;-1:-1:-1;;;;;17294:21:0;;17268:4;17294:21;;;:10;:21;;;;;;;;17293:22;:45;;;;-1:-1:-1;;;;;;17320:18:0;;;;;;:10;:18;;;;;;;;17319:19;17293:45;17285:69;;;;-1:-1:-1;;;17285:69:0;;9445:2:1;17285:69:0;;;9427:21:1;9484:2;9464:18;;;9457:30;-1:-1:-1;;;9503:18:1;;;9496:41;9554:18;;17285:69:0;9243:335:1;17285:69:0;17371:6;;;;17367:87;;;17401:41;17416:6;17424:9;17435:6;17401:14;:41::i;:::-;17394:48;;;;17367:87;17470:13;;;;:41;;;;-1:-1:-1;;;;;;17488:23:0;;;;;;:15;:23;;;;;;;;17487:24;17470:41;:72;;;;-1:-1:-1;;;;;;17516:26:0;;;;;;:15;:26;;;;;;;;17515:27;17470:72;17466:180;;;17577:12;;17567:6;:22;;17559:75;;;;-1:-1:-1;;;17559:75:0;;9785:2:1;17559:75:0;;;9767:21:1;9824:2;9804:18;;;9797:30;9863:34;9843:18;;;9836:62;-1:-1:-1;;;9914:18:1;;;9907:38;9962:19;;17559:75:0;9583:404:1;17559:75:0;17662:17;:15;:17::i;:::-;17658:61;;;17696:11;:9;:11::i;:::-;17731:24;17758:26;17777:6;17758:18;:26::i;:::-;-1:-1:-1;;;;;17803:15:0;;;;;;:7;:15;;;;;;17731:53;;-1:-1:-1;17803:35:0;-1:-1:-1;17803:35:0;17795:68;;;;-1:-1:-1;;;17795:68:0;;10194:2:1;17795:68:0;;;10176:21:1;10233:2;10213:18;;;10206:30;-1:-1:-1;;;10252:18:1;;;10245:50;10312:18;;17795:68:0;9992:344:1;17795:68:0;-1:-1:-1;;;;;17892:15:0;;;;;;:7;:15;;;;;;:34;;17910:16;;17892:34;:::i;:::-;-1:-1:-1;;;;;17874:15:0;;;;;;:7;:15;;;;;:52;;;;17968:33;17882:6;17991:9;17968:14;:33::i;:::-;:170;;18122:16;17968:170;;;18017:89;18049:15;-1:-1:-1;;;;;18039:25:0;:6;-1:-1:-1;;;;;18039:25:0;;:40;;18074:5;18039:40;;;18067:4;18039:40;18081:6;18089:16;18017:21;:89::i;:::-;-1:-1:-1;;;;;18170:18:0;;;;;;:7;:18;;;;;;17939:199;;-1:-1:-1;18170:39:0;;17939:199;;18170:39;:::i;:::-;-1:-1:-1;;;;;18149:18:0;;;;;;;:7;:18;;;;;:60;;;;18227:68;;;18255:39;18275:18;18255:19;:39::i;:::-;18227:68;;160:25:1;;;148:2;133:18;18227:68:0;;;;;;;-1:-1:-1;18313:4:0;;17176:1149;-1:-1:-1;;;;;17176:1149:0:o;5523:132::-;5404:7;5431:6;-1:-1:-1;;;;;5431:6:0;1432:10;5587:23;5579:68;;;;-1:-1:-1;;;5579:68:0;;10673:2:1;5579:68:0;;;10655:21:1;;;10692:18;;;10685:30;10751:34;10731:18;;;10724:62;10803:18;;5579:68:0;10471:356:1;6625:191:0;6699:16;6718:6;;-1:-1:-1;;;;;6735:17:0;;;-1:-1:-1;;;;;;6735:17:0;;;;;;6768:40;;6718:6;;;;;;;6768:40;;6699:16;6768:40;6688:128;6625:191;:::o;18333:455::-;18426:4;18443:24;18470:26;18489:6;18470:18;:26::i;:::-;-1:-1:-1;;;;;18515:15:0;;;;;;:7;:15;;;;;;18443:53;;-1:-1:-1;18515:35:0;-1:-1:-1;18515:35:0;18507:68;;;;-1:-1:-1;;;18507:68:0;;10194:2:1;18507:68:0;;;10176:21:1;10233:2;10213:18;;;10206:30;-1:-1:-1;;;10252:18:1;;;10245:50;10312:18;;18507:68:0;9992:344:1;18507:68:0;-1:-1:-1;;;;;18604:15:0;;;;;;:7;:15;;;;;;:34;;18622:16;;18604:34;:::i;:::-;-1:-1:-1;;;;;18586:15:0;;;;;;;:7;:15;;;;;;:52;;;;18670:18;;;;;;;:37;;18691:16;;18670:37;:::i;:::-;-1:-1:-1;;;;;18649:18:0;;;;;;;:7;:18;;;;;;;:58;;;;18723:35;;;;;;;;;;18751:6;160:25:1;;148:2;133:18;;14:177;18723:35:0;;;;;;;;-1:-1:-1;18776:4:0;;18333:455;-1:-1:-1;;;;18333:455:0:o;19919:183::-;19969:4;19993:10;-1:-1:-1;;;;;20007:15:0;19993:29;;;;;:40;;-1:-1:-1;20027:6:0;;;;20026:7;19993:40;:56;;;;-1:-1:-1;20037:12:0;;-1:-1:-1;;;20037:12:0;;;;19993:56;:101;;;;;20081:13;;20053:24;20071:4;20053:9;:24::i;:::-;:41;;19986:108;;19919:183;:::o;20110:1404::-;10145:6;:13;;10154:4;-1:-1:-1;;10145:13:0;;;;;;20160:30:::1;::::0;;::::1;::::0;::::1;::::0;;20183:7:::1;20160:30:::0;10145:13;20160:30;;::::1;::::0;;10145:13;20160:30;::::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;;;;;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;20160:30:0;;::::1;-1:-1:-1::0;;;;;20160:30:0::1;::::0;;;;;;20229:13:::1;::::0;20160:30;;-1:-1:-1;;20160:30:0;20276:32:::1;::::0;20229:13;20276:32:::1;:::i;:::-;:50;;;;:::i;:::-;20253:73:::0;-1:-1:-1;20337:20:0::1;20360:30;20253:73:::0;20360:15;:30:::1;:::i;:::-;20337:53;;20401:49;8491:42;20437:12;20401:7;:49::i;:::-;;20480:48;20502:4;7988:42;20515:12;20480:13;:48::i;:::-;-1:-1:-1::0;20582:16:0::1;::::0;;20596:1:::1;20582:16:::0;;;;;::::1;::::0;;20558:21:::1;::::0;20582:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;20582:16:0::1;20558:40;;20627:4;20609;20614:1;20609:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;20609:23:0::1;;;-1:-1:-1::0;;;;;20609:23:0::1;;;::::0;::::1;8491:42;-1:-1:-1::0;;;;;20653:22:0::1;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20643:4;20648:1;20643:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20643:34:0;;::::1;:7;::::0;;::::1;::::0;;;;;;;:34;20690:147:::1;::::0;-1:-1:-1;;;20690:147:0;;8491:42:::1;::::0;20690:68:::1;::::0;:147:::1;::::0;20773:12;;20787:1:::1;::::0;20790:4;;20804::::1;::::0;20811:15:::1;::::0;20690:147:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20850:17;20870:21;20850:41;;20904:20;20968:9;:14;;;20927:55;;20945:9;:20;;;20927:38;;:9;:15;;;:38;;;;:::i;:::-;:55;;;;:::i;:::-;-1:-1:-1::0;;;;;20904:78:0::1;;;20993:26;21056:12;21034:9;:19;;;21022:31;;:9;:31;;;;:::i;:::-;:46;;;;:::i;:::-;20993:75;;21079:19;21128:12;21113:9;:12;;;21101:24;;:9;:24;;;;:::i;:::-;:39;;;;:::i;:::-;21079:61;;21151:24;21210:12;21190:9;:17;;;21178:29;;:9;:29;;;;:::i;:::-;:44;;;;:::i;:::-;21281:20;::::0;21273:65:::1;::::0;21151:71;;-1:-1:-1;21253:15:0::1;::::0;-1:-1:-1;;;;;21281:20:0;;::::1;::::0;21315:18;;21253:15;21273:65;21253:15;21273:65;21315:18;21281:20;21273:65:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;21373:13:0::1;::::0;21365:51:::1;::::0;21252:86;;-1:-1:-1;;;;;;21373:13:0::1;::::0;21400:11;;21365:51:::1;::::0;;;21400:11;21373:13;21365:51:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;21451:18:0::1;::::0;21443:61:::1;::::0;21349:67;;-1:-1:-1;;;;;;21451:18:0::1;::::0;21483:16;;21443:61:::1;::::0;;;21483:16;21451:18;21443:61:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;10181:6:0;:14;;-1:-1:-1;;10181:14:0;;;-1:-1:-1;;;;;;;;;;;;20110:1404:0:o;21522:161::-;-1:-1:-1;;;;;21629:19:0;;21604:4;21629:19;;;:11;:19;;;;;;;;21628:20;:47;;;;-1:-1:-1;;;;;;;21653:22:0;;;;;:11;:22;;;;;;;;21652:23;;21522:161;-1:-1:-1;21522:161:0:o;18796:1115::-;18920:28;;;;;;;;;18942:6;18920:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;18920:28:0;;;;;;;;;;;;;;18959:30;;;;;;;18982:7;18959:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18900:7;;;19045:14;;;18920:28;19045:14;:99;;19141:3;19123:9;:15;;;-1:-1:-1;;;;;19104:34:0;:16;:34;;;;:::i;:::-;:40;;;;:::i;:::-;19045:99;;;19098:3;19081:8;:14;;;-1:-1:-1;;;;;19062:33:0;:16;:33;;;;:::i;:::-;:39;;;;:::i;:::-;19002:142;-1:-1:-1;19177:27:0;19217:4;19207:14;;;;:164;;19356:9;:15;;;-1:-1:-1;;;;;19311:60:0;19333:9;:20;;;19311:42;;:19;:42;;;;:::i;:::-;:60;;;;:::i;:::-;19207:164;;;19281:8;:14;;;-1:-1:-1;;;;;19237:58:0;19259:8;:19;;;19237:41;;:19;:41;;;;:::i;:::-;:58;;;;:::i;:::-;19177:194;;19422:19;19403:16;;:38;;;;:::i;:::-;19384:16;:57;19476:29;19508:41;19530:19;19508;:41;:::i;:::-;19476:73;-1:-1:-1;19564:25:0;;19560:226;;19647:4;19631:22;;;;:7;:22;;;;;;:46;;19656:21;;19631:46;:::i;:::-;19622:4;19606:22;;;;:7;:22;;;;;:71;;;;-1:-1:-1;;;;;19699:75:0;;;19731:42;19751:21;19731:19;:42::i;:::-;19699:75;;160:25:1;;;148:2;133:18;19699:75:0;;;;;;;19560:226;19830:16;;19801:46;;;12716:25:1;;;12772:2;12757:18;;12750:34;;;;19801:46:0;;12689:18:1;19801:46:0;;;;;;;19865:38;19884:19;19865:16;:38;:::i;:::-;19858:45;18796:1115;-1:-1:-1;;;;;;;;;18796:1115:0:o;196:548:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;749:131::-;-1:-1:-1;;;;;824:31:1;;814:42;;804:70;;870:1;867;860:12;885:315;953:6;961;1014:2;1002:9;993:7;989:23;985:32;982:52;;;1030:1;1027;1020:12;982:52;1069:9;1056:23;1088:31;1113:5;1088:31;:::i;:::-;1138:5;1190:2;1175:18;;;;1162:32;;-1:-1:-1;;;885:315:1:o;1397:247::-;1456:6;1509:2;1497:9;1488:7;1484:23;1480:32;1477:52;;;1525:1;1522;1515:12;1477:52;1564:9;1551:23;1583:31;1608:5;1583:31;:::i;1649:456::-;1726:6;1734;1742;1795:2;1783:9;1774:7;1770:23;1766:32;1763:52;;;1811:1;1808;1801:12;1763:52;1850:9;1837:23;1869:31;1894:5;1869:31;:::i;:::-;1919:5;-1:-1:-1;1976:2:1;1961:18;;1948:32;1989:33;1948:32;1989:33;:::i;:::-;1649:456;;2041:7;;-1:-1:-1;;;2095:2:1;2080:18;;;;2067:32;;1649:456::o;2726:180::-;2785:6;2838:2;2826:9;2817:7;2813:23;2809:32;2806:52;;;2854:1;2851;2844:12;2806:52;-1:-1:-1;2877:23:1;;2726:180;-1:-1:-1;2726:180:1:o;3100:160::-;3165:20;;3221:13;;3214:21;3204:32;;3194:60;;3250:1;3247;3240:12;3194:60;3100:160;;;:::o;3265:315::-;3330:6;3338;3391:2;3379:9;3370:7;3366:23;3362:32;3359:52;;;3407:1;3404;3397:12;3359:52;3446:9;3433:23;3465:31;3490:5;3465:31;:::i;:::-;3515:5;-1:-1:-1;3539:35:1;3570:2;3555:18;;3539:35;:::i;:::-;3529:45;;3265:315;;;;;:::o;3585:180::-;3641:6;3694:2;3682:9;3673:7;3669:23;3665:32;3662:52;;;3710:1;3707;3700:12;3662:52;3733:26;3749:9;3733:26;:::i;4212:156::-;4278:20;;4338:4;4327:16;;4317:27;;4307:55;;4358:1;4355;4348:12;4373:819;4493:6;4501;4509;4517;4525;4533;4541;4549;4557;4565;4618:3;4606:9;4597:7;4593:23;4589:33;4586:53;;;4635:1;4632;4625:12;4586:53;4658:27;4675:9;4658:27;:::i;:::-;4648:37;;4704:36;4736:2;4725:9;4721:18;4704:36;:::i;:::-;4694:46;;4759:36;4791:2;4780:9;4776:18;4759:36;:::i;:::-;4749:46;;4814:36;4846:2;4835:9;4831:18;4814:36;:::i;:::-;4804:46;;4869:37;4901:3;4890:9;4886:19;4869:37;:::i;:::-;4859:47;;4925:37;4957:3;4946:9;4942:19;4925:37;:::i;:::-;4915:47;;4981:37;5013:3;5002:9;4998:19;4981:37;:::i;:::-;4971:47;;5037:37;5069:3;5058:9;5054:19;5037:37;:::i;:::-;5027:47;;5093:37;5125:3;5114:9;5110:19;5093:37;:::i;:::-;5083:47;;5149:37;5181:3;5170:9;5166:19;5149:37;:::i;:::-;5139:47;;4373:819;;;;;;;;;;;;;:::o;5197:529::-;5274:6;5282;5290;5343:2;5331:9;5322:7;5318:23;5314:32;5311:52;;;5359:1;5356;5349:12;5311:52;5398:9;5385:23;5417:31;5442:5;5417:31;:::i;:::-;5467:5;-1:-1:-1;5524:2:1;5509:18;;5496:32;5537:33;5496:32;5537:33;:::i;:::-;5589:7;-1:-1:-1;5648:2:1;5633:18;;5620:32;5661:33;5620:32;5661:33;:::i;:::-;5713:7;5703:17;;;5197:529;;;;;:::o;5731:388::-;5799:6;5807;5860:2;5848:9;5839:7;5835:23;5831:32;5828:52;;;5876:1;5873;5866:12;5828:52;5915:9;5902:23;5934:31;5959:5;5934:31;:::i;:::-;5984:5;-1:-1:-1;6041:2:1;6026:18;;6013:32;6054:33;6013:32;6054:33;:::i;:::-;6106:7;6096:17;;;5731:388;;;;;:::o;6124:248::-;6189:6;6197;6250:2;6238:9;6229:7;6225:23;6221:32;6218:52;;;6266:1;6263;6256:12;6218:52;6289:26;6305:9;6289:26;:::i;6377:380::-;6456:1;6452:12;;;;6499;;;6520:61;;6574:4;6566:6;6562:17;6552:27;;6520:61;6627:2;6619:6;6616:14;6596:18;6593:38;6590:161;;6673:10;6668:3;6664:20;6661:1;6654:31;6708:4;6705:1;6698:15;6736:4;6733:1;6726:15;6590:161;;6377:380;;;:::o;7120:127::-;7181:10;7176:3;7172:20;7169:1;7162:31;7212:4;7209:1;7202:15;7236:4;7233:1;7226:15;7252:128;7319:9;;;7340:11;;;7337:37;;;7354:18;;:::i;7385:168::-;7458:9;;;7489;;7506:15;;;7500:22;;7486:37;7476:71;;7527:18;;:::i;7558:217::-;7598:1;7624;7614:132;;7668:10;7663:3;7659:20;7656:1;7649:31;7703:4;7700:1;7693:15;7731:4;7728:1;7721:15;7614:132;-1:-1:-1;7760:9:1;;7558:217::o;7990:148::-;8078:4;8057:12;;;8071;;;8053:31;;8096:13;;8093:39;;;8112:18;;:::i;10341:125::-;10406:9;;;10427:10;;;10424:36;;;10440:18;;:::i;10964:127::-;11025:10;11020:3;11016:20;11013:1;11006:31;11056:4;11053:1;11046:15;11080:4;11077:1;11070:15;11096:251;11166:6;11219:2;11207:9;11198:7;11194:23;11190:32;11187:52;;;11235:1;11232;11225:12;11187:52;11267:9;11261:16;11286:31;11311:5;11286:31;:::i;11352:980::-;11614:4;11662:3;11651:9;11647:19;11693:6;11682:9;11675:25;11719:2;11757:6;11752:2;11741:9;11737:18;11730:34;11800:3;11795:2;11784:9;11780:18;11773:31;11824:6;11859;11853:13;11890:6;11882;11875:22;11928:3;11917:9;11913:19;11906:26;;11967:2;11959:6;11955:15;11941:29;;11988:1;11998:195;12012:6;12009:1;12006:13;11998:195;;;12077:13;;-1:-1:-1;;;;;12073:39:1;12061:52;;12168:15;;;;12133:12;;;;12109:1;12027:9;11998:195;;;-1:-1:-1;;;;;;;12249:32:1;;;;12244:2;12229:18;;12222:60;-1:-1:-1;;;12313:3:1;12298:19;12291:35;12210:3;11352:980;-1:-1:-1;;;11352:980:1:o;12337:200::-;-1:-1:-1;;;;;12473:10:1;;;12461;;;12457:27;;12496:12;;;12493:38;;;12511:18;;:::i;:::-;12493:38;12337:200;;;;:::o

Swarm Source

ipfs://82261509f365cb4b142dec15c1b82ab6d2bd5584782a0a1153af5cc5c51707b2

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.