ETH Price: $1,589.94 (-3.63%)
 

Overview

Max Total Supply

1,000,000,000 KTS

Holders

30

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
15,000,000 KTS

Value
$0.00
0x768da26146cbb01940b68f2bf527329b92b36f2e
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:
Kitties

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**

            ██╗░░██╗██╗████████╗████████╗██╗███████╗░██████╗
            ██║░██╔╝██║╚══██╔══╝╚══██╔══╝██║██╔════╝██╔════╝
            █████═╝░██║░░░██║░░░░░░██║░░░██║█████╗░░╚█████╗░
            ██╔═██╗░██║░░░██║░░░░░░██║░░░██║██╔══╝░░░╚═══██╗
            ██║░╚██╗██║░░░██║░░░░░░██║░░░██║███████╗██████╔╝
            ╚═╝░░╚═╝╚═╝░░░╚═╝░░░░░░╚═╝░░░╚═╝╚══════╝╚═════╝░
social and community services, please visit :

Telegram    : https://t.me/KittiesEth
Twitter     : https://twitter.com/KittiesEth
Website     : https://KittiesEth.com

More informations and marketing please contact us to the email address below: [email protected]
*/

//SPDX-License-Identifier: MIT

pragma solidity ^0.8.13;

/**
 * Standard SafeMath, stripped down to just add/sub/mul/div
 */
library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

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

        return c;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }
}

/**
 * BEP20 standard interface.
 */
interface IBEP20 {
    function totalSupply() 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);
}

/**
 * Allows for contract ownership for multiple adressess
 */
abstract contract Auth {
    address internal owner;
    mapping (address => bool) internal authorizations;

    constructor(address _owner) {
        owner = _owner;
        authorizations[_owner] = true;
    }

    /**
     * Function modifier to require caller to be contract owner
     */
    modifier onlyOwner() {
        require(isOwner(msg.sender), "!OWNER"); _;
    }

    /**
     * Function modifier to require caller to be authorized
     */
    modifier authorized() {
        require(isAuthorized(msg.sender), "!AUTHORIZED"); _;
    }

    /**
     * Authorize address. Owner only
     */
    function authorize(address account) public onlyOwner {
        authorizations[account] = true;
    }

    /**
     * Remove address authorization. Owner only
     */
    function unauthorize(address account) public onlyOwner {
        authorizations[account] = false;
    }

    /**
     * Check if address is owner
     */
    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

    /**
     * Return address authorization status
     */
    function isAuthorized(address account) public view returns (bool) {
        return authorizations[account];
    }

    /**
     * Transfer ownership to new address. Caller must be owner. Leaves old owner authorized
     */
    function transferOwnership(address payable account) public onlyOwner {
        owner = account;
        authorizations[account] = true;
        emit OwnershipTransferred(account);
    }

    event OwnershipTransferred(address owner);
}

/* Standard IDEXFactory */
interface IDEXFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

/* Standard IDEXRouter */
interface IDEXRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);

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

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

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

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

/* Interface for the DividendDistributor */
interface IDividendDistributor {
    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external;
    function setRewardToken (IBEP20 _ETHautoLP) external;
    function setShare(address shareholder, uint256 amount) external;
    function deposit() external payable;
    function process(uint256 gas) external;
}

/* Our DividendDistributor contract responsible for distributing the earn token */
contract DividendDistributor is IDividendDistributor {
    using SafeMath for uint256;

    address _token;

    struct Share {
        uint256 amount;
        uint256 totalExcluded;
        uint256 totalRealised;
    }

    // EARN
    IBEP20 public ETHautoLP = IBEP20(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2); //WETH
    address WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
    IDEXRouter router;

    address[] shareholders;
    mapping (address => uint256) shareholderIndexes;
    mapping (address => uint256) shareholderClaims;

    mapping (address => Share) public shares;

    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed;
    uint256 public dividendsPerShare;
    uint256 public dividendsPerShareAccuracyFactor = 10 ** 36;

    uint256 public minPeriod = 60 * 60;
    uint256 public minDistribution = 1 * (10 ** 12);

    uint256 currentIndex;

    bool initialized;
    modifier initialization() {
        require(!initialized);
        _;
        initialized = true;
    }

    modifier onlyToken() {
        require(msg.sender == _token); _;
    }

    constructor (address _router) {
        router = _router != address(0)
            ? IDEXRouter(_router)
            : IDEXRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _token = msg.sender;
    }

    //New function to set the Reward
    function setRewardToken (IBEP20 _ETHautoLP) external override onlyToken {
        ETHautoLP = IBEP20(_ETHautoLP);
    }

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external override onlyToken {
        minPeriod = _minPeriod;
        minDistribution = _minDistribution;
    }

    function setShare(address shareholder, uint256 amount) external override onlyToken {
        if(shares[shareholder].amount > 0){
            distributeDividend(shareholder);
        }

        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() external payable override onlyToken {
        uint256 balanceBefore = ETHautoLP.balanceOf(address(this));

        address[] memory path = new address[](2);
        path[0] = WETH;
        path[1] = address(ETHautoLP);

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: msg.value}(
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amount = ETHautoLP.balanceOf(address(this)).sub(balanceBefore);

        totalDividends = totalDividends.add(amount);
        dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares));
    }

    function process(uint256 gas) external override onlyToken {
        uint256 shareholderCount = shareholders.length;

        if(shareholderCount == 0) { return; }

        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();

        uint256 iterations = 0;

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

    function distributeDividend(address shareholder) internal {
        if(shares[shareholder].amount == 0){ return; }

        uint256 amount = getUnpaidEarnings(shareholder);
        if(amount > 0){
            totalDistributed = totalDistributed.add(amount);
            ETHautoLP.transfer(shareholder, amount);
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
        }
    }
    
    function claimAutoStake(address shareholder) external onlyToken{
        distributeDividend(shareholder);
    }

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

/* Token contract */
contract Kitties is IBEP20, Auth {
    using SafeMath for uint256;

    // Addresses
    address ETHautoLP = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; // WETH
    address WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;
    

    address TOKENDISTRIBUTOR;

    // These are owner by default
    address public autoLiquidityReceiver;
    address public marketingFeeReceiver;
    address public GameDevelopmentFeeReceiver;
    // Name and symbol
    string constant _name = "KITTIES";
    string constant _symbol = "KTS";
    uint8 constant _decimals = 18;

    // Total supply
    uint256 _totalSupply = 1000000000 * (10 ** _decimals);

    // Max wallet and TX
    uint256 public _maxBuyTxAmount = _totalSupply * 200 / 10000; // 2%
    uint256 public _maxSellTxAmount = _totalSupply * 200 / 10000; // 2%
    uint256 public _maxWalletToken = ( _totalSupply * 200 ) / 10000; // 2%

    // Mappings
    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) _allowances;
    mapping (address => bool) isFeeExempt;
    mapping (address => bool) isTxLimitExempt;
    mapping (address => bool) isTimelockExempt;
    mapping (address => bool) isDividendExempt;

    // Buy Fees
    uint256 liquidityFeeBuy = 400;
    uint256 GameDevelopmentFeeBuy = 900;
    uint256 CashPrizePoolFeeBuy = 400;
    uint256 marketingFeeBuy = 500;
    uint256 totalFeeBuy = 2500;      

    // Sell fees
    uint256 liquidityFeeSell = 400;
    uint256 GameDevelopmentFeeSell = 900;
    uint256 CashPrizePoolFeeSell = 100;
    uint256 marketingFeeSell = 500;
    uint256 totalFeeSell = 2500;

    // Fee variables
    uint256 liquidityFee;
    uint256 GameDevelopmentFee;
    uint256 CashPrizePoolFee;
    uint256 marketingFee;
    uint256 totalFee;
    uint256 feeDenominator = 10000;

    // Sell amount of tokens when a sell takes place
    uint256 public swapThreshold = _totalSupply * 20 / 10000; // 0.2% of supply

    // Liquidity
    uint256 targetLiquidity = 40;
    uint256 targetLiquidityDenominator = 100;

    DividendDistributor distributor;
    uint256 distributorGas = 500000;

    // Cooldown & timer functionality
    // NOTE: Solidity uses Unix timestamp so 1 is 1 second.
    bool public buyCooldownEnabled = true;
    uint8 public cooldownTimerInterval = 5;
    mapping (address => uint) private cooldownTimer;

    // Other variables
    IDEXRouter public router;
    address public pair;
    uint256 public launchedAt;
    bool public tradingOpen = false;
    bool public swapEnabled = true;
    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }

    /* Token constructor */
    constructor () Auth(msg.sender) {
        router = IDEXRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        pair = IDEXFactory(router.factory()).createPair(WETH, address(this));
        _allowances[address(this)][address(router)] = type(uint256).max;

        distributor = new DividendDistributor(address(router));
        
        // Should be the owner wallet/token distributor
        TOKENDISTRIBUTOR = msg.sender;
        address _presaler = msg.sender;
        isFeeExempt[_presaler] = true;
        isTxLimitExempt[_presaler] = true;
        
        // No timelock for these people
        isTimelockExempt[msg.sender] = true;
        isTimelockExempt[DEAD] = true;
        isTimelockExempt[address(this)] = true;
       
        
        // Exempt from dividend
        isDividendExempt[pair] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[DEAD] = true;

        // Set the marketing and liq receiver to the owner as default
        autoLiquidityReceiver = msg.sender;
        marketingFeeReceiver = 0x5e93E3Ff29e14860aAcdD0813fBB2C41631873A6;
        GameDevelopmentFeeReceiver = 0x0bb24aa420249790B8A259b128bdAF2bc156B012;

        _balances[_presaler] = _totalSupply;
        emit Transfer(address(0), _presaler, _totalSupply);
    }

    receive() external payable { }

    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return owner; }
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

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

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

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

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if(_allowances[sender][msg.sender] != type(uint256).max){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance");
        }

        return _transferFrom(sender, recipient, amount);
    }

    // setting the max wallet in percentages
    // NOTE: 1% = 100
     function setMaxWalletPercent(uint256 maxWallPercent) external onlyOwner() {
        _maxWalletToken = _totalSupply.mul(maxWallPercent).div(10000);

    }

    // Set the tokendistributor, exempt for everything and able to SEND before launch.
    function setTokenDistributor(address _tokenDistributor) external authorized{
        TOKENDISTRIBUTOR = _tokenDistributor;
        isFeeExempt[_tokenDistributor] = true;
        isTxLimitExempt[_tokenDistributor] = true;
        isTimelockExempt[_tokenDistributor] = true;
    }

    // Main transfer function
    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        if(inSwap){ return _basicTransfer(sender, recipient, amount); }

        // Check if trading is enabled
        if(!authorizations[sender] && !authorizations[recipient] && TOKENDISTRIBUTOR != sender){
            require(tradingOpen,"Trading not enabled yet");
        }

        // Check if buying or selling
        bool isSell = recipient == pair; 

        // Set buy or sell fees
        setCorrectFees(isSell);

        // Check max wallet
        checkMaxWallet(sender, recipient, amount);
   
        // Buycooldown 
        checkBuyCooldown(sender, recipient);

        // Checks maxTx
        checkTxLimit(sender, amount, recipient, isSell);

        // Check if we should do the swapback
        if(shouldSwapBack()){ swapBack(); }

        //Exchange tokens
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

        uint256 amountReceived = shouldTakeFee(sender) ? takeFee(sender, amount) : amount;
        _balances[recipient] = _balances[recipient].add(amountReceived);

        // Dividend tracker
        if(!isDividendExempt[sender]) {
            try distributor.setShare(sender, _balances[sender]) {} catch {}
        }

        if(!isDividendExempt[recipient]) {
            try distributor.setShare(recipient, _balances[recipient]) {} catch {} 
        }

        try distributor.process(distributorGas) {} catch {}

        emit Transfer(sender, recipient, amountReceived);
        return true;
    }

    // Do a normal transfer
    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    // Set the correct fees for buying or selling
    function setCorrectFees(bool isSell) internal {
        if(isSell){
            liquidityFee = liquidityFeeSell;
            GameDevelopmentFee = GameDevelopmentFeeSell;
            CashPrizePoolFee = CashPrizePoolFeeSell;
            marketingFee = marketingFeeSell;
            totalFee = totalFeeSell;
        } else {
            liquidityFee = liquidityFeeBuy;
            GameDevelopmentFee = GameDevelopmentFeeBuy;
            CashPrizePoolFee = CashPrizePoolFeeBuy;
            marketingFee = marketingFeeBuy;
            totalFee = totalFeeBuy;
        }
    }

    // Check for maxTX
    function checkTxLimit(address sender, uint256 amount, address recipient, bool isSell) internal view {
        if (recipient != owner){
            if(isSell){
                require(amount <= _maxSellTxAmount || isTxLimitExempt[sender] || isTxLimitExempt[recipient], "TX Limit Exceeded");
            } else {
                require(amount <= _maxBuyTxAmount || isTxLimitExempt[sender] || isTxLimitExempt[recipient], "TX Limit Exceeded");
            }
        }
    }

    // Check buy cooldown
    function checkBuyCooldown(address sender, address recipient) internal {
        if (sender == pair &&
            buyCooldownEnabled &&
            !isTimelockExempt[recipient]) {
            require(cooldownTimer[recipient] < block.timestamp,"Please wait between two buys");
            cooldownTimer[recipient] = block.timestamp + cooldownTimerInterval;
        }
    }

    // Check maxWallet
    function checkMaxWallet(address sender, address recipient, uint256 amount) internal view {
        if (!authorizations[sender] && !isTxLimitExempt[sender] && !isTxLimitExempt[recipient] && recipient != owner && recipient != address(this)  && recipient != address(DEAD) && recipient != pair && recipient != marketingFeeReceiver && recipient != autoLiquidityReceiver && recipient != GameDevelopmentFeeReceiver){
            uint256 heldTokens = balanceOf(recipient);
            require((heldTokens + amount) <= _maxWalletToken,"Total Holding is currently limited, you can not buy that much.");
        }
    }

    // Check if sender is not feeExempt
    function shouldTakeFee(address sender) internal view returns (bool) {
        return !isFeeExempt[sender];
    }

    // Take the normal total Fee
    function takeFee(address sender, uint256 amount) internal returns (uint256) {
        uint256 feeAmount = amount.mul(totalFee).div(feeDenominator);

        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);

        return amount.sub(feeAmount);
    }

    // Check if we should sell tokens
    function shouldSwapBack() internal view returns (bool) {
        return msg.sender != pair
        && !inSwap
        && swapEnabled
        && _balances[address(this)] >= swapThreshold;
    }

    // switch Trading
    function tradingStatus(bool _status) public onlyOwner {
        tradingOpen = _status;
    }

    // Enable cooldown between trades
    function cooldownEnabled(bool _status, uint8 _interval) public onlyOwner {
        buyCooldownEnabled = _status;
        cooldownTimerInterval = _interval;
    }

    // Main swapback to sell tokens for WETH
    function swapBack() internal swapping {
        uint256 dynamicLiquidityFee = isOverLiquified(targetLiquidity, targetLiquidityDenominator) ? 0 : liquidityFee;
        uint256 amountToLiquify = swapThreshold.mul(dynamicLiquidityFee).div(totalFee).div(2);
        uint256 amountToSwap = swapThreshold.sub(amountToLiquify);

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WETH;

        uint256 balanceBefore = address(this).balance;

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );
        uint256 amountWETH = address(this).balance.sub(balanceBefore);
        uint256 totalWETHFee = totalFee.sub(dynamicLiquidityFee.div(2));
        uint256 amountWETHLiquidity = amountWETH.mul(dynamicLiquidityFee).div(totalWETHFee).div(2);
        uint256 amountWETHCashPrizePool = amountWETH.mul(CashPrizePoolFee).div(totalWETHFee);
        uint256 amountWETHMarketing = amountWETH.mul(marketingFee).div(totalWETHFee);
        uint256 amountWETHGameDevelopment = amountWETH.mul(GameDevelopmentFee).div(totalWETHFee); 


        try distributor.deposit{value: amountWETHCashPrizePool}() {} catch {}
        (bool successMarketing, /* bytes memory data */) = payable(marketingFeeReceiver).call{value: amountWETHMarketing, gas: 30000}("");
        (bool successGameDevelopment, /* bytes memory data */) = payable(GameDevelopmentFeeReceiver).call{value: amountWETHGameDevelopment, gas: 30000}(""); 
        require(successMarketing, "marketing receiver rejected ETH transfer");
        require(successGameDevelopment, "GameDevelopment receiver rejected ETH transfer");

        if(amountToLiquify > 0){
            router.addLiquidityETH{value: amountWETHLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                autoLiquidityReceiver,
                block.timestamp
            );
            emit AutoLiquify(amountWETHLiquidity, amountToLiquify);
        }
    }

    // Buy amount of tokens with WETH from the contract
    function buyTokens(uint256 amount, address to) internal swapping {
        address[] memory path = new address[](2);
        path[0] = WETH;
        path[1] = address(this);

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
            0,
            path,
            to,
            block.timestamp
        );
    }


    // Check when the token is launched
    function launched() internal view returns (bool) {
        return launchedAt != 0;
    }

    // Set the launchedAt to token launch
    function launch() internal {
        launchedAt = block.number;
    }

    // Set max buy TX 
    function setBuyTxLimitInPercent(uint256 maxBuyTxPercent) external onlyOwner {
        _maxBuyTxAmount = _totalSupply.mul(maxBuyTxPercent).div(10000);
    }

    // Set max sell TX 
    function setSellTxLimitInPercent(uint256 maxSellTxPercent) external onlyOwner {
        _maxSellTxAmount = _totalSupply.mul(maxSellTxPercent).div(10000);
    }

    // Exempt from dividend
    function setIsDividendExempt(address holder, bool exempt) external authorized {
        require(holder != address(this) && holder != pair);
        isDividendExempt[holder] = exempt;
        if(exempt){
            distributor.setShare(holder, 0);
        }else{
            distributor.setShare(holder, _balances[holder]);
        }
    }

    // Exempt from fee
    function setIsFeeExempt(address holder, bool exempt) external authorized {
        isFeeExempt[holder] = exempt;
    }

    // Exempt from max TX
    function setIsTxLimitExempt(address holder, bool exempt) external authorized {
        isTxLimitExempt[holder] = exempt;
    }

    // Exempt from buy CD
    function setIsTimelockExempt(address holder, bool exempt) external authorized {
        isTimelockExempt[holder] = exempt;
    }

    function setFullWhitelist(address holder, bool exempt) external authorized {
        isTxLimitExempt[holder] = exempt;
        isFeeExempt[holder] = exempt;
        isTimelockExempt[holder] = exempt;
    }


    // Set our buy fees
    function setBuyFees(uint256 _liquidityFeeBuy, uint256 _GameDevelopmentFeeBuy, uint256 _CashPrizePoolFeeBuy, uint256 _marketingFeeBuy, uint256 _feeDenominator) external onlyOwner {
        liquidityFeeBuy = _liquidityFeeBuy;
        GameDevelopmentFeeBuy = _GameDevelopmentFeeBuy;
        CashPrizePoolFeeBuy = _CashPrizePoolFeeBuy;
        marketingFeeBuy = _marketingFeeBuy;
        totalFeeBuy = _liquidityFeeBuy.add(_GameDevelopmentFeeBuy).add(_CashPrizePoolFeeBuy).add(_marketingFeeBuy);
        feeDenominator = _feeDenominator;
    }

    // Set our sell fees
    function setSellFees(uint256 _liquidityFeeSell, uint256 _GameDevelopmentFeeSell, uint256 _CashPrizePoolFeeSell, uint256 _marketingFeeSell, uint256 _feeDenominator) external onlyOwner {
        liquidityFeeSell = _liquidityFeeSell;
        GameDevelopmentFeeSell = _GameDevelopmentFeeSell;
        CashPrizePoolFeeSell = _CashPrizePoolFeeSell;
        marketingFeeSell = _marketingFeeSell;

        totalFeeSell = _liquidityFeeSell.add(_GameDevelopmentFeeSell).add(_CashPrizePoolFeeSell).add(_marketingFeeSell);
        feeDenominator = _feeDenominator;
    }

    // Set the marketing and liquidity receivers
    function setFeeReceivers(address _autoLiquidityReceiver, address _marketingFeeReceiver, address _GameDevelopmentFeeReceiver) external authorized {
        autoLiquidityReceiver = _autoLiquidityReceiver;
        marketingFeeReceiver = _marketingFeeReceiver;
        GameDevelopmentFeeReceiver = _GameDevelopmentFeeReceiver;
    }

    

    // Set swapBack settings
    function setSwapBackSettings(bool _enabled, uint256 _amount) external authorized {
        swapEnabled = _enabled;
        swapThreshold = _totalSupply * _amount / 10000; 
    }

    // Set target liquidity
    function setTargetLiquidity(uint256 _target, uint256 _denominator) external authorized {
        targetLiquidity = _target;
        targetLiquidityDenominator = _denominator;
    }

    // Save spare ETH from CA
    function manualSend() external authorized {
        uint256 contractETHBalance = address(this).balance;
        payable(autoLiquidityReceiver).transfer(contractETHBalance);
    }
    
    // Set criteria for auto distribution
    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external authorized {
        distributor.setDistributionCriteria(_minPeriod, _minDistribution);
    }
    
    // Let people claim there stake
    function claimAutoStake() external {
        distributor.claimAutoStake(msg.sender);
    }

    //New function to set the Reward
    function setRewardToken(IBEP20 _ETHautoLP) external authorized {
        distributor.setRewardToken(_ETHautoLP);
    }
    
    // Check how much earnings are unpaid
    function getUnpaidEarnings(address shareholder) public view returns (uint256) {
        return distributor.getUnpaidEarnings(shareholder);
    } 

    // Set gas for distributor
    function setDistributorSettings(uint256 gas) external authorized {
        require(gas < 750000);
        distributorGas = gas;
    }
    
    // Get the circulatingSupply
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }

    // Get the liquidity backing
    function getLiquidityBacking(uint256 accuracy) public view returns (uint256) {
        return accuracy.mul(balanceOf(pair).mul(2)).div(getCirculatingSupply());
    }

    // Get if we are over liquified or not
    function isOverLiquified(uint256 target, uint256 accuracy) public view returns (bool) {
        return getLiquidityBacking(accuracy) > target;
    }
    
    event AutoLiquify(uint256 amountWETH, uint256 amountBOG);
    
}

Contract Security Audit

Contract ABI

API
[{"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":"uint256","name":"amountWETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBOG","type":"uint256"}],"name":"AutoLiquify","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":"GameDevelopmentFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxBuyTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxSellTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyCooldownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimAutoStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"},{"internalType":"uint8","name":"_interval","type":"uint8"}],"name":"cooldownEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cooldownTimerInterval","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidityBacking","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":"account","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"isOverLiquified","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":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_GameDevelopmentFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_CashPrizePoolFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_marketingFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBuyTxPercent","type":"uint256"}],"name":"setBuyTxLimitInPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setDistributorSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_marketingFeeReceiver","type":"address"},{"internalType":"address","name":"_GameDevelopmentFeeReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setFullWhitelist","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":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTimelockExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallPercent","type":"uint256"}],"name":"setMaxWalletPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IBEP20","name":"_ETHautoLP","type":"address"}],"name":"setRewardToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFeeSell","type":"uint256"},{"internalType":"uint256","name":"_GameDevelopmentFeeSell","type":"uint256"},{"internalType":"uint256","name":"_CashPrizePoolFeeSell","type":"uint256"},{"internalType":"uint256","name":"_marketingFeeSell","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxSellTxPercent","type":"uint256"}],"name":"setSellTxLimitInPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"setTargetLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenDistributor","type":"address"}],"name":"setTokenDistributor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"tradingStatus","outputs":[],"stateMutability":"nonpayable","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":"account","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600280546001600160a01b031990811673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc290811790925560038054821690921790915560048054821661dead1790556005805490911690556200005e6012600a62000599565b6200006e90633b9aca00620005b1565b600a55612710600a5460c8620000859190620005b1565b620000919190620005d3565b600b55612710600a5460c8620000a89190620005b1565b620000b49190620005d3565b600c55612710600a5460c8620000cb9190620005b1565b620000d79190620005d3565b600d556101906014556103846015556101906016556101f46017556109c4601855610190601955610384601a556064601b556101f4601c556109c4601d55612710602355612710600a5460146200012f9190620005b1565b6200013b9190620005d3565b6024556028602581905560646026556207a12090556029805461050161ffff1991821617909155602e80549091166101001790553480156200017c57600080fd5b5060008054336001600160a01b031991821681178355825260016020818152604093849020805460ff1916909217909155602b8054737a250d5630b4cf539739df2c5dacb4c659f2488d931683179055825163c45a015560e01b81529251919263c45a015592600480830193928290030181865afa15801562000203573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002299190620005f6565b6003546040516364e329cb60e11b81526001600160a01b03918216600482015230602482015291169063c9c65396906044016020604051808303816000875af11580156200027b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a19190620005f6565b602c80546001600160a01b0319166001600160a01b03928316179055306000908152600f60209081526040808320602b8054861685529252918290206000199055549051911690620002f39062000476565b6001600160a01b039091168152602001604051809103906000f08015801562000320573d6000803e3d6000fd5b50602780546001600160a01b039283166001600160a01b031991821617909155600680548216339081179091556000818152601060209081526040808320805460ff19908116600190811790925560118452828520805482168317905560128452828520805482168317905560048054891686528386208054831684179055308087528487208054841685179055602c548a1687526013865284872080548416851790558652838620805483168417905554909716845281842080549097161790955560078054851684179055600880548516735e93e3ff29e14860aacdd0813fbb2c41631873a617905560098054909416730bb24aa420249790b8a259b128bdaf2bc156b01217909355600a54828252600e84528482208190559351938452909283927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35062000621565b6110d6806200315d83390190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620004db578160001904821115620004bf57620004bf62000484565b80851615620004cd57918102915b93841c93908002906200049f565b509250929050565b600082620004f45750600162000593565b81620005035750600062000593565b81600181146200051c5760028114620005275762000547565b600191505062000593565b60ff8411156200053b576200053b62000484565b50506001821b62000593565b5060208310610133831016604e8410600b84101617156200056c575081810a62000593565b6200057883836200049a565b80600019048211156200058f576200058f62000484565b0290505b92915050565b6000620005aa60ff841683620004e3565b9392505050565b6000816000190483118215151615620005ce57620005ce62000484565b500290565b600082620005f157634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156200060957600080fd5b81516001600160a01b0381168114620005aa57600080fd5b612b2c80620006316000396000f3fe6080604052600436106103545760003560e01c806382bf293c116101c6578063d51ed1c8116100f7578063f2fde38b11610095578063f84ba65d1161006f578063f84ba65d14610a07578063f887ea4014610a27578063fe9fbb8014610a47578063ffb54a9914610a6757600080fd5b8063f2fde38b146109b2578063f4293890146109d2578063f708a64f146109e757600080fd5b8063df20fd49116100d1578063df20fd4914610932578063df4a76c514610952578063e96fada214610972578063f0b37c041461099257600080fd5b8063d51ed1c8146108ac578063d7c01032146108cc578063dd62ed3e146108ec57600080fd5b8063a8aa1b3111610164578063bf56b3711161013e578063bf56b37114610840578063c1cf53c414610856578063ca33e64c14610876578063cf4be3941461089657600080fd5b8063a8aa1b31146107e0578063a9059cbb14610800578063b6a5d7de1461082057600080fd5b806395d89b41116101a057806395d89b411461075f5780639d1944f51461078b578063a409dc14146107ab578063a6b06a27146107c057600080fd5b806382bf293c14610701578063893d20e8146107215780638aee81271461073f57600080fd5b8063313ce567116102a0578063617fe0ed1161023e57806370a082311161021857806370a0823114610676578063722b62ad146106ac57806378109e54146106cb5780637affa29b146106e157600080fd5b8063617fe0ed1461061d578063658d4b7f146106375780636ddd17131461065757600080fd5b80633fd5f2c11161027a5780633fd5f2c11461058557806347a28b79146105bd57806350db71fb146105dd578063571ac8b0146105fd57600080fd5b8063313ce5671461052d578063334773271461054f57806338280e6b1461056557600080fd5b8063201e79911161030d5780632b112e49116102e75780632b112e49146104a95780632d48e896146104be5780632d594567146104de5780632f54bf6e146104fe57600080fd5b8063201e79911461044957806323b872dd1461046957806328fd31981461048957600080fd5b80630445b6671461036057806306fdde0314610389578063095ea7b3146103c25780630d295980146103f25780631161ae391461041457806318160ddd1461043457600080fd5b3661035b57005b600080fd5b34801561036c57600080fd5b5061037660245481565b6040519081526020015b60405180910390f35b34801561039557600080fd5b506040805180820190915260078152664b49545449455360c81b60208201525b60405161038091906126bc565b3480156103ce57600080fd5b506103e26103dd366004612726565b610a81565b6040519015158152602001610380565b3480156103fe57600080fd5b5061041261040d366004612767565b610aee565b005b34801561042057600080fd5b506103e261042f366004612782565b610b34565b34801561044057600080fd5b50600a54610376565b34801561045557600080fd5b50610412610464366004612782565b610b48565b34801561047557600080fd5b506103e26104843660046127a4565b610b78565b34801561049557600080fd5b506103766104a43660046127e5565b610c3a565b3480156104b557600080fd5b50610376610ca9565b3480156104ca57600080fd5b506104126104d9366004612782565b610cfb565b3480156104ea57600080fd5b506104126104f9366004612802565b610d8a565b34801561050a57600080fd5b506103e26105193660046127e5565b6000546001600160a01b0391821691161490565b34801561053957600080fd5b5060125b60405160ff9091168152602001610380565b34801561055b57600080fd5b50610376600b5481565b34801561057157600080fd5b506104126105803660046127e5565b610ddb565b34801561059157600080fd5b506009546105a5906001600160a01b031681565b6040516001600160a01b039091168152602001610380565b3480156105c957600080fd5b506104126105d836600461283f565b610e62565b3480156105e957600080fd5b506104126105f836600461287a565b610ec2565b34801561060957600080fd5b506103e26106183660046127e5565b610f12565b34801561062957600080fd5b506029546103e29060ff1681565b34801561064357600080fd5b5061041261065236600461287a565b610f20565b34801561066357600080fd5b50602e546103e290610100900460ff1681565b34801561068257600080fd5b506103766106913660046127e5565b6001600160a01b03166000908152600e602052604090205490565b3480156106b857600080fd5b5060295461053d90610100900460ff1681565b3480156106d757600080fd5b50610376600d5481565b3480156106ed57600080fd5b506104126106fc3660046128af565b610f70565b34801561070d57600080fd5b5061041261071c3660046128af565b610fc1565b34801561072d57600080fd5b506000546001600160a01b03166105a5565b34801561074b57600080fd5b5061041261075a3660046127e5565b61100c565b34801561076b57600080fd5b506040805180820190915260038152624b545360e81b60208201526103b5565b34801561079757600080fd5b506104126107a63660046128af565b611093565b3480156107b757600080fd5b506104126110cc565b3480156107cc57600080fd5b506104126107db36600461287a565b61112b565b3480156107ec57600080fd5b50602c546105a5906001600160a01b031681565b34801561080c57600080fd5b506103e261081b366004612726565b61119d565b34801561082c57600080fd5b5061041261083b3660046127e5565b6111aa565b34801561084c57600080fd5b50610376602d5481565b34801561086257600080fd5b5061041261087136600461283f565b6111fb565b34801561088257600080fd5b506007546105a5906001600160a01b031681565b3480156108a257600080fd5b50610376600c5481565b3480156108b857600080fd5b506103766108c73660046128af565b611255565b3480156108d857600080fd5b506104126108e73660046128c8565b611293565b3480156108f857600080fd5b50610376610907366004612913565b6001600160a01b039182166000908152600f6020908152604080832093909416825291909152205490565b34801561093e57600080fd5b5061041261094d366004612941565b6112f7565b34801561095e57600080fd5b5061041261096d3660046128af565b611352565b34801561097e57600080fd5b506008546105a5906001600160a01b031681565b34801561099e57600080fd5b506104126109ad3660046127e5565b61139d565b3480156109be57600080fd5b506104126109cd3660046127e5565b6113e8565b3480156109de57600080fd5b5061041261147e565b3480156109f357600080fd5b50610412610a0236600461287a565b6114e1565b348015610a1357600080fd5b50610412610a2236600461287a565b6115e5565b348015610a3357600080fd5b50602b546105a5906001600160a01b031681565b348015610a5357600080fd5b506103e2610a623660046127e5565b611635565b348015610a7357600080fd5b50602e546103e29060ff1681565b336000818152600f602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610adc9086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b03163314610b215760405162461bcd60e51b8152600401610b189061295d565b60405180910390fd5b602e805460ff1916911515919091179055565b600082610b4083611255565b119392505050565b610b5133611635565b610b6d5760405162461bcd60e51b8152600401610b189061297d565b602591909155602655565b6001600160a01b0383166000908152600f6020908152604080832033845290915281205460001914610c25576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600f82528381203382529091529190912054610c00918490611653565b6001600160a01b0385166000908152600f602090815260408083203384529091529020555b610c3084848461168d565b90505b9392505050565b60275460405163051fa63360e31b81526001600160a01b03838116600483015260009216906328fd319890602401602060405180830381865afa158015610c85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae891906129a2565b6005546001600160a01b03166000908152600e6020526040812054610cf6906004546001600160a01b03166000908152600e6020526040902054610cf090600a5490611a5f565b90611a5f565b905090565b610d0433611635565b610d205760405162461bcd60e51b8152600401610b189061297d565b6027546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e896906044015b600060405180830381600087803b158015610d6e57600080fd5b505af1158015610d82573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610db45760405162461bcd60e51b8152600401610b189061295d565b6029805461ffff191692151561ff0019169290921761010060ff9290921691909102179055565b610de433611635565b610e005760405162461bcd60e51b8152600401610b189061297d565b600680546001600160a01b039092166001600160a01b0319909216821790556000908152601060209081526040808320805460ff1990811660019081179092556011845282852080548216831790556012909352922080549091169091179055565b6000546001600160a01b03163314610e8c5760405162461bcd60e51b8152600401610b189061295d565b6014859055601584905560168390556017829055610eb682610eb085818989611aa1565b90611aa1565b60185560235550505050565b610ecb33611635565b610ee75760405162461bcd60e51b8152600401610b189061297d565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b6000610ae882600019610a81565b610f2933611635565b610f455760405162461bcd60e51b8152600401610b189061297d565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610f9a5760405162461bcd60e51b8152600401610b189061295d565b610fbb612710610fb583600a54611b0090919063ffffffff16565b90611b82565b600b5550565b6000546001600160a01b03163314610feb5760405162461bcd60e51b8152600401610b189061295d565b611006612710610fb583600a54611b0090919063ffffffff16565b600d5550565b61101533611635565b6110315760405162461bcd60e51b8152600401610b189061297d565b602754604051638aee812760e01b81526001600160a01b03838116600483015290911690638aee812790602401600060405180830381600087803b15801561107857600080fd5b505af115801561108c573d6000803e3d6000fd5b5050505050565b61109c33611635565b6110b85760405162461bcd60e51b8152600401610b189061297d565b620b71b081106110c757600080fd5b602855565b60275460405163d3a528a160e01b81523360048201526001600160a01b039091169063d3a528a190602401600060405180830381600087803b15801561111157600080fd5b505af1158015611125573d6000803e3d6000fd5b50505050565b61113433611635565b6111505760405162461bcd60e51b8152600401610b189061297d565b6001600160a01b039091166000908152601160209081526040808320805494151560ff19958616811790915560108352818420805486168217905560129092529091208054909216179055565b6000610c3333848461168d565b6000546001600160a01b031633146111d45760405162461bcd60e51b8152600401610b189061295d565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6000546001600160a01b031633146112255760405162461bcd60e51b8152600401610b189061295d565b6019859055601a849055601b839055601c82905561124982610eb085818989611aa1565b601d5560235550505050565b6000610ae8611262610ca9565b602c546001600160a01b03166000908152600e6020526040902054610fb59061128c906002611b00565b8590611b00565b61129c33611635565b6112b85760405162461bcd60e51b8152600401610b189061297d565b600780546001600160a01b039485166001600160a01b031991821617909155600880549385169382169390931790925560098054919093169116179055565b61130033611635565b61131c5760405162461bcd60e51b8152600401610b189061297d565b602e805461ff00191661010084151502179055600a54612710906113419083906129d1565b61134b91906129f0565b6024555050565b6000546001600160a01b0316331461137c5760405162461bcd60e51b8152600401610b189061295d565b611397612710610fb583600a54611b0090919063ffffffff16565b600c5550565b6000546001600160a01b031633146113c75760405162461bcd60e51b8152600401610b189061295d565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6000546001600160a01b031633146114125760405162461bcd60e51b8152600401610b189061295d565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b61148733611635565b6114a35760405162461bcd60e51b8152600401610b189061297d565b60075460405147916001600160a01b03169082156108fc029083906000818181858888f193505050501580156114dd573d6000803e3d6000fd5b5050565b6114ea33611635565b6115065760405162461bcd60e51b8152600401610b189061297d565b6001600160a01b038216301480159061152d5750602c546001600160a01b03838116911614155b61153657600080fd5b6001600160a01b0382166000908152601360205260409020805460ff1916821580159190911790915561159c57602754604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca9690604401610d54565b6027546001600160a01b038381166000818152600e602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401610d54565b6115ee33611635565b61160a5760405162461bcd60e51b8152600401610b189061297d565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526001602052604090205460ff1690565b600081848411156116775760405162461bcd60e51b8152600401610b1891906126bc565b5060006116848486612a12565b95945050505050565b602e5460009062010000900460ff16156116b3576116ac848484611bc4565b9050610c33565b6001600160a01b03841660009081526001602052604090205460ff161580156116f557506001600160a01b03831660009081526001602052604090205460ff16155b801561170f57506006546001600160a01b03858116911614155b1561176657602e5460ff166117665760405162461bcd60e51b815260206004820152601760248201527f54726164696e67206e6f7420656e61626c6564207965740000000000000000006044820152606401610b18565b602c546001600160a01b0384811691161461178081611caa565b61178b858585611cf3565b6117958585611eaf565b6117a185848684611f91565b6117a96120c9565b156117b6576117b6612123565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0388166000908152600e9091529190912054611808918590611653565b6001600160a01b0386166000908152600e6020908152604080832093909355601090529081205460ff161561183d5783611847565b61184786856125e8565b6001600160a01b0386166000908152600e602052604090205490915061186d9082611aa1565b6001600160a01b038087166000908152600e602090815260408083209490945591891681526013909152205460ff16611911576027546001600160a01b038781166000818152600e602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b1580156118fe57600080fd5b505af192505050801561190f575060015b505b6001600160a01b03851660009081526013602052604090205460ff166119a2576027546001600160a01b038681166000818152600e602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b15801561198f57600080fd5b505af19250505080156119a0575060015b505b6027546028546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c479916119da9160040190815260200190565b600060405180830381600087803b1580156119f457600080fd5b505af1925050508015611a05575060015b50846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611a4b91815260200190565b60405180910390a350600195945050505050565b6000610c3383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611653565b600080611aae8385612a29565b905083811015610c335760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b18565b600082600003611b1257506000610ae8565b6000611b1e83856129d1565b905082611b2b85836129f0565b14610c335760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b18565b6000610c3383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061268e565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600e90915291822054611c15918490611653565b6001600160a01b038086166000908152600e60205260408082209390935590851681522054611c449083611aa1565b6001600160a01b038085166000818152600e602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611c989086815260200190565b60405180910390a35060019392505050565b8015611cd157601954601e55601a54601f55601b54602055601c54602155601d5460225550565b601454601e55601554601f556016546020556017546021556018546022555b50565b6001600160a01b03831660009081526001602052604090205460ff16158015611d3557506001600160a01b03831660009081526011602052604090205460ff16155b8015611d5a57506001600160a01b03821660009081526011602052604090205460ff16155b8015611d7457506000546001600160a01b03838116911614155b8015611d8957506001600160a01b0382163014155b8015611da357506004546001600160a01b03838116911614155b8015611dbd5750602c546001600160a01b03838116911614155b8015611dd757506008546001600160a01b03838116911614155b8015611df157506007546001600160a01b03838116911614155b8015611e0b57506009546001600160a01b03838116911614155b15611eaa576001600160a01b0382166000908152600e6020526040902054600d54611e368383612a29565b11156111255760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610b18565b505050565b602c546001600160a01b038381169116148015611ece575060295460ff165b8015611ef357506001600160a01b03811660009081526012602052604090205460ff16155b156114dd576001600160a01b0381166000908152602a60205260409020544211611f5f5760405162461bcd60e51b815260206004820152601c60248201527f506c656173652077616974206265747765656e2074776f2062757973000000006044820152606401610b18565b602954611f7490610100900460ff1642612a29565b6001600160a01b0382166000908152602a60205260409020555050565b6000546001600160a01b0383811691161461112557801561203d57600c5483111580611fd557506001600160a01b03841660009081526011602052604090205460ff165b80611ff857506001600160a01b03821660009081526011602052604090205460ff165b6120385760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b18565b611125565b600b548311158061206657506001600160a01b03841660009081526011602052604090205460ff165b8061208957506001600160a01b03821660009081526011602052604090205460ff165b6111255760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b18565b602c546000906001600160a01b031633148015906120f05750602e5462010000900460ff16155b80156121035750602e54610100900460ff165b8015610cf6575050602454306000908152600e6020526040902054101590565b602e805462ff000019166201000017905560255460265460009161214691610b34565b61215257601e54612155565b60005b905060006121796002610fb5602254610fb586602454611b0090919063ffffffff16565b9050600061219282602454611a5f90919063ffffffff16565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106121cc576121cc612a41565b6001600160a01b0392831660209182029290920101526003548251911690829060019081106121fd576121fd612a41565b6001600160a01b039283166020918202929092010152602b5460405163791ac94760e01b81524792919091169063791ac94790612247908690600090879030904290600401612a57565b600060405180830381600087803b15801561226157600080fd5b505af1158015612275573d6000803e3d6000fd5b50505050600061228e8247611a5f90919063ffffffff16565b905060006122a96122a0886002611b82565b60225490611a5f565b905060006122be6002610fb58481878d611b00565b905060006122db83610fb560205487611b0090919063ffffffff16565b905060006122f884610fb560215488611b0090919063ffffffff16565b9050600061231585610fb5601f5489611b0090919063ffffffff16565b9050602760009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b15801561236757600080fd5b505af193505050508015612379575060015b506008546040516000916001600160a01b03169061753090859084818181858888f193505050503d80600081146123cc576040519150601f19603f3d011682016040523d82523d6000602084013e6123d1565b606091505b50506009546040519192506000916001600160a01b039091169061753090859084818181858888f193505050503d806000811461242a576040519150601f19603f3d011682016040523d82523d6000602084013e61242f565b606091505b50509050816124915760405162461bcd60e51b815260206004820152602860248201527f6d61726b6574696e672072656365697665722072656a656374656420455448206044820152673a3930b739b332b960c11b6064820152608401610b18565b806124f55760405162461bcd60e51b815260206004820152602e60248201527f47616d65446576656c6f706d656e742072656365697665722072656a6563746560448201526d321022aa24103a3930b739b332b960911b6064820152608401610b18565b8b156125cd57602b5460075460405163f305d71960e01b8152306004820152602481018f905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990889060c40160606040518083038185885af115801561256b573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906125909190612ac8565b505060408051888152602081018f90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b5050602e805462ff0000191690555050505050505050505050565b600080612606602354610fb560225486611b0090919063ffffffff16565b306000908152600e60205260409020549091506126239082611aa1565b306000818152600e6020526040908190209290925590516001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906126749085815260200190565b60405180910390a36126868382611a5f565b949350505050565b600081836126af5760405162461bcd60e51b8152600401610b1891906126bc565b50600061168484866129f0565b600060208083528351808285015260005b818110156126e9578581018301518582016040015282016126cd565b818111156126fb576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114611cf057600080fd5b6000806040838503121561273957600080fd5b823561274481612711565b946020939093013593505050565b8035801515811461276257600080fd5b919050565b60006020828403121561277957600080fd5b610c3382612752565b6000806040838503121561279557600080fd5b50508035926020909101359150565b6000806000606084860312156127b957600080fd5b83356127c481612711565b925060208401356127d481612711565b929592945050506040919091013590565b6000602082840312156127f757600080fd5b8135610c3381612711565b6000806040838503121561281557600080fd5b61281e83612752565b9150602083013560ff8116811461283457600080fd5b809150509250929050565b600080600080600060a0868803121561285757600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000806040838503121561288d57600080fd5b823561289881612711565b91506128a660208401612752565b90509250929050565b6000602082840312156128c157600080fd5b5035919050565b6000806000606084860312156128dd57600080fd5b83356128e881612711565b925060208401356128f881612711565b9150604084013561290881612711565b809150509250925092565b6000806040838503121561292657600080fd5b823561293181612711565b9150602083013561283481612711565b6000806040838503121561295457600080fd5b61274483612752565b60208082526006908201526510a7aba722a960d11b604082015260600190565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b6000602082840312156129b457600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156129eb576129eb6129bb565b500290565b600082612a0d57634e487b7160e01b600052601260045260246000fd5b500490565b600082821015612a2457612a246129bb565b500390565b60008219821115612a3c57612a3c6129bb565b500190565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612aa75784516001600160a01b031683529383019391830191600101612a82565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612add57600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212201b7267f549fdedb06bcccbe073f448124d2ad9e2bd016dfd4c2ec8e1742a33a564736f6c634300080d003360806040526001805473c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031991821681179092556002805490911690911790556ec097ce7bc90715b34b9f1000000000600c55610e10600d5564e8d4a51000600e5534801561006857600080fd5b506040516110d63803806110d6833981016040819052610087916100e1565b6001600160a01b0381166100af57737a250d5630b4cf539739df2c5dacb4c659f2488d6100b1565b805b600380546001600160a01b03929092166001600160a01b0319928316179055600080549091163317905550610111565b6000602082840312156100f357600080fd5b81516001600160a01b038116811461010a57600080fd5b9392505050565b610fb6806101206000396000f3fe6080604052600436106100f35760003560e01c8063ce7c2ac21161008a578063efca2eed11610059578063efca2eed1461027a578063fe6e2f3f14610290578063ffb2c479146102c8578063ffd49c84146102e857600080fd5b8063ce7c2ac2146101e5578063d0e30db01461023c578063d3a528a114610244578063e2d2e2191461026457600080fd5b80633a98ef39116100c65780633a98ef39146101835780634fab0ae8146101995780638aee8127146101af578063997664d7146101cf57600080fd5b806311ce023d146100f857806314b6ca961461012157806328fd3198146101435780632d48e89614610163575b600080fd5b34801561010457600080fd5b5061010e600c5481565b6040519081526020015b60405180910390f35b34801561012d57600080fd5b5061014161013c366004610d37565b6102fe565b005b34801561014f57600080fd5b5061010e61015e366004610d63565b610476565b34801561016f57600080fd5b5061014161017e366004610d80565b610501565b34801561018f57600080fd5b5061010e60085481565b3480156101a557600080fd5b5061010e600e5481565b3480156101bb57600080fd5b506101416101ca366004610d63565b610523565b3480156101db57600080fd5b5061010e60095481565b3480156101f157600080fd5b50610221610200366004610d63565b60076020526000908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610118565b61014161055c565b34801561025057600080fd5b5061014161025f366004610d63565b61078b565b34801561027057600080fd5b5061010e600b5481565b34801561028657600080fd5b5061010e600a5481565b34801561029c57600080fd5b506001546102b0906001600160a01b031681565b6040516001600160a01b039091168152602001610118565b3480156102d457600080fd5b506101416102e3366004610da2565b6107ae565b3480156102f457600080fd5b5061010e600d5481565b6000546001600160a01b0316331461031557600080fd5b6001600160a01b0382166000908152600760205260409020541561033c5761033c826108b2565b60008111801561036257506001600160a01b038216600090815260076020526040902054155b156103c857600480546001600160a01b0384166000818152600560205260408120839055600183018455929092527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b03191690911790556103fb565b801580156103ed57506001600160a01b03821660009081526007602052604090205415155b156103fb576103fb826109d0565b6001600160a01b03821660009081526007602052604090205460085461042c91839161042691610ae5565b90610b30565b6008556001600160a01b038216600090815260076020526040902081905561045381610b94565b6001600160a01b0390921660009081526007602052604090206001019190915550565b6001600160a01b038116600090815260076020526040812054810361049d57506000919050565b6001600160a01b0382166000908152600760205260408120546104bf90610b94565b6001600160a01b0384166000908152600760205260409020600101549091508082116104ef575060009392505050565b6104f98282610ae5565b949350505050565b6000546001600160a01b0316331461051857600080fd5b600d91909155600e55565b6000546001600160a01b0316331461053a57600080fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461057357600080fd5b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156105bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e09190610dbb565b6040805160028082526060820183529293506000929091602083019080368337505060025482519293506001600160a01b03169183915060009061062657610626610dd4565b6001600160a01b039283166020918202929092010152600180548351921691839190811061065657610656610dd4565b6001600160a01b03928316602091820292909201015260035460405163b6f9de9560e01b815291169063b6f9de9590349061069c90600090869030904290600401610dea565b6000604051808303818588803b1580156106b557600080fd5b505af11580156106c9573d6000803e3d6000fd5b50506001546040516370a0823160e01b81523060048201526000945061074993508692506001600160a01b03909116906370a0823190602401602060405180830381865afa15801561071f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107439190610dbb565b90610ae5565b6009549091506107599082610b30565b600955600854600c546107839161077a916107749085610bb1565b90610c33565b600b5490610b30565b600b55505050565b6000546001600160a01b031633146107a257600080fd5b6107ab816108b2565b50565b6000546001600160a01b031633146107c557600080fd5b60045460008190036107d5575050565b6000805a905060005b84831080156107ec57508381105b156108ab5783600f5410610800576000600f555b6108326004600f548154811061081857610818610dd4565b6000918252602090912001546001600160a01b0316610c75565b15610869576108696004600f548154811061084f5761084f610dd4565b6000918252602090912001546001600160a01b03166108b2565b61087e6108775a8490610ae5565b8490610b30565b92505a600f8054919350600061089383610e6a565b919050555080806108a390610e6a565b9150506107de565b5050505050565b6001600160a01b03811660009081526007602052604081205490036108d45750565b60006108df82610476565b905080156109cc57600a546108f49082610b30565b600a5560015460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb906044016020604051808303816000875af115801561094a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061096e9190610e83565b506001600160a01b038216600090815260066020908152604080832042905560079091529020600201546109a29082610b30565b6001600160a01b038316600090815260076020526040902060028101919091555461045390610b94565b5050565b600480546109e090600190610ea5565b815481106109f0576109f0610dd4565b60009182526020808320909101546001600160a01b0384811684526005909252604090922054600480549290931692918110610a2e57610a2e610dd4565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260059182905260408120546004805491939291610a7a90600190610ea5565b81548110610a8a57610a8a610dd4565b60009182526020808320909101546001600160a01b031683528201929092526040019020556004805480610ac057610ac0610ebc565b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000610b2783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610cba565b90505b92915050565b600080610b3d8385610ed2565b905083811015610b275760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064015b60405180910390fd5b6000610b2a600c54610774600b5485610bb190919063ffffffff16565b600082600003610bc357506000610b2a565b6000610bcf8385610eea565b905082610bdc8583610f09565b14610b275760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b8b565b6000610b2783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610cf4565b600d546001600160a01b03821660009081526006602052604081205490914291610c9f9190610ed2565b108015610b2a5750600e54610cb383610476565b1192915050565b60008184841115610cde5760405162461bcd60e51b8152600401610b8b9190610f2b565b506000610ceb8486610ea5565b95945050505050565b60008183610d155760405162461bcd60e51b8152600401610b8b9190610f2b565b506000610ceb8486610f09565b6001600160a01b03811681146107ab57600080fd5b60008060408385031215610d4a57600080fd5b8235610d5581610d22565b946020939093013593505050565b600060208284031215610d7557600080fd5b8135610b2781610d22565b60008060408385031215610d9357600080fd5b50508035926020909101359150565b600060208284031215610db457600080fd5b5035919050565b600060208284031215610dcd57600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b600060808201868352602060808185015281875180845260a086019150828901935060005b81811015610e345784516001600160a01b031683529383019391830191600101610e0f565b50506001600160a01b039690961660408501525050506060015292915050565b634e487b7160e01b600052601160045260246000fd5b600060018201610e7c57610e7c610e54565b5060010190565b600060208284031215610e9557600080fd5b81518015158114610b2757600080fd5b600082821015610eb757610eb7610e54565b500390565b634e487b7160e01b600052603160045260246000fd5b60008219821115610ee557610ee5610e54565b500190565b6000816000190483118215151615610f0457610f04610e54565b500290565b600082610f2657634e487b7160e01b600052601260045260246000fd5b500490565b600060208083528351808285015260005b81811015610f5857858101830151858201604001528201610f3c565b81811115610f6a576000604083870101525b50601f01601f191692909201604001939250505056fea2646970667358221220a003cdef9b75bf87905bcecd8ab90be427e3a93970a901b583f7292805b8e7dc64736f6c634300080d0033

Deployed Bytecode

0x6080604052600436106103545760003560e01c806382bf293c116101c6578063d51ed1c8116100f7578063f2fde38b11610095578063f84ba65d1161006f578063f84ba65d14610a07578063f887ea4014610a27578063fe9fbb8014610a47578063ffb54a9914610a6757600080fd5b8063f2fde38b146109b2578063f4293890146109d2578063f708a64f146109e757600080fd5b8063df20fd49116100d1578063df20fd4914610932578063df4a76c514610952578063e96fada214610972578063f0b37c041461099257600080fd5b8063d51ed1c8146108ac578063d7c01032146108cc578063dd62ed3e146108ec57600080fd5b8063a8aa1b3111610164578063bf56b3711161013e578063bf56b37114610840578063c1cf53c414610856578063ca33e64c14610876578063cf4be3941461089657600080fd5b8063a8aa1b31146107e0578063a9059cbb14610800578063b6a5d7de1461082057600080fd5b806395d89b41116101a057806395d89b411461075f5780639d1944f51461078b578063a409dc14146107ab578063a6b06a27146107c057600080fd5b806382bf293c14610701578063893d20e8146107215780638aee81271461073f57600080fd5b8063313ce567116102a0578063617fe0ed1161023e57806370a082311161021857806370a0823114610676578063722b62ad146106ac57806378109e54146106cb5780637affa29b146106e157600080fd5b8063617fe0ed1461061d578063658d4b7f146106375780636ddd17131461065757600080fd5b80633fd5f2c11161027a5780633fd5f2c11461058557806347a28b79146105bd57806350db71fb146105dd578063571ac8b0146105fd57600080fd5b8063313ce5671461052d578063334773271461054f57806338280e6b1461056557600080fd5b8063201e79911161030d5780632b112e49116102e75780632b112e49146104a95780632d48e896146104be5780632d594567146104de5780632f54bf6e146104fe57600080fd5b8063201e79911461044957806323b872dd1461046957806328fd31981461048957600080fd5b80630445b6671461036057806306fdde0314610389578063095ea7b3146103c25780630d295980146103f25780631161ae391461041457806318160ddd1461043457600080fd5b3661035b57005b600080fd5b34801561036c57600080fd5b5061037660245481565b6040519081526020015b60405180910390f35b34801561039557600080fd5b506040805180820190915260078152664b49545449455360c81b60208201525b60405161038091906126bc565b3480156103ce57600080fd5b506103e26103dd366004612726565b610a81565b6040519015158152602001610380565b3480156103fe57600080fd5b5061041261040d366004612767565b610aee565b005b34801561042057600080fd5b506103e261042f366004612782565b610b34565b34801561044057600080fd5b50600a54610376565b34801561045557600080fd5b50610412610464366004612782565b610b48565b34801561047557600080fd5b506103e26104843660046127a4565b610b78565b34801561049557600080fd5b506103766104a43660046127e5565b610c3a565b3480156104b557600080fd5b50610376610ca9565b3480156104ca57600080fd5b506104126104d9366004612782565b610cfb565b3480156104ea57600080fd5b506104126104f9366004612802565b610d8a565b34801561050a57600080fd5b506103e26105193660046127e5565b6000546001600160a01b0391821691161490565b34801561053957600080fd5b5060125b60405160ff9091168152602001610380565b34801561055b57600080fd5b50610376600b5481565b34801561057157600080fd5b506104126105803660046127e5565b610ddb565b34801561059157600080fd5b506009546105a5906001600160a01b031681565b6040516001600160a01b039091168152602001610380565b3480156105c957600080fd5b506104126105d836600461283f565b610e62565b3480156105e957600080fd5b506104126105f836600461287a565b610ec2565b34801561060957600080fd5b506103e26106183660046127e5565b610f12565b34801561062957600080fd5b506029546103e29060ff1681565b34801561064357600080fd5b5061041261065236600461287a565b610f20565b34801561066357600080fd5b50602e546103e290610100900460ff1681565b34801561068257600080fd5b506103766106913660046127e5565b6001600160a01b03166000908152600e602052604090205490565b3480156106b857600080fd5b5060295461053d90610100900460ff1681565b3480156106d757600080fd5b50610376600d5481565b3480156106ed57600080fd5b506104126106fc3660046128af565b610f70565b34801561070d57600080fd5b5061041261071c3660046128af565b610fc1565b34801561072d57600080fd5b506000546001600160a01b03166105a5565b34801561074b57600080fd5b5061041261075a3660046127e5565b61100c565b34801561076b57600080fd5b506040805180820190915260038152624b545360e81b60208201526103b5565b34801561079757600080fd5b506104126107a63660046128af565b611093565b3480156107b757600080fd5b506104126110cc565b3480156107cc57600080fd5b506104126107db36600461287a565b61112b565b3480156107ec57600080fd5b50602c546105a5906001600160a01b031681565b34801561080c57600080fd5b506103e261081b366004612726565b61119d565b34801561082c57600080fd5b5061041261083b3660046127e5565b6111aa565b34801561084c57600080fd5b50610376602d5481565b34801561086257600080fd5b5061041261087136600461283f565b6111fb565b34801561088257600080fd5b506007546105a5906001600160a01b031681565b3480156108a257600080fd5b50610376600c5481565b3480156108b857600080fd5b506103766108c73660046128af565b611255565b3480156108d857600080fd5b506104126108e73660046128c8565b611293565b3480156108f857600080fd5b50610376610907366004612913565b6001600160a01b039182166000908152600f6020908152604080832093909416825291909152205490565b34801561093e57600080fd5b5061041261094d366004612941565b6112f7565b34801561095e57600080fd5b5061041261096d3660046128af565b611352565b34801561097e57600080fd5b506008546105a5906001600160a01b031681565b34801561099e57600080fd5b506104126109ad3660046127e5565b61139d565b3480156109be57600080fd5b506104126109cd3660046127e5565b6113e8565b3480156109de57600080fd5b5061041261147e565b3480156109f357600080fd5b50610412610a0236600461287a565b6114e1565b348015610a1357600080fd5b50610412610a2236600461287a565b6115e5565b348015610a3357600080fd5b50602b546105a5906001600160a01b031681565b348015610a5357600080fd5b506103e2610a623660046127e5565b611635565b348015610a7357600080fd5b50602e546103e29060ff1681565b336000818152600f602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610adc9086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b03163314610b215760405162461bcd60e51b8152600401610b189061295d565b60405180910390fd5b602e805460ff1916911515919091179055565b600082610b4083611255565b119392505050565b610b5133611635565b610b6d5760405162461bcd60e51b8152600401610b189061297d565b602591909155602655565b6001600160a01b0383166000908152600f6020908152604080832033845290915281205460001914610c25576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600f82528381203382529091529190912054610c00918490611653565b6001600160a01b0385166000908152600f602090815260408083203384529091529020555b610c3084848461168d565b90505b9392505050565b60275460405163051fa63360e31b81526001600160a01b03838116600483015260009216906328fd319890602401602060405180830381865afa158015610c85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae891906129a2565b6005546001600160a01b03166000908152600e6020526040812054610cf6906004546001600160a01b03166000908152600e6020526040902054610cf090600a5490611a5f565b90611a5f565b905090565b610d0433611635565b610d205760405162461bcd60e51b8152600401610b189061297d565b6027546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e896906044015b600060405180830381600087803b158015610d6e57600080fd5b505af1158015610d82573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610db45760405162461bcd60e51b8152600401610b189061295d565b6029805461ffff191692151561ff0019169290921761010060ff9290921691909102179055565b610de433611635565b610e005760405162461bcd60e51b8152600401610b189061297d565b600680546001600160a01b039092166001600160a01b0319909216821790556000908152601060209081526040808320805460ff1990811660019081179092556011845282852080548216831790556012909352922080549091169091179055565b6000546001600160a01b03163314610e8c5760405162461bcd60e51b8152600401610b189061295d565b6014859055601584905560168390556017829055610eb682610eb085818989611aa1565b90611aa1565b60185560235550505050565b610ecb33611635565b610ee75760405162461bcd60e51b8152600401610b189061297d565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b6000610ae882600019610a81565b610f2933611635565b610f455760405162461bcd60e51b8152600401610b189061297d565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610f9a5760405162461bcd60e51b8152600401610b189061295d565b610fbb612710610fb583600a54611b0090919063ffffffff16565b90611b82565b600b5550565b6000546001600160a01b03163314610feb5760405162461bcd60e51b8152600401610b189061295d565b611006612710610fb583600a54611b0090919063ffffffff16565b600d5550565b61101533611635565b6110315760405162461bcd60e51b8152600401610b189061297d565b602754604051638aee812760e01b81526001600160a01b03838116600483015290911690638aee812790602401600060405180830381600087803b15801561107857600080fd5b505af115801561108c573d6000803e3d6000fd5b5050505050565b61109c33611635565b6110b85760405162461bcd60e51b8152600401610b189061297d565b620b71b081106110c757600080fd5b602855565b60275460405163d3a528a160e01b81523360048201526001600160a01b039091169063d3a528a190602401600060405180830381600087803b15801561111157600080fd5b505af1158015611125573d6000803e3d6000fd5b50505050565b61113433611635565b6111505760405162461bcd60e51b8152600401610b189061297d565b6001600160a01b039091166000908152601160209081526040808320805494151560ff19958616811790915560108352818420805486168217905560129092529091208054909216179055565b6000610c3333848461168d565b6000546001600160a01b031633146111d45760405162461bcd60e51b8152600401610b189061295d565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6000546001600160a01b031633146112255760405162461bcd60e51b8152600401610b189061295d565b6019859055601a849055601b839055601c82905561124982610eb085818989611aa1565b601d5560235550505050565b6000610ae8611262610ca9565b602c546001600160a01b03166000908152600e6020526040902054610fb59061128c906002611b00565b8590611b00565b61129c33611635565b6112b85760405162461bcd60e51b8152600401610b189061297d565b600780546001600160a01b039485166001600160a01b031991821617909155600880549385169382169390931790925560098054919093169116179055565b61130033611635565b61131c5760405162461bcd60e51b8152600401610b189061297d565b602e805461ff00191661010084151502179055600a54612710906113419083906129d1565b61134b91906129f0565b6024555050565b6000546001600160a01b0316331461137c5760405162461bcd60e51b8152600401610b189061295d565b611397612710610fb583600a54611b0090919063ffffffff16565b600c5550565b6000546001600160a01b031633146113c75760405162461bcd60e51b8152600401610b189061295d565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6000546001600160a01b031633146114125760405162461bcd60e51b8152600401610b189061295d565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b61148733611635565b6114a35760405162461bcd60e51b8152600401610b189061297d565b60075460405147916001600160a01b03169082156108fc029083906000818181858888f193505050501580156114dd573d6000803e3d6000fd5b5050565b6114ea33611635565b6115065760405162461bcd60e51b8152600401610b189061297d565b6001600160a01b038216301480159061152d5750602c546001600160a01b03838116911614155b61153657600080fd5b6001600160a01b0382166000908152601360205260409020805460ff1916821580159190911790915561159c57602754604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca9690604401610d54565b6027546001600160a01b038381166000818152600e602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401610d54565b6115ee33611635565b61160a5760405162461bcd60e51b8152600401610b189061297d565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526001602052604090205460ff1690565b600081848411156116775760405162461bcd60e51b8152600401610b1891906126bc565b5060006116848486612a12565b95945050505050565b602e5460009062010000900460ff16156116b3576116ac848484611bc4565b9050610c33565b6001600160a01b03841660009081526001602052604090205460ff161580156116f557506001600160a01b03831660009081526001602052604090205460ff16155b801561170f57506006546001600160a01b03858116911614155b1561176657602e5460ff166117665760405162461bcd60e51b815260206004820152601760248201527f54726164696e67206e6f7420656e61626c6564207965740000000000000000006044820152606401610b18565b602c546001600160a01b0384811691161461178081611caa565b61178b858585611cf3565b6117958585611eaf565b6117a185848684611f91565b6117a96120c9565b156117b6576117b6612123565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0388166000908152600e9091529190912054611808918590611653565b6001600160a01b0386166000908152600e6020908152604080832093909355601090529081205460ff161561183d5783611847565b61184786856125e8565b6001600160a01b0386166000908152600e602052604090205490915061186d9082611aa1565b6001600160a01b038087166000908152600e602090815260408083209490945591891681526013909152205460ff16611911576027546001600160a01b038781166000818152600e602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b1580156118fe57600080fd5b505af192505050801561190f575060015b505b6001600160a01b03851660009081526013602052604090205460ff166119a2576027546001600160a01b038681166000818152600e602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b15801561198f57600080fd5b505af19250505080156119a0575060015b505b6027546028546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c479916119da9160040190815260200190565b600060405180830381600087803b1580156119f457600080fd5b505af1925050508015611a05575060015b50846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611a4b91815260200190565b60405180910390a350600195945050505050565b6000610c3383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611653565b600080611aae8385612a29565b905083811015610c335760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b18565b600082600003611b1257506000610ae8565b6000611b1e83856129d1565b905082611b2b85836129f0565b14610c335760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b18565b6000610c3383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061268e565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600e90915291822054611c15918490611653565b6001600160a01b038086166000908152600e60205260408082209390935590851681522054611c449083611aa1565b6001600160a01b038085166000818152600e602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611c989086815260200190565b60405180910390a35060019392505050565b8015611cd157601954601e55601a54601f55601b54602055601c54602155601d5460225550565b601454601e55601554601f556016546020556017546021556018546022555b50565b6001600160a01b03831660009081526001602052604090205460ff16158015611d3557506001600160a01b03831660009081526011602052604090205460ff16155b8015611d5a57506001600160a01b03821660009081526011602052604090205460ff16155b8015611d7457506000546001600160a01b03838116911614155b8015611d8957506001600160a01b0382163014155b8015611da357506004546001600160a01b03838116911614155b8015611dbd5750602c546001600160a01b03838116911614155b8015611dd757506008546001600160a01b03838116911614155b8015611df157506007546001600160a01b03838116911614155b8015611e0b57506009546001600160a01b03838116911614155b15611eaa576001600160a01b0382166000908152600e6020526040902054600d54611e368383612a29565b11156111255760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610b18565b505050565b602c546001600160a01b038381169116148015611ece575060295460ff165b8015611ef357506001600160a01b03811660009081526012602052604090205460ff16155b156114dd576001600160a01b0381166000908152602a60205260409020544211611f5f5760405162461bcd60e51b815260206004820152601c60248201527f506c656173652077616974206265747765656e2074776f2062757973000000006044820152606401610b18565b602954611f7490610100900460ff1642612a29565b6001600160a01b0382166000908152602a60205260409020555050565b6000546001600160a01b0383811691161461112557801561203d57600c5483111580611fd557506001600160a01b03841660009081526011602052604090205460ff165b80611ff857506001600160a01b03821660009081526011602052604090205460ff165b6120385760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b18565b611125565b600b548311158061206657506001600160a01b03841660009081526011602052604090205460ff165b8061208957506001600160a01b03821660009081526011602052604090205460ff165b6111255760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b18565b602c546000906001600160a01b031633148015906120f05750602e5462010000900460ff16155b80156121035750602e54610100900460ff165b8015610cf6575050602454306000908152600e6020526040902054101590565b602e805462ff000019166201000017905560255460265460009161214691610b34565b61215257601e54612155565b60005b905060006121796002610fb5602254610fb586602454611b0090919063ffffffff16565b9050600061219282602454611a5f90919063ffffffff16565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106121cc576121cc612a41565b6001600160a01b0392831660209182029290920101526003548251911690829060019081106121fd576121fd612a41565b6001600160a01b039283166020918202929092010152602b5460405163791ac94760e01b81524792919091169063791ac94790612247908690600090879030904290600401612a57565b600060405180830381600087803b15801561226157600080fd5b505af1158015612275573d6000803e3d6000fd5b50505050600061228e8247611a5f90919063ffffffff16565b905060006122a96122a0886002611b82565b60225490611a5f565b905060006122be6002610fb58481878d611b00565b905060006122db83610fb560205487611b0090919063ffffffff16565b905060006122f884610fb560215488611b0090919063ffffffff16565b9050600061231585610fb5601f5489611b0090919063ffffffff16565b9050602760009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b15801561236757600080fd5b505af193505050508015612379575060015b506008546040516000916001600160a01b03169061753090859084818181858888f193505050503d80600081146123cc576040519150601f19603f3d011682016040523d82523d6000602084013e6123d1565b606091505b50506009546040519192506000916001600160a01b039091169061753090859084818181858888f193505050503d806000811461242a576040519150601f19603f3d011682016040523d82523d6000602084013e61242f565b606091505b50509050816124915760405162461bcd60e51b815260206004820152602860248201527f6d61726b6574696e672072656365697665722072656a656374656420455448206044820152673a3930b739b332b960c11b6064820152608401610b18565b806124f55760405162461bcd60e51b815260206004820152602e60248201527f47616d65446576656c6f706d656e742072656365697665722072656a6563746560448201526d321022aa24103a3930b739b332b960911b6064820152608401610b18565b8b156125cd57602b5460075460405163f305d71960e01b8152306004820152602481018f905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990889060c40160606040518083038185885af115801561256b573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906125909190612ac8565b505060408051888152602081018f90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b5050602e805462ff0000191690555050505050505050505050565b600080612606602354610fb560225486611b0090919063ffffffff16565b306000908152600e60205260409020549091506126239082611aa1565b306000818152600e6020526040908190209290925590516001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906126749085815260200190565b60405180910390a36126868382611a5f565b949350505050565b600081836126af5760405162461bcd60e51b8152600401610b1891906126bc565b50600061168484866129f0565b600060208083528351808285015260005b818110156126e9578581018301518582016040015282016126cd565b818111156126fb576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114611cf057600080fd5b6000806040838503121561273957600080fd5b823561274481612711565b946020939093013593505050565b8035801515811461276257600080fd5b919050565b60006020828403121561277957600080fd5b610c3382612752565b6000806040838503121561279557600080fd5b50508035926020909101359150565b6000806000606084860312156127b957600080fd5b83356127c481612711565b925060208401356127d481612711565b929592945050506040919091013590565b6000602082840312156127f757600080fd5b8135610c3381612711565b6000806040838503121561281557600080fd5b61281e83612752565b9150602083013560ff8116811461283457600080fd5b809150509250929050565b600080600080600060a0868803121561285757600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000806040838503121561288d57600080fd5b823561289881612711565b91506128a660208401612752565b90509250929050565b6000602082840312156128c157600080fd5b5035919050565b6000806000606084860312156128dd57600080fd5b83356128e881612711565b925060208401356128f881612711565b9150604084013561290881612711565b809150509250925092565b6000806040838503121561292657600080fd5b823561293181612711565b9150602083013561283481612711565b6000806040838503121561295457600080fd5b61274483612752565b60208082526006908201526510a7aba722a960d11b604082015260600190565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b6000602082840312156129b457600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156129eb576129eb6129bb565b500290565b600082612a0d57634e487b7160e01b600052601260045260246000fd5b500490565b600082821015612a2457612a246129bb565b500390565b60008219821115612a3c57612a3c6129bb565b500190565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612aa75784516001600160a01b031683529383019391830191600101612a82565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612add57600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212201b7267f549fdedb06bcccbe073f448124d2ad9e2bd016dfd4c2ec8e1742a33a564736f6c634300080d0033

Deployed Bytecode Sourcemap

13328:19957:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15373:56;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;15373:56:0;;;;;;;;17815:80;;;;;;;;;;-1:-1:-1;17887:5:0;;;;;;;;;;;;-1:-1:-1;;;17887:5:0;;;;17815:80;;;;;;;:::i;18237:216::-;;;;;;;;;;-1:-1:-1;18237:216:0;;;;;:::i;:::-;;:::i;:::-;;;1419:14:1;;1412:22;1394:41;;1382:2;1367:18;18237:216:0;1254:187:1;24776:94:0;;;;;;;;;;-1:-1:-1;24776:94:0;;;;;:::i;:::-;;:::i;:::-;;33057:150;;;;;;;;;;-1:-1:-1;33057:150:0;;;;;:::i;:::-;;:::i;17545:88::-;;;;;;;;;;-1:-1:-1;17618:12:0;;17545:88;;31282:183;;;;;;;;;;-1:-1:-1;31282:183:0;;;;;:::i;:::-;;:::i;18755:370::-;;;;;;;;;;-1:-1:-1;18755:370:0;;;;;:::i;:::-;;:::i;32285:146::-;;;;;;;;;;-1:-1:-1;32285:146:0;;;;;:::i;:::-;;:::i;32654:142::-;;;;;;;;;;;;;:::i;31740:183::-;;;;;;;;;;-1:-1:-1;31740:183:0;;;;;:::i;:::-;;:::i;24917:164::-;;;;;;;;;;-1:-1:-1;24917:164:0;;;;;:::i;:::-;;:::i;4663:103::-;;;;;;;;;;-1:-1:-1;4663:103:0;;;;;:::i;:::-;4718:4;4753:5;-1:-1:-1;;;;;4742:16:0;;;4753:5;;4742:16;;4663:103;17639:80;;;;;;;;;;-1:-1:-1;14028:2:0;17639:80;;;3276:4:1;3264:17;;;3246:36;;3234:2;3219:18;17639:80:0;3104:184:1;14148:59:0;;;;;;;;;;;;;;;;19455:283;;;;;;;;;;-1:-1:-1;19455:283:0;;;;;:::i;:::-;;:::i;13851:41::-;;;;;;;;;;-1:-1:-1;13851:41:0;;;;-1:-1:-1;;;;;13851:41:0;;;;;;-1:-1:-1;;;;;3457:32:1;;;3439:51;;3427:2;3412:18;13851:41:0;3293:203:1;29483:546:0;;;;;;;;;;-1:-1:-1;29483:546:0;;;;;:::i;:::-;;:::i;29101:130::-;;;;;;;;;;-1:-1:-1;29101:130:0;;;;;:::i;:::-;;:::i;18461:122::-;;;;;;;;;;-1:-1:-1;18461:122:0;;;;;:::i;:::-;;:::i;15736:37::-;;;;;;;;;;-1:-1:-1;15736:37:0;;;;;;;;28783:120;;;;;;;;;;-1:-1:-1;28783:120:0;;;;;:::i;:::-;;:::i;16032:30::-;;;;;;;;;;-1:-1:-1;16032:30:0;;;;;;;;;;;17985:105;;;;;;;;;;-1:-1:-1;17985:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;18069:18:0;18051:7;18069:18;;;:9;:18;;;;;;;17985:105;15780:38;;;;;;;;;;-1:-1:-1;15780:38:0;;;;;;;;;;;14293:63;;;;;;;;;;;;;;;;28016:157;;;;;;;;;;-1:-1:-1;28016:157:0;;;;;:::i;:::-;;:::i;19203:156::-;;;;;;;;;;-1:-1:-1;19203:156:0;;;;;:::i;:::-;;:::i;17901:78::-;;;;;;;;;;-1:-1:-1;17953:7:0;17971:5;-1:-1:-1;;;;;17971:5:0;17901:78;;32110:120;;;;;;;;;;-1:-1:-1;32110:120:0;;;;;:::i;:::-;;:::i;17725:84::-;;;;;;;;;;-1:-1:-1;17799:7:0;;;;;;;;;;;;-1:-1:-1;;;17799:7:0;;;;17725:84;;32472:136;;;;;;;;;;-1:-1:-1;32472:136:0;;;;;:::i;:::-;;:::i;31972:92::-;;;;;;;;;;;;;:::i;29239:209::-;;;;;;;;;;-1:-1:-1;29239:209:0;;;;;:::i;:::-;;:::i;15936:19::-;;;;;;;;;;-1:-1:-1;15936:19:0;;;;-1:-1:-1;;;;;15936:19:0;;;18591:156;;;;;;;;;;-1:-1:-1;18591:156:0;;;;;:::i;:::-;;:::i;4321:102::-;;;;;;;;;;-1:-1:-1;4321:102:0;;;;;:::i;:::-;;:::i;15962:25::-;;;;;;;;;;;;;;;;30063:566;;;;;;;;;;-1:-1:-1;30063:566:0;;;;;:::i;:::-;;:::i;13766:36::-;;;;;;;;;;-1:-1:-1;13766:36:0;;;;-1:-1:-1;;;;;13766:36:0;;;14220:60;;;;;;;;;;;;;;;;32838:167;;;;;;;;;;-1:-1:-1;32838:167:0;;;;;:::i;:::-;;:::i;30687:332::-;;;;;;;;;;-1:-1:-1;30687:332:0;;;;;:::i;:::-;;:::i;18096:133::-;;;;;;;;;;-1:-1:-1;18096:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;18198:19:0;;;18180:7;18198:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;18096:133;31065:180;;;;;;;;;;-1:-1:-1;31065:180:0;;;;;:::i;:::-;;:::i;28206:161::-;;;;;;;;;;-1:-1:-1;28206:161:0;;;;;:::i;:::-;;:::i;13809:35::-;;;;;;;;;;-1:-1:-1;13809:35:0;;;;-1:-1:-1;;;;;13809:35:0;;;4498:105;;;;;;;;;;-1:-1:-1;4498:105:0;;;;;:::i;:::-;;:::i;5070:189::-;;;;;;;;;;-1:-1:-1;5070:189:0;;;;;:::i;:::-;;:::i;31504:181::-;;;;;;;;;;;;;:::i;28404:347::-;;;;;;;;;;-1:-1:-1;28404:347:0;;;;;:::i;:::-;;:::i;28938:128::-;;;;;;;;;;-1:-1:-1;28938:128:0;;;;;:::i;:::-;;:::i;15905:24::-;;;;;;;;;;-1:-1:-1;15905:24:0;;;;-1:-1:-1;;;;;15905:24:0;;;4836:115;;;;;;;;;;-1:-1:-1;4836:115:0;;;;;:::i;:::-;;:::i;15994:31::-;;;;;;;;;;-1:-1:-1;15994:31:0;;;;;;;;18237:216;18341:10;18312:4;18329:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;18329:32:0;;;;;;;;;;:41;;;18386:37;18312:4;;18329:32;;18386:37;;;;18364:6;160:25:1;;148:2;133:18;;14:177;18386:37:0;;;;;;;;-1:-1:-1;18441:4:0;18237:216;;;;;:::o;24776:94::-;4718:4;4753:5;-1:-1:-1;;;;;4753:5:0;4045:10;4742:16;4029:38;;;;-1:-1:-1;;;4029:38:0;;;;;;;:::i;:::-;;;;;;;;;24841:11:::1;:21:::0;;-1:-1:-1;;24841:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24776:94::o;33057:150::-;33137:4;33193:6;33161:29;33181:8;33161:19;:29::i;:::-;:38;;33057:150;-1:-1:-1;;;33057:150:0:o;31282:183::-;4206:24;4219:10;4206:12;:24::i;:::-;4198:48;;;;-1:-1:-1;;;4198:48:0;;;;;;;:::i;:::-;31380:15:::1;:25:::0;;;;31416:26:::1;:41:::0;31282:183::o;18755:370::-;-1:-1:-1;;;;;18875:19:0;;18855:4;18875:19;;;:11;:19;;;;;;;;18895:10;18875:31;;;;;;;;-1:-1:-1;;18875:52:0;18872:186;;18977:69;;;;;;;;;;;-1:-1:-1;;;18977:69:0;;;;;;;;-1:-1:-1;;;;;18977:19:0;;-1:-1:-1;18977:19:0;;;:11;:19;;;;;18997:10;18977:31;;;;;;;;;;:69;;19013:6;;18977:35;:69::i;:::-;-1:-1:-1;;;;;18943:19:0;;;;;;:11;:19;;;;;;;;18963:10;18943:31;;;;;;;:103;18872:186;19077:40;19091:6;19099:9;19110:6;19077:13;:40::i;:::-;19070:47;;18755:370;;;;;;:::o;32285:146::-;32381:11;;:42;;-1:-1:-1;;;32381:42:0;;-1:-1:-1;;;;;3457:32:1;;;32381:42:0;;;3439:51:1;32354:7:0;;32381:11;;:29;;3412:18:1;;32381:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;32654:142::-;32782:4;;-1:-1:-1;;;;;32782:4:0;32707:7;18069:18;;;:9;:18;;;;;;32734:54;;32761:4;;-1:-1:-1;;;;;32761:4:0;18051:7;18069:18;;;:9;:18;;;;;;32734:33;;:12;;;:16;:33::i;:::-;:37;;:54::i;:::-;32727:61;;32654:142;:::o;31740:183::-;4206:24;4219:10;4206:12;:24::i;:::-;4198:48;;;;-1:-1:-1;;;4198:48:0;;;;;;;:::i;:::-;31850:11:::1;::::0;:65:::1;::::0;-1:-1:-1;;;31850:65:0;;::::1;::::0;::::1;7434:25:1::0;;;7475:18;;;7468:34;;;-1:-1:-1;;;;;31850:11:0;;::::1;::::0;:35:::1;::::0;7407:18:1;;31850:65:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;31740:183:::0;;:::o;24917:164::-;4718:4;4753:5;-1:-1:-1;;;;;4753:5:0;4045:10;4742:16;4029:38;;;;-1:-1:-1;;;4029:38:0;;;;;;;:::i;:::-;25001:18:::1;:28:::0;;-1:-1:-1;;25040:33:0;25001:28;::::1;;-1:-1:-1::0;;25040:33:0;;;;;25001:28:::1;;25040:33:::0;;;::::1;::::0;;;::::1;;::::0;;24917:164::o;19455:283::-;4206:24;4219:10;4206:12;:24::i;:::-;4198:48;;;;-1:-1:-1;;;4198:48:0;;;;;;;:::i;:::-;19541:16:::1;:36:::0;;-1:-1:-1;;;;;19541:36:0;;::::1;-1:-1:-1::0;;;;;;19541:36:0;;::::1;::::0;::::1;::::0;;:16:::1;19588:30:::0;;;:11:::1;:30;::::0;;;;;;;:37;;-1:-1:-1;;19588:37:0;;::::1;19541:36:::0;19588:37;;::::1;::::0;;;19636:15:::1;:34:::0;;;;;:41;;;::::1;::::0;::::1;::::0;;19688:16:::1;:35:::0;;;;;:42;;;;::::1;::::0;;::::1;::::0;;19455:283::o;29483:546::-;4718:4;4753:5;-1:-1:-1;;;;;4753:5:0;4045:10;4742:16;4029:38;;;;-1:-1:-1;;;4029:38:0;;;;;;;:::i;:::-;29672:15:::1;:34:::0;;;29717:21:::1;:46:::0;;;29774:19:::1;:42:::0;;;29827:15:::1;:34:::0;;;29886:92:::1;29845:16:::0;29886:70:::1;29796:20:::0;29886:70;29690:16;29741:22;29886:20:::1;:44::i;:::-;:48:::0;::::1;:70::i;:92::-;29872:11;:106:::0;29989:14:::1;:32:::0;-1:-1:-1;;;;29483:546:0:o;29101:130::-;4206:24;4219:10;4206:12;:24::i;:::-;4198:48;;;;-1:-1:-1;;;4198:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29190:24:0;;;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;29190:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29101:130::o;18461:122::-;18516:4;18540:35;18548:7;-1:-1:-1;;18540:7:0;:35::i;28783:120::-;4206:24;4219:10;4206:12;:24::i;:::-;4198:48;;;;-1:-1:-1;;;4198:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28867:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;28867:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28783:120::o;28016:157::-;4718:4;4753:5;-1:-1:-1;;;;;4753:5:0;4045:10;4742:16;4029:38;;;;-1:-1:-1;;;4029:38:0;;;;;;;:::i;:::-;28121:44:::1;28159:5;28121:33;28138:15;28121:12;;:16;;:33;;;;:::i;:::-;:37:::0;::::1;:44::i;:::-;28103:15;:62:::0;-1:-1:-1;28016:157:0:o;19203:156::-;4718:4;4753:5;-1:-1:-1;;;;;4753:5:0;4045:10;4742:16;4029:38;;;;-1:-1:-1;;;4029:38:0;;;;;;;:::i;:::-;19306:43:::1;19343:5;19306:32;19323:14;19306:12;;:16;;:32;;;;:::i;:43::-;19288:15;:61:::0;-1:-1:-1;19203:156:0:o;32110:120::-;4206:24;4219:10;4206:12;:24::i;:::-;4198:48;;;;-1:-1:-1;;;4198:48:0;;;;;;;:::i;:::-;32184:11:::1;::::0;:38:::1;::::0;-1:-1:-1;;;32184:38:0;;-1:-1:-1;;;;;3457:32:1;;;32184:38:0::1;::::0;::::1;3439:51:1::0;32184:11:0;;::::1;::::0;:26:::1;::::0;3412:18:1;;32184:38:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;32110:120:::0;:::o;32472:136::-;4206:24;4219:10;4206:12;:24::i;:::-;4198:48;;;;-1:-1:-1;;;4198:48:0;;;;;;;:::i;:::-;32562:6:::1;32556:3;:12;32548:21;;;::::0;::::1;;32580:14;:20:::0;32472:136::o;31972:92::-;32018:11;;:38;;-1:-1:-1;;;32018:38:0;;32045:10;32018:38;;;3439:51:1;-1:-1:-1;;;;;32018:11:0;;;;:26;;3412:18:1;;32018:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31972:92::o;29239:209::-;4206:24;4219:10;4206:12;:24::i;:::-;4198:48;;;;-1:-1:-1;;;4198:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29325:23:0;;::::1;;::::0;;;:15:::1;:23;::::0;;;;;;;:32;;;::::1;;-1:-1:-1::0;;29325:32:0;;::::1;::::0;::::1;::::0;;;29368:11:::1;:19:::0;;;;;:28;;;::::1;::::0;::::1;::::0;;29407:16:::1;:24:::0;;;;;;:33;;;;::::1;;::::0;;29239:209::o;18591:156::-;18671:4;18695:44;18709:10;18721:9;18732:6;18695:13;:44::i;4321:102::-;4718:4;4753:5;-1:-1:-1;;;;;4753:5:0;4045:10;4742:16;4029:38;;;;-1:-1:-1;;;4029:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4385:23:0::1;;::::0;;;4411:4:::1;4385:23;::::0;;;;;;;:30;;-1:-1:-1;;4385:30:0::1;::::0;;::::1;::::0;;4321:102::o;30063:566::-;4718:4;4753:5;-1:-1:-1;;;;;4753:5:0;4045:10;4742:16;4029:38;;;;-1:-1:-1;;;4029:38:0;;;;;;;:::i;:::-;30257:16:::1;:36:::0;;;30304:22:::1;:48:::0;;;30363:20:::1;:44:::0;;;30418:16:::1;:36:::0;;;30482:96:::1;30437:17:::0;30482:73:::1;30386:21:::0;30482:73;30276:17;30329:23;30482:21:::1;:46::i;:96::-;30467:12;:111:::0;30589:14:::1;:32:::0;-1:-1:-1;;;;30063:566:0:o;32838:167::-;32906:7;32933:64;32974:22;:20;:22::i;:::-;32956:4;;-1:-1:-1;;;;;32956:4:0;18051:7;18069:18;;;:9;:18;;;;;;32933:36;;32946:22;;32966:1;32946:19;:22::i;:::-;32933:8;;:12;:36::i;30687:332::-;4206:24;4219:10;4206:12;:24::i;:::-;4198:48;;;;-1:-1:-1;;;4198:48:0;;;;;;;:::i;:::-;30843:21:::1;:46:::0;;-1:-1:-1;;;;;30843:46:0;;::::1;-1:-1:-1::0;;;;;;30843:46:0;;::::1;;::::0;;;30900:20:::1;:44:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;30955:26:::1;:56:::0;;;;;::::1;::::0;::::1;;::::0;;30687:332::o;31065:180::-;4206:24;4219:10;4206:12;:24::i;:::-;4198:48;;;;-1:-1:-1;;;4198:48:0;;;;;;;:::i;:::-;31157:11:::1;:22:::0;;-1:-1:-1;;31157:22:0::1;;::::0;::::1;;;;::::0;;31206:12:::1;::::0;31231:5:::1;::::0;31206:22:::1;::::0;31221:7;;31206:22:::1;:::i;:::-;:30;;;;:::i;:::-;31190:13;:46:::0;-1:-1:-1;;31065:180:0:o;28206:161::-;4718:4;4753:5;-1:-1:-1;;;;;4753:5:0;4045:10;4742:16;4029:38;;;;-1:-1:-1;;;4029:38:0;;;;;;;:::i;:::-;28314:45:::1;28353:5;28314:34;28331:16;28314:12;;:16;;:34;;;;:::i;:45::-;28295:16;:64:::0;-1:-1:-1;28206:161:0:o;4498:105::-;4718:4;4753:5;-1:-1:-1;;;;;4753:5:0;4045:10;4742:16;4029:38;;;;-1:-1:-1;;;4029:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4564:23:0::1;4590:5;4564:23:::0;;;:14:::1;:23;::::0;;;;:31;;-1:-1:-1;;4564:31:0::1;::::0;;4498:105::o;5070:189::-;4718:4;4753:5;-1:-1:-1;;;;;4753:5:0;4045:10;4742:16;4029:38;;;;-1:-1:-1;;;4029:38:0;;;;;;;:::i;:::-;5150:5:::1;:15:::0;;-1:-1:-1;;;;;;5150:15:0::1;-1:-1:-1::0;;;;;5150:15:0;::::1;::::0;;::::1;::::0;;5176:23;;;-1:-1:-1;5176:23:0::1;::::0;;;;;;;;:30;;-1:-1:-1;;5176:30:0::1;::::0;;::::1;::::0;;;5222:29;;3439:51:1;;;5222:29:0::1;::::0;3412:18:1;5222:29:0::1;;;;;;;5070:189:::0;:::o;31504:181::-;4206:24;4219:10;4206:12;:24::i;:::-;4198:48;;;;-1:-1:-1;;;4198:48:0;;;;;;;:::i;:::-;31626:21:::1;::::0;31618:59:::1;::::0;31586:21:::1;::::0;-1:-1:-1;;;;;31626:21:0::1;::::0;31618:59;::::1;;;::::0;31586:21;;31557:26:::1;31618:59:::0;31557:26;31618:59;31586:21;31626;31618:59;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;31546:139;31504:181::o:0;28404:347::-;4206:24;4219:10;4206:12;:24::i;:::-;4198:48;;;;-1:-1:-1;;;4198:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28501:23:0;::::1;28519:4;28501:23;::::0;::::1;::::0;:41:::1;;-1:-1:-1::0;28538:4:0::1;::::0;-1:-1:-1;;;;;28528:14:0;;::::1;28538:4:::0;::::1;28528:14;;28501:41;28493:50;;;::::0;::::1;;-1:-1:-1::0;;;;;28554:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;28554:33:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;28598:146:::1;;28623:11;::::0;:31:::1;::::0;-1:-1:-1;;;28623:31:0;;-1:-1:-1;;;;;8678:32:1;;;28623:31:0::1;::::0;::::1;8660:51:1::0;28623:11:0::1;8727:18:1::0;;;8720:34;28623:11:0;;::::1;::::0;:20:::1;::::0;8633:18:1;;28623:31:0::1;8478:282:1::0;28598:146:0::1;28685:11;::::0;-1:-1:-1;;;;;28714:17:0;;::::1;28685:11;28714:17:::0;;;:9:::1;:17;::::0;;;;;;;28685:47;;-1:-1:-1;;;28685:47:0;;::::1;::::0;::::1;8660:51:1::0;;;;8727:18;;;8720:34;28685:11:0;::::1;::::0;:20:::1;::::0;8633:18:1;;28685:47:0::1;8478:282:1::0;28938:128:0;4206:24;4219:10;4206:12;:24::i;:::-;4198:48;;;;-1:-1:-1;;;4198:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29026:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;29026:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28938:128::o;4836:115::-;-1:-1:-1;;;;;4920:23:0;4896:4;4920:23;;;:14;:23;;;;;;;;;4836:115::o;1723:192::-;1809:7;1845:12;1837:6;;;;1829:29;;;;-1:-1:-1;;;1829:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1869:9:0;1881:5;1885:1;1881;:5;:::i;:::-;1869:17;1723:192;-1:-1:-1;;;;;1723:192:0:o;19777:1609::-;19889:6;;19869:4;;19889:6;;;;;19886:63;;;19905:41;19920:6;19928:9;19939:6;19905:14;:41::i;:::-;19898:48;;;;19886:63;-1:-1:-1;;;;;20005:22:0;;;;;;:14;:22;;;;;;;;20004:23;:53;;;;-1:-1:-1;;;;;;20032:25:0;;;;;;:14;:25;;;;;;;;20031:26;20004:53;:83;;;;-1:-1:-1;20061:16:0;;-1:-1:-1;;;;;20061:26:0;;;:16;;:26;;20004:83;20001:160;;;20111:11;;;;20103:46;;;;-1:-1:-1;;;20103:46:0;;9376:2:1;20103:46:0;;;9358:21:1;9415:2;9395:18;;;9388:30;9454:25;9434:18;;;9427:53;9497:18;;20103:46:0;9174:347:1;20103:46:0;20239:4;;-1:-1:-1;;;;;20226:17:0;;;20239:4;;20226:17;20290:22;20226:17;20290:14;:22::i;:::-;20354:41;20369:6;20377:9;20388:6;20354:14;:41::i;:::-;20436:35;20453:6;20461:9;20436:16;:35::i;:::-;20509:47;20522:6;20530;20538:9;20549:6;20509:12;:47::i;:::-;20619:16;:14;:16::i;:::-;20616:35;;;20638:10;:8;:10::i;:::-;20710:53;;;;;;;;;;;-1:-1:-1;;;20710:53:0;;;;;;;;-1:-1:-1;;;;;20710:17:0;;-1:-1:-1;20710:17:0;;;:9;:17;;;;;;;;:53;;20732:6;;20710:21;:53::i;:::-;-1:-1:-1;;;;;20690:17:0;;;;;;:9;:17;;;;;;;;:73;;;;24099:11;:19;;;;;;;;24098:20;20801:56;;20851:6;20801:56;;;20825:23;20833:6;20841;20825:7;:23::i;:::-;-1:-1:-1;;;;;20891:20:0;;;;;;:9;:20;;;;;;20776:81;;-1:-1:-1;20891:40:0;;20776:81;20891:24;:40::i;:::-;-1:-1:-1;;;;;20868:20:0;;;;;;;:9;:20;;;;;;;;:63;;;;20977:24;;;;;:16;:24;;;;;;;20973:119;;21022:11;;-1:-1:-1;;;;;21051:17:0;;;21022:11;21051:17;;;:9;:17;;;;;;;;21022:47;;-1:-1:-1;;;21022:47:0;;;;;8660:51:1;;;;8727:18;;;8720:34;21022:11:0;;;:20;;8633:18:1;;21022:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21018:63;;-1:-1:-1;;;;;21108:27:0;;;;;;:16;:27;;;;;;;;21104:129;;21156:11;;-1:-1:-1;;;;;21188:20:0;;;21156:11;21188:20;;;:9;:20;;;;;;;;21156:53;;-1:-1:-1;;;21156:53:0;;;;;8660:51:1;;;;8727:18;;;8720:34;21156:11:0;;;:20;;8633:18:1;;21156:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21152:69;;21249:11;;21269:14;;21249:35;;-1:-1:-1;;;;;;21249:35:0;;-1:-1:-1;;;;;21249:11:0;;;;:19;;:35;;;;160:25:1;;;148:2;133:18;;14:177;21249:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21245:51;21330:9;-1:-1:-1;;;;;21313:43:0;21322:6;-1:-1:-1;;;;;21313:43:0;;21341:14;21313:43;;;;160:25:1;;148:2;133:18;;14:177;21313:43:0;;;;;;;;-1:-1:-1;21374:4:0;;19777:1609;-1:-1:-1;;;;;19777:1609:0:o;1581:136::-;1639:7;1666:43;1670:1;1673;1666:43;;;;;;;;;;;;;;;;;:3;:43::i;1394:181::-;1452:7;;1484:5;1488:1;1484;:5;:::i;:::-;1472:17;;1513:1;1508;:6;;1500:46;;;;-1:-1:-1;;;1500:46:0;;9861:2:1;1500:46:0;;;9843:21:1;9900:2;9880:18;;;9873:30;9939:29;9919:18;;;9912:57;9986:18;;1500:46:0;9659:351:1;1921:250:0;1979:7;2003:1;2008;2003:6;1999:47;;-1:-1:-1;2033:1:0;2026:8;;1999:47;2058:9;2070:5;2074:1;2070;:5;:::i;:::-;2058:17;-1:-1:-1;2103:1:0;2094:5;2098:1;2058:17;2094:5;:::i;:::-;:10;2086:56;;;;-1:-1:-1;;;2086:56:0;;10217:2:1;2086:56:0;;;10199:21:1;10256:2;10236:18;;;10229:30;10295:34;10275:18;;;10268:62;-1:-1:-1;;;10346:18:1;;;10339:31;10387:19;;2086:56:0;10015:397:1;2177:132:0;2235:7;2262:39;2266:1;2269;2262:39;;;;;;;;;;;;;;;;;:3;:39::i;21423:330::-;21553:53;;;;;;;;;;;-1:-1:-1;;;21553:53:0;;;;;;;;-1:-1:-1;;;;;21553:17:0;;21516:4;21553:17;;;:9;:17;;;;;;;:53;;21575:6;;21553:21;:53::i;:::-;-1:-1:-1;;;;;21533:17:0;;;;;;;:9;:17;;;;;;:73;;;;21640:20;;;;;;;:32;;21665:6;21640:24;:32::i;:::-;-1:-1:-1;;;;;21617:20:0;;;;;;;:9;:20;;;;;;;:55;;;;21688:35;;;;;;;;;;21716:6;160:25:1;;148:2;133:18;;14:177;21688:35:0;;;;;;;;-1:-1:-1;21741:4:0;21423:330;;;;;:::o;21812:583::-;21872:6;21869:519;;;21909:16;;21894:12;:31;21961:22;;21940:18;:43;22017:20;;21998:16;:39;22067:16;;22052:12;:31;22109:12;;22098:8;:23;21812:583;:::o;21869:519::-;22169:15;;22154:12;:30;22220:21;;22199:18;:42;22275:19;;22256:16;:38;22324:15;;22309:12;:30;22365:11;;22354:8;:22;21869:519;21812:583;:::o;23350:613::-;-1:-1:-1;;;;;23455:22:0;;;;;;:14;:22;;;;;;;;23454:23;:51;;;;-1:-1:-1;;;;;;23482:23:0;;;;;;:15;:23;;;;;;;;23481:24;23454:51;:82;;;;-1:-1:-1;;;;;;23510:26:0;;;;;;:15;:26;;;;;;;;23509:27;23454:82;:104;;;;-1:-1:-1;23553:5:0;;-1:-1:-1;;;;;23540:18:0;;;23553:5;;23540:18;;23454:104;:134;;;;-1:-1:-1;;;;;;23562:26:0;;23583:4;23562:26;;23454:134;:165;;;;-1:-1:-1;23614:4:0;;-1:-1:-1;;;;;23593:26:0;;;23614:4;;23593:26;;23454:165;:186;;;;-1:-1:-1;23636:4:0;;-1:-1:-1;;;;;23623:17:0;;;23636:4;;23623:17;;23454:186;:223;;;;-1:-1:-1;23657:20:0;;-1:-1:-1;;;;;23644:33:0;;;23657:20;;23644:33;;23454:223;:261;;;;-1:-1:-1;23694:21:0;;-1:-1:-1;;;;;23681:34:0;;;23694:21;;23681:34;;23454:261;:304;;;;-1:-1:-1;23732:26:0;;-1:-1:-1;;;;;23719:39:0;;;23732:26;;23719:39;;23454:304;23450:506;;;-1:-1:-1;;;;;18069:18:0;;23774;18069;;;:9;:18;;;;;;23863:15;;23839:19;23852:6;18069:18;23839:19;:::i;:::-;23838:40;;23830:114;;;;-1:-1:-1;;;23830:114:0;;10619:2:1;23830:114:0;;;10601:21:1;10658:2;10638:18;;;10631:30;10697:34;10677:18;;;10670:62;10768:32;10748:18;;;10741:60;10818:19;;23830:114:0;10417:426:1;23450:506:0;23350:613;;;:::o;22940:378::-;23035:4;;-1:-1:-1;;;;;23025:14:0;;;23035:4;;23025:14;:49;;;;-1:-1:-1;23056:18:0;;;;23025:49;:94;;;;-1:-1:-1;;;;;;23092:27:0;;;;;;:16;:27;;;;;;;;23091:28;23025:94;23021:290;;;-1:-1:-1;;;;;23144:24:0;;;;;;:13;:24;;;;;;23171:15;-1:-1:-1;23136:82:0;;;;-1:-1:-1;;;23136:82:0;;11050:2:1;23136:82:0;;;11032:21:1;11089:2;11069:18;;;11062:30;11128;11108:18;;;11101:58;11176:18;;23136:82:0;10848:352:1;23136:82:0;23278:21;;23260:39;;23278:21;;;;;23260:15;:39;:::i;:::-;-1:-1:-1;;;;;23233:24:0;;;;;;:13;:24;;;;;:66;22940:378;;:::o;22427:478::-;22555:5;;-1:-1:-1;;;;;22542:18:0;;;22555:5;;22542:18;22538:360;;22579:6;22576:311;;;22623:16;;22613:6;:26;;:53;;;-1:-1:-1;;;;;;22643:23:0;;;;;;:15;:23;;;;;;;;22613:53;:83;;;-1:-1:-1;;;;;;22670:26:0;;;;;;:15;:26;;;;;;;;22613:83;22605:113;;;;-1:-1:-1;;;22605:113:0;;11407:2:1;22605:113:0;;;11389:21:1;11446:2;11426:18;;;11419:30;-1:-1:-1;;;11465:18:1;;;11458:47;11522:18;;22605:113:0;11205:341:1;22605:113:0;22576:311;;;22777:15;;22767:6;:25;;:52;;;-1:-1:-1;;;;;;22796:23:0;;;;;;:15;:23;;;;;;;;22767:52;:82;;;-1:-1:-1;;;;;;22823:26:0;;;;;;:15;:26;;;;;;;;22767:82;22759:112;;;;-1:-1:-1;;;22759:112:0;;11407:2:1;22759:112:0;;;11389:21:1;11446:2;11426:18;;;11419:30;-1:-1:-1;;;11465:18:1;;;11458:47;11522:18;;22759:112:0;11205:341:1;24548:197:0;24635:4;;24597;;-1:-1:-1;;;;;24635:4:0;24621:10;:18;;;;:38;;-1:-1:-1;24653:6:0;;;;;;;24652:7;24621:38;:62;;;;-1:-1:-1;24672:11:0;;;;;;;24621:62;:116;;;;-1:-1:-1;;24724:13:0;;24714:4;24696:24;;;;:9;:24;;;;;;:41;;;24548:197::o;25135:2160::-;16109:6;:13;;-1:-1:-1;;16109:13:0;;;;;25230:15:::1;::::0;25247:26:::1;::::0;16109:13;;25214:60:::1;::::0;:15:::1;:60::i;:::-;:79;;25281:12;;25214:79;;;25277:1;25214:79;25184:109;;25304:23;25330:59;25387:1;25330:52;25373:8;;25330:38;25348:19;25330:13;;:17;;:38;;;;:::i;:59::-;25304:85;;25400:20;25423:34;25441:15;25423:13;;:17;;:34;;;;:::i;:::-;25494:16;::::0;;25508:1:::1;25494:16:::0;;;;;::::1;::::0;;25400:57;;-1:-1:-1;25470:21:0::1;::::0;25494:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;25494:16:0::1;25470:40;;25539:4;25521;25526:1;25521:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25521:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;25565:4:::1;::::0;25555:7;;25565:4;::::1;::::0;25555;;25565;;25555:7;::::1;;;;;:::i;:::-;-1:-1:-1::0;;;;;25555:14:0;;::::1;:7;::::0;;::::1;::::0;;;;;:14;25640:6:::1;::::0;:188:::1;::::0;-1:-1:-1;;;25640:188:0;;25606:21:::1;::::0;25640:6;;;::::1;::::0;:57:::1;::::0;:188:::1;::::0;25712:12;;25582:21:::1;::::0;25755:4;;25782::::1;::::0;25802:15:::1;::::0;25640:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;25839:18;25860:40;25886:13;25860:21;:25;;:40;;;;:::i;:::-;25839:61:::0;-1:-1:-1;25911:20:0::1;25934:40;25947:26;:19:::0;25971:1:::1;25947:23;:26::i;:::-;25934:8;::::0;;:12:::1;:40::i;:::-;25911:63:::0;-1:-1:-1;25985:27:0::1;26015:60;26073:1;26015:53;25911:63:::0;26015:53;:10;26030:19;26015:14:::1;:35::i;:60::-;25985:90;;26086:31;26120:50;26157:12;26120:32;26135:16;;26120:10;:14;;:32;;;;:::i;:50::-;26086:84;;26181:27;26211:46;26244:12;26211:28;26226:12;;26211:10;:14;;:28;;;;:::i;:46::-;26181:76;;26268:33;26304:52;26343:12;26304:34;26319:18;;26304:10;:14;;:34;;;;:::i;:52::-;26268:88;;26376:11;;;;;;;;;-1:-1:-1::0;;;;;26376:11:0::1;-1:-1:-1::0;;;;;26376:19:0::1;;26403:23;26376:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;-1:-1:-1::0;26510:20:0::1;::::0;26502:78:::1;::::0;26452:21:::1;::::0;-1:-1:-1;;;;;26510:20:0::1;::::0;26570:5:::1;::::0;26544:19;;26452:21;26502:78;26452:21;26502:78;26544:19;26510:20;26570:5;26502:78:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;26656:26:0::1;::::0;26648:90:::1;::::0;26451:129;;-1:-1:-1;26592:27:0::1;::::0;-1:-1:-1;;;;;26656:26:0;;::::1;::::0;26728:5:::1;::::0;26696:25;;26592:27;26648:90;26592:27;26648:90;26696:25;26656:26;26728:5;26648:90:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26591:147;;;26758:16;26750:69;;;::::0;-1:-1:-1;;;26750:69:0;;13212:2:1;26750:69:0::1;::::0;::::1;13194:21:1::0;13251:2;13231:18;;;13224:30;13290:34;13270:18;;;13263:62;-1:-1:-1;;;13341:18:1;;;13334:38;13389:19;;26750:69:0::1;13010:404:1::0;26750:69:0::1;26838:22;26830:81;;;::::0;-1:-1:-1;;;26830:81:0;;13621:2:1;26830:81:0::1;::::0;::::1;13603:21:1::0;13660:2;13640:18;;;13633:30;13699:34;13679:18;;;13672:62;-1:-1:-1;;;13750:18:1;;;13743:44;13804:19;;26830:81:0::1;13419:410:1::0;26830:81:0::1;26927:19:::0;;26924:364:::1;;26962:6;::::0;27137:21:::1;::::0;26962:245:::1;::::0;-1:-1:-1;;;26962:245:0;;27039:4:::1;26962:245;::::0;::::1;14175:34:1::0;14225:18;;;14218:34;;;26962:6:0::1;14268:18:1::0;;;14261:34;;;14311:18;;;14304:34;-1:-1:-1;;;;;27137:21:0;;::::1;14354:19:1::0;;;14347:44;27177:15:0::1;14407:19:1::0;;;14400:35;26962:6:0;::::1;::::0;:22:::1;::::0;26992:19;;14109::1;;26962:245:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;27227:49:0::1;::::0;;7434:25:1;;;7490:2;7475:18;;7468:34;;;27227:49:0::1;::::0;-1:-1:-1;7407:18:1;27227:49:0::1;;;;;;;26924:364;-1:-1:-1::0;;16127:6:0;:14;;-1:-1:-1;;16127:14:0;;;-1:-1:-1;;;;;;;;;;;25135:2160:0:o;24168:333::-;24235:7;24255:17;24275:40;24300:14;;24275:20;24286:8;;24275:6;:10;;:20;;;;:::i;:40::-;24373:4;24355:24;;;;:9;:24;;;;;;24255:60;;-1:-1:-1;24355:39:0;;24255:60;24355:28;:39::i;:::-;24346:4;24328:24;;;;:9;:24;;;;;;;:66;;;;24410:42;;-1:-1:-1;;;;;24410:42:0;;;;;;;24442:9;160:25:1;;148:2;133:18;;14:177;24410:42:0;;;;;;;;24472:21;:6;24483:9;24472:10;:21::i;:::-;24465:28;24168:333;-1:-1:-1;;;;24168:333:0:o;2315:345::-;2401:7;2503:12;2496:5;2488:28;;;;-1:-1:-1;;;2488:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2527:9:0;2539:5;2543:1;2539;:5;:::i;196:597:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;634:6;631:1;628:13;625:91;;;704:1;699:2;690:6;679:9;675:22;671:31;664:42;625:91;-1:-1:-1;777:2:1;756:15;-1:-1:-1;;752:29:1;737:45;;;;784:2;733:54;;196:597;-1:-1:-1;;;196:597:1:o;798:131::-;-1:-1:-1;;;;;873:31:1;;863:42;;853:70;;919:1;916;909:12;934:315;1002:6;1010;1063:2;1051:9;1042:7;1038:23;1034:32;1031:52;;;1079:1;1076;1069:12;1031:52;1118:9;1105:23;1137:31;1162:5;1137:31;:::i;:::-;1187:5;1239:2;1224:18;;;;1211:32;;-1:-1:-1;;;934:315:1:o;1446:160::-;1511:20;;1567:13;;1560:21;1550:32;;1540:60;;1596:1;1593;1586:12;1540:60;1446:160;;;:::o;1611:180::-;1667:6;1720:2;1708:9;1699:7;1695:23;1691:32;1688:52;;;1736:1;1733;1726:12;1688:52;1759:26;1775:9;1759:26;:::i;1796:248::-;1864:6;1872;1925:2;1913:9;1904:7;1900:23;1896:32;1893:52;;;1941:1;1938;1931:12;1893:52;-1:-1:-1;;1964:23:1;;;2034:2;2019:18;;;2006:32;;-1:-1:-1;1796:248:1:o;2049:456::-;2126:6;2134;2142;2195:2;2183:9;2174:7;2170:23;2166:32;2163:52;;;2211:1;2208;2201:12;2163:52;2250:9;2237:23;2269:31;2294:5;2269:31;:::i;:::-;2319:5;-1:-1:-1;2376:2:1;2361:18;;2348:32;2389:33;2348:32;2389:33;:::i;:::-;2049:456;;2441:7;;-1:-1:-1;;;2495:2:1;2480:18;;;;2467:32;;2049:456::o;2510:247::-;2569:6;2622:2;2610:9;2601:7;2597:23;2593:32;2590:52;;;2638:1;2635;2628:12;2590:52;2677:9;2664:23;2696:31;2721:5;2696:31;:::i;2762:337::-;2825:6;2833;2886:2;2874:9;2865:7;2861:23;2857:32;2854:52;;;2902:1;2899;2892:12;2854:52;2925:26;2941:9;2925:26;:::i;:::-;2915:36;;3001:2;2990:9;2986:18;2973:32;3045:4;3038:5;3034:16;3027:5;3024:27;3014:55;;3065:1;3062;3055:12;3014:55;3088:5;3078:15;;;2762:337;;;;;:::o;3501:454::-;3596:6;3604;3612;3620;3628;3681:3;3669:9;3660:7;3656:23;3652:33;3649:53;;;3698:1;3695;3688:12;3649:53;-1:-1:-1;;3721:23:1;;;3791:2;3776:18;;3763:32;;-1:-1:-1;3842:2:1;3827:18;;3814:32;;3893:2;3878:18;;3865:32;;-1:-1:-1;3944:3:1;3929:19;3916:33;;-1:-1:-1;3501:454:1;-1:-1:-1;3501:454:1:o;3960:315::-;4025:6;4033;4086:2;4074:9;4065:7;4061:23;4057:32;4054:52;;;4102:1;4099;4092:12;4054:52;4141:9;4128:23;4160:31;4185:5;4160:31;:::i;:::-;4210:5;-1:-1:-1;4234:35:1;4265:2;4250:18;;4234:35;:::i;:::-;4224:45;;3960:315;;;;;:::o;4280:180::-;4339:6;4392:2;4380:9;4371:7;4367:23;4363:32;4360:52;;;4408:1;4405;4398:12;4360:52;-1:-1:-1;4431:23:1;;4280:180;-1:-1:-1;4280:180:1:o;4731:529::-;4808:6;4816;4824;4877:2;4865:9;4856:7;4852:23;4848:32;4845:52;;;4893:1;4890;4883:12;4845:52;4932:9;4919:23;4951:31;4976:5;4951:31;:::i;:::-;5001:5;-1:-1:-1;5058:2:1;5043:18;;5030:32;5071:33;5030:32;5071:33;:::i;:::-;5123:7;-1:-1:-1;5182:2:1;5167:18;;5154:32;5195:33;5154:32;5195:33;:::i;:::-;5247:7;5237:17;;;4731:529;;;;;:::o;5265:388::-;5333:6;5341;5394:2;5382:9;5373:7;5369:23;5365:32;5362:52;;;5410:1;5407;5400:12;5362:52;5449:9;5436:23;5468:31;5493:5;5468:31;:::i;:::-;5518:5;-1:-1:-1;5575:2:1;5560:18;;5547:32;5588:33;5547:32;5588:33;:::i;5658:248::-;5723:6;5731;5784:2;5772:9;5763:7;5759:23;5755:32;5752:52;;;5800:1;5797;5790:12;5752:52;5823:26;5839:9;5823:26;:::i;6397:329::-;6599:2;6581:21;;;6638:1;6618:18;;;6611:29;-1:-1:-1;;;6671:2:1;6656:18;;6649:36;6717:2;6702:18;;6397:329::o;6731:335::-;6933:2;6915:21;;;6972:2;6952:18;;;6945:30;-1:-1:-1;;;7006:2:1;6991:18;;6984:41;7057:2;7042:18;;6731:335::o;7071:184::-;7141:6;7194:2;7182:9;7173:7;7169:23;7165:32;7162:52;;;7210:1;7207;7200:12;7162:52;-1:-1:-1;7233:16:1;;7071:184;-1:-1:-1;7071:184:1:o;7735:127::-;7796:10;7791:3;7787:20;7784:1;7777:31;7827:4;7824:1;7817:15;7851:4;7848:1;7841:15;7867:168;7907:7;7973:1;7969;7965:6;7961:14;7958:1;7955:21;7950:1;7943:9;7936:17;7932:45;7929:71;;;7980:18;;:::i;:::-;-1:-1:-1;8020:9:1;;7867:168::o;8040:217::-;8080:1;8106;8096:132;;8150:10;8145:3;8141:20;8138:1;8131:31;8185:4;8182:1;8175:15;8213:4;8210:1;8203:15;8096:132;-1:-1:-1;8242:9:1;;8040:217::o;9044:125::-;9084:4;9112:1;9109;9106:8;9103:34;;;9117:18;;:::i;:::-;-1:-1:-1;9154:9:1;;9044:125::o;9526:128::-;9566:3;9597:1;9593:6;9590:1;9587:13;9584:39;;;9603:18;;:::i;:::-;-1:-1:-1;9639:9:1;;9526:128::o;11683:127::-;11744:10;11739:3;11735:20;11732:1;11725:31;11775:4;11772:1;11765:15;11799:4;11796:1;11789:15;11815:980;12077:4;12125:3;12114:9;12110:19;12156:6;12145:9;12138:25;12182:2;12220:6;12215:2;12204:9;12200:18;12193:34;12263:3;12258:2;12247:9;12243:18;12236:31;12287:6;12322;12316:13;12353:6;12345;12338:22;12391:3;12380:9;12376:19;12369:26;;12430:2;12422:6;12418:15;12404:29;;12451:1;12461:195;12475:6;12472:1;12469:13;12461:195;;;12540:13;;-1:-1:-1;;;;;12536:39:1;12524:52;;12631:15;;;;12596:12;;;;12572:1;12490:9;12461:195;;;-1:-1:-1;;;;;;;12712:32:1;;;;12707:2;12692:18;;12685:60;-1:-1:-1;;;12776:3:1;12761:19;12754:35;12673:3;11815:980;-1:-1:-1;;;11815:980:1:o;14446:306::-;14534:6;14542;14550;14603:2;14591:9;14582:7;14578:23;14574:32;14571:52;;;14619:1;14616;14609:12;14571:52;14648:9;14642:16;14632:26;;14698:2;14687:9;14683:18;14677:25;14667:35;;14742:2;14731:9;14727:18;14721:25;14711:35;;14446:306;;;;;:::o

Swarm Source

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