ETH Price: $2,483.83 (-0.93%)
Gas: 7.96 Gwei

Token

BANK OF X (BANKX)
 

Overview

Max Total Supply

10,000,000 BANKX

Holders

185

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
4,813.423924071 BANKX

Value
$0.00
0x71c7b3c35bb11fc1e12323a6cab25159d74dc61b
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:
BankOfX

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: Unlicensed

pragma solidity 0.8.13;

/*                                     
                                                                                                                 ,&@@@(                  
                                                                                                           %@@@@%                           
     .@@@@@@@@@@@@@@@@@(          @@.           @@@         @@@   #@@@         %@     *@@@@@@         %@@@@@                                  
     @@@@           @@@@          @@@@          @@@@@@/    @@@@   #@@@     @@@@&          %@@@@ .@@@@@@                                       
     @@@@ .@@@@@@@@@@@@@            @@@@        @@@( @@@@@ @@@@   #@@@@@@@@*                @@@@@@& /                                         
     @@@@           @@@@    @@@@@@@@@@@@@@      @@@/    &@@@@@@   %@@@    @@@@@@.       *@@@@@@   @@@@@@*                                     
     @@@@@@@@@@@@@@@@@@                .@@@@    @@@*        @@@   %@@@          @@   *@@@@@@          @@@@@@.


bankofx.xyz
*/
                                

/**
 * 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;
    }
}

/**
 * ERC20 standard interface.
 */
interface IERC20 {
    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);
}

abstract contract Auth {
    address internal owner;

    constructor(address _owner) {
        owner = _owner;
    }

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

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

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

    event OwnershipTransferred(address owner);
}

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

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 IDividendDistributor {
    function setRewardToken(address newRewardToken) external;
    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external;
    function setShare(address shareholder, uint256 amount) external;
    function deposit(uint256 amount) external;
    function claimDividend(address shareholder) external;
    function getDividendsClaimedOf (address shareholder) external returns (uint256);
    function process(uint256 gas) external;
}

contract DividendDistributor is IDividendDistributor {
    using SafeMath for uint256;

    address public _token;
    address public _owner;

    address public RewardToken;


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

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

    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalClaimed;
    uint256 public dividendsPerShare;
    uint256 private dividendsPerShareAccuracyFactor = 10 ** 36;

    uint256 public minPeriod;
    uint256 public minDistribution;

    uint256 currentIndex;
    bool initialized;

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

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

    modifier onlyOwner() {
        require(msg.sender == _owner); _;
    }

    constructor (address owner) {
        _token = msg.sender;
        _owner = owner;
    }

    receive() external payable { }

    function setRewardToken(address newRewardToken) external override onlyToken {
        RewardToken = newRewardToken;
    }

    function setDistributionCriteria(uint256 newMinPeriod, uint256 newMinDistribution) external override onlyToken {
        minPeriod = newMinPeriod;
        minDistribution = newMinDistribution;
    }

    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(uint256 amount) external override onlyToken {
        
        if (amount > 0) {        
            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 iterations = 0;
        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();

        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 = getClaimableDividendOf(shareholder);
        if(amount > 0){
            totalClaimed = totalClaimed.add(amount);
            shares[shareholder].totalClaimed = shares[shareholder].totalClaimed.add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
            IERC20(RewardToken).transfer(shareholder, amount);
        }
    }

    function claimDividend(address shareholder) external override onlyToken {
        distributeDividend(shareholder);
    }

    function getClaimableDividendOf(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 getUnpaidEarnings(address shareholder) public view returns (uint256) {
        if(shares[shareholder].amount == 0){ return 0; }

        uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount);
        uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;

        if(shareholderTotalDividends <= shareholderTotalExcluded){ return 0; }

        return shareholderTotalDividends.sub(shareholderTotalExcluded);
    }

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

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

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

    function manualSend(uint256 amount, address holder) external onlyOwner {
        uint256 contractETHBalance = address(this).balance;
        payable(holder).transfer(amount > 0 ? amount : contractETHBalance);
    }


    function getDividendsClaimedOf (address shareholder) external view returns (uint256) {
        require (shares[shareholder].amount > 0, "You're not a BANKX shareholder!");
        return shares[shareholder].totalClaimed;
    }
}

contract BankOfX is IERC20, Auth {
    using SafeMath for uint256;

    address public RewardToken;

    string private constant _name = "BANK OF X";
    string private constant _symbol = "BANKX";
    uint8 private constant _decimals = 9;
    
    uint256 private _totalSupply = 10000000 * (10 ** _decimals);

    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping (address => uint256) private cooldown;

    address private WETH;
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;

    bool public limitsInEffect = true;
    bool public antiBot = true;

    mapping (address => bool) private bots; 
    mapping (address => bool) public isFeeExempt;
    mapping (address => bool) public isTxLimitExempt;
    mapping (address => bool) public isDividendExempt;

    uint256 public launchedAt;

    uint256 public devFeeBuy = 10;
    uint256 public rewardFeeBuy = 40;
    uint256 public lpFeeBuy = 20;
    uint256 public marketingFeeBuy = 30;


    uint256 public rewardFeeSell = 40;
    uint256 public lpFeeSell = 20;
    uint256 public marketingFeeSell = 30;
    uint256 public devFeeSell = 10;
    
    uint public feeDenominator = 1000;

    uint256 public totalFeeBuy = devFeeBuy.add(lpFeeBuy).add(rewardFeeBuy).add(marketingFeeBuy);
    uint256 public totalFeeSell = devFeeSell.add(lpFeeSell).add(rewardFeeSell).add(marketingFeeSell); 

    IDEXRouter public router;
    address public pair;

    DividendDistributor public distributor;
    uint256 public distributorGas = 0;

    address payable public marketingWallet = payable(0xcB08Bc1287aCc495DFC981dD2F24e255B8E0b5bE);
    address payable public devWallet = payable(0xDebe14e19a1D351654e7916a3Cf7ced0ffFFFAb8);

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public tradingActive = false;  

    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    uint256 public maxTx = _totalSupply.div(200);
    uint256 public maxWallet = _totalSupply.div(50);
    uint256 public swapThreshold = _totalSupply.div(250);

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

        distributor = new DividendDistributor(_owner);
        
        isFeeExempt[_owner] = true;
        isFeeExempt[marketingWallet] = true;             
        isFeeExempt[devWallet] = true;

        isDividendExempt[pair] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[DEAD] = true;    


        isTxLimitExempt[_owner] = true;
        isTxLimitExempt[pair] = true;
        isTxLimitExempt[DEAD] = true;    


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

    receive() external payable { }

    function _updateRewardToken(address newRewardToken) internal {
        distributor.setRewardToken(newRewardToken);
    }

    function updateRewardToken(address newRewardToken) external onlyOwner {
        RewardToken = newRewardToken;
        _updateRewardToken(newRewardToken);
    }

    function changeDistributor(DividendDistributor newDistributor) external onlyOwner {
        distributor = newDistributor;
    }

    function changeFees(uint256 newDevFeeBuy, uint256 newDevFeeSell, uint256 newRewardFeeBuy, uint256 newRewardFeeSell, uint256 newLpFeeBuy, uint256 newLpFeeSell,
        uint256 newMarketingFeeBuy, uint256 newMarketingFeeSell) external onlyOwner {

        rewardFeeBuy = newRewardFeeBuy;
        lpFeeBuy = newLpFeeBuy;
        marketingFeeBuy = newMarketingFeeBuy;
        devFeeBuy = newDevFeeBuy;

        rewardFeeSell = newRewardFeeSell;
        lpFeeSell = newLpFeeSell;
        marketingFeeSell = newMarketingFeeSell;
        devFeeSell = newDevFeeSell;

        totalFeeBuy = devFeeBuy.add(lpFeeBuy).add(rewardFeeBuy).add(marketingFeeBuy);
        totalFeeSell = devFeeSell.add(lpFeeSell).add(rewardFeeSell).add(marketingFeeSell);

        require(totalFeeBuy <= 10, "don't be greedy dev");
        require(totalFeeSell <= 10, "don't be greedy dev");
    } 

    function changeMaxTx(uint256 newMaxTx) external onlyOwner {
        maxTx = newMaxTx;
    }

    function changeMaxWallet(uint256 newMaxWallet) external onlyOwner {
        maxWallet  = newMaxWallet;
    }

    function removeLimits(bool) external onlyOwner {            
        limitsInEffect = false;
    }
    
    function changeIsFeeExempt(address holder, bool exempt) external onlyOwner {
        isFeeExempt[holder] = exempt;
    }

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

    function setMarketingWallet(address payable newMarketingWallet) external onlyOwner {
        marketingWallet = payable(newMarketingWallet);
    }

    function setDevWallet(address payable newDevWallet) external onlyOwner {
        devWallet = payable(newDevWallet);
    }

    function setOwnerWallet(address payable newOwnerWallet) external onlyOwner {
        owner = newOwnerWallet;
    }     

    function changeSwapBackSettings(bool enableSwapBack, uint256 newSwapBackLimit) external onlyOwner {
        swapAndLiquifyEnabled  = enableSwapBack;
        swapThreshold = newSwapBackLimit;
    }

    function setDistributionCriteria(uint256 newMinPeriod, uint256 newMinDistribution) external onlyOwner {
        distributor.setDistributionCriteria(newMinPeriod, newMinDistribution);        
    }

    function setBots(address[] memory bots_) external onlyOwner {
        for (uint i = 0; i < bots_.length; i++) {
            bots[bots_[i]] = true;
        }
    }

    function delBot(address notbot) external onlyOwner {
        bots[notbot] = false;
    }

    function _setIsDividendExempt(address holder, bool exempt) internal {
        require(holder != address(this) && holder != pair);
        isDividendExempt[holder] = exempt;
        if(exempt){
            distributor.setShare(holder, 0);
        }else{
            distributor.setShare(holder, _balances[holder]);
        }
    }

    function setIsDividendExempt(address holder, bool exempt) external onlyOwner {
        _setIsDividendExempt(holder, exempt);
    }

    function changeDistributorGas(uint256 _distributorGas) external onlyOwner {
        distributorGas = _distributorGas;
    }           

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

    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 _transfer(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 _transfer(sender, recipient, amount);
    }

    function _transfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        if (sender!= owner && recipient!= owner) require(tradingActive, "Trading not yet active."); //transfers disabled before tradingActive
        require(!bots[sender] && !bots[recipient]);

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

        require(amount <= maxTx || isTxLimitExempt[sender], "tx");

        if(!isTxLimitExempt[recipient] && antiBot)
        {
            require(_balances[recipient].add(amount) <= maxWallet, "wallet");
        }

        if(msg.sender != pair && !inSwapAndLiquify && swapAndLiquifyEnabled && _balances[address(this)] >= swapThreshold){ swapBack(); }

        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        
        uint256 finalAmount = !isFeeExempt[sender] && !isFeeExempt[recipient] ? takeFee(sender, recipient, amount) : amount;
        _balances[recipient] = _balances[recipient].add(finalAmount);

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

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

        if (distributorGas > 0) {
            try distributor.process(distributorGas) {} catch {}
        }

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

    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;
    }  
    
    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        
        uint256 feeApplicable = pair == recipient ? totalFeeSell : totalFeeBuy;
        uint256 feeAmount = amount.mul(feeApplicable).div(feeDenominator);

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

        return amount.sub(feeAmount);
    }

    function swapBack() internal lockTheSwap {
        
        uint256 numTokensToSwap = _balances[address(this)];
        uint256 amountForLp = numTokensToSwap.mul(lpFeeSell).div(totalFeeSell).div(2);
        uint256 amountForRewardToken = numTokensToSwap.mul(rewardFeeSell).div(totalFeeSell);
        uint256 amountToSwapForEth = numTokensToSwap.sub(amountForLp).sub(amountForRewardToken);

        swapTokensForEth(amountToSwapForEth);

        if (address(RewardToken) == address(this)) {
            IERC20(RewardToken).transfer(address(distributor), amountForRewardToken);
            distributor.deposit(amountForRewardToken);
        }

        if (address(RewardToken) != address(this)) {
            swapTokensForRewardToken(amountForRewardToken);
        }

    }

    function swapTokensForRewardToken(uint256 tokenAmount) private {
        address[] memory path = new address[](3);
        path[0] = address(this);
        path[1] = WETH;
        path[2] = RewardToken;

        router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 dividends = IERC20(RewardToken).balanceOf(address(this));

        bool success = IERC20(RewardToken).transfer(address(distributor), dividends);

        if (success) {
            distributor.deposit(dividends);            
        }     
    }

    function swapTokensForEth(uint256 tokenAmount) private {

        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WETH;

        // make the swap
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );

        uint256 amountETH = address(this).balance;
        uint256 marketingBalance = amountETH.mul(marketingFeeSell).div(totalFeeSell);
        uint256 devBalance = amountETH.mul(devFeeSell).div(totalFeeSell);

        uint256 amountEthLiquidity = amountETH.mul(lpFeeSell).div(totalFeeSell).div(2);

        if(amountETH > 0){          
            payable(devWallet).transfer(devBalance); 
            payable(marketingWallet).transfer(marketingBalance);
        }        

        if(amountEthLiquidity > 0){
            router.addLiquidityETH{value: amountEthLiquidity}(
                address(this),
                amountEthLiquidity,
                0,
                0,
                0x000000000000000000000000000000000000dEaD,
                block.timestamp
            );
        }      
    }

    function manualSwapBack() external onlyOwner {
        swapBack();
    }

    function manualSendEth() external onlyOwner {
        uint256 contractETHBalance = address(this).balance;
        uint256 marketingBalanceETH = contractETHBalance.mul(marketingFeeSell).div(totalFeeSell);
        uint256 devBalanceETH = contractETHBalance.mul(devFeeSell).div(totalFeeSell);
        if(contractETHBalance > 0){          
            payable(devWallet).transfer(devBalanceETH); 
            payable(marketingWallet).transfer(marketingBalanceETH);
        }
    }

    //once enabled, cannot be reversed
    function openTrading() external onlyOwner {
        launchedAt = block.number;
        tradingActive = true;
    }      

    //dividend functions
    function claimDividend() external {
        distributor.claimDividend(msg.sender);
    }
    
    function claimDividend(address holder) external onlyOwner {
        distributor.claimDividend(holder);
    }
    
    function getClaimableDividendOf(address shareholder) public view returns (uint256) {
        return distributor.getClaimableDividendOf(shareholder);
    }

    function getTotalDividends() external view returns (uint256) {
        return distributor.totalDividends();
    }    

    function getTotalClaimed() external view returns (uint256) {
        return distributor.totalClaimed();
    }

    function getDividendsClaimedOf (address shareholder) external view returns (uint256) {
        return distributor.getDividendsClaimedOf(shareholder);
    }

    function manualProcessGas(uint256 manualGas) external onlyOwner {
        distributor.process(manualGas);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"RewardToken","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[],"name":"antiBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract DividendDistributor","name":"newDistributor","type":"address"}],"name":"changeDistributor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_distributorGas","type":"uint256"}],"name":"changeDistributorGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newDevFeeBuy","type":"uint256"},{"internalType":"uint256","name":"newDevFeeSell","type":"uint256"},{"internalType":"uint256","name":"newRewardFeeBuy","type":"uint256"},{"internalType":"uint256","name":"newRewardFeeSell","type":"uint256"},{"internalType":"uint256","name":"newLpFeeBuy","type":"uint256"},{"internalType":"uint256","name":"newLpFeeSell","type":"uint256"},{"internalType":"uint256","name":"newMarketingFeeBuy","type":"uint256"},{"internalType":"uint256","name":"newMarketingFeeSell","type":"uint256"}],"name":"changeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxTx","type":"uint256"}],"name":"changeMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxWallet","type":"uint256"}],"name":"changeMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enableSwapBack","type":"bool"},{"internalType":"uint256","name":"newSwapBackLimit","type":"uint256"}],"name":"changeSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"claimDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"notbot","type":"address"}],"name":"delBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distributor","outputs":[{"internalType":"contract DividendDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distributorGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"}],"name":"getClaimableDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"}],"name":"getDividendsClaimedOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","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":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"manualGas","type":"uint256"}],"name":"manualProcessGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSendEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"","type":"bool"}],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots_","type":"address[]"}],"name":"setBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newDevWallet","type":"address"}],"name":"setDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMinPeriod","type":"uint256"},{"internalType":"uint256","name":"newMinDistribution","type":"uint256"}],"name":"setDistributionCriteria","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 payable","name":"newMarketingWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newOwnerWallet","type":"address"}],"name":"setOwnerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","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":"totalFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRewardToken","type":"address"}],"name":"updateRewardToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126009600a62000720565b62000021906298968062000731565b6002556007805461dead6001600160a01b0319909116179055600880546001600160b01b03191661010160a01b179055600a600e8190556028600f81905560146010819055601e60118190556012839055601382905580825560158490556103e8601655620000bb939092620000a7929091839162000509602090811b6200190117901c565b6200050960201b620019011790919060201c565b601755620000ea601454620000a7601254620000a76013546015546200050960201b620019011790919060201c565b6018556000601c55601d80546001600160a01b03191673cb08bc1287acc495dfc981dd2f24e255b8e0b5be179055601e8054600162ffff0160a01b031916750100debe14e19a1d351654e7916a3cf7ced0fffffab8179055600254620001619060c86200196062000579602090811b91909117901c565b601f556200018160326002546200057960201b620019601790919060201c565b602055620001a160fa6002546200057960201b620019601790919060201c565b602155348015620001b157600080fd5b506040516200462338038062004623833981016040819052620001d49162000753565b600080546001600160a01b03199081166001600160a01b0384161790915560198054737a250d5630b4cf539739df2c5dacb4c659f2488d921682179055604080516315ab88c960e31b8152905163ad5c4648916004808201926020929091908290030181865afa1580156200024d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000273919062000753565b600680546001600160a01b0319166001600160a01b039283161790556019546040805163c45a015560e01b81529051919092169163c45a01559160048083019260209291908290030181865afa158015620002d2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f8919062000753565b6006546040516364e329cb60e11b81526001600160a01b03918216600482015230602482015291169063c9c65396906044016020604051808303816000875af11580156200034a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000370919062000753565b601a80546001600160a01b0319166001600160a01b0392831617905530600090815260046020908152604080832060195490941683529290528190206000199055518190620003bf90620005ff565b6001600160a01b039091168152602001604051809103906000f080158015620003ec573d6000803e3d6000fd5b50601b80546001600160a01b0319166001600160a01b039283161790558181166000818152600a60209081526040808320805460ff199081166001908117909255601d54871685528285208054821683179055601e54871685528285208054821683179055601a805488168652600c85528386208054831684179055308652838620805483168417905560078054891687528487208054841685179055878752600b865284872080548416851790559054881686528386208054831684179055549096168452818420805490961617909455600254838352600382528483208190559351938452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35062000814565b6000806200051883856200077e565b905083811015620005705760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064015b60405180910390fd5b90505b92915050565b60006200057083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250620005c360201b60201c565b60008183620005e75760405162461bcd60e51b815260040162000567919062000799565b506000620005f68486620007f1565b95945050505050565b610fea806200363983390190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620006645781600019048211156200064857620006486200060d565b808516156200065657918102915b93841c939080029062000628565b509250929050565b6000826200067d5750600162000573565b816200068c5750600062000573565b8160018114620006a55760028114620006b057620006d0565b600191505062000573565b60ff841115620006c457620006c46200060d565b50506001821b62000573565b5060208310610133831016604e8410600b8410161715620006f5575081810a62000573565b62000701838362000623565b80600019048211156200071857620007186200060d565b029392505050565b60006200057060ff8416836200066c565b60008160001904831182151516156200074e576200074e6200060d565b500290565b6000602082840312156200076657600080fd5b81516001600160a01b03811681146200057057600080fd5b600082198211156200079457620007946200060d565b500190565b600060208083528351808285015260005b81811015620007c857858101830151858201604001528201620007aa565b81811115620007db576000604083870101525b50601f01601f1916929092016040019392505050565b6000826200080f57634e487b7160e01b600052601260045260246000fd5b500490565b612e1580620008246000396000f3fe6080604052600436106104095760003560e01c806370a0823111610213578063a9059cbb11610123578063f0fc6bca116100ab578063f887ea401161007a578063f887ea4014610c30578063f8b45b0514610c50578063f8cf31cb14610c66578063fabe628314610c86578063fb5f27fb14610ca657600080fd5b8063f0fc6bca14610bbb578063f1e9f1e514610bd0578063f2fde38b14610bf0578063f708a64f14610c1057600080fd5b8063bf56b371116100f2578063bf56b37114610b14578063bfe1092814610b2a578063c9567bf914610b4a578063cdba31fd14610b5f578063dd62ed3e14610b7557600080fd5b8063a9059cbb14610a93578063b515566a14610ab3578063bb542ef014610ad3578063bbc0c74214610af357600080fd5b8063802cd15f116101a65780638ea5220f116101755780638ea5220f146109e55780638ecc37fb14610a0557806395d89b4114610a25578063a3a2e89e14610a53578063a8aa1b3114610a7357600080fd5b8063802cd15f146109575780638193403114610977578063893d20e8146109975780638b42507f146109b557600080fd5b806374e8d732116101e257806374e8d732146108c857806375f0a874146108de578063778c6152146109165780637dfcbe341461093657600080fd5b806370a082311461085157806372648fec14610887578063736a83a11461089d5780637437681e146108b257600080fd5b80632d48e896116103195780634a74bb02116102a15780635cc33f74116102705780635cc33f74146107d15780635d098b38146107f157806360e719621461081157806366eb37851461082757806367ee5f091461083c57600080fd5b80634a74bb021461076457806352645cd714610785578063531484161461079b578063571ac8b0146107b157600080fd5b80633f4218e0116102e85780633f4218e0146106ad578063400343e7146106dd5780634355855a146106fd57806345ca0b4b1461072d5780634a62bb651461074357600080fd5b80632d48e896146106225780632f54bf6e14610642578063313ce567146106715780633dab52691461068d57600080fd5b806316d9962b1161039c5780631deff2161161036b5780631deff216146105985780631f53ac02146105ad57806323b872dd146105cd578063273123b7146105ed5780632b112e491461060d57600080fd5b806316d9962b1461052d57806317090ec81461054d578063180b0d7e1461056d57806318160ddd1461058357600080fd5b806310075a69116103d857806310075a69146104cb57806312835c5e146104e157806313374e7a146104f757806315f7e05e1461050d57600080fd5b80630445b6671461041557806306fdde031461043e578063095ea7b3146104795780630b006d60146104a957600080fd5b3661041057005b600080fd5b34801561042157600080fd5b5061042b60215481565b6040519081526020015b60405180910390f35b34801561044a57600080fd5b50604080518082019091526009815268084829c96409e8c40b60bb1b60208201525b6040516104359190612916565b34801561048557600080fd5b50610499610494366004612990565b610cbc565b6040519015158152602001610435565b3480156104b557600080fd5b506104c96104c43660046129bc565b610d29565b005b3480156104d757600080fd5b5061042b60115481565b3480156104ed57600080fd5b5061042b60155481565b34801561050357600080fd5b5061042b60145481565b34801561051957600080fd5b506104c96105283660046129d5565b610d61565b34801561053957600080fd5b506104c96105483660046129bc565b610dee565b34801561055957600080fd5b506104c9610568366004612a00565b610e1d565b34801561057957600080fd5b5061042b60165481565b34801561058f57600080fd5b5060025461042b565b3480156105a457600080fd5b506104c9610e57565b3480156105b957600080fd5b506104c96105c83660046129d5565b610f4c565b3480156105d957600080fd5b506104996105e8366004612a1d565b610f98565b3480156105f957600080fd5b506104c96106083660046129d5565b61105a565b34801561061957600080fd5b5061042b6110a5565b34801561062e57600080fd5b506104c961063d366004612a5e565b6110f7565b34801561064e57600080fd5b5061049961065d3660046129d5565b6000546001600160a01b0391821691161490565b34801561067d57600080fd5b5060405160098152602001610435565b34801561069957600080fd5b506104c96106a8366004612a80565b61118b565b3480156106b957600080fd5b506104996106c83660046129d5565b600a6020526000908152604090205460ff1681565b3480156106e957600080fd5b506104c96106f8366004612a9e565b6111d7565b34801561070957600080fd5b506104996107183660046129d5565b600c6020526000908152604090205460ff1681565b34801561073957600080fd5b5061042b60105481565b34801561074f57600080fd5b5060085461049990600160a01b900460ff1681565b34801561077057600080fd5b50601e5461049990600160a81b900460ff1681565b34801561079157600080fd5b5061042b60135481565b3480156107a757600080fd5b5061042b60185481565b3480156107bd57600080fd5b506104996107cc3660046129d5565b611307565b3480156107dd57600080fd5b5061042b6107ec3660046129d5565b611315565b3480156107fd57600080fd5b506104c961080c3660046129d5565b611385565b34801561081d57600080fd5b5061042b601c5481565b34801561083357600080fd5b506104c96113d1565b34801561084857600080fd5b5061042b611405565b34801561085d57600080fd5b5061042b61086c3660046129d5565b6001600160a01b031660009081526003602052604090205490565b34801561089357600080fd5b5061042b600f5481565b3480156108a957600080fd5b5061042b611473565b3480156108be57600080fd5b5061042b601f5481565b3480156108d457600080fd5b5061042b60125481565b3480156108ea57600080fd5b50601d546108fe906001600160a01b031681565b6040516001600160a01b039091168152602001610435565b34801561092257600080fd5b506104c96109313660046129bc565b6114bd565b34801561094257600080fd5b5060085461049990600160a81b900460ff1681565b34801561096357600080fd5b506104c96109723660046129d5565b6114ec565b34801561098357600080fd5b506104c96109923660046129bc565b611538565b3480156109a357600080fd5b506000546001600160a01b03166108fe565b3480156109c157600080fd5b506104996109d03660046129d5565b600b6020526000908152604090205460ff1681565b3480156109f157600080fd5b50601e546108fe906001600160a01b031681565b348015610a1157600080fd5b5061042b610a203660046129d5565b611596565b348015610a3157600080fd5b50604080518082019091526005815264084829c96b60db1b602082015261046c565b348015610a5f57600080fd5b506104c9610a6e366004612af3565b6115c9565b348015610a7f57600080fd5b50601a546108fe906001600160a01b031681565b348015610a9f57600080fd5b50610499610aae366004612990565b61161e565b348015610abf57600080fd5b506104c9610ace366004612b42565b61162b565b348015610adf57600080fd5b506104c9610aee3660046129d5565b6116c1565b348015610aff57600080fd5b50601e5461049990600160b01b900460ff1681565b348015610b2057600080fd5b5061042b600d5481565b348015610b3657600080fd5b50601b546108fe906001600160a01b031681565b348015610b5657600080fd5b506104c961170d565b348015610b6b57600080fd5b5061042b600e5481565b348015610b8157600080fd5b5061042b610b90366004612c07565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610bc757600080fd5b506104c9611750565b348015610bdc57600080fd5b506001546108fe906001600160a01b031681565b348015610bfc57600080fd5b506104c9610c0b3660046129d5565b6117a9565b348015610c1c57600080fd5b506104c9610c2b366004612af3565b611827565b348015610c3c57600080fd5b506019546108fe906001600160a01b031681565b348015610c5c57600080fd5b5061042b60205481565b348015610c7257600080fd5b506104c9610c813660046129d5565b61185b565b348015610c9257600080fd5b506104c9610ca1366004612af3565b6118ac565b348015610cb257600080fd5b5061042b60175481565b3360008181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610d179086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b03163314610d5c5760405162461bcd60e51b8152600401610d5390612c35565b60405180910390fd5b602055565b6000546001600160a01b03163314610d8b5760405162461bcd60e51b8152600401610d5390612c35565b601b54604051630afbf02f60e11b81526001600160a01b038381166004830152909116906315f7e05e906024015b600060405180830381600087803b158015610dd357600080fd5b505af1158015610de7573d6000803e3d6000fd5b5050505050565b6000546001600160a01b03163314610e185760405162461bcd60e51b8152600401610d5390612c35565b601c55565b6000546001600160a01b03163314610e475760405162461bcd60e51b8152600401610d5390612c35565b506008805460ff60a01b19169055565b6000546001600160a01b03163314610e815760405162461bcd60e51b8152600401610d5390612c35565b60004790506000610ea9601854610ea3601454856119a290919063ffffffff16565b90611960565b90506000610ec8601854610ea3601554866119a290919063ffffffff16565b90508215610f4757601e546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015610f0a573d6000803e3d6000fd5b50601d546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015610f45573d6000803e3d6000fd5b505b505050565b6000546001600160a01b03163314610f765760405162461bcd60e51b8152600401610d5390612c35565b601e80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914611045576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600482528381203382529091529190912054611020918490611a24565b6001600160a01b03851660009081526004602090815260408083203384529091529020555b611050848484611a5e565b90505b9392505050565b6000546001600160a01b031633146110845760405162461bcd60e51b8152600401610d5390612c35565b6001600160a01b03166000908152600960205260409020805460ff19169055565b6008546001600160a01b03166000908152600360205260408120546110f2906007546001600160a01b03166000908152600360205260409020546110ec9060025490611f83565b90611f83565b905090565b6000546001600160a01b031633146111215760405162461bcd60e51b8152600401610d5390612c35565b601b546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e896906044015b600060405180830381600087803b15801561116f57600080fd5b505af1158015611183573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146111b55760405162461bcd60e51b8152600401610d5390612c35565b601e8054921515600160a81b0260ff60a81b1990931692909217909155602155565b6000546001600160a01b031633146112015760405162461bcd60e51b8152600401610d5390612c35565b600f86905560108490556011829055600e889055601285905560138390556014819055601587905561123f8261123988818c89611901565b90611901565b60178190555061126860145461123960125461123960135460155461190190919063ffffffff16565b601855601754600a10156112b45760405162461bcd60e51b81526020600482015260136024820152723237b713ba1031329033b932b2b23c903232bb60691b6044820152606401610d53565b600a60185411156112fd5760405162461bcd60e51b81526020600482015260136024820152723237b713ba1031329033b932b2b23c903232bb60691b6044820152606401610d53565b5050505050505050565b6000610d2382600019610cbc565b601b54604051631730cfdd60e21b81526001600160a01b0383811660048301526000921690635cc33f74906024015b602060405180830381865afa158015611361573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d239190612c55565b6000546001600160a01b031633146113af5760405162461bcd60e51b8152600401610d5390612c35565b601d80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146113fb5760405162461bcd60e51b8152600401610d5390612c35565b611403611fc5565b565b601b546040805163997664d760e01b815290516000926001600160a01b03169163997664d79160048083019260209291908290030181865afa15801561144f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f29190612c55565b601b546040805163d54ad2a160e01b815290516000926001600160a01b03169163d54ad2a19160048083019260209291908290030181865afa15801561144f573d6000803e3d6000fd5b6000546001600160a01b031633146114e75760405162461bcd60e51b8152600401610d5390612c35565b601f55565b6000546001600160a01b031633146115165760405162461bcd60e51b8152600401610d5390612c35565b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146115625760405162461bcd60e51b8152600401610d5390612c35565b601b546040516001624d3b8760e01b03198152600481018390526001600160a01b039091169063ffb2c47990602401610db9565b601b54604051638ecc37fb60e01b81526001600160a01b0383811660048301526000921690638ecc37fb90602401611344565b6000546001600160a01b031633146115f35760405162461bcd60e51b8152600401610d5390612c35565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6000611053338484611a5e565b6000546001600160a01b031633146116555760405162461bcd60e51b8152600401610d5390612c35565b60005b81518110156116bd5760016009600084848151811061167957611679612c6e565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806116b581612c9a565b915050611658565b5050565b6000546001600160a01b031633146116eb5760405162461bcd60e51b8152600401610d5390612c35565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146117375760405162461bcd60e51b8152600401610d5390612c35565b43600d55601e805460ff60b01b1916600160b01b179055565b601b54604051630afbf02f60e11b81523360048201526001600160a01b03909116906315f7e05e90602401600060405180830381600087803b15801561179557600080fd5b505af1158015610f45573d6000803e3d6000fd5b6000546001600160a01b031633146117d35760405162461bcd60e51b8152600401610d5390612c35565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6000546001600160a01b031633146118515760405162461bcd60e51b8152600401610d5390612c35565b6116bd828261215d565b6000546001600160a01b031633146118855760405162461bcd60e51b8152600401610d5390612c35565b600180546001600160a01b0319166001600160a01b0383161790556118a98161223c565b50565b6000546001600160a01b031633146118d65760405162461bcd60e51b8152600401610d5390612c35565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b60008061190e8385612cb3565b9050838110156110535760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610d53565b600061105383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061226e565b6000826000036119b457506000610d23565b60006119c08385612ccb565b9050826119cd8583612cea565b146110535760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610d53565b60008184841115611a485760405162461bcd60e51b8152600401610d539190612916565b506000611a558486612d0c565b95945050505050565b600080546001600160a01b03858116911614801590611a8b57506000546001600160a01b03848116911614155b15611ae957601e54600160b01b900460ff16611ae95760405162461bcd60e51b815260206004820152601760248201527f54726164696e67206e6f7420796574206163746976652e0000000000000000006044820152606401610d53565b6001600160a01b03841660009081526009602052604090205460ff16158015611b2b57506001600160a01b03831660009081526009602052604090205460ff16155b611b3457600080fd5b601e54600160a01b900460ff1615611b5857611b5184848461229c565b9050611053565b601f5482111580611b8157506001600160a01b0384166000908152600b602052604090205460ff165b611bb25760405162461bcd60e51b81526020600482015260026024820152610e8f60f31b6044820152606401610d53565b6001600160a01b0383166000908152600b602052604090205460ff16158015611be45750600854600160a81b900460ff165b15611c4857602080546001600160a01b03851660009081526003909252604090912054611c119084611901565b1115611c485760405162461bcd60e51b81526020600482015260066024820152651dd85b1b195d60d21b6044820152606401610d53565b601a546001600160a01b03163314801590611c6d5750601e54600160a01b900460ff16155b8015611c825750601e54600160a81b900460ff165b8015611c9f57506021543060009081526003602052604090205410155b15611cac57611cac611fc5565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038716600090815260039091529190912054611cfe918490611a24565b6001600160a01b038516600090815260036020908152604080832093909355600a90529081205460ff16158015611d4e57506001600160a01b0384166000908152600a602052604090205460ff16155b611d585782611d63565b611d63858585612382565b6001600160a01b038516600090815260036020526040902054909150611d899082611901565b6001600160a01b038086166000908152600360209081526040808320949094559188168152600c909152205460ff16611e2d57601b546001600160a01b0386811660008181526003602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611e1a57600080fd5b505af1925050508015611e2b575060015b505b6001600160a01b0384166000908152600c602052604090205460ff16611ebe57601b546001600160a01b0385811660008181526003602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611eab57600080fd5b505af1925050508015611ebc575060015b505b601c5415611f2b57601b54601c546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c47991611efe9160040190815260200190565b600060405180830381600087803b158015611f1857600080fd5b505af1925050508015611f29575060015b505b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611f7091815260200190565b60405180910390a3506001949350505050565b600061105383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611a24565b601e805460ff60a01b1916600160a01b1790553060009081526003602052604081205460185460135491929161200691600291610ea39190829087906119a2565b90506000612025601854610ea3601254866119a290919063ffffffff16565b90506000612037826110ec8686611f83565b90506120428161244f565b600154306001600160a01b039091160361212f57600154601b5460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810185905291169063a9059cbb906044016020604051808303816000875af11580156120ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120cf9190612d23565b50601b5460405163b6b55f2560e01b8152600481018490526001600160a01b039091169063b6b55f2590602401600060405180830381600087803b15801561211657600080fd5b505af115801561212a573d6000803e3d6000fd5b505050505b6001546001600160a01b0316301461214a5761214a826126b5565b5050601e805460ff60a01b191690555050565b6001600160a01b03821630148015906121845750601a546001600160a01b03838116911614155b61218d57600080fd5b6001600160a01b0382166000908152600c60205260409020805460ff191682158015919091179091556121f357601b54604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca9690604401611155565b601b546001600160a01b0383811660008181526003602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401611155565b601b54604051638aee812760e01b81526001600160a01b03838116600483015290911690638aee812790602401610db9565b6000818361228f5760405162461bcd60e51b8152600401610d539190612916565b506000611a558486612cea565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b03861660009081526003909152918220546122ed918490611a24565b6001600160a01b03808616600090815260036020526040808220939093559085168152205461231c9083611901565b6001600160a01b0380851660008181526003602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906123709086815260200190565b60405180910390a35060019392505050565b601a5460009081906001600160a01b038581169116146123a4576017546123a8565b6018545b905060006123c5601654610ea384876119a290919063ffffffff16565b306000908152600360205260409020549091506123e29082611901565b30600081815260036020526040908190209290925590516001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906124339085815260200190565b60405180910390a36124458482611f83565b9695505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061248457612484612c6e565b6001600160a01b0392831660209182029290920101526006548251911690829060019081106124b5576124b5612c6e565b6001600160a01b03928316602091820292909201015260195460405163791ac94760e01b815291169063791ac947906124fb908590600090869030904290600401612d40565b600060405180830381600087803b15801561251557600080fd5b505af1158015612529573d6000803e3d6000fd5b505050506000479050600061254f601854610ea3601454856119a290919063ffffffff16565b9050600061256e601854610ea3601554866119a290919063ffffffff16565b905060006125926002610ea3601854610ea3601354896119a290919063ffffffff16565b9050831561261157601e546040516001600160a01b039091169083156108fc029084906000818181858888f193505050501580156125d4573d6000803e3d6000fd5b50601d546040516001600160a01b039091169084156108fc029085906000818181858888f1935050505015801561260f573d6000803e3d6000fd5b505b80156111835760195460405163f305d71960e01b815230600482015260248101839052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612685573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906126aa9190612db1565b505050505050505050565b604080516003808252608082019092526000916020820160608036833701905050905030816000815181106126ec576126ec612c6e565b6001600160a01b03928316602091820292909201015260065482519116908290600190811061271d5761271d612c6e565b6001600160a01b03928316602091820292909201015260015482519116908290600290811061274e5761274e612c6e565b6001600160a01b039283166020918202929092010152601954604051635c11d79560e01b8152911690635c11d79590612794908590600090869030904290600401612d40565b600060405180830381600087803b1580156127ae57600080fd5b505af11580156127c2573d6000803e3d6000fd5b50506001546040516370a0823160e01b8152306004820152600093506001600160a01b0390911691506370a0823190602401602060405180830381865afa158015612811573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128359190612c55565b600154601b5460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810184905292935060009291169063a9059cbb906044016020604051808303816000875af1158015612890573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128b49190612d23565b90508015610f4557601b5460405163b6b55f2560e01b8152600481018490526001600160a01b039091169063b6b55f2590602401600060405180830381600087803b15801561290257600080fd5b505af11580156112fd573d6000803e3d6000fd5b600060208083528351808285015260005b8181101561294357858101830151858201604001528201612927565b81811115612955576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146118a957600080fd5b803561298b8161296b565b919050565b600080604083850312156129a357600080fd5b82356129ae8161296b565b946020939093013593505050565b6000602082840312156129ce57600080fd5b5035919050565b6000602082840312156129e757600080fd5b81356110538161296b565b80151581146118a957600080fd5b600060208284031215612a1257600080fd5b8135611053816129f2565b600080600060608486031215612a3257600080fd5b8335612a3d8161296b565b92506020840135612a4d8161296b565b929592945050506040919091013590565b60008060408385031215612a7157600080fd5b50508035926020909101359150565b60008060408385031215612a9357600080fd5b82356129ae816129f2565b600080600080600080600080610100898b031215612abb57600080fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b60008060408385031215612b0657600080fd5b8235612b118161296b565b91506020830135612b21816129f2565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60006020808385031215612b5557600080fd5b823567ffffffffffffffff80821115612b6d57600080fd5b818501915085601f830112612b8157600080fd5b813581811115612b9357612b93612b2c565b8060051b604051601f19603f83011681018181108582111715612bb857612bb8612b2c565b604052918252848201925083810185019188831115612bd657600080fd5b938501935b82851015612bfb57612bec85612980565b84529385019392850192612bdb565b98975050505050505050565b60008060408385031215612c1a57600080fd5b8235612c258161296b565b91506020830135612b218161296b565b60208082526006908201526510a7bbb732b960d11b604082015260600190565b600060208284031215612c6757600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201612cac57612cac612c84565b5060010190565b60008219821115612cc657612cc6612c84565b500190565b6000816000190483118215151615612ce557612ce5612c84565b500290565b600082612d0757634e487b7160e01b600052601260045260246000fd5b500490565b600082821015612d1e57612d1e612c84565b500390565b600060208284031215612d3557600080fd5b8151611053816129f2565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612d905784516001600160a01b031683529383019391830191600101612d6b565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612dc657600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220a2d3c501533b40a42a111621a75a19ef736d9b195591daf9db047edfcc651a5a64736f6c634300080d003360806040526ec097ce7bc90715b34b9f1000000000600b5534801561002357600080fd5b50604051610fea380380610fea83398101604081905261004291610075565b60008054336001600160a01b031991821617909155600180549091166001600160a01b03929092169190911790556100a5565b60006020828403121561008757600080fd5b81516001600160a01b038116811461009e57600080fd5b9392505050565b610f36806100b46000396000f3fe6080604052600436106101235760003560e01c8063997664d7116100a0578063e2d2e21911610064578063e2d2e2191461032b578063ecd0c0c314610341578063f1e9f1e514610361578063ffb2c47914610381578063ffd49c84146103a157600080fd5b8063997664d714610250578063b2bdfa7b14610266578063b6b55f251461029e578063ce7c2ac2146102be578063d54ad2a11461031557600080fd5b80633a98ef39116100e75780633a98ef39146101e45780634fab0ae8146101fa5780635cc33f74146102105780638aee8127146102305780638ecc37fb1461019157600080fd5b80631014edf51461012f57806314b6ca961461015157806315f7e05e1461017157806328fd3198146101915780632d48e896146101c457600080fd5b3661012a57005b600080fd5b34801561013b57600080fd5b5061014f61014a366004610d12565b6103b7565b005b34801561015d57600080fd5b5061014f61016c366004610d3e565b610417565b34801561017d57600080fd5b5061014f61018c366004610d68565b61058f565b34801561019d57600080fd5b506101b16101ac366004610d68565b6105b2565b6040519081526020015b60405180910390f35b3480156101d057600080fd5b5061014f6101df366004610d83565b61063d565b3480156101f057600080fd5b506101b160075481565b34801561020657600080fd5b506101b1600d5481565b34801561021c57600080fd5b506101b161022b366004610d68565b61065f565b34801561023c57600080fd5b5061014f61024b366004610d68565b6106e8565b34801561025c57600080fd5b506101b160085481565b34801561027257600080fd5b50600154610286906001600160a01b031681565b6040516001600160a01b0390911681526020016101bb565b3480156102aa57600080fd5b5061014f6102b9366004610da5565b610721565b3480156102ca57600080fd5b506102fa6102d9366004610d68565b60066020526000908152604090208054600182015460029092015490919083565b604080519384526020840192909252908201526060016101bb565b34801561032157600080fd5b506101b160095481565b34801561033757600080fd5b506101b1600a5481565b34801561034d57600080fd5b50600054610286906001600160a01b031681565b34801561036d57600080fd5b50600254610286906001600160a01b031681565b34801561038d57600080fd5b5061014f61039c366004610da5565b61077b565b3480156103ad57600080fd5b506101b1600c5481565b6001546001600160a01b031633146103ce57600080fd5b476001600160a01b0382166108fc846103e757826103e9565b845b6040518115909202916000818181858888f19350505050158015610411573d6000803e3d6000fd5b50505050565b6000546001600160a01b0316331461042e57600080fd5b6001600160a01b03821660009081526006602052604090205415610455576104558261087f565b60008111801561047b57506001600160a01b038216600090815260066020526040902054155b156104e157600380546001600160a01b0384166000818152600460205260408120839055600183018455929092527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0319169091179055610514565b8015801561050657506001600160a01b03821660009081526006602052604090205415155b1561051457610514826109a9565b6001600160a01b03821660009081526006602052604090205460075461054591839161053f91610abe565b90610b09565b6007556001600160a01b038216600090815260066020526040902081905561056c81610b68565b6001600160a01b0390921660009081526006602052604090206001019190915550565b6000546001600160a01b031633146105a657600080fd5b6105af8161087f565b50565b6001600160a01b03811660009081526006602052604081205481036105d957506000919050565b6001600160a01b0382166000908152600660205260408120546105fb90610b68565b6001600160a01b03841660009081526006602052604090206001015490915080821161062b575060009392505050565b6106358282610abe565b949350505050565b6000546001600160a01b0316331461065457600080fd5b600c91909155600d55565b6001600160a01b0381166000908152600660205260408120546106c95760405162461bcd60e51b815260206004820152601f60248201527f596f75277265206e6f7420612042414e4b58207368617265686f6c646572210060448201526064015b60405180910390fd5b506001600160a01b031660009081526006602052604090206002015490565b6000546001600160a01b031633146106ff57600080fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461073857600080fd5b80156105af5760085461074b9082610b09565b600855600754600b546107759161076c916107669085610b85565b90610c07565b600a5490610b09565b600a5550565b6000546001600160a01b0316331461079257600080fd5b60035460008190036107a2575050565b60008060005a90505b84821080156107b957508383105b156108785783600e54106107cd576000600e555b6107ff6003600e54815481106107e5576107e5610dbe565b6000918252602090912001546001600160a01b0316610c49565b15610836576108366003600e548154811061081c5761081c610dbe565b6000918252602090912001546001600160a01b031661087f565b61084b6108445a8390610abe565b8390610b09565b91505a600e8054919250600061086083610dea565b9190505550828061087090610dea565b9350506107ab565b5050505050565b6001600160a01b03811660009081526006602052604081205490036108a15750565b60006108ac826105b2565b905080156109a5576009546108c19082610b09565b6009556001600160a01b0382166000908152600660205260409020600201546108ea9082610b09565b6001600160a01b038316600090815260066020526040902060028101919091555461091490610b68565b6001600160a01b038381166000818152600660205260409081902060010193909355600254925163a9059cbb60e01b815260048101919091526024810184905291169063a9059cbb906044016020604051808303816000875af115801561097f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a39190610e03565b505b5050565b600380546109b990600190610e25565b815481106109c9576109c9610dbe565b60009182526020808320909101546001600160a01b0384811684526004909252604090922054600380549290931692918110610a0757610a07610dbe565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260049182905260408120546003805491939291610a5390600190610e25565b81548110610a6357610a63610dbe565b60009182526020808320909101546001600160a01b031683528201929092526040019020556003805480610a9957610a99610e3c565b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000610b0083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610c8e565b90505b92915050565b600080610b168385610e52565b905083811015610b005760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016106c0565b6000610b03600b54610766600a5485610b8590919063ffffffff16565b600082600003610b9757506000610b03565b6000610ba38385610e6a565b905082610bb08583610e89565b14610b005760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016106c0565b6000610b0083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610cc8565b600c546001600160a01b03821660009081526005602052604081205490914291610c739190610e52565b108015610b035750600d54610c87836105b2565b1192915050565b60008184841115610cb25760405162461bcd60e51b81526004016106c09190610eab565b506000610cbf8486610e25565b95945050505050565b60008183610ce95760405162461bcd60e51b81526004016106c09190610eab565b506000610cbf8486610e89565b80356001600160a01b0381168114610d0d57600080fd5b919050565b60008060408385031215610d2557600080fd5b82359150610d3560208401610cf6565b90509250929050565b60008060408385031215610d5157600080fd5b610d5a83610cf6565b946020939093013593505050565b600060208284031215610d7a57600080fd5b610b0082610cf6565b60008060408385031215610d9657600080fd5b50508035926020909101359150565b600060208284031215610db757600080fd5b5035919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201610dfc57610dfc610dd4565b5060010190565b600060208284031215610e1557600080fd5b81518015158114610b0057600080fd5b600082821015610e3757610e37610dd4565b500390565b634e487b7160e01b600052603160045260246000fd5b60008219821115610e6557610e65610dd4565b500190565b6000816000190483118215151615610e8457610e84610dd4565b500290565b600082610ea657634e487b7160e01b600052601260045260246000fd5b500490565b600060208083528351808285015260005b81811015610ed857858101830151858201604001528201610ebc565b81811115610eea576000604083870101525b50601f01601f191692909201604001939250505056fea264697066735822122021b6f87c8d82e148b0adcb217802c96510775f99ff6978304922d21c8717696664736f6c634300080d0033000000000000000000000000c103bbeefdbdabca0583f32da95c927ca51a239d

Deployed Bytecode

0x6080604052600436106104095760003560e01c806370a0823111610213578063a9059cbb11610123578063f0fc6bca116100ab578063f887ea401161007a578063f887ea4014610c30578063f8b45b0514610c50578063f8cf31cb14610c66578063fabe628314610c86578063fb5f27fb14610ca657600080fd5b8063f0fc6bca14610bbb578063f1e9f1e514610bd0578063f2fde38b14610bf0578063f708a64f14610c1057600080fd5b8063bf56b371116100f2578063bf56b37114610b14578063bfe1092814610b2a578063c9567bf914610b4a578063cdba31fd14610b5f578063dd62ed3e14610b7557600080fd5b8063a9059cbb14610a93578063b515566a14610ab3578063bb542ef014610ad3578063bbc0c74214610af357600080fd5b8063802cd15f116101a65780638ea5220f116101755780638ea5220f146109e55780638ecc37fb14610a0557806395d89b4114610a25578063a3a2e89e14610a53578063a8aa1b3114610a7357600080fd5b8063802cd15f146109575780638193403114610977578063893d20e8146109975780638b42507f146109b557600080fd5b806374e8d732116101e257806374e8d732146108c857806375f0a874146108de578063778c6152146109165780637dfcbe341461093657600080fd5b806370a082311461085157806372648fec14610887578063736a83a11461089d5780637437681e146108b257600080fd5b80632d48e896116103195780634a74bb02116102a15780635cc33f74116102705780635cc33f74146107d15780635d098b38146107f157806360e719621461081157806366eb37851461082757806367ee5f091461083c57600080fd5b80634a74bb021461076457806352645cd714610785578063531484161461079b578063571ac8b0146107b157600080fd5b80633f4218e0116102e85780633f4218e0146106ad578063400343e7146106dd5780634355855a146106fd57806345ca0b4b1461072d5780634a62bb651461074357600080fd5b80632d48e896146106225780632f54bf6e14610642578063313ce567146106715780633dab52691461068d57600080fd5b806316d9962b1161039c5780631deff2161161036b5780631deff216146105985780631f53ac02146105ad57806323b872dd146105cd578063273123b7146105ed5780632b112e491461060d57600080fd5b806316d9962b1461052d57806317090ec81461054d578063180b0d7e1461056d57806318160ddd1461058357600080fd5b806310075a69116103d857806310075a69146104cb57806312835c5e146104e157806313374e7a146104f757806315f7e05e1461050d57600080fd5b80630445b6671461041557806306fdde031461043e578063095ea7b3146104795780630b006d60146104a957600080fd5b3661041057005b600080fd5b34801561042157600080fd5b5061042b60215481565b6040519081526020015b60405180910390f35b34801561044a57600080fd5b50604080518082019091526009815268084829c96409e8c40b60bb1b60208201525b6040516104359190612916565b34801561048557600080fd5b50610499610494366004612990565b610cbc565b6040519015158152602001610435565b3480156104b557600080fd5b506104c96104c43660046129bc565b610d29565b005b3480156104d757600080fd5b5061042b60115481565b3480156104ed57600080fd5b5061042b60155481565b34801561050357600080fd5b5061042b60145481565b34801561051957600080fd5b506104c96105283660046129d5565b610d61565b34801561053957600080fd5b506104c96105483660046129bc565b610dee565b34801561055957600080fd5b506104c9610568366004612a00565b610e1d565b34801561057957600080fd5b5061042b60165481565b34801561058f57600080fd5b5060025461042b565b3480156105a457600080fd5b506104c9610e57565b3480156105b957600080fd5b506104c96105c83660046129d5565b610f4c565b3480156105d957600080fd5b506104996105e8366004612a1d565b610f98565b3480156105f957600080fd5b506104c96106083660046129d5565b61105a565b34801561061957600080fd5b5061042b6110a5565b34801561062e57600080fd5b506104c961063d366004612a5e565b6110f7565b34801561064e57600080fd5b5061049961065d3660046129d5565b6000546001600160a01b0391821691161490565b34801561067d57600080fd5b5060405160098152602001610435565b34801561069957600080fd5b506104c96106a8366004612a80565b61118b565b3480156106b957600080fd5b506104996106c83660046129d5565b600a6020526000908152604090205460ff1681565b3480156106e957600080fd5b506104c96106f8366004612a9e565b6111d7565b34801561070957600080fd5b506104996107183660046129d5565b600c6020526000908152604090205460ff1681565b34801561073957600080fd5b5061042b60105481565b34801561074f57600080fd5b5060085461049990600160a01b900460ff1681565b34801561077057600080fd5b50601e5461049990600160a81b900460ff1681565b34801561079157600080fd5b5061042b60135481565b3480156107a757600080fd5b5061042b60185481565b3480156107bd57600080fd5b506104996107cc3660046129d5565b611307565b3480156107dd57600080fd5b5061042b6107ec3660046129d5565b611315565b3480156107fd57600080fd5b506104c961080c3660046129d5565b611385565b34801561081d57600080fd5b5061042b601c5481565b34801561083357600080fd5b506104c96113d1565b34801561084857600080fd5b5061042b611405565b34801561085d57600080fd5b5061042b61086c3660046129d5565b6001600160a01b031660009081526003602052604090205490565b34801561089357600080fd5b5061042b600f5481565b3480156108a957600080fd5b5061042b611473565b3480156108be57600080fd5b5061042b601f5481565b3480156108d457600080fd5b5061042b60125481565b3480156108ea57600080fd5b50601d546108fe906001600160a01b031681565b6040516001600160a01b039091168152602001610435565b34801561092257600080fd5b506104c96109313660046129bc565b6114bd565b34801561094257600080fd5b5060085461049990600160a81b900460ff1681565b34801561096357600080fd5b506104c96109723660046129d5565b6114ec565b34801561098357600080fd5b506104c96109923660046129bc565b611538565b3480156109a357600080fd5b506000546001600160a01b03166108fe565b3480156109c157600080fd5b506104996109d03660046129d5565b600b6020526000908152604090205460ff1681565b3480156109f157600080fd5b50601e546108fe906001600160a01b031681565b348015610a1157600080fd5b5061042b610a203660046129d5565b611596565b348015610a3157600080fd5b50604080518082019091526005815264084829c96b60db1b602082015261046c565b348015610a5f57600080fd5b506104c9610a6e366004612af3565b6115c9565b348015610a7f57600080fd5b50601a546108fe906001600160a01b031681565b348015610a9f57600080fd5b50610499610aae366004612990565b61161e565b348015610abf57600080fd5b506104c9610ace366004612b42565b61162b565b348015610adf57600080fd5b506104c9610aee3660046129d5565b6116c1565b348015610aff57600080fd5b50601e5461049990600160b01b900460ff1681565b348015610b2057600080fd5b5061042b600d5481565b348015610b3657600080fd5b50601b546108fe906001600160a01b031681565b348015610b5657600080fd5b506104c961170d565b348015610b6b57600080fd5b5061042b600e5481565b348015610b8157600080fd5b5061042b610b90366004612c07565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610bc757600080fd5b506104c9611750565b348015610bdc57600080fd5b506001546108fe906001600160a01b031681565b348015610bfc57600080fd5b506104c9610c0b3660046129d5565b6117a9565b348015610c1c57600080fd5b506104c9610c2b366004612af3565b611827565b348015610c3c57600080fd5b506019546108fe906001600160a01b031681565b348015610c5c57600080fd5b5061042b60205481565b348015610c7257600080fd5b506104c9610c813660046129d5565b61185b565b348015610c9257600080fd5b506104c9610ca1366004612af3565b6118ac565b348015610cb257600080fd5b5061042b60175481565b3360008181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610d179086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b03163314610d5c5760405162461bcd60e51b8152600401610d5390612c35565b60405180910390fd5b602055565b6000546001600160a01b03163314610d8b5760405162461bcd60e51b8152600401610d5390612c35565b601b54604051630afbf02f60e11b81526001600160a01b038381166004830152909116906315f7e05e906024015b600060405180830381600087803b158015610dd357600080fd5b505af1158015610de7573d6000803e3d6000fd5b5050505050565b6000546001600160a01b03163314610e185760405162461bcd60e51b8152600401610d5390612c35565b601c55565b6000546001600160a01b03163314610e475760405162461bcd60e51b8152600401610d5390612c35565b506008805460ff60a01b19169055565b6000546001600160a01b03163314610e815760405162461bcd60e51b8152600401610d5390612c35565b60004790506000610ea9601854610ea3601454856119a290919063ffffffff16565b90611960565b90506000610ec8601854610ea3601554866119a290919063ffffffff16565b90508215610f4757601e546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015610f0a573d6000803e3d6000fd5b50601d546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015610f45573d6000803e3d6000fd5b505b505050565b6000546001600160a01b03163314610f765760405162461bcd60e51b8152600401610d5390612c35565b601e80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914611045576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600482528381203382529091529190912054611020918490611a24565b6001600160a01b03851660009081526004602090815260408083203384529091529020555b611050848484611a5e565b90505b9392505050565b6000546001600160a01b031633146110845760405162461bcd60e51b8152600401610d5390612c35565b6001600160a01b03166000908152600960205260409020805460ff19169055565b6008546001600160a01b03166000908152600360205260408120546110f2906007546001600160a01b03166000908152600360205260409020546110ec9060025490611f83565b90611f83565b905090565b6000546001600160a01b031633146111215760405162461bcd60e51b8152600401610d5390612c35565b601b546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e896906044015b600060405180830381600087803b15801561116f57600080fd5b505af1158015611183573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146111b55760405162461bcd60e51b8152600401610d5390612c35565b601e8054921515600160a81b0260ff60a81b1990931692909217909155602155565b6000546001600160a01b031633146112015760405162461bcd60e51b8152600401610d5390612c35565b600f86905560108490556011829055600e889055601285905560138390556014819055601587905561123f8261123988818c89611901565b90611901565b60178190555061126860145461123960125461123960135460155461190190919063ffffffff16565b601855601754600a10156112b45760405162461bcd60e51b81526020600482015260136024820152723237b713ba1031329033b932b2b23c903232bb60691b6044820152606401610d53565b600a60185411156112fd5760405162461bcd60e51b81526020600482015260136024820152723237b713ba1031329033b932b2b23c903232bb60691b6044820152606401610d53565b5050505050505050565b6000610d2382600019610cbc565b601b54604051631730cfdd60e21b81526001600160a01b0383811660048301526000921690635cc33f74906024015b602060405180830381865afa158015611361573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d239190612c55565b6000546001600160a01b031633146113af5760405162461bcd60e51b8152600401610d5390612c35565b601d80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146113fb5760405162461bcd60e51b8152600401610d5390612c35565b611403611fc5565b565b601b546040805163997664d760e01b815290516000926001600160a01b03169163997664d79160048083019260209291908290030181865afa15801561144f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f29190612c55565b601b546040805163d54ad2a160e01b815290516000926001600160a01b03169163d54ad2a19160048083019260209291908290030181865afa15801561144f573d6000803e3d6000fd5b6000546001600160a01b031633146114e75760405162461bcd60e51b8152600401610d5390612c35565b601f55565b6000546001600160a01b031633146115165760405162461bcd60e51b8152600401610d5390612c35565b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146115625760405162461bcd60e51b8152600401610d5390612c35565b601b546040516001624d3b8760e01b03198152600481018390526001600160a01b039091169063ffb2c47990602401610db9565b601b54604051638ecc37fb60e01b81526001600160a01b0383811660048301526000921690638ecc37fb90602401611344565b6000546001600160a01b031633146115f35760405162461bcd60e51b8152600401610d5390612c35565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6000611053338484611a5e565b6000546001600160a01b031633146116555760405162461bcd60e51b8152600401610d5390612c35565b60005b81518110156116bd5760016009600084848151811061167957611679612c6e565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806116b581612c9a565b915050611658565b5050565b6000546001600160a01b031633146116eb5760405162461bcd60e51b8152600401610d5390612c35565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146117375760405162461bcd60e51b8152600401610d5390612c35565b43600d55601e805460ff60b01b1916600160b01b179055565b601b54604051630afbf02f60e11b81523360048201526001600160a01b03909116906315f7e05e90602401600060405180830381600087803b15801561179557600080fd5b505af1158015610f45573d6000803e3d6000fd5b6000546001600160a01b031633146117d35760405162461bcd60e51b8152600401610d5390612c35565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6000546001600160a01b031633146118515760405162461bcd60e51b8152600401610d5390612c35565b6116bd828261215d565b6000546001600160a01b031633146118855760405162461bcd60e51b8152600401610d5390612c35565b600180546001600160a01b0319166001600160a01b0383161790556118a98161223c565b50565b6000546001600160a01b031633146118d65760405162461bcd60e51b8152600401610d5390612c35565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b60008061190e8385612cb3565b9050838110156110535760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610d53565b600061105383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061226e565b6000826000036119b457506000610d23565b60006119c08385612ccb565b9050826119cd8583612cea565b146110535760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610d53565b60008184841115611a485760405162461bcd60e51b8152600401610d539190612916565b506000611a558486612d0c565b95945050505050565b600080546001600160a01b03858116911614801590611a8b57506000546001600160a01b03848116911614155b15611ae957601e54600160b01b900460ff16611ae95760405162461bcd60e51b815260206004820152601760248201527f54726164696e67206e6f7420796574206163746976652e0000000000000000006044820152606401610d53565b6001600160a01b03841660009081526009602052604090205460ff16158015611b2b57506001600160a01b03831660009081526009602052604090205460ff16155b611b3457600080fd5b601e54600160a01b900460ff1615611b5857611b5184848461229c565b9050611053565b601f5482111580611b8157506001600160a01b0384166000908152600b602052604090205460ff165b611bb25760405162461bcd60e51b81526020600482015260026024820152610e8f60f31b6044820152606401610d53565b6001600160a01b0383166000908152600b602052604090205460ff16158015611be45750600854600160a81b900460ff165b15611c4857602080546001600160a01b03851660009081526003909252604090912054611c119084611901565b1115611c485760405162461bcd60e51b81526020600482015260066024820152651dd85b1b195d60d21b6044820152606401610d53565b601a546001600160a01b03163314801590611c6d5750601e54600160a01b900460ff16155b8015611c825750601e54600160a81b900460ff165b8015611c9f57506021543060009081526003602052604090205410155b15611cac57611cac611fc5565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038716600090815260039091529190912054611cfe918490611a24565b6001600160a01b038516600090815260036020908152604080832093909355600a90529081205460ff16158015611d4e57506001600160a01b0384166000908152600a602052604090205460ff16155b611d585782611d63565b611d63858585612382565b6001600160a01b038516600090815260036020526040902054909150611d899082611901565b6001600160a01b038086166000908152600360209081526040808320949094559188168152600c909152205460ff16611e2d57601b546001600160a01b0386811660008181526003602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611e1a57600080fd5b505af1925050508015611e2b575060015b505b6001600160a01b0384166000908152600c602052604090205460ff16611ebe57601b546001600160a01b0385811660008181526003602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611eab57600080fd5b505af1925050508015611ebc575060015b505b601c5415611f2b57601b54601c546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c47991611efe9160040190815260200190565b600060405180830381600087803b158015611f1857600080fd5b505af1925050508015611f29575060015b505b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611f7091815260200190565b60405180910390a3506001949350505050565b600061105383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611a24565b601e805460ff60a01b1916600160a01b1790553060009081526003602052604081205460185460135491929161200691600291610ea39190829087906119a2565b90506000612025601854610ea3601254866119a290919063ffffffff16565b90506000612037826110ec8686611f83565b90506120428161244f565b600154306001600160a01b039091160361212f57600154601b5460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810185905291169063a9059cbb906044016020604051808303816000875af11580156120ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120cf9190612d23565b50601b5460405163b6b55f2560e01b8152600481018490526001600160a01b039091169063b6b55f2590602401600060405180830381600087803b15801561211657600080fd5b505af115801561212a573d6000803e3d6000fd5b505050505b6001546001600160a01b0316301461214a5761214a826126b5565b5050601e805460ff60a01b191690555050565b6001600160a01b03821630148015906121845750601a546001600160a01b03838116911614155b61218d57600080fd5b6001600160a01b0382166000908152600c60205260409020805460ff191682158015919091179091556121f357601b54604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca9690604401611155565b601b546001600160a01b0383811660008181526003602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401611155565b601b54604051638aee812760e01b81526001600160a01b03838116600483015290911690638aee812790602401610db9565b6000818361228f5760405162461bcd60e51b8152600401610d539190612916565b506000611a558486612cea565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b03861660009081526003909152918220546122ed918490611a24565b6001600160a01b03808616600090815260036020526040808220939093559085168152205461231c9083611901565b6001600160a01b0380851660008181526003602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906123709086815260200190565b60405180910390a35060019392505050565b601a5460009081906001600160a01b038581169116146123a4576017546123a8565b6018545b905060006123c5601654610ea384876119a290919063ffffffff16565b306000908152600360205260409020549091506123e29082611901565b30600081815260036020526040908190209290925590516001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906124339085815260200190565b60405180910390a36124458482611f83565b9695505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061248457612484612c6e565b6001600160a01b0392831660209182029290920101526006548251911690829060019081106124b5576124b5612c6e565b6001600160a01b03928316602091820292909201015260195460405163791ac94760e01b815291169063791ac947906124fb908590600090869030904290600401612d40565b600060405180830381600087803b15801561251557600080fd5b505af1158015612529573d6000803e3d6000fd5b505050506000479050600061254f601854610ea3601454856119a290919063ffffffff16565b9050600061256e601854610ea3601554866119a290919063ffffffff16565b905060006125926002610ea3601854610ea3601354896119a290919063ffffffff16565b9050831561261157601e546040516001600160a01b039091169083156108fc029084906000818181858888f193505050501580156125d4573d6000803e3d6000fd5b50601d546040516001600160a01b039091169084156108fc029085906000818181858888f1935050505015801561260f573d6000803e3d6000fd5b505b80156111835760195460405163f305d71960e01b815230600482015260248101839052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612685573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906126aa9190612db1565b505050505050505050565b604080516003808252608082019092526000916020820160608036833701905050905030816000815181106126ec576126ec612c6e565b6001600160a01b03928316602091820292909201015260065482519116908290600190811061271d5761271d612c6e565b6001600160a01b03928316602091820292909201015260015482519116908290600290811061274e5761274e612c6e565b6001600160a01b039283166020918202929092010152601954604051635c11d79560e01b8152911690635c11d79590612794908590600090869030904290600401612d40565b600060405180830381600087803b1580156127ae57600080fd5b505af11580156127c2573d6000803e3d6000fd5b50506001546040516370a0823160e01b8152306004820152600093506001600160a01b0390911691506370a0823190602401602060405180830381865afa158015612811573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128359190612c55565b600154601b5460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810184905292935060009291169063a9059cbb906044016020604051808303816000875af1158015612890573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128b49190612d23565b90508015610f4557601b5460405163b6b55f2560e01b8152600481018490526001600160a01b039091169063b6b55f2590602401600060405180830381600087803b15801561290257600080fd5b505af11580156112fd573d6000803e3d6000fd5b600060208083528351808285015260005b8181101561294357858101830151858201604001528201612927565b81811115612955576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146118a957600080fd5b803561298b8161296b565b919050565b600080604083850312156129a357600080fd5b82356129ae8161296b565b946020939093013593505050565b6000602082840312156129ce57600080fd5b5035919050565b6000602082840312156129e757600080fd5b81356110538161296b565b80151581146118a957600080fd5b600060208284031215612a1257600080fd5b8135611053816129f2565b600080600060608486031215612a3257600080fd5b8335612a3d8161296b565b92506020840135612a4d8161296b565b929592945050506040919091013590565b60008060408385031215612a7157600080fd5b50508035926020909101359150565b60008060408385031215612a9357600080fd5b82356129ae816129f2565b600080600080600080600080610100898b031215612abb57600080fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b60008060408385031215612b0657600080fd5b8235612b118161296b565b91506020830135612b21816129f2565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60006020808385031215612b5557600080fd5b823567ffffffffffffffff80821115612b6d57600080fd5b818501915085601f830112612b8157600080fd5b813581811115612b9357612b93612b2c565b8060051b604051601f19603f83011681018181108582111715612bb857612bb8612b2c565b604052918252848201925083810185019188831115612bd657600080fd5b938501935b82851015612bfb57612bec85612980565b84529385019392850192612bdb565b98975050505050505050565b60008060408385031215612c1a57600080fd5b8235612c258161296b565b91506020830135612b218161296b565b60208082526006908201526510a7bbb732b960d11b604082015260600190565b600060208284031215612c6757600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201612cac57612cac612c84565b5060010190565b60008219821115612cc657612cc6612c84565b500190565b6000816000190483118215151615612ce557612ce5612c84565b500290565b600082612d0757634e487b7160e01b600052601260045260246000fd5b500490565b600082821015612d1e57612d1e612c84565b500390565b600060208284031215612d3557600080fd5b8151611053816129f2565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612d905784516001600160a01b031683529383019391830191600101612d6b565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612dc657600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220a2d3c501533b40a42a111621a75a19ef736d9b195591daf9db047edfcc651a5a64736f6c634300080d0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000c103bbeefdbdabca0583f32da95c927ca51a239d

-----Decoded View---------------
Arg [0] : _owner (address): 0xC103bBeeFdBdAbCA0583F32da95c927Ca51A239D

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000c103bbeefdbdabca0583f32da95c927ca51a239d


Deployed Bytecode Sourcemap

12493:15513:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14720:52;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;14720:52:0;;;;;;;;19850:80;;;;;;;;;;-1:-1:-1;19922:5:0;;;;;;;;;;;;-1:-1:-1;;;19922:5:0;;;;19850:80;;;;;;;:::i;20276:216::-;;;;;;;;;;-1:-1:-1;20276:216:0;;;;;:::i;:::-;;:::i;:::-;;;1558:14:1;;1551:22;1533:41;;1521:2;1506:18;20276:216:0;1393:187:1;17197:110:0;;;;;;;;;;-1:-1:-1;17197:110:0;;;;;:::i;:::-;;:::i;:::-;;13584:35;;;;;;;;;;;;;;;;13749:30;;;;;;;;;;;;;;;;13706:36;;;;;;;;;;;;;;;;27193:110;;;;;;;;;;-1:-1:-1;27193:110:0;;;;;:::i;:::-;;:::i;19286:125::-;;;;;;;;;;-1:-1:-1;19286:125:0;;;;;:::i;:::-;;:::i;17315:100::-;;;;;;;;;;-1:-1:-1;17315:100:0;;;;;:::i;:::-;;:::i;13792:33::-;;;;;;;;;;;;;;;;19580:88;;;;;;;;;;-1:-1:-1;19653:12:0;;19580:88;;26402:484;;;;;;;;;;;;;:::i;17856:123::-;;;;;;;;;;-1:-1:-1;17856:123:0;;;;;:::i;:::-;;:::i;20790:366::-;;;;;;;;;;-1:-1:-1;20790:366:0;;;;;:::i;:::-;;:::i;18703:90::-;;;;;;;;;;-1:-1:-1;18703:90:0;;;;;:::i;:::-;;:::i;19430:142::-;;;;;;;;;;;;;:::i;18323:198::-;;;;;;;;;;-1:-1:-1;18323:198:0;;;;;:::i;:::-;;:::i;3814:103::-;;;;;;;;;;-1:-1:-1;3814:103:0;;;;;:::i;:::-;3869:4;3904:5;-1:-1:-1;;;;;3893:16:0;;;3904:5;;3893:16;;3814:103;19674:80;;;;;;;;;;-1:-1:-1;19674:80:0;;12736:1;3507:36:1;;3495:2;3480:18;19674:80:0;3365:184:1;18116:199:0;;;;;;;;;;-1:-1:-1;18116:199:0;;;;;:::i;:::-;;:::i;13276:44::-;;;;;;;;;;-1:-1:-1;13276:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16207:880;;;;;;;;;;-1:-1:-1;16207:880:0;;;;;:::i;:::-;;:::i;13382:49::-;;;;;;;;;;-1:-1:-1;13382:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;13549:28;;;;;;;;;;;;;;;;13155:33;;;;;;;;;;-1:-1:-1;13155:33:0;;;;-1:-1:-1;;;13155:33:0;;;;;;14406:40;;;;;;;;;;-1:-1:-1;14406:40:0;;;;-1:-1:-1;;;14406:40:0;;;;;;13670:29;;;;;;;;;;;;;;;;13932:96;;;;;;;;;;;;;;;;20500:122;;;;;;;;;;-1:-1:-1;20500:122:0;;;;;:::i;:::-;;:::i;27725:157::-;;;;;;;;;;-1:-1:-1;27725:157:0;;;;;:::i;:::-;;:::i;17701:147::-;;;;;;;;;;-1:-1:-1;17701:147:0;;;;;:::i;:::-;;:::i;14142:33::-;;;;;;;;;;;;;;;;26320:74;;;;;;;;;;;;;:::i;27479:115::-;;;;;;;;;;;;;:::i;20020:105::-;;;;;;;;;;-1:-1:-1;20020:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;20104:18:0;20086:7;20104:18;;;:9;:18;;;;;;;20020:105;13510:32;;;;;;;;;;;;;;;;27606:111;;;;;;;;;;;;;:::i;14615:44::-;;;;;;;;;;;;;;;;13630:33;;;;;;;;;;;;;;;;14184:92;;;;;;;;;;-1:-1:-1;14184:92:0;;;;-1:-1:-1;;;;;14184:92:0;;;;;;-1:-1:-1;;;;;4714:32:1;;;4696:51;;4684:2;4669:18;14184:92:0;4534:219:1;17096:93:0;;;;;;;;;;-1:-1:-1;17096:93:0;;;;;:::i;:::-;;:::i;13195:26::-;;;;;;;;;;-1:-1:-1;13195:26:0;;;;-1:-1:-1;;;13195:26:0;;;;;;16070:129;;;;;;;;;;-1:-1:-1;16070:129:0;;;;;:::i;:::-;;:::i;27890:113::-;;;;;;;;;;-1:-1:-1;27890:113:0;;;;;:::i;:::-;;:::i;19936:78::-;;;;;;;;;;-1:-1:-1;19988:7:0;20006:5;-1:-1:-1;;;;;20006:5:0;19936:78;;13327:48;;;;;;;;;;-1:-1:-1;13327:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;14283:86;;;;;;;;;;-1:-1:-1;14283:86:0;;;;-1:-1:-1;;;;;14283:86:0;;;27315:156;;;;;;;;;;-1:-1:-1;27315:156:0;;;;;:::i;:::-;;:::i;19760:84::-;;;;;;;;;;-1:-1:-1;19834:7:0;;;;;;;;;;;;-1:-1:-1;;;19834:7:0;;;;19760:84;;17427:122;;;;;;;;;;-1:-1:-1;17427:122:0;;;;;:::i;:::-;;:::i;14069:19::-;;;;;;;;;;-1:-1:-1;14069:19:0;;;;-1:-1:-1;;;;;14069:19:0;;;20630:152;;;;;;;;;;-1:-1:-1;20630:152:0;;;;;:::i;:::-;;:::i;18529:166::-;;;;;;;;;;-1:-1:-1;18529:166:0;;;;;:::i;:::-;;:::i;17987:116::-;;;;;;;;;;-1:-1:-1;17987:116:0;;;;;:::i;:::-;;:::i;14453:33::-;;;;;;;;;;-1:-1:-1;14453:33:0;;;;-1:-1:-1;;;14453:33:0;;;;;;13440:25;;;;;;;;;;;;;;;;14097:38;;;;;;;;;;-1:-1:-1;14097:38:0;;;;-1:-1:-1;;;;;14097:38:0;;;26934:117;;;;;;;;;;;;;:::i;13474:29::-;;;;;;;;;;;;;;;;20131:133;;;;;;;;;;-1:-1:-1;20131:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;20233:19:0;;;20215:7;20233:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;20131:133;27091:90;;;;;;;;;;;;;:::i;12568:26::-;;;;;;;;;;-1:-1:-1;12568:26:0;;;;-1:-1:-1;;;;;12568:26:0;;;4042:136;;;;;;;;;;-1:-1:-1;4042:136:0;;;;;:::i;:::-;;:::i;19146:132::-;;;;;;;;;;-1:-1:-1;19146:132:0;;;;;:::i;:::-;;:::i;14038:24::-;;;;;;;;;;-1:-1:-1;14038:24:0;;;;-1:-1:-1;;;;;14038:24:0;;;14666:47;;;;;;;;;;;;;;;;15900:162;;;;;;;;;;-1:-1:-1;15900:162:0;;;;;:::i;:::-;;:::i;17557:136::-;;;;;;;;;;-1:-1:-1;17557:136:0;;;;;:::i;:::-;;:::i;13834:91::-;;;;;;;;;;;;;;;;20276:216;20380:10;20351:4;20368:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;20368:32:0;;;;;;;;;;:41;;;20425:37;20351:4;;20368:32;;20425:37;;;;20403:6;160:25:1;;148:2;133:18;;14:177;20425:37:0;;;;;;;;-1:-1:-1;20480:4:0;20276:216;;;;;:::o;17197:110::-;3869:4;3904:5;-1:-1:-1;;;;;3904:5:0;3721:10;3893:16;3705:38;;;;-1:-1:-1;;;3705:38:0;;;;;;;:::i;:::-;;;;;;;;;17274:9:::1;:25:::0;17197:110::o;27193:::-;3869:4;3904:5;-1:-1:-1;;;;;3904:5:0;3721:10;3893:16;3705:38;;;;-1:-1:-1;;;3705:38:0;;;;;;;:::i;:::-;27262:11:::1;::::0;:33:::1;::::0;-1:-1:-1;;;27262:33:0;;-1:-1:-1;;;;;4714:32:1;;;27262:33:0::1;::::0;::::1;4696:51:1::0;27262:11:0;;::::1;::::0;:25:::1;::::0;4669:18:1;;27262:33:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;27193:110:::0;:::o;19286:125::-;3869:4;3904:5;-1:-1:-1;;;;;3904:5:0;3721:10;3893:16;3705:38;;;;-1:-1:-1;;;3705:38:0;;;;;;;:::i;:::-;19371:14:::1;:32:::0;19286:125::o;17315:100::-;3869:4;3904:5;-1:-1:-1;;;;;3904:5:0;3721:10;3893:16;3705:38;;;;-1:-1:-1;;;3705:38:0;;;;;;;:::i;:::-;-1:-1:-1;17385:14:0::1;:22:::0;;-1:-1:-1;;;;17385:22:0::1;::::0;;17315:100::o;26402:484::-;3869:4;3904:5;-1:-1:-1;;;;;3904:5:0;3721:10;3893:16;3705:38;;;;-1:-1:-1;;;3705:38:0;;;;;;;:::i;:::-;26457:26:::1;26486:21;26457:50;;26518:27;26548:58;26593:12;;26548:40;26571:16;;26548:18;:22;;:40;;;;:::i;:::-;:44:::0;::::1;:58::i;:::-;26518:88;;26617:21;26641:52;26680:12;;26641:34;26664:10;;26641:18;:22;;:34;;;;:::i;:52::-;26617:76:::0;-1:-1:-1;26707:22:0;;26704:175:::1;;26763:9;::::0;26755:42:::1;::::0;-1:-1:-1;;;;;26763:9:0;;::::1;::::0;26755:42;::::1;;;::::0;26783:13;;26763:9:::1;26755:42:::0;26763:9;26755:42;26783:13;26763:9;26755:42;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;26821:15:0::1;::::0;26813:54:::1;::::0;-1:-1:-1;;;;;26821:15:0;;::::1;::::0;26813:54;::::1;;;::::0;26847:19;;26821:15:::1;26813:54:::0;26821:15;26813:54;26847:19;26821:15;26813:54;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;26704:175;26446:440;;;26402:484::o:0;17856:123::-;3869:4;3904:5;-1:-1:-1;;;;;3904:5:0;3721:10;3893:16;3705:38;;;;-1:-1:-1;;;3705:38:0;;;;;;;:::i;:::-;17938:9:::1;:33:::0;;-1:-1:-1;;;;;;17938:33:0::1;-1:-1:-1::0;;;;;17938:33:0;;;::::1;::::0;;;::::1;::::0;;17856:123::o;20790:366::-;-1:-1:-1;;;;;20910:19:0;;20890:4;20910:19;;;:11;:19;;;;;;;;20930:10;20910:31;;;;;;;;-1:-1:-1;;20910:52:0;20907:186;;21012:69;;;;;;;;;;;-1:-1:-1;;;21012:69:0;;;;;;;;-1:-1:-1;;;;;21012:19:0;;-1:-1:-1;21012:19:0;;;:11;:19;;;;;21032:10;21012:31;;;;;;;;;;:69;;21048:6;;21012:35;:69::i;:::-;-1:-1:-1;;;;;20978:19:0;;;;;;:11;:19;;;;;;;;20998:10;20978:31;;;;;;;:103;20907:186;21112:36;21122:6;21130:9;21141:6;21112:9;:36::i;:::-;21105:43;;20790:366;;;;;;:::o;18703:90::-;3869:4;3904:5;-1:-1:-1;;;;;3904:5:0;3721:10;3893:16;3705:38;;;;-1:-1:-1;;;3705:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18765:12:0::1;18780:5;18765:12:::0;;;:4:::1;:12;::::0;;;;:20;;-1:-1:-1;;18765:20:0::1;::::0;;18703:90::o;19430:142::-;19558:4;;-1:-1:-1;;;;;19558:4:0;19483:7;20104:18;;;:9;:18;;;;;;19510:54;;19537:4;;-1:-1:-1;;;;;19537:4:0;20086:7;20104:18;;;:9;:18;;;;;;19510:33;;:12;;;:16;:33::i;:::-;:37;;:54::i;:::-;19503:61;;19430:142;:::o;18323:198::-;3869:4;3904:5;-1:-1:-1;;;;;3904:5:0;3721:10;3893:16;3705:38;;;;-1:-1:-1;;;3705:38:0;;;;;;;:::i;:::-;18436:11:::1;::::0;:69:::1;::::0;-1:-1:-1;;;18436:69:0;;::::1;::::0;::::1;8262:25:1::0;;;8303:18;;;8296:34;;;-1:-1:-1;;;;;18436:11:0;;::::1;::::0;:35:::1;::::0;8235:18:1;;18436:69:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;18323:198:::0;;:::o;18116:199::-;3869:4;3904:5;-1:-1:-1;;;;;3904:5:0;3721:10;3893:16;3705:38;;;;-1:-1:-1;;;3705:38:0;;;;;;;:::i;:::-;18225:21:::1;:39:::0;;;::::1;;-1:-1:-1::0;;;18225:39:0::1;-1:-1:-1::0;;;;18225:39:0;;::::1;::::0;;;::::1;::::0;;;18275:13:::1;:32:::0;18116:199::o;16207:880::-;3869:4;3904:5;-1:-1:-1;;;;;3904:5:0;3721:10;3893:16;3705:38;;;;-1:-1:-1;;;3705:38:0;;;;;;;:::i;:::-;16464:12:::1;:30:::0;;;16505:8:::1;:22:::0;;;16538:15:::1;:36:::0;;;16585:9:::1;:24:::0;;;16622:13:::1;:32:::0;;;16665:9:::1;:24:::0;;;16700:16:::1;:38:::0;;;16749:10:::1;:26:::0;;;16802:62:::1;16556:18:::0;16802:41:::1;16479:15:::0;16802:41;16597:12;16516:11;16802:13:::1;:23::i;:::-;:27:::0;::::1;:41::i;:62::-;16788:11;:76;;;;16890:66;16939:16;;16890:44;16920:13;;16890:25;16905:9;;16890:10;;:14;;:25;;;;:::i;:66::-;16875:12;:81:::0;16977:11:::1;::::0;16992:2:::1;-1:-1:-1::0;16977:17:0::1;16969:49;;;::::0;-1:-1:-1;;;16969:49:0;;8543:2:1;16969:49:0::1;::::0;::::1;8525:21:1::0;8582:2;8562:18;;;8555:30;-1:-1:-1;;;8601:18:1;;;8594:49;8660:18;;16969:49:0::1;8341:343:1::0;16969:49:0::1;17053:2;17037:12;;:18;;17029:50;;;::::0;-1:-1:-1;;;17029:50:0;;8543:2:1;17029:50:0::1;::::0;::::1;8525:21:1::0;8582:2;8562:18;;;8555:30;-1:-1:-1;;;8601:18:1;;;8594:49;8660:18;;17029:50:0::1;8341:343:1::0;17029:50:0::1;16207:880:::0;;;;;;;;:::o;20500:122::-;20555:4;20579:35;20587:7;-1:-1:-1;;20579:7:0;:35::i;27725:157::-;27828:11;;:46;;-1:-1:-1;;;27828:46:0;;-1:-1:-1;;;;;4714:32:1;;;27828:46:0;;;4696:51:1;27801:7:0;;27828:11;;:33;;4669:18:1;;27828:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17701:147::-;3869:4;3904:5;-1:-1:-1;;;;;3904:5:0;3721:10;3893:16;3705:38;;;;-1:-1:-1;;;3705:38:0;;;;;;;:::i;:::-;17795:15:::1;:45:::0;;-1:-1:-1;;;;;;17795:45:0::1;-1:-1:-1::0;;;;;17795:45:0;;;::::1;::::0;;;::::1;::::0;;17701:147::o;26320:74::-;3869:4;3904:5;-1:-1:-1;;;;;3904:5:0;3721:10;3893:16;3705:38;;;;-1:-1:-1;;;3705:38:0;;;;;;;:::i;:::-;26376:10:::1;:8;:10::i;:::-;26320:74::o:0;27479:115::-;27558:11;;:28;;;-1:-1:-1;;;27558:28:0;;;;27531:7;;-1:-1:-1;;;;;27558:11:0;;:26;;:28;;;;;;;;;;;;;;:11;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;27606:111::-;27683:11;;:26;;;-1:-1:-1;;;27683:26:0;;;;27656:7;;-1:-1:-1;;;;;27683:11:0;;:24;;:26;;;;;;;;;;;;;;:11;:26;;;;;;;;;;;;;;17096:93;3869:4;3904:5;-1:-1:-1;;;;;3904:5:0;3721:10;3893:16;3705:38;;;;-1:-1:-1;;;3705:38:0;;;;;;;:::i;:::-;17165:5:::1;:16:::0;17096:93::o;16070:129::-;3869:4;3904:5;-1:-1:-1;;;;;3904:5:0;3721:10;3893:16;3705:38;;;;-1:-1:-1;;;3705:38:0;;;;;;;:::i;:::-;16163:11:::1;:28:::0;;-1:-1:-1;;;;;;16163:28:0::1;-1:-1:-1::0;;;;;16163:28:0;;;::::1;::::0;;;::::1;::::0;;16070:129::o;27890:113::-;3869:4;3904:5;-1:-1:-1;;;;;3904:5:0;3721:10;3893:16;3705:38;;;;-1:-1:-1;;;3705:38:0;;;;;;;:::i;:::-;27965:11:::1;::::0;:30:::1;::::0;-1:-1:-1;;;;;;27965:30:0;;::::1;::::0;::::1;160:25:1::0;;;-1:-1:-1;;;;;27965:11:0;;::::1;::::0;:19:::1;::::0;133:18:1;;27965:30:0::1;14:177:1::0;27315:156:0;27416:11;;:47;;-1:-1:-1;;;27416:47:0;;-1:-1:-1;;;;;4714:32:1;;;27416:47:0;;;4696:51:1;27389:7:0;;27416:11;;:34;;4669:18:1;;27416:47:0;4534:219:1;17427:122:0;3869:4;3904:5;-1:-1:-1;;;;;3904:5:0;3721:10;3893:16;3705:38;;;;-1:-1:-1;;;3705:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17513:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;17513:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17427:122::o;20630:152::-;20710:4;20734:40;20744:10;20756:9;20767:6;20734:9;:40::i;18529:166::-;3869:4;3904:5;-1:-1:-1;;;;;3904:5:0;3721:10;3893:16;3705:38;;;;-1:-1:-1;;;3705:38:0;;;;;;;:::i;:::-;18605:6:::1;18600:88;18621:5;:12;18617:1;:16;18600:88;;;18672:4;18655;:14;18660:5;18666:1;18660:8;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;18655:14:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;18655:14:0;:21;;-1:-1:-1;;18655:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18635:3;::::1;::::0;::::1;:::i;:::-;;;;18600:88;;;;18529:166:::0;:::o;17987:116::-;3869:4;3904:5;-1:-1:-1;;;;;3904:5:0;3721:10;3893:16;3705:38;;;;-1:-1:-1;;;3705:38:0;;;;;;;:::i;:::-;18073:5:::1;:22:::0;;-1:-1:-1;;;;;;18073:22:0::1;-1:-1:-1::0;;;;;18073:22:0;;;::::1;::::0;;;::::1;::::0;;17987:116::o;26934:117::-;3869:4;3904:5;-1:-1:-1;;;;;3904:5:0;3721:10;3893:16;3705:38;;;;-1:-1:-1;;;3705:38:0;;;;;;;:::i;:::-;27000:12:::1;26987:10;:25:::0;27023:13:::1;:20:::0;;-1:-1:-1;;;;27023:20:0::1;-1:-1:-1::0;;;27023:20:0::1;::::0;;26934:117::o;27091:90::-;27136:11;;:37;;-1:-1:-1;;;27136:37:0;;27162:10;27136:37;;;4696:51:1;-1:-1:-1;;;;;27136:11:0;;;;:25;;4669:18:1;;27136:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4042:136;3869:4;3904:5;-1:-1:-1;;;;;3904:5:0;3721:10;3893:16;3705:38;;;;-1:-1:-1;;;3705:38:0;;;;;;;:::i;:::-;4118:5:::1;:11:::0;;-1:-1:-1;;;;;;4118:11:0::1;-1:-1:-1::0;;;;;4118:11:0;::::1;::::0;;::::1;::::0;;;4145:25:::1;::::0;4696:51:1;;;4145:25:0::1;::::0;4684:2:1;4669:18;4145:25:0::1;;;;;;;4042:136:::0;:::o;19146:132::-;3869:4;3904:5;-1:-1:-1;;;;;3904:5:0;3721:10;3893:16;3705:38;;;;-1:-1:-1;;;3705:38:0;;;;;;;:::i;:::-;19234:36:::1;19255:6;19263;19234:20;:36::i;15900:162::-:0;3869:4;3904:5;-1:-1:-1;;;;;3904:5:0;3721:10;3893:16;3705:38;;;;-1:-1:-1;;;3705:38:0;;;;;;;:::i;:::-;15981:11:::1;:28:::0;;-1:-1:-1;;;;;;15981:28:0::1;-1:-1:-1::0;;;;;15981:28:0;::::1;;::::0;;16020:34:::1;15981:28:::0;16020:18:::1;:34::i;:::-;15900:162:::0;:::o;17557:136::-;3869:4;3904:5;-1:-1:-1;;;;;3904:5:0;3721:10;3893:16;3705:38;;;;-1:-1:-1;;;3705:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17653:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;17653:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17557:136::o;1230:181::-;1288:7;;1320:5;1324:1;1320;:5;:::i;:::-;1308:17;;1349:1;1344;:6;;1336:46;;;;-1:-1:-1;;;1336:46:0;;9833:2:1;1336:46:0;;;9815:21:1;9872:2;9852:18;;;9845:30;9911:29;9891:18;;;9884:57;9958:18;;1336:46:0;9631:351:1;2013:132:0;2071:7;2098:39;2102:1;2105;2098:39;;;;;;;;;;;;;;;;;:3;:39::i;1757:250::-;1815:7;1839:1;1844;1839:6;1835:47;;-1:-1:-1;1869:1:0;1862:8;;1835:47;1894:9;1906:5;1910:1;1906;:5;:::i;:::-;1894:17;-1:-1:-1;1939:1:0;1930:5;1934:1;1894:17;1930:5;:::i;:::-;:10;1922:56;;;;-1:-1:-1;;;1922:56:0;;10584:2:1;1922:56:0;;;10566:21:1;10623:2;10603:18;;;10596:30;10662:34;10642:18;;;10635:62;-1:-1:-1;;;10713:18:1;;;10706:31;10754:19;;1922:56:0;10382:397:1;1559:192:0;1645:7;1681:12;1673:6;;;;1665:29;;;;-1:-1:-1;;;1665:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1705:9:0;1717:5;1721:1;1717;:5;:::i;:::-;1705:17;1559:192;-1:-1:-1;;;;;1559:192:0:o;21164:1535::-;21252:4;21282:5;;-1:-1:-1;;;;;21273:14:0;;;21282:5;;21273:14;;;;:35;;-1:-1:-1;21303:5:0;;-1:-1:-1;;;;;21291:17:0;;;21303:5;;21291:17;;21273:35;21269:90;;;21318:13;;-1:-1:-1;;;21318:13:0;;;;21310:49;;;;-1:-1:-1;;;21310:49:0;;11116:2:1;21310:49:0;;;11098:21:1;11155:2;11135:18;;;11128:30;11194:25;11174:18;;;11167:53;11237:18;;21310:49:0;10914:347:1;21310:49:0;-1:-1:-1;;;;;21421:12:0;;;;;;:4;:12;;;;;;;;21420:13;:33;;;;-1:-1:-1;;;;;;21438:15:0;;;;;;:4;:15;;;;;;;;21437:16;21420:33;21412:42;;;;;;21470:16;;-1:-1:-1;;;21470:16:0;;;;21467:73;;;21496:41;21511:6;21519:9;21530:6;21496:14;:41::i;:::-;21489:48;;;;21467:73;21570:5;;21560:6;:15;;:42;;;-1:-1:-1;;;;;;21579:23:0;;;;;;:15;:23;;;;;;;;21560:42;21552:57;;;;-1:-1:-1;;;21552:57:0;;11468:2:1;21552:57:0;;;11450:21:1;11507:1;11487:18;;;11480:29;-1:-1:-1;;;11525:18:1;;;11518:32;11567:18;;21552:57:0;11266:325:1;21552:57:0;-1:-1:-1;;;;;21626:26:0;;;;;;:15;:26;;;;;;;;21625:27;:38;;;;-1:-1:-1;21656:7:0;;-1:-1:-1;;;21656:7:0;;;;21625:38;21622:143;;;21733:9;;;-1:-1:-1;;;;;21697:20:0;;;;;;:9;:20;;;;;;;;:32;;21722:6;21697:24;:32::i;:::-;:45;;21689:64;;;;-1:-1:-1;;;21689:64:0;;11798:2:1;21689:64:0;;;11780:21:1;11837:1;11817:18;;;11810:29;-1:-1:-1;;;11855:18:1;;;11848:36;11901:18;;21689:64:0;11596:329:1;21689:64:0;21794:4;;-1:-1:-1;;;;;21794:4:0;21780:10;:18;;;;:39;;-1:-1:-1;21803:16:0;;-1:-1:-1;;;21803:16:0;;;;21802:17;21780:39;:64;;;;-1:-1:-1;21823:21:0;;-1:-1:-1;;;21823:21:0;;;;21780:64;:109;;;;-1:-1:-1;21876:13:0;;21866:4;21848:24;;;;:9;:24;;;;;;:41;;21780:109;21777:128;;;21892:10;:8;:10::i;:::-;21937:53;;;;;;;;;;;-1:-1:-1;;;21937:53:0;;;;;;;;-1:-1:-1;;;;;21937:17:0;;-1:-1:-1;21937:17:0;;;:9;:17;;;;;;;;:53;;21959:6;;21937:21;:53::i;:::-;-1:-1:-1;;;;;21917:17:0;;;;;;:9;:17;;;;;;;;:73;;;;22034:11;:19;;;;;;;;22033:20;:47;;;;-1:-1:-1;;;;;;22058:22:0;;;;;;:11;:22;;;;;;;;22057:23;22033:47;:93;;22120:6;22033:93;;;22083:34;22091:6;22099:9;22110:6;22083:7;:34::i;:::-;-1:-1:-1;;;;;22160:20:0;;;;;;:9;:20;;;;;;22011:115;;-1:-1:-1;22160:37:0;;22011:115;22160:24;:37::i;:::-;-1:-1:-1;;;;;22137:20:0;;;;;;;:9;:20;;;;;;;;:60;;;;22243:24;;;;;:16;:24;;;;;;;22239:119;;22288:11;;-1:-1:-1;;;;;22317:17:0;;;22288:11;22317:17;;;:9;:17;;;;;;;;22288:47;;-1:-1:-1;;;22288:47:0;;;;;12104:51:1;;;;12171:18;;;12164:34;22288:11:0;;;:20;;12077:18:1;;22288:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22284:63;;-1:-1:-1;;;;;22374:27:0;;;;;;:16;:27;;;;;;;;22370:129;;22422:11;;-1:-1:-1;;;;;22454:20:0;;;22422:11;22454:20;;;:9;:20;;;;;;;;22422:53;;-1:-1:-1;;;22422:53:0;;;;;12104:51:1;;;;12171:18;;;12164:34;22422:11:0;;;:20;;12077:18:1;;22422:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22418:69;;22515:14;;:18;22511:101;;22554:11;;22574:14;;22554:35;;-1:-1:-1;;;;;;22554:35:0;;-1:-1:-1;;;;;22554:11:0;;;;:19;;:35;;;;160:25:1;;;148:2;133:18;;14:177;22554:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22550:51;;22646:9;-1:-1:-1;;;;;22629:40:0;22638:6;-1:-1:-1;;;;;22629:40:0;;22657:11;22629:40;;;;160:25:1;;148:2;133:18;;14:177;22629:40:0;;;;;;;;-1:-1:-1;22687:4:0;;21164:1535;-1:-1:-1;;;;21164:1535:0:o;1417:136::-;1475:7;1502:43;1506:1;1509;1502:43;;;;;;;;;;;;;;;;;:3;:43::i;23511:789::-;14529:16;:23;;-1:-1:-1;;;;14529:23:0;-1:-1:-1;;;14529:23:0;;;23617:4:::1;14529:23:::0;23599:24;;;:9:::1;:24;::::0;;;;;23691:12:::1;::::0;23676:9:::1;::::0;23599:24;;14529:23;23656:55:::1;::::0;23709:1:::1;::::0;23656:48:::1;::::0;23691:12;23656:48;;23599:24;;23656:19:::1;:30::i;:55::-;23634:77;;23722:28;23753:52;23792:12;;23753:34;23773:13;;23753:15;:19;;:34;;;;:::i;:52::-;23722:83:::0;-1:-1:-1;23816:26:0::1;23845:58;23722:83:::0;23845:32:::1;:15:::0;23865:11;23845:19:::1;:32::i;:58::-;23816:87;;23916:36;23933:18;23916:16;:36::i;:::-;23977:11;::::0;24001:4:::1;-1:-1:-1::0;;;;;23977:11:0;;::::1;23969:37:::0;23965:198:::1;;24030:11;::::0;24060::::1;::::0;24023:72:::1;::::0;-1:-1:-1;;;24023:72:0;;-1:-1:-1;;;;;24060:11:0;;::::1;24023:72;::::0;::::1;12104:51:1::0;12171:18;;;12164:34;;;24030:11:0;::::1;::::0;24023:28:::1;::::0;12077:18:1;;24023:72:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;24110:11:0::1;::::0;:41:::1;::::0;-1:-1:-1;;;24110:41:0;;::::1;::::0;::::1;160:25:1::0;;;-1:-1:-1;;;;;24110:11:0;;::::1;::::0;:19:::1;::::0;133:18:1;;24110:41:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;23965:198;24187:11;::::0;-1:-1:-1;;;;;24187:11:0::1;24211:4;24179:37;24175:116;;24233:46;24258:20;24233:24;:46::i;:::-;-1:-1:-1::0;;14575:16:0;:24;;-1:-1:-1;;;;14575:24:0;;;-1:-1:-1;;23511:789:0:o;18801:337::-;-1:-1:-1;;;;;18888:23:0;;18906:4;18888:23;;;;:41;;-1:-1:-1;18925:4:0;;-1:-1:-1;;;;;18915:14:0;;;18925:4;;18915:14;;18888:41;18880:50;;;;;;-1:-1:-1;;;;;18941:24:0;;;;;;:16;:24;;;;;:33;;-1:-1:-1;;18941:33:0;;;;;;;;;;;;18985:146;;19010:11;;:31;;-1:-1:-1;;;19010:31:0;;-1:-1:-1;;;;;12122:32:1;;;19010:31:0;;;12104:51:1;19010:11:0;12171:18:1;;;12164:34;19010:11:0;;;;:20;;12077:18:1;;19010:31:0;11930:274:1;18985:146:0;19072:11;;-1:-1:-1;;;;;19101:17:0;;;19072:11;19101:17;;;:9;:17;;;;;;;;19072:47;;-1:-1:-1;;;19072:47:0;;;;;12104:51:1;;;;12171:18;;;12164:34;19072:11:0;;;:20;;12077:18:1;;19072:47:0;11930:274:1;15770:122:0;15842:11;;:42;;-1:-1:-1;;;15842:42:0;;-1:-1:-1;;;;;4714:32:1;;;15842:42:0;;;4696:51:1;15842:11:0;;;;:26;;4669:18:1;;15842:42:0;4534:219:1;2151:345:0;2237:7;2339:12;2332:5;2324:28;;;;-1:-1:-1;;;2324:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2363:9:0;2375:5;2379:1;2375;:5;:::i;22711:330::-;22841:53;;;;;;;;;;;-1:-1:-1;;;22841:53:0;;;;;;;;-1:-1:-1;;;;;22841:17:0;;22804:4;22841:17;;;:9;:17;;;;;;;:53;;22863:6;;22841:21;:53::i;:::-;-1:-1:-1;;;;;22821:17:0;;;;;;;:9;:17;;;;;;:73;;;;22928:20;;;;;;;:32;;22953:6;22928:24;:32::i;:::-;-1:-1:-1;;;;;22905:20:0;;;;;;;:9;:20;;;;;;;:55;;;;22976:35;;;;;;;;;;23004:6;160:25:1;;148:2;133:18;;14:177;22976:35:0;;;;;;;;-1:-1:-1;23029:4:0;22711:330;;;;;:::o;23055:448::-;23195:4;;23141:7;;;;-1:-1:-1;;;;;23195:17:0;;;:4;;:17;:46;;23230:11;;23195:46;;;23215:12;;23195:46;23171:70;;23252:17;23272:45;23302:14;;23272:25;23283:13;23272:6;:10;;:25;;;;:::i;:45::-;23375:4;23357:24;;;;:9;:24;;;;;;23252:65;;-1:-1:-1;23357:39:0;;23252:65;23357:28;:39::i;:::-;23348:4;23330:24;;;;:9;:24;;;;;;;:66;;;;23412:42;;-1:-1:-1;;;;;23412:42:0;;;;;;;23444:9;160:25:1;;148:2;133:18;;14:177;23412:42:0;;;;;;;;23474:21;:6;23485:9;23474:10;:21::i;:::-;23467:28;23055:448;-1:-1:-1;;;;;;23055:448:0:o;24997:1315::-;25149:16;;;25163:1;25149:16;;;;;;;;25125:21;;25149:16;;;;;;;;;;-1:-1:-1;25149:16:0;25125:40;;25194:4;25176;25181:1;25176:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25176:23:0;;;:7;;;;;;;;;:23;25220:4;;25210:7;;25220:4;;;25210;;25220;;25210:7;;;;;;:::i;:::-;-1:-1:-1;;;;;25210:14:0;;;:7;;;;;;;;;:14;25263:6;;:215;;-1:-1:-1;;;25263:215:0;;:6;;;:57;;:215;;25335:11;;25263:6;;25405:4;;25432;;25452:15;;25263:215;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25491:17;25511:21;25491:41;;25543:24;25570:49;25606:12;;25570:31;25584:16;;25570:9;:13;;:31;;;;:::i;:49::-;25543:76;;25630:18;25651:43;25681:12;;25651:25;25665:10;;25651:9;:13;;:25;;;;:::i;:43::-;25630:64;;25707:26;25736:49;25783:1;25736:42;25765:12;;25736:24;25750:9;;25736;:13;;:24;;;;:::i;:49::-;25707:78;-1:-1:-1;25801:13:0;;25798:160;;25848:9;;25840:39;;-1:-1:-1;;;;;25848:9:0;;;;25840:39;;;;;25868:10;;25848:9;25840:39;25848:9;25840:39;25868:10;25848:9;25840:39;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25903:15:0;;25895:51;;-1:-1:-1;;;;;25903:15:0;;;;25895:51;;;;;25929:16;;25903:15;25895:51;25903:15;25895:51;25929:16;25903:15;25895:51;;;;;;;;;;;;;;;;;;;;;25798:160;25981:22;;25978:321;;26019:6;;:268;;-1:-1:-1;;;26019:268:0;;26095:4;26019:268;;;14072:34:1;14122:18;;;14115:34;;;26019:6:0;14165:18:1;;;14158:34;;;14208:18;;;14201:34;26196:42:0;14251:19:1;;;14244:44;26257:15:0;14304:19:1;;;14297:35;-1:-1:-1;;;;;26019:6:0;;;;:22;;26049:18;;14006:19:1;;26019:268:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;25052:1260;;;;;24997:1315;:::o;24308:681::-;24406:16;;;24420:1;24406:16;;;;;;;;;24382:21;;24406:16;;;;;;;;;;-1:-1:-1;24406:16:0;24382:40;;24451:4;24433;24438:1;24433:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24433:23:0;;;:7;;;;;;;;;:23;24477:4;;24467:7;;24477:4;;;24467;;24477;;24467:7;;;;;;:::i;:::-;-1:-1:-1;;;;;24467:14:0;;;:7;;;;;;;;;:14;24502:11;;24492:7;;24502:11;;;24492:4;;24497:1;;24492:7;;;;;;:::i;:::-;-1:-1:-1;;;;;24492:21:0;;;:7;;;;;;;;;:21;24526:6;;:190;;-1:-1:-1;;;24526:190:0;;:6;;;:60;;:190;;24601:11;;24526:6;;24643:4;;24670;;24690:15;;24526:190;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24756:11:0;;24749:44;;-1:-1:-1;;;24749:44:0;;24787:4;24749:44;;;4696:51:1;24729:17:0;;-1:-1:-1;;;;;;24756:11:0;;;;-1:-1:-1;24749:29:0;;4669:18:1;;24749:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24828:11;;24858;;24821:61;;-1:-1:-1;;;24821:61:0;;-1:-1:-1;;;;;24858:11:0;;;24821:61;;;12104:51:1;12171:18;;;12164:34;;;24729:64:0;;-1:-1:-1;24806:12:0;;24828:11;;;24821:28;;12077:18:1;;24821:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24806:76;;24899:7;24895:82;;;24923:11;;:30;;-1:-1:-1;;;24923:30:0;;;;;160:25:1;;;-1:-1:-1;;;;;24923:11:0;;;;:19;;133:18:1;;24923:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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:134;1002:20;;1031:31;1002:20;1031:31;:::i;:::-;934:134;;;:::o;1073:315::-;1141:6;1149;1202:2;1190:9;1181:7;1177:23;1173:32;1170:52;;;1218:1;1215;1208:12;1170:52;1257:9;1244:23;1276:31;1301:5;1276:31;:::i;:::-;1326:5;1378:2;1363:18;;;;1350:32;;-1:-1:-1;;;1073:315:1:o;1585:180::-;1644:6;1697:2;1685:9;1676:7;1672:23;1668:32;1665:52;;;1713:1;1710;1703:12;1665:52;-1:-1:-1;1736:23:1;;1585:180;-1:-1:-1;1585:180:1:o;1770:247::-;1829:6;1882:2;1870:9;1861:7;1857:23;1853:32;1850:52;;;1898:1;1895;1888:12;1850:52;1937:9;1924:23;1956:31;1981:5;1956:31;:::i;2022:118::-;2108:5;2101:13;2094:21;2087:5;2084:32;2074:60;;2130:1;2127;2120:12;2145:241;2201:6;2254:2;2242:9;2233:7;2229:23;2225:32;2222:52;;;2270:1;2267;2260:12;2222:52;2309:9;2296:23;2328:28;2350:5;2328:28;:::i;2651:456::-;2728:6;2736;2744;2797:2;2785:9;2776:7;2772:23;2768:32;2765:52;;;2813:1;2810;2803:12;2765:52;2852:9;2839:23;2871:31;2896:5;2871:31;:::i;:::-;2921:5;-1:-1:-1;2978:2:1;2963:18;;2950:32;2991:33;2950:32;2991:33;:::i;:::-;2651:456;;3043:7;;-1:-1:-1;;;3097:2:1;3082:18;;;;3069:32;;2651:456::o;3112:248::-;3180:6;3188;3241:2;3229:9;3220:7;3216:23;3212:32;3209:52;;;3257:1;3254;3247:12;3209:52;-1:-1:-1;;3280:23:1;;;3350:2;3335:18;;;3322:32;;-1:-1:-1;3112:248:1:o;3554:309::-;3619:6;3627;3680:2;3668:9;3659:7;3655:23;3651:32;3648:52;;;3696:1;3693;3686:12;3648:52;3735:9;3722:23;3754:28;3776:5;3754:28;:::i;3868:661::-;3990:6;3998;4006;4014;4022;4030;4038;4046;4099:3;4087:9;4078:7;4074:23;4070:33;4067:53;;;4116:1;4113;4106:12;4067:53;-1:-1:-1;;4139:23:1;;;4209:2;4194:18;;4181:32;;-1:-1:-1;4260:2:1;4245:18;;4232:32;;4311:2;4296:18;;4283:32;;-1:-1:-1;4362:3:1;4347:19;;4334:33;;-1:-1:-1;4414:3:1;4399:19;;4386:33;;-1:-1:-1;4466:3:1;4451:19;;4438:33;;-1:-1:-1;4518:3:1;4503:19;4490:33;;-1:-1:-1;3868:661:1;-1:-1:-1;3868:661:1:o;5246:382::-;5311:6;5319;5372:2;5360:9;5351:7;5347:23;5343:32;5340:52;;;5388:1;5385;5378:12;5340:52;5427:9;5414:23;5446:31;5471:5;5446:31;:::i;:::-;5496:5;-1:-1:-1;5553:2:1;5538:18;;5525:32;5566:30;5525:32;5566:30;:::i;:::-;5615:7;5605:17;;;5246:382;;;;;:::o;5633:127::-;5694:10;5689:3;5685:20;5682:1;5675:31;5725:4;5722:1;5715:15;5749:4;5746:1;5739:15;5765:1121;5849:6;5880:2;5923;5911:9;5902:7;5898:23;5894:32;5891:52;;;5939:1;5936;5929:12;5891:52;5979:9;5966:23;6008:18;6049:2;6041:6;6038:14;6035:34;;;6065:1;6062;6055:12;6035:34;6103:6;6092:9;6088:22;6078:32;;6148:7;6141:4;6137:2;6133:13;6129:27;6119:55;;6170:1;6167;6160:12;6119:55;6206:2;6193:16;6228:2;6224;6221:10;6218:36;;;6234:18;;:::i;:::-;6280:2;6277:1;6273:10;6312:2;6306:9;6375:2;6371:7;6366:2;6362;6358:11;6354:25;6346:6;6342:38;6430:6;6418:10;6415:22;6410:2;6398:10;6395:18;6392:46;6389:72;;;6441:18;;:::i;:::-;6477:2;6470:22;6527:18;;;6561:15;;;;-1:-1:-1;6603:11:1;;;6599:20;;;6631:19;;;6628:39;;;6663:1;6660;6653:12;6628:39;6687:11;;;;6707:148;6723:6;6718:3;6715:15;6707:148;;;6789:23;6808:3;6789:23;:::i;:::-;6777:36;;6740:12;;;;6833;;;;6707:148;;;6874:6;5765:1121;-1:-1:-1;;;;;;;;5765:1121:1:o;7135:388::-;7203:6;7211;7264:2;7252:9;7243:7;7239:23;7235:32;7232:52;;;7280:1;7277;7270:12;7232:52;7319:9;7306:23;7338:31;7363:5;7338:31;:::i;:::-;7388:5;-1:-1:-1;7445:2:1;7430:18;;7417:32;7458:33;7417:32;7458:33;:::i;7754:329::-;7956:2;7938:21;;;7995:1;7975:18;;;7968:29;-1:-1:-1;;;8028:2:1;8013:18;;8006:36;8074:2;8059:18;;7754:329::o;8689:184::-;8759:6;8812:2;8800:9;8791:7;8787:23;8783:32;8780:52;;;8828:1;8825;8818:12;8780:52;-1:-1:-1;8851:16:1;;8689:184;-1:-1:-1;8689:184:1:o;8878:127::-;8939:10;8934:3;8930:20;8927:1;8920:31;8970:4;8967:1;8960:15;8994:4;8991:1;8984:15;9010:127;9071:10;9066:3;9062:20;9059:1;9052:31;9102:4;9099:1;9092:15;9126:4;9123:1;9116:15;9142:135;9181:3;9202:17;;;9199:43;;9222:18;;:::i;:::-;-1:-1:-1;9269:1:1;9258:13;;9142:135::o;9498:128::-;9538:3;9569:1;9565:6;9562:1;9559:13;9556:39;;;9575:18;;:::i;:::-;-1:-1:-1;9611:9:1;;9498:128::o;9987:168::-;10027:7;10093:1;10089;10085:6;10081:14;10078:1;10075:21;10070:1;10063:9;10056:17;10052:45;10049:71;;;10100:18;;:::i;:::-;-1:-1:-1;10140:9:1;;9987:168::o;10160:217::-;10200:1;10226;10216:132;;10270:10;10265:3;10261:20;10258:1;10251:31;10305:4;10302:1;10295:15;10333:4;10330:1;10323:15;10216:132;-1:-1:-1;10362:9:1;;10160:217::o;10784:125::-;10824:4;10852:1;10849;10846:8;10843:34;;;10857:18;;:::i;:::-;-1:-1:-1;10894:9:1;;10784:125::o;12209:245::-;12276:6;12329:2;12317:9;12308:7;12304:23;12300:32;12297:52;;;12345:1;12342;12335:12;12297:52;12377:9;12371:16;12396:28;12418:5;12396:28;:::i;12746:980::-;13008:4;13056:3;13045:9;13041:19;13087:6;13076:9;13069:25;13113:2;13151:6;13146:2;13135:9;13131:18;13124:34;13194:3;13189:2;13178:9;13174:18;13167:31;13218:6;13253;13247:13;13284:6;13276;13269:22;13322:3;13311:9;13307:19;13300:26;;13361:2;13353:6;13349:15;13335:29;;13382:1;13392:195;13406:6;13403:1;13400:13;13392:195;;;13471:13;;-1:-1:-1;;;;;13467:39:1;13455:52;;13562:15;;;;13527:12;;;;13503:1;13421:9;13392:195;;;-1:-1:-1;;;;;;;13643:32:1;;;;13638:2;13623:18;;13616:60;-1:-1:-1;;;13707:3:1;13692:19;13685:35;13604:3;12746:980;-1:-1:-1;;;12746:980:1:o;14343:306::-;14431:6;14439;14447;14500:2;14488:9;14479:7;14475:23;14471:32;14468:52;;;14516:1;14513;14506:12;14468:52;14545:9;14539:16;14529:26;;14595:2;14584:9;14580:18;14574:25;14564:35;;14639:2;14628:9;14624:18;14618:25;14608:35;;14343:306;;;;;:::o

Swarm Source

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