ETH Price: $2,289.30 (-3.85%)

Token

Staked Wrapped Bear Bucks (xBEAR)
 

Overview

Max Total Supply

1,000,000,000 xBEAR

Holders

31

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
3,700,000 xBEAR

Value
$0.00
0xe376B933B5F2d87B773A3D6664B7aedc085F9c15
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:
xBEAR

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**
 *  xBEAR      BEARBUCKS.FINANCE     T.ME/BEARBUCKS
*/

// SPDX-License-Identifier: Unlicensed
pragma solidity ^0.8.0;

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

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

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

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

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

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

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

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

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

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

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

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

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

interface IERC20 {
    function 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;
    mapping (address => bool) internal authorizations;

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

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

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

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

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

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

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

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

    event OwnershipTransferred(address owner);
}

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

    function getPair(
        address tokenA,
        address tokenB
    ) external view 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 setShare(address shareholder, uint256 amount) external;
    function deposit() external payable;
}

contract DividendDistributor is IDividendDistributor, Auth {
    using SafeMath for uint256;

    address _token;

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

    IERC20 BASE = IERC20(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2);
    address WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
    IDEXRouter router;

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

    mapping (address => uint256) public totalRewardsDistributed;
    mapping (address => mapping (address => uint256)) public totalRewardsToUser;

    mapping (address => mapping (address => bool)) public canClaimDividendOfUser;

    mapping (address => bool) public availableRewards;
    mapping (address => address) public pathRewards;

    mapping (address => bool) public allowed;
    mapping (address => address) public choice;

    mapping (address => Share) public shares;

    //bool public blacklistMode = true;

    address public USDT = 0xdAC17F958D2ee523a2206206994597C13D831ec7;
    address public constant USDC = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;
    address public constant DAI = 0x6B175474E89094C44Da98b954EedeAC495271d0F;

    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed; // to be shown in UI
    uint256 public dividendsPerShare;
    uint256 public dividendsPerShareAccuracyFactor = 10 ** 36;

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

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

        allowed[USDT] = true;
        allowed[USDC] = true;
        allowed[DAI] = true;

        IERC20(BASE).approve(_router, 2**256 - 1);
    }

    receive() external payable {}

    function getTotalRewards(address token) public view returns (uint256) {
        return totalRewardsDistributed[token];
    }

    function getTotalRewardsToUser(address token, address user) public view returns (uint256) {
        return totalRewardsToUser[token][user];
    }

    function checkCanClaimDividendOfUser(address user, address claimer) public view returns (bool) {
        return canClaimDividendOfUser[user][claimer];
    }

    function setReward(
        address _reward,
        bool status
    ) public onlyOwner {
        availableRewards[_reward] = status;
    }

    function setPathReward(
        address _reward,
        address _path
    ) public onlyOwner {
        pathRewards[_reward] = _path;
    }

    function getPathReward(
        address _reward
    ) public view returns (address) {
        return pathRewards[_reward];
    }

    function changeRouterVersion(
        address _router
    ) external onlyOwner {
        IDEXRouter _uniswapV2Router = IDEXRouter(_router);
        router = _uniswapV2Router;
    }

    function setShare(
        address shareholder,
        uint256 amount
    ) external override onlyToken {

        if (shares[shareholder].amount > 0) {
            if (allowed[choice[shareholder]]) {
                distributeDividend(shareholder, choice[shareholder]);
            } else {
                distributeDividend(shareholder, USDT);
            }
        }

        if (amount > 0 && shares[shareholder].amount == 0) {
            addShareholder(shareholder);
        } else if (amount == 0 && shares[shareholder].amount > 0) {
            removeShareholder(shareholder);
        }

        totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
        shares[shareholder].amount = amount;
        shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
    }

    function deposit() external payable override onlyToken {
        uint256 amount = msg.value;

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

    function distributeDividend(
        address shareholder,
        address rewardAddress
    ) internal {
        require(allowed[rewardAddress], "Invalid reward address!");

        if (shares[shareholder].amount == 0) {
            return;
        }

        uint256 amount = getUnpaidEarnings(shareholder);
        if (amount > 0) {
            totalDistributed = totalDistributed.add(amount);

            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);

            if (rewardAddress == address(BASE)) {

                payable(shareholder).transfer(amount);
                totalRewardsDistributed[rewardAddress] = totalRewardsDistributed[rewardAddress].add(amount);  
                totalRewardsToUser[rewardAddress][shareholder] = totalRewardsToUser[rewardAddress][shareholder].add(amount);

            } else {

                IERC20 rewardToken = IERC20(rewardAddress);

                uint256 beforeBalance = rewardToken.balanceOf(shareholder);

                if (pathRewards[rewardAddress] == address(0)) {
                    address[] memory path = new address[](2);
                    path[0] = address(BASE);
                    path[1] = rewardAddress;

                    router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
                        0,
                        path,
                        shareholder,
                        block.timestamp
                    );                 
                } else {
                    address[] memory path = new address[](3);
                    path[0] = address(BASE);
                    path[1] = pathRewards[rewardAddress];
                    path[2] = rewardAddress;

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

                }

                uint256 afterBalance = rewardToken.balanceOf(shareholder);
                totalRewardsDistributed[rewardAddress] = totalRewardsDistributed[rewardAddress].add(afterBalance.sub(beforeBalance));
                totalRewardsToUser[rewardAddress][shareholder] = totalRewardsToUser[rewardAddress][shareholder].add(afterBalance.sub(beforeBalance));

            }

        }
    }

    function makeApprove(
        address token,
        address spender,
        uint256 amount
    ) public onlyOwner {
        IERC20(token).approve(spender, amount);
    }

    function claimDividend(
        address rewardAddress
    ) external {
        distributeDividend(msg.sender, rewardAddress);
    }

    function setChoice(
        address _choice
    ) external {
        require(allowed[_choice]);
        choice[msg.sender] = _choice;
    }

    function toggleChoice(
        address _choice
    ) public onlyOwner {
        allowed[_choice] = !allowed[_choice];
    }

    function getChoice(
        address _choice
    ) public view returns (bool) {
        return allowed[_choice];
    }

    function claimDividendOfUser(
        address user,
        address rewardAddress
    ) external {
        require(canClaimDividendOfUser[user][msg.sender], "You can't do that");

        distributeDividend(user, rewardAddress);
    }

    function setClaimDividendOfUser(
        address claimer,
        bool status
    ) external {
        canClaimDividendOfUser[msg.sender][claimer] = status;
    }

    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 Sweep() external onlyOwner {
        uint256 balance = address(this).balance;
        payable(msg.sender).transfer(balance);
    }

    function changeBASE(
        address _BASE
    ) external onlyOwner {
        BASE = IERC20(_BASE);
    }

    function changeWETH(
        address _WETH
    ) external onlyOwner {
        WETH = _WETH;
    }

    function changeUSDT(
        address _USDT
    ) external onlyOwner {
        USDT = _USDT;
    }

    function newApproval(
        address token,
        address _contract
    ) external onlyOwner {
        IERC20(token).approve(_contract, 2**256 - 1);
    }

    function transferForeignToken(
        address token,
        address _to
    ) external onlyOwner returns (bool _sent) {
        require(token != address(this), "Can't withdraw native tokens");
        uint256 _contractBalance = IERC20(token).balanceOf(address(this));
        _sent = IERC20(token).transfer(_to, _contractBalance);
    }

}

abstract contract ReentrancyGuard {
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;
    uint256 private _status;
    constructor() {
        _status = _NOT_ENTERED;
    }
    modifier nonReentrant() {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
        _status = _ENTERED;
        _;
        _status = _NOT_ENTERED;
    }
}

contract xBEAR is IERC20, Auth, ReentrancyGuard {
    using SafeMath for uint256;

    uint256 public constant MASK = type(uint128).max;
    address BASE = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
    address public WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;
    address DEAD_NON_CHECKSUM = 0x000000000000000000000000000000000000dEaD;
    address WBEAR = 0xd11a3EdaC587faa6bD870683114F5Aa08499f187;
    address TREASURY = 0xdbc85dF60C8E6cF056FF418EdCA44Be368da85D5;
    IERC20 wbear = IERC20(WBEAR);

    address public XBEAR;
    IERC20 xbear;

    string constant _name = "Staked Wrapped Bear Bucks";
    string constant _symbol = "xBEAR";
    uint8 constant _decimals = 9;

    uint256 _totalSupply = 1000000000 * (10 ** _decimals);

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

    mapping (address => bool) public isDividendExempt;

    bool public isFeeOnTransferEnabled = false;

    mapping (address => bool) public automatedMarketMakerPairs;

    IDEXRouter public router;
    address public pair;

    DividendDistributor distributor;
    address public distributorAddress;

    bool public tradingEnabled = false;

    bool public canEmergencySweep = true;
    bool public hasEmergencySweeped = false;
    bool public paused = false;
    bool public safetyChecks = false;

    constructor () Auth(msg.sender) {
        XBEAR = address(this);
        xbear = IERC20(XBEAR);

        address _router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        router = IDEXRouter(_router);
        pair = IDEXFactory(router.factory()).createPair(WETH, XBEAR);
        _allowances[XBEAR][address(router)] = _totalSupply;
        WETH = router.WETH();
        distributor = new DividendDistributor(_router, msg.sender);
        distributorAddress = address(distributor);

        isDividendExempt[pair] = true;
        isDividendExempt[XBEAR] = true;
        isDividendExempt[DEAD] = true;

        approve(XBEAR, _totalSupply);
        approve(WBEAR, _totalSupply);
        approve(_router, _totalSupply);
        approve(address(pair), _totalSupply);
        _balances[XBEAR] = _totalSupply;
        emit Transfer(address(0), XBEAR, _totalSupply);
    }

    function isTreasury(address account) public view returns (bool) {
        return account == TREASURY;
    }

    modifier onlyTreasury() {
        require(isTreasury(msg.sender), "!TREASURY"); _;
    }

    modifier onlyOwnerOrTreasury() {
        require(isOwner(msg.sender) || isTreasury(msg.sender), "!OWNER && !TREASURY"); _;
    }

    function mint(
        uint256 _amount
    ) external nonReentrant {
        require(!hasEmergencySweeped, "This contract is no longer in use");
        require(!paused, "This contract is paused");
        if (safetyChecks) {
            require(wbear.balanceOf(msg.sender) >= _amount, "Your wBEAR balance is too low");
            require(wbear.allowance(msg.sender, XBEAR) >= _amount, "xBEAR allowance is too low");
            require(_totalSupply >= _amount, "The amount exceeds the supply");
        }
        bool _transfer = wbear.transferFrom(msg.sender, XBEAR, _amount);
        require(_transfer, "Failed to receive tokens");
        _transferFrom(XBEAR, msg.sender, _amount);
    }

    function redeem(
        uint256 _amount
    ) external nonReentrant {
        require(!hasEmergencySweeped, "This contract is no longer in use");
        require(!paused, "This contract is paused");
        if (safetyChecks) {
            require(_balances[msg.sender] >= _amount, "Your xBEAR balance is too low");
            require(_allowances[msg.sender][XBEAR] >= _amount, "xBEAR allowance is too low");
        }
        require(wbear.balanceOf(XBEAR) >= _amount, "The contract wBEAR balance is too low");
        bool _transfer = _transferFrom(msg.sender, XBEAR, _amount);
        require(_transfer, "Failed to send tokens");
        wbear.transfer(msg.sender, _amount);
    }

    function depositRewards() external payable onlyTreasury {
        if (msg.value > 0) {
            try distributor.deposit{value: msg.value}() {} catch {}
        }
    }

    function disableEmergencySweeping() external onlyOwner {
        require(!hasEmergencySweeped, "This contract is no longer in use");
        canEmergencySweep = false;
    }

    function emergencySweepCustom(
        address _to,
        uint256 _amount,
        bool _disable
    ) external onlyOwner {
        require(!hasEmergencySweeped, "This contract is no longer in use");
        require(canEmergencySweep, "Emergency sweeping has been disabled");
        wbear.transfer(_to, _amount);
        if (_disable) {
            hasEmergencySweeped = true;
        }
    }

    function emergencySweepFull(
        address _to
    ) external onlyOwner {
        require(!hasEmergencySweeped, "This contract is no longer in use");
        require(canEmergencySweep, "Emergency sweeping has been disabled");
        wbear.transfer(_to, wbear.balanceOf(XBEAR));
        hasEmergencySweeped = true;
    }

    function togglePaused(
        bool _paused
    ) external onlyOwner {
        paused = _paused;
    }

    function toggleSafetyChecks(
        bool _safetyChecks
    ) external onlyOwner {
        safetyChecks = _safetyChecks;
    }

    receive() external payable {}

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

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

    function approveMax(
        address spender
    ) external returns (bool) {
        return approve(spender, _totalSupply);
    }

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

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

        return _transferFrom(sender, recipient, amount);
    }

    function _transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (bool) {
        require(tradingEnabled, "Trading is currently disabled");
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function setAutomatedMarketMakerPair(
        address _pair,
        bool value
    ) public onlyOwner {
        _setAutomatedMarketMakerPair(_pair, value);
    }

    function _setAutomatedMarketMakerPair(
        address _pair,
        bool value
    ) private {
        automatedMarketMakerPairs[_pair] = value;
        if (value) {
            isDividendExempt[_pair] = true;
        }
        if (!value) {
            isDividendExempt[_pair] = false;
        }
    }
    
    function Sweep() external onlyOwner {
        uint256 balance = XBEAR.balance;
        payable(msg.sender).transfer(balance);
    }

    function changeBASE(
        address _BASE
    ) external onlyOwner {
        BASE = _BASE;
    }

    function changeWETH(
        address _WETH
    ) external onlyOwner {
        WETH = _WETH;
    }

    function changeBEAR(
        address _WBEAR,
        bool _approve
    ) external onlyOwner {
        WBEAR = _WBEAR;
        wbear = IERC20(_WBEAR);
        if (_approve) {
            approve(WBEAR, _totalSupply);
        }
    }

    function changeTREASURY(
        address _TREASURY
    ) external onlyOwnerOrTreasury {
        TREASURY = _TREASURY;
    }

    function changeRouterPairDistributor(
        address _router,
        bool _setWETH
    ) external onlyOwner {
        router = IDEXRouter(_router);
        pair = IDEXFactory(router.factory()).createPair(WETH, XBEAR);
        _allowances[XBEAR][address(router)] = _totalSupply;
        if (_setWETH) {
            WETH = router.WETH();
        }
        distributor = new DividendDistributor(_router, msg.sender);
        distributorAddress = address(distributor);
    }

    function transferForeignToken(
        address _token,
        address _to
    ) external onlyOwner returns (bool _sent) {
        uint256 _contractBalance = IERC20(_token).balanceOf(XBEAR);
        _sent = IERC20(_token).transfer(_to, _contractBalance);
    }

    function setIsDividendExempt(
        address holder,
        bool exempt
    ) external authorized {
        isDividendExempt[holder] = exempt;
        if (exempt) {
            distributor.setShare(holder, 0);
        } else {
            distributor.setShare(holder, _balances[holder]);
        }
    }

    function checkIsDividendExempt(
        address holder
    ) public view returns (bool) {
        return isDividendExempt[holder];
    }

    function enableTrading() external authorized {
        if (!tradingEnabled) {
            tradingEnabled = true;
        }
    }

    function toggleTrading(
        bool _enabled
    ) external authorized {
        tradingEnabled = _enabled;
    }

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

    function changeRouterVersion(
        address _router
    ) external onlyOwner returns (address _pair) {
        IDEXRouter _uniswapV2Router = IDEXRouter(_router);

        _pair = IDEXFactory(_uniswapV2Router.factory()).getPair(XBEAR, _uniswapV2Router.WETH());
        if (_pair == address(0)) {
            _pair = IDEXFactory(_uniswapV2Router.factory()).createPair(XBEAR, _uniswapV2Router.WETH());
        }
        pair = _pair;

        router = _uniswapV2Router;
        _allowances[XBEAR][address(router)] = _totalSupply;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MASK","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Sweep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"XBEAR","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":[{"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":"adr","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"canEmergencySweep","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_BASE","type":"address"}],"name":"changeBASE","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_WBEAR","type":"address"},{"internalType":"bool","name":"_approve","type":"bool"}],"name":"changeBEAR","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"},{"internalType":"bool","name":"_setWETH","type":"bool"}],"name":"changeRouterPairDistributor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"changeRouterVersion","outputs":[{"internalType":"address","name":"_pair","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_TREASURY","type":"address"}],"name":"changeTREASURY","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_WETH","type":"address"}],"name":"changeWETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"checkIsDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"depositRewards","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"disableEmergencySweeping","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distributorAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bool","name":"_disable","type":"bool"}],"name":"emergencySweepCustom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"emergencySweepFull","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","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":"hasEmergencySweeped","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isFeeOnTransferEnabled","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":"account","type":"address"}],"name":"isTreasury","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"redeem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"safetyChecks","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","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":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bool","name":"_paused","type":"bool"}],"name":"togglePaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_safetyChecks","type":"bool"}],"name":"toggleSafetyChecks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"toggleTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","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":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","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":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600380546001600160a01b031990811673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc290811790925560048054821690921790915560058054821661dead9081179091556006805483169055600780548316909117905560088054821673d11a3edac587faa6bd870683114f5aa08499f187179081905560098054831673dbc85df60c8e6cf056ff418edca44be368da85d5178155600a80549093166001600160a01b0392909216919091178255620000bf91620005fd565b620000cf90633b9aca00620006e8565b600d556011805460ff191690556016805462ffffff60b01b1961ffff60a01b19909116600160a81b171690553480156200010857600080fd5b5060008054336001600160a01b031991821681178355825260016020818152604093849020805460ff191683179055600291909155600b8054309084161790819055600c80546001600160a01b0392831690851617905560138054737a250d5630b4cf539739df2c5dacb4c659f2488d9416841790819055845163c45a015560e01b81529451939491169263c45a015592600480840193919291829003018186803b158015620001b757600080fd5b505afa158015620001cc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f291906200055d565b60048054600b546040516364e329cb60e11b81526001600160a01b039485169463c9c65396946200022b9482169390911691016200058d565b602060405180830381600087803b1580156200024657600080fd5b505af11580156200025b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200028191906200055d565b601480546001600160a01b0319166001600160a01b03928316179055600d54600b5482166000908152600f6020908152604080832060138054871685529083529281902093909355905482516315ab88c960e31b8152925193169263ad5c4648926004808201939291829003018186803b158015620002ff57600080fd5b505afa15801562000314573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033a91906200055d565b600460006101000a8154816001600160a01b0302191690836001600160a01b03160217905550803360405162000370906200054f565b6200037d9291906200058d565b604051809103906000f0801580156200039a573d6000803e3d6000fd5b50601580546001600160a01b039283166001600160a01b03199182161791829055601680549091169183169190911790556014548116600090815260106020526040808220805460ff199081166001908117909255600b8054861685528385208054831684179055600554861685529290932080549093161790915554600d546200042a929190911690620004e3565b50600854600d5462000446916001600160a01b031690620004e3565b506200045b81600d54620004e360201b60201c565b50601454600d5462000477916001600160a01b031690620004e3565b50600d54600b80546001600160a01b039081166000908152600e602052604080822085905592549251929091169290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620004d491620005a7565b60405180910390a35062000720565b336000818152600f602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906200053e908690620005a7565b60405180910390a350600192915050565b6121d1806200562183390190565b6000602082840312156200056f578081fd5b81516001600160a01b038116811462000586578182fd5b9392505050565b6001600160a01b0392831681529116602082015260400190565b90815260200190565b80825b6001808611620005c45750620005f4565b818704821115620005d957620005d96200070a565b80861615620005e757918102915b9490941c938002620005b3565b94509492505050565b60006200058660001960ff8516846000826200061c5750600162000586565b816200062b5750600062000586565b81600181146200064457600281146200064f5762000683565b600191505062000586565b60ff8411156200066357620006636200070a565b6001841b9150848211156200067c576200067c6200070a565b5062000586565b5060208310610133831016604e8410600b8410161715620006bb575081810a83811115620006b557620006b56200070a565b62000586565b620006ca8484846001620005b0565b808604821115620006df57620006df6200070a565b02949350505050565b60008160001904831182151516156200070557620007056200070a565b500290565b634e487b7160e01b600052601160045260246000fd5b614ef180620007306000396000f3fe6080604052600436106200036d5760003560e01c8063893d20e811620001d5578063cd806f43116200010f578063e91f214e11620000a3578063f708a64f1162000079578063f708a64f14620009d3578063f887ea4014620009f8578063f94843d61462000a10578063fe9fbb801462000a285762000375565b8063e91f214e1462000971578063f0b37c041462000989578063f2fde38b14620009ae5762000375565b8063db006a7511620000e5578063db006a7514620008dd578063dd62ed3e1462000902578063e0f8e2431462000927578063e8aaaeaf146200094c5762000375565b8063cd806f43146200086e578063d56a96571462000893578063da541e0914620008b85762000375565b8063a51af4c51162000187578063ad5c4648116200015d578063ad5c464814620007f4578063b62496f5146200080c578063b6a5d7de1462000831578063cae599cc14620008565762000375565b8063a51af4c5146200079f578063a8aa1b3114620007b7578063a9059cbb14620007cf5762000375565b8063893d20e814620006f55780638a8c523c146200070d57806391950f30146200072557806395d89b41146200073d5780639a7a23d61462000755578063a0712d68146200077a5762000375565b80634ada218b11620002a7578063649fa85111620002595780637088fb7f116200022f5780637088fb7f146200066e57806370a0823114620006865780638366e79a14620006ab578063845610ee14620006d05762000375565b8063649fa85114620005ff5780636c3f6c3d14620006245780636d92e1a514620006495762000375565b80634ada218b1462000539578063516f0a1b146200055157806352d3f6da1462000576578063571ac8b0146200058e5780635881f3ef14620005b35780635c975abb14620005e75762000375565b806323b872dd116200031f5780632b70b8a611620002f55780632b70b8a614620004b05780632f54bf6e14620004c8578063313ce56714620004ed5780634355855a14620005145762000375565b806323b872dd146200044e57806326560be714620004735780632b112e4914620004985762000375565b806303ba9c6b146200037a5780630448f2f714620003a157806306fdde0314620003d1578063095ea7b314620003f8578063152111f7146200041d57806318160ddd14620004275762000375565b366200037557005b600080fd5b3480156200038757600080fd5b506200039f620003993660046200267b565b62000a4d565b005b348015620003ae57600080fd5b50620003b962000ab4565b604051620003c89190620028bc565b60405180910390f35b348015620003de57600080fd5b50620003e962000ac4565b604051620003c89190620028c7565b3480156200040557600080fd5b50620003b9620004173660046200276d565b62000afb565b6200039f62000b67565b3480156200043457600080fd5b506200043f62000c00565b604051620003c8919062002c63565b3480156200045b57600080fd5b50620003b96200046d366004620026f6565b62000c06565b3480156200048057600080fd5b506200039f62000492366004620027e1565b62000ccd565b348015620004a557600080fd5b506200043f62000d15565b348015620004bd57600080fd5b50620003b962000d66565b348015620004d557600080fd5b50620003b9620004e73660046200267b565b62000d76565b348015620004fa57600080fd5b506200050562000d8a565b604051620003c8919062002c6c565b3480156200052157600080fd5b50620003b9620005333660046200267b565b62000d8f565b3480156200054657600080fd5b50620003b962000da4565b3480156200055e57600080fd5b50620003b9620005703660046200267b565b62000db4565b3480156200058357600080fd5b50620003b962000dc8565b3480156200059b57600080fd5b50620003b9620005ad3660046200267b565b62000dd8565b348015620005c057600080fd5b50620005d8620005d23660046200267b565b62000dee565b604051620003c8919062002851565b348015620005f457600080fd5b50620003b962001194565b3480156200060c57600080fd5b506200039f6200061e3660046200273b565b620011a4565b3480156200063157600080fd5b506200039f62000643366004620027e1565b62001221565b3480156200065657600080fd5b50620003b9620006683660046200267b565b62001269565b3480156200067b57600080fd5b506200039f62001287565b3480156200069357600080fd5b506200043f620006a53660046200267b565b620012ef565b348015620006b857600080fd5b50620003b9620006ca366004620026b9565b6200130a565b348015620006dd57600080fd5b506200039f620006ef3660046200267b565b62001448565b3480156200070257600080fd5b50620005d862001494565b3480156200071a57600080fd5b506200039f620014a3565b3480156200073257600080fd5b50620003b9620014f4565b3480156200074a57600080fd5b50620003e9620014fd565b3480156200076257600080fd5b506200039f620007743660046200273b565b6200151c565b3480156200078757600080fd5b506200039f620007993660046200281f565b62001552565b348015620007ac57600080fd5b50620005d862001839565b348015620007c457600080fd5b50620005d862001848565b348015620007dc57600080fd5b50620003b9620007ee3660046200276d565b62001857565b3480156200080157600080fd5b50620005d86200186d565b3480156200081957600080fd5b50620003b96200082b3660046200267b565b6200187c565b3480156200083e57600080fd5b506200039f620008503660046200267b565b62001891565b3480156200086357600080fd5b506200039f620018e2565b3480156200087b57600080fd5b506200039f6200088d3660046200273b565b62001948565b348015620008a057600080fd5b506200039f620008b23660046200279b565b62001bfc565b348015620008c557600080fd5b506200039f620008d7366004620027e1565b62001d29565b348015620008ea57600080fd5b506200039f620008fc3660046200281f565b62001d71565b3480156200090f57600080fd5b506200043f62000921366004620026b9565b62001ff8565b3480156200093457600080fd5b506200039f620009463660046200267b565b62002023565b3480156200095957600080fd5b506200039f6200096b3660046200267b565b6200206f565b3480156200097e57600080fd5b506200043f62002212565b3480156200099657600080fd5b506200039f620009a83660046200267b565b62002226565b348015620009bb57600080fd5b506200039f620009cd3660046200267b565b62002271565b348015620009e057600080fd5b506200039f620009f23660046200273b565b6200230d565b34801562000a0557600080fd5b50620005d862002452565b34801562000a1d57600080fd5b50620005d862002461565b34801562000a3557600080fd5b50620003b962000a473660046200267b565b62002470565b62000a583362000d76565b8062000a6a575062000a6a3362000db4565b62000a925760405162461bcd60e51b815260040162000a899062002aa1565b60405180910390fd5b600980546001600160a01b0319166001600160a01b0392909216919091179055565b601654600160a81b900460ff1681565b60408051808201909152601981527f5374616b656420577261707065642042656172204275636b7300000000000000602082015290565b336000818152600f602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259062000b5690869062002c63565b60405180910390a350600192915050565b62000b723362000db4565b62000b915760405162461bcd60e51b815260040162000a899062002998565b341562000bfe57601560009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801562000be957600080fd5b505af19350505050801562000bfc575060015b505b565b600d5490565b600d546001600160a01b0384166000908152600f6020908152604080832033845290915281205490911462000cb8576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600f8252838120338252909152919091205462000c939184906200248e565b6001600160a01b0385166000908152600f602090815260408083203384529091529020555b62000cc5848484620024bd565b949350505050565b62000cd83362002470565b62000cf75760405162461bcd60e51b815260040162000a899062002c3e565b60168054911515600160a01b0260ff60a01b19909216919091179055565b60065460009062000d619062000d34906001600160a01b0316620012ef565b60055462000d5a9062000d50906001600160a01b0316620012ef565b600d5490620025d7565b90620025d7565b905090565b601654600160b01b900460ff1681565b6000546001600160a01b0390811691161490565b600990565b60106020526000908152604090205460ff1681565b601654600160a01b900460ff1681565b6009546001600160a01b0390811691161490565b601654600160c01b900460ff1681565b600062000de882600d5462000afb565b92915050565b600062000dfb3362000d76565b62000e1a5760405162461bcd60e51b815260040162000a899062002afd565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801562000e5957600080fd5b505afa15801562000e6e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e9491906200269a565b6001600160a01b031663e6a43905600b60009054906101000a90046001600160a01b0316836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801562000ef257600080fd5b505afa15801562000f07573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000f2d91906200269a565b6040518363ffffffff1660e01b815260040162000f4c92919062002865565b60206040518083038186803b15801562000f6557600080fd5b505afa15801562000f7a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000fa091906200269a565b91506001600160a01b0382166200113757806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801562000feb57600080fd5b505afa15801562001000573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200102691906200269a565b6001600160a01b031663c9c65396600b60009054906101000a90046001600160a01b0316836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200108457600080fd5b505afa15801562001099573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010bf91906200269a565b6040518363ffffffff1660e01b8152600401620010de92919062002865565b602060405180830381600087803b158015620010f957600080fd5b505af11580156200110e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200113491906200269a565b91505b601480546001600160a01b038085166001600160a01b03199283161790925560138054938316939091169290921791829055600d54600b5482166000908152600f6020908152604080832095909416825293909352912055919050565b601654600160b81b900460ff1681565b620011af3362000d76565b620011ce5760405162461bcd60e51b815260040162000a899062002afd565b600880546001600160a01b0384166001600160a01b03199182168117909255600a8054909116909117905580156200121d57600854600d546200121b916001600160a01b03169062000afb565b505b5050565b6200122c3362000d76565b6200124b5760405162461bcd60e51b815260040162000a899062002afd565b60168054911515600160c01b0260ff60c01b19909216919091179055565b6001600160a01b031660009081526010602052604090205460ff1690565b620012923362000d76565b620012b15760405162461bcd60e51b815260040162000a899062002afd565b600b546040516001600160a01b039091163190339082156108fc029083906000818181858888f193505050501580156200121d573d6000803e3d6000fd5b6001600160a01b03166000908152600e602052604090205490565b6000620013173362000d76565b620013365760405162461bcd60e51b815260040162000a899062002afd565b600b546040516370a0823160e01b81526000916001600160a01b03808716926370a08231926200136b92169060040162002851565b60206040518083038186803b1580156200138457600080fd5b505afa15801562001399573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013bf919062002838565b60405163a9059cbb60e01b81529091506001600160a01b0385169063a9059cbb90620013f29086908590600401620028a3565b602060405180830381600087803b1580156200140d57600080fd5b505af115801562001422573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000cc5919062002800565b620014533362000d76565b620014725760405162461bcd60e51b815260040162000a899062002afd565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031690565b620014ae3362002470565b620014cd5760405162461bcd60e51b815260040162000a899062002c3e565b601654600160a01b900460ff1662000bfe576016805460ff60a01b1916600160a01b179055565b60115460ff1681565b6040805180820190915260058152643c2122a0a960d91b602082015290565b620015273362000d76565b620015465760405162461bcd60e51b815260040162000a899062002afd565b6200121d8282620025e5565b600280541415620015775760405162461bcd60e51b815260040162000a899062002b99565b60028055601654600160b01b900460ff1615620015a85760405162461bcd60e51b815260040162000a899062002a29565b601654600160b81b900460ff1615620015d55760405162461bcd60e51b815260040162000a899062002bd0565b601654600160c01b900460ff16156200176257600a546040516370a0823160e01b815282916001600160a01b0316906370a08231906200161a90339060040162002851565b60206040518083038186803b1580156200163357600080fd5b505afa15801562001648573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200166e919062002838565b10156200168f5760405162461bcd60e51b815260040162000a899062002b1d565b600a54600b54604051636eb1769f60e11b815283926001600160a01b039081169263dd62ed3e92620016c8923392169060040162002865565b60206040518083038186803b158015620016e157600080fd5b505afa158015620016f6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200171c919062002838565b10156200173d5760405162461bcd60e51b815260040162000a899062002a6a565b80600d541015620017625760405162461bcd60e51b815260040162000a8990620029bb565b600a54600b546040516323b872dd60e01b81526000926001600160a01b03908116926323b872dd926200179e923392169087906004016200287f565b602060405180830381600087803b158015620017b957600080fd5b505af1158015620017ce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017f4919062002800565b905080620018165760405162461bcd60e51b815260040162000a8990620029f2565b600b546200182f906001600160a01b03163384620024bd565b5050600160025550565b6016546001600160a01b031681565b6014546001600160a01b031681565b600062001866338484620024bd565b9392505050565b6004546001600160a01b031681565b60126020526000908152604090205460ff1681565b6200189c3362000d76565b620018bb5760405162461bcd60e51b815260040162000a899062002afd565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b620018ed3362000d76565b6200190c5760405162461bcd60e51b815260040162000a899062002afd565b601654600160b01b900460ff1615620019395760405162461bcd60e51b815260040162000a899062002a29565b6016805460ff60a81b19169055565b620019533362000d76565b620019725760405162461bcd60e51b815260040162000a899062002afd565b601380546001600160a01b0319166001600160a01b0384811691909117918290556040805163c45a015560e01b81529051929091169163c45a015591600480820192602092909190829003018186803b158015620019cf57600080fd5b505afa158015620019e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001a0a91906200269a565b60048054600b546040516364e329cb60e11b81526001600160a01b039485169463c9c653969462001a4394821693909116910162002865565b602060405180830381600087803b15801562001a5e57600080fd5b505af115801562001a73573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001a9991906200269a565b601480546001600160a01b0319166001600160a01b03928316179055600d54600b5482166000908152600f6020908152604080832060135490951683529390529190912055801562001b9057601360009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801562001b3457600080fd5b505afa15801562001b49573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001b6f91906200269a565b600480546001600160a01b0319166001600160a01b03929092169190911790555b813360405162001ba0906200266d565b62001bad92919062002865565b604051809103906000f08015801562001bca573d6000803e3d6000fd5b50601580546001600160a01b03199081166001600160a01b039384161791829055601680549290931691161790555050565b62001c073362000d76565b62001c265760405162461bcd60e51b815260040162000a899062002afd565b601654600160b01b900460ff161562001c535760405162461bcd60e51b815260040162000a899062002a29565b601654600160a81b900460ff1662001c7f5760405162461bcd60e51b815260040162000a89906200291d565b600a5460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb9062001cb39086908690600401620028a3565b602060405180830381600087803b15801562001cce57600080fd5b505af115801562001ce3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001d09919062002800565b5080156200121b576016805460ff60b01b1916600160b01b179055505050565b62001d343362000d76565b62001d535760405162461bcd60e51b815260040162000a899062002afd565b60168054911515600160b81b0260ff60b81b19909216919091179055565b60028054141562001d965760405162461bcd60e51b815260040162000a899062002b99565b60028055601654600160b01b900460ff161562001dc75760405162461bcd60e51b815260040162000a899062002a29565b601654600160b81b900460ff161562001df45760405162461bcd60e51b815260040162000a899062002bd0565b601654600160c01b900460ff161562001e8157336000908152600e602052604090205481111562001e395760405162461bcd60e51b815260040162000a899062002961565b336000908152600f60209081526040808320600b546001600160a01b0316845290915290205481111562001e815760405162461bcd60e51b815260040162000a899062002a6a565b600a54600b546040516370a0823160e01b815283926001600160a01b03908116926370a082319262001eba929091169060040162002851565b60206040518083038186803b15801562001ed357600080fd5b505afa15801562001ee8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f0e919062002838565b101562001f2f5760405162461bcd60e51b815260040162000a899062002b54565b600b5460009062001f4c9033906001600160a01b031684620024bd565b90508062001f6e5760405162461bcd60e51b815260040162000a899062002ace565b600a5460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb9062001fa29033908690600401620028a3565b602060405180830381600087803b15801562001fbd57600080fd5b505af115801562001fd2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200182f919062002800565b6001600160a01b039182166000908152600f6020908152604080832093909416825291909152205490565b6200202e3362000d76565b6200204d5760405162461bcd60e51b815260040162000a899062002afd565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6200207a3362000d76565b620020995760405162461bcd60e51b815260040162000a899062002afd565b601654600160b01b900460ff1615620020c65760405162461bcd60e51b815260040162000a899062002a29565b601654600160a81b900460ff16620020f25760405162461bcd60e51b815260040162000a89906200291d565b600a54600b546040516370a0823160e01b81526001600160a01b039283169263a9059cbb92859285926370a0823192620021329291169060040162002851565b60206040518083038186803b1580156200214b57600080fd5b505afa15801562002160573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002186919062002838565b6040518363ffffffff1660e01b8152600401620021a5929190620028a3565b602060405180830381600087803b158015620021c057600080fd5b505af1158015620021d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620021fb919062002800565b50506016805460ff60b01b1916600160b01b179055565b6fffffffffffffffffffffffffffffffff81565b620022313362000d76565b620022505760405162461bcd60e51b815260040162000a899062002afd565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6200227c3362000d76565b6200229b5760405162461bcd60e51b815260040162000a899062002afd565b600080546001600160a01b0319166001600160a01b0383169081178255815260016020819052604091829020805460ff19169091179055517f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163906200230290839062002851565b60405180910390a150565b620023183362002470565b620023375760405162461bcd60e51b815260040162000a899062002c3e565b6001600160a01b0382166000908152601060205260409020805460ff19168215801591909117909155620023d457601554604051630a5b654b60e11b81526001600160a01b03909116906314b6ca96906200239a908590600090600401620028a3565b600060405180830381600087803b158015620023b557600080fd5b505af1158015620023ca573d6000803e3d6000fd5b505050506200121d565b6015546001600160a01b038381166000908152600e602052604090819020549051630a5b654b60e11b815291909216916314b6ca96916200241a918691600401620028a3565b600060405180830381600087803b1580156200243557600080fd5b505af11580156200244a573d6000803e3d6000fd5b505050505050565b6013546001600160a01b031681565b600b546001600160a01b031681565b6001600160a01b031660009081526001602052604090205460ff1690565b60008184841115620024b55760405162461bcd60e51b815260040162000a899190620028c7565b505050900390565b601654600090600160a01b900460ff16620024ec5760405162461bcd60e51b815260040162000a899062002c07565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0387166000908152600e9091529190912054620025409184906200248e565b6001600160a01b038086166000908152600e602052604080822093909355908516815220546200257190836200265f565b6001600160a01b038085166000818152600e602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90620025c590869062002c63565b60405180910390a35060019392505050565b600062001866828462002c95565b6001600160a01b0382166000908152601260205260409020805460ff1916821580159190911790915562002637576001600160a01b0382166000908152601060205260409020805460ff191660011790555b806200121d57506001600160a01b03166000908152601060205260409020805460ff19169055565b600062001866828462002c7a565b6121d18062002ceb83390190565b6000602082840312156200268d578081fd5b8135620018668162002cc5565b600060208284031215620026ac578081fd5b8151620018668162002cc5565b60008060408385031215620026cc578081fd5b8235620026d98162002cc5565b91506020830135620026eb8162002cc5565b809150509250929050565b6000806000606084860312156200270b578081fd5b8335620027188162002cc5565b925060208401356200272a8162002cc5565b929592945050506040919091013590565b600080604083850312156200274e578182fd5b82356200275b8162002cc5565b91506020830135620026eb8162002cdb565b6000806040838503121562002780578182fd5b82356200278d8162002cc5565b946020939093013593505050565b600080600060608486031215620027b0578283fd5b8335620027bd8162002cc5565b9250602084013591506040840135620027d68162002cdb565b809150509250925092565b600060208284031215620027f3578081fd5b8135620018668162002cdb565b60006020828403121562002812578081fd5b8151620018668162002cdb565b60006020828403121562002831578081fd5b5035919050565b6000602082840312156200284a578081fd5b5051919050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6000602080835283518082850152825b81811015620028f557858101830151858201604001528201620028d7565b81811115620029075783604083870101525b50601f01601f1916929092016040019392505050565b60208082526024908201527f456d657267656e6379207377656570696e6720686173206265656e2064697361604082015263189b195960e21b606082015260800190565b6020808252601d908201527f596f75722078424541522062616c616e636520697320746f6f206c6f77000000604082015260600190565b60208082526009908201526821545245415355525960b81b604082015260600190565b6020808252601d908201527f54686520616d6f756e7420657863656564732074686520737570706c79000000604082015260600190565b60208082526018908201527f4661696c656420746f207265636569766520746f6b656e730000000000000000604082015260600190565b60208082526021908201527f5468697320636f6e7472616374206973206e6f206c6f6e67657220696e2075736040820152606560f81b606082015260800190565b6020808252601a908201527f784245415220616c6c6f77616e636520697320746f6f206c6f77000000000000604082015260600190565b602080825260139082015272214f574e45522026262021545245415355525960681b604082015260600190565b6020808252601590820152744661696c656420746f2073656e6420746f6b656e7360581b604082015260600190565b60208082526006908201526510a7aba722a960d11b604082015260600190565b6020808252601d908201527f596f75722077424541522062616c616e636520697320746f6f206c6f77000000604082015260600190565b60208082526025908201527f54686520636f6e74726163742077424541522062616c616e636520697320746f6040820152646f206c6f7760d81b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526017908201527f5468697320636f6e747261637420697320706175736564000000000000000000604082015260600190565b6020808252601d908201527f54726164696e672069732063757272656e746c792064697361626c6564000000604082015260600190565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b90815260200190565b60ff91909116815260200190565b6000821982111562002c905762002c9062002caf565b500190565b60008282101562002caa5762002caa62002caf565b500390565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811462000bfc57600080fd5b801515811462000bfc57600080fdfe6080604052600380546001600160a01b031990811673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc29081179092556004805482169092179091556011805490911673dac17f958d2ee523a2206206994597c13d831ec71790556ec097ce7bc90715b34b9f10000000006016553480156200007a57600080fd5b50604051620021d1380380620021d18339810160408190526200009d916200025b565b600080546001600160a01b0319166001600160a01b038381169182178355908252600160208190526040909220805460ff19169092179091558216620000f857737a250d5630b4cf539739df2c5dacb4c659f2488d620000fa565b815b600580546001600160a01b039283166001600160a01b031991821617909155600280549091163317905560115481166000908152600e6020526040808220805460ff1990811660019081179092557f6981a11ef3754d9b00d8868549ebf71e3d63f3e9dad47123e19ab5cdda32d36d8054821683179055736b175474e89094c44da98b954eedeac495271d0f9093527f5fe9af5f91cfc98605d0aeb168d7606a1f0945d723f233861d57da8bb2b06d1e805490931617909155600354905163095ea7b360e01b815291169063095ea7b390620001df90859060001990600401620002bb565b602060405180830381600087803b158015620001fa57600080fd5b505af11580156200020f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000235919062000292565b505050620002d4565b80516001600160a01b03811681146200025657600080fd5b919050565b600080604083850312156200026e578182fd5b62000279836200023e565b915062000289602084016200023e565b90509250929050565b600060208284031215620002a4578081fd5b81518015158114620002b4578182fd5b9392505050565b6001600160a01b03929092168252602082015260400190565b611eed80620002e46000396000f3fe60806040526004361061026b5760003560e01c806389a3027111610144578063ce7c2ac2116100b6578063e2d2e2191161007a578063e2d2e21914610713578063efca2eed14610728578063f0b37c041461073d578063f2fde38b1461075d578063f854a27f1461077d578063fe9fbb801461079d57610272565b8063ce7c2ac214610687578063d0e30db0146106b6578063d63a8e11146106be578063e0bab4c4146106de578063e0f8e243146106f357610272565b8063b6a5d7de11610108578063b6a5d7de146105d2578063bcd259a8146105f2578063c161357a14610612578063c238efd514610632578063c54e44eb14610652578063ca89b8991461066757610272565b806389a30271146105485780638e4241751461055d578063929925db1461057d578063997664d71461059d578063a995bb14146105b257610272565b80633333cfc3116101dd57806363eabae9116101a157806363eabae9146104935780637088fb7f146104b35780638366e79a146104c857806383e84500146104e8578063845610ee1461050857806387f681d81461052857610272565b80633333cfc3146103fe5780633a98ef391461041e5780634782e407146104335780635881f3ef14610453578063610035a41461047357610272565b806315f7e05e1161022f57806315f7e05e146103315780631b386a42146103515780632870e95d1461037157806328fd3198146103915780632bcf161c146103b15780632f54bf6e146103d157610272565b806302c4aede146102775780630300f925146102ad578063061ad62a146102da57806311ce023d146102fa57806314b6ca961461030f57610272565b3661027257005b600080fd5b34801561028357600080fd5b50610297610292366004611b77565b6107bd565b6040516102a49190611c97565b60405180910390f35b3480156102b957600080fd5b506102cd6102c8366004611b93565b6107d8565b6040516102a49190611df1565b3480156102e657600080fd5b506102976102f5366004611b77565b6107f5565b34801561030657600080fd5b506102cd610810565b34801561031b57600080fd5b5061032f61032a366004611c38565b610816565b005b34801561033d57600080fd5b5061032f61034c366004611b77565b6109a4565b34801561035d57600080fd5b506102cd61036c366004611b93565b6109b1565b34801561037d57600080fd5b5061032f61038c366004611b77565b6109dc565b34801561039d57600080fd5b506102cd6103ac366004611b77565b610a30565b3480156103bd57600080fd5b506102cd6103cc366004611b77565b610abc565b3480156103dd57600080fd5b506103f16103ec366004611b77565b610ad7565b6040516102a49190611cc4565b34801561040a57600080fd5b5061032f610419366004611c0b565b610aeb565b34801561042a57600080fd5b506102cd610b44565b34801561043f57600080fd5b5061032f61044e366004611b77565b610b4a565b34801561045f57600080fd5b5061032f61046e366004611b77565b610b91565b34801561047f57600080fd5b506103f161048e366004611b77565b610bd8565b34801561049f57600080fd5b5061032f6104ae366004611c0b565b610bf6565b3480156104bf57600080fd5b5061032f610c2e565b3480156104d457600080fd5b506103f16104e3366004611b93565b610c86565b3480156104f457600080fd5b5061032f610503366004611b93565b610de0565b34801561051457600080fd5b5061032f610523366004611b77565b610e33565b34801561053457600080fd5b5061032f610543366004611b77565b610e7a565b34801561055457600080fd5b50610297610ec8565b34801561056957600080fd5b506103f1610578366004611b93565b610ee0565b34801561058957600080fd5b506103f1610598366004611b93565b610f0e565b3480156105a957600080fd5b506102cd610f2e565b3480156105be57600080fd5b5061032f6105cd366004611b93565b610f34565b3480156105de57600080fd5b5061032f6105ed366004611b77565b610fe0565b3480156105fe57600080fd5b5061032f61060d366004611b93565b61102c565b34801561061e57600080fd5b5061032f61062d366004611bcb565b611079565b34801561063e57600080fd5b5061029761064d366004611b77565b611124565b34801561065e57600080fd5b50610297611142565b34801561067357600080fd5b506102cd610682366004611b77565b611151565b34801561069357600080fd5b506106a76106a2366004611b77565b611163565b6040516102a493929190611dfa565b61032f611184565b3480156106ca57600080fd5b506103f16106d9366004611b77565b6111da565b3480156106ea57600080fd5b506102976111ef565b3480156106ff57600080fd5b5061032f61070e366004611b77565b611207565b34801561071f57600080fd5b506102cd61124e565b34801561073457600080fd5b506102cd611254565b34801561074957600080fd5b5061032f610758366004611b77565b61125a565b34801561076957600080fd5b5061032f610778366004611b77565b6112a0565b34801561078957600080fd5b506103f1610798366004611b77565b611335565b3480156107a957600080fd5b506103f16107b8366004611b77565b61134a565b600d602052600090815260409020546001600160a01b031681565b600a60209081526000928352604080842090915290825290205481565b600f602052600090815260409020546001600160a01b031681565b60165481565b6002546001600160a01b0316331461082d57600080fd5b6001600160a01b038216600090815260106020526040902054156108bd576001600160a01b038083166000908152600f60209081526040808320549093168252600e9052205460ff16156108a6576001600160a01b038083166000908152600f60205260409020546108a191849116611368565b6108bd565b6011546108bd9083906001600160a01b0316611368565b6000811180156108e357506001600160a01b038216600090815260106020526040902054155b156108f6576108f18261196f565b610929565b8015801561091b57506001600160a01b03821660009081526010602052604090205415155b1561092957610929826119d0565b6001600160a01b03821660009081526010602052604090205460125461095a91839161095491611b1d565b90611b30565b6012556001600160a01b038216600090815260106020526040902081905561098181611b3c565b6001600160a01b0390921660009081526010602052604090206001019190915550565b6109ae3382611368565b50565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b6001600160a01b0381166000908152600e602052604090205460ff16610a0157600080fd5b336000908152600f6020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038116600090815260106020526040812054610a5557506000610ab7565b6001600160a01b038216600090815260106020526040812054610a7790611b3c565b6001600160a01b038416600090815260106020526040902060010154909150808211610aa857600092505050610ab7565b610ab28282611b1d565b925050505b919050565b6001600160a01b031660009081526009602052604090205490565b6000546001600160a01b0390811691161490565b610af433610ad7565b610b195760405162461bcd60e51b8152600401610b1090611dd1565b60405180910390fd5b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b60125481565b610b5333610ad7565b610b6f5760405162461bcd60e51b8152600401610b1090611dd1565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b610b9a33610ad7565b610bb65760405162461bcd60e51b8152600401610b1090611dd1565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03166000908152600e602052604090205460ff1690565b336000908152600b602090815260408083206001600160a01b0395909516835293905291909120805460ff1916911515919091179055565b610c3733610ad7565b610c535760405162461bcd60e51b8152600401610b1090611dd1565b6040514790339082156108fc029083906000818181858888f19350505050158015610c82573d6000803e3d6000fd5b5050565b6000610c9133610ad7565b610cad5760405162461bcd60e51b8152600401610b1090611dd1565b6001600160a01b038316301415610cd65760405162461bcd60e51b8152600401610b1090611d38565b6040516370a0823160e01b81526000906001600160a01b038516906370a0823190610d05903090600401611c97565b60206040518083038186803b158015610d1d57600080fd5b505afa158015610d31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d559190611c7f565b60405163a9059cbb60e01b81529091506001600160a01b0385169063a9059cbb90610d869086908590600401611cab565b602060405180830381600087803b158015610da057600080fd5b505af1158015610db4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd89190611c63565b949350505050565b610de933610ad7565b610e055760405162461bcd60e51b8152600401610b1090611dd1565b6001600160a01b039182166000908152600d6020526040902080546001600160a01b03191691909216179055565b610e3c33610ad7565b610e585760405162461bcd60e51b8152600401610b1090611dd1565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b610e8333610ad7565b610e9f5760405162461bcd60e51b8152600401610b1090611dd1565b6001600160a01b03166000908152600e60205260409020805460ff19811660ff90911615179055565b73a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4881565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205460ff1690565b600b60209081526000928352604080842090915290825290205460ff1681565b60135481565b610f3d33610ad7565b610f595760405162461bcd60e51b8152600401610b1090611dd1565b60405163095ea7b360e01b81526001600160a01b0383169063095ea7b390610f8990849060001990600401611cab565b602060405180830381600087803b158015610fa357600080fd5b505af1158015610fb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fdb9190611c63565b505050565b610fe933610ad7565b6110055760405162461bcd60e51b8152600401610b1090611dd1565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6001600160a01b0382166000908152600b6020908152604080832033845290915290205460ff1661106f5760405162461bcd60e51b8152600401610b1090611da6565b610c828282611368565b61108233610ad7565b61109e5760405162461bcd60e51b8152600401610b1090611dd1565b60405163095ea7b360e01b81526001600160a01b0384169063095ea7b3906110cc9085908590600401611cab565b602060405180830381600087803b1580156110e657600080fd5b505af11580156110fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111e9190611c63565b50505050565b6001600160a01b039081166000908152600d60205260409020541690565b6011546001600160a01b031681565b60096020526000908152604090205481565b60106020526000908152604090208054600182015460029092015490919083565b6002546001600160a01b0316331461119b57600080fd5b60135434906111aa9082611b30565b6013556012546016546111d4916111cb916111c59085611b5f565b90611b6b565b60155490611b30565b60155550565b600e6020526000908152604090205460ff1681565b736b175474e89094c44da98b954eedeac495271d0f81565b61121033610ad7565b61122c5760405162461bcd60e51b8152600401610b1090611dd1565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b60155481565b60145481565b61126333610ad7565b61127f5760405162461bcd60e51b8152600401610b1090611dd1565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6112a933610ad7565b6112c55760405162461bcd60e51b8152600401610b1090611dd1565b600080546001600160a01b0319166001600160a01b0383169081178255815260016020819052604091829020805460ff19169091179055517f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639061132a908390611c97565b60405180910390a150565b600c6020526000908152604090205460ff1681565b6001600160a01b031660009081526001602052604090205460ff1690565b6001600160a01b0381166000908152600e602052604090205460ff166113a05760405162461bcd60e51b8152600401610b1090611d6f565b6001600160a01b0382166000908152601060205260409020546113c257610c82565b60006113cd83610a30565b90508015610fdb576014546113e29082611b30565b6014556001600160a01b038316600090815260086020908152604080832042905560109091529020600201546114189082611b30565b6001600160a01b038416600090815260106020526040902060028101919091555461144290611b3c565b6001600160a01b0380851660009081526010602052604090206001019190915560035483821691161415611531576040516001600160a01b0384169082156108fc029083906000818181858888f193505050501580156114a6573d6000803e3d6000fd5b506001600160a01b0382166000908152600960205260409020546114ca9082611b30565b6001600160a01b03808416600090815260096020908152604080832094909455600a815283822092871682529190915220546115069082611b30565b6001600160a01b038084166000908152600a6020908152604080832093881683529290522055610fdb565b6040516370a0823160e01b815282906000906001600160a01b038316906370a0823190611562908890600401611c97565b60206040518083038186803b15801561157a57600080fd5b505afa15801561158e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b29190611c7f565b6001600160a01b038581166000908152600d6020526040902054919250166116e357604080516002808252606082018352600092602083019080368337505060035482519293506001600160a01b03169183915060009061162357634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050848160018151811061166557634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260055460405163b6f9de9560e01b815291169063b6f9de959086906116ab9060009086908c904290600401611ccf565b6000604051808303818588803b1580156116c457600080fd5b505af11580156116d8573d6000803e3d6000fd5b505050505050611842565b6040805160038082526080820190925260009160208201606080368337505060035482519293506001600160a01b03169183915060009061173457634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092018101919091528682166000908152600d909152604090205482519116908290600190811061178657634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b03168152505084816002815181106117c857634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260055460405163b6f9de9560e01b815291169063b6f9de9590869061180e9060009086908c904290600401611ccf565b6000604051808303818588803b15801561182757600080fd5b505af115801561183b573d6000803e3d6000fd5b5050505050505b6040516370a0823160e01b81526000906001600160a01b038416906370a0823190611871908990600401611c97565b60206040518083038186803b15801561188957600080fd5b505afa15801561189d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c19190611c7f565b90506118ef6118d08284611b1d565b6001600160a01b03871660009081526009602052604090205490611b30565b6001600160a01b0386166000908152600960205260409020556119416119158284611b1d565b6001600160a01b038088166000908152600a60209081526040808320938c168352929052205490611b30565b6001600160a01b038087166000908152600a60209081526040808320938b1683529290522055505050505050565b600680546001600160a01b039092166000818152600760205260408120849055600184018355919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f90910180546001600160a01b0319169091179055565b600680546119e090600190611e67565b815481106119fe57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0384811684526007909252604090922054600680549290931692918110611a4a57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260079182905260408120546006805491939291611a9690600190611e67565b81548110611ab457634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020556006805480611af857634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000611b298284611e67565b9392505050565b6000611b298284611e10565b6000611b596016546111c560155485611b5f90919063ffffffff16565b92915050565b6000611b298284611e48565b6000611b298284611e28565b600060208284031215611b88578081fd5b8135611b2981611e94565b60008060408385031215611ba5578081fd5b8235611bb081611e94565b91506020830135611bc081611e94565b809150509250929050565b600080600060608486031215611bdf578081fd5b8335611bea81611e94565b92506020840135611bfa81611e94565b929592945050506040919091013590565b60008060408385031215611c1d578182fd5b8235611c2881611e94565b91506020830135611bc081611ea9565b60008060408385031215611c4a578182fd5b8235611c5581611e94565b946020939093013593505050565b600060208284031215611c74578081fd5b8151611b2981611ea9565b600060208284031215611c90578081fd5b5051919050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b600060808201868352602060808185015281875180845260a0860191508289019350845b81811015611d185784516001600160a01b031683529383019391830191600101611cf3565b50506001600160a01b039690961660408501525050506060015292915050565b6020808252601c908201527f43616e2774207769746864726177206e617469766520746f6b656e7300000000604082015260600190565b60208082526017908201527f496e76616c696420726577617264206164647265737321000000000000000000604082015260600190565b602080825260119082015270165bdd4818d85b89dd08191bc81d1a185d607a1b604082015260600190565b60208082526006908201526510a7aba722a960d11b604082015260600190565b90815260200190565b9283526020830191909152604082015260600190565b60008219821115611e2357611e23611e7e565b500190565b600082611e4357634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615611e6257611e62611e7e565b500290565b600082821015611e7957611e79611e7e565b500390565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03811681146109ae57600080fd5b80151581146109ae57600080fdfea2646970667358221220ad5254eef683522e82b88021aba9416ef130c4d508f0aff855515c93fe978ca264736f6c63430008000033a264697066735822122079eaa6067ab7409ca0369fc09d8bf27e559c3b6baf94a55539d8747d76b68ca364736f6c634300080000336080604052600380546001600160a01b031990811673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc29081179092556004805482169092179091556011805490911673dac17f958d2ee523a2206206994597c13d831ec71790556ec097ce7bc90715b34b9f10000000006016553480156200007a57600080fd5b50604051620021d1380380620021d18339810160408190526200009d916200025b565b600080546001600160a01b0319166001600160a01b038381169182178355908252600160208190526040909220805460ff19169092179091558216620000f857737a250d5630b4cf539739df2c5dacb4c659f2488d620000fa565b815b600580546001600160a01b039283166001600160a01b031991821617909155600280549091163317905560115481166000908152600e6020526040808220805460ff1990811660019081179092557f6981a11ef3754d9b00d8868549ebf71e3d63f3e9dad47123e19ab5cdda32d36d8054821683179055736b175474e89094c44da98b954eedeac495271d0f9093527f5fe9af5f91cfc98605d0aeb168d7606a1f0945d723f233861d57da8bb2b06d1e805490931617909155600354905163095ea7b360e01b815291169063095ea7b390620001df90859060001990600401620002bb565b602060405180830381600087803b158015620001fa57600080fd5b505af11580156200020f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000235919062000292565b505050620002d4565b80516001600160a01b03811681146200025657600080fd5b919050565b600080604083850312156200026e578182fd5b62000279836200023e565b915062000289602084016200023e565b90509250929050565b600060208284031215620002a4578081fd5b81518015158114620002b4578182fd5b9392505050565b6001600160a01b03929092168252602082015260400190565b611eed80620002e46000396000f3fe60806040526004361061026b5760003560e01c806389a3027111610144578063ce7c2ac2116100b6578063e2d2e2191161007a578063e2d2e21914610713578063efca2eed14610728578063f0b37c041461073d578063f2fde38b1461075d578063f854a27f1461077d578063fe9fbb801461079d57610272565b8063ce7c2ac214610687578063d0e30db0146106b6578063d63a8e11146106be578063e0bab4c4146106de578063e0f8e243146106f357610272565b8063b6a5d7de11610108578063b6a5d7de146105d2578063bcd259a8146105f2578063c161357a14610612578063c238efd514610632578063c54e44eb14610652578063ca89b8991461066757610272565b806389a30271146105485780638e4241751461055d578063929925db1461057d578063997664d71461059d578063a995bb14146105b257610272565b80633333cfc3116101dd57806363eabae9116101a157806363eabae9146104935780637088fb7f146104b35780638366e79a146104c857806383e84500146104e8578063845610ee1461050857806387f681d81461052857610272565b80633333cfc3146103fe5780633a98ef391461041e5780634782e407146104335780635881f3ef14610453578063610035a41461047357610272565b806315f7e05e1161022f57806315f7e05e146103315780631b386a42146103515780632870e95d1461037157806328fd3198146103915780632bcf161c146103b15780632f54bf6e146103d157610272565b806302c4aede146102775780630300f925146102ad578063061ad62a146102da57806311ce023d146102fa57806314b6ca961461030f57610272565b3661027257005b600080fd5b34801561028357600080fd5b50610297610292366004611b77565b6107bd565b6040516102a49190611c97565b60405180910390f35b3480156102b957600080fd5b506102cd6102c8366004611b93565b6107d8565b6040516102a49190611df1565b3480156102e657600080fd5b506102976102f5366004611b77565b6107f5565b34801561030657600080fd5b506102cd610810565b34801561031b57600080fd5b5061032f61032a366004611c38565b610816565b005b34801561033d57600080fd5b5061032f61034c366004611b77565b6109a4565b34801561035d57600080fd5b506102cd61036c366004611b93565b6109b1565b34801561037d57600080fd5b5061032f61038c366004611b77565b6109dc565b34801561039d57600080fd5b506102cd6103ac366004611b77565b610a30565b3480156103bd57600080fd5b506102cd6103cc366004611b77565b610abc565b3480156103dd57600080fd5b506103f16103ec366004611b77565b610ad7565b6040516102a49190611cc4565b34801561040a57600080fd5b5061032f610419366004611c0b565b610aeb565b34801561042a57600080fd5b506102cd610b44565b34801561043f57600080fd5b5061032f61044e366004611b77565b610b4a565b34801561045f57600080fd5b5061032f61046e366004611b77565b610b91565b34801561047f57600080fd5b506103f161048e366004611b77565b610bd8565b34801561049f57600080fd5b5061032f6104ae366004611c0b565b610bf6565b3480156104bf57600080fd5b5061032f610c2e565b3480156104d457600080fd5b506103f16104e3366004611b93565b610c86565b3480156104f457600080fd5b5061032f610503366004611b93565b610de0565b34801561051457600080fd5b5061032f610523366004611b77565b610e33565b34801561053457600080fd5b5061032f610543366004611b77565b610e7a565b34801561055457600080fd5b50610297610ec8565b34801561056957600080fd5b506103f1610578366004611b93565b610ee0565b34801561058957600080fd5b506103f1610598366004611b93565b610f0e565b3480156105a957600080fd5b506102cd610f2e565b3480156105be57600080fd5b5061032f6105cd366004611b93565b610f34565b3480156105de57600080fd5b5061032f6105ed366004611b77565b610fe0565b3480156105fe57600080fd5b5061032f61060d366004611b93565b61102c565b34801561061e57600080fd5b5061032f61062d366004611bcb565b611079565b34801561063e57600080fd5b5061029761064d366004611b77565b611124565b34801561065e57600080fd5b50610297611142565b34801561067357600080fd5b506102cd610682366004611b77565b611151565b34801561069357600080fd5b506106a76106a2366004611b77565b611163565b6040516102a493929190611dfa565b61032f611184565b3480156106ca57600080fd5b506103f16106d9366004611b77565b6111da565b3480156106ea57600080fd5b506102976111ef565b3480156106ff57600080fd5b5061032f61070e366004611b77565b611207565b34801561071f57600080fd5b506102cd61124e565b34801561073457600080fd5b506102cd611254565b34801561074957600080fd5b5061032f610758366004611b77565b61125a565b34801561076957600080fd5b5061032f610778366004611b77565b6112a0565b34801561078957600080fd5b506103f1610798366004611b77565b611335565b3480156107a957600080fd5b506103f16107b8366004611b77565b61134a565b600d602052600090815260409020546001600160a01b031681565b600a60209081526000928352604080842090915290825290205481565b600f602052600090815260409020546001600160a01b031681565b60165481565b6002546001600160a01b0316331461082d57600080fd5b6001600160a01b038216600090815260106020526040902054156108bd576001600160a01b038083166000908152600f60209081526040808320549093168252600e9052205460ff16156108a6576001600160a01b038083166000908152600f60205260409020546108a191849116611368565b6108bd565b6011546108bd9083906001600160a01b0316611368565b6000811180156108e357506001600160a01b038216600090815260106020526040902054155b156108f6576108f18261196f565b610929565b8015801561091b57506001600160a01b03821660009081526010602052604090205415155b1561092957610929826119d0565b6001600160a01b03821660009081526010602052604090205460125461095a91839161095491611b1d565b90611b30565b6012556001600160a01b038216600090815260106020526040902081905561098181611b3c565b6001600160a01b0390921660009081526010602052604090206001019190915550565b6109ae3382611368565b50565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b6001600160a01b0381166000908152600e602052604090205460ff16610a0157600080fd5b336000908152600f6020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038116600090815260106020526040812054610a5557506000610ab7565b6001600160a01b038216600090815260106020526040812054610a7790611b3c565b6001600160a01b038416600090815260106020526040902060010154909150808211610aa857600092505050610ab7565b610ab28282611b1d565b925050505b919050565b6001600160a01b031660009081526009602052604090205490565b6000546001600160a01b0390811691161490565b610af433610ad7565b610b195760405162461bcd60e51b8152600401610b1090611dd1565b60405180910390fd5b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b60125481565b610b5333610ad7565b610b6f5760405162461bcd60e51b8152600401610b1090611dd1565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b610b9a33610ad7565b610bb65760405162461bcd60e51b8152600401610b1090611dd1565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03166000908152600e602052604090205460ff1690565b336000908152600b602090815260408083206001600160a01b0395909516835293905291909120805460ff1916911515919091179055565b610c3733610ad7565b610c535760405162461bcd60e51b8152600401610b1090611dd1565b6040514790339082156108fc029083906000818181858888f19350505050158015610c82573d6000803e3d6000fd5b5050565b6000610c9133610ad7565b610cad5760405162461bcd60e51b8152600401610b1090611dd1565b6001600160a01b038316301415610cd65760405162461bcd60e51b8152600401610b1090611d38565b6040516370a0823160e01b81526000906001600160a01b038516906370a0823190610d05903090600401611c97565b60206040518083038186803b158015610d1d57600080fd5b505afa158015610d31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d559190611c7f565b60405163a9059cbb60e01b81529091506001600160a01b0385169063a9059cbb90610d869086908590600401611cab565b602060405180830381600087803b158015610da057600080fd5b505af1158015610db4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd89190611c63565b949350505050565b610de933610ad7565b610e055760405162461bcd60e51b8152600401610b1090611dd1565b6001600160a01b039182166000908152600d6020526040902080546001600160a01b03191691909216179055565b610e3c33610ad7565b610e585760405162461bcd60e51b8152600401610b1090611dd1565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b610e8333610ad7565b610e9f5760405162461bcd60e51b8152600401610b1090611dd1565b6001600160a01b03166000908152600e60205260409020805460ff19811660ff90911615179055565b73a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4881565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205460ff1690565b600b60209081526000928352604080842090915290825290205460ff1681565b60135481565b610f3d33610ad7565b610f595760405162461bcd60e51b8152600401610b1090611dd1565b60405163095ea7b360e01b81526001600160a01b0383169063095ea7b390610f8990849060001990600401611cab565b602060405180830381600087803b158015610fa357600080fd5b505af1158015610fb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fdb9190611c63565b505050565b610fe933610ad7565b6110055760405162461bcd60e51b8152600401610b1090611dd1565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6001600160a01b0382166000908152600b6020908152604080832033845290915290205460ff1661106f5760405162461bcd60e51b8152600401610b1090611da6565b610c828282611368565b61108233610ad7565b61109e5760405162461bcd60e51b8152600401610b1090611dd1565b60405163095ea7b360e01b81526001600160a01b0384169063095ea7b3906110cc9085908590600401611cab565b602060405180830381600087803b1580156110e657600080fd5b505af11580156110fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111e9190611c63565b50505050565b6001600160a01b039081166000908152600d60205260409020541690565b6011546001600160a01b031681565b60096020526000908152604090205481565b60106020526000908152604090208054600182015460029092015490919083565b6002546001600160a01b0316331461119b57600080fd5b60135434906111aa9082611b30565b6013556012546016546111d4916111cb916111c59085611b5f565b90611b6b565b60155490611b30565b60155550565b600e6020526000908152604090205460ff1681565b736b175474e89094c44da98b954eedeac495271d0f81565b61121033610ad7565b61122c5760405162461bcd60e51b8152600401610b1090611dd1565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b60155481565b60145481565b61126333610ad7565b61127f5760405162461bcd60e51b8152600401610b1090611dd1565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6112a933610ad7565b6112c55760405162461bcd60e51b8152600401610b1090611dd1565b600080546001600160a01b0319166001600160a01b0383169081178255815260016020819052604091829020805460ff19169091179055517f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639061132a908390611c97565b60405180910390a150565b600c6020526000908152604090205460ff1681565b6001600160a01b031660009081526001602052604090205460ff1690565b6001600160a01b0381166000908152600e602052604090205460ff166113a05760405162461bcd60e51b8152600401610b1090611d6f565b6001600160a01b0382166000908152601060205260409020546113c257610c82565b60006113cd83610a30565b90508015610fdb576014546113e29082611b30565b6014556001600160a01b038316600090815260086020908152604080832042905560109091529020600201546114189082611b30565b6001600160a01b038416600090815260106020526040902060028101919091555461144290611b3c565b6001600160a01b0380851660009081526010602052604090206001019190915560035483821691161415611531576040516001600160a01b0384169082156108fc029083906000818181858888f193505050501580156114a6573d6000803e3d6000fd5b506001600160a01b0382166000908152600960205260409020546114ca9082611b30565b6001600160a01b03808416600090815260096020908152604080832094909455600a815283822092871682529190915220546115069082611b30565b6001600160a01b038084166000908152600a6020908152604080832093881683529290522055610fdb565b6040516370a0823160e01b815282906000906001600160a01b038316906370a0823190611562908890600401611c97565b60206040518083038186803b15801561157a57600080fd5b505afa15801561158e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b29190611c7f565b6001600160a01b038581166000908152600d6020526040902054919250166116e357604080516002808252606082018352600092602083019080368337505060035482519293506001600160a01b03169183915060009061162357634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050848160018151811061166557634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260055460405163b6f9de9560e01b815291169063b6f9de959086906116ab9060009086908c904290600401611ccf565b6000604051808303818588803b1580156116c457600080fd5b505af11580156116d8573d6000803e3d6000fd5b505050505050611842565b6040805160038082526080820190925260009160208201606080368337505060035482519293506001600160a01b03169183915060009061173457634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092018101919091528682166000908152600d909152604090205482519116908290600190811061178657634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b03168152505084816002815181106117c857634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260055460405163b6f9de9560e01b815291169063b6f9de9590869061180e9060009086908c904290600401611ccf565b6000604051808303818588803b15801561182757600080fd5b505af115801561183b573d6000803e3d6000fd5b5050505050505b6040516370a0823160e01b81526000906001600160a01b038416906370a0823190611871908990600401611c97565b60206040518083038186803b15801561188957600080fd5b505afa15801561189d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c19190611c7f565b90506118ef6118d08284611b1d565b6001600160a01b03871660009081526009602052604090205490611b30565b6001600160a01b0386166000908152600960205260409020556119416119158284611b1d565b6001600160a01b038088166000908152600a60209081526040808320938c168352929052205490611b30565b6001600160a01b038087166000908152600a60209081526040808320938b1683529290522055505050505050565b600680546001600160a01b039092166000818152600760205260408120849055600184018355919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f90910180546001600160a01b0319169091179055565b600680546119e090600190611e67565b815481106119fe57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0384811684526007909252604090922054600680549290931692918110611a4a57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260079182905260408120546006805491939291611a9690600190611e67565b81548110611ab457634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020556006805480611af857634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000611b298284611e67565b9392505050565b6000611b298284611e10565b6000611b596016546111c560155485611b5f90919063ffffffff16565b92915050565b6000611b298284611e48565b6000611b298284611e28565b600060208284031215611b88578081fd5b8135611b2981611e94565b60008060408385031215611ba5578081fd5b8235611bb081611e94565b91506020830135611bc081611e94565b809150509250929050565b600080600060608486031215611bdf578081fd5b8335611bea81611e94565b92506020840135611bfa81611e94565b929592945050506040919091013590565b60008060408385031215611c1d578182fd5b8235611c2881611e94565b91506020830135611bc081611ea9565b60008060408385031215611c4a578182fd5b8235611c5581611e94565b946020939093013593505050565b600060208284031215611c74578081fd5b8151611b2981611ea9565b600060208284031215611c90578081fd5b5051919050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b600060808201868352602060808185015281875180845260a0860191508289019350845b81811015611d185784516001600160a01b031683529383019391830191600101611cf3565b50506001600160a01b039690961660408501525050506060015292915050565b6020808252601c908201527f43616e2774207769746864726177206e617469766520746f6b656e7300000000604082015260600190565b60208082526017908201527f496e76616c696420726577617264206164647265737321000000000000000000604082015260600190565b602080825260119082015270165bdd4818d85b89dd08191bc81d1a185d607a1b604082015260600190565b60208082526006908201526510a7aba722a960d11b604082015260600190565b90815260200190565b9283526020830191909152604082015260600190565b60008219821115611e2357611e23611e7e565b500190565b600082611e4357634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615611e6257611e62611e7e565b500290565b600082821015611e7957611e79611e7e565b500390565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03811681146109ae57600080fd5b80151581146109ae57600080fdfea2646970667358221220ad5254eef683522e82b88021aba9416ef130c4d508f0aff855515c93fe978ca264736f6c63430008000033

Deployed Bytecode

0x6080604052600436106200036d5760003560e01c8063893d20e811620001d5578063cd806f43116200010f578063e91f214e11620000a3578063f708a64f1162000079578063f708a64f14620009d3578063f887ea4014620009f8578063f94843d61462000a10578063fe9fbb801462000a285762000375565b8063e91f214e1462000971578063f0b37c041462000989578063f2fde38b14620009ae5762000375565b8063db006a7511620000e5578063db006a7514620008dd578063dd62ed3e1462000902578063e0f8e2431462000927578063e8aaaeaf146200094c5762000375565b8063cd806f43146200086e578063d56a96571462000893578063da541e0914620008b85762000375565b8063a51af4c51162000187578063ad5c4648116200015d578063ad5c464814620007f4578063b62496f5146200080c578063b6a5d7de1462000831578063cae599cc14620008565762000375565b8063a51af4c5146200079f578063a8aa1b3114620007b7578063a9059cbb14620007cf5762000375565b8063893d20e814620006f55780638a8c523c146200070d57806391950f30146200072557806395d89b41146200073d5780639a7a23d61462000755578063a0712d68146200077a5762000375565b80634ada218b11620002a7578063649fa85111620002595780637088fb7f116200022f5780637088fb7f146200066e57806370a0823114620006865780638366e79a14620006ab578063845610ee14620006d05762000375565b8063649fa85114620005ff5780636c3f6c3d14620006245780636d92e1a514620006495762000375565b80634ada218b1462000539578063516f0a1b146200055157806352d3f6da1462000576578063571ac8b0146200058e5780635881f3ef14620005b35780635c975abb14620005e75762000375565b806323b872dd116200031f5780632b70b8a611620002f55780632b70b8a614620004b05780632f54bf6e14620004c8578063313ce56714620004ed5780634355855a14620005145762000375565b806323b872dd146200044e57806326560be714620004735780632b112e4914620004985762000375565b806303ba9c6b146200037a5780630448f2f714620003a157806306fdde0314620003d1578063095ea7b314620003f8578063152111f7146200041d57806318160ddd14620004275762000375565b366200037557005b600080fd5b3480156200038757600080fd5b506200039f620003993660046200267b565b62000a4d565b005b348015620003ae57600080fd5b50620003b962000ab4565b604051620003c89190620028bc565b60405180910390f35b348015620003de57600080fd5b50620003e962000ac4565b604051620003c89190620028c7565b3480156200040557600080fd5b50620003b9620004173660046200276d565b62000afb565b6200039f62000b67565b3480156200043457600080fd5b506200043f62000c00565b604051620003c8919062002c63565b3480156200045b57600080fd5b50620003b96200046d366004620026f6565b62000c06565b3480156200048057600080fd5b506200039f62000492366004620027e1565b62000ccd565b348015620004a557600080fd5b506200043f62000d15565b348015620004bd57600080fd5b50620003b962000d66565b348015620004d557600080fd5b50620003b9620004e73660046200267b565b62000d76565b348015620004fa57600080fd5b506200050562000d8a565b604051620003c8919062002c6c565b3480156200052157600080fd5b50620003b9620005333660046200267b565b62000d8f565b3480156200054657600080fd5b50620003b962000da4565b3480156200055e57600080fd5b50620003b9620005703660046200267b565b62000db4565b3480156200058357600080fd5b50620003b962000dc8565b3480156200059b57600080fd5b50620003b9620005ad3660046200267b565b62000dd8565b348015620005c057600080fd5b50620005d8620005d23660046200267b565b62000dee565b604051620003c8919062002851565b348015620005f457600080fd5b50620003b962001194565b3480156200060c57600080fd5b506200039f6200061e3660046200273b565b620011a4565b3480156200063157600080fd5b506200039f62000643366004620027e1565b62001221565b3480156200065657600080fd5b50620003b9620006683660046200267b565b62001269565b3480156200067b57600080fd5b506200039f62001287565b3480156200069357600080fd5b506200043f620006a53660046200267b565b620012ef565b348015620006b857600080fd5b50620003b9620006ca366004620026b9565b6200130a565b348015620006dd57600080fd5b506200039f620006ef3660046200267b565b62001448565b3480156200070257600080fd5b50620005d862001494565b3480156200071a57600080fd5b506200039f620014a3565b3480156200073257600080fd5b50620003b9620014f4565b3480156200074a57600080fd5b50620003e9620014fd565b3480156200076257600080fd5b506200039f620007743660046200273b565b6200151c565b3480156200078757600080fd5b506200039f620007993660046200281f565b62001552565b348015620007ac57600080fd5b50620005d862001839565b348015620007c457600080fd5b50620005d862001848565b348015620007dc57600080fd5b50620003b9620007ee3660046200276d565b62001857565b3480156200080157600080fd5b50620005d86200186d565b3480156200081957600080fd5b50620003b96200082b3660046200267b565b6200187c565b3480156200083e57600080fd5b506200039f620008503660046200267b565b62001891565b3480156200086357600080fd5b506200039f620018e2565b3480156200087b57600080fd5b506200039f6200088d3660046200273b565b62001948565b348015620008a057600080fd5b506200039f620008b23660046200279b565b62001bfc565b348015620008c557600080fd5b506200039f620008d7366004620027e1565b62001d29565b348015620008ea57600080fd5b506200039f620008fc3660046200281f565b62001d71565b3480156200090f57600080fd5b506200043f62000921366004620026b9565b62001ff8565b3480156200093457600080fd5b506200039f620009463660046200267b565b62002023565b3480156200095957600080fd5b506200039f6200096b3660046200267b565b6200206f565b3480156200097e57600080fd5b506200043f62002212565b3480156200099657600080fd5b506200039f620009a83660046200267b565b62002226565b348015620009bb57600080fd5b506200039f620009cd3660046200267b565b62002271565b348015620009e057600080fd5b506200039f620009f23660046200273b565b6200230d565b34801562000a0557600080fd5b50620005d862002452565b34801562000a1d57600080fd5b50620005d862002461565b34801562000a3557600080fd5b50620003b962000a473660046200267b565b62002470565b62000a583362000d76565b8062000a6a575062000a6a3362000db4565b62000a925760405162461bcd60e51b815260040162000a899062002aa1565b60405180910390fd5b600980546001600160a01b0319166001600160a01b0392909216919091179055565b601654600160a81b900460ff1681565b60408051808201909152601981527f5374616b656420577261707065642042656172204275636b7300000000000000602082015290565b336000818152600f602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259062000b5690869062002c63565b60405180910390a350600192915050565b62000b723362000db4565b62000b915760405162461bcd60e51b815260040162000a899062002998565b341562000bfe57601560009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801562000be957600080fd5b505af19350505050801562000bfc575060015b505b565b600d5490565b600d546001600160a01b0384166000908152600f6020908152604080832033845290915281205490911462000cb8576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600f8252838120338252909152919091205462000c939184906200248e565b6001600160a01b0385166000908152600f602090815260408083203384529091529020555b62000cc5848484620024bd565b949350505050565b62000cd83362002470565b62000cf75760405162461bcd60e51b815260040162000a899062002c3e565b60168054911515600160a01b0260ff60a01b19909216919091179055565b60065460009062000d619062000d34906001600160a01b0316620012ef565b60055462000d5a9062000d50906001600160a01b0316620012ef565b600d5490620025d7565b90620025d7565b905090565b601654600160b01b900460ff1681565b6000546001600160a01b0390811691161490565b600990565b60106020526000908152604090205460ff1681565b601654600160a01b900460ff1681565b6009546001600160a01b0390811691161490565b601654600160c01b900460ff1681565b600062000de882600d5462000afb565b92915050565b600062000dfb3362000d76565b62000e1a5760405162461bcd60e51b815260040162000a899062002afd565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801562000e5957600080fd5b505afa15801562000e6e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e9491906200269a565b6001600160a01b031663e6a43905600b60009054906101000a90046001600160a01b0316836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801562000ef257600080fd5b505afa15801562000f07573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000f2d91906200269a565b6040518363ffffffff1660e01b815260040162000f4c92919062002865565b60206040518083038186803b15801562000f6557600080fd5b505afa15801562000f7a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000fa091906200269a565b91506001600160a01b0382166200113757806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801562000feb57600080fd5b505afa15801562001000573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200102691906200269a565b6001600160a01b031663c9c65396600b60009054906101000a90046001600160a01b0316836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200108457600080fd5b505afa15801562001099573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010bf91906200269a565b6040518363ffffffff1660e01b8152600401620010de92919062002865565b602060405180830381600087803b158015620010f957600080fd5b505af11580156200110e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200113491906200269a565b91505b601480546001600160a01b038085166001600160a01b03199283161790925560138054938316939091169290921791829055600d54600b5482166000908152600f6020908152604080832095909416825293909352912055919050565b601654600160b81b900460ff1681565b620011af3362000d76565b620011ce5760405162461bcd60e51b815260040162000a899062002afd565b600880546001600160a01b0384166001600160a01b03199182168117909255600a8054909116909117905580156200121d57600854600d546200121b916001600160a01b03169062000afb565b505b5050565b6200122c3362000d76565b6200124b5760405162461bcd60e51b815260040162000a899062002afd565b60168054911515600160c01b0260ff60c01b19909216919091179055565b6001600160a01b031660009081526010602052604090205460ff1690565b620012923362000d76565b620012b15760405162461bcd60e51b815260040162000a899062002afd565b600b546040516001600160a01b039091163190339082156108fc029083906000818181858888f193505050501580156200121d573d6000803e3d6000fd5b6001600160a01b03166000908152600e602052604090205490565b6000620013173362000d76565b620013365760405162461bcd60e51b815260040162000a899062002afd565b600b546040516370a0823160e01b81526000916001600160a01b03808716926370a08231926200136b92169060040162002851565b60206040518083038186803b1580156200138457600080fd5b505afa15801562001399573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013bf919062002838565b60405163a9059cbb60e01b81529091506001600160a01b0385169063a9059cbb90620013f29086908590600401620028a3565b602060405180830381600087803b1580156200140d57600080fd5b505af115801562001422573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000cc5919062002800565b620014533362000d76565b620014725760405162461bcd60e51b815260040162000a899062002afd565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031690565b620014ae3362002470565b620014cd5760405162461bcd60e51b815260040162000a899062002c3e565b601654600160a01b900460ff1662000bfe576016805460ff60a01b1916600160a01b179055565b60115460ff1681565b6040805180820190915260058152643c2122a0a960d91b602082015290565b620015273362000d76565b620015465760405162461bcd60e51b815260040162000a899062002afd565b6200121d8282620025e5565b600280541415620015775760405162461bcd60e51b815260040162000a899062002b99565b60028055601654600160b01b900460ff1615620015a85760405162461bcd60e51b815260040162000a899062002a29565b601654600160b81b900460ff1615620015d55760405162461bcd60e51b815260040162000a899062002bd0565b601654600160c01b900460ff16156200176257600a546040516370a0823160e01b815282916001600160a01b0316906370a08231906200161a90339060040162002851565b60206040518083038186803b1580156200163357600080fd5b505afa15801562001648573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200166e919062002838565b10156200168f5760405162461bcd60e51b815260040162000a899062002b1d565b600a54600b54604051636eb1769f60e11b815283926001600160a01b039081169263dd62ed3e92620016c8923392169060040162002865565b60206040518083038186803b158015620016e157600080fd5b505afa158015620016f6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200171c919062002838565b10156200173d5760405162461bcd60e51b815260040162000a899062002a6a565b80600d541015620017625760405162461bcd60e51b815260040162000a8990620029bb565b600a54600b546040516323b872dd60e01b81526000926001600160a01b03908116926323b872dd926200179e923392169087906004016200287f565b602060405180830381600087803b158015620017b957600080fd5b505af1158015620017ce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017f4919062002800565b905080620018165760405162461bcd60e51b815260040162000a8990620029f2565b600b546200182f906001600160a01b03163384620024bd565b5050600160025550565b6016546001600160a01b031681565b6014546001600160a01b031681565b600062001866338484620024bd565b9392505050565b6004546001600160a01b031681565b60126020526000908152604090205460ff1681565b6200189c3362000d76565b620018bb5760405162461bcd60e51b815260040162000a899062002afd565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b620018ed3362000d76565b6200190c5760405162461bcd60e51b815260040162000a899062002afd565b601654600160b01b900460ff1615620019395760405162461bcd60e51b815260040162000a899062002a29565b6016805460ff60a81b19169055565b620019533362000d76565b620019725760405162461bcd60e51b815260040162000a899062002afd565b601380546001600160a01b0319166001600160a01b0384811691909117918290556040805163c45a015560e01b81529051929091169163c45a015591600480820192602092909190829003018186803b158015620019cf57600080fd5b505afa158015620019e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001a0a91906200269a565b60048054600b546040516364e329cb60e11b81526001600160a01b039485169463c9c653969462001a4394821693909116910162002865565b602060405180830381600087803b15801562001a5e57600080fd5b505af115801562001a73573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001a9991906200269a565b601480546001600160a01b0319166001600160a01b03928316179055600d54600b5482166000908152600f6020908152604080832060135490951683529390529190912055801562001b9057601360009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801562001b3457600080fd5b505afa15801562001b49573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001b6f91906200269a565b600480546001600160a01b0319166001600160a01b03929092169190911790555b813360405162001ba0906200266d565b62001bad92919062002865565b604051809103906000f08015801562001bca573d6000803e3d6000fd5b50601580546001600160a01b03199081166001600160a01b039384161791829055601680549290931691161790555050565b62001c073362000d76565b62001c265760405162461bcd60e51b815260040162000a899062002afd565b601654600160b01b900460ff161562001c535760405162461bcd60e51b815260040162000a899062002a29565b601654600160a81b900460ff1662001c7f5760405162461bcd60e51b815260040162000a89906200291d565b600a5460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb9062001cb39086908690600401620028a3565b602060405180830381600087803b15801562001cce57600080fd5b505af115801562001ce3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001d09919062002800565b5080156200121b576016805460ff60b01b1916600160b01b179055505050565b62001d343362000d76565b62001d535760405162461bcd60e51b815260040162000a899062002afd565b60168054911515600160b81b0260ff60b81b19909216919091179055565b60028054141562001d965760405162461bcd60e51b815260040162000a899062002b99565b60028055601654600160b01b900460ff161562001dc75760405162461bcd60e51b815260040162000a899062002a29565b601654600160b81b900460ff161562001df45760405162461bcd60e51b815260040162000a899062002bd0565b601654600160c01b900460ff161562001e8157336000908152600e602052604090205481111562001e395760405162461bcd60e51b815260040162000a899062002961565b336000908152600f60209081526040808320600b546001600160a01b0316845290915290205481111562001e815760405162461bcd60e51b815260040162000a899062002a6a565b600a54600b546040516370a0823160e01b815283926001600160a01b03908116926370a082319262001eba929091169060040162002851565b60206040518083038186803b15801562001ed357600080fd5b505afa15801562001ee8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f0e919062002838565b101562001f2f5760405162461bcd60e51b815260040162000a899062002b54565b600b5460009062001f4c9033906001600160a01b031684620024bd565b90508062001f6e5760405162461bcd60e51b815260040162000a899062002ace565b600a5460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb9062001fa29033908690600401620028a3565b602060405180830381600087803b15801562001fbd57600080fd5b505af115801562001fd2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200182f919062002800565b6001600160a01b039182166000908152600f6020908152604080832093909416825291909152205490565b6200202e3362000d76565b6200204d5760405162461bcd60e51b815260040162000a899062002afd565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6200207a3362000d76565b620020995760405162461bcd60e51b815260040162000a899062002afd565b601654600160b01b900460ff1615620020c65760405162461bcd60e51b815260040162000a899062002a29565b601654600160a81b900460ff16620020f25760405162461bcd60e51b815260040162000a89906200291d565b600a54600b546040516370a0823160e01b81526001600160a01b039283169263a9059cbb92859285926370a0823192620021329291169060040162002851565b60206040518083038186803b1580156200214b57600080fd5b505afa15801562002160573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002186919062002838565b6040518363ffffffff1660e01b8152600401620021a5929190620028a3565b602060405180830381600087803b158015620021c057600080fd5b505af1158015620021d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620021fb919062002800565b50506016805460ff60b01b1916600160b01b179055565b6fffffffffffffffffffffffffffffffff81565b620022313362000d76565b620022505760405162461bcd60e51b815260040162000a899062002afd565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6200227c3362000d76565b6200229b5760405162461bcd60e51b815260040162000a899062002afd565b600080546001600160a01b0319166001600160a01b0383169081178255815260016020819052604091829020805460ff19169091179055517f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163906200230290839062002851565b60405180910390a150565b620023183362002470565b620023375760405162461bcd60e51b815260040162000a899062002c3e565b6001600160a01b0382166000908152601060205260409020805460ff19168215801591909117909155620023d457601554604051630a5b654b60e11b81526001600160a01b03909116906314b6ca96906200239a908590600090600401620028a3565b600060405180830381600087803b158015620023b557600080fd5b505af1158015620023ca573d6000803e3d6000fd5b505050506200121d565b6015546001600160a01b038381166000908152600e602052604090819020549051630a5b654b60e11b815291909216916314b6ca96916200241a918691600401620028a3565b600060405180830381600087803b1580156200243557600080fd5b505af11580156200244a573d6000803e3d6000fd5b505050505050565b6013546001600160a01b031681565b600b546001600160a01b031681565b6001600160a01b031660009081526001602052604090205460ff1690565b60008184841115620024b55760405162461bcd60e51b815260040162000a899190620028c7565b505050900390565b601654600090600160a01b900460ff16620024ec5760405162461bcd60e51b815260040162000a899062002c07565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0387166000908152600e9091529190912054620025409184906200248e565b6001600160a01b038086166000908152600e602052604080822093909355908516815220546200257190836200265f565b6001600160a01b038085166000818152600e602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90620025c590869062002c63565b60405180910390a35060019392505050565b600062001866828462002c95565b6001600160a01b0382166000908152601260205260409020805460ff1916821580159190911790915562002637576001600160a01b0382166000908152601060205260409020805460ff191660011790555b806200121d57506001600160a01b03166000908152601060205260409020805460ff19169055565b600062001866828462002c7a565b6121d18062002ceb83390190565b6000602082840312156200268d578081fd5b8135620018668162002cc5565b600060208284031215620026ac578081fd5b8151620018668162002cc5565b60008060408385031215620026cc578081fd5b8235620026d98162002cc5565b91506020830135620026eb8162002cc5565b809150509250929050565b6000806000606084860312156200270b578081fd5b8335620027188162002cc5565b925060208401356200272a8162002cc5565b929592945050506040919091013590565b600080604083850312156200274e578182fd5b82356200275b8162002cc5565b91506020830135620026eb8162002cdb565b6000806040838503121562002780578182fd5b82356200278d8162002cc5565b946020939093013593505050565b600080600060608486031215620027b0578283fd5b8335620027bd8162002cc5565b9250602084013591506040840135620027d68162002cdb565b809150509250925092565b600060208284031215620027f3578081fd5b8135620018668162002cdb565b60006020828403121562002812578081fd5b8151620018668162002cdb565b60006020828403121562002831578081fd5b5035919050565b6000602082840312156200284a578081fd5b5051919050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6000602080835283518082850152825b81811015620028f557858101830151858201604001528201620028d7565b81811115620029075783604083870101525b50601f01601f1916929092016040019392505050565b60208082526024908201527f456d657267656e6379207377656570696e6720686173206265656e2064697361604082015263189b195960e21b606082015260800190565b6020808252601d908201527f596f75722078424541522062616c616e636520697320746f6f206c6f77000000604082015260600190565b60208082526009908201526821545245415355525960b81b604082015260600190565b6020808252601d908201527f54686520616d6f756e7420657863656564732074686520737570706c79000000604082015260600190565b60208082526018908201527f4661696c656420746f207265636569766520746f6b656e730000000000000000604082015260600190565b60208082526021908201527f5468697320636f6e7472616374206973206e6f206c6f6e67657220696e2075736040820152606560f81b606082015260800190565b6020808252601a908201527f784245415220616c6c6f77616e636520697320746f6f206c6f77000000000000604082015260600190565b602080825260139082015272214f574e45522026262021545245415355525960681b604082015260600190565b6020808252601590820152744661696c656420746f2073656e6420746f6b656e7360581b604082015260600190565b60208082526006908201526510a7aba722a960d11b604082015260600190565b6020808252601d908201527f596f75722077424541522062616c616e636520697320746f6f206c6f77000000604082015260600190565b60208082526025908201527f54686520636f6e74726163742077424541522062616c616e636520697320746f6040820152646f206c6f7760d81b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526017908201527f5468697320636f6e747261637420697320706175736564000000000000000000604082015260600190565b6020808252601d908201527f54726164696e672069732063757272656e746c792064697361626c6564000000604082015260600190565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b90815260200190565b60ff91909116815260200190565b6000821982111562002c905762002c9062002caf565b500190565b60008282101562002caa5762002caa62002caf565b500390565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811462000bfc57600080fd5b801515811462000bfc57600080fdfe6080604052600380546001600160a01b031990811673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc29081179092556004805482169092179091556011805490911673dac17f958d2ee523a2206206994597c13d831ec71790556ec097ce7bc90715b34b9f10000000006016553480156200007a57600080fd5b50604051620021d1380380620021d18339810160408190526200009d916200025b565b600080546001600160a01b0319166001600160a01b038381169182178355908252600160208190526040909220805460ff19169092179091558216620000f857737a250d5630b4cf539739df2c5dacb4c659f2488d620000fa565b815b600580546001600160a01b039283166001600160a01b031991821617909155600280549091163317905560115481166000908152600e6020526040808220805460ff1990811660019081179092557f6981a11ef3754d9b00d8868549ebf71e3d63f3e9dad47123e19ab5cdda32d36d8054821683179055736b175474e89094c44da98b954eedeac495271d0f9093527f5fe9af5f91cfc98605d0aeb168d7606a1f0945d723f233861d57da8bb2b06d1e805490931617909155600354905163095ea7b360e01b815291169063095ea7b390620001df90859060001990600401620002bb565b602060405180830381600087803b158015620001fa57600080fd5b505af11580156200020f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000235919062000292565b505050620002d4565b80516001600160a01b03811681146200025657600080fd5b919050565b600080604083850312156200026e578182fd5b62000279836200023e565b915062000289602084016200023e565b90509250929050565b600060208284031215620002a4578081fd5b81518015158114620002b4578182fd5b9392505050565b6001600160a01b03929092168252602082015260400190565b611eed80620002e46000396000f3fe60806040526004361061026b5760003560e01c806389a3027111610144578063ce7c2ac2116100b6578063e2d2e2191161007a578063e2d2e21914610713578063efca2eed14610728578063f0b37c041461073d578063f2fde38b1461075d578063f854a27f1461077d578063fe9fbb801461079d57610272565b8063ce7c2ac214610687578063d0e30db0146106b6578063d63a8e11146106be578063e0bab4c4146106de578063e0f8e243146106f357610272565b8063b6a5d7de11610108578063b6a5d7de146105d2578063bcd259a8146105f2578063c161357a14610612578063c238efd514610632578063c54e44eb14610652578063ca89b8991461066757610272565b806389a30271146105485780638e4241751461055d578063929925db1461057d578063997664d71461059d578063a995bb14146105b257610272565b80633333cfc3116101dd57806363eabae9116101a157806363eabae9146104935780637088fb7f146104b35780638366e79a146104c857806383e84500146104e8578063845610ee1461050857806387f681d81461052857610272565b80633333cfc3146103fe5780633a98ef391461041e5780634782e407146104335780635881f3ef14610453578063610035a41461047357610272565b806315f7e05e1161022f57806315f7e05e146103315780631b386a42146103515780632870e95d1461037157806328fd3198146103915780632bcf161c146103b15780632f54bf6e146103d157610272565b806302c4aede146102775780630300f925146102ad578063061ad62a146102da57806311ce023d146102fa57806314b6ca961461030f57610272565b3661027257005b600080fd5b34801561028357600080fd5b50610297610292366004611b77565b6107bd565b6040516102a49190611c97565b60405180910390f35b3480156102b957600080fd5b506102cd6102c8366004611b93565b6107d8565b6040516102a49190611df1565b3480156102e657600080fd5b506102976102f5366004611b77565b6107f5565b34801561030657600080fd5b506102cd610810565b34801561031b57600080fd5b5061032f61032a366004611c38565b610816565b005b34801561033d57600080fd5b5061032f61034c366004611b77565b6109a4565b34801561035d57600080fd5b506102cd61036c366004611b93565b6109b1565b34801561037d57600080fd5b5061032f61038c366004611b77565b6109dc565b34801561039d57600080fd5b506102cd6103ac366004611b77565b610a30565b3480156103bd57600080fd5b506102cd6103cc366004611b77565b610abc565b3480156103dd57600080fd5b506103f16103ec366004611b77565b610ad7565b6040516102a49190611cc4565b34801561040a57600080fd5b5061032f610419366004611c0b565b610aeb565b34801561042a57600080fd5b506102cd610b44565b34801561043f57600080fd5b5061032f61044e366004611b77565b610b4a565b34801561045f57600080fd5b5061032f61046e366004611b77565b610b91565b34801561047f57600080fd5b506103f161048e366004611b77565b610bd8565b34801561049f57600080fd5b5061032f6104ae366004611c0b565b610bf6565b3480156104bf57600080fd5b5061032f610c2e565b3480156104d457600080fd5b506103f16104e3366004611b93565b610c86565b3480156104f457600080fd5b5061032f610503366004611b93565b610de0565b34801561051457600080fd5b5061032f610523366004611b77565b610e33565b34801561053457600080fd5b5061032f610543366004611b77565b610e7a565b34801561055457600080fd5b50610297610ec8565b34801561056957600080fd5b506103f1610578366004611b93565b610ee0565b34801561058957600080fd5b506103f1610598366004611b93565b610f0e565b3480156105a957600080fd5b506102cd610f2e565b3480156105be57600080fd5b5061032f6105cd366004611b93565b610f34565b3480156105de57600080fd5b5061032f6105ed366004611b77565b610fe0565b3480156105fe57600080fd5b5061032f61060d366004611b93565b61102c565b34801561061e57600080fd5b5061032f61062d366004611bcb565b611079565b34801561063e57600080fd5b5061029761064d366004611b77565b611124565b34801561065e57600080fd5b50610297611142565b34801561067357600080fd5b506102cd610682366004611b77565b611151565b34801561069357600080fd5b506106a76106a2366004611b77565b611163565b6040516102a493929190611dfa565b61032f611184565b3480156106ca57600080fd5b506103f16106d9366004611b77565b6111da565b3480156106ea57600080fd5b506102976111ef565b3480156106ff57600080fd5b5061032f61070e366004611b77565b611207565b34801561071f57600080fd5b506102cd61124e565b34801561073457600080fd5b506102cd611254565b34801561074957600080fd5b5061032f610758366004611b77565b61125a565b34801561076957600080fd5b5061032f610778366004611b77565b6112a0565b34801561078957600080fd5b506103f1610798366004611b77565b611335565b3480156107a957600080fd5b506103f16107b8366004611b77565b61134a565b600d602052600090815260409020546001600160a01b031681565b600a60209081526000928352604080842090915290825290205481565b600f602052600090815260409020546001600160a01b031681565b60165481565b6002546001600160a01b0316331461082d57600080fd5b6001600160a01b038216600090815260106020526040902054156108bd576001600160a01b038083166000908152600f60209081526040808320549093168252600e9052205460ff16156108a6576001600160a01b038083166000908152600f60205260409020546108a191849116611368565b6108bd565b6011546108bd9083906001600160a01b0316611368565b6000811180156108e357506001600160a01b038216600090815260106020526040902054155b156108f6576108f18261196f565b610929565b8015801561091b57506001600160a01b03821660009081526010602052604090205415155b1561092957610929826119d0565b6001600160a01b03821660009081526010602052604090205460125461095a91839161095491611b1d565b90611b30565b6012556001600160a01b038216600090815260106020526040902081905561098181611b3c565b6001600160a01b0390921660009081526010602052604090206001019190915550565b6109ae3382611368565b50565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b6001600160a01b0381166000908152600e602052604090205460ff16610a0157600080fd5b336000908152600f6020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038116600090815260106020526040812054610a5557506000610ab7565b6001600160a01b038216600090815260106020526040812054610a7790611b3c565b6001600160a01b038416600090815260106020526040902060010154909150808211610aa857600092505050610ab7565b610ab28282611b1d565b925050505b919050565b6001600160a01b031660009081526009602052604090205490565b6000546001600160a01b0390811691161490565b610af433610ad7565b610b195760405162461bcd60e51b8152600401610b1090611dd1565b60405180910390fd5b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b60125481565b610b5333610ad7565b610b6f5760405162461bcd60e51b8152600401610b1090611dd1565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b610b9a33610ad7565b610bb65760405162461bcd60e51b8152600401610b1090611dd1565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03166000908152600e602052604090205460ff1690565b336000908152600b602090815260408083206001600160a01b0395909516835293905291909120805460ff1916911515919091179055565b610c3733610ad7565b610c535760405162461bcd60e51b8152600401610b1090611dd1565b6040514790339082156108fc029083906000818181858888f19350505050158015610c82573d6000803e3d6000fd5b5050565b6000610c9133610ad7565b610cad5760405162461bcd60e51b8152600401610b1090611dd1565b6001600160a01b038316301415610cd65760405162461bcd60e51b8152600401610b1090611d38565b6040516370a0823160e01b81526000906001600160a01b038516906370a0823190610d05903090600401611c97565b60206040518083038186803b158015610d1d57600080fd5b505afa158015610d31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d559190611c7f565b60405163a9059cbb60e01b81529091506001600160a01b0385169063a9059cbb90610d869086908590600401611cab565b602060405180830381600087803b158015610da057600080fd5b505af1158015610db4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd89190611c63565b949350505050565b610de933610ad7565b610e055760405162461bcd60e51b8152600401610b1090611dd1565b6001600160a01b039182166000908152600d6020526040902080546001600160a01b03191691909216179055565b610e3c33610ad7565b610e585760405162461bcd60e51b8152600401610b1090611dd1565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b610e8333610ad7565b610e9f5760405162461bcd60e51b8152600401610b1090611dd1565b6001600160a01b03166000908152600e60205260409020805460ff19811660ff90911615179055565b73a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4881565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205460ff1690565b600b60209081526000928352604080842090915290825290205460ff1681565b60135481565b610f3d33610ad7565b610f595760405162461bcd60e51b8152600401610b1090611dd1565b60405163095ea7b360e01b81526001600160a01b0383169063095ea7b390610f8990849060001990600401611cab565b602060405180830381600087803b158015610fa357600080fd5b505af1158015610fb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fdb9190611c63565b505050565b610fe933610ad7565b6110055760405162461bcd60e51b8152600401610b1090611dd1565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6001600160a01b0382166000908152600b6020908152604080832033845290915290205460ff1661106f5760405162461bcd60e51b8152600401610b1090611da6565b610c828282611368565b61108233610ad7565b61109e5760405162461bcd60e51b8152600401610b1090611dd1565b60405163095ea7b360e01b81526001600160a01b0384169063095ea7b3906110cc9085908590600401611cab565b602060405180830381600087803b1580156110e657600080fd5b505af11580156110fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111e9190611c63565b50505050565b6001600160a01b039081166000908152600d60205260409020541690565b6011546001600160a01b031681565b60096020526000908152604090205481565b60106020526000908152604090208054600182015460029092015490919083565b6002546001600160a01b0316331461119b57600080fd5b60135434906111aa9082611b30565b6013556012546016546111d4916111cb916111c59085611b5f565b90611b6b565b60155490611b30565b60155550565b600e6020526000908152604090205460ff1681565b736b175474e89094c44da98b954eedeac495271d0f81565b61121033610ad7565b61122c5760405162461bcd60e51b8152600401610b1090611dd1565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b60155481565b60145481565b61126333610ad7565b61127f5760405162461bcd60e51b8152600401610b1090611dd1565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6112a933610ad7565b6112c55760405162461bcd60e51b8152600401610b1090611dd1565b600080546001600160a01b0319166001600160a01b0383169081178255815260016020819052604091829020805460ff19169091179055517f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639061132a908390611c97565b60405180910390a150565b600c6020526000908152604090205460ff1681565b6001600160a01b031660009081526001602052604090205460ff1690565b6001600160a01b0381166000908152600e602052604090205460ff166113a05760405162461bcd60e51b8152600401610b1090611d6f565b6001600160a01b0382166000908152601060205260409020546113c257610c82565b60006113cd83610a30565b90508015610fdb576014546113e29082611b30565b6014556001600160a01b038316600090815260086020908152604080832042905560109091529020600201546114189082611b30565b6001600160a01b038416600090815260106020526040902060028101919091555461144290611b3c565b6001600160a01b0380851660009081526010602052604090206001019190915560035483821691161415611531576040516001600160a01b0384169082156108fc029083906000818181858888f193505050501580156114a6573d6000803e3d6000fd5b506001600160a01b0382166000908152600960205260409020546114ca9082611b30565b6001600160a01b03808416600090815260096020908152604080832094909455600a815283822092871682529190915220546115069082611b30565b6001600160a01b038084166000908152600a6020908152604080832093881683529290522055610fdb565b6040516370a0823160e01b815282906000906001600160a01b038316906370a0823190611562908890600401611c97565b60206040518083038186803b15801561157a57600080fd5b505afa15801561158e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b29190611c7f565b6001600160a01b038581166000908152600d6020526040902054919250166116e357604080516002808252606082018352600092602083019080368337505060035482519293506001600160a01b03169183915060009061162357634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050848160018151811061166557634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260055460405163b6f9de9560e01b815291169063b6f9de959086906116ab9060009086908c904290600401611ccf565b6000604051808303818588803b1580156116c457600080fd5b505af11580156116d8573d6000803e3d6000fd5b505050505050611842565b6040805160038082526080820190925260009160208201606080368337505060035482519293506001600160a01b03169183915060009061173457634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092018101919091528682166000908152600d909152604090205482519116908290600190811061178657634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b03168152505084816002815181106117c857634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260055460405163b6f9de9560e01b815291169063b6f9de9590869061180e9060009086908c904290600401611ccf565b6000604051808303818588803b15801561182757600080fd5b505af115801561183b573d6000803e3d6000fd5b5050505050505b6040516370a0823160e01b81526000906001600160a01b038416906370a0823190611871908990600401611c97565b60206040518083038186803b15801561188957600080fd5b505afa15801561189d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c19190611c7f565b90506118ef6118d08284611b1d565b6001600160a01b03871660009081526009602052604090205490611b30565b6001600160a01b0386166000908152600960205260409020556119416119158284611b1d565b6001600160a01b038088166000908152600a60209081526040808320938c168352929052205490611b30565b6001600160a01b038087166000908152600a60209081526040808320938b1683529290522055505050505050565b600680546001600160a01b039092166000818152600760205260408120849055600184018355919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f90910180546001600160a01b0319169091179055565b600680546119e090600190611e67565b815481106119fe57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0384811684526007909252604090922054600680549290931692918110611a4a57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260079182905260408120546006805491939291611a9690600190611e67565b81548110611ab457634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020556006805480611af857634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000611b298284611e67565b9392505050565b6000611b298284611e10565b6000611b596016546111c560155485611b5f90919063ffffffff16565b92915050565b6000611b298284611e48565b6000611b298284611e28565b600060208284031215611b88578081fd5b8135611b2981611e94565b60008060408385031215611ba5578081fd5b8235611bb081611e94565b91506020830135611bc081611e94565b809150509250929050565b600080600060608486031215611bdf578081fd5b8335611bea81611e94565b92506020840135611bfa81611e94565b929592945050506040919091013590565b60008060408385031215611c1d578182fd5b8235611c2881611e94565b91506020830135611bc081611ea9565b60008060408385031215611c4a578182fd5b8235611c5581611e94565b946020939093013593505050565b600060208284031215611c74578081fd5b8151611b2981611ea9565b600060208284031215611c90578081fd5b5051919050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b600060808201868352602060808185015281875180845260a0860191508289019350845b81811015611d185784516001600160a01b031683529383019391830191600101611cf3565b50506001600160a01b039690961660408501525050506060015292915050565b6020808252601c908201527f43616e2774207769746864726177206e617469766520746f6b656e7300000000604082015260600190565b60208082526017908201527f496e76616c696420726577617264206164647265737321000000000000000000604082015260600190565b602080825260119082015270165bdd4818d85b89dd08191bc81d1a185d607a1b604082015260600190565b60208082526006908201526510a7aba722a960d11b604082015260600190565b90815260200190565b9283526020830191909152604082015260600190565b60008219821115611e2357611e23611e7e565b500190565b600082611e4357634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615611e6257611e62611e7e565b500290565b600082821015611e7957611e79611e7e565b500390565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03811681146109ae57600080fd5b80151581146109ae57600080fdfea2646970667358221220ad5254eef683522e82b88021aba9416ef130c4d508f0aff855515c93fe978ca264736f6c63430008000033a264697066735822122079eaa6067ab7409ca0369fc09d8bf27e559c3b6baf94a55539d8747d76b68ca364736f6c63430008000033

Deployed Bytecode Sourcemap

17716:11177:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26555:127;;;;;;;;;;-1:-1:-1;26555:127:0;;;;;:::i;:::-;;:::i;:::-;;19089:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23597:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;24019:241::-;;;;;;;;;;-1:-1:-1;24019:241:0;;;;;:::i;:::-;;:::i;21921:174::-;;;:::i;23327:88::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;24598:401::-;;;;;;;;;;-1:-1:-1;24598:401:0;;;;;:::i;:::-;;:::i;28067:118::-;;;;;;;;;;-1:-1:-1;28067:118:0;;;;;:::i;:::-;;:::i;28193:142::-;;;;;;;;;;;;;:::i;19132:39::-;;;;;;;;;;;;;:::i;4584:103::-;;;;;;;;;;-1:-1:-1;4584:103:0;;;;;:::i;:::-;;:::i;23421:80::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;18731:49::-;;;;;;;;;;-1:-1:-1;18731:49:0;;;;;:::i;:::-;;:::i;19046:34::-;;;;;;;;;;;;;:::i;20150:109::-;;;;;;;;;;-1:-1:-1;20150:109:0;;;;;:::i;:::-;;:::i;19211:32::-;;;;;;;;;;;;;:::i;24268:133::-;;;;;;;;;;-1:-1:-1;24268:133:0;;;;;:::i;:::-;;:::i;28343:547::-;;;;;;;;;;-1:-1:-1;28343:547:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;19178:26::-;;;;;;;;;;;;;:::i;26307:240::-;;;;;;;;;;-1:-1:-1;26307:240:0;;;;;:::i;:::-;;:::i;23152:130::-;;;;;;;;;;-1:-1:-1;23152:130:0;;;;;:::i;:::-;;:::i;27779:140::-;;;;;;;;;;-1:-1:-1;27779:140:0;;;;;:::i;:::-;;:::i;25947:134::-;;;;;;;;;;;;;:::i;23767:105::-;;;;;;;;;;-1:-1:-1;23767:105:0;;;;;:::i;:::-;;:::i;27182:266::-;;;;;;;;;;-1:-1:-1;27182:266:0;;;;;:::i;:::-;;:::i;26089:101::-;;;;;;;;;;-1:-1:-1;26089:101:0;;;;;:::i;:::-;;:::i;23683:78::-;;;;;;;;;;;;;:::i;27927:132::-;;;;;;;;;;;;;:::i;18789:42::-;;;;;;;;;;;;;:::i;23507:84::-;;;;;;;;;;;;;:::i;25445:167::-;;;;;;;;;;-1:-1:-1;25445:167:0;;;;;:::i;:::-;;:::i;20503:705::-;;;;;;;;;;-1:-1:-1;20503:705:0;;;;;:::i;:::-;;:::i;19004:33::-;;;;;;;;;;;;;:::i;18938:19::-;;;;;;;;;;;;;:::i;24409:181::-;;;;;;;;;;-1:-1:-1;24409:181:0;;;;;:::i;:::-;;:::i;17925:64::-;;;;;;;;;;;;;:::i;18840:58::-;;;;;;;;;;-1:-1:-1;18840:58:0;;;;;:::i;:::-;;:::i;4257:94::-;;;;;;;;;;-1:-1:-1;4257:94:0;;;;;:::i;:::-;;:::i;22103:176::-;;;;;;;;;;;;;:::i;26690:484::-;;;;;;;;;;-1:-1:-1;26690:484:0;;;;;:::i;:::-;;:::i;22287:406::-;;;;;;;;;;-1:-1:-1;22287:406:0;;;;;:::i;:::-;;:::i;23038:106::-;;;;;;;;;;-1:-1:-1;23038:106:0;;;;;:::i;:::-;;:::i;21216:697::-;;;;;;;;;;-1:-1:-1;21216:697:0;;;;;:::i;:::-;;:::i;23878:133::-;;;;;;;;;;-1:-1:-1;23878:133:0;;;;;:::i;:::-;;:::i;26198:101::-;;;;;;;;;;-1:-1:-1;26198:101:0;;;;;:::i;:::-;;:::i;22701:329::-;;;;;;;;;;-1:-1:-1;22701:329:0;;;;;:::i;:::-;;:::i;17806:48::-;;;;;;;;;;;;;:::i;4427:97::-;;;;;;;;;;-1:-1:-1;4427:97:0;;;;;:::i;:::-;;:::i;4984:173::-;;;;;;;;;;-1:-1:-1;4984:173:0;;;;;:::i;:::-;;:::i;27456:315::-;;;;;;;;;;-1:-1:-1;27456:315:0;;;;;:::i;:::-;;:::i;18907:24::-;;;;;;;;;;;;;:::i;18371:20::-;;;;;;;;;;;;;:::i;4758:107::-;;;;;;;;;;-1:-1:-1;4758:107:0;;;;;:::i;:::-;;:::i;26555:127::-;20415:19;20423:10;20415:7;:19::i;:::-;:45;;;;20438:22;20449:10;20438;:22::i;:::-;20407:77;;;;-1:-1:-1;;;20407:77:0;;;;;;;:::i;:::-;;;;;;;;;26654:8:::1;:20:::0;;-1:-1:-1;;;;;;26654:20:0::1;-1:-1:-1::0;;;;;26654:20:0;;;::::1;::::0;;;::::1;::::0;;26555:127::o;19089:36::-;;;-1:-1:-1;;;19089:36:0;;;;;:::o;23597:80::-;23669:5;;;;;;;;;;;;;;;;;23597:80;:::o;24019:241::-;24148:10;24119:4;24136:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;24136:32:0;;;;;;;;;;:41;;;24193:37;24119:4;;24136:32;;24193:37;;;;24171:6;;24193:37;:::i;:::-;;;;;;;;-1:-1:-1;24248:4:0;24019:241;;;;:::o;21921:174::-;20310:22;20321:10;20310;:22::i;:::-;20302:44;;;;-1:-1:-1;;;20302:44:0;;;;;;;:::i;:::-;21992:9:::1;:13:::0;21988:100:::1;;22026:11;;;;;;;;;-1:-1:-1::0;;;;;22026:11:0::1;-1:-1:-1::0;;;;;22026:19:0::1;;22053:9;22026:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;22022:55:::0;::::1;21921:174::o:0;23327:88::-;23400:12;;23327:88;:::o;24598:401::-;24788:12;;-1:-1:-1;;;;;24753:19:0;;24732:4;24753:19;;;:11;:19;;;;;;;;24773:10;24753:31;;;;;;;;24732:4;;24753:47;24749:183;;24851:69;;;;;;;;;;;-1:-1:-1;;;24851:69:0;;;;;;;;-1:-1:-1;;;;;24851:19:0;;-1:-1:-1;24851:19:0;;;:11;:19;;;;;24871:10;24851:31;;;;;;;;;;:69;;24887:6;;24851:35;:69::i;:::-;-1:-1:-1;;;;;24817:19:0;;;;;;:11;:19;;;;;;;;24837:10;24817:31;;;;;;;:103;24749:183;24951:40;24965:6;24973:9;24984:6;24951:13;:40::i;:::-;24944:47;24598:401;-1:-1:-1;;;;24598:401:0:o;28067:118::-;4142:24;4155:10;4142:12;:24::i;:::-;4134:48;;;;-1:-1:-1;;;4134:48:0;;;;;;;:::i;:::-;28152:14:::1;:25:::0;;;::::1;;-1:-1:-1::0;;;28152:25:0::1;-1:-1:-1::0;;;;28152:25:0;;::::1;::::0;;;::::1;::::0;;28067:118::o;28193:142::-;28321:4;;28246:7;;28273:54;;28311:15;;-1:-1:-1;;;;;28321:4:0;28311:9;:15::i;:::-;28300:4;;28273:33;;28290:15;;-1:-1:-1;;;;;28300:4:0;28290:9;:15::i;:::-;28273:12;;;:16;:33::i;:::-;:37;;:54::i;:::-;28266:61;;28193:142;:::o;19132:39::-;;;-1:-1:-1;;;19132:39:0;;;;;:::o;4584:103::-;4639:4;4674:5;-1:-1:-1;;;;;4674:5:0;;;4663:16;;;;4584:103::o;23421:80::-;18544:1;23421:80;:::o;18731:49::-;;;;;;;;;;;;;;;:::o;19046:34::-;;;-1:-1:-1;;;19046:34:0;;;;;:::o;20150:109::-;20243:8;;-1:-1:-1;;;;;20243:8:0;;;20232:19;;;;20150:109::o;19211:32::-;;;-1:-1:-1;;;19211:32:0;;;;;:::o;24268:133::-;24339:4;24363:30;24371:7;24380:12;;24363:7;:30::i;:::-;24356:37;24268:133;-1:-1:-1;;24268:133:0:o;28343:547::-;28433:13;3973:19;3981:10;3973:7;:19::i;:::-;3965:38;;;;-1:-1:-1;;;3965:38:0;;;;;;;:::i;:::-;28459:27:::1;28500:7;28459:49;;28541:16;-1:-1:-1::0;;;;;28541:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28529:47:0::1;;28577:5;;;;;;;;;-1:-1:-1::0;;;;;28577:5:0::1;28584:16;-1:-1:-1::0;;;;;28584:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28529:79;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28521:87:::0;-1:-1:-1;;;;;;28623:19:0;::::1;28619:142;;28679:16;-1:-1:-1::0;;;;;28679:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28667:50:0::1;;28718:5;;;;;;;;;-1:-1:-1::0;;;;;28718:5:0::1;28725:16;-1:-1:-1::0;;;;;28725:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28667:82;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28659:90;;28619:142;28771:4;:12:::0;;-1:-1:-1;;;;;28771:12:0;;::::1;-1:-1:-1::0;;;;;;28771:12:0;;::::1;;::::0;;;28796:6:::1;:25:::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;;28870:12:::1;::::0;28844:5:::1;::::0;;::::1;28771:4;28832:18:::0;;;:11:::1;:18;::::0;;;;;;;28859:6;;;::::1;28832:35:::0;;;;;;;;:50;28778:5;28343:547;-1:-1:-1;28343:547:0:o;19178:26::-;;;-1:-1:-1;;;19178:26:0;;;;;:::o;26307:240::-;3973:19;3981:10;3973:7;:19::i;:::-;3965:38;;;;-1:-1:-1;;;3965:38:0;;;;;;;:::i;:::-;26413:5:::1;:14:::0;;-1:-1:-1;;;;;26413:14:0;::::1;-1:-1:-1::0;;;;;;26413:14:0;;::::1;::::0;::::1;::::0;;;26438:5:::1;:22:::0;;;;::::1;::::0;;::::1;::::0;;26471:69;::::1;;;26508:5;::::0;26515:12:::1;::::0;26500:28:::1;::::0;-1:-1:-1;;;;;26508:5:0::1;::::0;26500:7:::1;:28::i;:::-;;26471:69;26307:240:::0;;:::o;23152:130::-;3973:19;3981:10;3973:7;:19::i;:::-;3965:38;;;;-1:-1:-1;;;3965:38:0;;;;;;;:::i;:::-;23246:12:::1;:28:::0;;;::::1;;-1:-1:-1::0;;;23246:28:0::1;-1:-1:-1::0;;;;23246:28:0;;::::1;::::0;;;::::1;::::0;;23152:130::o;27779:140::-;-1:-1:-1;;;;;27887:24:0;27863:4;27887:24;;;:16;:24;;;;;;;;;27779:140::o;25947:134::-;3973:19;3981:10;3973:7;:19::i;:::-;3965:38;;;;-1:-1:-1;;;3965:38:0;;;;;;;:::i;:::-;26012:5:::1;::::0;26036:37:::1;::::0;-1:-1:-1;;;;;26012:5:0;;::::1;:13;::::0;26044:10:::1;::::0;26036:37;::::1;;;::::0;26012:13;;25994:15:::1;26036:37:::0;25994:15;26036:37;26012:13;26044:10;26036:37;::::1;;;;;;;;;;;;;::::0;::::1;;;;23767:105:::0;-1:-1:-1;;;;;23851:18:0;23833:7;23851:18;;;:9;:18;;;;;;;23767:105::o;27182:266::-;27294:10;3973:19;3981:10;3973:7;:19::i;:::-;3965:38;;;;-1:-1:-1;;;3965:38:0;;;;;;;:::i;:::-;27369:5:::1;::::0;27344:31:::1;::::0;-1:-1:-1;;;27344:31:0;;27317:24:::1;::::0;-1:-1:-1;;;;;27344:24:0;;::::1;::::0;::::1;::::0;:31:::1;::::0;27369:5:::1;::::0;27344:31:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27394:46;::::0;-1:-1:-1;;;27394:46:0;;27317:58;;-1:-1:-1;;;;;;27394:23:0;::::1;::::0;::::1;::::0;:46:::1;::::0;27418:3;;27317:58;;27394:46:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;26089:101::-:0;3973:19;3981:10;3973:7;:19::i;:::-;3965:38;;;;-1:-1:-1;;;3965:38:0;;;;;;;:::i;:::-;26170:4:::1;:12:::0;;-1:-1:-1;;;;;;26170:12:0::1;-1:-1:-1::0;;;;;26170:12:0;;;::::1;::::0;;;::::1;::::0;;26089:101::o;23683:78::-;23735:7;23753:5;-1:-1:-1;;;;;23753:5:0;23683:78;:::o;27927:132::-;4142:24;4155:10;4142:12;:24::i;:::-;4134:48;;;;-1:-1:-1;;;4134:48:0;;;;;;;:::i;:::-;27988:14:::1;::::0;-1:-1:-1;;;27988:14:0;::::1;;;27983:69;;28019:14;:21:::0;;-1:-1:-1;;;;28019:21:0::1;-1:-1:-1::0;;;28019:21:0::1;::::0;;27927:132::o;18789:42::-;;;;;;:::o;23507:84::-;23581:7;;;;;;;;;;;;-1:-1:-1;;;23581:7:0;;;;23507:84;:::o;25445:167::-;3973:19;3981:10;3973:7;:19::i;:::-;3965:38;;;;-1:-1:-1;;;3965:38:0;;;;;;;:::i;:::-;25562:42:::1;25591:5;25598;25562:28;:42::i;20503:705::-:0;17430:1;17572:7;;:19;;17564:63;;;;-1:-1:-1;;;17564:63:0;;;;;;;:::i;:::-;17430:1;17638:18;;20592:19:::1;::::0;-1:-1:-1;;;20592:19:0;::::1;;;20591:20;20583:66;;;;-1:-1:-1::0;;;20583:66:0::1;;;;;;;:::i;:::-;20669:6;::::0;-1:-1:-1;;;20669:6:0;::::1;;;20668:7;20660:43;;;;-1:-1:-1::0;;;20660:43:0::1;;;;;;;:::i;:::-;20718:12;::::0;-1:-1:-1;;;20718:12:0;::::1;;;20714:304;;;20755:5;::::0;:27:::1;::::0;-1:-1:-1;;;20755:27:0;;20786:7;;-1:-1:-1;;;;;20755:5:0::1;::::0;:15:::1;::::0;:27:::1;::::0;20771:10:::1;::::0;20755:27:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:38;;20747:80;;;;-1:-1:-1::0;;;20747:80:0::1;;;;;;;:::i;:::-;20850:5;::::0;20878::::1;::::0;20850:34:::1;::::0;-1:-1:-1;;;20850:34:0;;20888:7;;-1:-1:-1;;;;;20850:5:0;;::::1;::::0;:15:::1;::::0;:34:::1;::::0;20866:10:::1;::::0;20878:5:::1;::::0;20850:34:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:45;;20842:84;;;;-1:-1:-1::0;;;20842:84:0::1;;;;;;;:::i;:::-;20965:7;20949:12;;:23;;20941:65;;;;-1:-1:-1::0;;;20941:65:0::1;;;;;;;:::i;:::-;21045:5;::::0;21076::::1;::::0;21045:46:::1;::::0;-1:-1:-1;;;21045:46:0;;21028:14:::1;::::0;-1:-1:-1;;;;;21045:5:0;;::::1;::::0;:18:::1;::::0;:46:::1;::::0;21064:10:::1;::::0;21076:5:::1;::::0;21083:7;;21045:46:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21028:63;;21110:9;21102:46;;;;-1:-1:-1::0;;;21102:46:0::1;;;;;;;:::i;:::-;21173:5;::::0;21159:41:::1;::::0;-1:-1:-1;;;;;21173:5:0::1;21180:10;21192:7:::0;21159:13:::1;:41::i;:::-;-1:-1:-1::0;;17386:1:0;17679:7;:22;-1:-1:-1;20503:705:0:o;19004:33::-;;;-1:-1:-1;;;;;19004:33:0;;:::o;18938:19::-;;;-1:-1:-1;;;;;18938:19:0;;:::o;24409:181::-;24514:4;24538:44;24552:10;24564:9;24575:6;24538:13;:44::i;:::-;24531:51;24409:181;-1:-1:-1;;;24409:181:0:o;17925:64::-;;;-1:-1:-1;;;;;17925:64:0;;:::o;18840:58::-;;;;;;;;;;;;;;;:::o;4257:94::-;3973:19;3981:10;3973:7;:19::i;:::-;3965:38;;;;-1:-1:-1;;;3965:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4317:19:0::1;;::::0;;;4339:4:::1;4317:19;::::0;;;;;;;:26;;-1:-1:-1;;4317:26:0::1;::::0;;::::1;::::0;;4257:94::o;22103:176::-;3973:19;3981:10;3973:7;:19::i;:::-;3965:38;;;;-1:-1:-1;;;3965:38:0;;;;;;;:::i;:::-;22178:19:::1;::::0;-1:-1:-1;;;22178:19:0;::::1;;;22177:20;22169:66;;;;-1:-1:-1::0;;;22169:66:0::1;;;;;;;:::i;:::-;22246:17;:25:::0;;-1:-1:-1;;;;22246:25:0::1;::::0;;22103:176::o;26690:484::-;3973:19;3981:10;3973:7;:19::i;:::-;3965:38;;;;-1:-1:-1;;;3965:38:0;;;;;;;:::i;:::-;26814:6:::1;:28:::0;;-1:-1:-1;;;;;;26814:28:0::1;-1:-1:-1::0;;;;;26814:28:0;;::::1;::::0;;;::::1;::::0;;;;26872:16:::1;::::0;;-1:-1:-1;;;26872:16:0;;;;:6;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;:6;:16;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26901:4;::::0;;26907:5:::1;::::0;26860:53:::1;::::0;-1:-1:-1;;;26860:53:0;;-1:-1:-1;;;;;26860:40:0;;::::1;::::0;::::1;::::0;:53:::1;::::0;26901:4;::::1;::::0;26907:5;;::::1;::::0;26860:53:::1;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26853:4;:60:::0;;-1:-1:-1;;;;;;26853:60:0::1;-1:-1:-1::0;;;;;26853:60:0;;::::1;;::::0;;26962:12:::1;::::0;26936:5:::1;::::0;;::::1;-1:-1:-1::0;26924:18:0;;;:11:::1;:18;::::0;;;;;;;26951:6:::1;::::0;;;::::1;26924:35:::0;;;;;;;;;:50;26985:61;::::1;;;27021:6;;;;;;;;;-1:-1:-1::0;;;;;27021:6:0::1;-1:-1:-1::0;;;;;27021:11:0::1;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27014:4;:20:::0;;-1:-1:-1;;;;;;27014:20:0::1;-1:-1:-1::0;;;;;27014:20:0;;;::::1;::::0;;;::::1;::::0;;26985:61:::1;27094:7;27103:10;27070:44;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;27056:11:0::1;:58:::0;;-1:-1:-1;;;;;;27056:58:0;;::::1;-1:-1:-1::0;;;;;27056:58:0;;::::1;;::::0;;;;27125:18:::1;:41:::0;;27154:11;;;::::1;27125:41:::0;::::1;;::::0;;-1:-1:-1;;26690:484:0:o;22287:406::-;3973:19;3981:10;3973:7;:19::i;:::-;3965:38;;;;-1:-1:-1;;;3965:38:0;;;;;;;:::i;:::-;22435:19:::1;::::0;-1:-1:-1;;;22435:19:0;::::1;;;22434:20;22426:66;;;;-1:-1:-1::0;;;22426:66:0::1;;;;;;;:::i;:::-;22511:17;::::0;-1:-1:-1;;;22511:17:0;::::1;;;22503:66;;;;-1:-1:-1::0;;;22503:66:0::1;;;;;;;:::i;:::-;22580:5;::::0;:28:::1;::::0;-1:-1:-1;;;22580:28:0;;-1:-1:-1;;;;;22580:5:0;;::::1;::::0;:14:::1;::::0;:28:::1;::::0;22595:3;;22600:7;;22580:28:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22623:8;22619:67;;;22648:19;:26:::0;;-1:-1:-1;;;;22648:26:0::1;-1:-1:-1::0;;;22648:26:0::1;::::0;;22287:406;;;:::o;23038:106::-;3973:19;3981:10;3973:7;:19::i;:::-;3965:38;;;;-1:-1:-1;;;3965:38:0;;;;;;;:::i;:::-;23120:6:::1;:16:::0;;;::::1;;-1:-1:-1::0;;;23120:16:0::1;-1:-1:-1::0;;;;23120:16:0;;::::1;::::0;;;::::1;::::0;;23038:106::o;21216:697::-;17430:1;17572:7;;:19;;17564:63;;;;-1:-1:-1;;;17564:63:0;;;;;;;:::i;:::-;17430:1;17638:18;;21307:19:::1;::::0;-1:-1:-1;;;21307:19:0;::::1;;;21306:20;21298:66;;;;-1:-1:-1::0;;;21298:66:0::1;;;;;;;:::i;:::-;21384:6;::::0;-1:-1:-1;;;21384:6:0;::::1;;;21383:7;21375:43;;;;-1:-1:-1::0;;;21375:43:0::1;;;;;;;:::i;:::-;21433:12;::::0;-1:-1:-1;;;21433:12:0;::::1;;;21429:214;;;21480:10;21470:21;::::0;;;:9:::1;:21;::::0;;;;;:32;-1:-1:-1;21470:32:0::1;21462:74;;;;-1:-1:-1::0;;;21462:74:0::1;;;;;;;:::i;:::-;21571:10;21559:23;::::0;;;:11:::1;:23;::::0;;;;;;;21583:5:::1;::::0;-1:-1:-1;;;;;21583:5:0::1;21559:30:::0;;;;;;;;:41;-1:-1:-1;21559:41:0::1;21551:80;;;;-1:-1:-1::0;;;21551:80:0::1;;;;;;;:::i;:::-;21661:5;::::0;21677::::1;::::0;21661:22:::1;::::0;-1:-1:-1;;;21661:22:0;;21687:7;;-1:-1:-1;;;;;21661:5:0;;::::1;::::0;:15:::1;::::0;:22:::1;::::0;21677:5;;::::1;::::0;21661:22:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:33;;21653:83;;;;-1:-1:-1::0;;;21653:83:0::1;;;;;;;:::i;:::-;21790:5;::::0;21747:14:::1;::::0;21764:41:::1;::::0;21778:10:::1;::::0;-1:-1:-1;;;;;21790:5:0::1;21797:7:::0;21764:13:::1;:41::i;:::-;21747:58;;21824:9;21816:43;;;;-1:-1:-1::0;;;21816:43:0::1;;;;;;;:::i;:::-;21870:5;::::0;:35:::1;::::0;-1:-1:-1;;;21870:35:0;;-1:-1:-1;;;;;21870:5:0;;::::1;::::0;:14:::1;::::0;:35:::1;::::0;21885:10:::1;::::0;21897:7;;21870:35:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;23878:133::-:0;-1:-1:-1;;;;;23980:19:0;;;23962:7;23980:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;23878:133::o;26198:101::-;3973:19;3981:10;3973:7;:19::i;:::-;3965:38;;;;-1:-1:-1;;;3965:38:0;;;;;;;:::i;:::-;26279:4:::1;:12:::0;;-1:-1:-1;;;;;;26279:12:0::1;-1:-1:-1::0;;;;;26279:12:0;;;::::1;::::0;;;::::1;::::0;;26198:101::o;22701:329::-;3973:19;3981:10;3973:7;:19::i;:::-;3965:38;;;;-1:-1:-1;;;3965:38:0;;;;;;;:::i;:::-;22797:19:::1;::::0;-1:-1:-1;;;22797:19:0;::::1;;;22796:20;22788:66;;;;-1:-1:-1::0;;;22788:66:0::1;;;;;;;:::i;:::-;22873:17;::::0;-1:-1:-1;;;22873:17:0;::::1;;;22865:66;;;;-1:-1:-1::0;;;22865:66:0::1;;;;;;;:::i;:::-;22942:5;::::0;22978::::1;::::0;22962:22:::1;::::0;-1:-1:-1;;;22962:22:0;;-1:-1:-1;;;;;22942:5:0;;::::1;::::0;:14:::1;::::0;22957:3;;22942:5;;22962:15:::1;::::0;:22:::1;::::0;22978:5;::::1;::::0;22962:22:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22942:43;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;22996:19:0::1;:26:::0;;-1:-1:-1;;;;22996:26:0::1;-1:-1:-1::0;;;22996:26:0::1;::::0;;22701:329::o;17806:48::-;17837:17;17806:48;:::o;4427:97::-;3973:19;3981:10;3973:7;:19::i;:::-;3965:38;;;;-1:-1:-1;;;3965:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4489:19:0::1;4511:5;4489:19:::0;;;:14:::1;:19;::::0;;;;:27;;-1:-1:-1;;4489:27:0::1;::::0;;4427:97::o;4984:173::-;3973:19;3981:10;3973:7;:19::i;:::-;3965:38;;;;-1:-1:-1;;;3965:38:0;;;;;;;:::i;:::-;5060:5:::1;:11:::0;;-1:-1:-1;;;;;;5060:11:0::1;-1:-1:-1::0;;;;;5060:11:0;::::1;::::0;;::::1;::::0;;5082:19;;-1:-1:-1;5082:19:0::1;::::0;;;;;;;;:26;;-1:-1:-1;;5082:26:0::1;::::0;;::::1;::::0;;5124:25;::::1;::::0;::::1;::::0;5060:11;;5124:25:::1;:::i;:::-;;;;;;;;4984:173:::0;:::o;27456:315::-;4142:24;4155:10;4142:12;:24::i;:::-;4134:48;;;;-1:-1:-1;;;4134:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27570:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;27570:33:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;27614:150:::1;;27641:11;::::0;:31:::1;::::0;-1:-1:-1;;;27641:31:0;;-1:-1:-1;;;;;27641:11:0;;::::1;::::0;:20:::1;::::0;:31:::1;::::0;27662:6;;27641:11:::1;::::0;:31:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;27614:150;;;27705:11;::::0;-1:-1:-1;;;;;27734:17:0;;::::1;27705:11;27734:17:::0;;;:9:::1;:17;::::0;;;;;;;27705:47;;-1:-1:-1;;;27705:47:0;;:11;;;::::1;::::0;:20:::1;::::0;:47:::1;::::0;27726:6;;27705:47:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;27456:315:::0;;:::o;18907:24::-;;;-1:-1:-1;;;;;18907:24:0;;:::o;18371:20::-;;;-1:-1:-1;;;;;18371:20:0;;:::o;4758:107::-;-1:-1:-1;;;;;4838:19:0;4814:4;4838:19;;;:14;:19;;;;;;;;;4758:107::o;2071:206::-;2157:7;2218:12;2210:6;;;;2202:29;;;;-1:-1:-1;;;2202:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;2253:5:0;;;2071:206::o;25007:430::-;25158:14;;25133:4;;-1:-1:-1;;;25158:14:0;;;;25150:56;;;;-1:-1:-1;;;25150:56:0;;;;;;;:::i;:::-;25237:53;;;;;;;;;;;-1:-1:-1;;;25237:53:0;;;;;;;;-1:-1:-1;;;;;25237:17:0;;-1:-1:-1;25237:17:0;;;:9;:17;;;;;;;;:53;;25259:6;;25237:21;:53::i;:::-;-1:-1:-1;;;;;25217:17:0;;;;;;;:9;:17;;;;;;:73;;;;25324:20;;;;;;;:32;;25349:6;25324:24;:32::i;:::-;-1:-1:-1;;;;;25301:20:0;;;;;;;:9;:20;;;;;;;:55;;;;25372:35;;;;;;;;;;25400:6;;25372:35;:::i;:::-;;;;;;;;-1:-1:-1;25425:4:0;25007:430;;;;;:::o;1647:98::-;1705:7;1732:5;1736:1;1732;:5;:::i;25620:315::-;-1:-1:-1;;;;;25729:32:0;;;;;;:25;:32;;;;;:40;;-1:-1:-1;;25729:40:0;;;;;;;;;;;;25780:68;;-1:-1:-1;;;;;25806:23:0;;;;;;:16;:23;;;;;:30;;-1:-1:-1;;25806:30:0;25832:4;25806:30;;;25780:68;25863:5;25858:70;;-1:-1:-1;;;;;;25885:23:0;25911:5;25885:23;;;:16;:23;;;;;:31;;-1:-1:-1;;25885:31:0;;;25620:315::o;1541:98::-;1599:7;1626:5;1630:1;1626;:5;:::i;-1:-1:-1:-;;;;;;;;:::o;14:259:1:-;;126:2;114:9;105:7;101:23;97:32;94:2;;;147:6;139;132:22;94:2;191:9;178:23;210:33;237:5;210:33;:::i;278:263::-;;401:2;389:9;380:7;376:23;372:32;369:2;;;422:6;414;407:22;369:2;459:9;453:16;478:33;505:5;478:33;:::i;818:402::-;;;947:2;935:9;926:7;922:23;918:32;915:2;;;968:6;960;953:22;915:2;1012:9;999:23;1031:33;1058:5;1031:33;:::i;:::-;1083:5;-1:-1:-1;1140:2:1;1125:18;;1112:32;1153:35;1112:32;1153:35;:::i;:::-;1207:7;1197:17;;;905:315;;;;;:::o;1225:470::-;;;;1371:2;1359:9;1350:7;1346:23;1342:32;1339:2;;;1392:6;1384;1377:22;1339:2;1436:9;1423:23;1455:33;1482:5;1455:33;:::i;:::-;1507:5;-1:-1:-1;1564:2:1;1549:18;;1536:32;1577:35;1536:32;1577:35;:::i;:::-;1329:366;;1631:7;;-1:-1:-1;;;1685:2:1;1670:18;;;;1657:32;;1329:366::o;1700:396::-;;;1826:2;1814:9;1805:7;1801:23;1797:32;1794:2;;;1847:6;1839;1832:22;1794:2;1891:9;1878:23;1910:33;1937:5;1910:33;:::i;:::-;1962:5;-1:-1:-1;2019:2:1;2004:18;;1991:32;2032;1991;2032;:::i;2101:327::-;;;2230:2;2218:9;2209:7;2205:23;2201:32;2198:2;;;2251:6;2243;2236:22;2198:2;2295:9;2282:23;2314:33;2341:5;2314:33;:::i;:::-;2366:5;2418:2;2403:18;;;;2390:32;;-1:-1:-1;;;2188:240:1:o;2433:464::-;;;;2576:2;2564:9;2555:7;2551:23;2547:32;2544:2;;;2597:6;2589;2582:22;2544:2;2641:9;2628:23;2660:33;2687:5;2660:33;:::i;:::-;2712:5;-1:-1:-1;2764:2:1;2749:18;;2736:32;;-1:-1:-1;2820:2:1;2805:18;;2792:32;2833;2792;2833;:::i;:::-;2884:7;2874:17;;;2534:363;;;;;:::o;2902:253::-;;3011:2;2999:9;2990:7;2986:23;2982:32;2979:2;;;3032:6;3024;3017:22;2979:2;3076:9;3063:23;3095:30;3119:5;3095:30;:::i;3160:257::-;;3280:2;3268:9;3259:7;3255:23;3251:32;3248:2;;;3301:6;3293;3286:22;3248:2;3338:9;3332:16;3357:30;3381:5;3357:30;:::i;3422:190::-;;3534:2;3522:9;3513:7;3509:23;3505:32;3502:2;;;3555:6;3547;3540:22;3502:2;-1:-1:-1;3583:23:1;;3492:120;-1:-1:-1;3492:120:1:o;3617:194::-;;3740:2;3728:9;3719:7;3715:23;3711:32;3708:2;;;3761:6;3753;3746:22;3708:2;-1:-1:-1;3789:16:1;;3698:113;-1:-1:-1;3698:113:1:o;3816:203::-;-1:-1:-1;;;;;3980:32:1;;;;3962:51;;3950:2;3935:18;;3917:102::o;4240:304::-;-1:-1:-1;;;;;4470:15:1;;;4452:34;;4522:15;;4517:2;4502:18;;4495:43;4402:2;4387:18;;4369:175::o;4549:375::-;-1:-1:-1;;;;;4807:15:1;;;4789:34;;4859:15;;;;4854:2;4839:18;;4832:43;4906:2;4891:18;;4884:34;;;;4739:2;4724:18;;4706:218::o;4929:282::-;-1:-1:-1;;;;;5129:32:1;;;;5111:51;;5193:2;5178:18;;5171:34;5099:2;5084:18;;5066:145::o;5495:187::-;5660:14;;5653:22;5635:41;;5623:2;5608:18;;5590:92::o;5913:603::-;;6054:2;6083;6072:9;6065:21;6115:6;6109:13;6158:6;6153:2;6142:9;6138:18;6131:34;6183:4;6196:140;6210:6;6207:1;6204:13;6196:140;;;6305:14;;;6301:23;;6295:30;6271:17;;;6290:2;6267:26;6260:66;6225:10;;6196:140;;;6354:6;6351:1;6348:13;6345:2;;;6424:4;6419:2;6410:6;6399:9;6395:22;6391:31;6384:45;6345:2;-1:-1:-1;6500:2:1;6479:15;-1:-1:-1;;6475:29:1;6460:45;;;;6507:2;6456:54;;6034:482;-1:-1:-1;;;6034:482:1:o;6521:400::-;6723:2;6705:21;;;6762:2;6742:18;;;6735:30;6801:34;6796:2;6781:18;;6774:62;-1:-1:-1;;;6867:2:1;6852:18;;6845:34;6911:3;6896:19;;6695:226::o;6926:353::-;7128:2;7110:21;;;7167:2;7147:18;;;7140:30;7206:31;7201:2;7186:18;;7179:59;7270:2;7255:18;;7100:179::o;7284:332::-;7486:2;7468:21;;;7525:1;7505:18;;;7498:29;-1:-1:-1;;;7558:2:1;7543:18;;7536:39;7607:2;7592:18;;7458:158::o;7621:353::-;7823:2;7805:21;;;7862:2;7842:18;;;7835:30;7901:31;7896:2;7881:18;;7874:59;7965:2;7950:18;;7795:179::o;7979:348::-;8181:2;8163:21;;;8220:2;8200:18;;;8193:30;8259:26;8254:2;8239:18;;8232:54;8318:2;8303:18;;8153:174::o;8332:397::-;8534:2;8516:21;;;8573:2;8553:18;;;8546:30;8612:34;8607:2;8592:18;;8585:62;-1:-1:-1;;;8678:2:1;8663:18;;8656:31;8719:3;8704:19;;8506:223::o;8734:350::-;8936:2;8918:21;;;8975:2;8955:18;;;8948:30;9014:28;9009:2;8994:18;;8987:56;9075:2;9060:18;;8908:176::o;9089:343::-;9291:2;9273:21;;;9330:2;9310:18;;;9303:30;-1:-1:-1;;;9364:2:1;9349:18;;9342:49;9423:2;9408:18;;9263:169::o;9437:345::-;9639:2;9621:21;;;9678:2;9658:18;;;9651:30;-1:-1:-1;;;9712:2:1;9697:18;;9690:51;9773:2;9758:18;;9611:171::o;9787:329::-;9989:2;9971:21;;;10028:1;10008:18;;;10001:29;-1:-1:-1;;;10061:2:1;10046:18;;10039:36;10107:2;10092:18;;9961:155::o;10121:353::-;10323:2;10305:21;;;10362:2;10342:18;;;10335:30;10401:31;10396:2;10381:18;;10374:59;10465:2;10450:18;;10295:179::o;10479:401::-;10681:2;10663:21;;;10720:2;10700:18;;;10693:30;10759:34;10754:2;10739:18;;10732:62;-1:-1:-1;;;10825:2:1;10810:18;;10803:35;10870:3;10855:19;;10653:227::o;10885:355::-;11087:2;11069:21;;;11126:2;11106:18;;;11099:30;11165:33;11160:2;11145:18;;11138:61;11231:2;11216:18;;11059:181::o;11245:347::-;11447:2;11429:21;;;11486:2;11466:18;;;11459:30;11525:25;11520:2;11505:18;;11498:53;11583:2;11568:18;;11419:173::o;11597:353::-;11799:2;11781:21;;;11838:2;11818:18;;;11811:30;11877:31;11872:2;11857:18;;11850:59;11941:2;11926:18;;11771:179::o;11955:335::-;12157:2;12139:21;;;12196:2;12176:18;;;12169:30;-1:-1:-1;;;12230:2:1;12215:18;;12208:41;12281:2;12266:18;;12129:161::o;12295:177::-;12441:25;;;12429:2;12414:18;;12396:76::o;12477:184::-;12649:4;12637:17;;;;12619:36;;12607:2;12592:18;;12574:87::o;12666:128::-;;12737:1;12733:6;12730:1;12727:13;12724:2;;;12743:18;;:::i;:::-;-1:-1:-1;12779:9:1;;12714:80::o;12799:125::-;;12867:1;12864;12861:8;12858:2;;;12872:18;;:::i;:::-;-1:-1:-1;12909:9:1;;12848:76::o;12929:127::-;12990:10;12985:3;12981:20;12978:1;12971:31;13021:4;13018:1;13011:15;13045:4;13042:1;13035:15;13061:133;-1:-1:-1;;;;;13138:31:1;;13128:42;;13118:2;;13184:1;13181;13174:12;13199:120;13287:5;13280:13;13273:21;13266:5;13263:32;13253:2;;13309:1;13306;13299:12

Swarm Source

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