ETH Price: $3,272.24 (-1.77%)

Token

Lien Protocol (LIEN)
 

Overview

Max Total Supply

1,000,000,000 LIEN

Holders

97

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
erhan.eth
Balance
24,204,379.349806905220885218 LIEN

Value
$0.00
0xcd6c0c912b6878772eee928988c61eab9be87394
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
LIEN

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-12-10
*/

/*
A protocol for creating Options and Stablecoins out of ETH.

Website: https://www.lienfi.org
Telegram: https://t.me/lienfi_erc20
Twitter: https://twitter.com/lienfi_erc
Dapp: https://app.lien.finance
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.21;

library SafeMathInt {
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

interface IERC20 {
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address _owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

abstract contract Ownable {
    address internal owner;
    constructor(address _owner) {owner = _owner;}
    modifier onlyOwner() {require(isOwner(msg.sender), "!OWNER"); _;}
    function isOwner(address account) public view returns (bool) {return account == owner;}
    function transferOwnership(address payable adr) public onlyOwner {owner = adr; emit OwnershipTransferred(adr);}
    function renounceOwnership() public onlyOwner {owner = address(0); emit OwnershipTransferred(address(0));}
    event OwnershipTransferred(address owner);
}

interface IUniswapRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

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

interface IUniswapFactory {
    function createPair(address tokenA, address tokenB) external returns (address uniswapPair);
    function getPair(address tokenA, address tokenB) external view returns (address uniswapPair);
}

contract LIEN is IERC20, Ownable {
    using SafeMathInt for uint256;
    string private constant _name = 'Lien Protocol';
    string private constant _symbol = 'LIEN';
    uint8 private constant _decimals = 18;
    uint256 private _supplyTotal = 10 ** 9 * (10 ** _decimals);
    IUniswapRouter uniswapRouter;
    address public uniswapPair;
    bool private _tradeActivated = false;
    bool private _swapActivated = true;
    uint256 private _swapFeeAt;
    bool private _swapping;
    uint256 _countSwaps = 1;
    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) public _isExemptFromFee;
    uint256 private _feeSwapMax = ( _supplyTotal * 3) / 100;
    uint256 private _feeSwapMin = ( _supplyTotal * 1) / 100000;
    modifier lockSwap {_swapping = true; _; _swapping = false;}
    uint256 private liquidityFee = 0;
    uint256 private marketingFee = 0; 
    uint256 private developmentFee = 100; 
    uint256 private burnFee = 0;
    uint256 private totalFee = 2400; 
    uint256 private sellFee = 2400; 
    uint256 private transferFee = 2400;
    uint256 private denominator = 10000;
    address internal constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address internal development_receiver = 0x769C2d62ff3B7BdbD7E4A1Df1b6d12840acB36eB;
    address internal marketing_receiver = 0x769C2d62ff3B7BdbD7E4A1Df1b6d12840acB36eB; 
    address internal liquidity_receiver = 0x769C2d62ff3B7BdbD7E4A1Df1b6d12840acB36eB;
    uint256 public maxTransactionSize = ( _supplyTotal * 130 ) / 10000;
    uint256 public maxSellSize = ( _supplyTotal * 130 ) / 10000;
    uint256 public maxWalletSize = ( _supplyTotal * 130 ) / 10000;

    constructor() Ownable(msg.sender) {
        IUniswapRouter _router = IUniswapRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        address _pair = IUniswapFactory(_router.factory()).createPair(address(this), _router.WETH());
        uniswapRouter = _router; uniswapPair = _pair;
        _isExemptFromFee[liquidity_receiver] = true;
        _isExemptFromFee[marketing_receiver] = true;
        _isExemptFromFee[development_receiver] = true;
        _isExemptFromFee[msg.sender] = true;
        _balances[msg.sender] = _supplyTotal;
        emit Transfer(address(0), msg.sender, _supplyTotal);
    }

    receive() external payable {}
    function name() public pure returns (string memory) {return _name;}
    function symbol() public pure returns (string memory) {return _symbol;}
    function decimals() public pure returns (uint8) {return _decimals;}
    function getOwner() external view override returns (address) { return owner; }
    function balanceOf(address account) public view override returns (uint256) {return _balances[account];}
    function transfer(address recipient, uint256 amount) public override returns (bool) {_transfer(msg.sender, recipient, amount);return true;}
    function allowance(address owner, address spender) public view override returns (uint256) {return _allowances[owner][spender];}
    function approve(address spender, uint256 amount) public override returns (bool) {_approve(msg.sender, spender, amount);return true;}
    function totalSupply() public view override returns (uint256) {return _supplyTotal.sub(balanceOf(DEAD)).sub(balanceOf(address(0)));}
    
    function updateLiquidifySettings(uint256 _liquidity, uint256 _marketing, uint256 _burn, uint256 _development, uint256 _total, uint256 _sell, uint256 _trans) external onlyOwner {
        liquidityFee = _liquidity; marketingFee = _marketing; burnFee = _burn; developmentFee = _development; totalFee = _total; sellFee = _sell; transferFee = _trans;
        require(totalFee <= denominator && sellFee <= denominator && transferFee <= denominator, "totalFee and sellFee cannot be more than 100%");
    }

    function swapTokens(uint256 tokens) private lockSwap {
        uint256 _denominator = (liquidityFee.add(1).add(marketingFee).add(developmentFee)).mul(2);
        uint256 tokensToAddLiquidityWith = tokens.mul(liquidityFee).div(_denominator);
        uint256 toSwap = tokens.sub(tokensToAddLiquidityWith);
        uint256 initialBalance = address(this).balance;
        swapTokensToETH(toSwap);
        uint256 deltaBalance = address(this).balance.sub(initialBalance);
        uint256 unitBalance= deltaBalance.div(_denominator.sub(liquidityFee));
        uint256 ETHToAddLiquidityWith = unitBalance.mul(liquidityFee);
        if(ETHToAddLiquidityWith > uint256(0)){addLiquidity(tokensToAddLiquidityWith, ETHToAddLiquidityWith); }
        uint256 marketingAmt = unitBalance.mul(2).mul(marketingFee);
        if(marketingAmt > 0){payable(marketing_receiver).transfer(marketingAmt);}
        uint256 contractBalance = address(this).balance;
        if(contractBalance > uint256(0)){payable(development_receiver).transfer(contractBalance);}
    }
    
    function _transfer(address sender, address recipient, uint256 amount) private {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        if(!_isExemptFromFee[sender] && !_isExemptFromFee[recipient]){require(_tradeActivated, "_tradeActivated");}
        if(!_isExemptFromFee[sender] && !_isExemptFromFee[recipient] && recipient != address(uniswapPair) && recipient != address(DEAD)){
        require((_balances[recipient].add(amount)) <= maxWalletSize, "Exceeds maximum wallet amount.");}
        if(sender != uniswapPair){require(amount <= maxSellSize || _isExemptFromFee[sender] || _isExemptFromFee[recipient], "TX Limit Exceeded");}
        require(amount <= maxTransactionSize || _isExemptFromFee[sender] || _isExemptFromFee[recipient], "TX Limit Exceeded"); 
        if(recipient == uniswapPair && !_isExemptFromFee[sender]){_swapFeeAt += uint256(1);}
        if(shouldClog(sender, recipient, amount)){swapTokens(min(balanceOf(address(this)), _feeSwapMax)); _swapFeeAt = uint256(0);}
        if (!_tradeActivated || !_isExemptFromFee[sender]) { _balances[sender] = _balances[sender].sub(amount); }
        uint256 amountReceived = shouldTake(sender, recipient) ? getAmount(sender, recipient, amount) : amount;
        _balances[recipient] = _balances[recipient].add(amountReceived);
        emit Transfer(sender, recipient, amountReceived);
    }
    
    function initialize() external onlyOwner {_tradeActivated = true;}
    function swapTokensToETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapRouter.WETH();
        _approve(address(this), address(uniswapRouter), tokenAmount);
        uniswapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp);
    }

    function shouldTake(address sender, address recipient) internal view returns (bool) {
        return !_isExemptFromFee[sender] && !_isExemptFromFee[recipient];
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ETHAmount) private {
        _approve(address(this), address(uniswapRouter), tokenAmount);
        uniswapRouter.addLiquidityETH{value: ETHAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            liquidity_receiver,
            block.timestamp);
    }

    function min(uint256 a, uint256 b) private pure returns (uint256) {
      return (a > b) ? b : a;
    }
    
    function shouldClog(address sender, address recipient, uint256 amount) internal view returns (bool) {
        bool aboveMin = amount >= _feeSwapMin;
        bool aboveThreshold = balanceOf(address(this)) >= _feeSwapMin;
        return !_swapping && _swapActivated && _tradeActivated && aboveMin && !_isExemptFromFee[sender] && recipient == uniswapPair && _swapFeeAt >= _countSwaps && aboveThreshold;
    }
    
    function getFee(address sender, address recipient) internal view returns (uint256) {
        if(recipient == uniswapPair){return sellFee;}
        if(sender == uniswapPair){return totalFee;}
        return transferFee;
    }

    function getAmount(address sender, address recipient, uint256 amount) internal returns (uint256) {
        if(getFee(sender, recipient) > 0){
        uint256 feeAmount = amount.div(denominator).mul(getFee(sender, recipient));
        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);
        if(burnFee > uint256(0) && getFee(sender, recipient) > burnFee){_transfer(address(this), address(DEAD), amount.div(denominator).mul(burnFee));}
        return amount.sub(feeAmount);} return amount;
    }

    function updateParams(uint256 _buy, uint256 _sell, uint256 _wallet) external onlyOwner {
        uint256 newTx = _supplyTotal.mul(_buy).div(10000); uint256 newTransfer = _supplyTotal.mul(_sell).div(10000); uint256 newWallet = _supplyTotal.mul(_wallet).div(10000);
        maxTransactionSize = newTx; maxSellSize = newTransfer; maxWalletSize = newWallet;
        uint256 limit = totalSupply().mul(5).div(1000);
        require(newTx >= limit && newTransfer >= limit && newWallet >= limit, "Max TXs and Max Wallet cannot be less than .5%");
    }
    
    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, msg.sender, _allowances[sender][msg.sender].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
}

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":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","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":[{"internalType":"address","name":"","type":"address"}],"name":"_isExemptFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_burn","type":"uint256"},{"internalType":"uint256","name":"_development","type":"uint256"},{"internalType":"uint256","name":"_total","type":"uint256"},{"internalType":"uint256","name":"_sell","type":"uint256"},{"internalType":"uint256","name":"_trans","type":"uint256"}],"name":"updateLiquidifySettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_sell","type":"uint256"},{"internalType":"uint256","name":"_wallet","type":"uint256"}],"name":"updateParams","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126012600a620004ae565b6200002290633b9aca00620004c5565b60018181556003805461ffff60a01b1916600160a81b1781556006919091556064916200004f91620004c5565b6200005b9190620004df565b600a55620186a06001546001620000739190620004c5565b6200007f9190620004df565b600b555f600c819055600d8190556064600e55600f556109606010819055601181905560125561271060138190556014805473769c2d62ff3b7bdbd7e4a1df1b6d12840acb36eb6001600160a01b0319918216811790925560158054821683179055601680549091169091179055600154620000fd906082620004c5565b620001099190620004df565b6017556127106001546082620001209190620004c5565b6200012c9190620004df565b6018556127106001546082620001439190620004c5565b6200014f9190620004df565b6019553480156200015e575f80fd5b505f80546001600160a01b031916331781556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d9291839163c45a0155916004808201926020929091908290030181865afa158015620001c3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001e99190620004ff565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000235573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200025b9190620004ff565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015620002a6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002cc9190620004ff565b600280546001600160a01b038581166001600160a01b03199283161790925560038054848416921691909117905560165481165f908152600960209081526040808320805460ff19908116600190811790925560155486168552828520805482168317905560145490951684528184208054861682179055338085528285208054909616821790955554600783528184208190559051908152939450919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505062000527565b634e487b7160e01b5f52601160045260245ffd5b600181815b80851115620003f357815f1904821115620003d757620003d76200039f565b80851615620003e557918102915b93841c9390800290620003b8565b509250929050565b5f826200040b57506001620004a8565b816200041957505f620004a8565b81600181146200043257600281146200043d576200045d565b6001915050620004a8565b60ff8411156200045157620004516200039f565b50506001821b620004a8565b5060208310610133831016604e8410600b841016171562000482575081810a620004a8565b6200048e8383620003b3565b805f1904821115620004a457620004a46200039f565b0290505b92915050565b5f620004be60ff841683620003fb565b9392505050565b8082028115828204841417620004a857620004a86200039f565b5f82620004fa57634e487b7160e01b5f52601260045260245ffd5b500490565b5f6020828403121562000510575f80fd5b81516001600160a01b0381168114620004be575f80fd5b61180680620005355f395ff3fe608060405260043610610129575f3560e01c8063715018a6116100a857806395d89b411161006d57806395d89b4114610357578063a9059cbb14610383578063c816841b146103a2578063d39e216c146103c1578063dd62ed3e146103d6578063f2fde38b1461041a575f80fd5b8063715018a6146102cb5780638129fc1c146102df57806388db8a01146102f3578063893d20e8146103125780638f3fa86014610342575f80fd5b806326aa2a79116100ee57806326aa2a791461020c57806328b13b611461023a5780632f54bf6e1461024f578063313ce5671461027c57806370a0823114610297575f80fd5b8063063e41d41461013457806306fdde0314610155578063095ea7b31461019c57806318160ddd146101cb57806323b872dd146101ed575f80fd5b3661013057005b5f80fd5b34801561013f575f80fd5b5061015361014e3660046114c3565b610439565b005b348015610160575f80fd5b5060408051808201909152600d81526c131a595b88141c9bdd1bd8dbdb609a1b60208201525b60405161019391906114ec565b60405180910390f35b3480156101a7575f80fd5b506101bb6101b636600461154e565b61057e565b6040519015158152602001610193565b3480156101d6575f80fd5b506101df610594565b604051908152602001610193565b3480156101f8575f80fd5b506101bb610207366004611578565b610604565b348015610217575f80fd5b506101bb6102263660046115b6565b60096020525f908152604090205460ff1681565b348015610245575f80fd5b506101df60175481565b34801561025a575f80fd5b506101bb6102693660046115b6565b5f546001600160a01b0391821691161490565b348015610287575f80fd5b5060405160128152602001610193565b3480156102a2575f80fd5b506101df6102b13660046115b6565b6001600160a01b03165f9081526007602052604090205490565b3480156102d6575f80fd5b5061015361066c565b3480156102ea575f80fd5b506101536106d9565b3480156102fe575f80fd5b5061015361030d3660046115d1565b610717565b34801561031d575f80fd5b505f546001600160a01b03165b6040516001600160a01b039091168152602001610193565b34801561034d575f80fd5b506101df60195481565b348015610362575f80fd5b506040805180820190915260048152632624a2a760e11b6020820152610186565b34801561038e575f80fd5b506101bb61039d36600461154e565b6107eb565b3480156103ad575f80fd5b5060035461032a906001600160a01b031681565b3480156103cc575f80fd5b506101df60185481565b3480156103e1575f80fd5b506101df6103f0366004611618565b6001600160a01b039182165f90815260086020908152604080832093909416825291909152205490565b348015610425575f80fd5b506101536104343660046115b6565b6107f7565b5f546001600160a01b0316331461046b5760405162461bcd60e51b81526004016104629061164f565b60405180910390fd5b5f61048d6127106104878660015461087390919063ffffffff16565b9061087e565b90505f6104ab6127106104878660015461087390919063ffffffff16565b90505f6104c96127106104878660015461087390919063ffffffff16565b60178490556018839055601981905590505f6104f46103e861048760056104ee610594565b90610873565b90508084101580156105065750808310155b80156105125750808210155b6105755760405162461bcd60e51b815260206004820152602e60248201527f4d61782054587320616e64204d61782057616c6c65742063616e6e6f7420626560448201526d206c657373207468616e202e352560901b6064820152608401610462565b50505050505050565b5f61058a338484610889565b5060015b92915050565b60076020527f6d5257204ebe7d88fd91ae87941cb2dd9d8062b64ae5a2bd2d28ec40b9fbf6df5461dead5f9081527fb0c2646e02af70b79e3fe9277b98373379f54150e4e26b2b5650139f7a75a65d5460015491926105ff9290916105f991906109ac565b906109ac565b905090565b5f6106108484846109b7565b610661843361065c856040518060600160405280602881526020016117a9602891396001600160a01b038a165f9081526008602090815260408083203384529091529020549190610ec1565b610889565b5060015b9392505050565b5f546001600160a01b031633146106955760405162461bcd60e51b81526004016104629061164f565b5f80546001600160a01b03191681556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a1565b5f546001600160a01b031633146107025760405162461bcd60e51b81526004016104629061164f565b6003805460ff60a01b1916600160a01b179055565b5f546001600160a01b031633146107405760405162461bcd60e51b81526004016104629061164f565b600c879055600d869055600f859055600e8490556010839055601182905560128190556013548311801590610779575060135460115411155b8015610789575060135460125411155b6105755760405162461bcd60e51b815260206004820152602d60248201527f746f74616c46656520616e642073656c6c4665652063616e6e6f74206265206d60448201526c6f7265207468616e203130302560981b6064820152608401610462565b5f61058a3384846109b7565b5f546001600160a01b031633146108205760405162461bcd60e51b81526004016104629061164f565b5f80546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b5f6106658284611683565b5f610665828461169a565b6001600160a01b0383166108eb5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610462565b6001600160a01b03821661094c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610462565b6001600160a01b038381165f8181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f61066582846116b9565b6001600160a01b038316610a1b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610462565b6001600160a01b038216610a7d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610462565b6001600160a01b0383165f9081526009602052604090205460ff16158015610abd57506001600160a01b0382165f9081526009602052604090205460ff16155b15610b0d57600354600160a01b900460ff16610b0d5760405162461bcd60e51b815260206004820152600f60248201526e17dd1c9859195058dd1a5d985d1959608a1b6044820152606401610462565b6001600160a01b0383165f9081526009602052604090205460ff16158015610b4d57506001600160a01b0382165f9081526009602052604090205460ff16155b8015610b6757506003546001600160a01b03838116911614155b8015610b7e57506001600160a01b03821661dead14155b15610bf6576019546001600160a01b0383165f90815260076020526040902054610ba89083610eec565b1115610bf65760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e00006044820152606401610462565b6003546001600160a01b03848116911614610c955760185481111580610c3357506001600160a01b0383165f9081526009602052604090205460ff165b80610c5557506001600160a01b0382165f9081526009602052604090205460ff165b610c955760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610462565b60175481111580610cbd57506001600160a01b0383165f9081526009602052604090205460ff165b80610cdf57506001600160a01b0382165f9081526009602052604090205460ff165b610d1f5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610462565b6003546001600160a01b038381169116148015610d5457506001600160a01b0383165f9081526009602052604090205460ff16155b15610d7157600160045f828254610d6b91906116cc565b90915550505b610d7c838383610ef7565b15610daa57305f90815260076020526040902054610da590610da090600a54610fae565b610fc2565b5f6004555b600354600160a01b900460ff161580610ddb57506001600160a01b0383165f9081526009602052604090205460ff16155b15610e1b576001600160a01b0383165f90815260076020526040902054610e0290826109ac565b6001600160a01b0384165f908152600760205260409020555b5f610e268484611132565b610e305781610e3b565b610e3b848484611176565b6001600160a01b0384165f90815260076020526040902054909150610e609082610eec565b6001600160a01b038085165f8181526007602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610eb39085815260200190565b60405180910390a350505050565b5f8184841115610ee45760405162461bcd60e51b815260040161046291906114ec565b505050900390565b5f61066582846116cc565b600b54305f90815260076020526040812054600554919280851015929110159060ff16158015610f305750600354600160a81b900460ff165b8015610f455750600354600160a01b900460ff165b8015610f4e5750815b8015610f7257506001600160a01b0386165f9081526009602052604090205460ff16155b8015610f8b57506003546001600160a01b038681169116145b8015610f9b575060065460045410155b8015610fa45750805b9695505050505050565b5f818311610fbc5782610665565b50919050565b6005805460ff19166001908117909155600e54600d54600c545f93610ffb936002936104ee939192610ff5928391610eec565b90610eec565b90505f61101782610487600c548661087390919063ffffffff16565b90505f61102484836109ac565b90504761103082611278565b5f61103b47836109ac565b90505f61105d611056600c54886109ac90919063ffffffff16565b839061087e565b90505f611075600c548361087390919063ffffffff16565b905080156110875761108786826113c8565b600d545f9061109b906104ee856002610873565b905080156110dc576015546040516001600160a01b039091169082156108fc029083905f818181858888f193505050501580156110da573d5f803e3d5ffd5b505b47801561111c576014546040516001600160a01b039091169082156108fc029083905f818181858888f1935050505015801561111a573d5f803e3d5ffd5b505b50506005805460ff191690555050505050505050565b6001600160a01b0382165f9081526009602052604081205460ff161580156106655750506001600160a01b03165f9081526009602052604090205460ff1615919050565b5f806111828585611479565b1115611271575f6111a46111968686611479565b6013546104ee90869061087e565b305f908152600760205260409020549091506111c09082610eec565b305f81815260076020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906112109085815260200190565b60405180910390a35f600f541180156112335750600f546112318686611479565b115b1561125f5761125f3061dead61125a600f546104ee6013548961087e90919063ffffffff16565b6109b7565b61126983826109ac565b915050610665565b5092915050565b6040805160028082526060820183525f9260208301908036833701905050905030815f815181106112ab576112ab6116df565b6001600160a01b03928316602091820292909201810191909152600254604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611302573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061132691906116f3565b81600181518110611339576113396116df565b6001600160a01b03928316602091820292909201015260025461135f9130911684610889565b60025460405163791ac94760e01b81526001600160a01b039091169063791ac947906113979085905f9086903090429060040161170e565b5f604051808303815f87803b1580156113ae575f80fd5b505af11580156113c0573d5f803e3d5ffd5b505050505050565b6002546113e09030906001600160a01b031684610889565b60025460165460405163f305d71960e01b8152306004820152602481018590525f6044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af115801561144d573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611472919061177d565b5050505050565b6003545f906001600160a01b039081169083160361149a575060115461058e565b6003546001600160a01b03908116908416036114b9575060105461058e565b5060125492915050565b5f805f606084860312156114d5575f80fd5b505081359360208301359350604090920135919050565b5f6020808352835180828501525f5b81811015611517578581018301518582016040015282016114fb565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461154b575f80fd5b50565b5f806040838503121561155f575f80fd5b823561156a81611537565b946020939093013593505050565b5f805f6060848603121561158a575f80fd5b833561159581611537565b925060208401356115a581611537565b929592945050506040919091013590565b5f602082840312156115c6575f80fd5b813561066581611537565b5f805f805f805f60e0888a0312156115e7575f80fd5b505085359760208701359750604087013596606081013596506080810135955060a0810135945060c0013592509050565b5f8060408385031215611629575f80fd5b823561163481611537565b9150602083013561164481611537565b809150509250929050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761058e5761058e61166f565b5f826116b457634e487b7160e01b5f52601260045260245ffd5b500490565b8181038181111561058e5761058e61166f565b8082018082111561058e5761058e61166f565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215611703575f80fd5b815161066581611537565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b8181101561175c5784516001600160a01b031683529383019391830191600101611737565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f6060848603121561178f575f80fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220523dd717ada03b9a3cd5380dfce5e92c3aa5abeb7f31ec5db3c89e697ea9cf8f64736f6c63430008150033

Deployed Bytecode

0x608060405260043610610129575f3560e01c8063715018a6116100a857806395d89b411161006d57806395d89b4114610357578063a9059cbb14610383578063c816841b146103a2578063d39e216c146103c1578063dd62ed3e146103d6578063f2fde38b1461041a575f80fd5b8063715018a6146102cb5780638129fc1c146102df57806388db8a01146102f3578063893d20e8146103125780638f3fa86014610342575f80fd5b806326aa2a79116100ee57806326aa2a791461020c57806328b13b611461023a5780632f54bf6e1461024f578063313ce5671461027c57806370a0823114610297575f80fd5b8063063e41d41461013457806306fdde0314610155578063095ea7b31461019c57806318160ddd146101cb57806323b872dd146101ed575f80fd5b3661013057005b5f80fd5b34801561013f575f80fd5b5061015361014e3660046114c3565b610439565b005b348015610160575f80fd5b5060408051808201909152600d81526c131a595b88141c9bdd1bd8dbdb609a1b60208201525b60405161019391906114ec565b60405180910390f35b3480156101a7575f80fd5b506101bb6101b636600461154e565b61057e565b6040519015158152602001610193565b3480156101d6575f80fd5b506101df610594565b604051908152602001610193565b3480156101f8575f80fd5b506101bb610207366004611578565b610604565b348015610217575f80fd5b506101bb6102263660046115b6565b60096020525f908152604090205460ff1681565b348015610245575f80fd5b506101df60175481565b34801561025a575f80fd5b506101bb6102693660046115b6565b5f546001600160a01b0391821691161490565b348015610287575f80fd5b5060405160128152602001610193565b3480156102a2575f80fd5b506101df6102b13660046115b6565b6001600160a01b03165f9081526007602052604090205490565b3480156102d6575f80fd5b5061015361066c565b3480156102ea575f80fd5b506101536106d9565b3480156102fe575f80fd5b5061015361030d3660046115d1565b610717565b34801561031d575f80fd5b505f546001600160a01b03165b6040516001600160a01b039091168152602001610193565b34801561034d575f80fd5b506101df60195481565b348015610362575f80fd5b506040805180820190915260048152632624a2a760e11b6020820152610186565b34801561038e575f80fd5b506101bb61039d36600461154e565b6107eb565b3480156103ad575f80fd5b5060035461032a906001600160a01b031681565b3480156103cc575f80fd5b506101df60185481565b3480156103e1575f80fd5b506101df6103f0366004611618565b6001600160a01b039182165f90815260086020908152604080832093909416825291909152205490565b348015610425575f80fd5b506101536104343660046115b6565b6107f7565b5f546001600160a01b0316331461046b5760405162461bcd60e51b81526004016104629061164f565b60405180910390fd5b5f61048d6127106104878660015461087390919063ffffffff16565b9061087e565b90505f6104ab6127106104878660015461087390919063ffffffff16565b90505f6104c96127106104878660015461087390919063ffffffff16565b60178490556018839055601981905590505f6104f46103e861048760056104ee610594565b90610873565b90508084101580156105065750808310155b80156105125750808210155b6105755760405162461bcd60e51b815260206004820152602e60248201527f4d61782054587320616e64204d61782057616c6c65742063616e6e6f7420626560448201526d206c657373207468616e202e352560901b6064820152608401610462565b50505050505050565b5f61058a338484610889565b5060015b92915050565b60076020527f6d5257204ebe7d88fd91ae87941cb2dd9d8062b64ae5a2bd2d28ec40b9fbf6df5461dead5f9081527fb0c2646e02af70b79e3fe9277b98373379f54150e4e26b2b5650139f7a75a65d5460015491926105ff9290916105f991906109ac565b906109ac565b905090565b5f6106108484846109b7565b610661843361065c856040518060600160405280602881526020016117a9602891396001600160a01b038a165f9081526008602090815260408083203384529091529020549190610ec1565b610889565b5060015b9392505050565b5f546001600160a01b031633146106955760405162461bcd60e51b81526004016104629061164f565b5f80546001600160a01b03191681556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a1565b5f546001600160a01b031633146107025760405162461bcd60e51b81526004016104629061164f565b6003805460ff60a01b1916600160a01b179055565b5f546001600160a01b031633146107405760405162461bcd60e51b81526004016104629061164f565b600c879055600d869055600f859055600e8490556010839055601182905560128190556013548311801590610779575060135460115411155b8015610789575060135460125411155b6105755760405162461bcd60e51b815260206004820152602d60248201527f746f74616c46656520616e642073656c6c4665652063616e6e6f74206265206d60448201526c6f7265207468616e203130302560981b6064820152608401610462565b5f61058a3384846109b7565b5f546001600160a01b031633146108205760405162461bcd60e51b81526004016104629061164f565b5f80546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b5f6106658284611683565b5f610665828461169a565b6001600160a01b0383166108eb5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610462565b6001600160a01b03821661094c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610462565b6001600160a01b038381165f8181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f61066582846116b9565b6001600160a01b038316610a1b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610462565b6001600160a01b038216610a7d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610462565b6001600160a01b0383165f9081526009602052604090205460ff16158015610abd57506001600160a01b0382165f9081526009602052604090205460ff16155b15610b0d57600354600160a01b900460ff16610b0d5760405162461bcd60e51b815260206004820152600f60248201526e17dd1c9859195058dd1a5d985d1959608a1b6044820152606401610462565b6001600160a01b0383165f9081526009602052604090205460ff16158015610b4d57506001600160a01b0382165f9081526009602052604090205460ff16155b8015610b6757506003546001600160a01b03838116911614155b8015610b7e57506001600160a01b03821661dead14155b15610bf6576019546001600160a01b0383165f90815260076020526040902054610ba89083610eec565b1115610bf65760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e00006044820152606401610462565b6003546001600160a01b03848116911614610c955760185481111580610c3357506001600160a01b0383165f9081526009602052604090205460ff165b80610c5557506001600160a01b0382165f9081526009602052604090205460ff165b610c955760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610462565b60175481111580610cbd57506001600160a01b0383165f9081526009602052604090205460ff165b80610cdf57506001600160a01b0382165f9081526009602052604090205460ff165b610d1f5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610462565b6003546001600160a01b038381169116148015610d5457506001600160a01b0383165f9081526009602052604090205460ff16155b15610d7157600160045f828254610d6b91906116cc565b90915550505b610d7c838383610ef7565b15610daa57305f90815260076020526040902054610da590610da090600a54610fae565b610fc2565b5f6004555b600354600160a01b900460ff161580610ddb57506001600160a01b0383165f9081526009602052604090205460ff16155b15610e1b576001600160a01b0383165f90815260076020526040902054610e0290826109ac565b6001600160a01b0384165f908152600760205260409020555b5f610e268484611132565b610e305781610e3b565b610e3b848484611176565b6001600160a01b0384165f90815260076020526040902054909150610e609082610eec565b6001600160a01b038085165f8181526007602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610eb39085815260200190565b60405180910390a350505050565b5f8184841115610ee45760405162461bcd60e51b815260040161046291906114ec565b505050900390565b5f61066582846116cc565b600b54305f90815260076020526040812054600554919280851015929110159060ff16158015610f305750600354600160a81b900460ff165b8015610f455750600354600160a01b900460ff165b8015610f4e5750815b8015610f7257506001600160a01b0386165f9081526009602052604090205460ff16155b8015610f8b57506003546001600160a01b038681169116145b8015610f9b575060065460045410155b8015610fa45750805b9695505050505050565b5f818311610fbc5782610665565b50919050565b6005805460ff19166001908117909155600e54600d54600c545f93610ffb936002936104ee939192610ff5928391610eec565b90610eec565b90505f61101782610487600c548661087390919063ffffffff16565b90505f61102484836109ac565b90504761103082611278565b5f61103b47836109ac565b90505f61105d611056600c54886109ac90919063ffffffff16565b839061087e565b90505f611075600c548361087390919063ffffffff16565b905080156110875761108786826113c8565b600d545f9061109b906104ee856002610873565b905080156110dc576015546040516001600160a01b039091169082156108fc029083905f818181858888f193505050501580156110da573d5f803e3d5ffd5b505b47801561111c576014546040516001600160a01b039091169082156108fc029083905f818181858888f1935050505015801561111a573d5f803e3d5ffd5b505b50506005805460ff191690555050505050505050565b6001600160a01b0382165f9081526009602052604081205460ff161580156106655750506001600160a01b03165f9081526009602052604090205460ff1615919050565b5f806111828585611479565b1115611271575f6111a46111968686611479565b6013546104ee90869061087e565b305f908152600760205260409020549091506111c09082610eec565b305f81815260076020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906112109085815260200190565b60405180910390a35f600f541180156112335750600f546112318686611479565b115b1561125f5761125f3061dead61125a600f546104ee6013548961087e90919063ffffffff16565b6109b7565b61126983826109ac565b915050610665565b5092915050565b6040805160028082526060820183525f9260208301908036833701905050905030815f815181106112ab576112ab6116df565b6001600160a01b03928316602091820292909201810191909152600254604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611302573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061132691906116f3565b81600181518110611339576113396116df565b6001600160a01b03928316602091820292909201015260025461135f9130911684610889565b60025460405163791ac94760e01b81526001600160a01b039091169063791ac947906113979085905f9086903090429060040161170e565b5f604051808303815f87803b1580156113ae575f80fd5b505af11580156113c0573d5f803e3d5ffd5b505050505050565b6002546113e09030906001600160a01b031684610889565b60025460165460405163f305d71960e01b8152306004820152602481018590525f6044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af115801561144d573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611472919061177d565b5050505050565b6003545f906001600160a01b039081169083160361149a575060115461058e565b6003546001600160a01b03908116908416036114b9575060105461058e565b5060125492915050565b5f805f606084860312156114d5575f80fd5b505081359360208301359350604090920135919050565b5f6020808352835180828501525f5b81811015611517578581018301518582016040015282016114fb565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461154b575f80fd5b50565b5f806040838503121561155f575f80fd5b823561156a81611537565b946020939093013593505050565b5f805f6060848603121561158a575f80fd5b833561159581611537565b925060208401356115a581611537565b929592945050506040919091013590565b5f602082840312156115c6575f80fd5b813561066581611537565b5f805f805f805f60e0888a0312156115e7575f80fd5b505085359760208701359750604087013596606081013596506080810135955060a0810135945060c0013592509050565b5f8060408385031215611629575f80fd5b823561163481611537565b9150602083013561164481611537565b809150509250929050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761058e5761058e61166f565b5f826116b457634e487b7160e01b5f52601260045260245ffd5b500490565b8181038181111561058e5761058e61166f565b8082018082111561058e5761058e61166f565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215611703575f80fd5b815161066581611537565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b8181101561175c5784516001600160a01b031683529383019391830191600101611737565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f6060848603121561178f575f80fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220523dd717ada03b9a3cd5380dfce5e92c3aa5abeb7f31ec5db3c89e697ea9cf8f64736f6c63430008150033

Deployed Bytecode Sourcemap

5019:10121:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13924:549;;;;;;;;;;-1:-1:-1;13924:549:0;;;;;:::i;:::-;;:::i;:::-;;7446:67;;;;;;;;;;-1:-1:-1;7506:5:0;;;;;;;;;;;;-1:-1:-1;;;7506:5:0;;;;7446:67;;;;;;;:::i;:::-;;;;;;;;8140:133;;;;;;;;;;-1:-1:-1;8140:133:0;;;;;:::i;:::-;;:::i;:::-;;;1509:14:1;;1502:22;1484:41;;1472:2;1457:18;8140:133:0;1344:187:1;8279:132:0;;;;;;;;;;;;;:::i;:::-;;;1682:25:1;;;1670:2;1655:18;8279:132:0;1536:177:1;14485:309:0;;;;;;;;;;-1:-1:-1;14485:309:0;;;;;:::i;:::-;;:::i;5670:49::-;;;;;;;;;;-1:-1:-1;5670:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;6581:66;;;;;;;;;;;;;;;;3790:87;;;;;;;;;;-1:-1:-1;3790:87:0;;;;;:::i;:::-;3845:4;3870:5;-1:-1:-1;;;;;3859:16:0;;;3870:5;;3859:16;;3790:87;7596:67;;;;;;;;;;-1:-1:-1;7596:67:0;;5231:2;2573:36:1;;2561:2;2546:18;7596:67:0;2431:184:1;7753:103:0;;;;;;;;;;-1:-1:-1;7753:103:0;;;;;:::i;:::-;-1:-1:-1;;;;;7836:18:0;7819:7;7836:18;;;:9;:18;;;;;;;7753:103;4000:106;;;;;;;;;;;;;:::i;11487:66::-;;;;;;;;;;;;;:::i;8423:501::-;;;;;;;;;;-1:-1:-1;8423:501:0;;;;;:::i;:::-;;:::i;7669:78::-;;;;;;;;;;-1:-1:-1;7721:7:0;7739:5;-1:-1:-1;;;;;7739:5:0;7669:78;;;-1:-1:-1;;;;;3381:32:1;;;3363:51;;3351:2;3336:18;7669:78:0;3217:203:1;6720:61:0;;;;;;;;;;;;;;;;7519:71;;;;;;;;;;-1:-1:-1;7581:7:0;;;;;;;;;;;;-1:-1:-1;;;7581:7:0;;;;7519:71;;7862:139;;;;;;;;;;-1:-1:-1;7862:139:0;;;;;:::i;:::-;;:::i;5340:26::-;;;;;;;;;;-1:-1:-1;5340:26:0;;;;-1:-1:-1;;;;;5340:26:0;;;6654:59;;;;;;;;;;;;;;;;8007:127;;;;;;;;;;-1:-1:-1;8007:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;8105:18:0;;;8088:7;8105:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;8007:127;3883:111;;;;;;;;;;-1:-1:-1;3883:111:0;;;;;:::i;:::-;;:::i;13924:549::-;3845:4;3870:5;-1:-1:-1;;;;;3870:5:0;3757:10;3859:16;3741:38;;;;-1:-1:-1;;;3741:38:0;;;;;;;:::i;:::-;;;;;;;;;14022:13:::1;14038:33;14065:5;14038:22;14055:4;14038:12;;:16;;:22;;;;:::i;:::-;:26:::0;::::1;:33::i;:::-;14022:49;;14073:19;14095:34;14123:5;14095:23;14112:5;14095:12;;:16;;:23;;;;:::i;:34::-;14073:56;;14131:17;14151:36;14181:5;14151:25;14168:7;14151:12;;:16;;:25;;;;:::i;:36::-;14198:18;:26:::0;;;14226:11:::1;:25:::0;;;14253:13:::1;:25:::0;;;14131:56;-1:-1:-1;;14305:30:0::1;14330:4;14305:20;14323:1;14305:13;:11;:13::i;:::-;:17:::0;::::1;:20::i;:30::-;14289:46;;14363:5;14354;:14;;:38;;;;;14387:5;14372:11;:20;;14354:38;:60;;;;;14409:5;14396:9;:18;;14354:60;14346:119;;;::::0;-1:-1:-1;;;14346:119:0;;4614:2:1;14346:119:0::1;::::0;::::1;4596:21:1::0;4653:2;4633:18;;;4626:30;4692:34;4672:18;;;4665:62;-1:-1:-1;;;4743:18:1;;;4736:44;4797:19;;14346:119:0::1;4412:410:1::0;14346:119:0::1;14011:462;;;;13924:549:::0;;;:::o;8140:133::-;8215:4;8222:37;8231:10;8243:7;8252:6;8222:8;:37::i;:::-;-1:-1:-1;8267:4:0;8140:133;;;;;:::o;8279:132::-;7836:9;:18;;;;6268:42;8332:7;7836:18;;;;;8349:12;;8332:7;;8349:60;;7836:18;;8349:33;;:12;:16;:33::i;:::-;:37;;:60::i;:::-;8342:67;;8279:132;:::o;14485:309::-;14583:4;14600:36;14610:6;14618:9;14629:6;14600:9;:36::i;:::-;14647:117;14656:6;14664:10;14676:87;14712:6;14676:87;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14676:19:0;;;;;;:11;:19;;;;;;;;14696:10;14676:31;;;;;;;;;:87;:35;:87::i;:::-;14647:8;:117::i;:::-;-1:-1:-1;14782:4:0;14485:309;;;;;;:::o;4000:106::-;3845:4;3870:5;-1:-1:-1;;;;;3870:5:0;3757:10;3859:16;3741:38;;;;-1:-1:-1;;;3741:38:0;;;;;;;:::i;:::-;4063:1:::1;4047:18:::0;;-1:-1:-1;;;;;;4047:18:0::1;::::0;;4072:32:::1;::::0;3363:51:1;;;4072:32:0::1;::::0;3351:2:1;3336:18;4072:32:0::1;;;;;;;4000:106::o:0;11487:66::-;3845:4;3870:5;-1:-1:-1;;;;;3870:5:0;3757:10;3859:16;3741:38;;;;-1:-1:-1;;;3741:38:0;;;;;;;:::i;:::-;11529:15:::1;:22:::0;;-1:-1:-1;;;;11529:22:0::1;-1:-1:-1::0;;;11529:22:0::1;::::0;;11487:66::o;8423:501::-;3845:4;3870:5;-1:-1:-1;;;;;3870:5:0;3757:10;3859:16;3741:38;;;;-1:-1:-1;;;3741:38:0;;;;;;;:::i;:::-;8610:12:::1;:25:::0;;;8637:12:::1;:25:::0;;;8664:7:::1;:15:::0;;;8681:14:::1;:29:::0;;;8712:8:::1;:17:::0;;;8731:7:::1;:15:::0;;;8748:11:::1;:20:::0;;;8799:11:::1;::::0;8787:23;::::1;::::0;::::1;::::0;:49:::1;;;8825:11;;8814:7;;:22;;8787:49;:79;;;;;8855:11;;8840;;:26;;8787:79;8779:137;;;::::0;-1:-1:-1;;;8779:137:0;;5029:2:1;8779:137:0::1;::::0;::::1;5011:21:1::0;5068:2;5048:18;;;5041:30;5107:34;5087:18;;;5080:62;-1:-1:-1;;;5158:18:1;;;5151:43;5211:19;;8779:137:0::1;4827:409:1::0;7862:139:0;7940:4;7947:40;7957:10;7969:9;7980:6;7947:9;:40::i;3883:111::-;3845:4;3870:5;-1:-1:-1;;;;;3870:5:0;3757:10;3859:16;3741:38;;;;-1:-1:-1;;;3741:38:0;;;;;;;:::i;:::-;3949:5:::1;:11:::0;;-1:-1:-1;;;;;;3949:11:0::1;-1:-1:-1::0;;;;;3949:11:0;::::1;::::0;;::::1;::::0;;;3967:25:::1;::::0;3363:51:1;;;3967:25:0::1;::::0;3351:2:1;3336:18;3967:25:0::1;;;;;;;3883:111:::0;:::o;1633:98::-;1691:7;1718:5;1722:1;1718;:5;:::i;1739:98::-;1797:7;1824:5;1828:1;1824;:5;:::i;14802:335::-;-1:-1:-1;;;;;14895:19:0;;14887:68;;;;-1:-1:-1;;;14887:68:0;;6186:2:1;14887:68:0;;;6168:21:1;6225:2;6205:18;;;6198:30;6264:34;6244:18;;;6237:62;-1:-1:-1;;;6315:18:1;;;6308:34;6359:19;;14887:68:0;5984:400:1;14887:68:0;-1:-1:-1;;;;;14974:21:0;;14966:68;;;;-1:-1:-1;;;14966:68:0;;6591:2:1;14966:68:0;;;6573:21:1;6630:2;6610:18;;;6603:30;6669:34;6649:18;;;6642:62;-1:-1:-1;;;6720:18:1;;;6713:32;6762:19;;14966:68:0;6389:398:1;14966:68:0;-1:-1:-1;;;;;15045:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;15097:32;;1682:25:1;;;15097:32:0;;1655:18:1;15097:32:0;;;;;;;14802:335;;;:::o;1527:98::-;1585:7;1612:5;1616:1;1612;:5;:::i;9999:1476::-;-1:-1:-1;;;;;10096:20:0;;10088:70;;;;-1:-1:-1;;;10088:70:0;;7127:2:1;10088:70:0;;;7109:21:1;7166:2;7146:18;;;7139:30;7205:34;7185:18;;;7178:62;-1:-1:-1;;;7256:18:1;;;7249:35;7301:19;;10088:70:0;6925:401:1;10088:70:0;-1:-1:-1;;;;;10177:23:0;;10169:71;;;;-1:-1:-1;;;10169:71:0;;7533:2:1;10169:71:0;;;7515:21:1;7572:2;7552:18;;;7545:30;7611:34;7591:18;;;7584:62;-1:-1:-1;;;7662:18:1;;;7655:33;7705:19;;10169:71:0;7331:399:1;10169:71:0;-1:-1:-1;;;;;10255:24:0;;;;;;:16;:24;;;;;;;;10254:25;:57;;;;-1:-1:-1;;;;;;10284:27:0;;;;;;:16;:27;;;;;;;;10283:28;10254:57;10251:107;;;10321:15;;-1:-1:-1;;;10321:15:0;;;;10313:43;;;;-1:-1:-1;;;10313:43:0;;7937:2:1;10313:43:0;;;7919:21:1;7976:2;7956:18;;;7949:30;-1:-1:-1;;;7995:18:1;;;7988:45;8050:18;;10313:43:0;7735:339:1;10313:43:0;-1:-1:-1;;;;;10372:24:0;;;;;;:16;:24;;;;;;;;10371:25;:57;;;;-1:-1:-1;;;;;;10401:27:0;;;;;;:16;:27;;;;;;;;10400:28;10371:57;:94;;;;-1:-1:-1;10453:11:0;;-1:-1:-1;;;;;10432:33:0;;;10453:11;;10432:33;;10371:94;:124;;;;-1:-1:-1;;;;;;10469:26:0;;6268:42;10469:26;;10371:124;10368:235;;;10553:13;;-1:-1:-1;;;;;10516:20:0;;;;;;:9;:20;;;;;;:32;;10541:6;10516:24;:32::i;:::-;10515:51;;10507:94;;;;-1:-1:-1;;;10507:94:0;;8281:2:1;10507:94:0;;;8263:21:1;8320:2;8300:18;;;8293:30;8359:32;8339:18;;;8332:60;8409:18;;10507:94:0;8079:354:1;10507:94:0;10626:11;;-1:-1:-1;;;;;10616:21:0;;;10626:11;;10616:21;10613:138;;10657:11;;10647:6;:21;;:49;;;-1:-1:-1;;;;;;10672:24:0;;;;;;:16;:24;;;;;;;;10647:49;:80;;;-1:-1:-1;;;;;;10700:27:0;;;;;;:16;:27;;;;;;;;10647:80;10639:110;;;;-1:-1:-1;;;10639:110:0;;8640:2:1;10639:110:0;;;8622:21:1;8679:2;8659:18;;;8652:30;-1:-1:-1;;;8698:18:1;;;8691:47;8755:18;;10639:110:0;8438:341:1;10639:110:0;10779:18;;10769:6;:28;;:56;;;-1:-1:-1;;;;;;10801:24:0;;;;;;:16;:24;;;;;;;;10769:56;:87;;;-1:-1:-1;;;;;;10829:27:0;;;;;;:16;:27;;;;;;;;10769:87;10761:117;;;;-1:-1:-1;;;10761:117:0;;8640:2:1;10761:117:0;;;8622:21:1;8679:2;8659:18;;;8652:30;-1:-1:-1;;;8698:18:1;;;8691:47;8755:18;;10761:117:0;8438:341:1;10761:117:0;10906:11;;-1:-1:-1;;;;;10893:24:0;;;10906:11;;10893:24;:53;;;;-1:-1:-1;;;;;;10922:24:0;;;;;;:16;:24;;;;;;;;10921:25;10893:53;10890:84;;;10970:1;10948:10;;:24;;;;;;;:::i;:::-;;;;-1:-1:-1;;10890:84:0;10987:37;10998:6;11006:9;11017:6;10987:10;:37::i;:::-;10984:123;;;11059:4;7819:7;7836:18;;;:9;:18;;;;;;11026:54;;11037:42;;11067:11;;11037:3;:42::i;:::-;11026:10;:54::i;:::-;11103:1;11082:10;:23;10984:123;11122:15;;-1:-1:-1;;;11122:15:0;;;;11121:16;;:45;;-1:-1:-1;;;;;;11142:24:0;;;;;;:16;:24;;;;;;;;11141:25;11121:45;11117:105;;;-1:-1:-1;;;;;11190:17:0;;;;;;:9;:17;;;;;;:29;;11212:6;11190:21;:29::i;:::-;-1:-1:-1;;;;;11170:17:0;;;;;;:9;:17;;;;;:49;11117:105;11232:22;11257:29;11268:6;11276:9;11257:10;:29::i;:::-;:77;;11328:6;11257:77;;;11289:36;11299:6;11307:9;11318:6;11289:9;:36::i;:::-;-1:-1:-1;;;;;11368:20:0;;;;;;:9;:20;;;;;;11232:102;;-1:-1:-1;11368:40:0;;11232:102;11368:24;:40::i;:::-;-1:-1:-1;;;;;11345:20:0;;;;;;;:9;:20;;;;;;;:63;;;;11424:43;;;;;;;;;;11452:14;1682:25:1;;1670:2;1655:18;;1536:177;11424:43:0;;;;;;;;10077:1398;9999:1476;;;:::o;1951:240::-;2071:7;2132:12;2124:6;;;;2116:29;;;;-1:-1:-1;;;2116:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;2167:5:0;;;1951:240::o;1421:98::-;1479:7;1506:5;1510:1;1506;:5;:::i;12682:409::-;12819:11;;12881:4;12776;7836:18;;;:9;:18;;;;;;12921:9;;12776:4;;12809:21;;;;;-1:-1:-1;;12863:39:0;;12921:9;;12920:10;:28;;;;-1:-1:-1;12934:14:0;;-1:-1:-1;;;12934:14:0;;;;12920:28;:47;;;;-1:-1:-1;12952:15:0;;-1:-1:-1;;;12952:15:0;;;;12920:47;:59;;;;;12971:8;12920:59;:88;;;;-1:-1:-1;;;;;;12984:24:0;;;;;;:16;:24;;;;;;;;12983:25;12920:88;:116;;;;-1:-1:-1;13025:11:0;;-1:-1:-1;;;;;13012:24:0;;;13025:11;;13012:24;12920:116;:145;;;;;13054:11;;13040:10;;:25;;12920:145;:163;;;;;13069:14;12920:163;12913:170;12682:409;-1:-1:-1;;;;;;12682:409:0:o;12565:105::-;12622:7;12652:1;12648;:5;12647:15;;12661:1;12647:15;;;-1:-1:-1;12657:1:0;12565:105;-1:-1:-1;12565:105:0:o;8932:1055::-;5872:9;:16;;-1:-1:-1;;5872:16:0;5884:4;5872:16;;;;;;9062:14:::1;::::0;9044:12:::1;::::0;9020::::1;::::0;5872:9;;9019:66:::1;::::0;9083:1:::1;::::0;9020:57:::1;::::0;9062:14;;9020:37:::1;::::0;;;:16:::1;:19::i;:::-;:23:::0;::::1;:37::i;9019:66::-;8996:89;;9096:32;9131:42;9160:12;9131:24;9142:12;;9131:6;:10;;:24;;;;:::i;:42::-;9096:77:::0;-1:-1:-1;9184:14:0::1;9201:36;:6:::0;9096:77;9201:10:::1;:36::i;:::-;9184:53:::0;-1:-1:-1;9273:21:0::1;9305:23;9184:53:::0;9305:15:::1;:23::i;:::-;9339:20;9362:41;:21;9388:14:::0;9362:25:::1;:41::i;:::-;9339:64;;9414:19;9435:48;9452:30;9469:12;;9452;:16;;:30;;;;:::i;:::-;9435:12:::0;;:16:::1;:48::i;:::-;9414:69;;9494:29;9526;9542:12;;9526:11;:15;;:29;;;;:::i;:::-;9494:61:::0;-1:-1:-1;9569:34:0;;9566:103:::1;;9605:61;9618:24;9644:21;9605:12;:61::i;:::-;9725:12;::::0;9679:20:::1;::::0;9702:36:::1;::::0;:18:::1;:11:::0;9718:1:::1;9702:15;:18::i;:36::-;9679:59:::0;-1:-1:-1;9752:16:0;;9749:73:::1;;9778:18;::::0;9770:50:::1;::::0;-1:-1:-1;;;;;9778:18:0;;::::1;::::0;9770:50;::::1;;;::::0;9807:12;;9778:18:::1;9770:50:::0;9778:18;9770:50;9807:12;9778:18;9770:50;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;9749:73;9858:21;9893:28:::0;;9890:90:::1;;9931:20;::::0;9923:55:::1;::::0;-1:-1:-1;;;;;9931:20:0;;::::1;::::0;9923:55;::::1;;;::::0;9962:15;;9931:20:::1;9923:55:::0;9931:20;9923:55;9962:15;9931:20;9923:55;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;9890:90;-1:-1:-1::0;;5893:9:0;:17;;-1:-1:-1;;5893:17:0;;;-1:-1:-1;;;;;;;;8932:1055:0:o;12021:167::-;-1:-1:-1;;;;;12124:24:0;;12099:4;12124:24;;;:16;:24;;;;;;;;12123:25;:57;;;;-1:-1:-1;;;;;;;12153:27:0;;;;;:16;:27;;;;;;;;12152:28;;12021:167;-1:-1:-1;12021:167:0:o;13339:577::-;13427:7;13478:1;13450:25;13457:6;13465:9;13450:6;:25::i;:::-;:29;13447:447;;;13491:17;13511:54;13539:25;13546:6;13554:9;13539:6;:25::i;:::-;13522:11;;13511:23;;:6;;:10;:23::i;:54::-;13621:4;13603:24;;;;:9;:24;;;;;;13491:74;;-1:-1:-1;13603:39:0;;13491:74;13603:28;:39::i;:::-;13594:4;13576:24;;;;:9;:24;;;;;;;:66;;;;13658:42;;-1:-1:-1;;;;;13658:42:0;;;;;;;13690:9;1682:25:1;;1670:2;1655:18;;1536:177;13658:42:0;;;;;;;;13732:1;13714:7;;:20;:59;;;;;13766:7;;13738:25;13745:6;13753:9;13738:6;:25::i;:::-;:35;13714:59;13711:143;;;13775:77;13793:4;6268:42;13815:36;13843:7;;13815:23;13826:11;;13815:6;:10;;:23;;;;:::i;:36::-;13775:9;:77::i;:::-;13871:21;:6;13882:9;13871:10;:21::i;:::-;13864:28;;;;;13447:447;-1:-1:-1;13902:6:0;13339:577;-1:-1:-1;;13339:577:0:o;11559:454::-;11648:16;;;11662:1;11648:16;;;;;;;;11624:21;;11648:16;;;;;;;;;;-1:-1:-1;11648:16:0;11624:40;;11693:4;11675;11680:1;11675:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;11675:23:0;;;:7;;;;;;;;;;:23;;;;11719:13;;:20;;;-1:-1:-1;;;11719:20:0;;;;:13;;;;;:18;;:20;;;;;11675:7;;11719:20;;;;;:13;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11709:4;11714:1;11709:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;11709:30:0;;;:7;;;;;;;;;:30;11782:13;;11750:60;;11767:4;;11782:13;11798:11;11750:8;:60::i;:::-;11821:13;;:184;;-1:-1:-1;;;11821:184:0;;-1:-1:-1;;;;;11821:13:0;;;;:64;;:184;;11900:11;;11821:13;;11942:4;;11969;;11989:15;;11821:184;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11613:400;11559:454;:::o;12200:357::-;12313:13;;12281:60;;12298:4;;-1:-1:-1;;;;;12313:13:0;12329:11;12281:8;:60::i;:::-;12352:13;;12500:18;;12352:197;;-1:-1:-1;;;12352:197:0;;12422:4;12352:197;;;10760:34:1;10810:18;;;10803:34;;;12352:13:0;10853:18:1;;;10846:34;;;10896:18;;;10889:34;-1:-1:-1;;;;;12500:18:0;;;10939:19:1;;;10932:44;12533:15:0;10992:19:1;;;10985:35;12352:13:0;;;:29;;12389:9;;10694:19:1;;12352:197:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;12200:357;;:::o;13103:228::-;13213:11;;13177:7;;-1:-1:-1;;;;;13213:11:0;;;13200:24;;;;13197:45;;-1:-1:-1;13233:7:0;;13226:14;;13197:45;13265:11;;-1:-1:-1;;;;;13265:11:0;;;13255:21;;;;13252:43;;-1:-1:-1;13285:8:0;;13278:15;;13252:43;-1:-1:-1;13312:11:0;;13103:228;;;;:::o;14:316:1:-;91:6;99;107;160:2;148:9;139:7;135:23;131:32;128:52;;;176:1;173;166:12;128:52;-1:-1:-1;;199:23:1;;;269:2;254:18;;241:32;;-1:-1:-1;320:2:1;305:18;;;292:32;;14:316;-1:-1:-1;14:316:1:o;335:548::-;447:4;476:2;505;494:9;487:21;537:6;531:13;580:6;575:2;564:9;560:18;553:34;605:1;615:140;629:6;626:1;623:13;615:140;;;724:14;;;720:23;;714:30;690:17;;;709:2;686:26;679:66;644:10;;615:140;;;619:3;804:1;799:2;790:6;779:9;775:22;771:31;764:42;874:2;867;863:7;858:2;850:6;846:15;842:29;831:9;827:45;823:54;815:62;;;;335:548;;;;:::o;888:131::-;-1:-1:-1;;;;;963:31:1;;953:42;;943:70;;1009:1;1006;999:12;943:70;888:131;:::o;1024:315::-;1092:6;1100;1153:2;1141:9;1132:7;1128:23;1124:32;1121:52;;;1169:1;1166;1159:12;1121:52;1208:9;1195:23;1227:31;1252:5;1227:31;:::i;:::-;1277:5;1329:2;1314:18;;;;1301:32;;-1:-1:-1;;;1024:315:1:o;1718:456::-;1795:6;1803;1811;1864:2;1852:9;1843:7;1839:23;1835:32;1832:52;;;1880:1;1877;1870:12;1832:52;1919:9;1906:23;1938:31;1963:5;1938:31;:::i;:::-;1988:5;-1:-1:-1;2045:2:1;2030:18;;2017:32;2058:33;2017:32;2058:33;:::i;:::-;1718:456;;2110:7;;-1:-1:-1;;;2164:2:1;2149:18;;;;2136:32;;1718:456::o;2179:247::-;2238:6;2291:2;2279:9;2270:7;2266:23;2262:32;2259:52;;;2307:1;2304;2297:12;2259:52;2346:9;2333:23;2365:31;2390:5;2365:31;:::i;2620:592::-;2733:6;2741;2749;2757;2765;2773;2781;2834:3;2822:9;2813:7;2809:23;2805:33;2802:53;;;2851:1;2848;2841:12;2802:53;-1:-1:-1;;2874:23:1;;;2944:2;2929:18;;2916:32;;-1:-1:-1;2995:2:1;2980:18;;2967:32;;3046:2;3031:18;;3018:32;;-1:-1:-1;3097:3:1;3082:19;;3069:33;;-1:-1:-1;3149:3:1;3134:19;;3121:33;;-1:-1:-1;3201:3:1;3186:19;3173:33;;-1:-1:-1;2620:592:1;-1:-1:-1;2620:592:1:o;3425:388::-;3493:6;3501;3554:2;3542:9;3533:7;3529:23;3525:32;3522:52;;;3570:1;3567;3560:12;3522:52;3609:9;3596:23;3628:31;3653:5;3628:31;:::i;:::-;3678:5;-1:-1:-1;3735:2:1;3720:18;;3707:32;3748:33;3707:32;3748:33;:::i;:::-;3800:7;3790:17;;;3425:388;;;;;:::o;4078:329::-;4280:2;4262:21;;;4319:1;4299:18;;;4292:29;-1:-1:-1;;;4352:2:1;4337:18;;4330:36;4398:2;4383:18;;4078:329::o;5457:127::-;5518:10;5513:3;5509:20;5506:1;5499:31;5549:4;5546:1;5539:15;5573:4;5570:1;5563:15;5589:168;5662:9;;;5693;;5710:15;;;5704:22;;5690:37;5680:71;;5731:18;;:::i;5762:217::-;5802:1;5828;5818:132;;5872:10;5867:3;5863:20;5860:1;5853:31;5907:4;5904:1;5897:15;5935:4;5932:1;5925:15;5818:132;-1:-1:-1;5964:9:1;;5762:217::o;6792:128::-;6859:9;;;6880:11;;;6877:37;;;6894:18;;:::i;8784:125::-;8849:9;;;8870:10;;;8867:36;;;8883:18;;:::i;9046:127::-;9107:10;9102:3;9098:20;9095:1;9088:31;9138:4;9135:1;9128:15;9162:4;9159:1;9152:15;9178:251;9248:6;9301:2;9289:9;9280:7;9276:23;9272:32;9269:52;;;9317:1;9314;9307:12;9269:52;9349:9;9343:16;9368:31;9393:5;9368:31;:::i;9434:980::-;9696:4;9744:3;9733:9;9729:19;9775:6;9764:9;9757:25;9801:2;9839:6;9834:2;9823:9;9819:18;9812:34;9882:3;9877:2;9866:9;9862:18;9855:31;9906:6;9941;9935:13;9972:6;9964;9957:22;10010:3;9999:9;9995:19;9988:26;;10049:2;10041:6;10037:15;10023:29;;10070:1;10080:195;10094:6;10091:1;10088:13;10080:195;;;10159:13;;-1:-1:-1;;;;;10155:39:1;10143:52;;10250:15;;;;10215:12;;;;10191:1;10109:9;10080:195;;;-1:-1:-1;;;;;;;10331:32:1;;;;10326:2;10311:18;;10304:60;-1:-1:-1;;;10395:3:1;10380:19;10373:35;10292:3;9434:980;-1:-1:-1;;;9434:980:1:o;11031:306::-;11119:6;11127;11135;11188:2;11176:9;11167:7;11163:23;11159:32;11156:52;;;11204:1;11201;11194:12;11156:52;11233:9;11227:16;11217:26;;11283:2;11272:9;11268:18;11262:25;11252:35;;11327:2;11316:9;11312:18;11306:25;11296:35;;11031:306;;;;;:::o

Swarm Source

ipfs://523dd717ada03b9a3cd5380dfce5e92c3aa5abeb7f31ec5db3c89e697ea9cf8f
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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