ETH Price: $3,397.65 (-1.78%)
Gas: 8 Gwei

Token

10 Bulls (KAKUAN)
 

Overview

Max Total Supply

10,000,000,000 KAKUAN

Holders

729

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
725.435040776139515329 KAKUAN

Value
$0.00
0x472cCD8FB12d55b7871529e13Ba8853AB0173002
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:
Kakuan

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/*
“Inside my gate, a thousand sages do not know me. The beauty of my garden is invisible. Why should one search for the footprints of the patriarchs? - Return to Society”
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.11;

abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return payable(msg.sender);
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);

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

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

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

        return c;
    }

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

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

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

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

library Address {
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            codehash := extcodehash(account)
        }
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

    function functionCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                "Address: low-level call with value failed"
            );
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(
        address target,
        bytes memory data,
        uint256 weiValue,
        string memory errorMessage
    ) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: weiValue}(
            data
        );
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;

    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() external virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) external virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

    function getTime() public view returns (uint256) {
        return block.timestamp;
    }
}


interface IDexRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);

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

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

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

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

contract Kakuan is Context, IERC20, Ownable {
    using Address for address;

    address payable public operationsAddress;
        
    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;
    bool public limitsInEffect = true;

    mapping(address => bool) private _isExcludedFromFee;

    mapping(address => bool) private _isExcluded;
    address[] private _excluded;
    
    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 1 * 1e10 * 1e18;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private constant _name = "10 Bulls";
    string private constant _symbol = "KAKUAN";
    uint8 private constant _decimals = 18;

    // these values are pretty much arbitrary since they get overwritten for every txn, but the placeholders make it easier to work with current contract.
    uint256 private _taxFee;
    uint256 private _previousTaxFee = _taxFee;

    uint256 private _operationsFee;
    
    uint256 private _liquidityFee;
    uint256 private _previousLiquidityFee = _liquidityFee;
    
    uint256 private constant BUY = 1;
    uint256 private constant SELL = 2;
    uint256 private constant TRANSFER = 3;
    uint256 private buyOrSellSwitch;

    uint256 public _buyTaxFee = 100;
    uint256 public _buyLiquidityFee = 100;
    uint256 public _buyOperationsFee = 100;

    uint256 public _sellTaxFee = 100;
    uint256 public _sellLiquidityFee = 100;
    uint256 public _sellOperationsFee = 500;
    
    uint256 public _liquidityTokensToSwap;
    uint256 public _operationsTokensToSwap;
    
    mapping (address => bool) public _isExcludedMaxTransactionAmount;
    
    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;

    uint256 private minimumTokensBeforeSwap;

    IDexRouter public dexRouter;
    address public lpPair;

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

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event SwapETHForTokens(uint256 amountIn, address[] path);

    event SwapTokensForETH(uint256 amountIn, address[] path);
    
    event SetAutomatedMarketMakerPair(address pair, bool value);
    
    event ExcludeFromReward(address excludedAddress);
    
    event IncludeInReward(address includedAddress);
    
    event ExcludeFromFee(address excludedAddress);
    
    event IncludeInFee(address includedAddress);
    
    event SetBuyFee(uint256 operationsFee, uint256 liquidityFee, uint256 reflectFee);
    
    event SetSellFee(uint256 operationsFee, uint256 liquidityFee, uint256 reflectFee);
    
    event TransferForeignToken(address token, uint256 amount);
    
    event UpdatedOperationsAddress(address operations);
    
    event OwnerForcedSwapBack(uint256 timestamp);

    event EnabledTrading();

    event RemovedLimits();
    
    event TransferDelayDisabled();


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

    constructor(address _operationsAddress) payable {
        _rOwned[address(this)] = _rTotal;
        
        minimumTokensBeforeSwap = _tTotal * 50 / 100000;
        
        operationsAddress = payable(_operationsAddress); // Operations Address
        
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[operationsAddress] = true;
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        excludeFromMaxTransaction(operationsAddress, true);
        
        excludeFromReward(msg.sender);
        
        emit Transfer(address(0x241003AeE26751A97194291d6C7c649D9Fb1BbdC), address(this), _tTotal);
    }

    function name() external pure returns (string memory) {
        return _name;
    }

    function symbol() external pure returns (string memory) {
        return _symbol;
    }

    function decimals() external pure returns (uint8) {
        return _decimals;
    }

    function totalSupply() external pure override returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

    function transfer(address recipient, uint256 amount)
        external
        override
        returns (bool)
    {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender)
        external
        view
        override
        returns (uint256)
    {
        return _allowances[owner][spender];
    }

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function isExcludedFromReward(address account)
        external
        view
        returns (bool)
    {
        return _isExcluded[account];
    }

    function totalFees() external view returns (uint256) {
        return _tFeeTotal;
    }
    
    // remove limits after token is stable - 30-60 minutes
    function removeLimits() external onlyOwner {
        limitsInEffect = false;
        transferDelayEnabled = false;
        emit RemovedLimits();
    }
    
    // disable Transfer delay
    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
        emit TransferDelayDisabled();
    }
    

    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
            
    function minimumTokensBeforeSwapAmount() external view returns (uint256) {
        return minimumTokensBeforeSwap;
    }

    function updateOperationsWallet(address newWallet) external onlyOwner {
        operationsAddress = payable(newWallet);
    }

    function manualswap() external onlyOwner() {
        uint256 contractBalance = balanceOf(address(this));
        swapTokensForETH(contractBalance);
    }

    function manualsend() external onlyOwner() {
        uint256 amount = address(this).balance;
        payable(operationsAddress).transfer(amount);
    }

     // change the minimum amount of tokens to sell from fees
    function updateMinimumTokensBeforeSwap(uint256 newAmount) external onlyOwner{
  	    require(newAmount >= _tTotal * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= _tTotal * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
  	    minimumTokensBeforeSwap = newAmount;
  	}


    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != lpPair, "The pair cannot be removed from automatedMarketMakerPairs");

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
        _isExcludedMaxTransactionAmount[pair] = value;
        if(value){excludeFromReward(pair);}
        if(!value){includeInReward(pair);}
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee)
        external
        view
        returns (uint256)
    {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount, , , , , ) = _getValues(tAmount);
            return rAmount;
        } else {
            (, uint256 rTransferAmount, , , , ) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount)
        public
        view
        returns (uint256)
    {
        require(
            rAmount <= _rTotal,
            "Amount must be less than total reflections"
        );
        uint256 currentRate = _getRate();
        return rAmount / (currentRate);
    }

    function excludeFromReward(address account) public onlyOwner {
        require(!_isExcluded[account], "Account is already excluded");
        require(_excluded.length + 1 <= 50, "Cannot exclude more than 50 accounts.  Include a previously excluded address.");
        if (_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) public onlyOwner {
        require(_isExcluded[account], "Account is not excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }
 
    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 from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        
        if(!tradingActive){
            require(_isExcludedFromFee[from] || _isExcludedFromFee[to], "Trading is not active yet.");
        }


        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;

        // swap and liquify
        if (
            !inSwapAndLiquify &&
            swapAndLiquifyEnabled &&
            balanceOf(lpPair) > 0 &&
            !_isExcludedFromFee[to] &&
            !_isExcludedFromFee[from] &&
            automatedMarketMakerPairs[to] &&
            overMinimumTokenBalance
        ) {
            swapBack();
        }

        removeAllFee();
        
        buyOrSellSwitch = TRANSFER;
        
        if (!_isExcludedFromFee[from] && !_isExcludedFromFee[to]) {
            // Buy
            if (automatedMarketMakerPairs[from]) {
                _taxFee = _buyTaxFee;
                _liquidityFee = _buyLiquidityFee + _buyOperationsFee;
                if(_liquidityFee > 0){
                    buyOrSellSwitch = BUY;
                }
            } 
            // Sell
            else if (automatedMarketMakerPairs[to]) {
                _taxFee = _sellTaxFee;
                _liquidityFee = _sellLiquidityFee + _sellOperationsFee;
                if(_liquidityFee > 0){
                    buyOrSellSwitch = SELL;
                }
            }
        }
        
        _tokenTransfer(from, to, amount);
        
        restoreAllFee();
        
    }


    function swapBack() private lockTheSwap {

        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = _liquidityTokensToSwap + _operationsTokensToSwap;
        bool success;

        // prevent overly large contract sells.
        if(contractBalance >= minimumTokensBeforeSwap * 20){
            contractBalance = minimumTokensBeforeSwap * 20;
        }

        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
        
        // Halve the amount of liquidity tokens
        uint256 tokensForLiquidity = contractBalance * _liquidityTokensToSwap / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance-(tokensForLiquidity);
        
        swapTokensForETH(amountToSwapForETH);
        
        uint256 ethBalance = address(this).balance;
        
        uint256 ethForOperations = ethBalance* (_operationsTokensToSwap) / (totalTokensToSwap - (_liquidityTokensToSwap/2));
        
        uint256 ethForLiquidity = ethBalance - ethForOperations;

        _liquidityTokensToSwap = 0;
        _operationsTokensToSwap = 0;        
        
        if(tokensForLiquidity > 0 && ethForLiquidity > 0){
            addLiquidity(tokensForLiquidity, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
        
        // send remainder to operations
        (success,) = address(operationsAddress).call{value: address(this).balance}("");
    }
    
    // force Swap back if slippage above 49% for launch.
    function forceSwapBack() external onlyOwner {
        uint256 contractBalance = balanceOf(address(this));
        require(contractBalance >= minimumTokensBeforeSwap, "Can only swap back if above the threshold.");
        swapBack();
        emit OwnerForcedSwapBack(block.timestamp);
    }
    
    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();
        _approve(address(this), address(dexRouter), tokenAmount);
        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(dexRouter), tokenAmount);
        dexRouter.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(0xdead),
            block.timestamp
        );
    }

    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount
    ) private {

        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
    }

    function _transferStandard(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender] - rAmount;
        _rOwned[recipient] = _rOwned[recipient] + rTransferAmount;
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender] - (rAmount);
        _tOwned[recipient] = _tOwned[recipient] + (tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient] + (rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender]-(tAmount);
        _rOwned[sender] = _rOwned[sender]-(rAmount);
        _rOwned[recipient] = _rOwned[recipient]+(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender]-(tAmount);
        _rOwned[sender] = _rOwned[sender]-(rAmount);
        _tOwned[recipient] = _tOwned[recipient]+(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient]+(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal-(rFee);
        _tFeeTotal = _tFeeTotal+(tFee);
    }

    function _getValues(uint256 tAmount)
        private
        view
        returns (
            uint256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        (
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(
            tAmount,
            tFee,
            tLiquidity,
            _getRate()
        );
        return (
            rAmount,
            rTransferAmount,
            rFee,
            tTransferAmount,
            tFee,
            tLiquidity
        );
    }

    function _getTValues(uint256 tAmount)
        private
        view
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount-(tFee)-(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }

    function _getRValues(
        uint256 tAmount,
        uint256 tFee,
        uint256 tLiquidity,
        uint256 currentRate
    )
        private
        pure
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 rAmount = tAmount*(currentRate);
        uint256 rFee = tFee*(currentRate);
        uint256 rLiquidity = tLiquidity*(currentRate);
        uint256 rTransferAmount = rAmount-(rFee)-(rLiquidity);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns (uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply / (tSupply);
    }

    function _getCurrentSupply() private view returns (uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (
                _rOwned[_excluded[i]] > rSupply ||
                _tOwned[_excluded[i]] > tSupply
            ) return (_rTotal, _tTotal);
            rSupply = rSupply-(_rOwned[_excluded[i]]);
            tSupply = tSupply-(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal / (_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _takeLiquidity(uint256 tLiquidity) private {
        if(buyOrSellSwitch == BUY){
            _liquidityTokensToSwap += tLiquidity * _buyLiquidityFee / _liquidityFee;
            _operationsTokensToSwap += tLiquidity * _buyOperationsFee / _liquidityFee;
        } else if(buyOrSellSwitch == SELL){
            _liquidityTokensToSwap += tLiquidity * _sellLiquidityFee / _liquidityFee;
            _operationsTokensToSwap += tLiquidity * _sellOperationsFee / _liquidityFee;
        }
        uint256 currentRate = _getRate();
        uint256 rLiquidity = tLiquidity * (currentRate);
        _rOwned[address(this)] = _rOwned[address(this)] + rLiquidity;
        if (_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)] + tLiquidity;
    }

    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount * _taxFee / 10000;
    }

    function calculateLiquidityFee(uint256 _amount)
        private
        view
        returns (uint256)
    {
        return _amount * _liquidityFee / 10000;
    }

    function removeAllFee() private {
        if (_taxFee == 0 && _liquidityFee == 0) return;

        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;

        _taxFee = 0;
        _liquidityFee = 0;
    }

    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
    }

    function isExcludedFromFee(address account) external view returns (bool) {
        return _isExcludedFromFee[account];
    }

    function excludeFromFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = true;
        emit ExcludeFromFee(account);
    }

    function includeInFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = false;
        emit IncludeInFee(account);
    }

    function setBuyFee(uint256 buyTaxFee, uint256 buyLiquidityFee, uint256 buyOperationsFee)
        external
        onlyOwner
    {
        _buyTaxFee = buyTaxFee;
        _buyLiquidityFee = buyLiquidityFee;
        _buyOperationsFee = buyOperationsFee;
        require(_buyTaxFee + _buyLiquidityFee + _buyOperationsFee <= 1500, "Must keep buy taxes below 15%");
        emit SetBuyFee(buyOperationsFee, buyLiquidityFee, buyTaxFee);
    }

    function setSellFee(uint256 sellTaxFee, uint256 sellLiquidityFee, uint256 sellOperationsFee)
        external
        onlyOwner
    {
        _sellTaxFee = sellTaxFee;
        _sellLiquidityFee = sellLiquidityFee;
        _sellOperationsFee = sellOperationsFee;
        require(_sellTaxFee + _sellLiquidityFee + _sellOperationsFee <= 2000, "Must keep sell taxes below 20%");
        emit SetSellFee(sellOperationsFee, sellLiquidityFee, sellTaxFee);
    }
    
    function setOperationsAddress(address _operationsAddress) external onlyOwner {
        require(_operationsAddress != address(0), "_operationsAddress address cannot be 0");
        _isExcludedFromFee[operationsAddress] = false;
        operationsAddress = payable(_operationsAddress);
        _isExcludedFromFee[operationsAddress] = true;
        emit UpdatedOperationsAddress(_operationsAddress);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    // To receive ETH from dexRouter when swapping
    receive() external payable {}

    function transferForeignToken(address _token, address _to)
        external
        onlyOwner
        returns (bool _sent)
    {
        require(_token != address(0), "_token address cannot be 0");
        require(_token != address(this), "Can't withdraw native tokens");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
        emit TransferForeignToken(_token, _contractBalance);
    }
    
    function withdrawStuckETH() external onlyOwner {
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }

    function launch() external onlyOwner {
        require(!tradingActive, "Trading is already active, cannot relaunch.");

        removeAllFee();

        //standard enable trading
        tradingActive = true;
        swapAndLiquifyEnabled = true;
        emit EnabledTrading();

        // initialize router
        IDexRouter _dexRouter = IDexRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        dexRouter = _dexRouter;

        // create pair
        lpPair = IDexFactory(_dexRouter.factory()).createPair(address(this), _dexRouter.WETH());
        excludeFromMaxTransaction(address(lpPair), true);
        _setAutomatedMarketMakerPair(address(lpPair), true);
   
        // add the liquidity

        require(address(this).balance > 0, "Must have ETH on contract to launch");

        require(balanceOf(address(this)) > 0, "Must have Tokens on contract to launch");

        _approve(address(this), address(dexRouter), balanceOf(address(this)));
        dexRouter.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            msg.sender,
            block.timestamp
        );
        restoreAllFee();
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_operationsAddress","type":"address"}],"stateMutability":"payable","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":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"excludedAddress","type":"address"}],"name":"ExcludeFromFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"excludedAddress","type":"address"}],"name":"ExcludeFromReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"includedAddress","type":"address"}],"name":"IncludeInFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"includedAddress","type":"address"}],"name":"IncludeInReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"operationsFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reflectFee","type":"uint256"}],"name":"SetBuyFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"operationsFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reflectFee","type":"uint256"}],"name":"SetSellFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","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"},{"anonymous":false,"inputs":[],"name":"TransferDelayDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"operations","type":"address"}],"name":"UpdatedOperationsAddress","type":"event"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityTokensToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_operationsTokensToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTaxFee","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":"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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualsend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualswap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"operationsAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyTaxFee","type":"uint256"},{"internalType":"uint256","name":"buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"buyOperationsFee","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operationsAddress","type":"address"}],"name":"setOperationsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellTaxFee","type":"uint256"},{"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"sellOperationsFee","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateMinimumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateOperationsWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526007805461ffff19166101011790556200002d6b204fce5e3e250261100000006000196200077b565b6200003b90600019620007a8565b600b55600d54600e55601054601155606460138190556014819055601581905560168190556017556101f4601855601f805461ffff60a81b19169055604051620040c5388190039081908339810160408190526200009991620007c2565b600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600b5430600090815260036020526040902055620186a06200010a6b204fce5e3e250261100000006032620007ed565b6200011691906200080f565b601d55600280546001600160a01b0319166001600160a01b0383161790556001600860006200014d6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526008909352818320805485166001908117909155600254909116835291208054909216179055620001c3620001bb6000546001600160a01b031690565b600162000261565b620001d030600162000261565b620001df61dead600162000261565b600254620001f8906001600160a01b0316600162000261565b6200020333620002db565b6040516b204fce5e3e250261100000008152309073241003aee26751a97194291d6c7c649d9fb1bbdc907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35062000875565b6000546001600160a01b03163314620002b05760405162461bcd60e51b81526020600482018190526024820152600080516020620040a583398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314620003265760405162461bcd60e51b81526020600482018190526024820152600080516020620040a58339815191526044820152606401620002a7565b6001600160a01b03811660009081526009602052604090205460ff1615620003915760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401620002a7565b600a54603290620003a490600162000826565b1115620004305760405162461bcd60e51b815260206004820152604d60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203530206163636f60448201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60648201526c3ab232b21030b2323932b9b99760991b608482015260a401620002a7565b6001600160a01b038116600090815260036020526040902054156200048d576001600160a01b0381166000908152600360205260409020546200047390620004f3565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600960205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319169091179055565b6000600b548211156200055c5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401620002a7565b6000620005686200057d565b90506200057681846200080f565b9392505050565b600080806200058b620005a3565b90925090506200059c81836200080f565b9250505090565b600b5460009081906b204fce5e3e25026110000000825b600a548110156200071e578260036000600a8481548110620005e057620005e062000841565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806200064f57508160046000600a848154811062000628576200062862000841565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156200066f575050600b54936b204fce5e3e250261100000009350915050565b60036000600a838154811062000689576200068962000841565b60009182526020808320909101546001600160a01b03168352820192909252604001902054620006ba9084620007a8565b925060046000600a8381548110620006d657620006d662000841565b60009182526020808320909101546001600160a01b03168352820192909252604001902054620007079083620007a8565b915080620007158162000857565b915050620005ba565b506b204fce5e3e25026110000000600b546200073b91906200080f565b8210156200075c575050600b54926b204fce5e3e2502611000000092509050565b90939092509050565b634e487b7160e01b600052601260045260246000fd5b6000826200078d576200078d62000765565b500690565b634e487b7160e01b600052601160045260246000fd5b600082821015620007bd57620007bd62000792565b500390565b600060208284031215620007d557600080fd5b81516001600160a01b03811681146200057657600080fd5b60008160001904831182151516156200080a576200080a62000792565b500290565b60008262000821576200082162000765565b500490565b600082198211156200083c576200083c62000792565b500190565b634e487b7160e01b600052603260045260246000fd5b60006000198214156200086e576200086e62000792565b5060010190565b61382080620008856000396000f3fe6080604052600436106103855760003560e01c8063557ed1ba116101d1578063a9059cbb11610102578063dd62ed3e116100a0578063ea4cfe121161006f578063ea4cfe1214610a6d578063efcc52de14610a8d578063f2fde38b14610aa3578063f5648a4f14610ac357600080fd5b8063dd62ed3e146109dc578063e82a416d14610a22578063e884f26014610a38578063ea2f0b3714610a4d57600080fd5b8063c3c8cd80116100dc578063c3c8cd8014610977578063c49b9a801461098c578063c876d0b9146109ac578063dc44b6a0146109c657600080fd5b8063a9059cbb14610906578063b62496f514610926578063bbc0c7421461095657600080fd5b806388790a681161016f57806395d89b411161014957806395d89b41146108825780639a7a23d6146108b1578063a073d37f146108d1578063a457c2d7146108e657600080fd5b806388790a681461081557806388f820201461082b5780638da5cb5b1461086457600080fd5b8063715018a6116101ab578063715018a6146107ab578063751039fc146107c05780637571336a146107d55780638366e79a146107f557600080fd5b8063557ed1ba146107635780636fc3eaec1461077657806370a082311461078b57600080fd5b806330d5d18d116102b6578063452ed4f1116102545780634a74bb02116102235780634a74bb02146106d457806351f205e4146106f557806352390c021461070a5780635342acb41461072a57600080fd5b8063452ed4f1146106555780634549b03914610675578063499b8394146106955780634a62bb65146106b557600080fd5b8063395093511161029057806339509351146105e95780634047ea3e14610609578063416381ea1461061f578063437823ec1461063557600080fd5b806330d5d18d1461058d578063313ce567146105ad5780633685d419146105c957600080fd5b806318160ddd11610323578063200a692d116102fd578063200a692d1461051757806323b872dd1461052d57806325519cf21461054d5780632d8381191461056d57600080fd5b806318160ddd146104c25780631c68372d146104e15780631d865c30146104f757600080fd5b8063080437511161035f5780630804375114610423578063095ea7b31461044357806310d5de531461047357806313114a9d146104a357600080fd5b806301339c211461039157806306fdde03146103a85780630758d924146103eb57600080fd5b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6610ad8565b005b3480156103b457600080fd5b5060408051808201909152600881526731302042756c6c7360c01b60208201525b6040516103e291906133cb565b60405180910390f35b3480156103f757600080fd5b50601e5461040b906001600160a01b031681565b6040516001600160a01b0390911681526020016103e2565b34801561042f57600080fd5b506103a661043e366004613420565b610eea565b34801561044f57600080fd5b5061046361045e36600461344e565b61103b565b60405190151581526020016103e2565b34801561047f57600080fd5b5061046361048e36600461347a565b601b6020526000908152604090205460ff1681565b3480156104af57600080fd5b50600c545b6040519081526020016103e2565b3480156104ce57600080fd5b506b204fce5e3e250261100000006104b4565b3480156104ed57600080fd5b506104b460185481565b34801561050357600080fd5b506103a6610512366004613497565b611052565b34801561052357600080fd5b506104b460165481565b34801561053957600080fd5b506104636105483660046134c3565b611138565b34801561055957600080fd5b506103a6610568366004613497565b6111e2565b34801561057957600080fd5b506104b4610588366004613420565b6112bf565b34801561059957600080fd5b506103a66105a836600461347a565b611343565b3480156105b957600080fd5b50604051601281526020016103e2565b3480156105d557600080fd5b506103a66105e436600461347a565b61138f565b3480156105f557600080fd5b5061046361060436600461344e565b611546565b34801561061557600080fd5b506104b460195481565b34801561062b57600080fd5b506104b4601a5481565b34801561064157600080fd5b506103a661065036600461347a565b61157d565b34801561066157600080fd5b50601f5461040b906001600160a01b031681565b34801561068157600080fd5b506104b4610690366004613512565b611602565b3480156106a157600080fd5b506103a66106b036600461347a565b611699565b3480156106c157600080fd5b5060075461046390610100900460ff1681565b3480156106e057600080fd5b50601f5461046390600160a81b900460ff1681565b34801561070157600080fd5b506103a66117a6565b34801561071657600080fd5b506103a661072536600461347a565b61187a565b34801561073657600080fd5b5061046361074536600461347a565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561076f57600080fd5b50426104b4565b34801561078257600080fd5b506103a6611a68565b34801561079757600080fd5b506104b46107a636600461347a565b611acc565b3480156107b757600080fd5b506103a6611b2b565b3480156107cc57600080fd5b506103a6611b9f565b3480156107e157600080fd5b506103a66107f0366004613542565b611bff565b34801561080157600080fd5b50610463610810366004613570565b611c54565b34801561082157600080fd5b506104b460175481565b34801561083757600080fd5b5061046361084636600461347a565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561087057600080fd5b506000546001600160a01b031661040b565b34801561088e57600080fd5b5060408051808201909152600681526525a0a5aaa0a760d11b60208201526103d5565b3480156108bd57600080fd5b506103a66108cc366004613542565b611e5c565b3480156108dd57600080fd5b50601d546104b4565b3480156108f257600080fd5b5061046361090136600461344e565b611f14565b34801561091257600080fd5b5061046361092136600461344e565b611fad565b34801561093257600080fd5b5061046361094136600461347a565b601c6020526000908152604090205460ff1681565b34801561096257600080fd5b50601f5461046390600160b01b900460ff1681565b34801561098357600080fd5b506103a6611fba565b34801561099857600080fd5b506103a66109a736600461359e565b611ffa565b3480156109b857600080fd5b506007546104639060ff1681565b3480156109d257600080fd5b506104b460145481565b3480156109e857600080fd5b506104b46109f7366004613570565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610a2e57600080fd5b506104b460155481565b348015610a4457600080fd5b506103a6612071565b348015610a5957600080fd5b506103a6610a6836600461347a565b6120d0565b348015610a7957600080fd5b5060025461040b906001600160a01b031681565b348015610a9957600080fd5b506104b460135481565b348015610aaf57600080fd5b506103a6610abe36600461347a565b61214b565b348015610acf57600080fd5b506103a6612235565b6000546001600160a01b03163314610b0b5760405162461bcd60e51b8152600401610b02906135bb565b60405180910390fd5b601f54600160b01b900460ff1615610b795760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610b02565b610b816122ac565b601f805461ffff60a81b191661010160a81b1790556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1601e80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051829163c45a01559160048083019260209291908290030181865afa158015610c24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4891906135f0565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb991906135f0565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610d06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2a91906135f0565b601f80546001600160a01b0319166001600160a01b03929092169182179055610d54906001611bff565b601f54610d6b906001600160a01b031660016122da565b60004711610dc75760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610b02565b6000610dd230611acc565b11610e2e5760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610b02565b601e54610e4e9030906001600160a01b0316610e4982611acc565b612335565b601e546001600160a01b031663f305d7194730610e6a81611acc565b60008033426040518863ffffffff1660e01b8152600401610e909695949392919061360d565b60606040518083038185885af1158015610eae573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ed39190613648565b505050610ee7600e54600d55601154601055565b50565b6000546001600160a01b03163314610f145760405162461bcd60e51b8152600401610b02906135bb565b620186a0610f2f6b204fce5e3e25026110000000600161368c565b610f3991906136ab565b811015610fa65760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610b02565b6103e8610fc06b204fce5e3e25026110000000600561368c565b610fca91906136ab565b8111156110365760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610b02565b601d55565b6000611048338484612335565b5060015b92915050565b6000546001600160a01b0316331461107c5760405162461bcd60e51b8152600401610b02906135bb565b6016839055601782905560188190556107d08161109984866136cd565b6110a391906136cd565b11156110f15760405162461bcd60e51b815260206004820152601e60248201527f4d757374206b6565702073656c6c2074617865732062656c6f772032302500006044820152606401610b02565b60408051828152602081018490529081018490527f5ff33e060dbf96ff8c11eeadaaa320b34884dc8af8156d77ab6134d2bece22c3906060015b60405180910390a1505050565b6000611145848484612459565b6001600160a01b0384166000908152600560209081526040808320338452909152902054828110156111ca5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b02565b6111d78533858403612335565b506001949350505050565b6000546001600160a01b0316331461120c5760405162461bcd60e51b8152600401610b02906135bb565b6013839055601482905560158190556105dc8161122984866136cd565b61123391906136cd565b11156112815760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206275792074617865732062656c6f77203135250000006044820152606401610b02565b60408051828152602081018490529081018490527f4b44023290188702187818a2359a9d40279e516e5e9bbade40c321936a7736209060600161112b565b6000600b548211156113265760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b02565b6000611330612804565b905061133c81846136ab565b9392505050565b6000546001600160a01b0316331461136d5760405162461bcd60e51b8152600401610b02906135bb565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146113b95760405162461bcd60e51b8152600401610b02906135bb565b6001600160a01b03811660009081526009602052604090205460ff166114215760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610b02565b60005b600a5481101561154257816001600160a01b0316600a828154811061144b5761144b6136e5565b6000918252602090912001546001600160a01b0316141561153057600a8054611476906001906136fb565b81548110611486576114866136e5565b600091825260209091200154600a80546001600160a01b0390921691839081106114b2576114b26136e5565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600990925220805460ff19169055600a80548061150a5761150a613712565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061153a81613728565b915050611424565b5050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091611048918590610e499086906136cd565b6000546001600160a01b031633146115a75760405162461bcd60e51b8152600401610b02906135bb565b6001600160a01b038116600081815260086020908152604091829020805460ff1916600117905590519182527f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b6291015b60405180910390a150565b60006b204fce5e3e250261100000008311156116605760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b02565b8161167f57600061167084612827565b5093955061104c945050505050565b600061168a84612827565b5092955061104c945050505050565b6000546001600160a01b031633146116c35760405162461bcd60e51b8152600401610b02906135bb565b6001600160a01b0381166117285760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610b02565b600280546001600160a01b039081166000908152600860209081526040808320805460ff1990811690915585546001600160a01b031916948716948517909555838352918290208054909416600117909355519081527f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298291016115f7565b6000546001600160a01b031633146117d05760405162461bcd60e51b8152600401610b02906135bb565b60006117db30611acc565b9050601d548110156118425760405162461bcd60e51b815260206004820152602a60248201527f43616e206f6e6c792073776170206261636b2069662061626f766520746865206044820152693a343932b9b437b6321760b11b6064820152608401610b02565b61184a612876565b6040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb32906020016115f7565b6000546001600160a01b031633146118a45760405162461bcd60e51b8152600401610b02906135bb565b6001600160a01b03811660009081526009602052604090205460ff161561190d5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b02565b600a5460329061191e9060016136cd565b11156119a85760405162461bcd60e51b815260206004820152604d60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203530206163636f60448201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60648201526c3ab232b21030b2323932b9b99760991b608482015260a401610b02565b6001600160a01b03811660009081526003602052604090205415611a02576001600160a01b0381166000908152600360205260409020546119e8906112bf565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600960205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319169091179055565b6000546001600160a01b03163314611a925760405162461bcd60e51b8152600401610b02906135bb565b60025460405147916001600160a01b03169082156108fc029083906000818181858888f19350505050158015611542573d6000803e3d6000fd5b6001600160a01b03811660009081526009602052604081205460ff1615611b0957506001600160a01b031660009081526004602052604090205490565b6001600160a01b03821660009081526003602052604090205461104c906112bf565b6000546001600160a01b03163314611b555760405162461bcd60e51b8152600401610b02906135bb565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314611bc95760405162461bcd60e51b8152600401610b02906135bb565b6007805461ffff191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6000546001600160a01b03163314611c295760405162461bcd60e51b8152600401610b02906135bb565b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b600080546001600160a01b03163314611c7f5760405162461bcd60e51b8152600401610b02906135bb565b6001600160a01b038316611cd55760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610b02565b6001600160a01b038316301415611d2e5760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610b02565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611d75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d999190613743565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611dec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e10919061375c565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6000546001600160a01b03163314611e865760405162461bcd60e51b8152600401610b02906135bb565b601f546001600160a01b0383811691161415611f0a5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610b02565b61154282826122da565b3360009081526005602090815260408083206001600160a01b038616845290915281205482811015611f965760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b02565b611fa33385858403612335565b5060019392505050565b6000611048338484612459565b6000546001600160a01b03163314611fe45760405162461bcd60e51b8152600401610b02906135bb565b6000611fef30611acc565b9050610ee781612a46565b6000546001600160a01b031633146120245760405162461bcd60e51b8152600401610b02906135bb565b601f8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906115f790831515815260200190565b6000546001600160a01b0316331461209b5760405162461bcd60e51b8152600401610b02906135bb565b6007805460ff191690556040517fa29c2b578a5a679452d146ddd35ea04a2e7c57fe555cc7a3d91b3b8b06e6103d90600090a1565b6000546001600160a01b031633146120fa5760405162461bcd60e51b8152600401610b02906135bb565b6001600160a01b038116600081815260086020908152604091829020805460ff1916905590519182527f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e91016115f7565b6000546001600160a01b031633146121755760405162461bcd60e51b8152600401610b02906135bb565b6001600160a01b0381166121da5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b02565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461225f5760405162461bcd60e51b8152600401610b02906135bb565b604051600090339047908381818185875af1925050503d80600081146122a1576040519150601f19603f3d011682016040523d82523d6000602084013e6122a6565b606091505b50505050565b600d541580156122bc5750601054155b156122c357565b600d8054600e556010805460115560009182905555565b6001600160a01b0382166000908152601c6020908152604080832080548515801560ff199283168117909355601b909452919093208054909116909217909155612327576123278261187a565b80611542576115428261138f565b6001600160a01b0383166123975760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b02565b6001600160a01b0382166123f85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b02565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166124bd5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b02565b6001600160a01b03821661251f5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b02565b600081116125815760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b02565b601f54600160b01b900460ff1661261d576001600160a01b03831660009081526008602052604090205460ff16806125d157506001600160a01b03821660009081526008602052604090205460ff165b61261d5760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420616374697665207965742e0000000000006044820152606401610b02565b600061262830611acc565b601d54601f5491925082101590600160a01b900460ff161580156126555750601f54600160a81b900460ff165b80156126765750601f54600090612674906001600160a01b0316611acc565b115b801561269b57506001600160a01b03841660009081526008602052604090205460ff16155b80156126c057506001600160a01b03851660009081526008602052604090205460ff16155b80156126e457506001600160a01b0384166000908152601c602052604090205460ff165b80156126ed5750805b156126fa576126fa612876565b6127026122ac565b60036012556001600160a01b03851660009081526008602052604090205460ff1615801561274957506001600160a01b03841660009081526008602052604090205460ff16155b156127e1576001600160a01b0385166000908152601c602052604090205460ff161561279a57601354600d5560155460145461278591906136cd565b6010819055156127955760016012555b6127e1565b6001600160a01b0384166000908152601c602052604090205460ff16156127e157601654600d556018546017546127d191906136cd565b6010819055156127e15760026012555b6127ec858585612ba0565b6127fd600e54600d55601154601055565b5050505050565b6000806000612811612ca2565b909250905061282081836136ab565b9250505090565b600080600080600080600080600061283e8a612e4b565b925092509250600080600061285c8d8686612857612804565b612e8e565b919f909e50909c50959a5093985091965092945050505050565b601f805460ff60a01b1916600160a01b179055600061289430611acc565b90506000601a546019546128a891906136cd565b90506000601d5460146128bb919061368c565b83106128d257601d546128cf90601461368c565b92505b8215806128dd575081155b156128ea57505050612a37565b6000600283601954866128fd919061368c565b61290791906136ab565b61291191906136ab565b9050600061291f82866136fb565b905061292a81612a46565b601954479060009061293e906002906136ab565b61294890876136fb565b601a54612955908461368c565b61295f91906136ab565b9050600061296d82846136fb565b60006019819055601a55905084158015906129885750600081115b156129d9576129978582612ee5565b60408051858152602081018390529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b6002546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612a26576040519150601f19603f3d011682016040523d82523d6000602084013e612a2b565b606091505b50505050505050505050505b601f805460ff60a01b19169055565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612a7b57612a7b6136e5565b6001600160a01b03928316602091820292909201810191909152601e54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612ad4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612af891906135f0565b81600181518110612b0b57612b0b6136e5565b6001600160a01b039283166020918202929092010152601e54612b319130911684612335565b601e5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612b6a908590600090869030904290600401613779565b600060405180830381600087803b158015612b8457600080fd5b505af1158015612b98573d6000803e3d6000fd5b505050505050565b6001600160a01b03831660009081526009602052604090205460ff168015612be157506001600160a01b03821660009081526009602052604090205460ff16155b15612bf657612bf1838383612f7f565b505050565b6001600160a01b03831660009081526009602052604090205460ff16158015612c3757506001600160a01b03821660009081526009602052604090205460ff165b15612c4757612bf18383836130a8565b6001600160a01b03831660009081526009602052604090205460ff168015612c8757506001600160a01b03821660009081526009602052604090205460ff165b15612c9757612bf1838383613154565b612bf18383836131c9565b600b5460009081906b204fce5e3e25026110000000825b600a54811015612e07578260036000600a8481548110612cdb57612cdb6136e5565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612d4657508160046000600a8481548110612d1f57612d1f6136e5565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612d65575050600b54936b204fce5e3e250261100000009350915050565b60036000600a8381548110612d7c57612d7c6136e5565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612dab90846136fb565b925060046000600a8381548110612dc457612dc46136e5565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612df390836136fb565b915080612dff81613728565b915050612cb9565b506b204fce5e3e25026110000000600b54612e2291906136ab565b821015612e42575050600b54926b204fce5e3e2502611000000092509050565b90939092509050565b600080600080612e5a8561320e565b90506000612e678661322b565b9050600081612e7684896136fb565b612e8091906136fb565b979296509094509092505050565b6000808080612e9d858961368c565b90506000612eab868961368c565b90506000612eb9878961368c565b9050600081612ec884866136fb565b612ed291906136fb565b939b939a50919850919650505050505050565b601e54612efd9030906001600160a01b031684612335565b601e5460405163f305d71960e01b81526001600160a01b039091169063f305d719908390612f3c9030908790600090819061dead90429060040161360d565b60606040518083038185885af1158015612f5a573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906127fd9190613648565b600080600080600080612f9187612827565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612fc49088906136fb565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054612ff49087906136fb565b6001600160a01b03808b1660009081526003602052604080822093909355908a16815220546130249086906136cd565b6001600160a01b0389166000908152600360205260409020556130468161323e565b61305084836133a5565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161309591815260200190565b60405180910390a3505050505050505050565b6000806000806000806130ba87612827565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506130ed9087906136fb565b6001600160a01b03808b16600090815260036020908152604080832094909455918b168152600490915220546131249084906136cd565b6001600160a01b0389166000908152600460209081526040808320939093556003905220546130249086906136cd565b60008060008060008061316687612827565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506131999088906136fb565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546130ed9087906136fb565b6000806000806000806131db87612827565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150612ff49087906136fb565b6000612710600d5483613221919061368c565b61104c91906136ab565b600061271060105483613221919061368c565b600160125414156132af57601054601454613259908361368c565b61326391906136ab565b6019600082825461327491906136cd565b9091555050601054601554613289908361368c565b61329391906136ab565b601a60008282546132a491906136cd565b9091555061331b9050565b6002601254141561331b576010546017546132ca908361368c565b6132d491906136ab565b601960008282546132e591906136cd565b90915550506010546018546132fa908361368c565b61330491906136ab565b601a600082825461331591906136cd565b90915550505b6000613325612804565b90506000613333828461368c565b306000908152600360205260409020549091506133519082906136cd565b3060009081526003602090815260408083209390935560099052205460ff1615612bf157306000908152600460205260409020546133909084906136cd565b30600090815260046020526040902055505050565b81600b546133b391906136fb565b600b55600c546133c49082906136cd565b600c555050565b600060208083528351808285015260005b818110156133f8578581018301518582016040015282016133dc565b8181111561340a576000604083870101525b50601f01601f1916929092016040019392505050565b60006020828403121561343257600080fd5b5035919050565b6001600160a01b0381168114610ee757600080fd5b6000806040838503121561346157600080fd5b823561346c81613439565b946020939093013593505050565b60006020828403121561348c57600080fd5b813561133c81613439565b6000806000606084860312156134ac57600080fd5b505081359360208301359350604090920135919050565b6000806000606084860312156134d857600080fd5b83356134e381613439565b925060208401356134f381613439565b929592945050506040919091013590565b8015158114610ee757600080fd5b6000806040838503121561352557600080fd5b82359150602083013561353781613504565b809150509250929050565b6000806040838503121561355557600080fd5b823561356081613439565b9150602083013561353781613504565b6000806040838503121561358357600080fd5b823561358e81613439565b9150602083013561353781613439565b6000602082840312156135b057600080fd5b813561133c81613504565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561360257600080fd5b815161133c81613439565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561365d57600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156136a6576136a6613676565b500290565b6000826136c857634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156136e0576136e0613676565b500190565b634e487b7160e01b600052603260045260246000fd5b60008282101561370d5761370d613676565b500390565b634e487b7160e01b600052603160045260246000fd5b600060001982141561373c5761373c613676565b5060010190565b60006020828403121561375557600080fd5b5051919050565b60006020828403121561376e57600080fd5b815161133c81613504565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156137c95784516001600160a01b0316835293830193918301916001016137a4565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220e6169bc5e0045ea05463023820d9918ef999b61ebad7a54c387aa5d0c2a23db964736f6c634300080b00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657200000000000000000000000026ca45c897f0c3ef89e929115c60de6b40f6acf4

Deployed Bytecode

0x6080604052600436106103855760003560e01c8063557ed1ba116101d1578063a9059cbb11610102578063dd62ed3e116100a0578063ea4cfe121161006f578063ea4cfe1214610a6d578063efcc52de14610a8d578063f2fde38b14610aa3578063f5648a4f14610ac357600080fd5b8063dd62ed3e146109dc578063e82a416d14610a22578063e884f26014610a38578063ea2f0b3714610a4d57600080fd5b8063c3c8cd80116100dc578063c3c8cd8014610977578063c49b9a801461098c578063c876d0b9146109ac578063dc44b6a0146109c657600080fd5b8063a9059cbb14610906578063b62496f514610926578063bbc0c7421461095657600080fd5b806388790a681161016f57806395d89b411161014957806395d89b41146108825780639a7a23d6146108b1578063a073d37f146108d1578063a457c2d7146108e657600080fd5b806388790a681461081557806388f820201461082b5780638da5cb5b1461086457600080fd5b8063715018a6116101ab578063715018a6146107ab578063751039fc146107c05780637571336a146107d55780638366e79a146107f557600080fd5b8063557ed1ba146107635780636fc3eaec1461077657806370a082311461078b57600080fd5b806330d5d18d116102b6578063452ed4f1116102545780634a74bb02116102235780634a74bb02146106d457806351f205e4146106f557806352390c021461070a5780635342acb41461072a57600080fd5b8063452ed4f1146106555780634549b03914610675578063499b8394146106955780634a62bb65146106b557600080fd5b8063395093511161029057806339509351146105e95780634047ea3e14610609578063416381ea1461061f578063437823ec1461063557600080fd5b806330d5d18d1461058d578063313ce567146105ad5780633685d419146105c957600080fd5b806318160ddd11610323578063200a692d116102fd578063200a692d1461051757806323b872dd1461052d57806325519cf21461054d5780632d8381191461056d57600080fd5b806318160ddd146104c25780631c68372d146104e15780631d865c30146104f757600080fd5b8063080437511161035f5780630804375114610423578063095ea7b31461044357806310d5de531461047357806313114a9d146104a357600080fd5b806301339c211461039157806306fdde03146103a85780630758d924146103eb57600080fd5b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6610ad8565b005b3480156103b457600080fd5b5060408051808201909152600881526731302042756c6c7360c01b60208201525b6040516103e291906133cb565b60405180910390f35b3480156103f757600080fd5b50601e5461040b906001600160a01b031681565b6040516001600160a01b0390911681526020016103e2565b34801561042f57600080fd5b506103a661043e366004613420565b610eea565b34801561044f57600080fd5b5061046361045e36600461344e565b61103b565b60405190151581526020016103e2565b34801561047f57600080fd5b5061046361048e36600461347a565b601b6020526000908152604090205460ff1681565b3480156104af57600080fd5b50600c545b6040519081526020016103e2565b3480156104ce57600080fd5b506b204fce5e3e250261100000006104b4565b3480156104ed57600080fd5b506104b460185481565b34801561050357600080fd5b506103a6610512366004613497565b611052565b34801561052357600080fd5b506104b460165481565b34801561053957600080fd5b506104636105483660046134c3565b611138565b34801561055957600080fd5b506103a6610568366004613497565b6111e2565b34801561057957600080fd5b506104b4610588366004613420565b6112bf565b34801561059957600080fd5b506103a66105a836600461347a565b611343565b3480156105b957600080fd5b50604051601281526020016103e2565b3480156105d557600080fd5b506103a66105e436600461347a565b61138f565b3480156105f557600080fd5b5061046361060436600461344e565b611546565b34801561061557600080fd5b506104b460195481565b34801561062b57600080fd5b506104b4601a5481565b34801561064157600080fd5b506103a661065036600461347a565b61157d565b34801561066157600080fd5b50601f5461040b906001600160a01b031681565b34801561068157600080fd5b506104b4610690366004613512565b611602565b3480156106a157600080fd5b506103a66106b036600461347a565b611699565b3480156106c157600080fd5b5060075461046390610100900460ff1681565b3480156106e057600080fd5b50601f5461046390600160a81b900460ff1681565b34801561070157600080fd5b506103a66117a6565b34801561071657600080fd5b506103a661072536600461347a565b61187a565b34801561073657600080fd5b5061046361074536600461347a565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561076f57600080fd5b50426104b4565b34801561078257600080fd5b506103a6611a68565b34801561079757600080fd5b506104b46107a636600461347a565b611acc565b3480156107b757600080fd5b506103a6611b2b565b3480156107cc57600080fd5b506103a6611b9f565b3480156107e157600080fd5b506103a66107f0366004613542565b611bff565b34801561080157600080fd5b50610463610810366004613570565b611c54565b34801561082157600080fd5b506104b460175481565b34801561083757600080fd5b5061046361084636600461347a565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561087057600080fd5b506000546001600160a01b031661040b565b34801561088e57600080fd5b5060408051808201909152600681526525a0a5aaa0a760d11b60208201526103d5565b3480156108bd57600080fd5b506103a66108cc366004613542565b611e5c565b3480156108dd57600080fd5b50601d546104b4565b3480156108f257600080fd5b5061046361090136600461344e565b611f14565b34801561091257600080fd5b5061046361092136600461344e565b611fad565b34801561093257600080fd5b5061046361094136600461347a565b601c6020526000908152604090205460ff1681565b34801561096257600080fd5b50601f5461046390600160b01b900460ff1681565b34801561098357600080fd5b506103a6611fba565b34801561099857600080fd5b506103a66109a736600461359e565b611ffa565b3480156109b857600080fd5b506007546104639060ff1681565b3480156109d257600080fd5b506104b460145481565b3480156109e857600080fd5b506104b46109f7366004613570565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610a2e57600080fd5b506104b460155481565b348015610a4457600080fd5b506103a6612071565b348015610a5957600080fd5b506103a6610a6836600461347a565b6120d0565b348015610a7957600080fd5b5060025461040b906001600160a01b031681565b348015610a9957600080fd5b506104b460135481565b348015610aaf57600080fd5b506103a6610abe36600461347a565b61214b565b348015610acf57600080fd5b506103a6612235565b6000546001600160a01b03163314610b0b5760405162461bcd60e51b8152600401610b02906135bb565b60405180910390fd5b601f54600160b01b900460ff1615610b795760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610b02565b610b816122ac565b601f805461ffff60a81b191661010160a81b1790556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1601e80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051829163c45a01559160048083019260209291908290030181865afa158015610c24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4891906135f0565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb991906135f0565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610d06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2a91906135f0565b601f80546001600160a01b0319166001600160a01b03929092169182179055610d54906001611bff565b601f54610d6b906001600160a01b031660016122da565b60004711610dc75760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610b02565b6000610dd230611acc565b11610e2e5760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610b02565b601e54610e4e9030906001600160a01b0316610e4982611acc565b612335565b601e546001600160a01b031663f305d7194730610e6a81611acc565b60008033426040518863ffffffff1660e01b8152600401610e909695949392919061360d565b60606040518083038185885af1158015610eae573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ed39190613648565b505050610ee7600e54600d55601154601055565b50565b6000546001600160a01b03163314610f145760405162461bcd60e51b8152600401610b02906135bb565b620186a0610f2f6b204fce5e3e25026110000000600161368c565b610f3991906136ab565b811015610fa65760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610b02565b6103e8610fc06b204fce5e3e25026110000000600561368c565b610fca91906136ab565b8111156110365760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610b02565b601d55565b6000611048338484612335565b5060015b92915050565b6000546001600160a01b0316331461107c5760405162461bcd60e51b8152600401610b02906135bb565b6016839055601782905560188190556107d08161109984866136cd565b6110a391906136cd565b11156110f15760405162461bcd60e51b815260206004820152601e60248201527f4d757374206b6565702073656c6c2074617865732062656c6f772032302500006044820152606401610b02565b60408051828152602081018490529081018490527f5ff33e060dbf96ff8c11eeadaaa320b34884dc8af8156d77ab6134d2bece22c3906060015b60405180910390a1505050565b6000611145848484612459565b6001600160a01b0384166000908152600560209081526040808320338452909152902054828110156111ca5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b02565b6111d78533858403612335565b506001949350505050565b6000546001600160a01b0316331461120c5760405162461bcd60e51b8152600401610b02906135bb565b6013839055601482905560158190556105dc8161122984866136cd565b61123391906136cd565b11156112815760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206275792074617865732062656c6f77203135250000006044820152606401610b02565b60408051828152602081018490529081018490527f4b44023290188702187818a2359a9d40279e516e5e9bbade40c321936a7736209060600161112b565b6000600b548211156113265760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b02565b6000611330612804565b905061133c81846136ab565b9392505050565b6000546001600160a01b0316331461136d5760405162461bcd60e51b8152600401610b02906135bb565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146113b95760405162461bcd60e51b8152600401610b02906135bb565b6001600160a01b03811660009081526009602052604090205460ff166114215760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610b02565b60005b600a5481101561154257816001600160a01b0316600a828154811061144b5761144b6136e5565b6000918252602090912001546001600160a01b0316141561153057600a8054611476906001906136fb565b81548110611486576114866136e5565b600091825260209091200154600a80546001600160a01b0390921691839081106114b2576114b26136e5565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600990925220805460ff19169055600a80548061150a5761150a613712565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061153a81613728565b915050611424565b5050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091611048918590610e499086906136cd565b6000546001600160a01b031633146115a75760405162461bcd60e51b8152600401610b02906135bb565b6001600160a01b038116600081815260086020908152604091829020805460ff1916600117905590519182527f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b6291015b60405180910390a150565b60006b204fce5e3e250261100000008311156116605760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b02565b8161167f57600061167084612827565b5093955061104c945050505050565b600061168a84612827565b5092955061104c945050505050565b6000546001600160a01b031633146116c35760405162461bcd60e51b8152600401610b02906135bb565b6001600160a01b0381166117285760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610b02565b600280546001600160a01b039081166000908152600860209081526040808320805460ff1990811690915585546001600160a01b031916948716948517909555838352918290208054909416600117909355519081527f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298291016115f7565b6000546001600160a01b031633146117d05760405162461bcd60e51b8152600401610b02906135bb565b60006117db30611acc565b9050601d548110156118425760405162461bcd60e51b815260206004820152602a60248201527f43616e206f6e6c792073776170206261636b2069662061626f766520746865206044820152693a343932b9b437b6321760b11b6064820152608401610b02565b61184a612876565b6040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb32906020016115f7565b6000546001600160a01b031633146118a45760405162461bcd60e51b8152600401610b02906135bb565b6001600160a01b03811660009081526009602052604090205460ff161561190d5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b02565b600a5460329061191e9060016136cd565b11156119a85760405162461bcd60e51b815260206004820152604d60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203530206163636f60448201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60648201526c3ab232b21030b2323932b9b99760991b608482015260a401610b02565b6001600160a01b03811660009081526003602052604090205415611a02576001600160a01b0381166000908152600360205260409020546119e8906112bf565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600960205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319169091179055565b6000546001600160a01b03163314611a925760405162461bcd60e51b8152600401610b02906135bb565b60025460405147916001600160a01b03169082156108fc029083906000818181858888f19350505050158015611542573d6000803e3d6000fd5b6001600160a01b03811660009081526009602052604081205460ff1615611b0957506001600160a01b031660009081526004602052604090205490565b6001600160a01b03821660009081526003602052604090205461104c906112bf565b6000546001600160a01b03163314611b555760405162461bcd60e51b8152600401610b02906135bb565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314611bc95760405162461bcd60e51b8152600401610b02906135bb565b6007805461ffff191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6000546001600160a01b03163314611c295760405162461bcd60e51b8152600401610b02906135bb565b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b600080546001600160a01b03163314611c7f5760405162461bcd60e51b8152600401610b02906135bb565b6001600160a01b038316611cd55760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610b02565b6001600160a01b038316301415611d2e5760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610b02565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611d75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d999190613743565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611dec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e10919061375c565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6000546001600160a01b03163314611e865760405162461bcd60e51b8152600401610b02906135bb565b601f546001600160a01b0383811691161415611f0a5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610b02565b61154282826122da565b3360009081526005602090815260408083206001600160a01b038616845290915281205482811015611f965760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b02565b611fa33385858403612335565b5060019392505050565b6000611048338484612459565b6000546001600160a01b03163314611fe45760405162461bcd60e51b8152600401610b02906135bb565b6000611fef30611acc565b9050610ee781612a46565b6000546001600160a01b031633146120245760405162461bcd60e51b8152600401610b02906135bb565b601f8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906115f790831515815260200190565b6000546001600160a01b0316331461209b5760405162461bcd60e51b8152600401610b02906135bb565b6007805460ff191690556040517fa29c2b578a5a679452d146ddd35ea04a2e7c57fe555cc7a3d91b3b8b06e6103d90600090a1565b6000546001600160a01b031633146120fa5760405162461bcd60e51b8152600401610b02906135bb565b6001600160a01b038116600081815260086020908152604091829020805460ff1916905590519182527f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e91016115f7565b6000546001600160a01b031633146121755760405162461bcd60e51b8152600401610b02906135bb565b6001600160a01b0381166121da5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b02565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461225f5760405162461bcd60e51b8152600401610b02906135bb565b604051600090339047908381818185875af1925050503d80600081146122a1576040519150601f19603f3d011682016040523d82523d6000602084013e6122a6565b606091505b50505050565b600d541580156122bc5750601054155b156122c357565b600d8054600e556010805460115560009182905555565b6001600160a01b0382166000908152601c6020908152604080832080548515801560ff199283168117909355601b909452919093208054909116909217909155612327576123278261187a565b80611542576115428261138f565b6001600160a01b0383166123975760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b02565b6001600160a01b0382166123f85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b02565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166124bd5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b02565b6001600160a01b03821661251f5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b02565b600081116125815760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b02565b601f54600160b01b900460ff1661261d576001600160a01b03831660009081526008602052604090205460ff16806125d157506001600160a01b03821660009081526008602052604090205460ff165b61261d5760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420616374697665207965742e0000000000006044820152606401610b02565b600061262830611acc565b601d54601f5491925082101590600160a01b900460ff161580156126555750601f54600160a81b900460ff165b80156126765750601f54600090612674906001600160a01b0316611acc565b115b801561269b57506001600160a01b03841660009081526008602052604090205460ff16155b80156126c057506001600160a01b03851660009081526008602052604090205460ff16155b80156126e457506001600160a01b0384166000908152601c602052604090205460ff165b80156126ed5750805b156126fa576126fa612876565b6127026122ac565b60036012556001600160a01b03851660009081526008602052604090205460ff1615801561274957506001600160a01b03841660009081526008602052604090205460ff16155b156127e1576001600160a01b0385166000908152601c602052604090205460ff161561279a57601354600d5560155460145461278591906136cd565b6010819055156127955760016012555b6127e1565b6001600160a01b0384166000908152601c602052604090205460ff16156127e157601654600d556018546017546127d191906136cd565b6010819055156127e15760026012555b6127ec858585612ba0565b6127fd600e54600d55601154601055565b5050505050565b6000806000612811612ca2565b909250905061282081836136ab565b9250505090565b600080600080600080600080600061283e8a612e4b565b925092509250600080600061285c8d8686612857612804565b612e8e565b919f909e50909c50959a5093985091965092945050505050565b601f805460ff60a01b1916600160a01b179055600061289430611acc565b90506000601a546019546128a891906136cd565b90506000601d5460146128bb919061368c565b83106128d257601d546128cf90601461368c565b92505b8215806128dd575081155b156128ea57505050612a37565b6000600283601954866128fd919061368c565b61290791906136ab565b61291191906136ab565b9050600061291f82866136fb565b905061292a81612a46565b601954479060009061293e906002906136ab565b61294890876136fb565b601a54612955908461368c565b61295f91906136ab565b9050600061296d82846136fb565b60006019819055601a55905084158015906129885750600081115b156129d9576129978582612ee5565b60408051858152602081018390529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b6002546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612a26576040519150601f19603f3d011682016040523d82523d6000602084013e612a2b565b606091505b50505050505050505050505b601f805460ff60a01b19169055565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612a7b57612a7b6136e5565b6001600160a01b03928316602091820292909201810191909152601e54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612ad4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612af891906135f0565b81600181518110612b0b57612b0b6136e5565b6001600160a01b039283166020918202929092010152601e54612b319130911684612335565b601e5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612b6a908590600090869030904290600401613779565b600060405180830381600087803b158015612b8457600080fd5b505af1158015612b98573d6000803e3d6000fd5b505050505050565b6001600160a01b03831660009081526009602052604090205460ff168015612be157506001600160a01b03821660009081526009602052604090205460ff16155b15612bf657612bf1838383612f7f565b505050565b6001600160a01b03831660009081526009602052604090205460ff16158015612c3757506001600160a01b03821660009081526009602052604090205460ff165b15612c4757612bf18383836130a8565b6001600160a01b03831660009081526009602052604090205460ff168015612c8757506001600160a01b03821660009081526009602052604090205460ff165b15612c9757612bf1838383613154565b612bf18383836131c9565b600b5460009081906b204fce5e3e25026110000000825b600a54811015612e07578260036000600a8481548110612cdb57612cdb6136e5565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612d4657508160046000600a8481548110612d1f57612d1f6136e5565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612d65575050600b54936b204fce5e3e250261100000009350915050565b60036000600a8381548110612d7c57612d7c6136e5565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612dab90846136fb565b925060046000600a8381548110612dc457612dc46136e5565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612df390836136fb565b915080612dff81613728565b915050612cb9565b506b204fce5e3e25026110000000600b54612e2291906136ab565b821015612e42575050600b54926b204fce5e3e2502611000000092509050565b90939092509050565b600080600080612e5a8561320e565b90506000612e678661322b565b9050600081612e7684896136fb565b612e8091906136fb565b979296509094509092505050565b6000808080612e9d858961368c565b90506000612eab868961368c565b90506000612eb9878961368c565b9050600081612ec884866136fb565b612ed291906136fb565b939b939a50919850919650505050505050565b601e54612efd9030906001600160a01b031684612335565b601e5460405163f305d71960e01b81526001600160a01b039091169063f305d719908390612f3c9030908790600090819061dead90429060040161360d565b60606040518083038185885af1158015612f5a573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906127fd9190613648565b600080600080600080612f9187612827565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612fc49088906136fb565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054612ff49087906136fb565b6001600160a01b03808b1660009081526003602052604080822093909355908a16815220546130249086906136cd565b6001600160a01b0389166000908152600360205260409020556130468161323e565b61305084836133a5565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161309591815260200190565b60405180910390a3505050505050505050565b6000806000806000806130ba87612827565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506130ed9087906136fb565b6001600160a01b03808b16600090815260036020908152604080832094909455918b168152600490915220546131249084906136cd565b6001600160a01b0389166000908152600460209081526040808320939093556003905220546130249086906136cd565b60008060008060008061316687612827565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506131999088906136fb565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546130ed9087906136fb565b6000806000806000806131db87612827565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150612ff49087906136fb565b6000612710600d5483613221919061368c565b61104c91906136ab565b600061271060105483613221919061368c565b600160125414156132af57601054601454613259908361368c565b61326391906136ab565b6019600082825461327491906136cd565b9091555050601054601554613289908361368c565b61329391906136ab565b601a60008282546132a491906136cd565b9091555061331b9050565b6002601254141561331b576010546017546132ca908361368c565b6132d491906136ab565b601960008282546132e591906136cd565b90915550506010546018546132fa908361368c565b61330491906136ab565b601a600082825461331591906136cd565b90915550505b6000613325612804565b90506000613333828461368c565b306000908152600360205260409020549091506133519082906136cd565b3060009081526003602090815260408083209390935560099052205460ff1615612bf157306000908152600460205260409020546133909084906136cd565b30600090815260046020526040902055505050565b81600b546133b391906136fb565b600b55600c546133c49082906136cd565b600c555050565b600060208083528351808285015260005b818110156133f8578581018301518582016040015282016133dc565b8181111561340a576000604083870101525b50601f01601f1916929092016040019392505050565b60006020828403121561343257600080fd5b5035919050565b6001600160a01b0381168114610ee757600080fd5b6000806040838503121561346157600080fd5b823561346c81613439565b946020939093013593505050565b60006020828403121561348c57600080fd5b813561133c81613439565b6000806000606084860312156134ac57600080fd5b505081359360208301359350604090920135919050565b6000806000606084860312156134d857600080fd5b83356134e381613439565b925060208401356134f381613439565b929592945050506040919091013590565b8015158114610ee757600080fd5b6000806040838503121561352557600080fd5b82359150602083013561353781613504565b809150509250929050565b6000806040838503121561355557600080fd5b823561356081613439565b9150602083013561353781613504565b6000806040838503121561358357600080fd5b823561358e81613439565b9150602083013561353781613439565b6000602082840312156135b057600080fd5b813561133c81613504565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561360257600080fd5b815161133c81613439565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561365d57600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156136a6576136a6613676565b500290565b6000826136c857634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156136e0576136e0613676565b500190565b634e487b7160e01b600052603260045260246000fd5b60008282101561370d5761370d613676565b500390565b634e487b7160e01b600052603160045260246000fd5b600060001982141561373c5761373c613676565b5060010190565b60006020828403121561375557600080fd5b5051919050565b60006020828403121561376e57600080fd5b815161133c81613504565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156137c95784516001600160a01b0316835293830193918301916001016137a4565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220e6169bc5e0045ea05463023820d9918ef999b61ebad7a54c387aa5d0c2a23db964736f6c634300080b0033

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

00000000000000000000000026ca45c897f0c3ef89e929115c60de6b40f6acf4

-----Decoded View---------------
Arg [0] : _operationsAddress (address): 0x26ca45C897F0c3ef89e929115c60de6b40F6aCF4

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000026ca45c897f0c3ef89e929115c60de6b40f6acf4


Deployed Bytecode Sourcemap

8564:27579:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34843:1297;;;;;;;;;;;;;:::i;:::-;;13070:85;;;;;;;;;;-1:-1:-1;13142:5:0;;;;;;;;;;;;-1:-1:-1;;;13142:5:0;;;;13070:85;;;;;;;:::i;:::-;;;;;;;;10834:27;;;;;;;;;;-1:-1:-1;10834:27:0;;;;-1:-1:-1;;;;;10834:27:0;;;;;;-1:-1:-1;;;;;798:32:1;;;780:51;;768:2;753:18;10834:27:0;616:221:1;16884:343:0;;;;;;;;;;-1:-1:-1;16884:343:0;;;;;:::i;:::-;;:::i;14067:193::-;;;;;;;;;;-1:-1:-1;14067:193:0;;;;;:::i;:::-;;:::i;:::-;;;1648:14:1;;1641:22;1623:41;;1611:2;1596:18;14067:193:0;1483:187:1;10493:64:0;;;;;;;;;;-1:-1:-1;10493:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15557:89;;;;;;;;;;-1:-1:-1;15628:10:0;;15557:89;;;2073:25:1;;;2061:2;2046:18;15557:89:0;1927:177:1;13353:97:0;;;;;;;;;;-1:-1:-1;9332:15:0;13353:97;;10346:39;;;;;;;;;;;;;;;;33016:463;;;;;;;;;;-1:-1:-1;33016:463:0;;;;;:::i;:::-;;:::i;10262:32::-;;;;;;;;;;;;;;;;14268:475;;;;;;;;;;-1:-1:-1;14268:475:0;;;;;:::i;:::-;;:::i;32563:445::-;;;;;;;;;;-1:-1:-1;32563:445:0;;;;;:::i;:::-;;:::i;18254:321::-;;;;;;;;;;-1:-1:-1;18254:321:0;;;;;:::i;:::-;;:::i;16360:127::-;;;;;;;;;;-1:-1:-1;16360:127:0;;;;;:::i;:::-;;:::i;13260:85::-;;;;;;;;;;-1:-1:-1;13260:85:0;;9578:2;3033:36:1;;3021:2;3006:18;13260:85:0;2891:184:1;19050:471:0;;;;;;;;;;-1:-1:-1;19050:471:0;;;;;:::i;:::-;;:::i;14751:215::-;;;;;;;;;;-1:-1:-1;14751:215:0;;;;;:::i;:::-;;:::i;10398:37::-;;;;;;;;;;;;;;;;10442:38;;;;;;;;;;;;;;;;32246:152;;;;;;;;;;-1:-1:-1;32246:152:0;;;;;:::i;:::-;;:::i;10868:21::-;;;;;;;;;;-1:-1:-1;10868:21:0;;;;-1:-1:-1;;;;;10868:21:0;;;17765:481;;;;;;;;;;-1:-1:-1;17765:481:0;;;;;:::i;:::-;;:::i;33491:408::-;;;;;;;;;;-1:-1:-1;33491:408:0;;;;;:::i;:::-;;:::i;9055:33::-;;;;;;;;;;-1:-1:-1;9055:33:0;;;;;;;;;;;10926:41;;;;;;;;;;-1:-1:-1;10926:41:0;;;;-1:-1:-1;;;10926:41:0;;;;;;23393:294;;;;;;;;;;;;;:::i;18583:459::-;;;;;;;;;;-1:-1:-1;18583:459:0;;;;;:::i;:::-;;:::i;32112:126::-;;;;;;;;;;-1:-1:-1;32112:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;32203:27:0;32179:4;32203:27;;;:18;:27;;;;;;;;;32112:126;7267:90;;;;;;;;;;-1:-1:-1;7334:15:0;7267:90;;16659:154;;;;;;;;;;;;;:::i;13458:198::-;;;;;;;;;;-1:-1:-1;13458:198:0;;;;;:::i;:::-;;:::i;6818:150::-;;;;;;;;;;;;;:::i;15718:154::-;;;;;;;;;;;;;:::i;16066:144::-;;;;;;;;;;-1:-1:-1;16066:144:0;;;;;:::i;:::-;;:::i;34175:488::-;;;;;;;;;;-1:-1:-1;34175:488:0;;;;;:::i;:::-;;:::i;10301:38::-;;;;;;;;;;;;;;;;15395:154;;;;;;;;;;-1:-1:-1;15395:154:0;;;;;:::i;:::-;-1:-1:-1;;;;;15521:20:0;15492:4;15521:20;;;:11;:20;;;;;;;;;15395:154;6604:79;;;;;;;;;;-1:-1:-1;6642:7:0;6669:6;-1:-1:-1;;;;;6669:6:0;6604:79;;13163:89;;;;;;;;;;-1:-1:-1;13237:7:0;;;;;;;;;;;;-1:-1:-1;;;13237:7:0;;;;13163:89;;17237:237;;;;;;;;;;-1:-1:-1;17237:237:0;;;;;:::i;:::-;;:::i;16230:122::-;;;;;;;;;;-1:-1:-1;16321:23:0;;16230:122;;14974:413;;;;;;;;;;-1:-1:-1;14974:413:0;;;;;:::i;:::-;;:::i;13664:201::-;;;;;;;;;;-1:-1:-1;13664:201:0;;;;;:::i;:::-;;:::i;10719:58::-;;;;;;;;;;-1:-1:-1;10719:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10974:33;;;;;;;;;;-1:-1:-1;10974:33:0;;;;-1:-1:-1;;;10974:33:0;;;;;;16495:156;;;;;;;;;;;;;:::i;33907:171::-;;;;;;;;;;-1:-1:-1;33907:171:0;;;;;:::i;:::-;;:::i;9009:39::-;;;;;;;;;;-1:-1:-1;9009:39:0;;;;;;;;10171:37;;;;;;;;;;;;;;;;13873:186;;;;;;;;;;-1:-1:-1;13873:186:0;;;;;:::i;:::-;-1:-1:-1;;;;;14024:18:0;;;13992:7;14024:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;13873:186;10215:38;;;;;;;;;;;;;;;;15915:137;;;;;;;;;;;;;:::i;32406:149::-;;;;;;;;;;-1:-1:-1;32406:149:0;;;;;:::i;:::-;;:::i;8649:40::-;;;;;;;;;;-1:-1:-1;8649:40:0;;;;-1:-1:-1;;;;;8649:40:0;;;10133:31;;;;;;;;;;;;;;;;6976:283;;;;;;;;;;-1:-1:-1;6976:283:0;;;;;:::i;:::-;;:::i;34675:160::-;;;;;;;;;;;;;:::i;34843:1297::-;6731:6;;-1:-1:-1;;;;;6731:6:0;375:10;6731:22;6723:67;;;;-1:-1:-1;;;6723:67:0;;;;;;;:::i;:::-;;;;;;;;;34900:13:::1;::::0;-1:-1:-1;;;34900:13:0;::::1;;;34899:14;34891:70;;;::::0;-1:-1:-1;;;34891:70:0;;5538:2:1;34891:70:0::1;::::0;::::1;5520:21:1::0;5577:2;5557:18;;;5550:30;5616:34;5596:18;;;5589:62;-1:-1:-1;;;5667:18:1;;;5660:41;5718:19;;34891:70:0::1;5336:407:1::0;34891:70:0::1;34974:14;:12;:14::i;:::-;35036:13;:20:::0;;-1:-1:-1;;;;35067:28:0;-1:-1:-1;;;35067:28:0;;;35111:16:::1;::::0;::::1;::::0;-1:-1:-1;;35111:16:0::1;35259:9;:22:::0;;-1:-1:-1;;;;;;35259:22:0::1;35205:42;35259:22:::0;;::::1;::::0;;;35339:20:::1;::::0;;-1:-1:-1;;;35339:20:0;;;;35205:42;;35339:18:::1;::::0;:20:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;35205:42;35339:20:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35327:44:0::1;;35380:4;35387:10;-1:-1:-1::0;;;;;35387:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35327:78;::::0;-1:-1:-1;;;;;;35327:78:0::1;::::0;;;;;;-1:-1:-1;;;;;6234:15:1;;;35327:78:0::1;::::0;::::1;6216:34:1::0;6286:15;;6266:18;;;6259:43;6151:18;;35327:78:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35318:6;:87:::0;;-1:-1:-1;;;;;;35318:87:0::1;-1:-1:-1::0;;;;;35318:87:0;;;::::1;::::0;;::::1;::::0;;35416:48:::1;::::0;-1:-1:-1;35416:25:0::1;:48::i;:::-;35512:6;::::0;35475:51:::1;::::0;-1:-1:-1;;;;;35512:6:0::1;::::0;35475:28:::1;:51::i;:::-;35606:1;35582:21;:25;35574:73;;;::::0;-1:-1:-1;;;35574:73:0;;6515:2:1;35574:73:0::1;::::0;::::1;6497:21:1::0;6554:2;6534:18;;;6527:30;6593:34;6573:18;;;6566:62;-1:-1:-1;;;6644:18:1;;;6637:33;6687:19;;35574:73:0::1;6313:399:1::0;35574:73:0::1;35695:1;35668:24;35686:4;35668:9;:24::i;:::-;:28;35660:79;;;::::0;-1:-1:-1;;;35660:79:0;;6919:2:1;35660:79:0::1;::::0;::::1;6901:21:1::0;6958:2;6938:18;;;6931:30;6997:34;6977:18;;;6970:62;-1:-1:-1;;;7048:18:1;;;7041:36;7094:19;;35660:79:0::1;6717:402:1::0;35660:79:0::1;35784:9;::::0;35752:69:::1;::::0;35769:4:::1;::::0;-1:-1:-1;;;;;35784:9:0::1;35796:24;35769:4:::0;35796:9:::1;:24::i;:::-;35752:8;:69::i;:::-;35832:9;::::0;-1:-1:-1;;;;;35832:9:0::1;:25;35865:21;35910:4;35930:24;35910:4:::0;35930:9:::1;:24::i;:::-;35969:1;36012::::0;36055:10:::1;36080:15;35832:274;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;36117:15;32033::::0;;32023:7;:25;32075:21;;32059:13;:37;31979:125;36117:15:::1;34880:1260;34843:1297::o:0;16884:343::-;6731:6;;-1:-1:-1;;;;;6731:6:0;375:10;6731:22;6723:67;;;;-1:-1:-1;;;6723:67:0;;;;;;;:::i;:::-;17005:6:::1;16991:11;9332:15;17001:1;16991:11;:::i;:::-;:20;;;;:::i;:::-;16978:9;:33;;16970:99;;;::::0;-1:-1:-1;;;16970:99:0;;8776:2:1;16970:99:0::1;::::0;::::1;8758:21:1::0;8815:2;8795:18;;;8788:30;8854:34;8834:18;;;8827:62;-1:-1:-1;;;8905:18:1;;;8898:51;8966:19;;16970:99:0::1;8574:417:1::0;16970:99:0::1;17114:4;17100:11;9332:15;17110:1;17100:11;:::i;:::-;:18;;;;:::i;:::-;17087:9;:31;;17079:96;;;::::0;-1:-1:-1;;;17079:96:0;;9198:2:1;17079:96:0::1;::::0;::::1;9180:21:1::0;9237:2;9217:18;;;9210:30;9276:34;9256:18;;;9249:62;-1:-1:-1;;;9327:18:1;;;9320:50;9387:19;;17079:96:0::1;8996:416:1::0;17079:96:0::1;17185:23;:35:::0;16884:343::o;14067:193::-;14169:4;14191:39;375:10;14214:7;14223:6;14191:8;:39::i;:::-;-1:-1:-1;14248:4:0;14067:193;;;;;:::o;33016:463::-;6731:6;;-1:-1:-1;;;;;6731:6:0;375:10;6731:22;6723:67;;;;-1:-1:-1;;;6723:67:0;;;;;;;:::i;:::-;33162:11:::1;:24:::0;;;33197:17:::1;:36:::0;;;33244:18:::1;:38:::0;;;33357:4:::1;33265:17:::0;33301:31:::1;33217:16:::0;33176:10;33301:31:::1;:::i;:::-;:52;;;;:::i;:::-;:60;;33293:103;;;::::0;-1:-1:-1;;;33293:103:0;;9752:2:1;33293:103:0::1;::::0;::::1;9734:21:1::0;9791:2;9771:18;;;9764:30;9830:32;9810:18;;;9803:60;9880:18;;33293:103:0::1;9550:354:1::0;33293:103:0::1;33412:59;::::0;;10111:25:1;;;10167:2;10152:18;;10145:34;;;10195:18;;;10188:34;;;33412:59:0::1;::::0;10099:2:1;10084:18;33412:59:0::1;;;;;;;;33016:463:::0;;;:::o;14268:475::-;14391:4;14408:36;14418:6;14426:9;14437:6;14408:9;:36::i;:::-;-1:-1:-1;;;;;14484:19:0;;14457:24;14484:19;;;:11;:19;;;;;;;;375:10;14484:33;;;;;;;;14536:26;;;;14528:79;;;;-1:-1:-1;;;14528:79:0;;10435:2:1;14528:79:0;;;10417:21:1;10474:2;10454:18;;;10447:30;10513:34;10493:18;;;10486:62;-1:-1:-1;;;10564:18:1;;;10557:38;10612:19;;14528:79:0;10233:404:1;14528:79:0;14643:57;14652:6;375:10;14693:6;14674:16;:25;14643:8;:57::i;:::-;-1:-1:-1;14731:4:0;;14268:475;-1:-1:-1;;;;14268:475:0:o;32563:445::-;6731:6;;-1:-1:-1;;;;;6731:6:0;375:10;6731:22;6723:67;;;;-1:-1:-1;;;6723:67:0;;;;;;;:::i;:::-;32705:10:::1;:22:::0;;;32738:16:::1;:34:::0;;;32783:17:::1;:36:::0;;;32891:4:::1;32803:16:::0;32838:29:::1;32757:15:::0;32718:9;32838:29:::1;:::i;:::-;:49;;;;:::i;:::-;:57;;32830:99;;;::::0;-1:-1:-1;;;32830:99:0;;10844:2:1;32830:99:0::1;::::0;::::1;10826:21:1::0;10883:2;10863:18;;;10856:30;10922:31;10902:18;;;10895:59;10971:18;;32830:99:0::1;10642:353:1::0;32830:99:0::1;32945:55;::::0;;10111:25:1;;;10167:2;10152:18;;10145:34;;;10195:18;;;10188:34;;;32945:55:0::1;::::0;10099:2:1;10084:18;32945:55:0::1;9909:319:1::0;18254:321:0;18348:7;18406;;18395;:18;;18373:110;;;;-1:-1:-1;;;18373:110:0;;11202:2:1;18373:110:0;;;11184:21:1;11241:2;11221:18;;;11214:30;11280:34;11260:18;;;11253:62;-1:-1:-1;;;11331:18:1;;;11324:40;11381:19;;18373:110:0;11000:406:1;18373:110:0;18494:19;18516:10;:8;:10::i;:::-;18494:32;-1:-1:-1;18544:23:0;18494:32;18544:7;:23;:::i;:::-;18537:30;18254:321;-1:-1:-1;;;18254:321:0:o;16360:127::-;6731:6;;-1:-1:-1;;;;;6731:6:0;375:10;6731:22;6723:67;;;;-1:-1:-1;;;6723:67:0;;;;;;;:::i;:::-;16441:17:::1;:38:::0;;-1:-1:-1;;;;;;16441:38:0::1;-1:-1:-1::0;;;;;16441:38:0;;;::::1;::::0;;;::::1;::::0;;16360:127::o;19050:471::-;6731:6;;-1:-1:-1;;;;;6731:6:0;375:10;6731:22;6723:67;;;;-1:-1:-1;;;6723:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19128:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;19120:56;;;::::0;-1:-1:-1;;;19120:56:0;;11613:2:1;19120:56:0::1;::::0;::::1;11595:21:1::0;11652:2;11632:18;;;11625:30;11691:25;11671:18;;;11664:53;11734:18;;19120:56:0::1;11411:347:1::0;19120:56:0::1;19192:9;19187:327;19211:9;:16:::0;19207:20;::::1;19187:327;;;19269:7;-1:-1:-1::0;;;;;19253:23:0::1;:9;19263:1;19253:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;19253:12:0::1;:23;19249:254;;;19312:9;19322:16:::0;;:20:::1;::::0;19341:1:::1;::::0;19322:20:::1;:::i;:::-;19312:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;19297:9:::1;:12:::0;;-1:-1:-1;;;;;19312:31:0;;::::1;::::0;19307:1;;19297:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;19297:46:0::1;-1:-1:-1::0;;;;;19297:46:0;;::::1;;::::0;;19362:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;19401:11:::1;:20:::0;;;;:28;;-1:-1:-1;;19401:28:0::1;::::0;;19448:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;19448:15:0;;;;;-1:-1:-1;;;;;;19448:15:0::1;::::0;;;;;19187:327:::1;19050:471:::0;:::o;19249:254::-:1;19229:3:::0;::::1;::::0;::::1;:::i;:::-;;;;19187:327;;;;19050:471:::0;:::o;14751:215::-;375:10;14839:4;14888:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;14888:34:0;;;;;;;;;;14839:4;;14856:80;;14879:7;;14888:47;;14925:10;;14888:47;:::i;32246:152::-;6731:6;;-1:-1:-1;;;;;6731:6:0;375:10;6731:22;6723:67;;;;-1:-1:-1;;;6723:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32317:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:34;;-1:-1:-1;;32317:34:0::1;32347:4;32317:34;::::0;;32367:23;;780:51:1;;;32367:23:0::1;::::0;753:18:1;32367:23:0::1;;;;;;;;32246:152:::0;:::o;17765:481::-;17885:7;9332:15;17918:7;:18;;17910:62;;;;-1:-1:-1;;;17910:62:0;;12499:2:1;17910:62:0;;;12481:21:1;12538:2;12518:18;;;12511:30;12577:33;12557:18;;;12550:61;12628:18;;17910:62:0;12297:355:1;17910:62:0;17988:17;17983:256;;18023:15;18052:19;18063:7;18052:10;:19::i;:::-;-1:-1:-1;18022:49:0;;-1:-1:-1;18086:14:0;;-1:-1:-1;;;;;18086:14:0;17983:256;18136:23;18171:19;18182:7;18171:10;:19::i;:::-;-1:-1:-1;18133:57:0;;-1:-1:-1;18205:22:0;;-1:-1:-1;;;;;18205:22:0;33491:408;6731:6;;-1:-1:-1;;;;;6731:6:0;375:10;6731:22;6723:67;;;;-1:-1:-1;;;6723:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33587:32:0;::::1;33579:83;;;::::0;-1:-1:-1;;;33579:83:0;;12859:2:1;33579:83:0::1;::::0;::::1;12841:21:1::0;12898:2;12878:18;;;12871:30;12937:34;12917:18;;;12910:62;-1:-1:-1;;;12988:18:1;;;12981:36;13034:19;;33579:83:0::1;12657:402:1::0;33579:83:0::1;33692:17;::::0;;-1:-1:-1;;;;;33692:17:0;;::::1;33713:5;33673:37:::0;;;:18:::1;:37;::::0;;;;;;;:45;;-1:-1:-1;;33673:45:0;;::::1;::::0;;;33729:47;;-1:-1:-1;;;;;;33729:47:0::1;::::0;;::::1;::::0;;::::1;::::0;;;33787:37;;;;;;;:44;;;;::::1;-1:-1:-1::0;33787:44:0::1;::::0;;;33847;780:51:1;;;33847:44:0::1;::::0;753:18:1;33847:44:0::1;616:221:1::0;23393:294:0;6731:6;;-1:-1:-1;;;;;6731:6:0;375:10;6731:22;6723:67;;;;-1:-1:-1;;;6723:67:0;;;;;;;:::i;:::-;23448:23:::1;23474:24;23492:4;23474:9;:24::i;:::-;23448:50;;23536:23;;23517:15;:42;;23509:97;;;::::0;-1:-1:-1;;;23509:97:0;;13266:2:1;23509:97:0::1;::::0;::::1;13248:21:1::0;13305:2;13285:18;;;13278:30;13344:34;13324:18;;;13317:62;-1:-1:-1;;;13395:18:1;;;13388:40;13445:19;;23509:97:0::1;13064:406:1::0;23509:97:0::1;23617:10;:8;:10::i;:::-;23643:36;::::0;23663:15:::1;2073:25:1::0;;23643:36:0::1;::::0;2061:2:1;2046:18;23643:36:0::1;1927:177:1::0;18583:459:0;6731:6;;-1:-1:-1;;;;;6731:6:0;375:10;6731:22;6723:67;;;;-1:-1:-1;;;6723:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18664:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;18663:21;18655:61;;;::::0;-1:-1:-1;;;18655:61:0;;13677:2:1;18655:61:0::1;::::0;::::1;13659:21:1::0;13716:2;13696:18;;;13689:30;13755:29;13735:18;;;13728:57;13802:18;;18655:61:0::1;13475:351:1::0;18655:61:0::1;18735:9;:16:::0;18759:2:::1;::::0;18735:20:::1;::::0;18754:1:::1;18735:20;:::i;:::-;:26;;18727:116;;;::::0;-1:-1:-1;;;18727:116:0;;14033:2:1;18727:116:0::1;::::0;::::1;14015:21:1::0;14072:2;14052:18;;;14045:30;14111:34;14091:18;;;14084:62;14182:34;14162:18;;;14155:62;-1:-1:-1;;;14233:19:1;;;14226:44;14287:19;;18727:116:0::1;13831:481:1::0;18727:116:0::1;-1:-1:-1::0;;;;;18858:16:0;::::1;18877:1;18858:16:::0;;;:7:::1;:16;::::0;;;;;:20;18854:109:::1;;-1:-1:-1::0;;;;;18934:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;18914:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;18895:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;18854:109:::1;-1:-1:-1::0;;;;;18973:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;18973:27:0::1;18996:4;18973:27:::0;;::::1;::::0;;;19011:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;19011:23:0::1;::::0;;::::1;::::0;;18583:459::o;16659:154::-;6731:6;;-1:-1:-1;;;;;6731:6:0;375:10;6731:22;6723:67;;;;-1:-1:-1;;;6723:67:0;;;;;;;:::i;:::-;16770:17:::1;::::0;16762:43:::1;::::0;16730:21:::1;::::0;-1:-1:-1;;;;;16770:17:0::1;::::0;16762:43;::::1;;;::::0;16730:21;;16713:14:::1;16762:43:::0;16713:14;16762:43;16730:21;16770:17;16762:43;::::1;;;;;;;;;;;;;::::0;::::1;;;;13458:198:::0;-1:-1:-1;;;;;13548:20:0;;13524:7;13548:20;;;:11;:20;;;;;;;;13544:49;;;-1:-1:-1;;;;;;13577:16:0;;;;;:7;:16;;;;;;;13458:198::o;13544:49::-;-1:-1:-1;;;;;13631:16:0;;;;;;:7;:16;;;;;;13611:37;;:19;:37::i;6818:150::-;6731:6;;-1:-1:-1;;;;;6731:6:0;375:10;6731:22;6723:67;;;;-1:-1:-1;;;6723:67:0;;;;;;;:::i;:::-;6927:1:::1;6911:6:::0;;6890:40:::1;::::0;-1:-1:-1;;;;;6911:6:0;;::::1;::::0;6890:40:::1;::::0;6927:1;;6890:40:::1;6958:1;6941:19:::0;;-1:-1:-1;;;;;;6941:19:0::1;::::0;;6818:150::o;15718:154::-;6731:6;;-1:-1:-1;;;;;6731:6:0;375:10;6731:22;6723:67;;;;-1:-1:-1;;;6723:67:0;;;;;;;:::i;:::-;15772:14:::1;:22:::0;;-1:-1:-1;;15805:28:0;;;15849:15:::1;::::0;::::1;::::0;15789:5:::1;::::0;15849:15:::1;15718:154::o:0;16066:144::-;6731:6;;-1:-1:-1;;;;;6731:6:0;375:10;6731:22;6723:67;;;;-1:-1:-1;;;6723:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16156:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;16156:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16066:144::o;34175:488::-;34289:10;6731:6;;-1:-1:-1;;;;;6731:6:0;375:10;6731:22;6723:67;;;;-1:-1:-1;;;6723:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34325:20:0;::::1;34317:59;;;::::0;-1:-1:-1;;;34317:59:0;;14519:2:1;34317:59:0::1;::::0;::::1;14501:21:1::0;14558:2;14538:18;;;14531:30;14597:28;14577:18;;;14570:56;14643:18;;34317:59:0::1;14317:350:1::0;34317:59:0::1;-1:-1:-1::0;;;;;34395:23:0;::::1;34413:4;34395:23;;34387:64;;;::::0;-1:-1:-1;;;34387:64:0;;14874:2:1;34387:64:0::1;::::0;::::1;14856:21:1::0;14913:2;14893:18;;;14886:30;14952;14932:18;;;14925:58;15000:18;;34387:64:0::1;14672:352:1::0;34387:64:0::1;34489:39;::::0;-1:-1:-1;;;34489:39:0;;34522:4:::1;34489:39;::::0;::::1;780:51:1::0;34462:24:0::1;::::0;-1:-1:-1;;;;;34489:24:0;::::1;::::0;::::1;::::0;753:18:1;;34489:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34547:46;::::0;-1:-1:-1;;;34547:46:0;;-1:-1:-1;;;;;15410:32:1;;;34547:46:0::1;::::0;::::1;15392:51:1::0;15459:18;;;15452:34;;;34462:66:0;;-1:-1:-1;34547:23:0;;::::1;::::0;::::1;::::0;15365:18:1;;34547:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34609;::::0;;-1:-1:-1;;;;;15410:32:1;;15392:51;;15474:2;15459:18;;15452:34;;;34539:54:0;;-1:-1:-1;34609:46:0::1;::::0;15365:18:1;34609:46:0::1;;;;;;;34306:357;34175:488:::0;;;;:::o;17237:237::-;6731:6;;-1:-1:-1;;;;;6731:6:0;375:10;6731:22;6723:67;;;;-1:-1:-1;;;6723:67:0;;;;;;;:::i;:::-;17344:6:::1;::::0;-1:-1:-1;;;;;17336:14:0;;::::1;17344:6:::0;::::1;17336:14;;17328:84;;;::::0;-1:-1:-1;;;17328:84:0;;15949:2:1;17328:84:0::1;::::0;::::1;15931:21:1::0;15988:2;15968:18;;;15961:30;16027:34;16007:18;;;16000:62;16098:27;16078:18;;;16071:55;16143:19;;17328:84:0::1;15747:421:1::0;17328:84:0::1;17425:41;17454:4;17460:5;17425:28;:41::i;14974:413::-:0;375:10;15067:4;15111:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;15111:34:0;;;;;;;;;;15164:35;;;;15156:85;;;;-1:-1:-1;;;15156:85:0;;16375:2:1;15156:85:0;;;16357:21:1;16414:2;16394:18;;;16387:30;16453:34;16433:18;;;16426:62;-1:-1:-1;;;16504:18:1;;;16497:35;16549:19;;15156:85:0;16173:401:1;15156:85:0;15277:67;375:10;15300:7;15328:15;15309:16;:34;15277:8;:67::i;:::-;-1:-1:-1;15375:4:0;;14974:413;-1:-1:-1;;;14974:413:0:o;13664:201::-;13771:4;13793:42;375:10;13817:9;13828:6;13793:9;:42::i;16495:156::-;6731:6;;-1:-1:-1;;;;;6731:6:0;375:10;6731:22;6723:67;;;;-1:-1:-1;;;6723:67:0;;;;;;;:::i;:::-;16549:23:::1;16575:24;16593:4;16575:9;:24::i;:::-;16549:50;;16610:33;16627:15;16610:16;:33::i;33907:171::-:0;6731:6;;-1:-1:-1;;;;;6731:6:0;375:10;6731:22;6723:67;;;;-1:-1:-1;;;6723:67:0;;;;;;;:::i;:::-;33984:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;33984:32:0::1;-1:-1:-1::0;;;;33984:32:0;;::::1;;::::0;;34032:38:::1;::::0;::::1;::::0;::::1;::::0;34008:8;1648:14:1;1641:22;1623:41;;1611:2;1596:18;;1483:187;15915:137:0;6731:6;;-1:-1:-1;;;;;6731:6:0;375:10;6731:22;6723:67;;;;-1:-1:-1;;;6723:67:0;;;;;;;:::i;:::-;15977:20:::1;:28:::0;;-1:-1:-1;;15977:28:0::1;::::0;;16021:23:::1;::::0;::::1;::::0;16000:5:::1;::::0;16021:23:::1;15915:137::o:0;32406:149::-;6731:6;;-1:-1:-1;;;;;6731:6:0;375:10;6731:22;6723:67;;;;-1:-1:-1;;;6723:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32475:27:0;::::1;32505:5;32475:27:::0;;;:18:::1;:27;::::0;;;;;;;;:35;;-1:-1:-1;;32475:35:0::1;::::0;;32526:21;;780:51:1;;;32526:21:0::1;::::0;753:18:1;32526:21:0::1;616:221:1::0;6976:283:0;6731:6;;-1:-1:-1;;;;;6731:6:0;375:10;6731:22;6723:67;;;;-1:-1:-1;;;6723:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7081:22:0;::::1;7059:110;;;::::0;-1:-1:-1;;;7059:110:0;;16781:2:1;7059:110:0::1;::::0;::::1;16763:21:1::0;16820:2;16800:18;;;16793:30;16859:34;16839:18;;;16832:62;-1:-1:-1;;;16910:18:1;;;16903:36;16956:19;;7059:110:0::1;16579:402:1::0;7059:110:0::1;7206:6;::::0;;7185:38:::1;::::0;-1:-1:-1;;;;;7185:38:0;;::::1;::::0;7206:6;::::1;::::0;7185:38:::1;::::0;::::1;7234:6;:17:::0;;-1:-1:-1;;;;;;7234:17:0::1;-1:-1:-1::0;;;;;7234:17:0;;;::::1;::::0;;;::::1;::::0;;6976:283::o;34675:160::-;6731:6;;-1:-1:-1;;;;;6731:6:0;375:10;6731:22;6723:67;;;;-1:-1:-1;;;6723:67:0;;;;;;;:::i;:::-;34769:58:::1;::::0;34733:12:::1;::::0;34777:10:::1;::::0;34801:21:::1;::::0;34733:12;34769:58;34733:12;34769:58;34801:21;34777:10;34769:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;34675:160:0:o;31736:235::-;31783:7;;:12;:34;;;;-1:-1:-1;31799:13:0;;:18;31783:34;31779:47;;;31736:235::o;31779:47::-;31856:7;;;31838:15;:25;31898:13;;;31874:21;:37;-1:-1:-1;31924:11:0;;;;31946:17;31736:235::o;17482:275::-;-1:-1:-1;;;;;17565:31:0;;;;;;:25;:31;;;;;;;;:39;;;;;;-1:-1:-1;;17565:39:0;;;;;;;;17615:31;:37;;;;;;;:45;;;;;;;;;;;17671:35;;17681:23;17699:4;17681:17;:23::i;:::-;17720:5;17716:34;;17727:21;17743:4;17727:15;:21::i;19530:371::-;-1:-1:-1;;;;;19657:19:0;;19649:68;;;;-1:-1:-1;;;19649:68:0;;17398:2:1;19649:68:0;;;17380:21:1;17437:2;17417:18;;;17410:30;17476:34;17456:18;;;17449:62;-1:-1:-1;;;17527:18:1;;;17520:34;17571:19;;19649:68:0;17196:400:1;19649:68:0;-1:-1:-1;;;;;19736:21:0;;19728:68;;;;-1:-1:-1;;;19728:68:0;;17803:2:1;19728:68:0;;;17785:21:1;17842:2;17822:18;;;17815:30;17881:34;17861:18;;;17854:62;-1:-1:-1;;;17932:18:1;;;17925:32;17974:19;;19728:68:0;17601:398:1;19728:68:0;-1:-1:-1;;;;;19809:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;19861:32;;2073:25:1;;;19861:32:0;;2046:18:1;19861:32:0;;;;;;;19530:371;;;:::o;19909:1894::-;-1:-1:-1;;;;;20031:18:0;;20023:68;;;;-1:-1:-1;;;20023:68:0;;18206:2:1;20023:68:0;;;18188:21:1;18245:2;18225:18;;;18218:30;18284:34;18264:18;;;18257:62;-1:-1:-1;;;18335:18:1;;;18328:35;18380:19;;20023:68:0;18004:401:1;20023:68:0;-1:-1:-1;;;;;20110:16:0;;20102:64;;;;-1:-1:-1;;;20102:64:0;;18612:2:1;20102:64:0;;;18594:21:1;18651:2;18631:18;;;18624:30;18690:34;18670:18;;;18663:62;-1:-1:-1;;;18741:18:1;;;18734:33;18784:19;;20102:64:0;18410:399:1;20102:64:0;20194:1;20185:6;:10;20177:64;;;;-1:-1:-1;;;20177:64:0;;19016:2:1;20177:64:0;;;18998:21:1;19055:2;19035:18;;;19028:30;19094:34;19074:18;;;19067:62;-1:-1:-1;;;19145:18:1;;;19138:39;19194:19;;20177:64:0;18814:405:1;20177:64:0;20266:13;;-1:-1:-1;;;20266:13:0;;;;20262:134;;-1:-1:-1;;;;;20303:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;20331:22:0;;;;;;:18;:22;;;;;;;;20303:50;20295:89;;;;-1:-1:-1;;;20295:89:0;;19426:2:1;20295:89:0;;;19408:21:1;19465:2;19445:18;;;19438:30;19504:28;19484:18;;;19477:56;19550:18;;20295:89:0;19224:350:1;20295:89:0;20410:28;20441:24;20459:4;20441:9;:24::i;:::-;20531:23;;20615:16;;20410:55;;-1:-1:-1;20507:47:0;;;;-1:-1:-1;;;20615:16:0;;;;20614:17;:55;;;;-1:-1:-1;20648:21:0;;-1:-1:-1;;;20648:21:0;;;;20614:55;:93;;;;-1:-1:-1;20696:6:0;;20706:1;;20686:17;;-1:-1:-1;;;;;20696:6:0;20686:9;:17::i;:::-;:21;20614:93;:133;;;;-1:-1:-1;;;;;;20725:22:0;;;;;;:18;:22;;;;;;;;20724:23;20614:133;:175;;;;-1:-1:-1;;;;;;20765:24:0;;;;;;:18;:24;;;;;;;;20764:25;20614:175;:221;;;;-1:-1:-1;;;;;;20806:29:0;;;;;;:25;:29;;;;;;;;20614:221;:261;;;;;20852:23;20614:261;20596:328;;;20902:10;:8;:10::i;:::-;20936:14;:12;:14::i;:::-;10085:1;20971:15;:26;-1:-1:-1;;;;;21023:24:0;;;;;;:18;:24;;;;;;;;21022:25;:52;;;;-1:-1:-1;;;;;;21052:22:0;;;;;;:18;:22;;;;;;;;21051:23;21022:52;21018:679;;;-1:-1:-1;;;;;21115:31:0;;;;;;:25;:31;;;;;;;;21111:575;;;21177:10;;21167:7;:20;21241:17;;21222:16;;:36;;21241:17;21222:36;:::i;:::-;21206:13;:52;;;21280:17;21277:85;;10001:1;21321:15;:21;21277:85;21111:575;;;-1:-1:-1;;;;;21422:29:0;;;;;;:25;:29;;;;;;;;21418:268;;;21482:11;;21472:7;:21;21548:18;;21528:17;;:38;;21548:18;21528:38;:::i;:::-;21512:13;:54;;;21588:17;21585:86;;10041:1;21629:15;:22;21585:86;21717:32;21732:4;21738:2;21742:6;21717:14;:32::i;:::-;21770:15;32033;;32023:7;:25;32075:21;;32059:13;:37;31979:125;21770:15;20012:1791;;19909:1894;;;:::o;29852:163::-;29894:7;29915:15;29932;29951:19;:17;:19::i;:::-;29914:56;;-1:-1:-1;29914:56:0;-1:-1:-1;29988:19:0;29914:56;;29988:19;:::i;:::-;29981:26;;;;29852:163;:::o;28141:742::-;28241:7;28263;28285;28307;28329;28351;28401:23;28439:12;28466:18;28498:20;28510:7;28498:11;:20::i;:::-;28386:132;;;;;;28530:15;28547:23;28572:12;28588:113;28614:7;28636:4;28655:10;28680;:8;:10::i;:::-;28588:11;:113::i;:::-;28529:172;;;;-1:-1:-1;28529:172:0;;-1:-1:-1;28805:15:0;;-1:-1:-1;28835:4:0;;-1:-1:-1;28854:10:0;;-1:-1:-1;28141:742:0;;-1:-1:-1;;;;;28141:742:0:o;21813:1510::-;12159:16;:23;;-1:-1:-1;;;;12159:23:0;-1:-1:-1;;;12159:23:0;;;;21892:24:::1;21910:4;21892:9;:24::i;:::-;21866:50;;21927:25;21980:23;;21955:22;;:48;;;;:::i;:::-;21927:76;;22014:12;22110:23;;22136:2;22110:28;;;;:::i;:::-;22091:15;:47;22088:124;;22172:23;::::0;:28:::1;::::0;22198:2:::1;22172:28;:::i;:::-;22154:46;;22088:124;22227:20:::0;;;:46:::1;;-1:-1:-1::0;22251:22:0;;22227:46:::1;22224:60;;;22276:7;;;;;22224:60;22353:26;22445:1;22425:17;22400:22;;22382:15;:40;;;;:::i;:::-;:60;;;;:::i;:::-;:64;;;;:::i;:::-;22353:93:::0;-1:-1:-1;22457:26:0::1;22486:36;22353:93:::0;22486:15;:36:::1;:::i;:::-;22457:65;;22543:36;22560:18;22543:16;:36::i;:::-;22752:22;::::0;22621:21:::1;::::0;22600:18:::1;::::0;22752:24:::1;::::0;22775:1:::1;::::0;22752:24:::1;:::i;:::-;22731:46;::::0;:17;:46:::1;:::i;:::-;22703:23;::::0;22690:37:::1;::::0;:10;:37:::1;:::i;:::-;:88;;;;:::i;:::-;22663:115:::0;-1:-1:-1;22799:23:0::1;22825:29;22663:115:::0;22825:10;:29:::1;:::i;:::-;22892:1;22867:22;:26:::0;;;22904:23:::1;:27:::0;22799:55;-1:-1:-1;22963:22:0;;;;;:45:::1;;;23007:1;22989:15;:19;22963:45;22960:216;;;23024:49;23037:18;23057:15;23024:12;:49::i;:::-;23093:71;::::0;;10111:25:1;;;10167:2;10152:18;;10145:34;;;10195:18;;;10188:34;;;23093:71:0::1;::::0;10099:2:1;10084:18;23093:71:0::1;;;;;;;22960:216;23258:17;::::0;23250:65:::1;::::0;-1:-1:-1;;;;;23258:17:0;;::::1;::::0;23289:21:::1;::::0;23250:65:::1;::::0;;;23289:21;23258:17;23250:65:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;;;12193:1:0::1;12205:16:::0;:24;;-1:-1:-1;;;;12205:24:0;;;21813:1510::o;23699:481::-;23789:16;;;23803:1;23789:16;;;;;;;;23765:21;;23789:16;;;;;;;;;;-1:-1:-1;23789:16:0;23765:40;;23834:4;23816;23821:1;23816:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;23816:23:0;;;:7;;;;;;;;;;:23;;;;23860:9;;:16;;;-1:-1:-1;;;23860:16:0;;;;:9;;;;;:14;;:16;;;;;23816:7;;23860:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23850:4;23855:1;23850:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;23850:26:0;;;:7;;;;;;;;;:26;23919:9;;23887:56;;23904:4;;23919:9;23931:11;23887:8;:56::i;:::-;23954:9;;:218;;-1:-1:-1;;;23954:218:0;;-1:-1:-1;;;;;23954:9:0;;;;:60;;:218;;24029:11;;23954:9;;24099:4;;24126;;24146:15;;23954:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23754:426;23699:481;:::o;24612:604::-;-1:-1:-1;;;;;24746:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;24770:22:0;;;;;;:11;:22;;;;;;;;24769:23;24746:46;24742:467;;;24809:48;24831:6;24839:9;24850:6;24809:21;:48::i;:::-;24612:604;;;:::o;24742:467::-;-1:-1:-1;;;;;24880:19:0;;;;;;:11;:19;;;;;;;;24879:20;:46;;;;-1:-1:-1;;;;;;24903:22:0;;;;;;:11;:22;;;;;;;;24879:46;24875:334;;;24942:46;24962:6;24970:9;24981:6;24942:19;:46::i;24875:334::-;-1:-1:-1;;;;;25010:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;25033:22:0;;;;;;:11;:22;;;;;;;;25010:45;25006:203;;;25072:48;25094:6;25102:9;25113:6;25072:21;:48::i;25006:203::-;25153:44;25171:6;25179:9;25190:6;25153:17;:44::i;30023:598::-;30121:7;;30074;;;;9332:15;30074:7;30175:332;30199:9;:16;30195:20;;30175:332;;;30283:7;30259;:21;30267:9;30277:1;30267:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;30267:12:0;30259:21;;;;;;;;;;;;;:31;;:83;;;30335:7;30311;:21;30319:9;30329:1;30319:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;30319:12:0;30311:21;;;;;;;;;;;;;:31;30259:83;30237:146;;;-1:-1:-1;;30366:7:0;;;9332:15;;-1:-1:-1;30023:598:0;-1:-1:-1;;30023:598:0:o;30237:146::-;30417:7;:21;30425:9;30435:1;30425:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;30425:12:0;30417:21;;;;;;;;;;;;;30408:31;;:7;:31;:::i;:::-;30398:41;;30473:7;:21;30481:9;30491:1;30481:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;30481:12:0;30473:21;;;;;;;;;;;;;30464:31;;:7;:31;:::i;:::-;30454:41;-1:-1:-1;30217:3:0;;;;:::i;:::-;;;;30175:332;;;;9332:15;30531:7;;:19;;;;:::i;:::-;30521:7;:29;30517:60;;;-1:-1:-1;;30560:7:0;;;9332:15;;-1:-1:-1;30023:598:0;-1:-1:-1;30023:598:0:o;30517:60::-;30596:7;;30605;;-1:-1:-1;30023:598:0;-1:-1:-1;30023:598:0:o;28891:406::-;28992:7;29014;29036;29071:12;29086:24;29102:7;29086:15;:24::i;:::-;29071:39;;29121:18;29142:30;29164:7;29142:21;:30::i;:::-;29121:51;-1:-1:-1;29183:23:0;29121:51;29209:14;29218:4;29209:7;:14;:::i;:::-;:27;;;;:::i;:::-;29183:53;29272:4;;-1:-1:-1;29278:10:0;;-1:-1:-1;28891:406:0;;-1:-1:-1;;;28891:406:0:o;29305:539::-;29504:7;;;;29601:21;29610:11;29601:7;:21;:::i;:::-;29583:39;-1:-1:-1;29633:12:0;29648:18;29654:11;29648:4;:18;:::i;:::-;29633:33;-1:-1:-1;29677:18:0;29698:24;29710:11;29698:10;:24;:::i;:::-;29677:45;-1:-1:-1;29733:23:0;29677:45;29759:14;29768:4;29759:7;:14;:::i;:::-;:27;;;;:::i;:::-;29805:7;;;;-1:-1:-1;29831:4:0;;-1:-1:-1;29305:539:0;;-1:-1:-1;;;;;;;29305:539:0:o;24194:410::-;24307:9;;24275:56;;24292:4;;-1:-1:-1;;;;;24307:9:0;24319:11;24275:8;:56::i;:::-;24342:9;;:254;;-1:-1:-1;;;24342:254:0;;-1:-1:-1;;;;;24342:9:0;;;;:25;;24375:9;;24342:254;;24408:4;;24428:11;;24342:9;;;;24548:6;;24570:15;;24342:254;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;26554:677::-;26705:15;26735:23;26773:12;26800:23;26838:12;26865:18;26897:19;26908:7;26897:10;:19::i;:::-;-1:-1:-1;;;;;26945:15:0;;;;;;:7;:15;;;;;;26690:226;;-1:-1:-1;26690:226:0;;-1:-1:-1;26690:226:0;;-1:-1:-1;26690:226:0;-1:-1:-1;26690:226:0;-1:-1:-1;26690:226:0;-1:-1:-1;26945:25:0;;26962:7;;26945:25;:::i;:::-;-1:-1:-1;;;;;26927:15:0;;;;;;:7;:15;;;;;;;;:43;;;;26999:7;:15;;;;:25;;27016:7;;26999:25;:::i;:::-;-1:-1:-1;;;;;26981:15:0;;;;;;;:7;:15;;;;;;:43;;;;27056:18;;;;;;;:36;;27076:15;;27056:36;:::i;:::-;-1:-1:-1;;;;;27035:18:0;;;;;;:7;:18;;;;;:57;27103:26;27118:10;27103:14;:26::i;:::-;27140:23;27152:4;27158;27140:11;:23::i;:::-;27196:9;-1:-1:-1;;;;;27179:44:0;27188:6;-1:-1:-1;;;;;27179:44:0;;27207:15;27179:44;;;;2073:25:1;;2061:2;2046:18;;1927:177;27179:44:0;;;;;;;;26679:552;;;;;;26554:677;;;:::o;25851:695::-;26000:15;26030:23;26068:12;26095:23;26133:12;26160:18;26192:19;26203:7;26192:10;:19::i;:::-;-1:-1:-1;;;;;26240:15:0;;;;;;:7;:15;;;;;;25985:226;;-1:-1:-1;25985:226:0;;-1:-1:-1;25985:226:0;;-1:-1:-1;25985:226:0;-1:-1:-1;25985:226:0;-1:-1:-1;25985:226:0;-1:-1:-1;26240:27:0;;25985:226;;26240:27;:::i;:::-;-1:-1:-1;;;;;26222:15:0;;;;;;;:7;:15;;;;;;;;:45;;;;26299:18;;;;;:7;:18;;;;;:38;;26321:15;;26299:38;:::i;:::-;-1:-1:-1;;;;;26278:18:0;;;;;;:7;:18;;;;;;;;:59;;;;26369:7;:18;;;;:38;;26391:15;;26369:38;:::i;27239:745::-;27390:15;27420:23;27458:12;27485:23;27523:12;27550:18;27582:19;27593:7;27582:10;:19::i;:::-;-1:-1:-1;;;;;27630:15:0;;;;;;:7;:15;;;;;;27375:226;;-1:-1:-1;27375:226:0;;-1:-1:-1;27375:226:0;;-1:-1:-1;27375:226:0;-1:-1:-1;27375:226:0;-1:-1:-1;27375:226:0;-1:-1:-1;27630:25:0;;27647:7;;27630:25;:::i;:::-;-1:-1:-1;;;;;27612:15:0;;;;;;:7;:15;;;;;;;;:43;;;;27684:7;:15;;;;:25;;27701:7;;27684:25;:::i;25224:619::-;25371:15;25401:23;25439:12;25466:23;25504:12;25531:18;25563:19;25574:7;25563:10;:19::i;:::-;-1:-1:-1;;;;;25611:15:0;;;;;;:7;:15;;;;;;25356:226;;-1:-1:-1;25356:226:0;;-1:-1:-1;25356:226:0;;-1:-1:-1;25356:226:0;-1:-1:-1;25356:226:0;-1:-1:-1;25356:226:0;-1:-1:-1;25611:25:0;;25356:226;;25611:25;:::i;31428:124::-;31492:7;31539:5;31529:7;;31519;:17;;;;:::i;:::-;:25;;;;:::i;31560:168::-;31657:7;31715:5;31699:13;;31689:7;:23;;;;:::i;30629:791::-;10001:1;30695:15;;:22;30692:433;;;30791:13;;30772:16;;30759:29;;:10;:29;:::i;:::-;:45;;;;:::i;:::-;30733:22;;:71;;;;;;;:::i;:::-;;;;-1:-1:-1;;30879:13:0;;30859:17;;30846:30;;:10;:30;:::i;:::-;:46;;;;:::i;:::-;30819:23;;:73;;;;;;;:::i;:::-;;;;-1:-1:-1;30692:433:0;;-1:-1:-1;30692:433:0;;10041:1;30913:15;;:23;30910:215;;;31011:13;;30991:17;;30978:30;;:10;:30;:::i;:::-;:46;;;;:::i;:::-;30952:22;;:72;;;;;;;:::i;:::-;;;;-1:-1:-1;;31100:13:0;;31079:18;;31066:31;;:10;:31;:::i;:::-;:47;;;;:::i;:::-;31039:23;;:74;;;;;;;:::i;:::-;;;;-1:-1:-1;;30910:215:0;31135:19;31157:10;:8;:10::i;:::-;31135:32;-1:-1:-1;31178:18:0;31199:26;31135:32;31199:10;:26;:::i;:::-;31277:4;31261:22;;;;:7;:22;;;;;;31178:47;;-1:-1:-1;31261:35:0;;31178:47;;31261:35;:::i;:::-;31252:4;31236:22;;;;:7;:22;;;;;;;;:60;;;;31311:11;:26;;;;;;31307:105;;;31393:4;31377:22;;;;:7;:22;;;;;;:35;;31402:10;;31377:35;:::i;:::-;31368:4;31352:22;;;;:7;:22;;;;;:60;30681:739;;30629:791;:::o;27992:141::-;28079:4;28070:7;;:14;;;;:::i;:::-;28060:7;:24;28108:10;;:17;;28120:4;;28108:17;:::i;:::-;28095:10;:30;-1:-1:-1;;27992:141:0:o;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;842:180::-;901:6;954:2;942:9;933:7;929:23;925:32;922:52;;;970:1;967;960:12;922:52;-1:-1:-1;993:23:1;;842:180;-1:-1:-1;842:180:1:o;1027:131::-;-1:-1:-1;;;;;1102:31:1;;1092:42;;1082:70;;1148:1;1145;1138:12;1163:315;1231:6;1239;1292:2;1280:9;1271:7;1267:23;1263:32;1260:52;;;1308:1;1305;1298:12;1260:52;1347:9;1334:23;1366:31;1391:5;1366:31;:::i;:::-;1416:5;1468:2;1453:18;;;;1440:32;;-1:-1:-1;;;1163:315:1:o;1675:247::-;1734:6;1787:2;1775:9;1766:7;1762:23;1758:32;1755:52;;;1803:1;1800;1793:12;1755:52;1842:9;1829:23;1861:31;1886:5;1861:31;:::i;2109:316::-;2186:6;2194;2202;2255:2;2243:9;2234:7;2230:23;2226:32;2223:52;;;2271:1;2268;2261:12;2223:52;-1:-1:-1;;2294:23:1;;;2364:2;2349:18;;2336:32;;-1:-1:-1;2415:2:1;2400:18;;;2387:32;;2109:316;-1:-1:-1;2109:316:1:o;2430:456::-;2507:6;2515;2523;2576:2;2564:9;2555:7;2551:23;2547:32;2544:52;;;2592:1;2589;2582:12;2544:52;2631:9;2618:23;2650:31;2675:5;2650:31;:::i;:::-;2700:5;-1:-1:-1;2757:2:1;2742:18;;2729:32;2770:33;2729:32;2770:33;:::i;:::-;2430:456;;2822:7;;-1:-1:-1;;;2876:2:1;2861:18;;;;2848:32;;2430:456::o;3288:118::-;3374:5;3367:13;3360:21;3353:5;3350:32;3340:60;;3396:1;3393;3386:12;3411:309;3476:6;3484;3537:2;3525:9;3516:7;3512:23;3508:32;3505:52;;;3553:1;3550;3543:12;3505:52;3589:9;3576:23;3566:33;;3649:2;3638:9;3634:18;3621:32;3662:28;3684:5;3662:28;:::i;:::-;3709:5;3699:15;;;3411:309;;;;;:::o;3725:382::-;3790:6;3798;3851:2;3839:9;3830:7;3826:23;3822:32;3819:52;;;3867:1;3864;3857:12;3819:52;3906:9;3893:23;3925:31;3950:5;3925:31;:::i;:::-;3975:5;-1:-1:-1;4032:2:1;4017:18;;4004:32;4045:30;4004:32;4045:30;:::i;4112:388::-;4180:6;4188;4241:2;4229:9;4220:7;4216:23;4212:32;4209:52;;;4257:1;4254;4247:12;4209:52;4296:9;4283:23;4315:31;4340:5;4315:31;:::i;:::-;4365:5;-1:-1:-1;4422:2:1;4407:18;;4394:32;4435:33;4394:32;4435:33;:::i;4505:241::-;4561:6;4614:2;4602:9;4593:7;4589:23;4585:32;4582:52;;;4630:1;4627;4620:12;4582:52;4669:9;4656:23;4688:28;4710:5;4688:28;:::i;4975:356::-;5177:2;5159:21;;;5196:18;;;5189:30;5255:34;5250:2;5235:18;;5228:62;5322:2;5307:18;;4975:356::o;5748:251::-;5818:6;5871:2;5859:9;5850:7;5846:23;5842:32;5839:52;;;5887:1;5884;5877:12;5839:52;5919:9;5913:16;5938:31;5963:5;5938:31;:::i;7124:607::-;-1:-1:-1;;;;;7483:15:1;;;7465:34;;7530:2;7515:18;;7508:34;;;;7573:2;7558:18;;7551:34;;;;7616:2;7601:18;;7594:34;;;;7665:15;;;7659:3;7644:19;;7637:44;7445:3;7697:19;;7690:35;;;;7414:3;7399:19;;7124:607::o;7736:306::-;7824:6;7832;7840;7893:2;7881:9;7872:7;7868:23;7864:32;7861:52;;;7909:1;7906;7899:12;7861:52;7938:9;7932:16;7922:26;;7988:2;7977:9;7973:18;7967:25;7957:35;;8032:2;8021:9;8017:18;8011:25;8001:35;;7736:306;;;;;:::o;8047:127::-;8108:10;8103:3;8099:20;8096:1;8089:31;8139:4;8136:1;8129:15;8163:4;8160:1;8153:15;8179:168;8219:7;8285:1;8281;8277:6;8273:14;8270:1;8267:21;8262:1;8255:9;8248:17;8244:45;8241:71;;;8292:18;;:::i;:::-;-1:-1:-1;8332:9:1;;8179:168::o;8352:217::-;8392:1;8418;8408:132;;8462:10;8457:3;8453:20;8450:1;8443:31;8497:4;8494:1;8487:15;8525:4;8522:1;8515:15;8408:132;-1:-1:-1;8554:9:1;;8352:217::o;9417:128::-;9457:3;9488:1;9484:6;9481:1;9478:13;9475:39;;;9494:18;;:::i;:::-;-1:-1:-1;9530:9:1;;9417:128::o;11763:127::-;11824:10;11819:3;11815:20;11812:1;11805:31;11855:4;11852:1;11845:15;11879:4;11876:1;11869:15;11895:125;11935:4;11963:1;11960;11957:8;11954:34;;;11968:18;;:::i;:::-;-1:-1:-1;12005:9:1;;11895:125::o;12025:127::-;12086:10;12081:3;12077:20;12074:1;12067:31;12117:4;12114:1;12107:15;12141:4;12138:1;12131:15;12157:135;12196:3;-1:-1:-1;;12217:17:1;;12214:43;;;12237:18;;:::i;:::-;-1:-1:-1;12284:1:1;12273:13;;12157:135::o;15029:184::-;15099:6;15152:2;15140:9;15131:7;15127:23;15123:32;15120:52;;;15168:1;15165;15158:12;15120:52;-1:-1:-1;15191:16:1;;15029:184;-1:-1:-1;15029:184:1:o;15497:245::-;15564:6;15617:2;15605:9;15596:7;15592:23;15588:32;15585:52;;;15633:1;15630;15623:12;15585:52;15665:9;15659:16;15684:28;15706:5;15684:28;:::i;19711:980::-;19973:4;20021:3;20010:9;20006:19;20052:6;20041:9;20034:25;20078:2;20116:6;20111:2;20100:9;20096:18;20089:34;20159:3;20154:2;20143:9;20139:18;20132:31;20183:6;20218;20212:13;20249:6;20241;20234:22;20287:3;20276:9;20272:19;20265:26;;20326:2;20318:6;20314:15;20300:29;;20347:1;20357:195;20371:6;20368:1;20365:13;20357:195;;;20436:13;;-1:-1:-1;;;;;20432:39:1;20420:52;;20527:15;;;;20492:12;;;;20468:1;20386:9;20357:195;;;-1:-1:-1;;;;;;;20608:32:1;;;;20603:2;20588:18;;20581:60;-1:-1:-1;;;20672:3:1;20657:19;20650:35;20569:3;19711:980;-1:-1:-1;;;19711:980:1:o

Swarm Source

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