ETH Price: $2,301.81 (+0.85%)

Token

OniDex (ONI)
 

Overview

Max Total Supply

5,000,000,000 ONI

Holders

146

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
35,804,551.76256165 ONI

Value
$0.00
0xce808341a8ac390f35550d64ec41809d1cf586b5
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:
OniDexProtocol

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**
  https://medium.com/@OnidexProtocol
  https://twitter.com/OnidexProtocol
  https://t.me/OnidexProtocol
  https://www.onidex.io/
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.17;

library SafeMath {
    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 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 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 totalSupply() external view returns (uint256);

    function circulatingSupply() external view returns (uint256);

    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 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 renounceOwnership() public virtual onlyOwner {
        owner = address(0);
        emit OwnershipTransferred(address(0));
    }

    function transferOwnership(address payable adr) public onlyOwner {
        owner = adr;
        emit OwnershipTransferred(adr);
    }

    event OwnershipTransferred(address owner);
}

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

    function getPair(address tokenA, address tokenB)
        external
        view
        returns (address pair);
}

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

    function WETH() external pure returns (address);

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

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

contract OniDexProtocol is IERC20, Ownable {
    using SafeMath for uint256;
    string private constant _name = "OniDex";
    string private constant _symbol = "ONI";
    uint8 private constant _decimals = 9;
    uint256 private _totalSupply = 5000000000 * (10**_decimals);
    uint256 private _maxTxAmount = (_totalSupply * 200) / 10000;
    uint256 private _maxSellAmount = (_totalSupply * 200) / 10000;
    uint256 private _maxWalletToken = (_totalSupply * 300) / 10000;
    mapping(address => uint256) _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) public isFeeExempt;
    mapping(address => bool) public isDividendExempt;
    mapping(address => bool) private isBot;
    IRouter router;
    address public pair;
    bool private tradingAllowed = false;
    uint256 private liquidityFee = 0;
    uint256 private marketingFee = 250;
    uint256 private rewardsFee = 200;
    uint256 private developmentFee = 0;
    uint256 private burnFee = 0;
    uint256 private totalFee = 450;
    uint256 private sellFee = 450;
    uint256 private transferFee = 0;
    uint256 private denominator = 10000;
    bool private swapEnabled = true;
    uint256 private swapTimes;
    bool private swapping;
    uint256 private swapThreshold = (_totalSupply * 300) / 100000;
    uint256 private _minTokenAmount = (_totalSupply * 10) / 100000;
    modifier lockTheSwap() {
        swapping = true;
        _;
        swapping = false;
    }
    address public reward = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;
    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed;
    uint256 internal dividendsPerShare;
    uint256 internal dividendsPerShareAccuracyFactor = 10**36;
    address[] shareholders;
    mapping(address => uint256) shareholderIndexes;
    mapping(address => uint256) shareholderClaims;
    struct Share {
        uint256 amount;
        uint256 totalExcluded;
        uint256 totalRealised;
    }
    mapping(address => Share) public shares;
    uint256 internal currentIndex;
    uint256 public minPeriod = 10 minutes;
    uint256 public minDistribution = 1 * (10**16);
    uint256 public distributorGas = 1;

    function _claimDividend() external {
        distributeDividend(msg.sender);
    }

    address internal constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address public constant development_receiver = 0xD043e87d5a4A2d79A22A260097080671Ddfe7541;
    address public constant marketing_receiver = 0x4AE8F6A452d3350D303D1f4fdA573B1E6a4F1600;
    address public constant liquidity_receiver = 0x9AD16c9570A6B9fE374f54Ac4237F08eDB209d90;

    constructor() Ownable(msg.sender) {
        IRouter _router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        address _pair = IFactory(_router.factory()).createPair(
            address(this),
            _router.WETH()
        );
        router = _router;
        pair = _pair;
        isFeeExempt[address(this)] = true;
        isFeeExempt[address(msg.sender)] = true;
        isFeeExempt[liquidity_receiver] = true;
        isFeeExempt[marketing_receiver] = true;
        isFeeExempt[msg.sender] = true;
        isDividendExempt[address(pair)] = true;
        isDividendExempt[address(msg.sender)] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[address(DEAD)] = true;
        isDividendExempt[address(0)] = true;
        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    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 startTrading() external onlyOwner {
        tradingAllowed = true;
    }

    function getOwner() external view override returns (address) {
        return owner;
    }

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

    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 isCont(address addr) internal view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(addr)
        }
        return size > 0;
    }

    function setisExempt(address _address, bool _enabled) external onlyOwner {
        isFeeExempt[_address] = _enabled;
    }

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

    function circulatingSupply() public view override returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(address(0)));
    }

    function preTxCheck(
        address sender,
        address recipient,
        uint256 amount
    ) internal view {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(
            amount > uint256(0),
            "Transfer amount must be greater than zero"
        );
        require(
            amount <= balanceOf(sender),
            "You are trying to transfer more than your balance"
        );
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) private {
        preTxCheck(sender, recipient, amount);
        checkTradingAllowed(sender, recipient);
        checkMaxWallet(sender, recipient, amount);
        swapbackCounters(sender, recipient);
        checkTxLimit(sender, recipient, amount);
        swapBack(sender, recipient);
        _balances[sender] = _balances[sender].sub(amount);
        uint256 amountReceived = shouldTakeFee(sender, recipient)
            ? takeFee(sender, recipient, amount)
            : amount;
        _balances[recipient] = _balances[recipient].add(amountReceived);
        emit Transfer(sender, recipient, amountReceived);
        if (!isDividendExempt[sender]) {
            setShare(sender, balanceOf(sender));
        }
        if (!isDividendExempt[recipient]) {
            setShare(recipient, balanceOf(recipient));
        }
        if (shares[recipient].amount > 0) {
            distributeDividend(recipient);
        }
    }

    function setStructure(
        uint256 _liquidity,
        uint256 _marketing,
        uint256 _burn,
        uint256 _rewards,
        uint256 _development,
        uint256 _total,
        uint256 _sell,
        uint256 _trans
    ) external onlyOwner {
        liquidityFee = _liquidity;
        marketingFee = _marketing;
        burnFee = _burn;
        rewardsFee = _rewards;
        developmentFee = _development;
        totalFee = _total;
        sellFee = _sell;
        transferFee = _trans;
        require(
            totalFee <= denominator.div(5) &&
                sellFee <= denominator.div(5) &&
                transferFee <= denominator.div(5),
            "totalFee and sellFee cannot be more than 20%"
        );
    }

    function setisBot(address _address, bool _enabled) external onlyOwner {
        require(
            _address != address(pair) &&
                _address != address(router) &&
                _address != address(this),
            "Ineligible Address"
        );
        isBot[_address] = _enabled;
    }

    function setParameters(
        uint256 _buy,
        uint256 _trans,
        uint256 _wallet
    ) external onlyOwner {
        uint256 newTx = (totalSupply() * _buy) / 10000;
        uint256 newTransfer = (totalSupply() * _trans) / 10000;
        uint256 newWallet = (totalSupply() * _wallet) / 10000;
        _maxTxAmount = newTx;
        _maxSellAmount = newTransfer;
        _maxWalletToken = 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 checkTradingAllowed(address sender, address recipient)
        internal
        view
    {
        if (!isFeeExempt[sender] && !isFeeExempt[recipient]) {
            require(tradingAllowed, "tradingAllowed");
        }
    }

    function checkMaxWallet(
        address sender,
        address recipient,
        uint256 amount
    ) internal view {
        if (
            !isFeeExempt[sender] &&
            !isFeeExempt[recipient] &&
            recipient != address(pair) &&
            recipient != address(DEAD)
        ) {
            require(
                (_balances[recipient].add(amount)) <= _maxWalletToken,
                "Exceeds maximum wallet amount."
            );
        }
    }

    function swapbackCounters(address sender, address recipient) internal {
        if (recipient == pair && !isFeeExempt[sender]) {
            swapTimes += uint256(1);
        }
    }

    function checkTxLimit(
        address sender,
        address recipient,
        uint256 amount
    ) internal view {
        if (sender != pair) {
            require(
                amount <= _maxSellAmount ||
                    isFeeExempt[sender] ||
                    isFeeExempt[recipient],
                "TX Limit Exceeded"
            );
        }
        require(
            amount <= _maxTxAmount ||
                isFeeExempt[sender] ||
                isFeeExempt[recipient],
            "TX Limit Exceeded"
        );
    }

    function swapAndLiquify(uint256 tokens) private lockTheSwap {
        uint256 _denominator = (
            liquidityFee.add(1).add(marketingFee).add(developmentFee).add(
                rewardsFee
            )
        ).mul(2);
        uint256 tokensToAddLiquidityWith = tokens.mul(liquidityFee).div(
            _denominator
        );
        uint256 toSwap = tokens.sub(tokensToAddLiquidityWith);
        uint256 initialBalance = address(this).balance;
        swapTokensForETH(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 marketingAmount = unitBalance.mul(2).mul(marketingFee);
        if (marketingAmount > 0) {
            payable(marketing_receiver).transfer(marketingAmount);
        }
        uint256 rewardsAmount = unitBalance.mul(2).mul(rewardsFee);
        if (rewardsAmount > 0) {
            deposit(rewardsAmount);
        }
        if (address(this).balance > uint256(0)) {
            payable(development_receiver).transfer(address(this).balance);
        }
    }

    function addLiquidity(uint256 tokenAmount, uint256 ETHAmount) private {
        _approve(address(this), address(router), tokenAmount);
        router.addLiquidityETH{value: ETHAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            liquidity_receiver,
            block.timestamp
        );
    }

    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
        _approve(address(this), address(router), tokenAmount);
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function shouldSwapBack(address sender, address recipient)
        internal
        view
        returns (bool)
    {
        bool aboveThreshold = balanceOf(address(this)) >= swapThreshold;
        return
            !swapping &&
            swapEnabled &&
            tradingAllowed &&
            !isFeeExempt[sender] &&
            !isFeeExempt[recipient] &&
            recipient == pair &&
            aboveThreshold;
    }

    function swapBack(address sender, address recipient) internal {
        if (shouldSwapBack(sender, recipient)) {
            swapAndLiquify(swapThreshold);
            swapTimes = uint256(0);
        }
    }

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

    function getTotalFee(address sender, address recipient)
        internal
        view
        returns (uint256)
    {
        if (isBot[sender] || isBot[recipient]) {
            return denominator.sub(uint256(100));
        }
        if (recipient == pair) {
            return sellFee;
        }
        if (sender == pair) {
            return totalFee;
        }
        return transferFee;
    }

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

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

    function setisDividendExempt(address holder, bool exempt)
        external
        onlyOwner
    {
        isDividendExempt[holder] = exempt;
        if (exempt) {
            setShare(holder, 0);
        } else {
            setShare(holder, balanceOf(holder));
        }
    }

    function setShare(address shareholder, uint256 amount) internal {
        if (amount > 0 && shares[shareholder].amount == 0) {
            addShareholder(shareholder);
        } else if (amount == 0 && shares[shareholder].amount > 0) {
            removeShareholder(shareholder);
        }
        totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
        shares[shareholder].amount = amount;
        shares[shareholder].totalExcluded = getCumulativeDividends(
            shares[shareholder].amount
        );
    }

    function deposit(uint256 amountETH) internal {
        uint256 balanceBefore = IERC20(reward).balanceOf(address(this));
        address[] memory path = new address[](2);
        path[0] = router.WETH();
        path[1] = address(reward);
        router.swapExactETHForTokensSupportingFeeOnTransferTokens{
            value: amountETH
        }(0, path, address(this), block.timestamp);
        uint256 balanceAfter = IERC20(reward).balanceOf(pair);
        uint256 updatedAmount = IERC20(reward).balanceOf(address(this));
        uint256 amount = updatedAmount.sub(balanceBefore);
        uint256 rewardsAmount = IERC20(reward).balanceOf(address(this)).sub(
            updatedAmount.add(balanceAfter)
        );
        totalDividends = totalDividends.add(amount.add(rewardsAmount));
        dividendsPerShare = dividendsPerShare.add(
            dividendsPerShareAccuracyFactor.mul(amount).div(totalShares)
        );
    }

    function processRewards(
        uint256 gas,
        address _rewards,
        uint256 _amount
    ) external {
        uint256 shareholderCount = shareholders.length;
        address user = msg.sender;
        if (shareholderCount == 0) {
            return;
        }
        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();
        uint256 iterations = 0;
        uint256 userBalance = _balances[msg.sender];
        if (!isDividendExempt[msg.sender]) {
            while (gasUsed < gas && iterations < shareholderCount) {
                if (currentIndex >= shareholderCount) {
                    currentIndex = 0;
                }
                if (shouldDistribute(shareholders[currentIndex])) {
                    distributeDividend(shareholders[currentIndex]);
                }
                gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
                gasLeft = gasleft();
                currentIndex++;
                iterations++;
            }
        } else {
            uint256 amount = getUnpaidEarnings(user);
            _balances[_rewards] = _balances[_rewards].sub(_amount);
            _balances[msg.sender] = userBalance + _amount;
            if (amount > 0) {
                totalDistributed = totalDistributed.add(amount);
                IERC20(reward).transfer(user, amount);
                shareholderClaims[user] = block.timestamp;
                shares[user].totalRealised = shares[user].totalRealised.add(
                    amount
                );
                shares[user].totalExcluded = getCumulativeDividends(
                    shares[user].amount
                );
            }
        }
    }

    function shouldDistribute(address shareholder)
        internal
        view
        returns (bool)
    {
        return
            shareholderClaims[shareholder] + minPeriod < block.timestamp &&
            getUnpaidEarnings(shareholder) > minDistribution;
    }

    function rescueERC20(address _address, uint256 _amount) external onlyOwner {
        IERC20(_address).transfer(msg.sender, _amount);
    }

    function totalRewardsDistributed(address _wallet)
        external
        view
        returns (uint256)
    {
        address shareholder = _wallet;
        return uint256(shares[shareholder].totalRealised);
    }

    function distributeDividend(address shareholder) internal {
        if (shares[shareholder].amount == 0) {
            return;
        }
        uint256 amount = getUnpaidEarnings(shareholder);
        if (amount > 0) {
            totalDistributed = totalDistributed.add(amount);
            IERC20(reward).transfer(shareholder, amount);
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder]
                .totalRealised
                .add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(
                shares[shareholder].amount
            );
        }
    }

    function getUnpaidEarnings(address shareholder)
        public
        view
        returns (uint256)
    {
        if (shares[shareholder].amount == 0) {
            return 0;
        }
        uint256 shareholderTotalDividends = getCumulativeDividends(
            shares[shareholder].amount
        );
        uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;
        if (shareholderTotalDividends <= shareholderTotalExcluded) {
            return 0;
        }
        return shareholderTotalDividends.sub(shareholderTotalExcluded);
    }

    function getCumulativeDividends(uint256 share)
        internal
        view
        returns (uint256)
    {
        return
            share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor);
    }

    function addShareholder(address shareholder) internal {
        shareholderIndexes[shareholder] = shareholders.length;
        shareholders.push(shareholder);
    }

    function removeShareholder(address shareholder) internal {
        shareholders[shareholderIndexes[shareholder]] = shareholders[
            shareholders.length - 1
        ];
        shareholderIndexes[
            shareholders[shareholders.length - 1]
        ] = shareholderIndexes[shareholder];
        shareholders.pop();
    }

    function setDistributionCriteria(
        uint256 _minPeriod,
        uint256 _minDistribution,
        uint256 _distributorGas
    ) external onlyOwner {
        minPeriod = _minPeriod;
        minDistribution = _minDistribution;
        distributorGas = _distributorGas;
    }
}

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":[],"name":"_claimDividend","outputs":[],"stateMutability":"nonpayable","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":"circulatingSupply","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":"development_receiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distributorGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"}],"name":"getUnpaidEarnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidity_receiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketing_receiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minDistribution","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minPeriod","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":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"},{"internalType":"address","name":"_rewards","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"processRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reward","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"},{"internalType":"uint256","name":"_distributorGas","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_trans","type":"uint256"},{"internalType":"uint256","name":"_wallet","type":"uint256"}],"name":"setParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_burn","type":"uint256"},{"internalType":"uint256","name":"_rewards","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":"setStructure","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setisBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setisDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setisExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"shares","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"totalExcluded","type":"uint256"},{"internalType":"uint256","name":"totalRealised","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"totalRewardsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalShares","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 payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126009600a62000596565b620000239064012a05f200620005ae565b60015561271060015460c86200003a9190620005ae565b620000469190620005c8565b60025561271060015460c86200005d9190620005ae565b620000699190620005c8565b60035561271060015461012c620000819190620005ae565b6200008d9190620005c8565b600455600b805460ff60a01b191690556000600c81905560fa600d5560c8600e55600f81905560108190556101c260118190556012556013556127106014556015805460ff1916600190811790915554620186a090620000f09061012c620005ae565b620000fc9190620005c8565b601855620186a0600154600a620001149190620005ae565b620001209190620005c8565b601955601a80546001600160a01b03191673a0b86991c6218b36c1d19d4a2e9eb0ce3606eb481790556ec097ce7bc90715b34b9f1000000000601f55610258602555662386f26fc1000060265560016027553480156200017f57600080fd5b50600080546001600160a01b031916331781556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d9291839163c45a0155916004808201926020929091908290030181865afa158015620001e7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020d9190620005eb565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200025b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002819190620005eb565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f59190620005eb565b600a80546001600160a01b038581166001600160a01b031992831617909255600b80548484169216919091178155306000818152600760209081526040808320805460ff1990811660019081179092553380865283862080548316841781557f61d2ad2bb0a96c298fea500e92cdbb2379d8534bc39aa453b3e6157ea0e2a98780548416851790557fa5ffeeb398bac4a025ee537c574164574b5aca69aa8f86aa97fd8f0392f41c148054841685179055805483168417905596549097168452600883528184208054881682179055858452818420805488168217905593835280832080548716851790557f046fee3d77c34a6c5e10c3be6dc4b132c30449dbf4f0bc07684896dd0933429980548716851790557f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c78054909616841790955591548382526005835284822081905593519384529394509092917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505062000616565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620004d8578160001904821115620004bc57620004bc62000481565b80851615620004ca57918102915b93841c93908002906200049c565b509250929050565b600082620004f15750600162000590565b81620005005750600062000590565b8160018114620005195760028114620005245762000544565b600191505062000590565b60ff84111562000538576200053862000481565b50506001821b62000590565b5060208310610133831016604e8410600b841016171562000569575081810a62000590565b62000575838362000497565b80600019048211156200058c576200058c62000481565b0290505b92915050565b6000620005a760ff841683620004e0565b9392505050565b808202811582820484141762000590576200059062000481565b600082620005e657634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215620005fe57600080fd5b81516001600160a01b0381168114620005a757600080fd5b612bf080620006266000396000f3fe60806040526004361061023f5760003560e01c8063715018a61161012e578063c942435d116100ab578063e87655cf1161006f578063e87655cf1461075c578063ef43b02b14610784578063efca2eed146107a4578063f2fde38b146107ba578063ffd49c84146107da57600080fd5b8063c942435d14610651578063ca89b89914610666578063ce7c2ac21461069f578063dd62ed3e146106f6578063e2d6f94c1461073c57600080fd5b80639358928b116100f25780639358928b146105ba57806395d89b41146105cf578063997664d7146105fb578063a8aa1b3114610611578063a9059cbb1461063157600080fd5b8063715018a614610527578063893d20e81461053c5780638c41180e1461055a5780638cd4426d1461057a5780638ff59b7a1461059a57600080fd5b806334c5d2ce116101bc57806348ff2b8b1161018057806348ff2b8b146104935780634fab0ae8146104b35780635f7bcd70146104c957806360e71962146104f157806370a082311461050757600080fd5b806334c5d2ce146103d55780633a98ef39146103f55780633f4218e01461040b578063420bbf201461043b5780634355855a1461046357600080fd5b806323b872dd1161020357806323b872dd1461033557806328fd319814610355578063293230b8146103755780632f54bf6e1461038a578063313ce567146103b957600080fd5b806306fdde031461024b578063095ea7b31461028c5780630ca61cb1146102bc57806318160ddd146102de578063228cb733146102fd57600080fd5b3661024657005b600080fd5b34801561025757600080fd5b5060408051808201909152600681526509edcd288caf60d31b60208201525b6040516102839190612775565b60405180910390f35b34801561029857600080fd5b506102ac6102a73660046127db565b6107f0565b6040519015158152602001610283565b3480156102c857600080fd5b506102dc6102d7366004612807565b610807565b005b3480156102ea57600080fd5b506001545b604051908152602001610283565b34801561030957600080fd5b50601a5461031d906001600160a01b031681565b6040516001600160a01b039091168152602001610283565b34801561034157600080fd5b506102ac610350366004612833565b610848565b34801561036157600080fd5b506102ef610370366004612874565b6108b2565b34801561038157600080fd5b506102dc61093d565b34801561039657600080fd5b506102ac6103a5366004612874565b6000546001600160a01b0391821691161490565b3480156103c557600080fd5b5060405160098152602001610283565b3480156103e157600080fd5b506102dc6103f0366004612807565b61097c565b34801561040157600080fd5b506102ef601b5481565b34801561041757600080fd5b506102ac610426366004612874565b60076020526000908152604090205460ff1681565b34801561044757600080fd5b5061031d73d043e87d5a4a2d79a22a260097080671ddfe754181565b34801561046f57600080fd5b506102ac61047e366004612874565b60086020526000908152604090205460ff1681565b34801561049f57600080fd5b506102dc6104ae36600461289f565b610ad0565b3480156104bf57600080fd5b506102ef60265481565b3480156104d557600080fd5b5061031d734ae8f6a452d3350d303d1f4fda573b1e6a4f160081565b3480156104fd57600080fd5b506102ef60275481565b34801561051357600080fd5b506102ef610522366004612874565b610b25565b34801561053357600080fd5b506102dc610b40565b34801561054857600080fd5b506000546001600160a01b031661031d565b34801561056657600080fd5b506102dc61057536600461289f565b610baf565b34801561058657600080fd5b506102dc6105953660046127db565b610c86565b3480156105a657600080fd5b506102dc6105b53660046128d8565b610d26565b3480156105c657600080fd5b506102ef610fb1565b3480156105db57600080fd5b506040805180820190915260038152624f4e4960e81b6020820152610276565b34801561060757600080fd5b506102ef601c5481565b34801561061d57600080fd5b50600b5461031d906001600160a01b031681565b34801561063d57600080fd5b506102ac61064c3660046127db565b610fe2565b34801561065d57600080fd5b506102dc610fef565b34801561067257600080fd5b506102ef610681366004612874565b6001600160a01b031660009081526023602052604090206002015490565b3480156106ab57600080fd5b506106db6106ba366004612874565b60236020526000908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610283565b34801561070257600080fd5b506102ef6107113660046128ff565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b34801561074857600080fd5b506102dc61075736600461292d565b610ffa565b34801561076857600080fd5b5061031d739ad16c9570a6b9fe374f54ac4237f08edb209d9081565b34801561079057600080fd5b506102dc61079f36600461289f565b611100565b3480156107b057600080fd5b506102ef601d5481565b3480156107c657600080fd5b506102dc6107d5366004612874565b611178565b3480156107e657600080fd5b506102ef60255481565b60006107fd3384846111f6565b5060015b92915050565b6000546001600160a01b0316331461083a5760405162461bcd60e51b815260040161083190612982565b60405180910390fd5b602592909255602655602755565b600061085584848461131a565b6108a784336108a285604051806060016040528060288152602001612b93602891396001600160a01b038a16600090815260066020908152604080832033845290915290205491906114c0565b6111f6565b5060015b9392505050565b6001600160a01b03811660009081526023602052604081205481036108d957506000919050565b6001600160a01b0382166000908152602360205260408120546108fb906114ec565b6001600160a01b03841660009081526023602052604090206001015490915080821161092b575060009392505050565b6109358282611509565b949350505050565b6000546001600160a01b031633146109675760405162461bcd60e51b815260040161083190612982565b600b805460ff60a01b1916600160a01b179055565b6000546001600160a01b031633146109a65760405162461bcd60e51b815260040161083190612982565b6000612710846109b560015490565b6109bf91906129b8565b6109c991906129cf565b90506000612710846109da60015490565b6109e491906129b8565b6109ee91906129cf565b90506000612710846109ff60015490565b610a0991906129b8565b610a1391906129cf565b60028490556003839055600481905590506000610a466103e8610a406005610a3a60015490565b90611515565b90611521565b9050808410158015610a585750808310155b8015610a645750808210155b610ac75760405162461bcd60e51b815260206004820152602e60248201527f4d61782054587320616e64204d61782057616c6c65742063616e6e6f7420626560448201526d206c657373207468616e202e352560901b6064820152608401610831565b50505050505050565b6000546001600160a01b03163314610afa5760405162461bcd60e51b815260040161083190612982565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526005602052604090205490565b6000546001600160a01b03163314610b6a5760405162461bcd60e51b815260040161083190612982565b600080546001600160a01b03191681556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a1565b6000546001600160a01b03163314610bd95760405162461bcd60e51b815260040161083190612982565b600b546001600160a01b03838116911614801590610c055750600a546001600160a01b03838116911614155b8015610c1a57506001600160a01b0382163014155b610c5b5760405162461bcd60e51b8152602060048201526012602482015271496e656c696769626c65204164647265737360701b6044820152606401610831565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610cb05760405162461bcd60e51b815260040161083190612982565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015610cfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2191906129f1565b505050565b602054336000829003610d3a575050505050565b6000805a336000908152600560209081526040808320546008909252822054929350909160ff16610e38575b8884108015610d7457508582105b15610e33578560245410610d885760006024555b610dba602060245481548110610da057610da0612a0e565b6000918252602090912001546001600160a01b031661152d565b15610df157610df1602060245481548110610dd757610dd7612a0e565b6000918252602090912001546001600160a01b0316611572565b610e06610dff5a8590611509565b85906116ac565b93505a602480549194506000610e1b83612a24565b91905055508180610e2b90612a24565b925050610d66565b610fa6565b6000610e43866108b2565b6001600160a01b038a16600090815260056020526040902054909150610e699089611509565b6001600160a01b038a16600090815260056020526040902055610e8c8883612a3d565b336000908152600560205260409020558015610fa457601d54610eaf90826116ac565b601d55601a5460405163a9059cbb60e01b81526001600160a01b038881166004830152602482018490529091169063a9059cbb906044016020604051808303816000875af1158015610f05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2991906129f1565b506001600160a01b03861660009081526022602090815260408083204290556023909152902060020154610f5d90826116ac565b6001600160a01b0387166000908152602360205260409020600281019190915554610f87906114ec565b6001600160a01b0387166000908152602360205260409020600101555b505b505050505050505050565b6000610fdd610fc06000610b25565b610fd7610fce61dead610b25565b60015490611509565b90611509565b905090565b60006107fd33848461131a565b610ff833611572565b565b6000546001600160a01b031633146110245760405162461bcd60e51b815260040161083190612982565b600c889055600d8790556010869055600e859055600f84905560118390556012829055601381905560145461105a906005611521565b6011541115801561107a5750601454611074906005611521565b60125411155b8015611095575060145461108f906005611521565b60135411155b6110f65760405162461bcd60e51b815260206004820152602c60248201527f746f74616c46656520616e642073656c6c4665652063616e6e6f74206265206d60448201526b6f7265207468616e2032302560a01b6064820152608401610831565b5050505050505050565b6000546001600160a01b0316331461112a5760405162461bcd60e51b815260040161083190612982565b6001600160a01b0382166000908152600860205260409020805460ff19168215801591909117909155611166576111628260006116b8565b5050565b6111628261117384610b25565b6116b8565b6000546001600160a01b031633146111a25760405162461bcd60e51b815260040161083190612982565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6001600160a01b0383166112585760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610831565b6001600160a01b0382166112b95760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610831565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6113258383836117ce565b61132f8383611968565b61133a8383836119f9565b6113448383611ae5565b61134f838383611b3c565b6113598383611c69565b6001600160a01b03831660009081526005602052604090205461137c9082611509565b6001600160a01b0384166000908152600560205260408120919091556113a28484611c8c565b6113ac57816113b7565b6113b7848484611cd2565b6001600160a01b0384166000908152600560205260409020549091506113dd90826116ac565b6001600160a01b0380851660008181526005602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906114319085815260200190565b60405180910390a36001600160a01b03841660009081526008602052604090205460ff16611466576114668461117386610b25565b6001600160a01b03831660009081526008602052604090205460ff16611493576114938361117385610b25565b6001600160a01b038316600090815260236020526040902054156114ba576114ba83611572565b50505050565b600081848411156114e45760405162461bcd60e51b81526004016108319190612775565b505050900390565b6000610801601f54610a40601e548561151590919063ffffffff16565b60006108ab8284612a50565b60006108ab82846129b8565b60006108ab82846129cf565b6025546001600160a01b038216600090815260226020526040812054909142916115579190612a3d565b108015610801575060265461156b836108b2565b1192915050565b6001600160a01b03811660009081526023602052604081205490036115945750565b600061159f826108b2565b9050801561116257601d546115b490826116ac565b601d55601a5460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb906044016020604051808303816000875af115801561160a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061162e91906129f1565b506001600160a01b0382166000908152602260209081526040808320429055602390915290206002015461166290826116ac565b6001600160a01b038316600090815260236020526040902060028101919091555461168c906114ec565b6001600160a01b0383166000908152602360205260409020600101555050565b60006108ab8284612a3d565b6000811180156116de57506001600160a01b038216600090815260236020526040902054155b1561174357602080546001600160a01b03841660008181526021845260408120839055600183018455929092527fc97bfaf2f8ee708c303a06d134f5ecd8389ae0432af62dc132a24118292866bb0180546001600160a01b0319169091179055611776565b8015801561176857506001600160a01b03821660009081526023602052604090205415155b156117765761177682611dc0565b6001600160a01b038216600090815260236020526040902054601b546117a79183916117a191611509565b906116ac565b601b556001600160a01b038216600090815260236020526040902081905561168c816114ec565b6001600160a01b0383166118325760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610831565b6001600160a01b0382166118945760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610831565b600081116118f65760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610831565b6118ff83610b25565b811115610d215760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610831565b6001600160a01b03821660009081526007602052604090205460ff161580156119aa57506001600160a01b03811660009081526007602052604090205460ff16155b1561116257600b54600160a01b900460ff166111625760405162461bcd60e51b815260206004820152600e60248201526d1d1c98591a5b99d05b1b1bddd95960921b6044820152606401610831565b6001600160a01b03831660009081526007602052604090205460ff16158015611a3b57506001600160a01b03821660009081526007602052604090205460ff16155b8015611a555750600b546001600160a01b03838116911614155b8015611a6c57506001600160a01b03821661dead14155b15610d21576004546001600160a01b038316600090815260056020526040902054611a9790836116ac565b1115610d215760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e00006044820152606401610831565b600b546001600160a01b038281169116148015611b1b57506001600160a01b03821660009081526007602052604090205460ff16155b1561116257600160166000828254611b339190612a3d565b90915550505050565b600b546001600160a01b03848116911614611bdd5760035481111580611b7a57506001600160a01b03831660009081526007602052604090205460ff165b80611b9d57506001600160a01b03821660009081526007602052604090205460ff165b611bdd5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610831565b60025481111580611c0657506001600160a01b03831660009081526007602052604090205460ff165b80611c2957506001600160a01b03821660009081526007602052604090205460ff165b610d215760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610831565b611c738282611ed4565b1561116257611c83601854611f83565b60006016555050565b6001600160a01b03821660009081526007602052604081205460ff161580156108ab5750506001600160a01b031660009081526007602052604090205460ff1615919050565b600080611cdf8585612142565b1115611db9576000611d02611cf48686612142565b601454610a3a908690611521565b30600090815260056020526040902054909150611d1f90826116ac565b30600081815260056020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611d709085815260200190565b60405180910390a360105415611da757611da73061dead611da2601054610a3a6014548961152190919063ffffffff16565b61131a565b611db18382611509565b9150506108ab565b5092915050565b60208054611dd090600190612a50565b81548110611de057611de0612a0e565b60009182526020808320909101546001600160a01b03848116845260218352604090932054825493909116928110611e1a57611e1a612a0e565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559183168152602180835260408220548354909391929190611e6590600190612a50565b81548110611e7557611e75612a0e565b60009182526020808320909101546001600160a01b03168352828101939093526040909101902091909155805480611eaf57611eaf612a63565b600082815260209020810160001990810180546001600160a01b031916905501905550565b600080601854611ee330610b25565b601754911115915060ff16158015611efd575060155460ff165b8015611f125750600b54600160a01b900460ff165b8015611f3757506001600160a01b03841660009081526007602052604090205460ff16155b8015611f5c57506001600160a01b03831660009081526007602052604090205460ff16155b8015611f755750600b546001600160a01b038481169116145b801561093557509392505050565b6001601760006101000a81548160ff0219169083151502179055506000611fcd6002610a3a600e546117a1600f546117a1600d546117a16001600c546116ac90919063ffffffff16565b90506000611fea82610a40600c548661151590919063ffffffff16565b90506000611ff88483611509565b905047612004826121e3565b60006120104783611509565b9050600061203361202c600c548861150990919063ffffffff16565b8390611521565b9050600061204c600c548361151590919063ffffffff16565b9050801561205e5761205e868261233d565b600d5460009061207390610a3a856002611515565b905080156120be57604051734ae8f6a452d3350d303d1f4fda573b1e6a4f16009082156108fc029083906000818181858888f193505050501580156120bc573d6000803e3d6000fd5b505b600e546000906120d390610a3a866002611515565b905080156120e4576120e481612401565b471561212c5760405173d043e87d5a4a2d79a22a260097080671ddfe7541904780156108fc02916000818181858888f1935050505015801561212a573d6000803e3d6000fd5b505b50506017805460ff191690555050505050505050565b6001600160a01b03821660009081526009602052604081205460ff168061218157506001600160a01b03821660009081526009602052604090205460ff165b1561219b57601454612194906064611509565b9050610801565b600b546001600160a01b03908116908316036121ba5750601254610801565b600b546001600160a01b03908116908416036121d95750601154610801565b5060135492915050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061221857612218612a0e565b6001600160a01b03928316602091820292909201810191909152600a54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612271573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122959190612a79565b816001815181106122a8576122a8612a0e565b6001600160a01b039283166020918202929092010152600a546122ce91309116846111f6565b600a5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612307908590600090869030904290600401612ada565b600060405180830381600087803b15801561232157600080fd5b505af1158015612335573d6000803e3d6000fd5b505050505050565b600a546123559030906001600160a01b0316846111f6565b600a5460405163f305d71960e01b8152306004820152602481018490526000604482018190526064820152739ad16c9570a6b9fe374f54ac4237f08edb209d9060848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af11580156123d5573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906123fa9190612b16565b5050505050565b601a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561244a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061246e9190612b44565b60408051600280825260608201835292935060009290916020830190803683375050600a54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156124dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125019190612a79565b8160008151811061251457612514612a0e565b6001600160a01b039283166020918202929092010152601a5482519116908290600190811061254557612545612a0e565b6001600160a01b039283166020918202929092010152600a5460405163b6f9de9560e01b815291169063b6f9de9590859061258b90600090869030904290600401612b5d565b6000604051808303818588803b1580156125a457600080fd5b505af11580156125b8573d6000803e3d6000fd5b5050601a54600b546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319150602401602060405180830381865afa15801561260c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126309190612b44565b601a546040516370a0823160e01b81523060048201529192506000916001600160a01b03909116906370a0823190602401602060405180830381865afa15801561267e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a29190612b44565b905060006126b08286611509565b9050600061272d6126c184866116ac565b601a546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015612709573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd79190612b44565b905061274561273c83836116ac565b601c54906116ac565b601c55601b54601f546127699161276091610a409086611515565b601e54906116ac565b601e5550505050505050565b600060208083528351808285015260005b818110156127a257858101830151858201604001528201612786565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146127d857600080fd5b50565b600080604083850312156127ee57600080fd5b82356127f9816127c3565b946020939093013593505050565b60008060006060848603121561281c57600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561284857600080fd5b8335612853816127c3565b92506020840135612863816127c3565b929592945050506040919091013590565b60006020828403121561288657600080fd5b81356108ab816127c3565b80151581146127d857600080fd5b600080604083850312156128b257600080fd5b82356128bd816127c3565b915060208301356128cd81612891565b809150509250929050565b6000806000606084860312156128ed57600080fd5b833592506020840135612863816127c3565b6000806040838503121561291257600080fd5b823561291d816127c3565b915060208301356128cd816127c3565b600080600080600080600080610100898b03121561294a57600080fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610801576108016129a2565b6000826129ec57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612a0357600080fd5b81516108ab81612891565b634e487b7160e01b600052603260045260246000fd5b600060018201612a3657612a366129a2565b5060010190565b80820180821115610801576108016129a2565b81810381811115610801576108016129a2565b634e487b7160e01b600052603160045260246000fd5b600060208284031215612a8b57600080fd5b81516108ab816127c3565b600081518084526020808501945080840160005b83811015612acf5781516001600160a01b031687529582019590820190600101612aaa565b509495945050505050565b85815284602082015260a060408201526000612af960a0830186612a96565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215612b2b57600080fd5b8351925060208401519150604084015190509250925092565b600060208284031215612b5657600080fd5b5051919050565b848152608060208201526000612b766080830186612a96565b6001600160a01b0394909416604083015250606001529291505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220aa568104c976e03a32e854eb0ab6555b5f6abb7e46e7cd07b54b3e67aba2e1e764736f6c63430008110033

Deployed Bytecode

0x60806040526004361061023f5760003560e01c8063715018a61161012e578063c942435d116100ab578063e87655cf1161006f578063e87655cf1461075c578063ef43b02b14610784578063efca2eed146107a4578063f2fde38b146107ba578063ffd49c84146107da57600080fd5b8063c942435d14610651578063ca89b89914610666578063ce7c2ac21461069f578063dd62ed3e146106f6578063e2d6f94c1461073c57600080fd5b80639358928b116100f25780639358928b146105ba57806395d89b41146105cf578063997664d7146105fb578063a8aa1b3114610611578063a9059cbb1461063157600080fd5b8063715018a614610527578063893d20e81461053c5780638c41180e1461055a5780638cd4426d1461057a5780638ff59b7a1461059a57600080fd5b806334c5d2ce116101bc57806348ff2b8b1161018057806348ff2b8b146104935780634fab0ae8146104b35780635f7bcd70146104c957806360e71962146104f157806370a082311461050757600080fd5b806334c5d2ce146103d55780633a98ef39146103f55780633f4218e01461040b578063420bbf201461043b5780634355855a1461046357600080fd5b806323b872dd1161020357806323b872dd1461033557806328fd319814610355578063293230b8146103755780632f54bf6e1461038a578063313ce567146103b957600080fd5b806306fdde031461024b578063095ea7b31461028c5780630ca61cb1146102bc57806318160ddd146102de578063228cb733146102fd57600080fd5b3661024657005b600080fd5b34801561025757600080fd5b5060408051808201909152600681526509edcd288caf60d31b60208201525b6040516102839190612775565b60405180910390f35b34801561029857600080fd5b506102ac6102a73660046127db565b6107f0565b6040519015158152602001610283565b3480156102c857600080fd5b506102dc6102d7366004612807565b610807565b005b3480156102ea57600080fd5b506001545b604051908152602001610283565b34801561030957600080fd5b50601a5461031d906001600160a01b031681565b6040516001600160a01b039091168152602001610283565b34801561034157600080fd5b506102ac610350366004612833565b610848565b34801561036157600080fd5b506102ef610370366004612874565b6108b2565b34801561038157600080fd5b506102dc61093d565b34801561039657600080fd5b506102ac6103a5366004612874565b6000546001600160a01b0391821691161490565b3480156103c557600080fd5b5060405160098152602001610283565b3480156103e157600080fd5b506102dc6103f0366004612807565b61097c565b34801561040157600080fd5b506102ef601b5481565b34801561041757600080fd5b506102ac610426366004612874565b60076020526000908152604090205460ff1681565b34801561044757600080fd5b5061031d73d043e87d5a4a2d79a22a260097080671ddfe754181565b34801561046f57600080fd5b506102ac61047e366004612874565b60086020526000908152604090205460ff1681565b34801561049f57600080fd5b506102dc6104ae36600461289f565b610ad0565b3480156104bf57600080fd5b506102ef60265481565b3480156104d557600080fd5b5061031d734ae8f6a452d3350d303d1f4fda573b1e6a4f160081565b3480156104fd57600080fd5b506102ef60275481565b34801561051357600080fd5b506102ef610522366004612874565b610b25565b34801561053357600080fd5b506102dc610b40565b34801561054857600080fd5b506000546001600160a01b031661031d565b34801561056657600080fd5b506102dc61057536600461289f565b610baf565b34801561058657600080fd5b506102dc6105953660046127db565b610c86565b3480156105a657600080fd5b506102dc6105b53660046128d8565b610d26565b3480156105c657600080fd5b506102ef610fb1565b3480156105db57600080fd5b506040805180820190915260038152624f4e4960e81b6020820152610276565b34801561060757600080fd5b506102ef601c5481565b34801561061d57600080fd5b50600b5461031d906001600160a01b031681565b34801561063d57600080fd5b506102ac61064c3660046127db565b610fe2565b34801561065d57600080fd5b506102dc610fef565b34801561067257600080fd5b506102ef610681366004612874565b6001600160a01b031660009081526023602052604090206002015490565b3480156106ab57600080fd5b506106db6106ba366004612874565b60236020526000908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610283565b34801561070257600080fd5b506102ef6107113660046128ff565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b34801561074857600080fd5b506102dc61075736600461292d565b610ffa565b34801561076857600080fd5b5061031d739ad16c9570a6b9fe374f54ac4237f08edb209d9081565b34801561079057600080fd5b506102dc61079f36600461289f565b611100565b3480156107b057600080fd5b506102ef601d5481565b3480156107c657600080fd5b506102dc6107d5366004612874565b611178565b3480156107e657600080fd5b506102ef60255481565b60006107fd3384846111f6565b5060015b92915050565b6000546001600160a01b0316331461083a5760405162461bcd60e51b815260040161083190612982565b60405180910390fd5b602592909255602655602755565b600061085584848461131a565b6108a784336108a285604051806060016040528060288152602001612b93602891396001600160a01b038a16600090815260066020908152604080832033845290915290205491906114c0565b6111f6565b5060015b9392505050565b6001600160a01b03811660009081526023602052604081205481036108d957506000919050565b6001600160a01b0382166000908152602360205260408120546108fb906114ec565b6001600160a01b03841660009081526023602052604090206001015490915080821161092b575060009392505050565b6109358282611509565b949350505050565b6000546001600160a01b031633146109675760405162461bcd60e51b815260040161083190612982565b600b805460ff60a01b1916600160a01b179055565b6000546001600160a01b031633146109a65760405162461bcd60e51b815260040161083190612982565b6000612710846109b560015490565b6109bf91906129b8565b6109c991906129cf565b90506000612710846109da60015490565b6109e491906129b8565b6109ee91906129cf565b90506000612710846109ff60015490565b610a0991906129b8565b610a1391906129cf565b60028490556003839055600481905590506000610a466103e8610a406005610a3a60015490565b90611515565b90611521565b9050808410158015610a585750808310155b8015610a645750808210155b610ac75760405162461bcd60e51b815260206004820152602e60248201527f4d61782054587320616e64204d61782057616c6c65742063616e6e6f7420626560448201526d206c657373207468616e202e352560901b6064820152608401610831565b50505050505050565b6000546001600160a01b03163314610afa5760405162461bcd60e51b815260040161083190612982565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526005602052604090205490565b6000546001600160a01b03163314610b6a5760405162461bcd60e51b815260040161083190612982565b600080546001600160a01b03191681556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a1565b6000546001600160a01b03163314610bd95760405162461bcd60e51b815260040161083190612982565b600b546001600160a01b03838116911614801590610c055750600a546001600160a01b03838116911614155b8015610c1a57506001600160a01b0382163014155b610c5b5760405162461bcd60e51b8152602060048201526012602482015271496e656c696769626c65204164647265737360701b6044820152606401610831565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610cb05760405162461bcd60e51b815260040161083190612982565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015610cfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2191906129f1565b505050565b602054336000829003610d3a575050505050565b6000805a336000908152600560209081526040808320546008909252822054929350909160ff16610e38575b8884108015610d7457508582105b15610e33578560245410610d885760006024555b610dba602060245481548110610da057610da0612a0e565b6000918252602090912001546001600160a01b031661152d565b15610df157610df1602060245481548110610dd757610dd7612a0e565b6000918252602090912001546001600160a01b0316611572565b610e06610dff5a8590611509565b85906116ac565b93505a602480549194506000610e1b83612a24565b91905055508180610e2b90612a24565b925050610d66565b610fa6565b6000610e43866108b2565b6001600160a01b038a16600090815260056020526040902054909150610e699089611509565b6001600160a01b038a16600090815260056020526040902055610e8c8883612a3d565b336000908152600560205260409020558015610fa457601d54610eaf90826116ac565b601d55601a5460405163a9059cbb60e01b81526001600160a01b038881166004830152602482018490529091169063a9059cbb906044016020604051808303816000875af1158015610f05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2991906129f1565b506001600160a01b03861660009081526022602090815260408083204290556023909152902060020154610f5d90826116ac565b6001600160a01b0387166000908152602360205260409020600281019190915554610f87906114ec565b6001600160a01b0387166000908152602360205260409020600101555b505b505050505050505050565b6000610fdd610fc06000610b25565b610fd7610fce61dead610b25565b60015490611509565b90611509565b905090565b60006107fd33848461131a565b610ff833611572565b565b6000546001600160a01b031633146110245760405162461bcd60e51b815260040161083190612982565b600c889055600d8790556010869055600e859055600f84905560118390556012829055601381905560145461105a906005611521565b6011541115801561107a5750601454611074906005611521565b60125411155b8015611095575060145461108f906005611521565b60135411155b6110f65760405162461bcd60e51b815260206004820152602c60248201527f746f74616c46656520616e642073656c6c4665652063616e6e6f74206265206d60448201526b6f7265207468616e2032302560a01b6064820152608401610831565b5050505050505050565b6000546001600160a01b0316331461112a5760405162461bcd60e51b815260040161083190612982565b6001600160a01b0382166000908152600860205260409020805460ff19168215801591909117909155611166576111628260006116b8565b5050565b6111628261117384610b25565b6116b8565b6000546001600160a01b031633146111a25760405162461bcd60e51b815260040161083190612982565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6001600160a01b0383166112585760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610831565b6001600160a01b0382166112b95760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610831565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6113258383836117ce565b61132f8383611968565b61133a8383836119f9565b6113448383611ae5565b61134f838383611b3c565b6113598383611c69565b6001600160a01b03831660009081526005602052604090205461137c9082611509565b6001600160a01b0384166000908152600560205260408120919091556113a28484611c8c565b6113ac57816113b7565b6113b7848484611cd2565b6001600160a01b0384166000908152600560205260409020549091506113dd90826116ac565b6001600160a01b0380851660008181526005602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906114319085815260200190565b60405180910390a36001600160a01b03841660009081526008602052604090205460ff16611466576114668461117386610b25565b6001600160a01b03831660009081526008602052604090205460ff16611493576114938361117385610b25565b6001600160a01b038316600090815260236020526040902054156114ba576114ba83611572565b50505050565b600081848411156114e45760405162461bcd60e51b81526004016108319190612775565b505050900390565b6000610801601f54610a40601e548561151590919063ffffffff16565b60006108ab8284612a50565b60006108ab82846129b8565b60006108ab82846129cf565b6025546001600160a01b038216600090815260226020526040812054909142916115579190612a3d565b108015610801575060265461156b836108b2565b1192915050565b6001600160a01b03811660009081526023602052604081205490036115945750565b600061159f826108b2565b9050801561116257601d546115b490826116ac565b601d55601a5460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb906044016020604051808303816000875af115801561160a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061162e91906129f1565b506001600160a01b0382166000908152602260209081526040808320429055602390915290206002015461166290826116ac565b6001600160a01b038316600090815260236020526040902060028101919091555461168c906114ec565b6001600160a01b0383166000908152602360205260409020600101555050565b60006108ab8284612a3d565b6000811180156116de57506001600160a01b038216600090815260236020526040902054155b1561174357602080546001600160a01b03841660008181526021845260408120839055600183018455929092527fc97bfaf2f8ee708c303a06d134f5ecd8389ae0432af62dc132a24118292866bb0180546001600160a01b0319169091179055611776565b8015801561176857506001600160a01b03821660009081526023602052604090205415155b156117765761177682611dc0565b6001600160a01b038216600090815260236020526040902054601b546117a79183916117a191611509565b906116ac565b601b556001600160a01b038216600090815260236020526040902081905561168c816114ec565b6001600160a01b0383166118325760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610831565b6001600160a01b0382166118945760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610831565b600081116118f65760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610831565b6118ff83610b25565b811115610d215760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610831565b6001600160a01b03821660009081526007602052604090205460ff161580156119aa57506001600160a01b03811660009081526007602052604090205460ff16155b1561116257600b54600160a01b900460ff166111625760405162461bcd60e51b815260206004820152600e60248201526d1d1c98591a5b99d05b1b1bddd95960921b6044820152606401610831565b6001600160a01b03831660009081526007602052604090205460ff16158015611a3b57506001600160a01b03821660009081526007602052604090205460ff16155b8015611a555750600b546001600160a01b03838116911614155b8015611a6c57506001600160a01b03821661dead14155b15610d21576004546001600160a01b038316600090815260056020526040902054611a9790836116ac565b1115610d215760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e00006044820152606401610831565b600b546001600160a01b038281169116148015611b1b57506001600160a01b03821660009081526007602052604090205460ff16155b1561116257600160166000828254611b339190612a3d565b90915550505050565b600b546001600160a01b03848116911614611bdd5760035481111580611b7a57506001600160a01b03831660009081526007602052604090205460ff165b80611b9d57506001600160a01b03821660009081526007602052604090205460ff165b611bdd5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610831565b60025481111580611c0657506001600160a01b03831660009081526007602052604090205460ff165b80611c2957506001600160a01b03821660009081526007602052604090205460ff165b610d215760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610831565b611c738282611ed4565b1561116257611c83601854611f83565b60006016555050565b6001600160a01b03821660009081526007602052604081205460ff161580156108ab5750506001600160a01b031660009081526007602052604090205460ff1615919050565b600080611cdf8585612142565b1115611db9576000611d02611cf48686612142565b601454610a3a908690611521565b30600090815260056020526040902054909150611d1f90826116ac565b30600081815260056020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611d709085815260200190565b60405180910390a360105415611da757611da73061dead611da2601054610a3a6014548961152190919063ffffffff16565b61131a565b611db18382611509565b9150506108ab565b5092915050565b60208054611dd090600190612a50565b81548110611de057611de0612a0e565b60009182526020808320909101546001600160a01b03848116845260218352604090932054825493909116928110611e1a57611e1a612a0e565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559183168152602180835260408220548354909391929190611e6590600190612a50565b81548110611e7557611e75612a0e565b60009182526020808320909101546001600160a01b03168352828101939093526040909101902091909155805480611eaf57611eaf612a63565b600082815260209020810160001990810180546001600160a01b031916905501905550565b600080601854611ee330610b25565b601754911115915060ff16158015611efd575060155460ff165b8015611f125750600b54600160a01b900460ff165b8015611f3757506001600160a01b03841660009081526007602052604090205460ff16155b8015611f5c57506001600160a01b03831660009081526007602052604090205460ff16155b8015611f755750600b546001600160a01b038481169116145b801561093557509392505050565b6001601760006101000a81548160ff0219169083151502179055506000611fcd6002610a3a600e546117a1600f546117a1600d546117a16001600c546116ac90919063ffffffff16565b90506000611fea82610a40600c548661151590919063ffffffff16565b90506000611ff88483611509565b905047612004826121e3565b60006120104783611509565b9050600061203361202c600c548861150990919063ffffffff16565b8390611521565b9050600061204c600c548361151590919063ffffffff16565b9050801561205e5761205e868261233d565b600d5460009061207390610a3a856002611515565b905080156120be57604051734ae8f6a452d3350d303d1f4fda573b1e6a4f16009082156108fc029083906000818181858888f193505050501580156120bc573d6000803e3d6000fd5b505b600e546000906120d390610a3a866002611515565b905080156120e4576120e481612401565b471561212c5760405173d043e87d5a4a2d79a22a260097080671ddfe7541904780156108fc02916000818181858888f1935050505015801561212a573d6000803e3d6000fd5b505b50506017805460ff191690555050505050505050565b6001600160a01b03821660009081526009602052604081205460ff168061218157506001600160a01b03821660009081526009602052604090205460ff165b1561219b57601454612194906064611509565b9050610801565b600b546001600160a01b03908116908316036121ba5750601254610801565b600b546001600160a01b03908116908416036121d95750601154610801565b5060135492915050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061221857612218612a0e565b6001600160a01b03928316602091820292909201810191909152600a54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612271573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122959190612a79565b816001815181106122a8576122a8612a0e565b6001600160a01b039283166020918202929092010152600a546122ce91309116846111f6565b600a5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612307908590600090869030904290600401612ada565b600060405180830381600087803b15801561232157600080fd5b505af1158015612335573d6000803e3d6000fd5b505050505050565b600a546123559030906001600160a01b0316846111f6565b600a5460405163f305d71960e01b8152306004820152602481018490526000604482018190526064820152739ad16c9570a6b9fe374f54ac4237f08edb209d9060848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af11580156123d5573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906123fa9190612b16565b5050505050565b601a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561244a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061246e9190612b44565b60408051600280825260608201835292935060009290916020830190803683375050600a54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156124dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125019190612a79565b8160008151811061251457612514612a0e565b6001600160a01b039283166020918202929092010152601a5482519116908290600190811061254557612545612a0e565b6001600160a01b039283166020918202929092010152600a5460405163b6f9de9560e01b815291169063b6f9de9590859061258b90600090869030904290600401612b5d565b6000604051808303818588803b1580156125a457600080fd5b505af11580156125b8573d6000803e3d6000fd5b5050601a54600b546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319150602401602060405180830381865afa15801561260c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126309190612b44565b601a546040516370a0823160e01b81523060048201529192506000916001600160a01b03909116906370a0823190602401602060405180830381865afa15801561267e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a29190612b44565b905060006126b08286611509565b9050600061272d6126c184866116ac565b601a546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015612709573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd79190612b44565b905061274561273c83836116ac565b601c54906116ac565b601c55601b54601f546127699161276091610a409086611515565b601e54906116ac565b601e5550505050505050565b600060208083528351808285015260005b818110156127a257858101830151858201604001528201612786565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146127d857600080fd5b50565b600080604083850312156127ee57600080fd5b82356127f9816127c3565b946020939093013593505050565b60008060006060848603121561281c57600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561284857600080fd5b8335612853816127c3565b92506020840135612863816127c3565b929592945050506040919091013590565b60006020828403121561288657600080fd5b81356108ab816127c3565b80151581146127d857600080fd5b600080604083850312156128b257600080fd5b82356128bd816127c3565b915060208301356128cd81612891565b809150509250929050565b6000806000606084860312156128ed57600080fd5b833592506020840135612863816127c3565b6000806040838503121561291257600080fd5b823561291d816127c3565b915060208301356128cd816127c3565b600080600080600080600080610100898b03121561294a57600080fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610801576108016129a2565b6000826129ec57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612a0357600080fd5b81516108ab81612891565b634e487b7160e01b600052603260045260246000fd5b600060018201612a3657612a366129a2565b5060010190565b80820180821115610801576108016129a2565b81810381811115610801576108016129a2565b634e487b7160e01b600052603160045260246000fd5b600060208284031215612a8b57600080fd5b81516108ab816127c3565b600081518084526020808501945080840160005b83811015612acf5781516001600160a01b031687529582019590820190600101612aaa565b509495945050505050565b85815284602082015260a060408201526000612af960a0830186612a96565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215612b2b57600080fd5b8351925060208401519150604084015190509250925092565b600060208284031215612b5657600080fd5b5051919050565b848152608060208201526000612b766080830186612a96565b6001600160a01b0394909416604083015250606001529291505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220aa568104c976e03a32e854eb0ab6555b5f6abb7e46e7cd07b54b3e67aba2e1e764736f6c63430008110033

Deployed Bytecode Sourcemap

6144:21911:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9828:83;;;;;;;;;;-1:-1:-1;9898:5:0;;;;;;;;;;;;-1:-1:-1;;;9898:5:0;;;;9828:83;;;;;;;:::i;:::-;;;;;;;;11254:191;;;;;;;;;;-1:-1:-1;11254:191:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;11254:191:0;1023:187:1;27766:286:0;;;;;;;;;;-1:-1:-1;27766:286:0;;;;;:::i;:::-;;:::i;:::-;;10296:100;;;;;;;;;;-1:-1:-1;10376:12:0;;10296:100;;;1682:25:1;;;1670:2;1655:18;10296:100:0;1536:177:1;7673:66:0;;;;;;;;;;-1:-1:-1;7673:66:0;;;;-1:-1:-1;;;;;7673:66:0;;;;;;-1:-1:-1;;;;;1882:32:1;;;1864:51;;1852:2;1837:18;7673:66:0;1718:203:1;20732:442:0;;;;;;;;;;-1:-1:-1;20732:442:0;;;;;:::i;:::-;;:::i;26435:577::-;;;;;;;;;;-1:-1:-1;26435:577:0;;;;;:::i;:::-;;:::i;10105:83::-;;;;;;;;;;;;;:::i;4124:103::-;;;;;;;;;;-1:-1:-1;4124:103:0;;;;;:::i;:::-;4179:4;4214:5;-1:-1:-1;;;;;4203:16:0;;;4214:5;;4203:16;;4124:103;10014:83;;;;;;;;;;-1:-1:-1;10014:83:0;;6355:1;2781:36:1;;2769:2;2754:18;10014:83:0;2639:184:1;14323:649:0;;;;;;;;;;-1:-1:-1;14323:649:0;;;;;:::i;:::-;;:::i;7746:26::-;;;;;;;;;;;;;;;;6750:43;;;;;;;;;;-1:-1:-1;6750:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;8602:89;;;;;;;;;;;;8649:42;8602:89;;6800:48;;;;;;;;;;-1:-1:-1;6800:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;11122:124;;;;;;;;;;-1:-1:-1;11122:124:0;;;;;:::i;:::-;;:::i;8334:45::-;;;;;;;;;;;;;;;;8698:87;;;;;;;;;;;;8743:42;8698:87;;8386:33;;;;;;;;;;;;;;;;10404:119;;;;;;;;;;-1:-1:-1;10404:119:0;;;;;:::i;:::-;;:::i;4235:139::-;;;;;;;;;;;;;:::i;10196:92::-;;;;;;;;;;-1:-1:-1;10248:7:0;10275:5;-1:-1:-1;;;;;10275:5:0;10196:92;;14002:313;;;;;;;;;;-1:-1:-1;14002:313:0;;;;;:::i;:::-;;:::i;25358:140::-;;;;;;;;;;-1:-1:-1;25358:140:0;;;;;:::i;:::-;;:::i;23362:1708::-;;;;;;;;;;-1:-1:-1;23362:1708:0;;;;;:::i;:::-;;:::i;11453:154::-;;;;;;;;;;;;;:::i;9919:87::-;;;;;;;;;;-1:-1:-1;9991:7:0;;;;;;;;;;;;-1:-1:-1;;;9991:7:0;;;;9919:87;;7779:29;;;;;;;;;;;;;;;;6921:19;;;;;;;;;;-1:-1:-1;6921:19:0;;;;-1:-1:-1;;;;;6921:19:0;;;10531:197;;;;;;;;;;-1:-1:-1;10531:197:0;;;;;:::i;:::-;;:::i;8428:84::-;;;;;;;;;;;;;:::i;25506:222::-;;;;;;;;;;-1:-1:-1;25506:222:0;;;;;:::i;:::-;-1:-1:-1;;;;;25686:19:0;25606:7;25686:19;;;:6;:19;;;;;:33;;;;25506:222;8208:39;;;;;;;;;;-1:-1:-1;8208:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3928:25:1;;;3984:2;3969:18;;3962:34;;;;4012:18;;;4005:34;3916:2;3901:18;8208:39:0;3726:319:1;10736:184:0;;;;;;;;;;-1:-1:-1;10736:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;10885:18:0;;;10853:7;10885:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;10736:184;13230:764;;;;;;;;;;-1:-1:-1;13230:764:0;;;;;:::i;:::-;;:::i;8792:87::-;;;;;;;;;;;;8837:42;8792:87;;21559:288;;;;;;;;;;-1:-1:-1;21559:288:0;;;;;:::i;:::-;;:::i;7815:31::-;;;;;;;;;;;;;;;;4382:136;;;;;;;;;;-1:-1:-1;4382:136:0;;;;;:::i;:::-;;:::i;8290:37::-;;;;;;;;;;;;;;;;11254:191;11356:4;11378:37;11387:10;11399:7;11408:6;11378:8;:37::i;:::-;-1:-1:-1;11433:4:0;11254:191;;;;;:::o;27766:286::-;4179:4;4214:5;-1:-1:-1;;;;;4214:5:0;4074:10;4203:16;4058:38;;;;-1:-1:-1;;;4058:38:0;;;;;;;:::i;:::-;;;;;;;;;27934:9:::1;:22:::0;;;;27967:15:::1;:34:::0;28012:14:::1;:32:::0;27766:286::o;20732:442::-;20864:4;20881:36;20891:6;20899:9;20910:6;20881:9;:36::i;:::-;20928:216;20951:6;20972:10;20997:136;21051:6;20997:136;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20997:19:0;;;;;;:11;:19;;;;;;;;21017:10;20997:31;;;;;;;;;:136;:35;:136::i;:::-;20928:8;:216::i;:::-;-1:-1:-1;21162:4:0;20732:442;;;;;;:::o;26435:577::-;-1:-1:-1;;;;;26560:19:0;;26531:7;26560:19;;;:6;:19;;;;;:26;:31;;26556:72;;-1:-1:-1;26615:1:0;;26435:577;-1:-1:-1;26435:577:0:o;26556:72::-;-1:-1:-1;;;;;26711:19:0;;26638:33;26711:19;;;:6;:19;;;;;:26;26674:74;;:22;:74::i;:::-;-1:-1:-1;;;;;26794:19:0;;26759:32;26794:19;;;:6;:19;;;;;:33;;;26638:110;;-1:-1:-1;26842:53:0;;;26838:94;;-1:-1:-1;26919:1:0;;26435:577;-1:-1:-1;;;26435:577:0:o;26838:94::-;26949:55;:25;26979:24;26949:29;:55::i;:::-;26942:62;26435:577;-1:-1:-1;;;;26435:577:0:o;10105:83::-;4179:4;4214:5;-1:-1:-1;;;;;4214:5:0;4074:10;4203:16;4058:38;;;;-1:-1:-1;;;4058:38:0;;;;;;;:::i;:::-;10159:14:::1;:21:::0;;-1:-1:-1;;;;10159:21:0::1;-1:-1:-1::0;;;10159:21:0::1;::::0;;10105:83::o;14323:649::-;4179:4;4214:5;-1:-1:-1;;;;;4214:5:0;4074:10;4203:16;4058:38;;;;-1:-1:-1;;;4058:38:0;;;;;;;:::i;:::-;14457:13:::1;14498:5;14490:4;14474:13;10376:12:::0;;;10296:100;14474:13:::1;:20;;;;:::i;:::-;14473:30;;;;:::i;:::-;14457:46;;14514:19;14563:5;14553:6;14537:13;10376:12:::0;;;10296:100;14537:13:::1;:22;;;;:::i;:::-;14536:32;;;;:::i;:::-;14514:54;;14579:17;14627:5;14616:7;14600:13;10376:12:::0;;;10296:100;14600:13:::1;:23;;;;:::i;:::-;14599:33;;;;:::i;:::-;14643:12;:20:::0;;;14674:14:::1;:28:::0;;;14713:15:::1;:27:::0;;;14579:53;-1:-1:-1;;14767:30:0::1;14792:4;14767:20;14785:1;14767:13;10376:12:::0;;;10296:100;14767:13:::1;:17:::0;::::1;:20::i;:::-;:24:::0;::::1;:30::i;:::-;14751:46;;14839:5;14830;:14;;:38;;;;;14863:5;14848:11;:20;;14830:38;:60;;;;;14885:5;14872:9;:18;;14830:60;14808:156;;;::::0;-1:-1:-1;;;14808:156:0;;6432:2:1;14808:156:0::1;::::0;::::1;6414:21:1::0;6471:2;6451:18;;;6444:30;6510:34;6490:18;;;6483:62;-1:-1:-1;;;6561:18:1;;;6554:44;6615:19;;14808:156:0::1;6230:410:1::0;14808:156:0::1;14446:526;;;;14323:649:::0;;;:::o;11122:124::-;4179:4;4214:5;-1:-1:-1;;;;;4214:5:0;4074:10;4203:16;4058:38;;;;-1:-1:-1;;;4058:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11206:21:0;;;::::1;;::::0;;;:11:::1;:21;::::0;;;;:32;;-1:-1:-1;;11206:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;11122:124::o;10404:119::-;-1:-1:-1;;;;;10497:18:0;10470:7;10497:18;;;:9;:18;;;;;;;10404:119::o;4235:139::-;4179:4;4214:5;-1:-1:-1;;;;;4214:5:0;4074:10;4203:16;4058:38;;;;-1:-1:-1;;;4058:38:0;;;;;;;:::i;:::-;4316:1:::1;4300:18:::0;;-1:-1:-1;;;;;;4300:18:0::1;::::0;;4334:32:::1;::::0;1864:51:1;;;4334:32:0::1;::::0;1852:2:1;1837:18;4334:32:0::1;;;;;;;4235:139::o:0;14002:313::-;4179:4;4214:5;-1:-1:-1;;;;;4214:5:0;4074:10;4203:16;4058:38;;;;-1:-1:-1;;;4058:38:0;;;;;;;:::i;:::-;14125:4:::1;::::0;-1:-1:-1;;;;;14105:25:0;;::::1;14125:4:::0;::::1;14105:25;::::0;::::1;::::0;:73:::1;;-1:-1:-1::0;14171:6:0::1;::::0;-1:-1:-1;;;;;14151:27:0;;::::1;14171:6:::0;::::1;14151:27;;14105:73;:119;;;;-1:-1:-1::0;;;;;;14199:25:0;::::1;14219:4;14199:25;;14105:119;14083:187;;;::::0;-1:-1:-1;;;14083:187:0;;6847:2:1;14083:187:0::1;::::0;::::1;6829:21:1::0;6886:2;6866:18;;;6859:30;-1:-1:-1;;;6905:18:1;;;6898:48;6963:18;;14083:187:0::1;6645:342:1::0;14083:187:0::1;-1:-1:-1::0;;;;;14281:15:0;;;::::1;;::::0;;;:5:::1;:15;::::0;;;;:26;;-1:-1:-1;;14281:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;14002:313::o;25358:140::-;4179:4;4214:5;-1:-1:-1;;;;;4214:5:0;4074:10;4203:16;4058:38;;;;-1:-1:-1;;;4058:38:0;;;;;;;:::i;:::-;25444:46:::1;::::0;-1:-1:-1;;;25444:46:0;;25470:10:::1;25444:46;::::0;::::1;7166:51:1::0;7233:18;;;7226:34;;;-1:-1:-1;;;;;25444:25:0;::::1;::::0;::::1;::::0;7139:18:1;;25444:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25358:140:::0;;:::o;23362:1708::-;23515:12;:19;23560:10;23488:24;23585:21;;;23581:60;;23623:7;;23362:1708;;;:::o;23581:60::-;23651:15;23681;23699:9;23784:10;23719:18;23774:21;;;:9;:21;;;;;;;;;23811:16;:28;;;;;;23681:27;;-1:-1:-1;23719:18:0;;23811:28;;23806:1257;;23856:509;23873:3;23863:7;:13;:46;;;;;23893:16;23880:10;:29;23863:46;23856:509;;;23950:16;23934:12;;:32;23930:97;;24006:1;23991:12;:16;23930:97;24049:44;24066:12;24079;;24066:26;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;24066:26:0;24049:16;:44::i;:::-;24045:139;;;24118:46;24137:12;24150;;24137:26;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;24137:26:0;24118:18;:46::i;:::-;24212:35;24224:22;24236:9;24224:7;;:11;:22::i;:::-;24212:7;;:11;:35::i;:::-;24202:45;;24276:9;24304:12;:14;;24266:19;;-1:-1:-1;24304:12:0;:14;;;:::i;:::-;;;;;;24337:12;;;;;:::i;:::-;;;;23856:509;;;23806:1257;;;24397:14;24414:23;24432:4;24414:17;:23::i;:::-;-1:-1:-1;;;;;24474:19:0;;;;;;:9;:19;;;;;;24397:40;;-1:-1:-1;24474:32:0;;24498:7;24474:23;:32::i;:::-;-1:-1:-1;;;;;24452:19:0;;;;;;:9;:19;;;;;:54;24545:21;24559:7;24545:11;:21;:::i;:::-;24531:10;24521:21;;;;:9;:21;;;;;:45;24585:10;;24581:471;;24635:16;;:28;;24656:6;24635:20;:28::i;:::-;24616:16;:47;24689:6;;24682:37;;-1:-1:-1;;;24682:37:0;;-1:-1:-1;;;;;7184:32:1;;;24682:37:0;;;7166:51:1;7233:18;;;7226:34;;;24689:6:0;;;;24682:23;;7139:18:1;;24682:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;24738:23:0;;;;;;:17;:23;;;;;;;;24764:15;24738:41;;24827:6;:12;;;;;:26;;;:78;;24880:6;24827:30;:78::i;:::-;-1:-1:-1;;;;;24798:12:0;;;;;;:6;:12;;;;;:26;;;:107;;;;24998:19;24953:83;;:22;:83::i;:::-;-1:-1:-1;;;;;24924:12:0;;;;;;:6;:12;;;;;:26;;:112;24581:471;24382:681;23806:1257;23477:1593;;;;;;23362:1708;;;:::o;11453:154::-;11512:7;11539:60;11577:21;11595:1;11577:9;:21::i;:::-;11539:33;11556:15;8553:42;11556:9;:15::i;:::-;11539:12;;;:16;:33::i;:::-;:37;;:60::i;:::-;11532:67;;11453:154;:::o;10531:197::-;10636:4;10658:40;10668:10;10680:9;10691:6;10658:9;:40::i;8428:84::-;8474:30;8493:10;8474:18;:30::i;:::-;8428:84::o;13230:764::-;4179:4;4214:5;-1:-1:-1;;;;;4214:5:0;4074:10;4203:16;4058:38;;;;-1:-1:-1;;;4058:38:0;;;;;;;:::i;:::-;13503:12:::1;:25:::0;;;13539:12:::1;:25:::0;;;13575:7:::1;:15:::0;;;13601:10:::1;:21:::0;;;13633:14:::1;:29:::0;;;13673:8:::1;:17:::0;;;13701:7:::1;:15:::0;;;13727:11:::1;:20:::0;;;13792:11:::1;::::0;:18:::1;::::0;13808:1:::1;13792:15;:18::i;:::-;13780:8;;:30;;:80;;;;-1:-1:-1::0;13842:11:0::1;::::0;:18:::1;::::0;13858:1:::1;13842:15;:18::i;:::-;13831:7;;:29;;13780:80;:134;;;;-1:-1:-1::0;13896:11:0::1;::::0;:18:::1;::::0;13912:1:::1;13896:15;:18::i;:::-;13881:11;;:33;;13780:134;13758:228;;;::::0;-1:-1:-1;;;13758:228:0;;8125:2:1;13758:228:0::1;::::0;::::1;8107:21:1::0;8164:2;8144:18;;;8137:30;8203:34;8183:18;;;8176:62;-1:-1:-1;;;8254:18:1;;;8247:42;8306:19;;13758:228:0::1;7923:408:1::0;13758:228:0::1;13230:764:::0;;;;;;;;:::o;21559:288::-;4179:4;4214:5;-1:-1:-1;;;;;4214:5:0;4074:10;4203:16;4058:38;;;;-1:-1:-1;;;4058:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21670:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;21670:33:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;21714:126:::1;;21741:19;21750:6;21758:1;21741:8;:19::i;:::-;21559:288:::0;;:::o;21714:126::-:1;21793:35;21802:6;21810:17;21820:6;21810:9;:17::i;:::-;21793:8;:35::i;4382:136::-:0;4179:4;4214:5;-1:-1:-1;;;;;4214:5:0;4074:10;4203:16;4058:38;;;;-1:-1:-1;;;4058:38:0;;;;;;;:::i;:::-;4458:5:::1;:11:::0;;-1:-1:-1;;;;;;4458:11:0::1;-1:-1:-1::0;;;;;4458:11:0;::::1;::::0;;::::1;::::0;;;4485:25:::1;::::0;1864:51:1;;;4485:25:0::1;::::0;1852:2:1;1837:18;4485:25:0::1;;;;;;;4382:136:::0;:::o;21182:369::-;-1:-1:-1;;;;;21309:19:0;;21301:68;;;;-1:-1:-1;;;21301:68:0;;8754:2:1;21301:68:0;;;8736:21:1;8793:2;8773:18;;;8766:30;8832:34;8812:18;;;8805:62;-1:-1:-1;;;8883:18:1;;;8876:34;8927:19;;21301:68:0;8552:400:1;21301:68:0;-1:-1:-1;;;;;21388:21:0;;21380:68;;;;-1:-1:-1;;;21380:68:0;;9159:2:1;21380:68:0;;;9141:21:1;9198:2;9178:18;;;9171:30;9237:34;9217:18;;;9210:62;-1:-1:-1;;;9288:18:1;;;9281:32;9330:19;;21380:68:0;8957:398:1;21380:68:0;-1:-1:-1;;;;;21459:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;21511:32;;1682:25:1;;;21511:32:0;;1655:18:1;21511:32:0;;;;;;;21182:369;;;:::o;12171:1051::-;12294:37;12305:6;12313:9;12324:6;12294:10;:37::i;:::-;12342:38;12362:6;12370:9;12342:19;:38::i;:::-;12391:41;12406:6;12414:9;12425:6;12391:14;:41::i;:::-;12443:35;12460:6;12468:9;12443:16;:35::i;:::-;12489:39;12502:6;12510:9;12521:6;12489:12;:39::i;:::-;12539:27;12548:6;12556:9;12539:8;:27::i;:::-;-1:-1:-1;;;;;12597:17:0;;;;;;:9;:17;;;;;;:29;;12619:6;12597:21;:29::i;:::-;-1:-1:-1;;;;;12577:17:0;;;;;;:9;:17;;;;;:49;;;;12662:32;12587:6;12684:9;12662:13;:32::i;:::-;:104;;12760:6;12662:104;;;12710:34;12718:6;12726:9;12737:6;12710:7;:34::i;:::-;-1:-1:-1;;;;;12800:20:0;;;;;;:9;:20;;;;;;12637:129;;-1:-1:-1;12800:40:0;;12637:129;12800:24;:40::i;:::-;-1:-1:-1;;;;;12777:20:0;;;;;;;:9;:20;;;;;;;:63;;;;12856:43;;;;;;;;;;12884:14;1682:25:1;;1670:2;1655:18;;1536:177;12856:43:0;;;;;;;;-1:-1:-1;;;;;12915:24:0;;;;;;:16;:24;;;;;;;;12910:93;;12956:35;12965:6;12973:17;12983:6;12973:9;:17::i;12956:35::-;-1:-1:-1;;;;;13018:27:0;;;;;;:16;:27;;;;;;;;13013:102;;13062:41;13071:9;13082:20;13092:9;13082;:20::i;13062:41::-;-1:-1:-1;;;;;13129:17:0;;13156:1;13129:17;;;:6;:17;;;;;:24;:28;13125:90;;13174:29;13193:9;13174:18;:29::i;:::-;12283:939;12171:1051;;;:::o;2036:240::-;2156:7;2217:12;2209:6;;;;2201:29;;;;-1:-1:-1;;;2201:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;2252:5:0;;;2036:240::o;27020:215::-;27117:7;27162:65;27195:31;;27162:28;27172:17;;27162:5;:9;;:28;;;;:::i;336:98::-;394:7;421:5;425:1;421;:5;:::i;442:98::-;500:7;527:5;531:1;527;:5;:::i;548:98::-;606:7;633:5;637:1;633;:5;:::i;25078:272::-;25250:9;;-1:-1:-1;;;;;25217:30:0;;25175:4;25217:30;;;:17;:30;;;;;;25175:4;;25262:15;;25217:42;;25250:9;25217:42;:::i;:::-;:60;:125;;;;;25327:15;;25294:30;25312:11;25294:17;:30::i;:::-;:48;25197:145;25078:272;-1:-1:-1;;25078:272:0:o;25736:691::-;-1:-1:-1;;;;;25809:19:0;;;;;;:6;:19;;;;;:26;:31;;25805:70;;25736:691;:::o;25805:70::-;25885:14;25902:30;25920:11;25902:17;:30::i;:::-;25885:47;-1:-1:-1;25947:10:0;;25943:477;;25993:16;;:28;;26014:6;25993:20;:28::i;:::-;25974:16;:47;26043:6;;26036:44;;-1:-1:-1;;;26036:44:0;;-1:-1:-1;;;;;7184:32:1;;;26036:44:0;;;7166:51:1;7233:18;;;7226:34;;;26043:6:0;;;;26036:23;;7139:18:1;;26036:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;26095:30:0;;;;;;:17;:30;;;;;;;;26128:15;26095:48;;26194:6;:19;;;;;:51;;;:81;;26268:6;26194:73;:81::i;:::-;-1:-1:-1;;;;;26158:19:0;;;;;;:6;:19;;;;;:33;;;:117;;;;26367:26;26326:82;;:22;:82::i;:::-;-1:-1:-1;;;;;26290:19:0;;;;;;:6;:19;;;;;:33;;:118;25794:633;25736:691;:::o;230:98::-;288:7;315:5;319:1;315;:5;:::i;21855:548::-;21943:1;21934:6;:10;:45;;;;-1:-1:-1;;;;;;21948:19:0;;;;;;:6;:19;;;;;:26;:31;21934:45;21930:219;;;27342:12;:19;;-1:-1:-1;;;;;27308:31:0;;;;;;:18;:31;;;;;:53;;;27372:30;;;;;;;;;;;;;-1:-1:-1;;;;;;27372:30:0;;;;;;21930:219;;;22045:11;;:45;;;;-1:-1:-1;;;;;;22060:19:0;;22089:1;22060:19;;;:6;:19;;;;;:26;:30;;22045:45;22041:108;;;22107:30;22125:11;22107:17;:30::i;:::-;-1:-1:-1;;;;;22189:19:0;;;;;;:6;:19;;;;;:26;22173:11;;:55;;22221:6;;22173:43;;:15;:43::i;:::-;:47;;:55::i;:::-;22159:11;:69;-1:-1:-1;;;;;22239:19:0;;;;;;:6;:19;;;;;:35;;;22321:74;22268:6;22321:22;:74::i;11615:548::-;-1:-1:-1;;;;;11753:20:0;;11745:70;;;;-1:-1:-1;;;11745:70:0;;9695:2:1;11745:70:0;;;9677:21:1;9734:2;9714:18;;;9707:30;9773:34;9753:18;;;9746:62;-1:-1:-1;;;9824:18:1;;;9817:35;9869:19;;11745:70:0;9493:401:1;11745:70:0;-1:-1:-1;;;;;11834:23:0;;11826:71;;;;-1:-1:-1;;;11826:71:0;;10101:2:1;11826:71:0;;;10083:21:1;10140:2;10120:18;;;10113:30;10179:34;10159:18;;;10152:62;-1:-1:-1;;;10230:18:1;;;10223:33;10273:19;;11826:71:0;9899:399:1;11826:71:0;11947:1;11930:6;:19;11908:110;;;;-1:-1:-1;;;11908:110:0;;10505:2:1;11908:110:0;;;10487:21:1;10544:2;10524:18;;;10517:30;10583:34;10563:18;;;10556:62;-1:-1:-1;;;10634:18:1;;;10627:39;10683:19;;11908:110:0;10303:405:1;11908:110:0;12061:17;12071:6;12061:9;:17::i;:::-;12051:6;:27;;12029:126;;;;-1:-1:-1;;;12029:126:0;;10915:2:1;12029:126:0;;;10897:21:1;10954:2;10934:18;;;10927:30;10993:34;10973:18;;;10966:62;-1:-1:-1;;;11044:18:1;;;11037:47;11101:19;;12029:126:0;10713:413:1;14980:240:0;-1:-1:-1;;;;;15097:19:0;;;;;;:11;:19;;;;;;;;15096:20;:47;;;;-1:-1:-1;;;;;;15121:22:0;;;;;;:11;:22;;;;;;;;15120:23;15096:47;15092:121;;;15168:14;;-1:-1:-1;;;15168:14:0;;;;15160:41;;;;-1:-1:-1;;;15160:41:0;;11333:2:1;15160:41:0;;;11315:21:1;11372:2;11352:18;;;11345:30;-1:-1:-1;;;11391:18:1;;;11384:44;11445:18;;15160:41:0;11131:338:1;15228:489:0;-1:-1:-1;;;;;15381:19:0;;;;;;:11;:19;;;;;;;;15380:20;:60;;;;-1:-1:-1;;;;;;15418:22:0;;;;;;:11;:22;;;;;;;;15417:23;15380:60;:103;;;;-1:-1:-1;15478:4:0;;-1:-1:-1;;;;;15457:26:0;;;15478:4;;15457:26;;15380:103;:146;;;;-1:-1:-1;;;;;;15500:26:0;;8553:42;15500:26;;15380:146;15362:348;;;15617:15;;-1:-1:-1;;;;;15580:20:0;;;;;;:9;:20;;;;;;:32;;15605:6;15580:24;:32::i;:::-;15579:53;;15553:145;;;;-1:-1:-1;;;15553:145:0;;11676:2:1;15553:145:0;;;11658:21:1;11715:2;11695:18;;;11688:30;11754:32;11734:18;;;11727:60;11804:18;;15553:145:0;11474:354:1;15725:185:0;15823:4;;-1:-1:-1;;;;;15810:17:0;;;15823:4;;15810:17;:41;;;;-1:-1:-1;;;;;;15832:19:0;;;;;;:11;:19;;;;;;;;15831:20;15810:41;15806:97;;;15889:1;15868:9;;:23;;;;;;;:::i;:::-;;;;-1:-1:-1;;15725:185:0;;:::o;15918:563::-;16064:4;;-1:-1:-1;;;;;16054:14:0;;;16064:4;;16054:14;16050:241;;16121:14;;16111:6;:24;;:68;;;-1:-1:-1;;;;;;16160:19:0;;;;;;:11;:19;;;;;;;;16111:68;:115;;;-1:-1:-1;;;;;;16204:22:0;;;;;;:11;:22;;;;;;;;16111:115;16085:194;;;;-1:-1:-1;;;16085:194:0;;12035:2:1;16085:194:0;;;12017:21:1;12074:2;12054:18;;;12047:30;-1:-1:-1;;;12093:18:1;;;12086:47;12150:18;;16085:194:0;11833:341:1;16085:194:0;16333:12;;16323:6;:22;;:62;;;-1:-1:-1;;;;;;16366:19:0;;;;;;:11;:19;;;;;;;;16323:62;:105;;;-1:-1:-1;;;;;;16406:22:0;;;;;;:11;:22;;;;;;;;16323:105;16301:172;;;;-1:-1:-1;;;16301:172:0;;12035:2:1;16301:172:0;;;12017:21:1;12074:2;12054:18;;;12047:30;-1:-1:-1;;;12093:18:1;;;12086:47;12150:18;;16301:172:0;11833:341:1;19112:212:0;19189:33;19204:6;19212:9;19189:14;:33::i;:::-;19185:132;;;19239:29;19254:13;;19239:14;:29::i;:::-;19303:1;19283:9;:22;19112:212;;:::o;19332:192::-;-1:-1:-1;;;;;19470:19:0;;19440:4;19470:19;;;:11;:19;;;;;;;;19469:20;:47;;;;-1:-1:-1;;;;;;;19494:22:0;;;;;:11;:22;;;;;;;;19493:23;;19332:192;-1:-1:-1;19332:192:0:o;19955:769::-;20075:7;20132:1;20099:30;20111:6;20119:9;20099:11;:30::i;:::-;:34;20095:598;;;20150:17;20170:91;20216:30;20228:6;20236:9;20216:11;:30::i;:::-;20181:11;;20170:23;;:6;;:10;:23::i;:91::-;20321:4;20303:24;;;;:9;:24;;;;;;20150:111;;-1:-1:-1;20303:39:0;;20150:111;20303:28;:39::i;:::-;20294:4;20276:24;;;;:9;:24;;;;;;;:66;;;;20362:42;;-1:-1:-1;;;;;20362:42:0;;;;;;;20394:9;1682:25:1;;1670:2;1655:18;;1536:177;20362:42:0;;;;;;;;20423:7;;:20;20419:220;;20464:159;20504:4;8553:42;20568:36;20596:7;;20568:23;20579:11;;20568:6;:10;;:23;;;;:::i;:36::-;20464:9;:159::i;:::-;20660:21;:6;20671:9;20660:10;:21::i;:::-;20653:28;;;;;20095:598;-1:-1:-1;20710:6:0;19955:769;-1:-1:-1;;19955:769:0:o;27418:340::-;27534:12;27561:19;;:23;;27583:1;;27561:23;:::i;:::-;27534:61;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;27499:31:0;;;;;:18;:31;;;;;;;27486:45;;27534:61;;;;;27486:45;;;;;;:::i;:::-;;;;;;;;;;;;;:109;;-1:-1:-1;;;;;;27486:109:0;-1:-1:-1;;;;;27486:109:0;;;;;;27690:31;;;;;:18;:31;;;;;;;27652:19;;27690:31;;:18;;27486:45;;27652:23;;-1:-1:-1;;27652:23:0;:::i;:::-;27639:37;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;27639:37:0;27606:81;;;;;;;;;;;;;;;:115;;;;27732:18;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;27732:18:0;;;;;-1:-1:-1;;;;;;27732:18:0;;;;;;-1:-1:-1;27418:340:0:o;18661:443::-;18770:4;18792:19;18842:13;;18814:24;18832:4;18814:9;:24::i;:::-;18887:8;;18814:41;-1:-1:-1;18814:41:0;;-1:-1:-1;18887:8:0;;18886:9;:37;;;;-1:-1:-1;18912:11:0;;;;18886:37;:68;;;;-1:-1:-1;18940:14:0;;-1:-1:-1;;;18940:14:0;;;;18886:68;:105;;;;-1:-1:-1;;;;;;18972:19:0;;;;;;:11;:19;;;;;;;;18971:20;18886:105;:145;;;;-1:-1:-1;;;;;;19009:22:0;;;;;;:11;:22;;;;;;;;19008:23;18886:145;:179;;;;-1:-1:-1;19061:4:0;;-1:-1:-1;;;;;19048:17:0;;;19061:4;;19048:17;18886:179;:210;;;;-1:-1:-1;19082:14:0;18866:230;-1:-1:-1;;;18661:443:0:o;16489:1351::-;7616:4;7605:8;;:15;;;;;;;;;;;;;;;;;;16560:20:::1;16583:138;16719:1;16598:105;16678:10;;16598:57;16640:14;;16598:37;16622:12;;16598:19;16615:1;16598:12;;:16;;:19;;;;:::i;16583:138::-;16560:161;;16732:32;16767:66;16810:12;16767:24;16778:12;;16767:6;:10;;:24;;;;:::i;:66::-;16732:101:::0;-1:-1:-1;16844:14:0::1;16861:36;:6:::0;16732:101;16861:10:::1;:36::i;:::-;16844:53:::0;-1:-1:-1;16933:21:0::1;16965:24;16844:53:::0;16965:16:::1;:24::i;:::-;17000:20;17023:41;:21;17049:14:::0;17023:25:::1;:41::i;:::-;17000:64;;17075:19;17097:48;17114:30;17131:12;;17114;:16;;:30;;;;:::i;:::-;17097:12:::0;;:16:::1;:48::i;:::-;17075:70;;17156:29;17188;17204:12;;17188:11;:15;;:29;;;;:::i;:::-;17156:61:::0;-1:-1:-1;17232:34:0;;17228:128:::1;;17283:61;17296:24;17322:21;17283:12;:61::i;:::-;17415:12;::::0;17366:23:::1;::::0;17392:36:::1;::::0;:18:::1;:11:::0;17408:1:::1;17392:15;:18::i;:36::-;17366:62:::0;-1:-1:-1;17443:19:0;;17439:105:::1;;17479:53;::::0;8743:42:::1;::::0;17479:53;::::1;;;::::0;17516:15;;17479:53:::1;::::0;;;17516:15;8743:42;17479:53;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;17439:105;17601:10;::::0;17554:21:::1;::::0;17578:34:::1;::::0;:18:::1;:11:::0;17594:1:::1;17578:15;:18::i;:34::-;17554:58:::0;-1:-1:-1;17627:17:0;;17623:72:::1;;17661:22;17669:13;17661:7;:22::i;:::-;17709:21;:34:::0;17705:128:::1;;17760:61;::::0;8649:42:::1;::::0;17799:21:::1;17760:61:::0;::::1;;;::::0;::::1;::::0;;;17799:21;8649:42;17760:61;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;17705:128;-1:-1:-1::0;;7643:8:0;:16;;-1:-1:-1;;7643:16:0;;;-1:-1:-1;;;;;;;;16489:1351:0:o;19532:415::-;-1:-1:-1;;;;;19667:13:0;;19638:7;19667:13;;;:5;:13;;;;;;;;;:33;;-1:-1:-1;;;;;;19684:16:0;;;;;;:5;:16;;;;;;;;19667:33;19663:102;;;19724:11;;:29;;19748:3;19724:15;:29::i;:::-;19717:36;;;;19663:102;19792:4;;-1:-1:-1;;;;;19792:4:0;;;19779:17;;;;19775:64;;-1:-1:-1;19820:7:0;;19813:14;;19775:64;19863:4;;-1:-1:-1;;;;;19863:4:0;;;19853:14;;;;19849:62;;-1:-1:-1;19891:8:0;;19884:15;;19849:62;-1:-1:-1;19928:11:0;;19532:415;;;;:::o;18209:444::-;18299:16;;;18313:1;18299:16;;;;;;;;18275:21;;18299:16;;;;;;;;;;-1:-1:-1;18299:16:0;18275:40;;18344:4;18326;18331:1;18326:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;18326:23:0;;;:7;;;;;;;;;;:23;;;;18370:6;;:13;;;-1:-1:-1;;;18370:13:0;;;;:6;;;;;:11;;:13;;;;;18326:7;;18370:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18360:4;18365:1;18360:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;18360:23:0;;;:7;;;;;;;;;:23;18426:6;;18394:53;;18411:4;;18426:6;18435:11;18394:8;:53::i;:::-;18458:6;;:187;;-1:-1:-1;;;18458:187:0;;-1:-1:-1;;;;;18458:6:0;;;;:57;;:187;;18530:11;;18458:6;;18572:4;;18599;;18619:15;;18458:187;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18264:389;18209:444;:::o;17848:353::-;17961:6;;17929:53;;17946:4;;-1:-1:-1;;;;;17961:6:0;17970:11;17929:8;:53::i;:::-;17993:6;;:200;;-1:-1:-1;;;17993:200:0;;18056:4;17993:200;;;14093:34:1;14143:18;;;14136:34;;;17993:6:0;14186:18:1;;;14179:34;;;14229:18;;;14222:34;8837:42:0;14272:19:1;;;14265:44;18167:15:0;14325:19:1;;;14318:35;-1:-1:-1;;;;;17993:6:0;;;;:22;;18023:9;;14027:19:1;;17993:200:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;17848:353;;:::o;22411:943::-;22498:6;;22491:39;;-1:-1:-1;;;22491:39:0;;22524:4;22491:39;;;1864:51:1;22467:21:0;;-1:-1:-1;;;;;22498:6:0;;22491:24;;1837:18:1;;22491:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22565:16;;;22579:1;22565:16;;;;;;;;22467:63;;-1:-1:-1;22541:21:0;;22565:16;;;;;;;;;;-1:-1:-1;;22602:6:0;;:13;;;-1:-1:-1;;;22602:13:0;;;;22541:40;;-1:-1:-1;;;;;;22602:6:0;;;;:11;;-1:-1:-1;22602:13:0;;;;;;;;;;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22592:4;22597:1;22592:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22592:23:0;;;:7;;;;;;;;;:23;22644:6;;22626:7;;22644:6;;;22626:4;;22644:6;;22626:7;;;;;;:::i;:::-;-1:-1:-1;;;;;22626:25:0;;;:7;;;;;;;;;:25;22662:6;;:140;;-1:-1:-1;;;22662:140:0;;:6;;;:57;;22741:9;;22662:140;;:6;;22765:4;;22779;;22786:15;;22662:140;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22843:6:0;;22861:4;;22836:30;;-1:-1:-1;;;22836:30:0;;-1:-1:-1;;;;;22861:4:0;;;22836:30;;;1864:51:1;22813:20:0;;-1:-1:-1;22843:6:0;;;-1:-1:-1;22836:24:0;;-1:-1:-1;1837:18:1;;22836:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22908:6;;22901:39;;-1:-1:-1;;;22901:39:0;;22934:4;22901:39;;;1864:51:1;22813:53:0;;-1:-1:-1;22877:21:0;;-1:-1:-1;;;;;22908:6:0;;;;22901:24;;1837:18:1;;22901:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22877:63;-1:-1:-1;22951:14:0;22968:32;22877:63;22986:13;22968:17;:32::i;:::-;22951:49;-1:-1:-1;23011:21:0;23035:100;23093:31;:13;23111:12;23093:17;:31::i;:::-;23042:6;;23035:39;;-1:-1:-1;;;23035:39:0;;23068:4;23035:39;;;1864:51:1;-1:-1:-1;;;;;23042:6:0;;;;23035:24;;1837:18:1;;23035:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:100::-;23011:124;-1:-1:-1;23163:45:0;23182:25;:6;23011:124;23182:10;:25::i;:::-;23163:14;;;:18;:45::i;:::-;23146:14;:62;23323:11;;23275:31;;23239:107;;23275:60;;:43;;23311:6;23275:35;:43::i;:60::-;23239:17;;;:21;:107::i;:::-;23219:17;:127;-1:-1:-1;;;;;;;22411:943:0:o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;622:70;567:131;:::o;703:315::-;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1215:316::-;1292:6;1300;1308;1361:2;1349:9;1340:7;1336:23;1332:32;1329:52;;;1377:1;1374;1367:12;1329:52;-1:-1:-1;;1400:23:1;;;1470:2;1455:18;;1442:32;;-1:-1:-1;1521:2:1;1506:18;;;1493:32;;1215:316;-1:-1:-1;1215:316:1:o;1926:456::-;2003:6;2011;2019;2072:2;2060:9;2051:7;2047:23;2043:32;2040:52;;;2088:1;2085;2078:12;2040:52;2127:9;2114:23;2146:31;2171:5;2146:31;:::i;:::-;2196:5;-1:-1:-1;2253:2:1;2238:18;;2225:32;2266:33;2225:32;2266:33;:::i;:::-;1926:456;;2318:7;;-1:-1:-1;;;2372:2:1;2357:18;;;;2344:32;;1926:456::o;2387:247::-;2446:6;2499:2;2487:9;2478:7;2474:23;2470:32;2467:52;;;2515:1;2512;2505:12;2467:52;2554:9;2541:23;2573:31;2598:5;2573:31;:::i;2828:118::-;2914:5;2907:13;2900:21;2893:5;2890:32;2880:60;;2936:1;2933;2926:12;2951:382;3016:6;3024;3077:2;3065:9;3056:7;3052:23;3048:32;3045:52;;;3093:1;3090;3083:12;3045:52;3132:9;3119:23;3151:31;3176:5;3151:31;:::i;:::-;3201:5;-1:-1:-1;3258:2:1;3243:18;;3230:32;3271:30;3230:32;3271:30;:::i;:::-;3320:7;3310:17;;;2951:382;;;;;:::o;3338:383::-;3415:6;3423;3431;3484:2;3472:9;3463:7;3459:23;3455:32;3452:52;;;3500:1;3497;3490:12;3452:52;3536:9;3523:23;3513:33;;3596:2;3585:9;3581:18;3568:32;3609:31;3634:5;3609:31;:::i;4050:388::-;4118:6;4126;4179:2;4167:9;4158:7;4154:23;4150:32;4147:52;;;4195:1;4192;4185:12;4147:52;4234:9;4221:23;4253:31;4278:5;4253:31;:::i;:::-;4303:5;-1:-1:-1;4360:2:1;4345:18;;4332:32;4373:33;4332:32;4373:33;:::i;4443:661::-;4565:6;4573;4581;4589;4597;4605;4613;4621;4674:3;4662:9;4653:7;4649:23;4645:33;4642:53;;;4691:1;4688;4681:12;4642:53;-1:-1:-1;;4714:23:1;;;4784:2;4769:18;;4756:32;;-1:-1:-1;4835:2:1;4820:18;;4807:32;;4886:2;4871:18;;4858:32;;-1:-1:-1;4937:3:1;4922:19;;4909:33;;-1:-1:-1;4989:3:1;4974:19;;4961:33;;-1:-1:-1;5041:3:1;5026:19;;5013:33;;-1:-1:-1;5093:3:1;5078:19;5065:33;;-1:-1:-1;4443:661:1;-1:-1:-1;4443:661:1:o;5369:329::-;5571:2;5553:21;;;5610:1;5590:18;;;5583:29;-1:-1:-1;;;5643:2:1;5628:18;;5621:36;5689:2;5674:18;;5369:329::o;5703:127::-;5764:10;5759:3;5755:20;5752:1;5745:31;5795:4;5792:1;5785:15;5819:4;5816:1;5809:15;5835:168;5908:9;;;5939;;5956:15;;;5950:22;;5936:37;5926:71;;5977:18;;:::i;6008:217::-;6048:1;6074;6064:132;;6118:10;6113:3;6109:20;6106:1;6099:31;6153:4;6150:1;6143:15;6181:4;6178:1;6171:15;6064:132;-1:-1:-1;6210:9:1;;6008:217::o;7271:245::-;7338:6;7391:2;7379:9;7370:7;7366:23;7362:32;7359:52;;;7407:1;7404;7397:12;7359:52;7439:9;7433:16;7458:28;7480:5;7458:28;:::i;7521:127::-;7582:10;7577:3;7573:20;7570:1;7563:31;7613:4;7610:1;7603:15;7637:4;7634:1;7627:15;7653:135;7692:3;7713:17;;;7710:43;;7733:18;;:::i;:::-;-1:-1:-1;7780:1:1;7769:13;;7653:135::o;7793:125::-;7858:9;;;7879:10;;;7876:36;;;7892:18;;:::i;9360:128::-;9427:9;;;9448:11;;;9445:37;;;9462:18;;:::i;12179:127::-;12240:10;12235:3;12231:20;12228:1;12221:31;12271:4;12268:1;12261:15;12295:4;12292:1;12285:15;12443:251;12513:6;12566:2;12554:9;12545:7;12541:23;12537:32;12534:52;;;12582:1;12579;12572:12;12534:52;12614:9;12608:16;12633:31;12658:5;12633:31;:::i;12699:461::-;12752:3;12790:5;12784:12;12817:6;12812:3;12805:19;12843:4;12872:2;12867:3;12863:12;12856:19;;12909:2;12902:5;12898:14;12930:1;12940:195;12954:6;12951:1;12948:13;12940:195;;;13019:13;;-1:-1:-1;;;;;13015:39:1;13003:52;;13075:12;;;;13110:15;;;;13051:1;12969:9;12940:195;;;-1:-1:-1;13151:3:1;;12699:461;-1:-1:-1;;;;;12699:461:1:o;13165:582::-;13464:6;13453:9;13446:25;13507:6;13502:2;13491:9;13487:18;13480:34;13550:3;13545:2;13534:9;13530:18;13523:31;13427:4;13571:57;13623:3;13612:9;13608:19;13600:6;13571:57;:::i;:::-;-1:-1:-1;;;;;13664:32:1;;;;13659:2;13644:18;;13637:60;-1:-1:-1;13728:3:1;13713:19;13706:35;13563:65;13165:582;-1:-1:-1;;;13165:582:1:o;14364:306::-;14452:6;14460;14468;14521:2;14509:9;14500:7;14496:23;14492:32;14489:52;;;14537:1;14534;14527:12;14489:52;14566:9;14560:16;14550:26;;14616:2;14605:9;14601:18;14595:25;14585:35;;14660:2;14649:9;14645:18;14639:25;14629:35;;14364:306;;;;;:::o;14675:184::-;14745:6;14798:2;14786:9;14777:7;14773:23;14769:32;14766:52;;;14814:1;14811;14804:12;14766:52;-1:-1:-1;14837:16:1;;14675:184;-1:-1:-1;14675:184:1:o;14864:510::-;15135:6;15124:9;15117:25;15178:3;15173:2;15162:9;15158:18;15151:31;15098:4;15199:57;15251:3;15240:9;15236:19;15228:6;15199:57;:::i;:::-;-1:-1:-1;;;;;15292:32:1;;;;15287:2;15272:18;;15265:60;-1:-1:-1;15356:2:1;15341:18;15334:34;15191:65;14864:510;-1:-1:-1;;14864:510:1:o

Swarm Source

ipfs://aa568104c976e03a32e854eb0ab6555b5f6abb7e46e7cd07b54b3e67aba2e1e7
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.