ETH Price: $2,485.98 (-0.53%)

Token

SonicHarrypotterIvysaurBatmanAlgoreInu (SHIB)
 

Overview

Max Total Supply

420,690,000,000 SHIB

Holders

98

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.684954604 SHIB

Value
$0.00
0xcd279ca0a1314b25efbc6dd44e1eea23c3d17bda
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:
SonicHarrypotterIvysaurBatmanAlgoreInu

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**

Wesbite:
TheTickerIsShib.wtf

Twitter:
https://twitter.com/TheTickerIsShib

TG:
https://t.me/TheTickerIsShib

*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.19;


library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {return a + b;}
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {return a - b;}
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {return a * b;}
    function div(uint256 a, uint256 b) internal pure returns (uint256) {return a / b;}
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {return a % b;}

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

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

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

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

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

interface stakeIntegration {
    function stakingWithdraw(address depositor, uint256 _amount) external;
    function stakingDeposit(address depositor, uint256 _amount) external;
    function stakingClaimToCompound(address sender, address recipient) external;
    function internalClaimRewards(address sender) external;
}

interface tokenStaking {
    function deposit(uint256 amount) external;
    function withdraw(uint256 amount) external;
    function compound() external;
}

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

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

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

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

contract SonicHarrypotterIvysaurBatmanAlgoreInu is IERC20, tokenStaking, Ownable {
    using SafeMath for uint256;
    string private constant _name = 'SonicHarrypotterIvysaurBatmanAlgoreInu';
    string private constant _symbol = 'SHIB';
    uint8 private constant _decimals = 9;
    uint256 private _totalSupply = 420690000000 * (10 ** _decimals);
    uint256 public _maxTxAmount = ( _totalSupply * 100 ) / 10000;
    uint256 public _maxWalletToken = ( _totalSupply * 100 ) / 10000;
    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) public isFeeExempt;
    mapping (address => bool) public isDividendExempt;
    IRouter router;
    address public pair;
    bool private swapEnabled = true;
    bool private tradingAllowed = false;
    bool public reflectionsEnabled = false;
    uint256 private liquidityFee = 0;
    uint256 private marketingFee = 1000;
    uint256 private reflectionFee = 0;
    uint256 private developmentFee = 1000;
    uint256 private burnFee = 0;
    uint256 private tokenFee = 0;
    uint256 private totalFee = 2000;
    uint256 private sellFee = 4000;
    uint256 private transferFee = 4000;
    uint256 private denominator = 10000;
    uint256 private swapTimes;
    bool private swapping;
    bool private feeless;
    uint256 private swapAmount = 1;
    uint256 private swapThreshold = ( _totalSupply * 500 ) / 100000;
    uint256 private minTokenAmount = ( _totalSupply * 10 ) / 100000;
    modifier feelessTransaction {feeless = true; _; feeless = false;}
    modifier lockTheSwap {swapping = true; _; swapping = false;}
    mapping(address => uint256) public amountStaked;
    uint256 public totalStaked;
    uint256 private staking = 0;
    stakeIntegration internal stakingContract;
    address internal token_receiver;
    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed;
    uint256 public currentDividends;
    uint256 public dividendsBeingDistributed;
    uint256 internal dividendsPerShare;
    uint256 internal dividendsPerShareAccuracyFactor = 10 ** 36;
    address[] shareholders; mapping (address => Share) public shares; 
    mapping (address => uint256) shareholderIndexes;
    mapping (address => uint256) shareholderClaims;
    struct Share {uint256 amount; uint256 totalExcluded; uint256 totalRealised; }
    uint256 public excessDividends;
    uint256 public eventFeesCollected;
    uint256 public reflectionEvent;
    bool public distributingReflections;
    uint256 internal disbursements;
    bool internal releaseDistributing;
    mapping (address => uint256) public buyMultiplier;
    uint256 internal currentIndex;
    uint256 public gasAmount = 0;
    uint256 public distributionInterval = 12 hours;
    uint256 public distributionTime;
    uint256 private minBuyAmount = ( _totalSupply * 10 ) / 100000;
    uint256 private maxDropAmount = ( _totalSupply * 500 ) / 10000;
    address internal constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address internal utility_receiver = 0x49F7Aa9380fB0a20D98F40167f9dC875B39C7e34;
    address internal staking_receiver = 0x49F7Aa9380fB0a20D98F40167f9dC875B39C7e34; 
    address internal marketing_receiver = 0x2581de1ee63Df7FA0c57FcEE69F13573f5C769e9;
    address internal liquidity_receiver = 0x49F7Aa9380fB0a20D98F40167f9dC875B39C7e34;
    mapping (uint256 => mapping (address => uint256)) internal userEventData;
    struct eventData {
        uint256 reflectionAmount;
        uint256 reflectionsDisbursed;
        uint256 eventTimestamp;
        uint256 totalFees;
        uint256 totalExcess;}
    mapping(uint256 => eventData) public eventStats;

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

    receive() external payable {}
    function name() public pure returns (string memory) {return _name;}
    function symbol() public pure returns (string memory) {return _symbol;}
    function decimals() public pure returns (uint8) {return _decimals;}
    function getOwner() external view override returns (address) { return owner; }
    function totalSupply() public view override returns (uint256) {return _totalSupply;}
    function balanceOf(address account) public view override returns (uint256) {return _balances[account];}
    function transfer(address recipient, uint256 amount) public override returns (bool) {_transfer(msg.sender, recipient, amount);return true;}
    function allowance(address owner, address spender) public view override returns (uint256) {return _allowances[owner][spender];}
    function approve(address spender, uint256 amount) public override returns (bool) {_approve(msg.sender, spender, amount);return true;}
    function availableBalance(address wallet) public view returns (uint256) {return _balances[wallet].sub(amountStaked[wallet]);}
    function circulatingSupply() public view override returns (uint256) {return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(address(0)));}

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

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, msg.sender, _allowances[sender][msg.sender].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount);
        _balances[recipient] = _balances[recipient].add(amount);
        return true;
    }

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

    function _transfer(address sender, address recipient, uint256 amount) private {
        preTxCheck(sender, recipient, amount);
        checkTradingAllowed(sender, recipient);
        checkMaxWallet(sender, recipient, amount); 
        checkTxLimit(sender, recipient, amount);
        transactionCounters(sender, recipient);
        setBuyMultiplier(sender, recipient, amount);
        swapBack(sender, recipient, amount);
        _balances[sender] = _balances[sender].sub(amount);
        uint256 amountReceived = shouldTakeFee(sender, recipient) ? takeFee(sender, recipient, amount) : amount;
        _balances[recipient] = _balances[recipient].add(amountReceived);
        emit Transfer(sender, recipient, amountReceived);
        processRewards(sender, recipient);
    }

    function setStructure(uint256 _liquidity, uint256 _marketing, uint256 _reflections, uint256 _burn, 
        uint256 _token, uint256 _staking, uint256 _development, uint256 _total, uint256 _sell, uint256 _trans) external onlyOwner {
        liquidityFee = _liquidity; marketingFee = _marketing; reflectionFee = _reflections; staking = _staking; developmentFee = _development;
        burnFee = _burn; totalFee = _total; sellFee = _sell; transferFee = _trans; tokenFee = _token;
        require(totalFee <= denominator && sellFee <= denominator && burnFee <= denominator && tokenFee <= denominator 
            && transferFee <= denominator, "totalFee and sellFee cannot be more than 20%");
    }

    function setParameters(uint256 _buy, uint256 _wallet) external onlyOwner {
        uint256 newTx = totalSupply().mul(_buy).div(uint256(10000));
        uint256 newWallet = totalSupply().mul(_wallet).div(uint256(10000)); uint256 limit = totalSupply().mul(5).div(1000);
        require(newTx >= limit && newWallet >= limit, "ERC20: max TXs and max Wallet cannot be less than .5%");
        _maxTxAmount = newTx; _maxWalletToken = newWallet;
    }

    function internalDeposit(address sender, uint256 amount) internal {
        require(amount <= _balances[sender].sub(amountStaked[sender]), "ERC20: Cannot stake more than available balance");
        stakingContract.stakingDeposit(sender, amount);
        amountStaked[sender] = amountStaked[sender].add(amount);
        totalStaked = totalStaked.add(amount);
    }

    function deposit(uint256 amount) override external {
        internalDeposit(msg.sender, amount);
    }

    function withdraw(uint256 amount) override external {
        require(amount <= amountStaked[msg.sender], "ERC20: Cannot unstake more than amount staked");
        stakingContract.stakingWithdraw(msg.sender, amount);
        amountStaked[msg.sender] = amountStaked[msg.sender].sub(amount);
        totalStaked = totalStaked.sub(amount);
    }

    function compound() override external feelessTransaction {
        uint256 initialToken = balanceOf(msg.sender);
        stakingContract.stakingClaimToCompound(msg.sender, msg.sender);
        uint256 afterToken = balanceOf(msg.sender).sub(initialToken);
        internalDeposit(msg.sender, afterToken);
    }

    function setStakingAddress(address _staking) external onlyOwner {
        stakingContract = stakeIntegration(_staking); isFeeExempt[_staking] = true;
    }

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

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

    function setBuyMultiplier(address sender, address recipient, uint256 amount) internal {
        if(sender == pair && amount >= minBuyAmount){buyMultiplier[recipient] = buyMultiplier[recipient].add(uint256(1));}
        if(sender == pair && amount < minBuyAmount){buyMultiplier[recipient] = uint256(1);}
        if(recipient == pair){buyMultiplier[sender] = uint256(0);}
    }

    function checkTxLimit(address sender, address recipient, uint256 amount) internal view {
        if(amountStaked[sender] > uint256(0)){require((amount.add(amountStaked[sender])) <= balanceOf(sender), "ERC20: Exceeds maximum allowed not currently staked.");}
        require(amount <= _maxTxAmount || isFeeExempt[sender] || isFeeExempt[recipient], "TX Limit Exceeded");
    }

    function startTrading() external onlyOwner {
        tradingAllowed = true;
        distributionTime = block.timestamp;
    }

    function setSwapbackSettings(uint256 _swapAmount, uint256 _swapThreshold, uint256 _minTokenAmount) external onlyOwner {
        swapAmount = _swapAmount; swapThreshold = totalSupply().mul(_swapThreshold).div(uint256(100000)); minTokenAmount = totalSupply().mul(_minTokenAmount).div(uint256(100000));
    }

    function setUserMultiplier(address user, uint256 multiplier) external onlyOwner {
        buyMultiplier[user] = multiplier;
    }

    function setInternalAddresses(address _marketing, address _liquidity, address _utility, address _token, address _staking) external onlyOwner {
        marketing_receiver = _marketing; liquidity_receiver = _liquidity; utility_receiver = _utility; token_receiver = _token; staking_receiver = _staking;
        isFeeExempt[_marketing] = true; isFeeExempt[_liquidity] = true; isFeeExempt[_utility] = true; isFeeExempt[_token] = true; isFeeExempt[_staking] = true;
    }

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

    function setDividendInfo(uint256 excess, uint256 current, uint256 distributing) external onlyOwner {
        excessDividends = excess; currentDividends = current; dividendsBeingDistributed = distributing;
    }

    function setMinBuyAmount(uint256 amount) external onlyOwner {
        minBuyAmount = _totalSupply.mul(amount).div(100000);
    }

    function swapAndLiquify(uint256 tokens) private lockTheSwap {
        uint256 _denominator = totalFee.add(1).mul(2);
        if(totalFee == uint256(0)){_denominator = liquidityFee.add(
            marketingFee).add(staking).add(developmentFee).add(1).mul(2);}
        uint256 tokensToAddLiquidityWith = tokens.mul(liquidityFee).div(_denominator);
        uint256 toSwap = tokens.sub(tokensToAddLiquidityWith);
        uint256 initialBalance = address(this).balance;
        swapTokensForETH(toSwap);
        uint256 deltaBalance = address(this).balance.sub(initialBalance);
        uint256 unitBalance= deltaBalance.div(_denominator.sub(liquidityFee));
        uint256 ETHToAddLiquidityWith = unitBalance.mul(liquidityFee);
        if(ETHToAddLiquidityWith > uint256(0)){addLiquidity(
            tokensToAddLiquidityWith, ETHToAddLiquidityWith, liquidity_receiver); }
        uint256 stakingAmount = unitBalance.mul(2).mul(staking);
        if(stakingAmount > 0){payable(staking_receiver).transfer(stakingAmount);}
        uint256 marketingAmount = unitBalance.mul(2).mul(marketingFee);
        if(marketingAmount > 0){payable(marketing_receiver).transfer(marketingAmount);}
        uint256 excessAmount = address(this).balance;
        if(excessAmount > uint256(0)){payable(utility_receiver).transfer(excessAmount);}
    }

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

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

    function shouldSwapBack(address sender, address recipient, uint256 amount) internal view returns (bool) {
        bool aboveMin = amount >= minTokenAmount;
        bool aboveThreshold = viewAvailableBalance() >= swapThreshold;
        return !swapping && swapEnabled && tradingAllowed && aboveMin && !isFeeExempt[sender] 
            && recipient == pair && swapTimes >= swapAmount && aboveThreshold;
    }

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

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

    function getTotalFee(address sender, address recipient) internal view returns (uint256) {
        if(recipient == pair && sellFee > uint256(0)){return sellFee;}
        if(sender == pair && totalFee > uint256(0)){return totalFee;}
        return transferFee;
    }

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

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

    function processRewards(address sender, address recipient) internal {
        if(releaseDistributing){dividendsBeingDistributed = uint256(0);}
        if(shares[recipient].amount > uint256(0)){distributeDividend(recipient);}
        if(shares[sender].amount > uint256(0) && recipient != pair){distributeDividend(sender);}
        if(recipient == pair && shares[sender].amount > uint256(0)){excessDividends = excessDividends.add(getUnpaidEarnings(sender));}
        if(!isDividendExempt[sender]){setShare(sender, balanceOf(sender));}
        if(!isDividendExempt[recipient]){setShare(recipient, balanceOf(recipient));}
        if(!isDividendExempt[recipient] && sender == pair && buyMultiplier[recipient] >= uint256(1)){
            setShare(recipient, balanceOf(recipient).mul(buyMultiplier[recipient]));}
        if(distributionTime.add(distributionInterval) <= block.timestamp && tradingAllowed && 
            currentDividends > uint256(0) && !swapping && reflectionsEnabled){
            createReflectionEvent();}
        processReflections(gasAmount);
        if(shares[recipient].amount > uint256(0)){distributeDividend(recipient);}
    }

    function createReflectionEvent() internal {
            distributingReflections = true;
            eventStats[reflectionEvent].totalExcess = excessDividends;
            excessDividends = uint256(0);
            reflectionEvent = reflectionEvent.add(uint256(1));
            eventStats[reflectionEvent].totalFees = eventFeesCollected;
            eventStats[reflectionEvent].reflectionAmount = currentDividends;
            eventStats[reflectionEvent].eventTimestamp = block.timestamp;
            if(currentDividends > maxDropAmount){currentDividends = maxDropAmount;}
            depositRewards(currentDividends);
            currentDividends = uint256(0);
            eventFeesCollected = uint256(0);
            distributionTime = block.timestamp;
            processReflections(gasAmount);
    }

    function manualReflectionEvent() external onlyOwner {
        createReflectionEvent();
    }

    function rescueERC20(address _address) external onlyOwner {
        uint256 _amount = IERC20(_address).balanceOf(address(this));
        IERC20(_address).transfer(utility_receiver, _amount);
    }

    function setMaxDropAmount(uint256 amount) external onlyOwner {
        maxDropAmount = _totalSupply.mul(amount).div(100000);
    }

    function setDistributionInterval(uint256 interval) external onlyOwner {
        distributionInterval = interval;
    }

    function setReleaseDistributing(bool enable) external onlyOwner {
        releaseDistributing = enable;
    }

    function enableReflections(bool enable) external onlyOwner {
        reflectionsEnabled = enable;
    }

    function setGasAmount(uint256 gas) external onlyOwner {
        gasAmount = gas;
    }

    function closeReflectionEvent() external onlyOwner {
        dividendsBeingDistributed = uint256(0);
    }

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

    function depositRewards(uint256 amount) internal {
        totalDividends = totalDividends.add(amount);
        dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares));
        dividendsBeingDistributed = amount;
    }

    function rescueETH(uint256 _amount) external {
        payable(utility_receiver).transfer(_amount);
    }

    function setTokenAddress(address _address) external onlyOwner {
        token_receiver = _address;
    }

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

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

    function viewRemainingBeingDisbursed() external view returns (uint256 distributing, uint256 distributed) {
        return(dividendsBeingDistributed, eventStats[reflectionEvent].reflectionsDisbursed);
    }

    function viewDisbursementShareholders() external view returns (uint256 disbursementsAmt, uint256 shareholdersAmt) {
        return(disbursements, shareholders.length);
    }

    function manualProcessReflections(uint256 gas) external onlyOwner {
        processReflections(gas);
    }

    function processReflections(uint256 gas) internal {
        uint256 currentAmount = totalDistributed;
        uint256 shareholderCount = shareholders.length;
        if(shareholderCount == uint256(0)) { return; }
        uint256 gasUsed = uint256(0);
        uint256 gasLeft = gasleft();
        uint256 iterations = uint256(0);
        while(gasUsed < gas && iterations < shareholderCount) {
            if(currentIndex >= shareholderCount){
                currentIndex = uint256(0);}
                distributeDividend(shareholders[currentIndex]);
            gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
            gasLeft = gasleft();
            currentIndex++;
            iterations++;
            disbursements++;}
        if(disbursements >= shareholderCount && totalDistributed > currentAmount){
            distributingReflections = false;
            dividendsBeingDistributed = uint256(0);
            disbursements = uint256(0);}
    }

    function distributeDividend(address shareholder) internal {
        uint256 amount = getUnpaidEarnings(shareholder);
        if(shares[shareholder].amount == 0 || amount > balanceOf(address(this))){ return; }
        if(amount > uint256(0)){
            totalDistributed = totalDistributed.add(amount);
            eventStats[reflectionEvent].reflectionsDisbursed = eventStats[reflectionEvent].reflectionsDisbursed.add(amount);
            _basicTransfer(address(this), shareholder, amount);
            userEventData[reflectionEvent][shareholder] = amount;
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
            buyMultiplier[shareholder] = uint256(0);
            setShare(shareholder, balanceOf(shareholder));}
    }

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

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

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

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

    function balanceInformation() external view returns (uint256 balance, uint256 available, uint256 current, uint256 distributing, uint256 excess) {
        return(balanceOf(address(this)), balanceOf(address(this)).sub(currentDividends).sub(dividendsBeingDistributed), currentDividends, dividendsBeingDistributed, excessDividends);
    }

    function viewAvailableBalance() public view returns (uint256 contractBalance) {
        return balanceOf(address(this)).sub(currentDividends).sub(dividendsBeingDistributed);
    }

    function viewLastFiveReflectionEvents() external view returns (uint256, uint256, uint256, uint256, uint256) {
        return(eventStats[reflectionEvent].reflectionAmount, eventStats[reflectionEvent.sub(1)].reflectionAmount, eventStats[reflectionEvent.sub(2)].reflectionAmount,
            eventStats[reflectionEvent.sub(3)].reflectionAmount, eventStats[reflectionEvent.sub(4)].reflectionAmount);
    }

    function viewUserReflectionStats(uint256 eventNumber, address wallet) external view returns (uint256) {
        return userEventData[eventNumber][wallet];
    }

    function viewMyReflectionStats(uint256 eventNumber) external view returns (uint256) {
        return userEventData[eventNumber][msg.sender];
    }
}

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":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"amountStaked","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":"wallet","type":"address"}],"name":"availableBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"balanceInformation","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"available","type":"uint256"},{"internalType":"uint256","name":"current","type":"uint256"},{"internalType":"uint256","name":"distributing","type":"uint256"},{"internalType":"uint256","name":"excess","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"buyMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"circulatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimReflections","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"closeReflectionEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"compound","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distributingReflections","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distributionInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distributionTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendsBeingDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"enableReflections","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"eventFeesCollected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"eventStats","outputs":[{"internalType":"uint256","name":"reflectionAmount","type":"uint256"},{"internalType":"uint256","name":"reflectionsDisbursed","type":"uint256"},{"internalType":"uint256","name":"eventTimestamp","type":"uint256"},{"internalType":"uint256","name":"totalFees","type":"uint256"},{"internalType":"uint256","name":"totalExcess","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"excessDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gasAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"}],"name":"getUnpaidEarnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"manualProcessReflections","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualReflectionEvent","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":"reflectionEvent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflectionsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"interval","type":"uint256"}],"name":"setDistributionInterval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"excess","type":"uint256"},{"internalType":"uint256","name":"current","type":"uint256"},{"internalType":"uint256","name":"distributing","type":"uint256"}],"name":"setDividendInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setGasAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketing","type":"address"},{"internalType":"address","name":"_liquidity","type":"address"},{"internalType":"address","name":"_utility","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_staking","type":"address"}],"name":"setInternalAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxDropAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMinBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_wallet","type":"uint256"}],"name":"setParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"setReleaseDistributing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_staking","type":"address"}],"name":"setStakingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_reflections","type":"uint256"},{"internalType":"uint256","name":"_burn","type":"uint256"},{"internalType":"uint256","name":"_token","type":"uint256"},{"internalType":"uint256","name":"_staking","type":"uint256"},{"internalType":"uint256","name":"_development","type":"uint256"},{"internalType":"uint256","name":"_total","type":"uint256"},{"internalType":"uint256","name":"_sell","type":"uint256"},{"internalType":"uint256","name":"_trans","type":"uint256"}],"name":"setStructure","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapAmount","type":"uint256"},{"internalType":"uint256","name":"_swapThreshold","type":"uint256"},{"internalType":"uint256","name":"_minTokenAmount","type":"uint256"}],"name":"setSwapbackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setTokenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"multiplier","type":"uint256"}],"name":"setUserMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setisDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setisExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"shares","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"totalExcluded","type":"uint256"},{"internalType":"uint256","name":"totalRealised","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"totalReflectionsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"viewAvailableBalance","outputs":[{"internalType":"uint256","name":"contractBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewDisbursementShareholders","outputs":[{"internalType":"uint256","name":"disbursementsAmt","type":"uint256"},{"internalType":"uint256","name":"shareholdersAmt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewLastFiveReflectionEvents","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"eventNumber","type":"uint256"}],"name":"viewMyReflectionStats","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewRemainingBeingDisbursed","outputs":[{"internalType":"uint256","name":"distributing","type":"uint256"},{"internalType":"uint256","name":"distributed","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"eventNumber","type":"uint256"},{"internalType":"address","name":"wallet","type":"address"}],"name":"viewUserReflectionStats","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126009600a620005da565b62000023906461f313f880620005f2565b60015561271060015460646200003a9190620005f2565b6200004691906200060c565b60025561271060015460646200005d9190620005f2565b6200006991906200060c565b6003556009805462ffffff60a01b1916600160a01b1790556000600a8190556103e8600b819055600c829055600d55600e819055600f556107d0601055610fa060118190556012556127106013556001601681905554620186a090620000d2906101f4620005f2565b620000de91906200060c565b601755620186a0600154600a620000f69190620005f2565b6200010291906200060c565b6018556000601b556ec097ce7bc90715b34b9f1000000000602455600060315561a8c0603255620186a0600154600a6200013d9190620005f2565b6200014991906200060c565b6034556127106001546101f4620001619190620005f2565b6200016d91906200060c565b603555603680546001600160a01b03199081167349f7aa9380fb0a20d98f40167f9dc875b39c7e3490811790925560378054821683179055603880548216732581de1ee63df7fa0c57fcee69f13573f5c769e9179055603980549091169091179055348015620001dc57600080fd5b50600080546001600160a01b031916331781556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d9291839163c45a0155916004808201926020929091908290030181865afa15801562000244573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026a91906200062f565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002b8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002de91906200062f565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200032c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200035291906200062f565b600880546001600160a01b038581166001600160a01b03199283161790925560098054848416908316178155601d8054909216339081178355306000818152600660209081526040808320805460ff1990811660019081179092556039548a16855282852080548216831790556038548a168552828520805482168317905597548916845281842080548916821790558584528184208054891682179055601c548916845281842080548916821790559383526007825280832080548816851790559454909616815283812080548616831790557fb0c2646e02af70b79e3fe9277b98373379f54150e4e26b2b5650139f7a75a65d80548616831790557f6d5257204ebe7d88fd91ae87941cb2dd9d8062b64ae5a2bd2d28ec40b9fbf6df805490951682179094555481845260048552828420819055915191825293945090917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350506200065a565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200051c578160001904821115620005005762000500620004c5565b808516156200050e57918102915b93841c9390800290620004e0565b509250929050565b6000826200053557506001620005d4565b816200054457506000620005d4565b81600181146200055d5760028114620005685762000588565b6001915050620005d4565b60ff8411156200057c576200057c620004c5565b50506001821b620005d4565b5060208310610133831016604e8410600b8410161715620005ad575081810a620005d4565b620005b98383620004db565b8060001904821115620005d057620005d0620004c5565b0290505b92915050565b6000620005eb60ff84168362000524565b9392505050565b8082028115828204841417620005d457620005d4620004c5565b6000826200062a57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156200064257600080fd5b81516001600160a01b0381168114620005eb57600080fd5b613a71806200066a6000396000f3fe60806040526004361061041f5760003560e01c8063893d20e81161021e578063ccec371611610123578063e2910950116100ab578063efca2eed1161007a578063efca2eed14610d4a578063f2fde38b14610d60578063f4e0d9ac14610d80578063f69e204614610da0578063feb3040214610db557600080fd5b8063e291095014610c9a578063e94dd17c14610cdd578063ef40a67014610cfd578063ef43b02b14610d2a57600080fd5b8063d494c388116100f2578063d494c38814610bd3578063d9c47ade14610bf3578063dbb108b714610c13578063dd62ed3e14610c34578063dee5434b14610c7a57600080fd5b8063ccec371614610b2c578063ce7c2ac214610b4c578063d156875014610ba3578063d4348de014610bb957600080fd5b8063a61fba42116101a6578063b7e5595c11610175578063b7e5595c14610a7b578063bbc3f06914610aa8578063c0c4939414610abd578063c61ca2b714610ad3578063caa2344414610b0c57600080fd5b8063a61fba42146109e3578063a8aa1b3114610a1b578063a9059cbb14610a3b578063b6b55f2514610a5b57600080fd5b806395d89b41116101ed57806395d89b4114610940578063997664d71461096d5780639e252f00146109835780639fb05d37146109a3578063a0821be3146109c357600080fd5b8063893d20e8146108b95780638c7d1302146108eb57806392a65e001461090b5780639358928b1461092b57600080fd5b80633850f6871161032457806371201a0e116102ac5780637d1db4a51161027b5780637d1db4a514610843578063817b1cd214610859578063822628081461086f5780638331c10614610884578063884870c71461089957600080fd5b806371201a0e146107e257806375a72944146107f857806378109e541461080d5780637a16a49e1461082357600080fd5b806348ff2b8b116102f357806348ff2b8b1461076157806349c1cf6e146107815780636570e4eb1461079757806367b50af9146107ac57806370a08231146107c257600080fd5b80633850f687146106d55780633a98ef39146106eb5780633f4218e0146107015780634355855a1461073157600080fd5b8063234353aa116103a7578063293230b811610376578063293230b8146106355780632b37e0cc1461064a5780632e1a7d4d1461066a5780632f54bf6e1461068a578063313ce567146106b957600080fd5b8063234353aa1461058b57806323b872dd146105d557806326a4e8d2146105f557806328fd31981461061557600080fd5b80630c8f78fb116103ee5780630c8f78fb146104bc5780630dc6e50e146104de57806312f02ffe146104fe57806318160ddd1461053957806319e4574d1461054e57600080fd5b80630122690f1461042b57806306fdde031461045457806308e20e1f14610476578063095ea7b31461048c57600080fd5b3661042657005b600080fd5b34801561043757600080fd5b5061044160225481565b6040519081526020015b60405180910390f35b34801561046057600080fd5b50610469610dcd565b60405161044b919061353d565b34801561048257600080fd5b5061044160215481565b34801561049857600080fd5b506104ac6104a73660046135a0565b610ded565b604051901515815260200161044b565b3480156104c857600080fd5b506104dc6104d73660046135cc565b610e04565b005b3480156104ea57600080fd5b506104dc6104f93660046135e5565b610e3c565b34801561050a57600080fd5b50602254602b546000908152603b60205260409020600101545b6040805192835260208301919091520161044b565b34801561054557600080fd5b50600154610441565b34801561055a57600080fd5b50610563610f4b565b604080519586526020860194909452928401919091526060830152608082015260a00161044b565b34801561059757600080fd5b506105636105a63660046135cc565b603b60205260009081526040902080546001820154600283015460038401546004909401549293919290919085565b3480156105e157600080fd5b506104ac6105f036600461364d565b61102d565b34801561060157600080fd5b506104dc61061036600461368e565b611097565b34801561062157600080fd5b5061044161063036600461368e565b6110e3565b34801561064157600080fd5b506104dc61116e565b34801561065657600080fd5b506104dc6106653660046135a0565b6111b1565b34801561067657600080fd5b506104dc6106853660046135cc565b6111f7565b34801561069657600080fd5b506104ac6106a536600461368e565b6000546001600160a01b0391821691161490565b3480156106c557600080fd5b506040516009815260200161044b565b3480156106e157600080fd5b50610441602b5481565b3480156106f757600080fd5b50610441601e5481565b34801561070d57600080fd5b506104ac61071c36600461368e565b60066020526000908152604090205460ff1681565b34801561073d57600080fd5b506104ac61074c36600461368e565b60076020526000908152604090205460ff1681565b34801561076d57600080fd5b506104dc61077c3660046136b9565b61130e565b34801561078d57600080fd5b5061044160335481565b3480156107a357600080fd5b50610441611363565b3480156107b857600080fd5b5061044160315481565b3480156107ce57600080fd5b506104416107dd36600461368e565b611385565b3480156107ee57600080fd5b5061044160325481565b34801561080457600080fd5b506105636113a0565b34801561081957600080fd5b5061044160035481565b34801561082f57600080fd5b506104dc61083e3660046135cc565b6113e0565b34801561084f57600080fd5b5061044160025481565b34801561086557600080fd5b50610441601a5481565b34801561087b57600080fd5b506104dc61140f565b34801561089057600080fd5b506104dc61141a565b3480156108a557600080fd5b506104dc6108b43660046136f2565b61144b565b3480156108c557600080fd5b506000546001600160a01b03165b6040516001600160a01b03909116815260200161044b565b3480156108f757600080fd5b506104dc6109063660046135cc565b61154f565b34801561091757600080fd5b506104dc610926366004613714565b61159b565b34801561093757600080fd5b506104416115e3565b34801561094c57600080fd5b5060408051808201909152600481526329a424a160e11b6020820152610469565b34801561097957600080fd5b50610441601f5481565b34801561098f57600080fd5b506104dc61099e3660046135cc565b611609565b3480156109af57600080fd5b506104dc6109be366004613731565b611647565b3480156109cf57600080fd5b506104416109de36600461368e565b611724565b3480156109ef57600080fd5b506104416109fe3660046135cc565b6000908152603a6020908152604080832033845290915290205490565b348015610a2757600080fd5b506009546108d3906001600160a01b031681565b348015610a4757600080fd5b506104ac610a563660046135a0565b611751565b348015610a6757600080fd5b506104dc610a763660046135cc565b61175e565b348015610a8757600080fd5b50610441610a9636600461368e565b602f6020526000908152604090205481565b348015610ab457600080fd5b506104dc61176b565b348015610ac957600080fd5b5061044160295481565b348015610adf57600080fd5b50610441610aee36600461368e565b6001600160a01b031660009081526026602052604090206002015490565b348015610b1857600080fd5b506104dc610b27366004613714565b61179d565b348015610b3857600080fd5b506104dc610b4736600461368e565b6117da565b348015610b5857600080fd5b50610b88610b6736600461368e565b60266020526000908152604090208054600182015460029092015490919083565b6040805193845260208401929092529082015260600161044b565b348015610baf57600080fd5b50610441602a5481565b348015610bc557600080fd5b50602c546104ac9060ff1681565b348015610bdf57600080fd5b506104dc610bee3660046135cc565b6118ed565b348015610bff57600080fd5b506104dc610c0e3660046135cc565b611939565b348015610c1f57600080fd5b506009546104ac90600160b01b900460ff1681565b348015610c4057600080fd5b50610441610c4f3660046137a2565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610c8657600080fd5b506104dc610c953660046137d0565b61196c565b348015610ca657600080fd5b50610441610cb53660046137fc565b6000918252603a602090815260408084206001600160a01b0393909316845291905290205490565b348015610ce957600080fd5b506104dc610cf83660046137d0565b6119a4565b348015610d0957600080fd5b50610441610d1836600461368e565b60196020526000908152604090205481565b348015610d3657600080fd5b506104dc610d453660046136b9565b611a06565b348015610d5657600080fd5b5061044160205481565b348015610d6c57600080fd5b506104dc610d7b36600461368e565b611ac4565b348015610d8c57600080fd5b506104dc610d9b36600461368e565b611b42565b348015610dac57600080fd5b506104dc611ba6565b348015610dc157600080fd5b50602d54602554610524565b60606040518060600160405280602681526020016139ee60269139905090565b6000610dfa338484611c4f565b5060015b92915050565b6000546001600160a01b03163314610e375760405162461bcd60e51b8152600401610e2e90613821565b60405180910390fd5b603155565b6000546001600160a01b03163314610e665760405162461bcd60e51b8152600401610e2e90613821565b600a8a9055600b899055600c889055601b859055600d849055600e879055601083905560118290556012819055600f8690556013548311801590610eae575060135460115411155b8015610ebe5750601354600e5411155b8015610ece5750601354600f5411155b8015610ede575060135460125411155b610f3f5760405162461bcd60e51b815260206004820152602c60248201527f746f74616c46656520616e642073656c6c4665652063616e6e6f74206265206d60448201526b6f7265207468616e2032302560a01b6064820152608401610e2e565b50505050505050505050565b6000806000806000603b6000602b54815260200190815260200160002060000154603b6000610f866001602b54611d7390919063ffffffff16565b815260200190815260200160002060000154603b6000610fb26002602b54611d7390919063ffffffff16565b815260200190815260200160002060000154603b6000610fde6003602b54611d7390919063ffffffff16565b815260200190815260200160002060000154603b600061100a6004602b54611d7390919063ffffffff16565b815260200190815260200160002060000154945094509450945094509091929394565b600061103a848484611d7f565b61108c843361108785604051806060016040528060288152602001613a14602891396001600160a01b038a1660009081526005602090815260408083203384529091529020549190611eba565b611c4f565b5060015b9392505050565b6000546001600160a01b031633146110c15760405162461bcd60e51b8152600401610e2e90613821565b601d80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038116600090815260266020526040812054810361110a57506000919050565b6001600160a01b03821660009081526026602052604081205461112c90611ee6565b6001600160a01b03841660009081526026602052604090206001015490915080821161115c575060009392505050565b6111668282611d73565b949350505050565b6000546001600160a01b031633146111985760405162461bcd60e51b8152600401610e2e90613821565b6009805460ff60a81b1916600160a81b17905542603355565b6000546001600160a01b031633146111db5760405162461bcd60e51b8152600401610e2e90613821565b6001600160a01b039091166000908152602f6020526040902055565b3360009081526019602052604090205481111561126c5760405162461bcd60e51b815260206004820152602d60248201527f45524332303a2043616e6e6f7420756e7374616b65206d6f7265207468616e2060448201526c185b5bdd5b9d081cdd185ad959609a1b6064820152608401610e2e565b601c5460405163d8a9bf2960e01b8152336004820152602481018390526001600160a01b039091169063d8a9bf2990604401600060405180830381600087803b1580156112b857600080fd5b505af11580156112cc573d6000803e3d6000fd5b5050336000908152601960205260409020546112eb9250905082611d73565b33600090815260196020526040902055601a546113089082611d73565b601a5550565b6000546001600160a01b031633146113385760405162461bcd60e51b8152600401610e2e90613821565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b600061138060225461137a60215461137a30611385565b90611d73565b905090565b6001600160a01b031660009081526004602052604090205490565b60008060008060006113b130611385565b6113c660225461137a60215461137a30611385565b602154602254602954945094509450945094509091929394565b6000546001600160a01b0316331461140a5760405162461bcd60e51b8152600401610e2e90613821565b603255565b61141833611f03565b565b6000546001600160a01b031633146114445760405162461bcd60e51b8152600401610e2e90613821565b6000602255565b6000546001600160a01b031633146114755760405162461bcd60e51b8152600401610e2e90613821565b60006114966127106114908561148a60015490565b90612046565b90612052565b905060006114ad6127106114908561148a60015490565b905060006114c56103e8611490600561148a60015490565b90508083101580156114d75750808210155b6115415760405162461bcd60e51b815260206004820152603560248201527f45524332303a206d61782054587320616e64206d61782057616c6c65742063616044820152746e6e6f74206265206c657373207468616e202e352560581b6064820152608401610e2e565b506002919091556003555050565b6000546001600160a01b031633146115795760405162461bcd60e51b8152600401610e2e90613821565b611595620186a06114908360015461204690919063ffffffff16565b60355550565b6000546001600160a01b031633146115c55760405162461bcd60e51b8152600401610e2e90613821565b60098054911515600160b01b0260ff60b01b19909216919091179055565b60006113806115f26000611385565b61137a61160061dead611385565b60015490611d73565b6036546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611643573d6000803e3d6000fd5b5050565b6000546001600160a01b031633146116715760405162461bcd60e51b8152600401610e2e90613821565b603880546001600160a01b039687166001600160a01b0319918216811790925560398054968816968216871790556036805495881695821686179055601d805494881694821685179055603780549390971692168217909555600094855260066020526040808620805460ff199081166001908117909255958752818720805487168217905593865280862080548616851790559185528185208054851684179055845290922080549091169091179055565b6001600160a01b0381166000908152601960209081526040808320546004909252822054610dfe91611d73565b6000610dfa338484611d7f565b611768338261205e565b50565b6000546001600160a01b031633146117955760405162461bcd60e51b8152600401610e2e90613821565b6114186121a9565b6000546001600160a01b031633146117c75760405162461bcd60e51b8152600401610e2e90613821565b602e805460ff1916911515919091179055565b6000546001600160a01b031633146118045760405162461bcd60e51b8152600401610e2e90613821565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa15801561184b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186f9190613841565b60365460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810183905291925083169063a9059cbb906044016020604051808303816000875af11580156118c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e8919061385a565b505050565b6000546001600160a01b031633146119175760405162461bcd60e51b8152600401610e2e90613821565b611933620186a06114908360015461204690919063ffffffff16565b60345550565b6000546001600160a01b031633146119635760405162461bcd60e51b8152600401610e2e90613821565b6117688161224d565b6000546001600160a01b031633146119965760405162461bcd60e51b8152600401610e2e90613821565b602992909255602155602255565b6000546001600160a01b031633146119ce5760405162461bcd60e51b8152600401610e2e90613821565b60168390556119e7620186a06114908461148a60015490565b6017556119fe620186a06114908361148a60015490565b601855505050565b6000546001600160a01b03163314611a305760405162461bcd60e51b8152600401610e2e90613821565b6001600160a01b0382166000908152600760205260409020805460ff19168215801591909117909155611a6857611a68826000612348565b6001600160a01b0382166000908152602f602052604090205415611ab7576001600160a01b0382166000908152602f6020526040902054611643908390611ab29061148a83611385565b612348565b61164382611ab284611385565b6000546001600160a01b03163314611aee5760405162461bcd60e51b8152600401610e2e90613821565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6000546001600160a01b03163314611b6c5760405162461bcd60e51b8152600401610e2e90613821565b601c80546001600160a01b039092166001600160a01b0319909216821790556000908152600660205260409020805460ff19166001179055565b6015805461ff0019166101001790556000611bc033611385565b601c546040516334c5cbab60e11b8152336004820181905260248201529192506001600160a01b03169063698b975690604401600060405180830381600087803b158015611c0d57600080fd5b505af1158015611c21573d6000803e3d6000fd5b505050506000611c348261137a33611385565b9050611c40338261205e565b50506015805461ff0019169055565b6001600160a01b038316611cb15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610e2e565b6001600160a01b038216611d125760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610e2e565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000611090828461388d565b611d8a838383612482565b611d9483836125ba565b611d9f83838361264b565b611daa838383612737565b611db48383612879565b611dbf8383836128df565b611dca8383836129b3565b6001600160a01b038316600090815260046020526040902054611ded9082611d73565b6001600160a01b038416600090815260046020526040812091909155611e1384846129d8565b611e1d5781611e28565b611e28848484612a1e565b6001600160a01b038416600090815260046020526040902054909150611e4e9082612bf4565b6001600160a01b0380851660008181526004602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611ea29085815260200190565b60405180910390a3611eb48484612c00565b50505050565b60008184841115611ede5760405162461bcd60e51b8152600401610e2e919061353d565b505050900390565b6000610dfe6024546114906023548561204690919063ffffffff16565b6000611f0e826110e3565b6001600160a01b0383166000908152602660205260409020549091501580611f3d5750611f3a30611385565b81115b15611f46575050565b801561164357602054611f599082612bf4565b6020908155602b546000908152603b9091526040902060010154611f7d9082612bf4565b602b546000908152603b6020526040902060010155611f9d308383612e53565b50602b546000908152603a602090815260408083206001600160a01b03861684528252808320849055602882528083204290556026909152902060020154611fe59082612bf4565b6001600160a01b038316600090815260266020526040902060028101919091555461200f90611ee6565b6001600160a01b038316600090815260266020908152604080832060010193909355602f90529081205561164382611ab281611385565b600061109082846138a0565b600061109082846138b7565b6001600160a01b03821660009081526019602090815260408083205460049092529091205461208c91611d73565b8111156120f35760405162461bcd60e51b815260206004820152602f60248201527f45524332303a2043616e6e6f74207374616b65206d6f7265207468616e20617660448201526e61696c61626c652062616c616e636560881b6064820152608401610e2e565b601c5460405163773a0f0960e01b81526001600160a01b038481166004830152602482018490529091169063773a0f0990604401600060405180830381600087803b15801561214157600080fd5b505af1158015612155573d6000803e3d6000fd5b5050506001600160a01b03831660009081526019602052604090205461217c915082612bf4565b6001600160a01b038316600090815260196020526040902055601a546121a29082612bf4565b601a555050565b602c805460ff1916600190811790915560298054602b80546000908152603b60205260408120600401929092559155546121e291612bf4565b602b818155602a546000928352603b60205260408084206003019190915560218054835485528285205591548352909120426002909101556035549054111561222c576035546021555b612237602154612ec8565b60006021819055602a5542603355603154611418905b6020546025548061225d57505050565b6000805a905060005b858310801561227457508381105b156123135783603054106122885760006030555b6122ba6025603054815481106122a0576122a06138d9565b6000918252602090912001546001600160a01b0316611f03565b6122cf6122c85a8490611d73565b8490612bf4565b92505a6030805491935060006122e4836138ef565b919050555080806122f4906138ef565b602d80549193509091506000612309836138ef565b9190505550612266565b83602d5410158015612326575084602054115b1561234057602c805460ff1916905560006022819055602d555b505050505050565b60008111801561236e57506001600160a01b038216600090815260266020526040902054155b156123d457602580546001600160a01b0384166000818152602760205260408120839055600183018455929092527f401968ff42a154441da5f6c4c935ac46b8671f0e062baaa62a7545ba53bb6e4c0180546001600160a01b0319169091179055612407565b801580156123f957506001600160a01b03821660009081526026602052604090205415155b156124075761240782612f01565b6001600160a01b038216600090815260266020526040902054601e5461243891839161243291611d73565b90612bf4565b601e556001600160a01b038216600090815260266020526040902081905561245f81611ee6565b6001600160a01b0390921660009081526026602052604090206001019190915550565b6001600160a01b0383166124e65760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610e2e565b6001600160a01b0382166125485760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610e2e565b61255183611385565b8111156118e85760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610e2e565b6001600160a01b03821660009081526006602052604090205460ff161580156125fc57506001600160a01b03811660009081526006602052604090205460ff16155b1561164357600954600160a81b900460ff166116435760405162461bcd60e51b815260206004820152600e60248201526d1d1c98591a5b99d05b1b1bddd95960921b6044820152606401610e2e565b6001600160a01b03831660009081526006602052604090205460ff1615801561268d57506001600160a01b03821660009081526006602052604090205460ff16155b80156126a757506009546001600160a01b03838116911614155b80156126be57506001600160a01b03821661dead14155b156118e8576003546001600160a01b0383166000908152600460205260409020546126e99083612bf4565b11156118e85760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e00006044820152606401610e2e565b6001600160a01b038316600090815260196020526040902054156127ed5761275e83611385565b6001600160a01b038416600090815260196020526040902054612782908390612bf4565b11156127ed5760405162461bcd60e51b815260206004820152603460248201527f45524332303a2045786365656473206d6178696d756d20616c6c6f776564206e60448201527337ba1031bab93932b73a363c9039ba30b5b2b21760611b6064820152608401610e2e565b6002548111158061281657506001600160a01b03831660009081526006602052604090205460ff165b8061283957506001600160a01b03821660009081526006602052604090205460ff165b6118e85760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610e2e565b6009546001600160a01b0382811691161480156128af57506001600160a01b03821660009081526006602052604090205460ff16155b80156128be575060155460ff16155b15611643576001601460008282546128d69190613908565b90915550505050565b6009546001600160a01b0384811691161480156128fe57506034548110155b15612941576001600160a01b0382166000908152602f6020526040902054612927906001612bf4565b6001600160a01b0383166000908152602f60205260409020555b6009546001600160a01b03848116911614801561295f575060345481105b15612981576001600160a01b0382166000908152602f60205260409020600190555b6009546001600160a01b03908116908316036118e85750506001600160a01b03166000908152602f6020526040812055565b6129be838383613016565b156118e8576129ce6017546130ce565b6000601455505050565b6001600160a01b03821660009081526006602052604081205460ff161580156110905750506001600160a01b031660009081526006602052604090205460ff1615919050565b600080612a2b85856132d9565b118015612a3b575060155460ff16155b15612bed576000612a5d612a4f86866132d9565b60135461148a908690612052565b30600090815260046020526040902054909150612a7a9082612bf4565b30600081815260046020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612acb9085815260200190565b60405180910390a36000600c54118015612af05750612aea85856132d9565b600c5411155b15612b4557612b1c612b13600c5461148a6013548761205290919063ffffffff16565b60215490612bf4565b602155600c54601354612b4191612b389161148a908790612052565b602a5490612bf4565b602a555b6000600e54118015612b625750612b5c85856132d9565b600e5411155b15612b8e57612b8e3061dead612b89600e5461148a6013548961205290919063ffffffff16565b611d7f565b6000600f54118015612bab5750612ba585856132d9565b600f5411155b15612bdb57601d54600f54601354612bdb9230926001600160a01b0390911691612b89919061148a908990612052565b612be58382611d73565b915050611090565b5092915050565b60006110908284613908565b602e5460ff1615612c115760006022555b6001600160a01b03811660009081526026602052604090205415612c3857612c3881611f03565b6001600160a01b03821660009081526026602052604090205415801590612c6d57506009546001600160a01b03828116911614155b15612c7b57612c7b82611f03565b6009546001600160a01b038281169116148015612caf57506001600160a01b03821660009081526026602052604090205415155b15612ccd57612cc9612cc0836110e3565b60295490612bf4565b6029555b6001600160a01b03821660009081526007602052604090205460ff16612cfa57612cfa82611ab284611385565b6001600160a01b03811660009081526007602052604090205460ff16612d2757612d2781611ab283611385565b6001600160a01b03811660009081526007602052604090205460ff16158015612d5d57506009546001600160a01b038381169116145b8015612d8257506001600160a01b0381166000908152602f6020526040902054600111155b15612db3576001600160a01b0381166000908152602f6020526040902054612db3908290611ab29061148a83611385565b42612dcb603254603354612bf490919063ffffffff16565b11158015612de25750600954600160a81b900460ff165b8015612df057506000602154115b8015612dff575060155460ff16155b8015612e145750600954600160b01b900460ff165b15612e2157612e216121a9565b612e2c60315461224d565b6001600160a01b038116600090815260266020526040902054156116435761164381611f03565b6001600160a01b038316600090815260046020526040812054612e769083611d73565b6001600160a01b038086166000908152600460205260408082209390935590851681522054612ea59083612bf4565b6001600160a01b0384166000908152600460205260409020555060019392505050565b601f54612ed59082612bf4565b601f55601e54602454612ef991612ef0916114909085612046565b60235490612bf4565b602355602255565b60258054612f119060019061388d565b81548110612f2157612f216138d9565b60009182526020808320909101546001600160a01b0384811684526027909252604090922054602580549290931692918110612f5f57612f5f6138d9565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260279182905260408120546025805491939291612fab9060019061388d565b81548110612fbb57612fbb6138d9565b60009182526020808320909101546001600160a01b031683528201929092526040019020556025805480612ff157612ff161391b565b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000806018548310159050600060175461302e611363565b601554911115915060ff1615801561304f5750600954600160a01b900460ff165b80156130645750600954600160a81b900460ff165b801561306d5750815b801561309257506001600160a01b03861660009081526006602052604090205460ff16155b80156130ab57506009546001600160a01b038681169116145b80156130bb575060165460145410155b80156130c45750805b9695505050505050565b6015805460ff191660019081179091556010546000916130f59160029161148a9190612bf4565b60105490915061312f5761312c600261148a6001612432600d54612432601b54612432600b54600a54612bf490919063ffffffff16565b90505b600061314a82611490600a548661204690919063ffffffff16565b905060006131588483611d73565b90504761316482613340565b60006131704783611d73565b9050600061319361318c600a5488611d7390919063ffffffff16565b8390612052565b905060006131ac600a548361204690919063ffffffff16565b905080156131cd576039546131cd90879083906001600160a01b0316613492565b601b546000906131e29061148a856002612046565b90508015613226576037546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015613224573d6000803e3d6000fd5b505b600b5460009061323b9061148a866002612046565b9050801561327f576038546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561327d573d6000803e3d6000fd5b505b4780156132c2576036546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156132c0573d6000803e3d6000fd5b505b50506015805460ff19169055505050505050505050565b6009546000906001600160a01b0383811691161480156132fb57506000601154115b156133095750601154610dfe565b6009546001600160a01b03848116911614801561332857506000601054115b156133365750601054610dfe565b5060125492915050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613375576133756138d9565b6001600160a01b03928316602091820292909201810191909152600854604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156133ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133f29190613931565b81600181518110613405576134056138d9565b6001600160a01b03928316602091820292909201015260085461342b9130911684611c4f565b60085460405163791ac94760e01b81526001600160a01b039091169063791ac9479061346490859060009086903090429060040161394e565b600060405180830381600087803b15801561347e57600080fd5b505af1158015612340573d6000803e3d6000fd5b6008546134aa9030906001600160a01b031685611c4f565b60085460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0383811660848301524260a48301529091169063f305d71990849060c40160606040518083038185885af1158015613518573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061234091906139bf565b600060208083528351808285015260005b8181101561356a5785810183015185820160400152820161354e565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461176857600080fd5b600080604083850312156135b357600080fd5b82356135be8161358b565b946020939093013593505050565b6000602082840312156135de57600080fd5b5035919050565b6000806000806000806000806000806101408b8d03121561360557600080fd5b505088359a60208a01359a5060408a013599606081013599506080810135985060a0810135975060c0810135965060e081013595506101008101359450610120013592509050565b60008060006060848603121561366257600080fd5b833561366d8161358b565b9250602084013561367d8161358b565b929592945050506040919091013590565b6000602082840312156136a057600080fd5b81356110908161358b565b801515811461176857600080fd5b600080604083850312156136cc57600080fd5b82356136d78161358b565b915060208301356136e7816136ab565b809150509250929050565b6000806040838503121561370557600080fd5b50508035926020909101359150565b60006020828403121561372657600080fd5b8135611090816136ab565b600080600080600060a0868803121561374957600080fd5b85356137548161358b565b945060208601356137648161358b565b935060408601356137748161358b565b925060608601356137848161358b565b915060808601356137948161358b565b809150509295509295909350565b600080604083850312156137b557600080fd5b82356137c08161358b565b915060208301356136e78161358b565b6000806000606084860312156137e557600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561380f57600080fd5b8235915060208301356136e78161358b565b60208082526006908201526510a7aba722a960d11b604082015260600190565b60006020828403121561385357600080fd5b5051919050565b60006020828403121561386c57600080fd5b8151611090816136ab565b634e487b7160e01b600052601160045260246000fd5b81810381811115610dfe57610dfe613877565b8082028115828204841417610dfe57610dfe613877565b6000826138d457634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b60006001820161390157613901613877565b5060010190565b80820180821115610dfe57610dfe613877565b634e487b7160e01b600052603160045260246000fd5b60006020828403121561394357600080fd5b81516110908161358b565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561399e5784516001600160a01b031683529383019391830191600101613979565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156139d457600080fd5b835192506020840151915060408401519050925092509256fe536f6e69634861727279706f74746572497679736175724261746d616e416c676f7265496e7545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212201323e24c11a47888f787072a2b2fe3c32bfad09b0d1a782033cee977e1f6c44164736f6c63430008130033

Deployed Bytecode

0x60806040526004361061041f5760003560e01c8063893d20e81161021e578063ccec371611610123578063e2910950116100ab578063efca2eed1161007a578063efca2eed14610d4a578063f2fde38b14610d60578063f4e0d9ac14610d80578063f69e204614610da0578063feb3040214610db557600080fd5b8063e291095014610c9a578063e94dd17c14610cdd578063ef40a67014610cfd578063ef43b02b14610d2a57600080fd5b8063d494c388116100f2578063d494c38814610bd3578063d9c47ade14610bf3578063dbb108b714610c13578063dd62ed3e14610c34578063dee5434b14610c7a57600080fd5b8063ccec371614610b2c578063ce7c2ac214610b4c578063d156875014610ba3578063d4348de014610bb957600080fd5b8063a61fba42116101a6578063b7e5595c11610175578063b7e5595c14610a7b578063bbc3f06914610aa8578063c0c4939414610abd578063c61ca2b714610ad3578063caa2344414610b0c57600080fd5b8063a61fba42146109e3578063a8aa1b3114610a1b578063a9059cbb14610a3b578063b6b55f2514610a5b57600080fd5b806395d89b41116101ed57806395d89b4114610940578063997664d71461096d5780639e252f00146109835780639fb05d37146109a3578063a0821be3146109c357600080fd5b8063893d20e8146108b95780638c7d1302146108eb57806392a65e001461090b5780639358928b1461092b57600080fd5b80633850f6871161032457806371201a0e116102ac5780637d1db4a51161027b5780637d1db4a514610843578063817b1cd214610859578063822628081461086f5780638331c10614610884578063884870c71461089957600080fd5b806371201a0e146107e257806375a72944146107f857806378109e541461080d5780637a16a49e1461082357600080fd5b806348ff2b8b116102f357806348ff2b8b1461076157806349c1cf6e146107815780636570e4eb1461079757806367b50af9146107ac57806370a08231146107c257600080fd5b80633850f687146106d55780633a98ef39146106eb5780633f4218e0146107015780634355855a1461073157600080fd5b8063234353aa116103a7578063293230b811610376578063293230b8146106355780632b37e0cc1461064a5780632e1a7d4d1461066a5780632f54bf6e1461068a578063313ce567146106b957600080fd5b8063234353aa1461058b57806323b872dd146105d557806326a4e8d2146105f557806328fd31981461061557600080fd5b80630c8f78fb116103ee5780630c8f78fb146104bc5780630dc6e50e146104de57806312f02ffe146104fe57806318160ddd1461053957806319e4574d1461054e57600080fd5b80630122690f1461042b57806306fdde031461045457806308e20e1f14610476578063095ea7b31461048c57600080fd5b3661042657005b600080fd5b34801561043757600080fd5b5061044160225481565b6040519081526020015b60405180910390f35b34801561046057600080fd5b50610469610dcd565b60405161044b919061353d565b34801561048257600080fd5b5061044160215481565b34801561049857600080fd5b506104ac6104a73660046135a0565b610ded565b604051901515815260200161044b565b3480156104c857600080fd5b506104dc6104d73660046135cc565b610e04565b005b3480156104ea57600080fd5b506104dc6104f93660046135e5565b610e3c565b34801561050a57600080fd5b50602254602b546000908152603b60205260409020600101545b6040805192835260208301919091520161044b565b34801561054557600080fd5b50600154610441565b34801561055a57600080fd5b50610563610f4b565b604080519586526020860194909452928401919091526060830152608082015260a00161044b565b34801561059757600080fd5b506105636105a63660046135cc565b603b60205260009081526040902080546001820154600283015460038401546004909401549293919290919085565b3480156105e157600080fd5b506104ac6105f036600461364d565b61102d565b34801561060157600080fd5b506104dc61061036600461368e565b611097565b34801561062157600080fd5b5061044161063036600461368e565b6110e3565b34801561064157600080fd5b506104dc61116e565b34801561065657600080fd5b506104dc6106653660046135a0565b6111b1565b34801561067657600080fd5b506104dc6106853660046135cc565b6111f7565b34801561069657600080fd5b506104ac6106a536600461368e565b6000546001600160a01b0391821691161490565b3480156106c557600080fd5b506040516009815260200161044b565b3480156106e157600080fd5b50610441602b5481565b3480156106f757600080fd5b50610441601e5481565b34801561070d57600080fd5b506104ac61071c36600461368e565b60066020526000908152604090205460ff1681565b34801561073d57600080fd5b506104ac61074c36600461368e565b60076020526000908152604090205460ff1681565b34801561076d57600080fd5b506104dc61077c3660046136b9565b61130e565b34801561078d57600080fd5b5061044160335481565b3480156107a357600080fd5b50610441611363565b3480156107b857600080fd5b5061044160315481565b3480156107ce57600080fd5b506104416107dd36600461368e565b611385565b3480156107ee57600080fd5b5061044160325481565b34801561080457600080fd5b506105636113a0565b34801561081957600080fd5b5061044160035481565b34801561082f57600080fd5b506104dc61083e3660046135cc565b6113e0565b34801561084f57600080fd5b5061044160025481565b34801561086557600080fd5b50610441601a5481565b34801561087b57600080fd5b506104dc61140f565b34801561089057600080fd5b506104dc61141a565b3480156108a557600080fd5b506104dc6108b43660046136f2565b61144b565b3480156108c557600080fd5b506000546001600160a01b03165b6040516001600160a01b03909116815260200161044b565b3480156108f757600080fd5b506104dc6109063660046135cc565b61154f565b34801561091757600080fd5b506104dc610926366004613714565b61159b565b34801561093757600080fd5b506104416115e3565b34801561094c57600080fd5b5060408051808201909152600481526329a424a160e11b6020820152610469565b34801561097957600080fd5b50610441601f5481565b34801561098f57600080fd5b506104dc61099e3660046135cc565b611609565b3480156109af57600080fd5b506104dc6109be366004613731565b611647565b3480156109cf57600080fd5b506104416109de36600461368e565b611724565b3480156109ef57600080fd5b506104416109fe3660046135cc565b6000908152603a6020908152604080832033845290915290205490565b348015610a2757600080fd5b506009546108d3906001600160a01b031681565b348015610a4757600080fd5b506104ac610a563660046135a0565b611751565b348015610a6757600080fd5b506104dc610a763660046135cc565b61175e565b348015610a8757600080fd5b50610441610a9636600461368e565b602f6020526000908152604090205481565b348015610ab457600080fd5b506104dc61176b565b348015610ac957600080fd5b5061044160295481565b348015610adf57600080fd5b50610441610aee36600461368e565b6001600160a01b031660009081526026602052604090206002015490565b348015610b1857600080fd5b506104dc610b27366004613714565b61179d565b348015610b3857600080fd5b506104dc610b4736600461368e565b6117da565b348015610b5857600080fd5b50610b88610b6736600461368e565b60266020526000908152604090208054600182015460029092015490919083565b6040805193845260208401929092529082015260600161044b565b348015610baf57600080fd5b50610441602a5481565b348015610bc557600080fd5b50602c546104ac9060ff1681565b348015610bdf57600080fd5b506104dc610bee3660046135cc565b6118ed565b348015610bff57600080fd5b506104dc610c0e3660046135cc565b611939565b348015610c1f57600080fd5b506009546104ac90600160b01b900460ff1681565b348015610c4057600080fd5b50610441610c4f3660046137a2565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610c8657600080fd5b506104dc610c953660046137d0565b61196c565b348015610ca657600080fd5b50610441610cb53660046137fc565b6000918252603a602090815260408084206001600160a01b0393909316845291905290205490565b348015610ce957600080fd5b506104dc610cf83660046137d0565b6119a4565b348015610d0957600080fd5b50610441610d1836600461368e565b60196020526000908152604090205481565b348015610d3657600080fd5b506104dc610d453660046136b9565b611a06565b348015610d5657600080fd5b5061044160205481565b348015610d6c57600080fd5b506104dc610d7b36600461368e565b611ac4565b348015610d8c57600080fd5b506104dc610d9b36600461368e565b611b42565b348015610dac57600080fd5b506104dc611ba6565b348015610dc157600080fd5b50602d54602554610524565b60606040518060600160405280602681526020016139ee60269139905090565b6000610dfa338484611c4f565b5060015b92915050565b6000546001600160a01b03163314610e375760405162461bcd60e51b8152600401610e2e90613821565b60405180910390fd5b603155565b6000546001600160a01b03163314610e665760405162461bcd60e51b8152600401610e2e90613821565b600a8a9055600b899055600c889055601b859055600d849055600e879055601083905560118290556012819055600f8690556013548311801590610eae575060135460115411155b8015610ebe5750601354600e5411155b8015610ece5750601354600f5411155b8015610ede575060135460125411155b610f3f5760405162461bcd60e51b815260206004820152602c60248201527f746f74616c46656520616e642073656c6c4665652063616e6e6f74206265206d60448201526b6f7265207468616e2032302560a01b6064820152608401610e2e565b50505050505050505050565b6000806000806000603b6000602b54815260200190815260200160002060000154603b6000610f866001602b54611d7390919063ffffffff16565b815260200190815260200160002060000154603b6000610fb26002602b54611d7390919063ffffffff16565b815260200190815260200160002060000154603b6000610fde6003602b54611d7390919063ffffffff16565b815260200190815260200160002060000154603b600061100a6004602b54611d7390919063ffffffff16565b815260200190815260200160002060000154945094509450945094509091929394565b600061103a848484611d7f565b61108c843361108785604051806060016040528060288152602001613a14602891396001600160a01b038a1660009081526005602090815260408083203384529091529020549190611eba565b611c4f565b5060015b9392505050565b6000546001600160a01b031633146110c15760405162461bcd60e51b8152600401610e2e90613821565b601d80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038116600090815260266020526040812054810361110a57506000919050565b6001600160a01b03821660009081526026602052604081205461112c90611ee6565b6001600160a01b03841660009081526026602052604090206001015490915080821161115c575060009392505050565b6111668282611d73565b949350505050565b6000546001600160a01b031633146111985760405162461bcd60e51b8152600401610e2e90613821565b6009805460ff60a81b1916600160a81b17905542603355565b6000546001600160a01b031633146111db5760405162461bcd60e51b8152600401610e2e90613821565b6001600160a01b039091166000908152602f6020526040902055565b3360009081526019602052604090205481111561126c5760405162461bcd60e51b815260206004820152602d60248201527f45524332303a2043616e6e6f7420756e7374616b65206d6f7265207468616e2060448201526c185b5bdd5b9d081cdd185ad959609a1b6064820152608401610e2e565b601c5460405163d8a9bf2960e01b8152336004820152602481018390526001600160a01b039091169063d8a9bf2990604401600060405180830381600087803b1580156112b857600080fd5b505af11580156112cc573d6000803e3d6000fd5b5050336000908152601960205260409020546112eb9250905082611d73565b33600090815260196020526040902055601a546113089082611d73565b601a5550565b6000546001600160a01b031633146113385760405162461bcd60e51b8152600401610e2e90613821565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b600061138060225461137a60215461137a30611385565b90611d73565b905090565b6001600160a01b031660009081526004602052604090205490565b60008060008060006113b130611385565b6113c660225461137a60215461137a30611385565b602154602254602954945094509450945094509091929394565b6000546001600160a01b0316331461140a5760405162461bcd60e51b8152600401610e2e90613821565b603255565b61141833611f03565b565b6000546001600160a01b031633146114445760405162461bcd60e51b8152600401610e2e90613821565b6000602255565b6000546001600160a01b031633146114755760405162461bcd60e51b8152600401610e2e90613821565b60006114966127106114908561148a60015490565b90612046565b90612052565b905060006114ad6127106114908561148a60015490565b905060006114c56103e8611490600561148a60015490565b90508083101580156114d75750808210155b6115415760405162461bcd60e51b815260206004820152603560248201527f45524332303a206d61782054587320616e64206d61782057616c6c65742063616044820152746e6e6f74206265206c657373207468616e202e352560581b6064820152608401610e2e565b506002919091556003555050565b6000546001600160a01b031633146115795760405162461bcd60e51b8152600401610e2e90613821565b611595620186a06114908360015461204690919063ffffffff16565b60355550565b6000546001600160a01b031633146115c55760405162461bcd60e51b8152600401610e2e90613821565b60098054911515600160b01b0260ff60b01b19909216919091179055565b60006113806115f26000611385565b61137a61160061dead611385565b60015490611d73565b6036546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611643573d6000803e3d6000fd5b5050565b6000546001600160a01b031633146116715760405162461bcd60e51b8152600401610e2e90613821565b603880546001600160a01b039687166001600160a01b0319918216811790925560398054968816968216871790556036805495881695821686179055601d805494881694821685179055603780549390971692168217909555600094855260066020526040808620805460ff199081166001908117909255958752818720805487168217905593865280862080548616851790559185528185208054851684179055845290922080549091169091179055565b6001600160a01b0381166000908152601960209081526040808320546004909252822054610dfe91611d73565b6000610dfa338484611d7f565b611768338261205e565b50565b6000546001600160a01b031633146117955760405162461bcd60e51b8152600401610e2e90613821565b6114186121a9565b6000546001600160a01b031633146117c75760405162461bcd60e51b8152600401610e2e90613821565b602e805460ff1916911515919091179055565b6000546001600160a01b031633146118045760405162461bcd60e51b8152600401610e2e90613821565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa15801561184b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186f9190613841565b60365460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810183905291925083169063a9059cbb906044016020604051808303816000875af11580156118c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e8919061385a565b505050565b6000546001600160a01b031633146119175760405162461bcd60e51b8152600401610e2e90613821565b611933620186a06114908360015461204690919063ffffffff16565b60345550565b6000546001600160a01b031633146119635760405162461bcd60e51b8152600401610e2e90613821565b6117688161224d565b6000546001600160a01b031633146119965760405162461bcd60e51b8152600401610e2e90613821565b602992909255602155602255565b6000546001600160a01b031633146119ce5760405162461bcd60e51b8152600401610e2e90613821565b60168390556119e7620186a06114908461148a60015490565b6017556119fe620186a06114908361148a60015490565b601855505050565b6000546001600160a01b03163314611a305760405162461bcd60e51b8152600401610e2e90613821565b6001600160a01b0382166000908152600760205260409020805460ff19168215801591909117909155611a6857611a68826000612348565b6001600160a01b0382166000908152602f602052604090205415611ab7576001600160a01b0382166000908152602f6020526040902054611643908390611ab29061148a83611385565b612348565b61164382611ab284611385565b6000546001600160a01b03163314611aee5760405162461bcd60e51b8152600401610e2e90613821565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6000546001600160a01b03163314611b6c5760405162461bcd60e51b8152600401610e2e90613821565b601c80546001600160a01b039092166001600160a01b0319909216821790556000908152600660205260409020805460ff19166001179055565b6015805461ff0019166101001790556000611bc033611385565b601c546040516334c5cbab60e11b8152336004820181905260248201529192506001600160a01b03169063698b975690604401600060405180830381600087803b158015611c0d57600080fd5b505af1158015611c21573d6000803e3d6000fd5b505050506000611c348261137a33611385565b9050611c40338261205e565b50506015805461ff0019169055565b6001600160a01b038316611cb15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610e2e565b6001600160a01b038216611d125760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610e2e565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000611090828461388d565b611d8a838383612482565b611d9483836125ba565b611d9f83838361264b565b611daa838383612737565b611db48383612879565b611dbf8383836128df565b611dca8383836129b3565b6001600160a01b038316600090815260046020526040902054611ded9082611d73565b6001600160a01b038416600090815260046020526040812091909155611e1384846129d8565b611e1d5781611e28565b611e28848484612a1e565b6001600160a01b038416600090815260046020526040902054909150611e4e9082612bf4565b6001600160a01b0380851660008181526004602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611ea29085815260200190565b60405180910390a3611eb48484612c00565b50505050565b60008184841115611ede5760405162461bcd60e51b8152600401610e2e919061353d565b505050900390565b6000610dfe6024546114906023548561204690919063ffffffff16565b6000611f0e826110e3565b6001600160a01b0383166000908152602660205260409020549091501580611f3d5750611f3a30611385565b81115b15611f46575050565b801561164357602054611f599082612bf4565b6020908155602b546000908152603b9091526040902060010154611f7d9082612bf4565b602b546000908152603b6020526040902060010155611f9d308383612e53565b50602b546000908152603a602090815260408083206001600160a01b03861684528252808320849055602882528083204290556026909152902060020154611fe59082612bf4565b6001600160a01b038316600090815260266020526040902060028101919091555461200f90611ee6565b6001600160a01b038316600090815260266020908152604080832060010193909355602f90529081205561164382611ab281611385565b600061109082846138a0565b600061109082846138b7565b6001600160a01b03821660009081526019602090815260408083205460049092529091205461208c91611d73565b8111156120f35760405162461bcd60e51b815260206004820152602f60248201527f45524332303a2043616e6e6f74207374616b65206d6f7265207468616e20617660448201526e61696c61626c652062616c616e636560881b6064820152608401610e2e565b601c5460405163773a0f0960e01b81526001600160a01b038481166004830152602482018490529091169063773a0f0990604401600060405180830381600087803b15801561214157600080fd5b505af1158015612155573d6000803e3d6000fd5b5050506001600160a01b03831660009081526019602052604090205461217c915082612bf4565b6001600160a01b038316600090815260196020526040902055601a546121a29082612bf4565b601a555050565b602c805460ff1916600190811790915560298054602b80546000908152603b60205260408120600401929092559155546121e291612bf4565b602b818155602a546000928352603b60205260408084206003019190915560218054835485528285205591548352909120426002909101556035549054111561222c576035546021555b612237602154612ec8565b60006021819055602a5542603355603154611418905b6020546025548061225d57505050565b6000805a905060005b858310801561227457508381105b156123135783603054106122885760006030555b6122ba6025603054815481106122a0576122a06138d9565b6000918252602090912001546001600160a01b0316611f03565b6122cf6122c85a8490611d73565b8490612bf4565b92505a6030805491935060006122e4836138ef565b919050555080806122f4906138ef565b602d80549193509091506000612309836138ef565b9190505550612266565b83602d5410158015612326575084602054115b1561234057602c805460ff1916905560006022819055602d555b505050505050565b60008111801561236e57506001600160a01b038216600090815260266020526040902054155b156123d457602580546001600160a01b0384166000818152602760205260408120839055600183018455929092527f401968ff42a154441da5f6c4c935ac46b8671f0e062baaa62a7545ba53bb6e4c0180546001600160a01b0319169091179055612407565b801580156123f957506001600160a01b03821660009081526026602052604090205415155b156124075761240782612f01565b6001600160a01b038216600090815260266020526040902054601e5461243891839161243291611d73565b90612bf4565b601e556001600160a01b038216600090815260266020526040902081905561245f81611ee6565b6001600160a01b0390921660009081526026602052604090206001019190915550565b6001600160a01b0383166124e65760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610e2e565b6001600160a01b0382166125485760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610e2e565b61255183611385565b8111156118e85760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610e2e565b6001600160a01b03821660009081526006602052604090205460ff161580156125fc57506001600160a01b03811660009081526006602052604090205460ff16155b1561164357600954600160a81b900460ff166116435760405162461bcd60e51b815260206004820152600e60248201526d1d1c98591a5b99d05b1b1bddd95960921b6044820152606401610e2e565b6001600160a01b03831660009081526006602052604090205460ff1615801561268d57506001600160a01b03821660009081526006602052604090205460ff16155b80156126a757506009546001600160a01b03838116911614155b80156126be57506001600160a01b03821661dead14155b156118e8576003546001600160a01b0383166000908152600460205260409020546126e99083612bf4565b11156118e85760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e00006044820152606401610e2e565b6001600160a01b038316600090815260196020526040902054156127ed5761275e83611385565b6001600160a01b038416600090815260196020526040902054612782908390612bf4565b11156127ed5760405162461bcd60e51b815260206004820152603460248201527f45524332303a2045786365656473206d6178696d756d20616c6c6f776564206e60448201527337ba1031bab93932b73a363c9039ba30b5b2b21760611b6064820152608401610e2e565b6002548111158061281657506001600160a01b03831660009081526006602052604090205460ff165b8061283957506001600160a01b03821660009081526006602052604090205460ff165b6118e85760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610e2e565b6009546001600160a01b0382811691161480156128af57506001600160a01b03821660009081526006602052604090205460ff16155b80156128be575060155460ff16155b15611643576001601460008282546128d69190613908565b90915550505050565b6009546001600160a01b0384811691161480156128fe57506034548110155b15612941576001600160a01b0382166000908152602f6020526040902054612927906001612bf4565b6001600160a01b0383166000908152602f60205260409020555b6009546001600160a01b03848116911614801561295f575060345481105b15612981576001600160a01b0382166000908152602f60205260409020600190555b6009546001600160a01b03908116908316036118e85750506001600160a01b03166000908152602f6020526040812055565b6129be838383613016565b156118e8576129ce6017546130ce565b6000601455505050565b6001600160a01b03821660009081526006602052604081205460ff161580156110905750506001600160a01b031660009081526006602052604090205460ff1615919050565b600080612a2b85856132d9565b118015612a3b575060155460ff16155b15612bed576000612a5d612a4f86866132d9565b60135461148a908690612052565b30600090815260046020526040902054909150612a7a9082612bf4565b30600081815260046020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612acb9085815260200190565b60405180910390a36000600c54118015612af05750612aea85856132d9565b600c5411155b15612b4557612b1c612b13600c5461148a6013548761205290919063ffffffff16565b60215490612bf4565b602155600c54601354612b4191612b389161148a908790612052565b602a5490612bf4565b602a555b6000600e54118015612b625750612b5c85856132d9565b600e5411155b15612b8e57612b8e3061dead612b89600e5461148a6013548961205290919063ffffffff16565b611d7f565b6000600f54118015612bab5750612ba585856132d9565b600f5411155b15612bdb57601d54600f54601354612bdb9230926001600160a01b0390911691612b89919061148a908990612052565b612be58382611d73565b915050611090565b5092915050565b60006110908284613908565b602e5460ff1615612c115760006022555b6001600160a01b03811660009081526026602052604090205415612c3857612c3881611f03565b6001600160a01b03821660009081526026602052604090205415801590612c6d57506009546001600160a01b03828116911614155b15612c7b57612c7b82611f03565b6009546001600160a01b038281169116148015612caf57506001600160a01b03821660009081526026602052604090205415155b15612ccd57612cc9612cc0836110e3565b60295490612bf4565b6029555b6001600160a01b03821660009081526007602052604090205460ff16612cfa57612cfa82611ab284611385565b6001600160a01b03811660009081526007602052604090205460ff16612d2757612d2781611ab283611385565b6001600160a01b03811660009081526007602052604090205460ff16158015612d5d57506009546001600160a01b038381169116145b8015612d8257506001600160a01b0381166000908152602f6020526040902054600111155b15612db3576001600160a01b0381166000908152602f6020526040902054612db3908290611ab29061148a83611385565b42612dcb603254603354612bf490919063ffffffff16565b11158015612de25750600954600160a81b900460ff165b8015612df057506000602154115b8015612dff575060155460ff16155b8015612e145750600954600160b01b900460ff165b15612e2157612e216121a9565b612e2c60315461224d565b6001600160a01b038116600090815260266020526040902054156116435761164381611f03565b6001600160a01b038316600090815260046020526040812054612e769083611d73565b6001600160a01b038086166000908152600460205260408082209390935590851681522054612ea59083612bf4565b6001600160a01b0384166000908152600460205260409020555060019392505050565b601f54612ed59082612bf4565b601f55601e54602454612ef991612ef0916114909085612046565b60235490612bf4565b602355602255565b60258054612f119060019061388d565b81548110612f2157612f216138d9565b60009182526020808320909101546001600160a01b0384811684526027909252604090922054602580549290931692918110612f5f57612f5f6138d9565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260279182905260408120546025805491939291612fab9060019061388d565b81548110612fbb57612fbb6138d9565b60009182526020808320909101546001600160a01b031683528201929092526040019020556025805480612ff157612ff161391b565b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000806018548310159050600060175461302e611363565b601554911115915060ff1615801561304f5750600954600160a01b900460ff165b80156130645750600954600160a81b900460ff165b801561306d5750815b801561309257506001600160a01b03861660009081526006602052604090205460ff16155b80156130ab57506009546001600160a01b038681169116145b80156130bb575060165460145410155b80156130c45750805b9695505050505050565b6015805460ff191660019081179091556010546000916130f59160029161148a9190612bf4565b60105490915061312f5761312c600261148a6001612432600d54612432601b54612432600b54600a54612bf490919063ffffffff16565b90505b600061314a82611490600a548661204690919063ffffffff16565b905060006131588483611d73565b90504761316482613340565b60006131704783611d73565b9050600061319361318c600a5488611d7390919063ffffffff16565b8390612052565b905060006131ac600a548361204690919063ffffffff16565b905080156131cd576039546131cd90879083906001600160a01b0316613492565b601b546000906131e29061148a856002612046565b90508015613226576037546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015613224573d6000803e3d6000fd5b505b600b5460009061323b9061148a866002612046565b9050801561327f576038546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561327d573d6000803e3d6000fd5b505b4780156132c2576036546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156132c0573d6000803e3d6000fd5b505b50506015805460ff19169055505050505050505050565b6009546000906001600160a01b0383811691161480156132fb57506000601154115b156133095750601154610dfe565b6009546001600160a01b03848116911614801561332857506000601054115b156133365750601054610dfe565b5060125492915050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613375576133756138d9565b6001600160a01b03928316602091820292909201810191909152600854604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156133ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133f29190613931565b81600181518110613405576134056138d9565b6001600160a01b03928316602091820292909201015260085461342b9130911684611c4f565b60085460405163791ac94760e01b81526001600160a01b039091169063791ac9479061346490859060009086903090429060040161394e565b600060405180830381600087803b15801561347e57600080fd5b505af1158015612340573d6000803e3d6000fd5b6008546134aa9030906001600160a01b031685611c4f565b60085460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0383811660848301524260a48301529091169063f305d71990849060c40160606040518083038185885af1158015613518573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061234091906139bf565b600060208083528351808285015260005b8181101561356a5785810183015185820160400152820161354e565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461176857600080fd5b600080604083850312156135b357600080fd5b82356135be8161358b565b946020939093013593505050565b6000602082840312156135de57600080fd5b5035919050565b6000806000806000806000806000806101408b8d03121561360557600080fd5b505088359a60208a01359a5060408a013599606081013599506080810135985060a0810135975060c0810135965060e081013595506101008101359450610120013592509050565b60008060006060848603121561366257600080fd5b833561366d8161358b565b9250602084013561367d8161358b565b929592945050506040919091013590565b6000602082840312156136a057600080fd5b81356110908161358b565b801515811461176857600080fd5b600080604083850312156136cc57600080fd5b82356136d78161358b565b915060208301356136e7816136ab565b809150509250929050565b6000806040838503121561370557600080fd5b50508035926020909101359150565b60006020828403121561372657600080fd5b8135611090816136ab565b600080600080600060a0868803121561374957600080fd5b85356137548161358b565b945060208601356137648161358b565b935060408601356137748161358b565b925060608601356137848161358b565b915060808601356137948161358b565b809150509295509295909350565b600080604083850312156137b557600080fd5b82356137c08161358b565b915060208301356136e78161358b565b6000806000606084860312156137e557600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561380f57600080fd5b8235915060208301356136e78161358b565b60208082526006908201526510a7aba722a960d11b604082015260600190565b60006020828403121561385357600080fd5b5051919050565b60006020828403121561386c57600080fd5b8151611090816136ab565b634e487b7160e01b600052601160045260246000fd5b81810381811115610dfe57610dfe613877565b8082028115828204841417610dfe57610dfe613877565b6000826138d457634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b60006001820161390157613901613877565b5060010190565b80820180821115610dfe57610dfe613877565b634e487b7160e01b600052603160045260246000fd5b60006020828403121561394357600080fd5b81516110908161358b565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561399e5784516001600160a01b031683529383019391830191600101613979565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156139d457600080fd5b835192506020840151915060408401519050925092509256fe536f6e69634861727279706f74746572497679736175724261746d616e416c676f7265496e7545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212201323e24c11a47888f787072a2b2fe3c32bfad09b0d1a782033cee977e1f6c44164736f6c63430008130033

Deployed Bytecode Sourcemap

4442:27383:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6484:40;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;6484:40:0;;;;;;;;9174:67;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;6446:31::-;;;;;;;;;;;;;;;;9958:133;;;;;;;;;;-1:-1:-1;9958:133:0;;;;;:::i;:::-;;:::i;:::-;;;1370:14:1;;1363:22;1345:41;;1333:2;1318:18;9958:133:0;1205:187:1;25475:88:0;;;;;;;;;;-1:-1:-1;25475:88:0;;;;;:::i;:::-;;:::i;:::-;;12454:700;;;;;;;;;;-1:-1:-1;12454:700:0;;;;;:::i;:::-;;:::i;26980:207::-;;;;;;;;;;-1:-1:-1;27103:25:0;;27141:15;;27042:20;27130:27;;;:10;:27;;;;;:48;;;26980:207;;;;2560:25:1;;;2616:2;2601:18;;2594:34;;;;2533:18;26980:207:0;2386:248:1;9481:84:0;;;;;;;;;;-1:-1:-1;9551:12:0;;9481:84;;31092:404;;;;;;;;;;;;;:::i;:::-;;;;2898:25:1;;;2954:2;2939:18;;2932:34;;;;2982:18;;;2975:34;;;;3040:2;3025:18;;3018:34;3083:3;3068:19;;3061:35;2885:3;2870:19;31092:404:0;2639:463:1;8184:47:0;;;;;;;;;;-1:-1:-1;8184:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10737:309;;;;;;;;;;-1:-1:-1;10737:309:0;;;;;:::i;:::-;;:::i;26570:106::-;;;;;;;;;;-1:-1:-1;26570:106:0;;;;;:::i;:::-;;:::i;29429:473::-;;;;;;;;;;-1:-1:-1;29429:473:0;;;;;:::i;:::-;;:::i;16448:128::-;;;;;;;;;;;;;:::i;16899:131::-;;;;;;;;;;-1:-1:-1;16899:131:0;;;;;:::i;:::-;;:::i;14109:347::-;;;;;;;;;;-1:-1:-1;14109:347:0;;;;;:::i;:::-;;:::i;2330:87::-;;;;;;;;;;-1:-1:-1;2330:87:0;;;;;:::i;:::-;2385:4;2410:5;-1:-1:-1;;;;;2399:16:0;;;2410:5;;2399:16;;2330:87;9324:67;;;;;;;;;;-1:-1:-1;9324:67:0;;4724:1;3962:36:1;;3950:2;3935:18;9324:67:0;3820:184:1;6977:30:0;;;;;;;;;;;;;;;;6339:26;;;;;;;;;;;;;;;;5060:44;;;;;;;;;;-1:-1:-1;5060:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;5111:49;;;;;;;;;;-1:-1:-1;5111:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17514:124;;;;;;;;;;-1:-1:-1;17514:124:0;;;;;:::i;:::-;;:::i;7313:31::-;;;;;;;;;;;;;;;;30903:181;;;;;;;;;;;;;:::i;7225:28::-;;;;;;;;;;;;;;;;9571:103;;;;;;;;;;-1:-1:-1;9571:103:0;;;;;:::i;:::-;;:::i;7260:46::-;;;;;;;;;;;;;;;;30559:336;;;;;;;;;;;;;:::i;4869:63::-;;;;;;;;;;;;;;;;25115:120;;;;;;;;;;-1:-1:-1;25115:120:0;;;;;:::i;:::-;;:::i;4802:60::-;;;;;;;;;;;;;;;;6186:26;;;;;;;;;;;;;;;;26886:86;;;;;;;;;;;;;:::i;25571:108::-;;;;;;;;;;;;;:::i;13162:449::-;;;;;;;;;;-1:-1:-1;13162:449:0;;;;;:::i;:::-;;:::i;9397:78::-;;;;;;;;;;-1:-1:-1;9449:7:0;9467:5;-1:-1:-1;;;;;9467:5:0;9397:78;;;-1:-1:-1;;;;;4936:32:1;;;4918:51;;4906:2;4891:18;9397:78:0;4772:203:1;24975:132:0;;;;;;;;;;-1:-1:-1;24975:132:0;;;;;:::i;:::-;;:::i;25362:105::-;;;;;;;;;;-1:-1:-1;25362:105:0;;;;;:::i;:::-;;:::i;10228:138::-;;;;;;;;;;;;;:::i;9247:71::-;;;;;;;;;;-1:-1:-1;9309:7:0;;;;;;;;;;;;-1:-1:-1;;;9309:7:0;;;;9247:71;;6372:29;;;;;;;;;;;;;;;;26455:107;;;;;;;;;;-1:-1:-1;26455:107:0;;;;;:::i;:::-;;:::i;17038:468::-;;;;;;;;;;-1:-1:-1;17038:468:0;;;;;:::i;:::-;;:::i;10097:125::-;;;;;;;;;;-1:-1:-1;10097:125:0;;;;;:::i;:::-;;:::i;31674:148::-;;;;;;;;;;-1:-1:-1;31674:148:0;;;;;:::i;:::-;31749:7;31776:26;;;:13;:26;;;;;;;;31803:10;31776:38;;;;;;;;;31674:148;5188:19;;;;;;;;;;-1:-1:-1;5188:19:0;;;;-1:-1:-1;;;;;5188:19:0;;;9680:139;;;;;;;;;;-1:-1:-1;9680:139:0;;;;;:::i;:::-;;:::i;13996:105::-;;;;;;;;;;-1:-1:-1;13996:105:0;;;;;:::i;:::-;;:::i;7133:49::-;;;;;;;;;;-1:-1:-1;7133:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;24666:94;;;;;;;;;;;;;:::i;6900:30::-;;;;;;;;;;;;;;;;26684:194;;;;;;;;;;-1:-1:-1;26684:194:0;;;;;:::i;:::-;-1:-1:-1;;;;;26836:19:0;26761:7;26836:19;;;:6;:19;;;;;:33;;;;26684:194;25243:111;;;;;;;;;;-1:-1:-1;25243:111:0;;;;;:::i;:::-;;:::i;24768:199::-;;;;;;;;;;-1:-1:-1;24768:199:0;;;;;:::i;:::-;;:::i;6662:40::-;;;;;;;;;;-1:-1:-1;6662:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6246:25:1;;;6302:2;6287:18;;6280:34;;;;6330:18;;;6323:34;6234:2;6219:18;6662:40:0;6044:319:1;6937:33:0;;;;;;;;;;;;;;;;7014:35;;;;;;;;;;-1:-1:-1;7014:35:0;;;;;;;;17866:130;;;;;;;;;;-1:-1:-1;17866:130:0;;;;;:::i;:::-;;:::i;27378:108::-;;;;;;;;;;-1:-1:-1;27378:108:0;;;;;:::i;:::-;;:::i;5294:38::-;;;;;;;;;;-1:-1:-1;5294:38:0;;;;-1:-1:-1;;;5294:38:0;;;;;;9825:127;;;;;;;;;;-1:-1:-1;9825:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;9923:18:0;;;9906:7;9923:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9825:127;17646:212;;;;;;;;;;-1:-1:-1;17646:212:0;;;;;:::i;:::-;;:::i;31504:162::-;;;;;;;;;;-1:-1:-1;31504:162:0;;;;;:::i;:::-;31597:7;31624:26;;;:13;:26;;;;;;;;-1:-1:-1;;;;;31624:34:0;;;;;;;;;;;;;31504:162;16584:307;;;;;;;;;;-1:-1:-1;16584:307:0;;;;;:::i;:::-;;:::i;6132:47::-;;;;;;;;;;-1:-1:-1;6132:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;22342:327;;;;;;;;;;-1:-1:-1;22342:327:0;;;;;:::i;:::-;;:::i;6408:31::-;;;;;;;;;;;;;;;;2423:111;;;;;;;;;;-1:-1:-1;2423:111:0;;;;;:::i;:::-;;:::i;14786:157::-;;;;;;;;;;-1:-1:-1;14786:157:0;;;;;:::i;:::-;;:::i;14464:314::-;;;;;;;;;;;;;:::i;27195:175::-;;;;;;;;;;-1:-1:-1;27327:13:0;;27342:12;:19;27195:175;;9174:67;9211:13;9234:5;;;;;;;;;;;;;;;;;9227:12;;9174:67;:::o;9958:133::-;10033:4;10040:37;10049:10;10061:7;10070:6;10040:8;:37::i;:::-;-1:-1:-1;10085:4:0;9958:133;;;;;:::o;25475:88::-;2385:4;2410:5;-1:-1:-1;;;;;2410:5:0;2297:10;2399:16;2281:38;;;;-1:-1:-1;;;2281:38:0;;;;;;;:::i;:::-;;;;;;;;;25540:9:::1;:15:::0;25475:88::o;12454:700::-;2385:4;2410:5;-1:-1:-1;;;;;2410:5:0;2297:10;2399:16;2281:38;;;;-1:-1:-1;;;2281:38:0;;;;;;;:::i;:::-;12696:12:::1;:25:::0;;;12723:12:::1;:25:::0;;;12750:13:::1;:28:::0;;;12780:7:::1;:18:::0;;;12800:14:::1;:29:::0;;;-1:-1:-1;12840:15:0;;;12857:8:::1;:17:::0;;;12876:7:::1;:15:::0;;;12893:11:::1;:20:::0;;;12915:8:::1;:17:::0;;;12963:11:::1;::::0;12951:23;::::1;::::0;::::1;::::0;:49:::1;;;12989:11;;12978:7;;:22;;12951:49;:75;;;;;13015:11;;13004:7;;:22;;12951:75;:102;;;;;13042:11;;13030:8;;:23;;12951:102;:146;;;;;13086:11;;13071;;:26;;12951:146;12943:203;;;::::0;-1:-1:-1;;;12943:203:0;;8198:2:1;12943:203:0::1;::::0;::::1;8180:21:1::0;8237:2;8217:18;;;8210:30;8276:34;8256:18;;;8249:62;-1:-1:-1;;;8327:18:1;;;8320:42;8379:19;;12943:203:0::1;7996:408:1::0;12943:203:0::1;12454:700:::0;;;;;;;;;;:::o;31092:404::-;31155:7;31164;31173;31182;31191;31218:10;:27;31229:15;;31218:27;;;;;;;;;;;:44;;;31264:10;:34;31275:22;31295:1;31275:15;;:19;;:22;;;;:::i;:::-;31264:34;;;;;;;;;;;:51;;;31317:10;:34;31328:22;31348:1;31328:15;;:19;;:22;;;;:::i;:::-;31317:34;;;;;;;;;;;:51;;;31383:10;:34;31394:22;31414:1;31394:15;;:19;;:22;;;;:::i;:::-;31383:34;;;;;;;;;;;:51;;;31436:10;:34;31447:22;31467:1;31447:15;;:19;;:22;;;;:::i;:::-;31436:34;;;;;;;;;;;:51;;;31211:277;;;;;;;;;;31092:404;;;;;:::o;10737:309::-;10835:4;10852:36;10862:6;10870:9;10881:6;10852:9;:36::i;:::-;10899:117;10908:6;10916:10;10928:87;10964:6;10928:87;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10928:19:0;;;;;;:11;:19;;;;;;;;10948:10;10928:31;;;;;;;;;:87;:35;:87::i;:::-;10899:8;:117::i;:::-;-1:-1:-1;11034:4:0;10737:309;;;;;;:::o;26570:106::-;2385:4;2410:5;-1:-1:-1;;;;;2410:5:0;2297:10;2399:16;2281:38;;;;-1:-1:-1;;;2281:38:0;;;;;;;:::i;:::-;26643:14:::1;:25:::0;;-1:-1:-1;;;;;;26643:25:0::1;-1:-1:-1::0;;;;;26643:25:0;;;::::1;::::0;;;::::1;::::0;;26570:106::o;29429:473::-;-1:-1:-1;;;;;29521:19:0;;29498:7;29521:19;;;:6;:19;;;;;:26;:31;;29518:48;;-1:-1:-1;29562:1:0;;29429:473;-1:-1:-1;29429:473:0:o;29518:48::-;-1:-1:-1;;;;;29635:19:0;;29576:33;29635:19;;;:6;:19;;;;;:26;29612:50;;:22;:50::i;:::-;-1:-1:-1;;;;;29708:19:0;;29673:32;29708:19;;;:6;:19;;;;;:33;;;29576:86;;-1:-1:-1;29755:53:0;;;29752:70;;-1:-1:-1;29818:1:0;;29429:473;-1:-1:-1;;;29429:473:0:o;29752:70::-;29839:55;:25;29869:24;29839:29;:55::i;:::-;29832:62;29429:473;-1:-1:-1;;;;29429:473:0:o;16448:128::-;2385:4;2410:5;-1:-1:-1;;;;;2410:5:0;2297:10;2399:16;2281:38;;;;-1:-1:-1;;;2281:38:0;;;;;;;:::i;:::-;16502:14:::1;:21:::0;;-1:-1:-1;;;;16502:21:0::1;-1:-1:-1::0;;;16502:21:0::1;::::0;;16553:15:::1;16534:16;:34:::0;16448:128::o;16899:131::-;2385:4;2410:5;-1:-1:-1;;;;;2410:5:0;2297:10;2399:16;2281:38;;;;-1:-1:-1;;;2281:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16990:19:0;;::::1;;::::0;;;:13:::1;:19;::::0;;;;:32;16899:131::o;14109:347::-;14203:10;14190:24;;;;:12;:24;;;;;;14180:34;;;14172:92;;;;-1:-1:-1;;;14172:92:0;;8611:2:1;14172:92:0;;;8593:21:1;8650:2;8630:18;;;8623:30;8689:34;8669:18;;;8662:62;-1:-1:-1;;;8740:18:1;;;8733:43;8793:19;;14172:92:0;8409:409:1;14172:92:0;14275:15;;:51;;-1:-1:-1;;;14275:51:0;;14307:10;14275:51;;;8997::1;9064:18;;;9057:34;;;-1:-1:-1;;;;;14275:15:0;;;;:31;;8970:18:1;;14275:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14377:10:0;14364:24;;;;:12;:24;;;;;;:36;;-1:-1:-1;14364:24:0;-1:-1:-1;14393:6:0;14364:28;:36::i;:::-;14350:10;14337:24;;;;:12;:24;;;;;:63;14425:11;;:23;;14441:6;14425:15;:23::i;:::-;14411:11;:37;-1:-1:-1;14109:347:0:o;17514:124::-;2385:4;2410:5;-1:-1:-1;;;;;2410:5:0;2297:10;2399:16;2281:38;;;;-1:-1:-1;;;2281:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17598:21:0;;;::::1;;::::0;;;:11:::1;:21;::::0;;;;:32;;-1:-1:-1;;17598:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17514:124::o;30903:181::-;30956:23;30999:77;31050:25;;30999:46;31028:16;;30999:24;31017:4;30999:9;:24::i;:::-;:28;;:46::i;:77::-;30992:84;;30903:181;:::o;9571:103::-;-1:-1:-1;;;;;9654:18:0;9637:7;9654:18;;;:9;:18;;;;;;;9571:103::o;30559:336::-;30612:15;30629:17;30648:15;30665:20;30687:14;30721:24;30739:4;30721:9;:24::i;:::-;30747:77;30798:25;;30747:46;30776:16;;30747:24;30765:4;30747:9;:24::i;:77::-;30826:16;;30844:25;;30871:15;;30714:173;;;;;;;;;;30559:336;;;;;:::o;25115:120::-;2385:4;2410:5;-1:-1:-1;;;;;2410:5:0;2297:10;2399:16;2281:38;;;;-1:-1:-1;;;2281:38:0;;;;;;;:::i;:::-;25196:20:::1;:31:::0;25115:120::o;26886:86::-;26934:30;26953:10;26934:18;:30::i;:::-;26886:86::o;25571:108::-;2385:4;2410:5;-1:-1:-1;;;;;2410:5:0;2297:10;2399:16;2281:38;;;;-1:-1:-1;;;2281:38:0;;;;;;;:::i;:::-;25669:1:::1;25633:25;:38:::0;25571:108::o;13162:449::-;2385:4;2410:5;-1:-1:-1;;;;;2410:5:0;2297:10;2399:16;2281:38;;;;-1:-1:-1;;;2281:38:0;;;;;;;:::i;:::-;13246:13:::1;13262:43;13298:5;13262:23;13280:4;13262:13;9551:12:::0;;;9481:84;13262:13:::1;:17:::0;::::1;:23::i;:::-;:27:::0;::::1;:43::i;:::-;13246:59;;13316:17;13336:46;13375:5;13336:26;13354:7;13336:13;9551:12:::0;;;9481:84;13336:46:::1;13316:66;;13384:13;13400:30;13425:4;13400:20;13418:1;13400:13;9551:12:::0;;;9481:84;13400:30:::1;13384:46;;13458:5;13449;:14;;:36;;;;;13480:5;13467:9;:18;;13449:36;13441:102;;;::::0;-1:-1:-1;;;13441:102:0;;9304:2:1;13441:102:0::1;::::0;::::1;9286:21:1::0;9343:2;9323:18;;;9316:30;9382:34;9362:18;;;9355:62;-1:-1:-1;;;9433:18:1;;;9426:51;9494:19;;13441:102:0::1;9102:417:1::0;13441:102:0::1;-1:-1:-1::0;13554:12:0::1;:20:::0;;;;13576:15:::1;:27:::0;-1:-1:-1;;13162:449:0:o;24975:132::-;2385:4;2410:5;-1:-1:-1;;;;;2410:5:0;2297:10;2399:16;2281:38;;;;-1:-1:-1;;;2281:38:0;;;;;;;:::i;:::-;25063:36:::1;25092:6;25063:24;25080:6;25063:12;;:16;;:24;;;;:::i;:36::-;25047:13;:52:::0;-1:-1:-1;24975:132:0:o;25362:105::-;2385:4;2410:5;-1:-1:-1;;;;;2410:5:0;2297:10;2399:16;2281:38;;;;-1:-1:-1;;;2281:38:0;;;;;;;:::i;:::-;25432:18:::1;:27:::0;;;::::1;;-1:-1:-1::0;;;25432:27:0::1;-1:-1:-1::0;;;;25432:27:0;;::::1;::::0;;;::::1;::::0;;25362:105::o;10228:138::-;10287:7;10304:60;10342:21;10360:1;10342:9;:21::i;:::-;10304:33;10321:15;7521:42;10321:9;:15::i;:::-;10304:12;;;:16;:33::i;26455:107::-;26519:16;;26511:43;;-1:-1:-1;;;;;26519:16:0;;;;26511:43;;;;;26546:7;;26519:16;26511:43;26519:16;26511:43;26546:7;26519:16;26511:43;;;;;;;;;;;;;;;;;;;;;26455:107;:::o;17038:468::-;2385:4;2410:5;-1:-1:-1;;;;;2410:5:0;2297:10;2399:16;2281:38;;;;-1:-1:-1;;;2281:38:0;;;;;;;:::i;:::-;17190:18:::1;:31:::0;;-1:-1:-1;;;;;17190:31:0;;::::1;-1:-1:-1::0;;;;;;17190:31:0;;::::1;::::0;::::1;::::0;;;17223:18:::1;:31:::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;17256:16:::1;:27:::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;17285:14:::1;:23:::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;17310:16:::1;:27:::0;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;;17190:18:::1;17348:23:::0;;;:11:::1;:23;::::0;;;;;:30;;-1:-1:-1;;17348:30:0;;::::1;17190:31:::0;17348:30;;::::1;::::0;;;17380:23;;;;;;:30;;;::::1;::::0;::::1;::::0;;17412:21;;;;;;:28;;;::::1;::::0;::::1;::::0;;17442:19;;;;;;:26;;;::::1;::::0;::::1;::::0;;17470:21;;;;;:28;;;;::::1;::::0;;::::1;::::0;;17038:468::o;10097:125::-;-1:-1:-1;;;;;10199:20:0;;10160:7;10199:20;;;:12;:20;;;;;;;;;10177:9;:17;;;;;;:43;;:21;:43::i;9680:139::-;9758:4;9765:40;9775:10;9787:9;9798:6;9765:9;:40::i;13996:105::-;14058:35;14074:10;14086:6;14058:15;:35::i;:::-;13996:105;:::o;24666:94::-;2385:4;2410:5;-1:-1:-1;;;;;2410:5:0;2297:10;2399:16;2281:38;;;;-1:-1:-1;;;2281:38:0;;;;;;;:::i;:::-;24729:23:::1;:21;:23::i;25243:111::-:0;2385:4;2410:5;-1:-1:-1;;;;;2410:5:0;2297:10;2399:16;2281:38;;;;-1:-1:-1;;;2281:38:0;;;;;;;:::i;:::-;25318:19:::1;:28:::0;;-1:-1:-1;;25318:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25243:111::o;24768:199::-;2385:4;2410:5;-1:-1:-1;;;;;2410:5:0;2297:10;2399:16;2281:38;;;;-1:-1:-1;;;2281:38:0;;;;;;;:::i;:::-;24855:41:::1;::::0;-1:-1:-1;;;24855:41:0;;24890:4:::1;24855:41;::::0;::::1;4918:51:1::0;24837:15:0::1;::::0;-1:-1:-1;;;;;24855:26:0;::::1;::::0;::::1;::::0;4891:18:1;;24855:41:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24933:16;::::0;24907:52:::1;::::0;-1:-1:-1;;;24907:52:0;;-1:-1:-1;;;;;24933:16:0;;::::1;24907:52;::::0;::::1;8997:51:1::0;9064:18;;;9057:34;;;24837:59:0;;-1:-1:-1;24907:25:0;::::1;::::0;::::1;::::0;8970:18:1;;24907:52:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24826:141;24768:199:::0;:::o;17866:130::-;2385:4;2410:5;-1:-1:-1;;;;;2410:5:0;2297:10;2399:16;2281:38;;;;-1:-1:-1;;;2281:38:0;;;;;;;:::i;:::-;17952:36:::1;17981:6;17952:24;17969:6;17952:12;;:16;;:24;;;;:::i;:36::-;17937:12;:51:::0;-1:-1:-1;17866:130:0:o;27378:108::-;2385:4;2410:5;-1:-1:-1;;;;;2410:5:0;2297:10;2399:16;2281:38;;;;-1:-1:-1;;;2281:38:0;;;;;;;:::i;:::-;27455:23:::1;27474:3;27455:18;:23::i;17646:212::-:0;2385:4;2410:5;-1:-1:-1;;;;;2410:5:0;2297:10;2399:16;2281:38;;;;-1:-1:-1;;;2281:38:0;;;;;;;:::i;:::-;17756:15:::1;:24:::0;;;;17782:16:::1;:26:::0;17810:25:::1;:40:::0;17646:212::o;16584:307::-;2385:4;2410:5;-1:-1:-1;;;;;2410:5:0;2297:10;2399:16;2281:38;;;;-1:-1:-1;;;2281:38:0;;;;;;;:::i;:::-;16713:10:::1;:24:::0;;;16755:54:::1;16801:6;16755:33;16773:14:::0;16755:13:::1;9551:12:::0;;;9481:84;16755:54:::1;16739:13;:70:::0;16828:55:::1;16875:6;16828:34;16846:15:::0;16828:13:::1;9551:12:::0;;;9481:84;16828:55:::1;16811:14;:72:::0;-1:-1:-1;;;16584:307:0:o;22342:327::-;2385:4;2410:5;-1:-1:-1;;;;;2410:5:0;2297:10;2399:16;2281:38;;;;-1:-1:-1;;;2281:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22430:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;22430:33:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;22474:32:::1;;22485:19;22494:6;22502:1;22485:8;:19::i;:::-;-1:-1:-1::0;;;;;22519:21:0;::::1;22543:1;22519:21:::0;;;:13:::1;:21;::::0;;;;;:25;22516:146:::1;;-1:-1:-1::0;;;;;22585:21:0;::::1;;::::0;;;:13:::1;:21;::::0;;;;;22546:62:::1;::::0;22555:6;;22563:44:::1;::::0;:17:::1;22555:6:::0;22563:9:::1;:17::i;:44::-;22546:8;:62::i;22516:146::-;22625:35;22634:6;22642:17;22652:6;22642:9;:17::i;2423:111::-:0;2385:4;2410:5;-1:-1:-1;;;;;2410:5:0;2297:10;2399:16;2281:38;;;;-1:-1:-1;;;2281:38:0;;;;;;;:::i;:::-;2489:5:::1;:11:::0;;-1:-1:-1;;;;;;2489:11:0::1;-1:-1:-1::0;;;;;2489:11:0;::::1;::::0;;::::1;::::0;;;2507:25:::1;::::0;4918:51:1;;;2507:25:0::1;::::0;4906:2:1;4891:18;2507:25:0::1;;;;;;;2423:111:::0;:::o;14786:157::-;2385:4;2410:5;-1:-1:-1;;;;;2410:5:0;2297:10;2399:16;2281:38;;;;-1:-1:-1;;;2281:38:0;;;;;;;:::i;:::-;14861:15:::1;:44:::0;;-1:-1:-1;;;;;14861:44:0;;::::1;-1:-1:-1::0;;;;;;14861:44:0;;::::1;::::0;::::1;::::0;;:15:::1;14907:21:::0;;;:11:::1;:21;::::0;;;;:28;;-1:-1:-1;;14907:28:0::1;14861:44:::0;14907:28:::1;::::0;;14786:157::o;14464:314::-;6024:7;:14;;-1:-1:-1;;6024:14:0;;;;;;14555:21:::1;14565:10;14555:9;:21::i;:::-;14587:15;::::0;:62:::1;::::0;-1:-1:-1;;;14587:62:0;;14626:10:::1;14587:62;::::0;::::1;10391:34:1::0;;;10441:18;;;10434:43;14532:44:0;;-1:-1:-1;;;;;;14587:15:0::1;::::0;:38:::1;::::0;10326:18:1;;14587:62:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;14660:18;14681:39;14707:12;14681:21;14691:10;14681:9;:21::i;:39::-;14660:60;;14731:39;14747:10;14759;14731:15;:39::i;:::-;-1:-1:-1::0;;6043:7:0;:15;;-1:-1:-1;;6043:15:0;;;14464:314::o;11317:335::-;-1:-1:-1;;;;;11410:19:0;;11402:68;;;;-1:-1:-1;;;11402:68:0;;10690:2:1;11402:68:0;;;10672:21:1;10729:2;10709:18;;;10702:30;10768:34;10748:18;;;10741:62;-1:-1:-1;;;10819:18:1;;;10812:34;10863:19;;11402:68:0;10488:400:1;11402:68:0;-1:-1:-1;;;;;11489:21:0;;11481:68;;;;-1:-1:-1;;;11481:68:0;;11095:2:1;11481:68:0;;;11077:21:1;11134:2;11114:18;;;11107:30;11173:34;11153:18;;;11146:62;-1:-1:-1;;;11224:18:1;;;11217:32;11266:19;;11481:68:0;10893:398:1;11481:68:0;-1:-1:-1;;;;;11560:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;11612:32;;160:25:1;;;11612:32:0;;133:18:1;11612:32:0;;;;;;;11317:335;;;:::o;308:82::-;366:7;383:5;387:1;383;:5;:::i;11660:786::-;11749:37;11760:6;11768:9;11779:6;11749:10;:37::i;:::-;11797:38;11817:6;11825:9;11797:19;:38::i;:::-;11846:41;11861:6;11869:9;11880:6;11846:14;:41::i;:::-;11899:39;11912:6;11920:9;11931:6;11899:12;:39::i;:::-;11949:38;11969:6;11977:9;11949:19;:38::i;:::-;11998:43;12015:6;12023:9;12034:6;11998:16;:43::i;:::-;12052:35;12061:6;12069:9;12080:6;12052:8;:35::i;:::-;-1:-1:-1;;;;;12118:17:0;;;;;;:9;:17;;;;;;:29;;12140:6;12118:21;:29::i;:::-;-1:-1:-1;;;;;12098:17:0;;;;;;:9;:17;;;;;:49;;;;12183:32;12108:6;12205:9;12183:13;:32::i;:::-;:78;;12255:6;12183:78;;;12218:34;12226:6;12234:9;12245:6;12218:7;:34::i;:::-;-1:-1:-1;;;;;12295:20:0;;;;;;:9;:20;;;;;;12158:103;;-1:-1:-1;12295:40:0;;12158:103;12295:24;:40::i;:::-;-1:-1:-1;;;;;12272:20:0;;;;;;;:9;:20;;;;;;;:63;;;;12351:43;;;;;;;;;;12379:14;160:25:1;;148:2;133:18;;14:177;12351:43:0;;;;;;;;12405:33;12420:6;12428:9;12405:14;:33::i;:::-;11738:708;11660:786;;;:::o;662:162::-;748:7;794:12;786:6;;;;778:29;;;;-1:-1:-1;;;778:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;816:5:0;;;662:162::o;29910:170::-;29980:7;30007:65;30040:31;;30007:28;30017:17;;30007:5;:9;;:28;;;;:::i;28475:946::-;28544:14;28561:30;28579:11;28561:17;:30::i;:::-;-1:-1:-1;;;;;28605:19:0;;;;;;:6;:19;;;;;:26;28544:47;;-1:-1:-1;28605:31:0;;:68;;;28649:24;28667:4;28649:9;:24::i;:::-;28640:6;:33;28605:68;28602:83;;;28676:7;28475:946;:::o;28602:83::-;28698:19;;28695:719;;28752:16;;:28;;28773:6;28752:20;:28::i;:::-;28733:16;:47;;;28857:15;;28846:27;;;;:10;:27;;;;;;:48;;;:60;;28899:6;28846:52;:60::i;:::-;28806:15;;28795:27;;;;:10;:27;;;;;:48;;:111;28921:50;28944:4;28951:11;28964:6;28921:14;:50::i;:::-;-1:-1:-1;29000:15:0;;28986:30;;;;:13;:30;;;;;;;;-1:-1:-1;;;;;28986:43:0;;;;;;;;;:52;;;29053:17;:30;;;;;29086:15;29053:48;;29152:6;:19;;;;;:33;;;:45;;29032:6;29152:37;:45::i;:::-;-1:-1:-1;;;;;29116:19:0;;;;;;:6;:19;;;;;:33;;;:81;;;;29271:26;29248:50;;:22;:50::i;:::-;-1:-1:-1;;;;;29212:19:0;;;;;;:6;:19;;;;;;;;:33;;:86;;;;29313:13;:26;;;;;:39;29367:45;29219:11;29389:22;29219:11;29389:9;:22::i;396:82::-;454:7;471:5;475:1;471;:5;:::i;484:82::-;542:7;559:5;563:1;559;:5;:::i;13619:369::-;-1:-1:-1;;;;;13736:20:0;;;;;;:12;:20;;;;;;;;;13714:9;:17;;;;;;;:43;;:21;:43::i;:::-;13704:6;:53;;13696:113;;;;-1:-1:-1;;;13696:113:0;;12158:2:1;13696:113:0;;;12140:21:1;12197:2;12177:18;;;12170:30;12236:34;12216:18;;;12209:62;-1:-1:-1;;;12287:18:1;;;12280:45;12342:19;;13696:113:0;11956:411:1;13696:113:0;13820:15;;:46;;-1:-1:-1;;;13820:46:0;;-1:-1:-1;;;;;9015:32:1;;;13820:46:0;;;8997:51:1;9064:18;;;9057:34;;;13820:15:0;;;;:30;;8970:18:1;;13820:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;13900:20:0;;;;;;:12;:20;;;;;;:32;;-1:-1:-1;13925:6:0;13900:24;:32::i;:::-;-1:-1:-1;;;;;13877:20:0;;;;;;:12;:20;;;;;:55;13957:11;;:23;;13973:6;13957:15;:23::i;:::-;13943:11;:37;-1:-1:-1;;13619:369:0:o;23843:815::-;23900:23;:30;;-1:-1:-1;;23900:30:0;23926:4;23900:30;;;;;;23987:15;;;23956;;;23900:23;23945:27;;;:10;:27;;;;;:39;;:57;;;;24017:28;;24078:15;:31;;:19;:31::i;:::-;24060:15;:49;;;24164:18;;24124:27;;;;:10;:27;;;;;;:37;;:58;;;;24244:16;;;24208:15;;24197:27;;;;;:63;24286:15;;24275:27;;;;;24320:15;24275:42;;;;:60;24372:13;;24353:16;;:32;24350:71;;;24406:13;;24387:16;:32;24350:71;24435:32;24450:16;;24435:14;:32::i;:::-;24509:1;24482:16;:29;;;24526:18;:31;24591:15;24572:16;:34;24640:9;;24621:29;;27494:973;27579:16;;27633:12;:19;;27663:46;;27700:7;;27494:973;:::o;27663:46::-;27719:15;27758;27776:9;27758:27;;27796:18;27838:397;27854:3;27844:7;:13;:46;;;;;27874:16;27861:10;:29;27844:46;27838:397;;;27926:16;27910:12;;:32;27907:82;;27985:1;27962:12;:25;27907:82;28007:46;28026:12;28039;;28026:26;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;28026:26:0;28007:18;:46::i;:::-;28078:35;28090:22;28102:9;28090:7;;:11;:22::i;:::-;28078:7;;:11;:35::i;:::-;28068:45;;28138:9;28162:12;:14;;28128:19;;-1:-1:-1;28162:12:0;:14;;;:::i;:::-;;;;;;28191:12;;;;;:::i;:::-;28218:13;:15;;28191:12;;-1:-1:-1;28218:15:0;;-1:-1:-1;28218:13:0;:15;;;:::i;:::-;;;;;;27838:397;;;28265:16;28248:13;;:33;;:69;;;;;28304:13;28285:16;;:32;28248:69;28245:215;;;28333:23;:31;;-1:-1:-1;;28333:31:0;;;28359:5;28379:25;:38;;;28432:13;:26;28245:215;27544:923;;;;;27494:973;:::o;25687:482::-;25774:1;25765:6;:10;:45;;;;-1:-1:-1;;;;;;25779:19:0;;;;;;:6;:19;;;;;:26;:31;25765:45;25762:177;;;30187:12;:19;;-1:-1:-1;;;;;30153:31:0;;;;;;:18;:31;;;;;:53;;;30217:30;;;;;;;;;;;;;-1:-1:-1;;;;;;30217:30:0;;;;;;25762:177;;;25859:11;;:45;;;;-1:-1:-1;;;;;;25874:19:0;;25903:1;25874:19;;;:6;:19;;;;;:26;:30;;25859:45;25856:83;;;25906:30;25924:11;25906:17;:30::i;:::-;-1:-1:-1;;;;;25979:19:0;;;;;;:6;:19;;;;;:26;25963:11;;:55;;26011:6;;25963:43;;:15;:43::i;:::-;:47;;:55::i;:::-;25949:11;:69;-1:-1:-1;;;;;26029:19:0;;;;;;:6;:19;;;;;:35;;;26111:50;26058:6;26111:22;:50::i;:::-;-1:-1:-1;;;;;26075:19:0;;;;;;;:6;:19;;;;;:33;;:86;;;;-1:-1:-1;25687:482:0:o;10374:355::-;-1:-1:-1;;;;;10478:20:0;;10470:70;;;;-1:-1:-1;;;10470:70:0;;12846:2:1;10470:70:0;;;12828:21:1;12885:2;12865:18;;;12858:30;12924:34;12904:18;;;12897:62;-1:-1:-1;;;12975:18:1;;;12968:35;13020:19;;10470:70:0;12644:401:1;10470:70:0;-1:-1:-1;;;;;10559:23:0;;10551:71;;;;-1:-1:-1;;;10551:71:0;;13252:2:1;10551:71:0;;;13234:21:1;13291:2;13271:18;;;13264:30;13330:34;13310:18;;;13303:62;-1:-1:-1;;;13381:18:1;;;13374:33;13424:19;;10551:71:0;13050:399:1;10551:71:0;10651:17;10661:6;10651:9;:17::i;:::-;10641:6;:27;;10633:88;;;;-1:-1:-1;;;10633:88:0;;13656:2:1;10633:88:0;;;13638:21:1;13695:2;13675:18;;;13668:30;13734:34;13714:18;;;13707:62;-1:-1:-1;;;13785:18:1;;;13778:47;13842:19;;10633:88:0;13454:413:1;14951:191:0;-1:-1:-1;;;;;15044:19:0;;;;;;:11;:19;;;;;;;;15043:20;:47;;;;-1:-1:-1;;;;;;15068:22:0;;;;;;:11;:22;;;;;;;;15067:23;15043:47;15040:95;;;15100:14;;-1:-1:-1;;;15100:14:0;;;;15092:41;;;;-1:-1:-1;;;15092:41:0;;14074:2:1;15092:41:0;;;14056:21:1;14113:2;14093:18;;;14086:30;-1:-1:-1;;;14132:18:1;;;14125:44;14186:18;;15092:41:0;13872:338:1;15154:331:0;-1:-1:-1;;;;;15258:19:0;;;;;;:11;:19;;;;;;;;15257:20;:47;;;;-1:-1:-1;;;;;;15282:22:0;;;;;;:11;:22;;;;;;;;15281:23;15257:47;:77;;;;-1:-1:-1;15329:4:0;;-1:-1:-1;;;;;15308:26:0;;;15329:4;;15308:26;;15257:77;:107;;;;-1:-1:-1;;;;;;15338:26:0;;7521:42;15338:26;;15257:107;15254:224;;;15426:15;;-1:-1:-1;;;;;15389:20:0;;;;;;:9;:20;;;;;;:32;;15414:6;15389:24;:32::i;:::-;15388:53;;15380:96;;;;-1:-1:-1;;;15380:96:0;;14417:2:1;15380:96:0;;;14399:21:1;14456:2;14436:18;;;14429:30;14495:32;14475:18;;;14468:60;14545:18;;15380:96:0;14215:354:1;16063:377:0;-1:-1:-1;;;;;16164:20:0;;16195:1;16164:20;;;:12;:20;;;;;;:33;16161:160;;16245:17;16255:6;16245:9;:17::i;:::-;-1:-1:-1;;;;;16219:20:0;;;;;;:12;:20;;;;;;16208:32;;:6;;:10;:32::i;:::-;16207:55;;16199:120;;;;-1:-1:-1;;;16199:120:0;;14776:2:1;16199:120:0;;;14758:21:1;14815:2;14795:18;;;14788:30;14854:34;14834:18;;;14827:62;-1:-1:-1;;;14905:18:1;;;14898:50;14965:19;;16199:120:0;14574:416:1;16199:120:0;16349:12;;16339:6;:22;;:45;;;-1:-1:-1;;;;;;16365:19:0;;;;;;:11;:19;;;;;;;;16339:45;:71;;;-1:-1:-1;;;;;;16388:22:0;;;;;;:11;:22;;;;;;;;16339:71;16331:101;;;;-1:-1:-1;;;16331:101:0;;15197:2:1;16331:101:0;;;15179:21:1;15236:2;15216:18;;;15209:30;-1:-1:-1;;;15255:18:1;;;15248:47;15312:18;;16331:101:0;14995:341:1;15493:175:0;15593:4;;-1:-1:-1;;;;;15580:17:0;;;15593:4;;15580:17;:41;;;;-1:-1:-1;;;;;;15602:19:0;;;;;;:11;:19;;;;;;;;15601:20;15580:41;:54;;;;-1:-1:-1;15626:8:0;;;;15625:9;15580:54;15577:84;;;15657:1;15636:9;;:23;;;;;;;:::i;:::-;;;;-1:-1:-1;;15493:175:0;;:::o;15676:379::-;15786:4;;-1:-1:-1;;;;;15776:14:0;;;15786:4;;15776:14;:40;;;;;15804:12;;15794:6;:22;;15776:40;15773:114;;;-1:-1:-1;;;;;15845:24:0;;;;;;:13;:24;;;;;;:40;;15882:1;15845:28;:40::i;:::-;-1:-1:-1;;;;;15818:24:0;;;;;;:13;:24;;;;;:67;15773:114;15910:4;;-1:-1:-1;;;;;15900:14:0;;;15910:4;;15900:14;:39;;;;;15927:12;;15918:6;:21;15900:39;15897:83;;;-1:-1:-1;;;;;15941:24:0;;;;;;:13;:24;;;;;15976:1;15941:37;;15897:83;16006:4;;-1:-1:-1;;;;;16006:4:0;;;15993:17;;;;15990:58;;-1:-1:-1;;;;;;;16012:21:0;16044:1;16012:21;;;:13;:21;;;;;:34;15676:379::o;20584:197::-;20676:41;20691:6;20699:9;20710:6;20676:14;:41::i;:::-;20673:101;;;20719:29;20734:13;;20719:14;:29::i;:::-;20770:1;20750:9;:22;20584:197;;;:::o;20789:160::-;-1:-1:-1;;;;;20895:19:0;;20870:4;20895:19;;;:11;:19;;;;;;;;20894:20;:47;;;;-1:-1:-1;;;;;;;20919:22:0;;;;;:11;:22;;;;;;;;20918:23;;20789:160;-1:-1:-1;20789:160:0:o;21233:1101::-;21319:7;21375:1;21342:30;21354:6;21362:9;21342:11;:30::i;:::-;:34;:47;;;;-1:-1:-1;21381:8:0;;;;21380:9;21342:47;21339:973;;;21401:17;21421:59;21449:30;21461:6;21469:9;21449:11;:30::i;:::-;21432:11;;21421:23;;:6;;:10;:23::i;:59::-;21536:4;21518:24;;;;:9;:24;;;;;;21401:79;;-1:-1:-1;21518:39:0;;21401:79;21518:28;:39::i;:::-;21509:4;21491:24;;;;:9;:24;;;;;;;:66;;;;21573:42;;-1:-1:-1;;;;;21573:42:0;;;;;;;21605:9;160:25:1;;148:2;133:18;;14:177;21573:42:0;;;;;;;;21653:1;21629:13;;:26;:77;;;;;21676:30;21688:6;21696:9;21676:11;:30::i;:::-;21659:13;;:47;;21629:77;21626:287;;;21741:66;21763:42;21791:13;;21763:23;21774:11;;21763:6;:10;;:23;;;;:::i;:42::-;21741:16;;;:20;:66::i;:::-;21722:16;:85;21895:13;;21878:11;;21843:68;;21867:42;;:23;;:6;;:10;:23::i;:42::-;21843:18;;;:22;:68::i;:::-;21822:18;:89;21626:287;21944:1;21926:7;;:20;:65;;;;;21961:30;21973:6;21981:9;21961:11;:30::i;:::-;21950:7;;:41;;21926:65;21923:163;;;22007:77;22025:4;7521:42;22047:36;22075:7;;22047:23;22058:11;;22047:6;:10;;:23;;;;:::i;:36::-;22007:9;:77::i;:::-;22118:1;22099:8;;:21;:67;;;;;22136:30;22148:6;22156:9;22136:11;:30::i;:::-;22124:8;;:42;;22099:67;22096:176;;;22215:14;;22260:8;;22243:11;;22182:88;;22200:4;;-1:-1:-1;;;;;22215:14:0;;;;22232:37;;22260:8;22232:23;;:6;;:10;:23::i;22182:88::-;22289:21;:6;22300:9;22289:10;:21::i;:::-;22282:28;;;;;21339:973;-1:-1:-1;22320:6:0;21233:1101;-1:-1:-1;;21233:1101:0:o;220:82::-;278:7;295:5;299:1;295;:5;:::i;22677:1158::-;22759:19;;;;22756:64;;;22816:1;22780:25;:38;22756:64;-1:-1:-1;;;;;22833:17:0;;22868:1;22833:17;;;:6;:17;;;;;:24;:37;22830:73;;22872:29;22891:9;22872:18;:29::i;:::-;-1:-1:-1;;;;;22916:14:0;;22948:1;22916:14;;;:6;:14;;;;;:21;:34;;;;:55;;-1:-1:-1;22967:4:0;;-1:-1:-1;;;;;22954:17:0;;;22967:4;;22954:17;;22916:55;22913:88;;;22973:26;22992:6;22973:18;:26::i;:::-;23027:4;;-1:-1:-1;;;;;23014:17:0;;;23027:4;;23014:17;:55;;;;-1:-1:-1;;;;;;23035:14:0;;23067:1;23035:14;;;:6;:14;;;;;:21;:34;;23014:55;23011:126;;;23089:46;23109:25;23127:6;23109:17;:25::i;:::-;23089:15;;;:19;:46::i;:::-;23071:15;:64;23011:126;-1:-1:-1;;;;;23151:24:0;;;;;;:16;:24;;;;;;;;23147:67;;23177:35;23186:6;23194:17;23204:6;23194:9;:17::i;23177:35::-;-1:-1:-1;;;;;23228:27:0;;;;;;:16;:27;;;;;;;;23224:76;;23257:41;23266:9;23277:20;23287:9;23277;:20::i;23257:41::-;-1:-1:-1;;;;;23314:27:0;;;;;;:16;:27;;;;;;;;23313:28;:46;;;;-1:-1:-1;23355:4:0;;-1:-1:-1;;;;;23345:14:0;;;23355:4;;23345:14;23313:46;:88;;;;-1:-1:-1;;;;;;23363:24:0;;;;;;:13;:24;;;;;;23399:1;-1:-1:-1;23363:38:0;23313:88;23310:180;;;-1:-1:-1;;;;;23462:24:0;;;;;;:13;:24;;;;;;23417:71;;23426:9;;23437:50;;:20;23426:9;23437;:20::i;23417:71::-;23549:15;23503:42;23524:20;;23503:16;;:20;;:42;;;;:::i;:::-;:61;;:79;;;;-1:-1:-1;23568:14:0;;-1:-1:-1;;;23568:14:0;;;;23503:79;:126;;;;;23627:1;23600:16;;:29;23503:126;:139;;;;-1:-1:-1;23634:8:0;;;;23633:9;23503:139;:161;;;;-1:-1:-1;23646:18:0;;-1:-1:-1;;;23646:18:0;;;;23503:161;23500:205;;;23680:23;:21;:23::i;:::-;23715:29;23734:9;;23715:18;:29::i;:::-;-1:-1:-1;;;;;23758:17:0;;23793:1;23758:17;;;:6;:17;;;;;:24;:37;23755:73;;23797:29;23816:9;23797:18;:29::i;11054:255::-;-1:-1:-1;;;;;11184:17:0;;11147:4;11184:17;;;:9;:17;;;;;;:29;;11206:6;11184:21;:29::i;:::-;-1:-1:-1;;;;;11164:17:0;;;;;;;:9;:17;;;;;;:49;;;;11247:20;;;;;;;:32;;11272:6;11247:24;:32::i;:::-;-1:-1:-1;;;;;11224:20:0;;;;;;:9;:20;;;;;:55;-1:-1:-1;11297:4:0;11054:255;;;;;:::o;26177:270::-;26254:14;;:26;;26273:6;26254:18;:26::i;:::-;26237:14;:43;26381:11;;26333:31;;26311:83;;26333:60;;:43;;26369:6;26333:35;:43::i;:60::-;26311:17;;;:21;:83::i;:::-;26291:17;:103;26405:25;:34;26177:270::o;30263:288::-;30379:12;30392:19;;:21;;30412:1;;30392:21;:::i;:::-;30379:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;30344:31:0;;;;;:18;:31;;;;;;;;30331:12;:45;;30379:35;;;;;30331:12;:45;;;;;;:::i;:::-;;;;;;;;;;;;;:83;;-1:-1:-1;;;;;;30331:83:0;-1:-1:-1;;;;;30331:83:0;;;;;;30483:31;;;;;:18;:31;;;;;;;;30444:12;30457:19;;30483:31;;:18;30331:45;30457:21;;-1:-1:-1;;30457:21:0;:::i;:::-;30444:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;30444:35:0;30425:55;;;;;;;;;;;;:89;30525:12;:18;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;30525:18:0;;;;;-1:-1:-1;;;;;;30525:18:0;;;;;;-1:-1:-1;30263:288:0:o;20165:411::-;20263:4;20280:13;20306:14;;20296:6;:24;;20280:40;;20331:19;20379:13;;20353:22;:20;:22::i;:::-;20411:8;;20353:39;-1:-1:-1;20353:39:0;;-1:-1:-1;20411:8:0;;20410:9;:24;;;;-1:-1:-1;20423:11:0;;-1:-1:-1;;;20423:11:0;;;;20410:24;:42;;;;-1:-1:-1;20438:14:0;;-1:-1:-1;;;20438:14:0;;;;20410:42;:54;;;;;20456:8;20410:54;:78;;;;-1:-1:-1;;;;;;20469:19:0;;;;;;:11;:19;;;;;;;;20468:20;20410:78;:113;;;;-1:-1:-1;20519:4:0;;-1:-1:-1;;;;;20506:17:0;;;20519:4;;20506:17;20410:113;:140;;;;;20540:10;;20527:9;;:23;;20410:140;:158;;;;;20554:14;20410:158;20403:165;20165:411;-1:-1:-1;;;;;;20165:411:0:o;18004:1343::-;6088:8;:15;;-1:-1:-1;;6088:15:0;6099:4;6088:15;;;;;;18098:8:::1;::::0;6088;;18098:22:::1;::::0;18118:1:::1;::::0;18098:15:::1;::::0;:8;:12:::1;:15::i;:22::-;18134:8;::::0;18075:45;;-1:-1:-1;18131:135:0::1;;18173:91;18262:1;18173:84;18255:1;18173:77;18235:14;;18173:57;18222:7;;18173:44;18204:12;;18173;;:16;;:44;;;;:::i;:91::-;18158:106;;18131:135;18276:32;18311:42;18340:12;18311:24;18322:12;;18311:6;:10;;:24;;;;:::i;:42::-;18276:77:::0;-1:-1:-1;18364:14:0::1;18381:36;:6:::0;18276:77;18381:10:::1;:36::i;:::-;18364:53:::0;-1:-1:-1;18453:21:0::1;18485:24;18364:53:::0;18485:16:::1;:24::i;:::-;18520:20;18543:41;:21;18569:14:::0;18543:25:::1;:41::i;:::-;18520:64;;18595:19;18616:48;18633:30;18650:12;;18633;:16;;:30;;;;:::i;:::-;18616:12:::0;;:16:::1;:48::i;:::-;18595:69;;18675:29;18707;18723:12;;18707:11;:15;;:29;;;;:::i;:::-;18675:61:::0;-1:-1:-1;18750:34:0;;18747:137:::1;;18862:18;::::0;18786:95:::1;::::0;18813:24;;18839:21;;-1:-1:-1;;;;;18862:18:0::1;18786:12;:95::i;:::-;18941:7;::::0;18894:21:::1;::::0;18918:31:::1;::::0;:18:::1;:11:::0;18934:1:::1;18918:15;:18::i;:31::-;18894:55:::0;-1:-1:-1;18963:17:0;;18960:73:::1;;18990:16;::::0;18982:49:::1;::::0;-1:-1:-1;;;;;18990:16:0;;::::1;::::0;18982:49;::::1;;;::::0;19017:13;;18990:16:::1;18982:49:::0;18990:16;18982:49;19017:13;18990:16;18982:49;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;18960:73;19092:12;::::0;19043:23:::1;::::0;19069:36:::1;::::0;:18:::1;:11:::0;19085:1:::1;19069:15;:18::i;:36::-;19043:62:::0;-1:-1:-1;19119:19:0;;19116:79:::1;;19148:18;::::0;19140:53:::1;::::0;-1:-1:-1;;;;;19148:18:0;;::::1;::::0;19140:53;::::1;;;::::0;19177:15;;19148:18:::1;19140:53:::0;19148:18;19140:53;19177:15;19148:18;19140:53;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;19116:79;19228:21;19263:25:::0;;19260:80:::1;;19298:16;::::0;19290:48:::1;::::0;-1:-1:-1;;;;;19298:16:0;;::::1;::::0;19290:48;::::1;;;::::0;19325:12;;19298:16:::1;19290:48:::0;19298:16;19290:48;19325:12;19298:16;19290:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;19260:80;-1:-1:-1::0;;6108:8:0;:16;;-1:-1:-1;;6108:16:0;;;-1:-1:-1;;;;;;;;;18004:1343:0:o;20957:268::-;21072:4;;21036:7;;-1:-1:-1;;;;;21059:17:0;;;21072:4;;21059:17;:41;;;;;21098:1;21080:7;;:20;21059:41;21056:62;;;-1:-1:-1;21109:7:0;;21102:14;;21056:62;21141:4;;-1:-1:-1;;;;;21131:14:0;;;21141:4;;21131:14;:39;;;;;21168:1;21149:8;;:21;21131:39;21128:61;;;-1:-1:-1;21179:8:0;;21172:15;;21128:61;-1:-1:-1;21206:11:0;;20957:268;;;;:::o;19723:434::-;19813:16;;;19827:1;19813:16;;;;;;;;19789:21;;19813:16;;;;;;;;;;-1:-1:-1;19813:16:0;19789:40;;19858:4;19840;19845:1;19840:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;19840:23:0;;;:7;;;;;;;;;;:23;;;;19884:6;;:13;;;-1:-1:-1;;;19884:13:0;;;;:6;;;;;:11;;:13;;;;;19840:7;;19884:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19874:4;19879:1;19874:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;19874:23:0;;;:7;;;;;;;;;:23;19940:6;;19908:53;;19925:4;;19940:6;19949:11;19908:8;:53::i;:::-;19972:6;;:177;;-1:-1:-1;;;19972:177:0;;-1:-1:-1;;;;;19972:6:0;;;;:57;;:177;;20044:11;;19972:6;;20086:4;;20113;;20133:15;;19972:177;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19355:360;19486:6;;19454:53;;19471:4;;-1:-1:-1;;;;;19486:6:0;19495:11;19454:8;:53::i;:::-;19518:6;;:189;;-1:-1:-1;;;19518:189:0;;19581:4;19518:189;;;17317:34:1;17367:18;;;17360:34;;;19518:6:0;17410:18:1;;;17403:34;;;17453:18;;;17446:34;-1:-1:-1;;;;;17517:15:1;;;17496:19;;;17489:44;19691:15:0;17549:19:1;;;17542:35;19518:6:0;;;;:22;;19548:9;;17251:19:1;;19518:189:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;196:548:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;749:131::-;-1:-1:-1;;;;;824:31:1;;814:42;;804:70;;870:1;867;860:12;885:315;953:6;961;1014:2;1002:9;993:7;989:23;985:32;982:52;;;1030:1;1027;1020:12;982:52;1069:9;1056:23;1088:31;1113:5;1088:31;:::i;:::-;1138:5;1190:2;1175:18;;;;1162:32;;-1:-1:-1;;;885:315:1:o;1397:180::-;1456:6;1509:2;1497:9;1488:7;1484:23;1480:32;1477:52;;;1525:1;1522;1515:12;1477:52;-1:-1:-1;1548:23:1;;1397:180;-1:-1:-1;1397:180:1:o;1582:799::-;1722:6;1730;1738;1746;1754;1762;1770;1778;1786;1794;1847:3;1835:9;1826:7;1822:23;1818:33;1815:53;;;1864:1;1861;1854:12;1815:53;-1:-1:-1;;1887:23:1;;;1957:2;1942:18;;1929:32;;-1:-1:-1;2008:2:1;1993:18;;1980:32;;2059:2;2044:18;;2031:32;;-1:-1:-1;2110:3:1;2095:19;;2082:33;;-1:-1:-1;2162:3:1;2147:19;;2134:33;;-1:-1:-1;2214:3:1;2199:19;;2186:33;;-1:-1:-1;2266:3:1;2251:19;;2238:33;;-1:-1:-1;2318:3:1;2303:19;;2290:33;;-1:-1:-1;2370:3:1;2355:19;2342:33;;-1:-1:-1;1582:799:1;-1:-1:-1;1582:799:1:o;3107:456::-;3184:6;3192;3200;3253:2;3241:9;3232:7;3228:23;3224:32;3221:52;;;3269:1;3266;3259:12;3221:52;3308:9;3295:23;3327:31;3352:5;3327:31;:::i;:::-;3377:5;-1:-1:-1;3434:2:1;3419:18;;3406:32;3447:33;3406:32;3447:33;:::i;:::-;3107:456;;3499:7;;-1:-1:-1;;;3553:2:1;3538:18;;;;3525:32;;3107:456::o;3568:247::-;3627:6;3680:2;3668:9;3659:7;3655:23;3651:32;3648:52;;;3696:1;3693;3686:12;3648:52;3735:9;3722:23;3754:31;3779:5;3754:31;:::i;4009:118::-;4095:5;4088:13;4081:21;4074:5;4071:32;4061:60;;4117:1;4114;4107:12;4132:382;4197:6;4205;4258:2;4246:9;4237:7;4233:23;4229:32;4226:52;;;4274:1;4271;4264:12;4226:52;4313:9;4300:23;4332:31;4357:5;4332:31;:::i;:::-;4382:5;-1:-1:-1;4439:2:1;4424:18;;4411:32;4452:30;4411:32;4452:30;:::i;:::-;4501:7;4491:17;;;4132:382;;;;;:::o;4519:248::-;4587:6;4595;4648:2;4636:9;4627:7;4623:23;4619:32;4616:52;;;4664:1;4661;4654:12;4616:52;-1:-1:-1;;4687:23:1;;;4757:2;4742:18;;;4729:32;;-1:-1:-1;4519:248:1:o;4980:241::-;5036:6;5089:2;5077:9;5068:7;5064:23;5060:32;5057:52;;;5105:1;5102;5095:12;5057:52;5144:9;5131:23;5163:28;5185:5;5163:28;:::i;5226:813::-;5321:6;5329;5337;5345;5353;5406:3;5394:9;5385:7;5381:23;5377:33;5374:53;;;5423:1;5420;5413:12;5374:53;5462:9;5449:23;5481:31;5506:5;5481:31;:::i;:::-;5531:5;-1:-1:-1;5588:2:1;5573:18;;5560:32;5601:33;5560:32;5601:33;:::i;:::-;5653:7;-1:-1:-1;5712:2:1;5697:18;;5684:32;5725:33;5684:32;5725:33;:::i;:::-;5777:7;-1:-1:-1;5836:2:1;5821:18;;5808:32;5849:33;5808:32;5849:33;:::i;:::-;5901:7;-1:-1:-1;5960:3:1;5945:19;;5932:33;5974;5932;5974;:::i;:::-;6026:7;6016:17;;;5226:813;;;;;;;;:::o;6368:388::-;6436:6;6444;6497:2;6485:9;6476:7;6472:23;6468:32;6465:52;;;6513:1;6510;6503:12;6465:52;6552:9;6539:23;6571:31;6596:5;6571:31;:::i;:::-;6621:5;-1:-1:-1;6678:2:1;6663:18;;6650:32;6691:33;6650:32;6691:33;:::i;6761:316::-;6838:6;6846;6854;6907:2;6895:9;6886:7;6882:23;6878:32;6875:52;;;6923:1;6920;6913:12;6875:52;-1:-1:-1;;6946:23:1;;;7016:2;7001:18;;6988:32;;-1:-1:-1;7067:2:1;7052:18;;;7039:32;;6761:316;-1:-1:-1;6761:316:1:o;7082:315::-;7150:6;7158;7211:2;7199:9;7190:7;7186:23;7182:32;7179:52;;;7227:1;7224;7217:12;7179:52;7263:9;7250:23;7240:33;;7323:2;7312:9;7308:18;7295:32;7336:31;7361:5;7336:31;:::i;7662:329::-;7864:2;7846:21;;;7903:1;7883:18;;;7876:29;-1:-1:-1;;;7936:2:1;7921:18;;7914:36;7982:2;7967:18;;7662:329::o;9524:184::-;9594:6;9647:2;9635:9;9626:7;9622:23;9618:32;9615:52;;;9663:1;9660;9653:12;9615:52;-1:-1:-1;9686:16:1;;9524:184;-1:-1:-1;9524:184:1:o;9713:245::-;9780:6;9833:2;9821:9;9812:7;9808:23;9804:32;9801:52;;;9849:1;9846;9839:12;9801:52;9881:9;9875:16;9900:28;9922:5;9900:28;:::i;11296:127::-;11357:10;11352:3;11348:20;11345:1;11338:31;11388:4;11385:1;11378:15;11412:4;11409:1;11402:15;11428:128;11495:9;;;11516:11;;;11513:37;;;11530:18;;:::i;11561:168::-;11634:9;;;11665;;11682:15;;;11676:22;;11662:37;11652:71;;11703:18;;:::i;11734:217::-;11774:1;11800;11790:132;;11844:10;11839:3;11835:20;11832:1;11825:31;11879:4;11876:1;11869:15;11907:4;11904:1;11897:15;11790:132;-1:-1:-1;11936:9:1;;11734:217::o;12372:127::-;12433:10;12428:3;12424:20;12421:1;12414:31;12464:4;12461:1;12454:15;12488:4;12485:1;12478:15;12504:135;12543:3;12564:17;;;12561:43;;12584:18;;:::i;:::-;-1:-1:-1;12631:1:1;12620:13;;12504:135::o;15341:125::-;15406:9;;;15427:10;;;15424:36;;;15440:18;;:::i;15471:127::-;15532:10;15527:3;15523:20;15520:1;15513:31;15563:4;15560:1;15553:15;15587:4;15584:1;15577:15;15735:251;15805:6;15858:2;15846:9;15837:7;15833:23;15829:32;15826:52;;;15874:1;15871;15864:12;15826:52;15906:9;15900:16;15925:31;15950:5;15925:31;:::i;15991:980::-;16253:4;16301:3;16290:9;16286:19;16332:6;16321:9;16314:25;16358:2;16396:6;16391:2;16380:9;16376:18;16369:34;16439:3;16434:2;16423:9;16419:18;16412:31;16463:6;16498;16492:13;16529:6;16521;16514:22;16567:3;16556:9;16552:19;16545:26;;16606:2;16598:6;16594:15;16580:29;;16627:1;16637:195;16651:6;16648:1;16645:13;16637:195;;;16716:13;;-1:-1:-1;;;;;16712:39:1;16700:52;;16807:15;;;;16772:12;;;;16748:1;16666:9;16637:195;;;-1:-1:-1;;;;;;;16888:32:1;;;;16883:2;16868:18;;16861:60;-1:-1:-1;;;16952:3:1;16937:19;16930:35;16849:3;15991:980;-1:-1:-1;;;15991:980:1:o;17588:306::-;17676:6;17684;17692;17745:2;17733:9;17724:7;17720:23;17716:32;17713:52;;;17761:1;17758;17751:12;17713:52;17790:9;17784:16;17774:26;;17840:2;17829:9;17825:18;17819:25;17809:35;;17884:2;17873:9;17869:18;17863:25;17853:35;;17588:306;;;;;:::o

Swarm Source

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