ETH Price: $3,663.61 (+0.65%)

Token

EveryApe (T.me/Every_Ape) (EVAPE)
 

Overview

Max Total Supply

500,000,000,000,000 EVAPE

Holders

536 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
23,194,752,702 EVAPE

Value
$0.00
0xe3ccc348542aa666cffa65004ea111a7fc88fc09
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

EveryApe token contract has migrated to 0x54de6226b8a54B5A5935bB54f47c3e409c71634a

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
EVERYAPE

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-10-01
*/

/**
 *Submitted for verification at BscScan.com on 2021-09-04
*/

/**
 *Submitted for verification at Etherscan.io on 2021-07-26
*/

/**

    
$$$$$$$$\                                       $$$$$$\                      
$$  _____|                                     $$  __$$\                     
$$ |  $$\    $$\  $$$$$$\   $$$$$$\  $$\   $$\ $$ /  $$ | $$$$$$\   $$$$$$\  
$$$$$\\$$\  $$  |$$  __$$\ $$  __$$\ $$ |  $$ |$$$$$$$$ |$$  __$$\ $$  __$$\ 
$$  __|\$$\$$  / $$$$$$$$ |$$ |  \__|$$ |  $$ |$$  __$$ |$$ /  $$ |$$$$$$$$ |
$$ |    \$$$  /  $$   ____|$$ |      $$ |  $$ |$$ |  $$ |$$ |  $$ |$$   ____|
$$$$$$$$\\$  /   \$$$$$$$\ $$ |      \$$$$$$$ |$$ |  $$ |$$$$$$$  |\$$$$$$$\ 
\________|\_/     \_______|\__|       \____$$ |\__|  \__|$$  ____/  \_______|
                                     $$\   $$ |          $$ |                
                                     \$$$$$$  |          $$ |                
                                      \______/           \__|               
                                                                                      
                                                                                    
                                                                      
EveryApe is an innovator in BurnBack Tokenomics, increasing the stakers value through a Milestone 
Burn and Buyback combination plan, Ultra-reflective Tokenomics, and Minimizing whale/bot manipulation. 
A product of WatchTower Finance, a community built on honest, un-ruggable trading.
    
Main features are
    

1) 500,000,000,000,000 (500 Trillion) max supply (we will hold some for milestone burns)
2) 300,000,000,000 (300 bil) txn buy/sell limiter 
3) 14% buyback and marketing tax is collected and 7% of it is sent for marketing fund and other 7% is used to buyback the tokens.
4) Bot Whale protection
5) Sniper liquidity event protection
             
*/

// SPDX-License-Identifier: Unlicensed

pragma solidity ^0.8.4;

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;
    uint256 private _lockTime;

    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() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

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

    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = block.timestamp + time;
        emit OwnershipTransferred(_owner, address(0));
    }
    
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(block.timestamp > _lockTime , "Contract is locked until 7 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}

// pragma solidity >=0.5.0;

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}


// pragma solidity >=0.5.0;

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
    
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

// pragma solidity >=0.6.2;

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}



// pragma solidity >=0.6.2;

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

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

contract EVERYAPE is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    
    address payable public marketingAddress = payable(0x2580AD014ee28495216125D7AC3Ed1E961f2Bd2b); // Marketing Address
    address payable public buybackAddress = payable(0xAE345AB3c1Cf08b54668df4258Df3B182b60368A); // Buyback Address
    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcludedFromFee;

    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
   
    mapping (address => bool) private _isLocked;

    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 500000000 * 10**6 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "EveryApe (T.me/Every_Ape)";
    string private _symbol = "EVAPE";
    uint8 private _decimals = 9;


    uint256 public _taxFee = 0;
    uint256 private _previousTaxFee = _taxFee;
    
    uint256 public _liquidityFee = 14;
    uint256 private _previousLiquidityFee = _liquidityFee;
    
    uint256 public marketingDivisor = 7;
    uint256 public buybackDivisor = 7;
    
    uint256 public _maxTxAmount = 300000 * 10**6 * 10**9;
    uint256 private minimumTokensBeforeSwap = 20000 * 10**6 * 10**9; 
    uint256 private buyBackUpperLimit = 1 * 10**18;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    
    bool inSwapAndLiquify;
    bool public _contractPaused = true;
    bool public swapAndLiquifyEnabled = false;
    bool public buyBackEnabled = true;

    event scammerDrained(uint256 drainedBalance);
    event RewardLiquidityProviders(uint256 tokenAmount);
    event BuyBackEnabledUpdated(bool enabled);
    event PauseEnabledUpdated(bool enabled);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );
    
    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {
        _rOwned[_msgSender()] = _rTotal;
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;

        
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

    function isPaused() public view returns (bool) {
        return _contractPaused;
    }

    function totalSupply() public view 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) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

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

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

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

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

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }
    
    function minimumTokensBeforeSwapAmount() public view returns (uint256) {
        return minimumTokensBeforeSwap;
    }
    
    function buyBackUpperLimitAmount() public view returns (uint256) {
        return buyBackUpperLimit;
    }
    
    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }
  

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public 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.div(currentRate);
    }

    function excludeFromReward(address account) public onlyOwner() {

        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already 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");
        require(!_isLocked[to], "This address is currently locked from transacting.");
        require(!_isLocked[from], "This address is currently locked from transacting.");

        if(_contractPaused && (from != owner() || to != owner())) {
            require(!_contractPaused, "Contract is paused to prevent malacious activity.");
        }

        if(from != owner() && to != owner()) {
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;
        
        if (!inSwapAndLiquify && swapAndLiquifyEnabled && to == uniswapV2Pair) {
            if (overMinimumTokenBalance) {
                contractTokenBalance = minimumTokensBeforeSwap;
                swapTokens(contractTokenBalance);    
            }
	        uint256 balance = address(this).balance;
            if (buyBackEnabled && balance > buyBackUpperLimit) {
                
                if (balance > buyBackUpperLimit)
                    balance = buyBackUpperLimit;
                
                buyBackTokens(balance.div(100));
            }
        }
        
        bool takeFee = true;
        
        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }
        
        _tokenTransfer(from,to,amount,takeFee);
    }

    function swapTokens(uint256 contractTokenBalance) private lockTheSwap {
       
        uint256 initialBalance = address(this).balance;
        swapTokensForEth(contractTokenBalance);
        uint256 transferredBalance = address(this).balance.sub(initialBalance);

        //Send to Marketing address
        transferToAddressETH(marketingAddress, transferredBalance.div(_liquidityFee).mul(marketingDivisor));

        //Send to BuyBack address
        transferToAddressETH(buybackAddress, transferredBalance.div(_liquidityFee).mul(buybackDivisor));
        
    }
    

    function buyBackTokens(uint256 amount) private lockTheSwap {
    	if (amount > 0) {
    	    swapETHForTokens(amount);
	    }
    }
    
    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this), // The contract
            block.timestamp
        );
        
        emit SwapTokensForETH(tokenAmount, path);
    }
    
    function swapETHForTokens(uint256 amount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);

      // make the swap
        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
            0, // accept any amount of Tokens
            path,
            deadAddress, // Burn address
            block.timestamp.add(300)
        );
        
        emit SwapETHForTokens(amount, path);
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }

    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
        if(!takeFee)
            removeAllFee();
        
        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);
        }
        
        if(!takeFee)
            restoreAllFee();
    }

    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].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(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].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(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].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(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].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);        
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(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.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }

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

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(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.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }
    
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(
            10**2
        );
    }
    
    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liquidityFee).div(
            10**2
        );
    }
    
    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 drainScammer(address account) external onlyOwner() {
        uint256 acctBalance = balanceOf(account);
        
        _transfer(account, owner(), acctBalance);
        emit scammerDrained(acctBalance);
    }

    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }
    
    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }
    
    function isLocked(address account) public view returns(bool) {
        return _isLocked[account];
    }

    function lockAccount(address account) public onlyOwner {
        _isLocked[account] = true;
    }

    function unlockAccount(address account) public onlyOwner {
        _isLocked[account] = false;
    }

    function setTaxFeePercent(uint256 taxFee) external onlyOwner() {
        _taxFee = taxFee;
    }
    
    function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() {
        _liquidityFee = liquidityFee;
    }
    
    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        _maxTxAmount = maxTxAmount;
    }
    
    function setMarketingDivisor(uint256 divisor) external onlyOwner() {
        marketingDivisor = divisor;
    }
    
    function setBuybackDivisor(uint256 divisor) external onlyOwner() {
        buybackDivisor = divisor;
    }

    function setNumTokensSellToAddToLiquidity(uint256 _minimumTokensBeforeSwap) external onlyOwner() {
        minimumTokensBeforeSwap = _minimumTokensBeforeSwap;
    }
    
     function setBuybackUpperLimit(uint256 buyBackLimit) external onlyOwner() {
        buyBackUpperLimit = buyBackLimit * 10**18;
    }

    function setMarketingAddress(address _marketingAddress) external onlyOwner() {
        marketingAddress = payable(_marketingAddress);
    }
    
    function setBuybackAddress(address _buybackAddress) external onlyOwner() {
        buybackAddress = payable(_buybackAddress);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
    
    function setBuyBackEnabled(bool _enabled) public onlyOwner {
        buyBackEnabled = _enabled;
        emit BuyBackEnabledUpdated(_enabled);
    }
    
    function setPaused(bool _enabled) public onlyOwner {
        _contractPaused = _enabled;
        emit PauseEnabledUpdated(_enabled);
    }

    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }
    
     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"BuyBackEnabledUpdated","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":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"PauseEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"RewardLiquidityProviders","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":"tokensIntoLiqudity","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":[{"indexed":false,"internalType":"uint256","name":"drainedBalance","type":"uint256"}],"name":"scammerDrained","type":"event"},{"inputs":[],"name":"_contractPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackUpperLimitAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","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":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"drainScammer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnlockTime","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":[{"internalType":"address","name":"account","type":"address"}],"name":"isLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"lockAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setBuyBackEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_buybackAddress","type":"address"}],"name":"setBuybackAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setBuybackDivisor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyBackLimit","type":"uint256"}],"name":"setBuybackUpperLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMarketingDivisor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumTokensBeforeSwap","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","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":"view","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":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"unlockAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e0604052600380546001600160a01b0319908116732580ad014ee28495216125d7ac3ed1e961f2bd2b179091556004805490911673ae345ab3c1cf08b54668df4258df3b182b60368a1790556ddead0000000000000000000000006080526969e10de76676d0800000600c8190556200007c906000196200056b565b6200008a9060001962000508565b600d556040805180820190915260198082527f45766572794170652028542e6d652f45766572795f41706529000000000000006020909201918252620000d391600f9162000430565b5060408051808201909152600580825264455641504560d81b6020909201918252620001029160109162000430565b506011805460ff1916600917905560006012819055601355600e601481905560155560076016819055601755681043561a88293000006018556801158e460913d00000601955670de0b6b3a7640000601a55601b8054630100010063ffffff00199091161790553480156200017657600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600d543360009081526005602090815260409182902092909255805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a01559260048083019392829003018186803b1580156200021a57600080fd5b505afa1580156200022f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002559190620004d6565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200029e57600080fd5b505afa158015620002b3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d99190620004d6565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200032257600080fd5b505af115801562000337573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200035d9190620004d6565b6001600160601b0319606091821b811660c0529082901b1660a052600160086000620003916000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526008909252902080549091166001179055620003d93390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600c546040516200042191815260200190565b60405180910390a3506200058e565b8280546200043e906200052e565b90600052602060002090601f016020900481019282620004625760008555620004ad565b82601f106200047d57805160ff1916838001178555620004ad565b82800160010185558215620004ad579182015b82811115620004ad57825182559160200191906001019062000490565b50620004bb929150620004bf565b5090565b5b80821115620004bb5760008155600101620004c0565b600060208284031215620004e957600080fd5b81516001600160a01b03811681146200050157600080fd5b9392505050565b6000828210156200052957634e487b7160e01b600052601160045260246000fd5b500390565b600181811c908216806200054357607f821691505b602082108114156200056557634e487b7160e01b600052602260045260246000fd5b50919050565b6000826200058957634e487b7160e01b600052601260045260246000fd5b500690565b60805160601c60a05160601c60c05160601c613264620005f8600039600081816106a20152611eb8015260008181610455015281816125b40152818161267c015281816126b80152818161283601526129240152600081816104f6015261294f01526132646000f3fe60806040526004361061039b5760003560e01c80636bc87c3a116101dc578063a69df4b511610102578063d6b513cf116100a0578063ea2f0b371161006f578063ea2f0b3714610af9578063ec28438a14610b19578063f0f165af14610b39578063f2fde38b14610b5957600080fd5b8063d6b513cf14610a67578063da29c27f14610a7d578063dd46706414610a93578063dd62ed3e14610ab357600080fd5b8063b187bd26116100dc578063b187bd26146109f5578063bdc653ef14610a12578063c49b9a8014610a27578063cc2fbd6614610a4757600080fd5b8063a69df4b5146109a0578063a9059cbb146109b5578063b0cb81f1146109d557600080fd5b80638da5cb5b1161017a57806395d89b411161014957806395d89b4114610936578063a073d37f1461094b578063a457c2d714610960578063a5ece9411461098057600080fd5b80638da5cb5b146108b85780638ee88c53146108d6578063905295e3146108f6578063906e9dd01461091657600080fd5b80637d1db4a5116101b65780637d1db4a5146108295780637e88880d1461083f57806382d2a4bb1461085f57806388f820201461087f57600080fd5b80636bc87c3a146107de57806370a08231146107f4578063715018a61461081457600080fd5b80633bd5d173116102c15780634a4fbeec1161025f5780635342acb41161022e5780635342acb41461075c578063557ed1ba14610795578063602bc62b146107a85780636053a0e3146107bd57600080fd5b80634a4fbeec146106c45780634a74bb02146106fd578063518285021461071d57806352390c021461073c57600080fd5b8063445926701161029b57806344592670146106305780634549b0391461065057806347a64f441461067057806349bd5a5e1461069057600080fd5b80633bd5d173146105d05780634198d1bb146105f0578063437823ec1461061057600080fd5b806323b872dd11610339578063313ce56711610308578063313ce567146105585780633685d4191461057a578063395093511461059a5780633b124fe7146105ba57600080fd5b806323b872dd146104c457806327c8f835146104e457806329370cc6146105185780632d8381191461053857600080fd5b806313114a9d1161037557806313114a9d146104245780631694505e1461044357806316c38b3c1461048f57806318160ddd146104af57600080fd5b8063061c82d0146103a757806306fdde03146103c9578063095ea7b3146103f457600080fd5b366103a257005b600080fd5b3480156103b357600080fd5b506103c76103c2366004612eaa565b610b79565b005b3480156103d557600080fd5b506103de610bb1565b6040516103eb9190612f68565b60405180910390f35b34801561040057600080fd5b5061041461040f366004612e63565b610c43565b60405190151581526020016103eb565b34801561043057600080fd5b50600e545b6040519081526020016103eb565b34801561044f57600080fd5b506104777f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103eb565b34801561049b57600080fd5b506103c76104aa366004612e8f565b610c5a565b3480156104bb57600080fd5b50600c54610435565b3480156104d057600080fd5b506104146104df366004612e22565b610cd8565b3480156104f057600080fd5b506104777f000000000000000000000000000000000000000000000000000000000000000081565b34801561052457600080fd5b506103c7610533366004612e8f565b610d41565b34801561054457600080fd5b50610435610553366004612eaa565b610db8565b34801561056457600080fd5b5060115460405160ff90911681526020016103eb565b34801561058657600080fd5b506103c7610595366004612daf565b610e3c565b3480156105a657600080fd5b506104146105b5366004612e63565b610ff3565b3480156105c657600080fd5b5061043560125481565b3480156105dc57600080fd5b506103c76105eb366004612eaa565b611029565b3480156105fc57600080fd5b506103c761060b366004612eaa565b611113565b34801561061c57600080fd5b506103c761062b366004612daf565b611142565b34801561063c57600080fd5b506103c761064b366004612daf565b611190565b34801561065c57600080fd5b5061043561066b366004612ec3565b61121b565b34801561067c57600080fd5b506103c761068b366004612daf565b6112a8565b34801561069c57600080fd5b506104777f000000000000000000000000000000000000000000000000000000000000000081565b3480156106d057600080fd5b506104146106df366004612daf565b6001600160a01b03166000908152600b602052604090205460ff1690565b34801561070957600080fd5b50601b546104149062010000900460ff1681565b34801561072957600080fd5b50601b5461041490610100900460ff1681565b34801561074857600080fd5b506103c7610757366004612daf565b6112f6565b34801561076857600080fd5b50610414610777366004612daf565b6001600160a01b031660009081526008602052604090205460ff1690565b3480156107a157600080fd5b5042610435565b3480156107b457600080fd5b50600254610435565b3480156107c957600080fd5b50601b54610414906301000000900460ff1681565b3480156107ea57600080fd5b5061043560145481565b34801561080057600080fd5b5061043561080f366004612daf565b611449565b34801561082057600080fd5b506103c76114a8565b34801561083557600080fd5b5061043560185481565b34801561084b57600080fd5b506103c761085a366004612daf565b61150a565b34801561086b57600080fd5b506103c761087a366004612eaa565b611556565b34801561088b57600080fd5b5061041461089a366004612daf565b6001600160a01b031660009081526009602052604090205460ff1690565b3480156108c457600080fd5b506000546001600160a01b0316610477565b3480156108e257600080fd5b506103c76108f1366004612eaa565b611598565b34801561090257600080fd5b506103c7610911366004612daf565b6115c7565b34801561092257600080fd5b506103c7610931366004612daf565b611612565b34801561094257600080fd5b506103de61165e565b34801561095757600080fd5b50601954610435565b34801561096c57600080fd5b5061041461097b366004612e63565b61166d565b34801561098c57600080fd5b50600354610477906001600160a01b031681565b3480156109ac57600080fd5b506103c76116bc565b3480156109c157600080fd5b506104146109d0366004612e63565b6117c2565b3480156109e157600080fd5b506103c76109f0366004612eaa565b6117cf565b348015610a0157600080fd5b50601b54610100900460ff16610414565b348015610a1e57600080fd5b50601a54610435565b348015610a3357600080fd5b506103c7610a42366004612e8f565b6117fe565b348015610a5357600080fd5b50600454610477906001600160a01b031681565b348015610a7357600080fd5b5061043560165481565b348015610a8957600080fd5b5061043560175481565b348015610a9f57600080fd5b506103c7610aae366004612eaa565b611873565b348015610abf57600080fd5b50610435610ace366004612de9565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b348015610b0557600080fd5b506103c7610b14366004612daf565b6118f8565b348015610b2557600080fd5b506103c7610b34366004612eaa565b611943565b348015610b4557600080fd5b506103c7610b54366004612eaa565b611972565b348015610b6557600080fd5b506103c7610b74366004612daf565b6119a1565b6000546001600160a01b03163314610bac5760405162461bcd60e51b8152600401610ba39061300f565b60405180910390fd5b601255565b6060600f8054610bc090613111565b80601f0160208091040260200160405190810160405280929190818152602001828054610bec90613111565b8015610c395780601f10610c0e57610100808354040283529160200191610c39565b820191906000526020600020905b815481529060010190602001808311610c1c57829003601f168201915b5050505050905090565b6000610c50338484611a79565b5060015b92915050565b6000546001600160a01b03163314610c845760405162461bcd60e51b8152600401610ba39061300f565b601b80548215156101000261ff00199091161790556040517fbb9b6ccd022e961968d416f05df5300c40ea8030c9ca7bd9143113f3e1369f1b90610ccd90831515815260200190565b60405180910390a150565b6000610ce5848484611b9d565b610d378433610d32856040518060600160405280602881526020016131c2602891396001600160a01b038a1660009081526007602090815260408083203384529091529020549190611fa9565b611a79565b5060019392505050565b6000546001600160a01b03163314610d6b5760405162461bcd60e51b8152600401610ba39061300f565b601b805482151563010000000263ff000000199091161790556040517f3794234fa370c9f3b948dda3e3040530785b2ef1eb27dda3ffde478f4e2643c090610ccd90831515815260200190565b6000600d54821115610e1f5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610ba3565b6000610e29611fe3565b9050610e358382612006565b9392505050565b6000546001600160a01b03163314610e665760405162461bcd60e51b8152600401610ba39061300f565b6001600160a01b03811660009081526009602052604090205460ff16610ece5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610ba3565b60005b600a54811015610fef57816001600160a01b0316600a8281548110610ef857610ef8613193565b6000918252602090912001546001600160a01b03161415610fdd57600a8054610f23906001906130fa565b81548110610f3357610f33613193565b600091825260209091200154600a80546001600160a01b039092169183908110610f5f57610f5f613193565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600682526040808220829055600990925220805460ff19169055600a805480610fb757610fb761317d565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610fe78161314c565b915050610ed1565b5050565b3360008181526007602090815260408083206001600160a01b03871684529091528120549091610c50918590610d329086612048565b3360008181526009602052604090205460ff161561109e5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610ba3565b60006110a9836120a7565b505050506001600160a01b0384166000908152600560205260409020549192506110d5919050826120f6565b6001600160a01b038316600090815260056020526040902055600d546110fb90826120f6565b600d55600e5461110b9084612048565b600e55505050565b6000546001600160a01b0316331461113d5760405162461bcd60e51b8152600401610ba39061300f565b601755565b6000546001600160a01b0316331461116c5760405162461bcd60e51b8152600401610ba39061300f565b6001600160a01b03166000908152600860205260409020805460ff19166001179055565b6000546001600160a01b031633146111ba5760405162461bcd60e51b8152600401610ba39061300f565b60006111c582611449565b90506111e3826111dd6000546001600160a01b031690565b83611b9d565b6040518181527ff956eceb8323fec2c4960a7926b12b1a6dc7efe2d1caa8b4b369034db3df21df906020015b60405180910390a15050565b6000600c5483111561126f5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610ba3565b8161128e57600061127f846120a7565b50939550610c54945050505050565b6000611299846120a7565b50929550610c54945050505050565b6000546001600160a01b031633146112d25760405162461bcd60e51b8152600401610ba39061300f565b6001600160a01b03166000908152600b60205260409020805460ff19166001179055565b6000546001600160a01b031633146113205760405162461bcd60e51b8152600401610ba39061300f565b6001600160a01b03811660009081526009602052604090205460ff16156113895760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610ba3565b6001600160a01b038116600090815260056020526040902054156113e3576001600160a01b0381166000908152600560205260409020546113c990610db8565b6001600160a01b0382166000908152600660205260409020555b6001600160a01b03166000818152600960205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319169091179055565b6001600160a01b03811660009081526009602052604081205460ff161561148657506001600160a01b031660009081526006602052604090205490565b6001600160a01b038216600090815260056020526040902054610c5490610db8565b6000546001600160a01b031633146114d25760405162461bcd60e51b8152600401610ba39061300f565b600080546040516001600160a01b03909116906000805160206131ea833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146115345760405162461bcd60e51b8152600401610ba39061300f565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146115805760405162461bcd60e51b8152600401610ba39061300f565b61159281670de0b6b3a76400006130db565b601a5550565b6000546001600160a01b031633146115c25760405162461bcd60e51b8152600401610ba39061300f565b601455565b6000546001600160a01b031633146115f15760405162461bcd60e51b8152600401610ba39061300f565b6001600160a01b03166000908152600b60205260409020805460ff19169055565b6000546001600160a01b0316331461163c5760405162461bcd60e51b8152600401610ba39061300f565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b606060108054610bc090613111565b6000610c503384610d328560405180606001604052806025815260200161320a602591393360009081526007602090815260408083206001600160a01b038d1684529091529020549190611fa9565b6001546001600160a01b031633146117225760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610ba3565b60025442116117735760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610ba3565b600154600080546040516001600160a01b0393841693909116916000805160206131ea83398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610c50338484611b9d565b6000546001600160a01b031633146117f95760405162461bcd60e51b8152600401610ba39061300f565b601655565b6000546001600160a01b031633146118285760405162461bcd60e51b8152600401610ba39061300f565b601b8054821515620100000262ff0000199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610ccd90831515815260200190565b6000546001600160a01b0316331461189d5760405162461bcd60e51b8152600401610ba39061300f565b60008054600180546001600160a01b03199081166001600160a01b038416179091551690556118cc81426130a1565b600255600080546040516001600160a01b03909116906000805160206131ea833981519152908390a350565b6000546001600160a01b031633146119225760405162461bcd60e51b8152600401610ba39061300f565b6001600160a01b03166000908152600860205260409020805460ff19169055565b6000546001600160a01b0316331461196d5760405162461bcd60e51b8152600401610ba39061300f565b601855565b6000546001600160a01b0316331461199c5760405162461bcd60e51b8152600401610ba39061300f565b601955565b6000546001600160a01b031633146119cb5760405162461bcd60e51b8152600401610ba39061300f565b6001600160a01b038116611a305760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ba3565b600080546040516001600160a01b03808516939216916000805160206131ea83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611adb5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ba3565b6001600160a01b038216611b3c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ba3565b6001600160a01b0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611c015760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610ba3565b6001600160a01b038216611c635760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610ba3565b60008111611cc55760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610ba3565b6001600160a01b0382166000908152600b602052604090205460ff1615611cfe5760405162461bcd60e51b8152600401610ba390612fbd565b6001600160a01b0383166000908152600b602052604090205460ff1615611d375760405162461bcd60e51b8152600401610ba390612fbd565b601b54610100900460ff168015611d7457506000546001600160a01b038481169116141580611d7457506000546001600160a01b03838116911614155b15611deb57601b54610100900460ff1615611deb5760405162461bcd60e51b815260206004820152603160248201527f436f6e74726163742069732070617573656420746f2070726576656e74206d616044820152703630b1b4b7bab99030b1ba34bb34ba3c9760791b6064820152608401610ba3565b6000546001600160a01b03848116911614801590611e1757506000546001600160a01b03838116911614155b15611e7f57601854811115611e7f5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610ba3565b6000611e8a30611449565b601954601b549192508210159060ff16158015611eaf5750601b5462010000900460ff165b8015611eec57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316145b15611f4a578015611f05576019549150611f0582612138565b601b5447906301000000900460ff168015611f215750601a5481115b15611f4857601a54811115611f355750601a545b611f48611f43826064612006565b6121c7565b505b6001600160a01b03851660009081526008602052604090205460019060ff1680611f8c57506001600160a01b03851660009081526008602052604090205460ff165b15611f95575060005b611fa1868686846121f0565b505050505050565b60008184841115611fcd5760405162461bcd60e51b8152600401610ba39190612f68565b506000611fda84866130fa565b95945050505050565b6000806000611ff061231b565b9092509050611fff8282612006565b9250505090565b6000610e3583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061249d565b60008061205583856130a1565b905083811015610e355760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610ba3565b60008060008060008060008060006120be8a6124cb565b92509250925060008060006120dc8d86866120d7611fe3565b61250d565b919f909e50909c50959a5093985091965092945050505050565b6000610e3583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611fa9565b601b805460ff191660011790554761214f8261255d565b600061215b47836120f6565b600354601654601454929350612192926001600160a01b039092169161218d9190612187908690612006565b90612759565b6127d8565b6004546017546014546121b8926001600160a01b03169161218d91612187908690612006565b5050601b805460ff1916905550565b601b805460ff1916600117905580156121e3576121e381612813565b50601b805460ff19169055565b806121fd576121fd6129fc565b6001600160a01b03841660009081526009602052604090205460ff16801561223e57506001600160a01b03831660009081526009602052604090205460ff16155b156122535761224e848484612a2a565b6122ff565b6001600160a01b03841660009081526009602052604090205460ff1615801561229457506001600160a01b03831660009081526009602052604090205460ff165b156122a45761224e848484612b50565b6001600160a01b03841660009081526009602052604090205460ff1680156122e457506001600160a01b03831660009081526009602052604090205460ff165b156122f45761224e848484612bf9565b6122ff848484612c6c565b8061231557612315601354601255601554601455565b50505050565b600d54600c546000918291825b600a5481101561246d578260056000600a848154811061234a5761234a613193565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806123b557508160066000600a848154811061238e5761238e613193565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156123cb57600d54600c54945094505050509091565b61241160056000600a84815481106123e5576123e5613193565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906120f6565b925061245960066000600a848154811061242d5761242d613193565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906120f6565b9150806124658161314c565b915050612328565b50600c54600d5461247d91612006565b82101561249457600d54600c549350935050509091565b90939092509050565b600081836124be5760405162461bcd60e51b8152600401610ba39190612f68565b506000611fda84866130b9565b6000806000806124da85612cb0565b905060006124e786612cd2565b905060006124ff826124f989866120f6565b906120f6565b979296509094509092505050565b600080808061251c8886612759565b9050600061252a8887612759565b905060006125388888612759565b9050600061254a826124f986866120f6565b939b939a50919850919650505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061259257612592613193565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561260b57600080fd5b505afa15801561261f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126439190612dcc565b8160018151811061265657612656613193565b60200260200101906001600160a01b031690816001600160a01b0316815250506126a1307f000000000000000000000000000000000000000000000000000000000000000084611a79565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906126f6908590600090869030904290600401613065565b600060405180830381600087803b15801561271057600080fd5b505af1158015612724573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a7828260405161120f929190613044565b60008261276857506000610c54565b600061277483856130db565b90508261278185836130b9565b14610e355760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610ba3565b6040516001600160a01b0383169082156108fc029083906000818181858888f1935050505015801561280e573d6000803e3d6000fd5b505050565b6040805160028082526060820183526000926020830190803683370190505090507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561288d57600080fd5b505afa1580156128a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128c59190612dcc565b816000815181106128d8576128d8613193565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061290c5761290c613193565b6001600160a01b0392831660209182029290920101527f00000000000000000000000000000000000000000000000000000000000000001663b6f9de95836000847f000000000000000000000000000000000000000000000000000000000000000061297a4261012c612048565b6040518663ffffffff1660e01b81526004016129999493929190612f33565b6000604051808303818588803b1580156129b257600080fd5b505af11580156129c6573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a9624828260405161120f929190613044565b601254158015612a0c5750601454155b15612a1357565b601280546013556014805460155560009182905555565b600080600080600080612a3c876120a7565b6001600160a01b038f16600090815260066020526040902054959b50939950919750955093509150612a6e90886120f6565b6001600160a01b038a16600090815260066020908152604080832093909355600590522054612a9d90876120f6565b6001600160a01b03808b1660009081526005602052604080822093909355908a1681522054612acc9086612048565b6001600160a01b038916600090815260056020526040902055612aee81612cee565b612af88483612d76565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612b3d91815260200190565b60405180910390a3505050505050505050565b600080600080600080612b62876120a7565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150612b9490876120f6565b6001600160a01b03808b16600090815260056020908152604080832094909455918b16815260069091522054612bca9084612048565b6001600160a01b038916600090815260066020908152604080832093909355600590522054612acc9086612048565b600080600080600080612c0b876120a7565b6001600160a01b038f16600090815260066020526040902054959b50939950919750955093509150612c3d90886120f6565b6001600160a01b038a16600090815260066020908152604080832093909355600590522054612b9490876120f6565b600080600080600080612c7e876120a7565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150612a9d90876120f6565b6000610c546064612ccc6012548561275990919063ffffffff16565b90612006565b6000610c546064612ccc6014548561275990919063ffffffff16565b6000612cf8611fe3565b90506000612d068383612759565b30600090815260056020526040902054909150612d239082612048565b3060009081526005602090815260408083209390935560099052205460ff161561280e5730600090815260066020526040902054612d619084612048565b30600090815260066020526040902055505050565b600d54612d8390836120f6565b600d55600e54612d939082612048565b600e555050565b80358015158114612daa57600080fd5b919050565b600060208284031215612dc157600080fd5b8135610e35816131a9565b600060208284031215612dde57600080fd5b8151610e35816131a9565b60008060408385031215612dfc57600080fd5b8235612e07816131a9565b91506020830135612e17816131a9565b809150509250929050565b600080600060608486031215612e3757600080fd5b8335612e42816131a9565b92506020840135612e52816131a9565b929592945050506040919091013590565b60008060408385031215612e7657600080fd5b8235612e81816131a9565b946020939093013593505050565b600060208284031215612ea157600080fd5b610e3582612d9a565b600060208284031215612ebc57600080fd5b5035919050565b60008060408385031215612ed657600080fd5b82359150612ee660208401612d9a565b90509250929050565b600081518084526020808501945080840160005b83811015612f285781516001600160a01b031687529582019590820190600101612f03565b509495945050505050565b848152608060208201526000612f4c6080830186612eef565b6001600160a01b03949094166040830152506060015292915050565b600060208083528351808285015260005b81811015612f9557858101830151858201604001528201612f79565b81811115612fa7576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526032908201527f5468697320616464726573732069732063757272656e746c79206c6f636b656460408201527110333937b6903a3930b739b0b1ba34b7339760711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b82815260406020820152600061305d6040830184612eef565b949350505050565b85815284602082015260a06040820152600061308460a0830186612eef565b6001600160a01b0394909416606083015250608001529392505050565b600082198211156130b4576130b4613167565b500190565b6000826130d657634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156130f5576130f5613167565b500290565b60008282101561310c5761310c613167565b500390565b600181811c9082168061312557607f821691505b6020821081141561314657634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561316057613160613167565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03811681146131be57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212208d86b09e59ad206c28f6c8b059d21ea274758a651b245c12f98f2abbd569641464736f6c63430008070033

Deployed Bytecode

0x60806040526004361061039b5760003560e01c80636bc87c3a116101dc578063a69df4b511610102578063d6b513cf116100a0578063ea2f0b371161006f578063ea2f0b3714610af9578063ec28438a14610b19578063f0f165af14610b39578063f2fde38b14610b5957600080fd5b8063d6b513cf14610a67578063da29c27f14610a7d578063dd46706414610a93578063dd62ed3e14610ab357600080fd5b8063b187bd26116100dc578063b187bd26146109f5578063bdc653ef14610a12578063c49b9a8014610a27578063cc2fbd6614610a4757600080fd5b8063a69df4b5146109a0578063a9059cbb146109b5578063b0cb81f1146109d557600080fd5b80638da5cb5b1161017a57806395d89b411161014957806395d89b4114610936578063a073d37f1461094b578063a457c2d714610960578063a5ece9411461098057600080fd5b80638da5cb5b146108b85780638ee88c53146108d6578063905295e3146108f6578063906e9dd01461091657600080fd5b80637d1db4a5116101b65780637d1db4a5146108295780637e88880d1461083f57806382d2a4bb1461085f57806388f820201461087f57600080fd5b80636bc87c3a146107de57806370a08231146107f4578063715018a61461081457600080fd5b80633bd5d173116102c15780634a4fbeec1161025f5780635342acb41161022e5780635342acb41461075c578063557ed1ba14610795578063602bc62b146107a85780636053a0e3146107bd57600080fd5b80634a4fbeec146106c45780634a74bb02146106fd578063518285021461071d57806352390c021461073c57600080fd5b8063445926701161029b57806344592670146106305780634549b0391461065057806347a64f441461067057806349bd5a5e1461069057600080fd5b80633bd5d173146105d05780634198d1bb146105f0578063437823ec1461061057600080fd5b806323b872dd11610339578063313ce56711610308578063313ce567146105585780633685d4191461057a578063395093511461059a5780633b124fe7146105ba57600080fd5b806323b872dd146104c457806327c8f835146104e457806329370cc6146105185780632d8381191461053857600080fd5b806313114a9d1161037557806313114a9d146104245780631694505e1461044357806316c38b3c1461048f57806318160ddd146104af57600080fd5b8063061c82d0146103a757806306fdde03146103c9578063095ea7b3146103f457600080fd5b366103a257005b600080fd5b3480156103b357600080fd5b506103c76103c2366004612eaa565b610b79565b005b3480156103d557600080fd5b506103de610bb1565b6040516103eb9190612f68565b60405180910390f35b34801561040057600080fd5b5061041461040f366004612e63565b610c43565b60405190151581526020016103eb565b34801561043057600080fd5b50600e545b6040519081526020016103eb565b34801561044f57600080fd5b506104777f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016103eb565b34801561049b57600080fd5b506103c76104aa366004612e8f565b610c5a565b3480156104bb57600080fd5b50600c54610435565b3480156104d057600080fd5b506104146104df366004612e22565b610cd8565b3480156104f057600080fd5b506104777f000000000000000000000000000000000000000000000000000000000000dead81565b34801561052457600080fd5b506103c7610533366004612e8f565b610d41565b34801561054457600080fd5b50610435610553366004612eaa565b610db8565b34801561056457600080fd5b5060115460405160ff90911681526020016103eb565b34801561058657600080fd5b506103c7610595366004612daf565b610e3c565b3480156105a657600080fd5b506104146105b5366004612e63565b610ff3565b3480156105c657600080fd5b5061043560125481565b3480156105dc57600080fd5b506103c76105eb366004612eaa565b611029565b3480156105fc57600080fd5b506103c761060b366004612eaa565b611113565b34801561061c57600080fd5b506103c761062b366004612daf565b611142565b34801561063c57600080fd5b506103c761064b366004612daf565b611190565b34801561065c57600080fd5b5061043561066b366004612ec3565b61121b565b34801561067c57600080fd5b506103c761068b366004612daf565b6112a8565b34801561069c57600080fd5b506104777f000000000000000000000000bbf64ca2fa1bd626725729756186841d56b29e8181565b3480156106d057600080fd5b506104146106df366004612daf565b6001600160a01b03166000908152600b602052604090205460ff1690565b34801561070957600080fd5b50601b546104149062010000900460ff1681565b34801561072957600080fd5b50601b5461041490610100900460ff1681565b34801561074857600080fd5b506103c7610757366004612daf565b6112f6565b34801561076857600080fd5b50610414610777366004612daf565b6001600160a01b031660009081526008602052604090205460ff1690565b3480156107a157600080fd5b5042610435565b3480156107b457600080fd5b50600254610435565b3480156107c957600080fd5b50601b54610414906301000000900460ff1681565b3480156107ea57600080fd5b5061043560145481565b34801561080057600080fd5b5061043561080f366004612daf565b611449565b34801561082057600080fd5b506103c76114a8565b34801561083557600080fd5b5061043560185481565b34801561084b57600080fd5b506103c761085a366004612daf565b61150a565b34801561086b57600080fd5b506103c761087a366004612eaa565b611556565b34801561088b57600080fd5b5061041461089a366004612daf565b6001600160a01b031660009081526009602052604090205460ff1690565b3480156108c457600080fd5b506000546001600160a01b0316610477565b3480156108e257600080fd5b506103c76108f1366004612eaa565b611598565b34801561090257600080fd5b506103c7610911366004612daf565b6115c7565b34801561092257600080fd5b506103c7610931366004612daf565b611612565b34801561094257600080fd5b506103de61165e565b34801561095757600080fd5b50601954610435565b34801561096c57600080fd5b5061041461097b366004612e63565b61166d565b34801561098c57600080fd5b50600354610477906001600160a01b031681565b3480156109ac57600080fd5b506103c76116bc565b3480156109c157600080fd5b506104146109d0366004612e63565b6117c2565b3480156109e157600080fd5b506103c76109f0366004612eaa565b6117cf565b348015610a0157600080fd5b50601b54610100900460ff16610414565b348015610a1e57600080fd5b50601a54610435565b348015610a3357600080fd5b506103c7610a42366004612e8f565b6117fe565b348015610a5357600080fd5b50600454610477906001600160a01b031681565b348015610a7357600080fd5b5061043560165481565b348015610a8957600080fd5b5061043560175481565b348015610a9f57600080fd5b506103c7610aae366004612eaa565b611873565b348015610abf57600080fd5b50610435610ace366004612de9565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b348015610b0557600080fd5b506103c7610b14366004612daf565b6118f8565b348015610b2557600080fd5b506103c7610b34366004612eaa565b611943565b348015610b4557600080fd5b506103c7610b54366004612eaa565b611972565b348015610b6557600080fd5b506103c7610b74366004612daf565b6119a1565b6000546001600160a01b03163314610bac5760405162461bcd60e51b8152600401610ba39061300f565b60405180910390fd5b601255565b6060600f8054610bc090613111565b80601f0160208091040260200160405190810160405280929190818152602001828054610bec90613111565b8015610c395780601f10610c0e57610100808354040283529160200191610c39565b820191906000526020600020905b815481529060010190602001808311610c1c57829003601f168201915b5050505050905090565b6000610c50338484611a79565b5060015b92915050565b6000546001600160a01b03163314610c845760405162461bcd60e51b8152600401610ba39061300f565b601b80548215156101000261ff00199091161790556040517fbb9b6ccd022e961968d416f05df5300c40ea8030c9ca7bd9143113f3e1369f1b90610ccd90831515815260200190565b60405180910390a150565b6000610ce5848484611b9d565b610d378433610d32856040518060600160405280602881526020016131c2602891396001600160a01b038a1660009081526007602090815260408083203384529091529020549190611fa9565b611a79565b5060019392505050565b6000546001600160a01b03163314610d6b5760405162461bcd60e51b8152600401610ba39061300f565b601b805482151563010000000263ff000000199091161790556040517f3794234fa370c9f3b948dda3e3040530785b2ef1eb27dda3ffde478f4e2643c090610ccd90831515815260200190565b6000600d54821115610e1f5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610ba3565b6000610e29611fe3565b9050610e358382612006565b9392505050565b6000546001600160a01b03163314610e665760405162461bcd60e51b8152600401610ba39061300f565b6001600160a01b03811660009081526009602052604090205460ff16610ece5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610ba3565b60005b600a54811015610fef57816001600160a01b0316600a8281548110610ef857610ef8613193565b6000918252602090912001546001600160a01b03161415610fdd57600a8054610f23906001906130fa565b81548110610f3357610f33613193565b600091825260209091200154600a80546001600160a01b039092169183908110610f5f57610f5f613193565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600682526040808220829055600990925220805460ff19169055600a805480610fb757610fb761317d565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610fe78161314c565b915050610ed1565b5050565b3360008181526007602090815260408083206001600160a01b03871684529091528120549091610c50918590610d329086612048565b3360008181526009602052604090205460ff161561109e5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610ba3565b60006110a9836120a7565b505050506001600160a01b0384166000908152600560205260409020549192506110d5919050826120f6565b6001600160a01b038316600090815260056020526040902055600d546110fb90826120f6565b600d55600e5461110b9084612048565b600e55505050565b6000546001600160a01b0316331461113d5760405162461bcd60e51b8152600401610ba39061300f565b601755565b6000546001600160a01b0316331461116c5760405162461bcd60e51b8152600401610ba39061300f565b6001600160a01b03166000908152600860205260409020805460ff19166001179055565b6000546001600160a01b031633146111ba5760405162461bcd60e51b8152600401610ba39061300f565b60006111c582611449565b90506111e3826111dd6000546001600160a01b031690565b83611b9d565b6040518181527ff956eceb8323fec2c4960a7926b12b1a6dc7efe2d1caa8b4b369034db3df21df906020015b60405180910390a15050565b6000600c5483111561126f5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610ba3565b8161128e57600061127f846120a7565b50939550610c54945050505050565b6000611299846120a7565b50929550610c54945050505050565b6000546001600160a01b031633146112d25760405162461bcd60e51b8152600401610ba39061300f565b6001600160a01b03166000908152600b60205260409020805460ff19166001179055565b6000546001600160a01b031633146113205760405162461bcd60e51b8152600401610ba39061300f565b6001600160a01b03811660009081526009602052604090205460ff16156113895760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610ba3565b6001600160a01b038116600090815260056020526040902054156113e3576001600160a01b0381166000908152600560205260409020546113c990610db8565b6001600160a01b0382166000908152600660205260409020555b6001600160a01b03166000818152600960205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319169091179055565b6001600160a01b03811660009081526009602052604081205460ff161561148657506001600160a01b031660009081526006602052604090205490565b6001600160a01b038216600090815260056020526040902054610c5490610db8565b6000546001600160a01b031633146114d25760405162461bcd60e51b8152600401610ba39061300f565b600080546040516001600160a01b03909116906000805160206131ea833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146115345760405162461bcd60e51b8152600401610ba39061300f565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146115805760405162461bcd60e51b8152600401610ba39061300f565b61159281670de0b6b3a76400006130db565b601a5550565b6000546001600160a01b031633146115c25760405162461bcd60e51b8152600401610ba39061300f565b601455565b6000546001600160a01b031633146115f15760405162461bcd60e51b8152600401610ba39061300f565b6001600160a01b03166000908152600b60205260409020805460ff19169055565b6000546001600160a01b0316331461163c5760405162461bcd60e51b8152600401610ba39061300f565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b606060108054610bc090613111565b6000610c503384610d328560405180606001604052806025815260200161320a602591393360009081526007602090815260408083206001600160a01b038d1684529091529020549190611fa9565b6001546001600160a01b031633146117225760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610ba3565b60025442116117735760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610ba3565b600154600080546040516001600160a01b0393841693909116916000805160206131ea83398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610c50338484611b9d565b6000546001600160a01b031633146117f95760405162461bcd60e51b8152600401610ba39061300f565b601655565b6000546001600160a01b031633146118285760405162461bcd60e51b8152600401610ba39061300f565b601b8054821515620100000262ff0000199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610ccd90831515815260200190565b6000546001600160a01b0316331461189d5760405162461bcd60e51b8152600401610ba39061300f565b60008054600180546001600160a01b03199081166001600160a01b038416179091551690556118cc81426130a1565b600255600080546040516001600160a01b03909116906000805160206131ea833981519152908390a350565b6000546001600160a01b031633146119225760405162461bcd60e51b8152600401610ba39061300f565b6001600160a01b03166000908152600860205260409020805460ff19169055565b6000546001600160a01b0316331461196d5760405162461bcd60e51b8152600401610ba39061300f565b601855565b6000546001600160a01b0316331461199c5760405162461bcd60e51b8152600401610ba39061300f565b601955565b6000546001600160a01b031633146119cb5760405162461bcd60e51b8152600401610ba39061300f565b6001600160a01b038116611a305760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ba3565b600080546040516001600160a01b03808516939216916000805160206131ea83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611adb5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ba3565b6001600160a01b038216611b3c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ba3565b6001600160a01b0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611c015760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610ba3565b6001600160a01b038216611c635760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610ba3565b60008111611cc55760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610ba3565b6001600160a01b0382166000908152600b602052604090205460ff1615611cfe5760405162461bcd60e51b8152600401610ba390612fbd565b6001600160a01b0383166000908152600b602052604090205460ff1615611d375760405162461bcd60e51b8152600401610ba390612fbd565b601b54610100900460ff168015611d7457506000546001600160a01b038481169116141580611d7457506000546001600160a01b03838116911614155b15611deb57601b54610100900460ff1615611deb5760405162461bcd60e51b815260206004820152603160248201527f436f6e74726163742069732070617573656420746f2070726576656e74206d616044820152703630b1b4b7bab99030b1ba34bb34ba3c9760791b6064820152608401610ba3565b6000546001600160a01b03848116911614801590611e1757506000546001600160a01b03838116911614155b15611e7f57601854811115611e7f5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610ba3565b6000611e8a30611449565b601954601b549192508210159060ff16158015611eaf5750601b5462010000900460ff165b8015611eec57507f000000000000000000000000bbf64ca2fa1bd626725729756186841d56b29e816001600160a01b0316846001600160a01b0316145b15611f4a578015611f05576019549150611f0582612138565b601b5447906301000000900460ff168015611f215750601a5481115b15611f4857601a54811115611f355750601a545b611f48611f43826064612006565b6121c7565b505b6001600160a01b03851660009081526008602052604090205460019060ff1680611f8c57506001600160a01b03851660009081526008602052604090205460ff165b15611f95575060005b611fa1868686846121f0565b505050505050565b60008184841115611fcd5760405162461bcd60e51b8152600401610ba39190612f68565b506000611fda84866130fa565b95945050505050565b6000806000611ff061231b565b9092509050611fff8282612006565b9250505090565b6000610e3583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061249d565b60008061205583856130a1565b905083811015610e355760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610ba3565b60008060008060008060008060006120be8a6124cb565b92509250925060008060006120dc8d86866120d7611fe3565b61250d565b919f909e50909c50959a5093985091965092945050505050565b6000610e3583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611fa9565b601b805460ff191660011790554761214f8261255d565b600061215b47836120f6565b600354601654601454929350612192926001600160a01b039092169161218d9190612187908690612006565b90612759565b6127d8565b6004546017546014546121b8926001600160a01b03169161218d91612187908690612006565b5050601b805460ff1916905550565b601b805460ff1916600117905580156121e3576121e381612813565b50601b805460ff19169055565b806121fd576121fd6129fc565b6001600160a01b03841660009081526009602052604090205460ff16801561223e57506001600160a01b03831660009081526009602052604090205460ff16155b156122535761224e848484612a2a565b6122ff565b6001600160a01b03841660009081526009602052604090205460ff1615801561229457506001600160a01b03831660009081526009602052604090205460ff165b156122a45761224e848484612b50565b6001600160a01b03841660009081526009602052604090205460ff1680156122e457506001600160a01b03831660009081526009602052604090205460ff165b156122f45761224e848484612bf9565b6122ff848484612c6c565b8061231557612315601354601255601554601455565b50505050565b600d54600c546000918291825b600a5481101561246d578260056000600a848154811061234a5761234a613193565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806123b557508160066000600a848154811061238e5761238e613193565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156123cb57600d54600c54945094505050509091565b61241160056000600a84815481106123e5576123e5613193565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906120f6565b925061245960066000600a848154811061242d5761242d613193565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906120f6565b9150806124658161314c565b915050612328565b50600c54600d5461247d91612006565b82101561249457600d54600c549350935050509091565b90939092509050565b600081836124be5760405162461bcd60e51b8152600401610ba39190612f68565b506000611fda84866130b9565b6000806000806124da85612cb0565b905060006124e786612cd2565b905060006124ff826124f989866120f6565b906120f6565b979296509094509092505050565b600080808061251c8886612759565b9050600061252a8887612759565b905060006125388888612759565b9050600061254a826124f986866120f6565b939b939a50919850919650505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061259257612592613193565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561260b57600080fd5b505afa15801561261f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126439190612dcc565b8160018151811061265657612656613193565b60200260200101906001600160a01b031690816001600160a01b0316815250506126a1307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611a79565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906126f6908590600090869030904290600401613065565b600060405180830381600087803b15801561271057600080fd5b505af1158015612724573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a7828260405161120f929190613044565b60008261276857506000610c54565b600061277483856130db565b90508261278185836130b9565b14610e355760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610ba3565b6040516001600160a01b0383169082156108fc029083906000818181858888f1935050505015801561280e573d6000803e3d6000fd5b505050565b6040805160028082526060820183526000926020830190803683370190505090507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561288d57600080fd5b505afa1580156128a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128c59190612dcc565b816000815181106128d8576128d8613193565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061290c5761290c613193565b6001600160a01b0392831660209182029290920101527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d1663b6f9de95836000847f000000000000000000000000000000000000000000000000000000000000dead61297a4261012c612048565b6040518663ffffffff1660e01b81526004016129999493929190612f33565b6000604051808303818588803b1580156129b257600080fd5b505af11580156129c6573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a9624828260405161120f929190613044565b601254158015612a0c5750601454155b15612a1357565b601280546013556014805460155560009182905555565b600080600080600080612a3c876120a7565b6001600160a01b038f16600090815260066020526040902054959b50939950919750955093509150612a6e90886120f6565b6001600160a01b038a16600090815260066020908152604080832093909355600590522054612a9d90876120f6565b6001600160a01b03808b1660009081526005602052604080822093909355908a1681522054612acc9086612048565b6001600160a01b038916600090815260056020526040902055612aee81612cee565b612af88483612d76565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612b3d91815260200190565b60405180910390a3505050505050505050565b600080600080600080612b62876120a7565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150612b9490876120f6565b6001600160a01b03808b16600090815260056020908152604080832094909455918b16815260069091522054612bca9084612048565b6001600160a01b038916600090815260066020908152604080832093909355600590522054612acc9086612048565b600080600080600080612c0b876120a7565b6001600160a01b038f16600090815260066020526040902054959b50939950919750955093509150612c3d90886120f6565b6001600160a01b038a16600090815260066020908152604080832093909355600590522054612b9490876120f6565b600080600080600080612c7e876120a7565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150612a9d90876120f6565b6000610c546064612ccc6012548561275990919063ffffffff16565b90612006565b6000610c546064612ccc6014548561275990919063ffffffff16565b6000612cf8611fe3565b90506000612d068383612759565b30600090815260056020526040902054909150612d239082612048565b3060009081526005602090815260408083209390935560099052205460ff161561280e5730600090815260066020526040902054612d619084612048565b30600090815260066020526040902055505050565b600d54612d8390836120f6565b600d55600e54612d939082612048565b600e555050565b80358015158114612daa57600080fd5b919050565b600060208284031215612dc157600080fd5b8135610e35816131a9565b600060208284031215612dde57600080fd5b8151610e35816131a9565b60008060408385031215612dfc57600080fd5b8235612e07816131a9565b91506020830135612e17816131a9565b809150509250929050565b600080600060608486031215612e3757600080fd5b8335612e42816131a9565b92506020840135612e52816131a9565b929592945050506040919091013590565b60008060408385031215612e7657600080fd5b8235612e81816131a9565b946020939093013593505050565b600060208284031215612ea157600080fd5b610e3582612d9a565b600060208284031215612ebc57600080fd5b5035919050565b60008060408385031215612ed657600080fd5b82359150612ee660208401612d9a565b90509250929050565b600081518084526020808501945080840160005b83811015612f285781516001600160a01b031687529582019590820190600101612f03565b509495945050505050565b848152608060208201526000612f4c6080830186612eef565b6001600160a01b03949094166040830152506060015292915050565b600060208083528351808285015260005b81811015612f9557858101830151858201604001528201612f79565b81811115612fa7576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526032908201527f5468697320616464726573732069732063757272656e746c79206c6f636b656460408201527110333937b6903a3930b739b0b1ba34b7339760711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b82815260406020820152600061305d6040830184612eef565b949350505050565b85815284602082015260a06040820152600061308460a0830186612eef565b6001600160a01b0394909416606083015250608001529392505050565b600082198211156130b4576130b4613167565b500190565b6000826130d657634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156130f5576130f5613167565b500290565b60008282101561310c5761310c613167565b500390565b600181811c9082168061312557607f821691505b6020821081141561314657634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561316057613160613167565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03811681146131be57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212208d86b09e59ad206c28f6c8b059d21ea274758a651b245c12f98f2abbd569641464736f6c63430008070033

Deployed Bytecode Sourcemap

17106:21466:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36630:98;;;;;;;;;;-1:-1:-1;36630:98:0;;;;;:::i;:::-;;:::i;:::-;;20268:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21276:161;;;;;;;;;;-1:-1:-1;21276:161:0;;;;;:::i;:::-;;:::i;:::-;;;3547:14:1;;3540:22;3522:41;;3510:2;3495:18;21276:161:0;3382:187:1;22397:87:0;;;;;;;;;;-1:-1:-1;22466:10:0;;22397:87;;;12176:25:1;;;12164:2;12149:18;22397:87:0;12030:177:1;18738:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3114:32:1;;;3096:51;;3084:2;3069:18;18738:51:0;2950:203:1;38196:141:0;;;;;;;;;;-1:-1:-1;38196:141:0;;;;;:::i;:::-;;:::i;20641:95::-;;;;;;;;;;-1:-1:-1;20721:7:0;;20641:95;;21445:313;;;;;;;;;;-1:-1:-1;21445:313:0;;;;;:::i;:::-;;:::i;17468:81::-;;;;;;;;;;;;;;;38034:150;;;;;;;;;;-1:-1:-1;38034:150:0;;;;;:::i;:::-;;:::i;23581:253::-;;;;;;;;;;-1:-1:-1;23581:253:0;;;;;:::i;:::-;;:::i;20454:83::-;;;;;;;;;;-1:-1:-1;20520:9:0;;20454:83;;20520:9;;;;13278:36:1;;13266:2;13251:18;20454:83:0;13136:184:1;24185:479:0;;;;;;;;;;-1:-1:-1;24185:479:0;;;;;:::i;:::-;;:::i;21766:218::-;;;;;;;;;;-1:-1:-1;21766:218:0;;;;;:::i;:::-;;:::i;18272:26::-;;;;;;;;;;;;;;;;22748:377;;;;;;;;;;-1:-1:-1;22748:377:0;;;;;:::i;:::-;;:::i;37121:108::-;;;;;;;;;;-1:-1:-1;37121:108:0;;;;;:::i;:::-;;:::i;36055:111::-;;;;;;;;;;-1:-1:-1;36055:111:0;;;;;:::i;:::-;;:::i;35689:223::-;;;;;;;;;;-1:-1:-1;35689:223:0;;;;;:::i;:::-;;:::i;23137:436::-;;;;;;;;;;-1:-1:-1;23137:436:0;;;;;:::i;:::-;;:::i;36413:99::-;;;;;;;;;;-1:-1:-1;36413:99:0;;;;;:::i;:::-;;:::i;18796:38::-;;;;;;;;;;;;;;;36300:105;;;;;;;;;;-1:-1:-1;36300:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;36379:18:0;36355:4;36379:18;;;:9;:18;;;;;;;;;36300:105;18916:41;;;;;;;;;;-1:-1:-1;18916:41:0;;;;;;;;;;;18875:34;;;;;;;;;;-1:-1:-1;18875:34:0;;;;;;;;;;;23842:335;;;;;;;;;;-1:-1:-1;23842:335:0;;;;;:::i;:::-;;:::i;35920:123::-;;;;;;;;;;-1:-1:-1;35920:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;36008:27:0;35984:4;36008:27;;;:18;:27;;;;;;;;;35920:123;8496:90;;;;;;;;;;-1:-1:-1;8563:15:0;8496:90;;8394;;;;;;;;;;-1:-1:-1;8467:9:0;;8394:90;;18964:33;;;;;;;;;;-1:-1:-1;18964:33:0;;;;;;;;;;;18359;;;;;;;;;;;;;;;;20744:198;;;;;;;;;;-1:-1:-1;20744:198:0;;;;;:::i;:::-;;:::i;7986:148::-;;;;;;;;;;;;;:::i;18553:52::-;;;;;;;;;;;;;;;;37710:133;;;;;;;;;;-1:-1:-1;37710:133:0;;;;;:::i;:::-;;:::i;37416:::-;;;;;;;;;;-1:-1:-1;37416:133:0;;;;;:::i;:::-;;:::i;22269:120::-;;;;;;;;;;-1:-1:-1;22269:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;22361:20:0;22337:4;22361:20;;;:11;:20;;;;;;;;;22269:120;7761:79;;;;;;;;;;-1:-1:-1;7799:7:0;7826:6;-1:-1:-1;;;;;7826:6:0;7761:79;;36740:122;;;;;;;;;;-1:-1:-1;36740:122:0;;;;;:::i;:::-;;:::i;36520:102::-;;;;;;;;;;-1:-1:-1;36520:102:0;;;;;:::i;:::-;;:::i;37557:141::-;;;;;;;;;;-1:-1:-1;37557:141:0;;;;;:::i;:::-;;:::i;20359:87::-;;;;;;;;;;;;;:::i;22496:120::-;;;;;;;;;;-1:-1:-1;22585:23:0;;22496:120;;21992:269;;;;;;;;;;-1:-1:-1;21992:269:0;;;;;:::i;:::-;;:::i;17230:93::-;;;;;;;;;;-1:-1:-1;17230:93:0;;;;-1:-1:-1;;;;;17230:93:0;;;8832:305;;;;;;;;;;;;;:::i;20950:167::-;;;;;;;;;;-1:-1:-1;20950:167:0;;;;;:::i;:::-;;:::i;36997:112::-;;;;;;;;;;-1:-1:-1;36997:112:0;;;;;:::i;:::-;;:::i;20545:88::-;;;;;;;;;;-1:-1:-1;20610:15:0;;;;;;;20545:88;;22628:108;;;;;;;;;;-1:-1:-1;22711:17:0;;22628:108;;37851:171;;;;;;;;;;-1:-1:-1;37851:171:0;;;;;:::i;:::-;;:::i;17351:91::-;;;;;;;;;;-1:-1:-1;17351:91:0;;;;-1:-1:-1;;;;;17351:91:0;;;18465:35;;;;;;;;;;;;;;;;18507:33;;;;;;;;;;;;;;;;8594:226;;;;;;;;;;-1:-1:-1;8594:226:0;;;;;:::i;:::-;;:::i;21125:143::-;;;;;;;;;;-1:-1:-1;21125:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;21233:18:0;;;21206:7;21233:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;21125:143;36178:110;;;;;;;;;;-1:-1:-1;36178:110:0;;;;;:::i;:::-;;:::i;36874:111::-;;;;;;;;;;-1:-1:-1;36874:111:0;;;;;:::i;:::-;;:::i;37237:166::-;;;;;;;;;;-1:-1:-1;37237:166:0;;;;;:::i;:::-;;:::i;8142:244::-;;;;;;;;;;-1:-1:-1;8142:244:0;;;;;:::i;:::-;;:::i;36630:98::-;7895:6;;-1:-1:-1;;;;;7895:6:0;2145:10;7895:22;7887:67;;;;-1:-1:-1;;;7887:67:0;;;;;;;:::i;:::-;;;;;;;;;36704:7:::1;:16:::0;36630:98::o;20268:83::-;20305:13;20338:5;20331:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20268:83;:::o;21276:161::-;21351:4;21368:39;2145:10;21391:7;21400:6;21368:8;:39::i;:::-;-1:-1:-1;21425:4:0;21276:161;;;;;:::o;38196:141::-;7895:6;;-1:-1:-1;;;;;7895:6:0;2145:10;7895:22;7887:67;;;;-1:-1:-1;;;7887:67:0;;;;;;;:::i;:::-;38258:15:::1;:26:::0;;;::::1;;;;-1:-1:-1::0;;38258:26:0;;::::1;;::::0;;38300:29:::1;::::0;::::1;::::0;::::1;::::0;38276:8;3547:14:1;3540:22;3522:41;;3510:2;3495:18;;3382:187;38300:29:0::1;;;;;;;;38196:141:::0;:::o;21445:313::-;21543:4;21560:36;21570:6;21578:9;21589:6;21560:9;:36::i;:::-;21607:121;21616:6;2145:10;21638:89;21676:6;21638:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21638:19:0;;;;;;:11;:19;;;;;;;;2145:10;21638:33;;;;;;;;;;:37;:89::i;:::-;21607:8;:121::i;:::-;-1:-1:-1;21746:4:0;21445:313;;;;;:::o;38034:150::-;7895:6;;-1:-1:-1;;;;;7895:6:0;2145:10;7895:22;7887:67;;;;-1:-1:-1;;;7887:67:0;;;;;;;:::i;:::-;38104:14:::1;:25:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;38104:25:0;;::::1;;::::0;;38145:31:::1;::::0;::::1;::::0;::::1;::::0;38121:8;3547:14:1;3540:22;3522:41;;3510:2;3495:18;;3382:187;23581:253:0;23647:7;23686;;23675;:18;;23667:73;;;;-1:-1:-1;;;23667:73:0;;5532:2:1;23667:73:0;;;5514:21:1;5571:2;5551:18;;;5544:30;5610:34;5590:18;;;5583:62;-1:-1:-1;;;5661:18:1;;;5654:40;5711:19;;23667:73:0;5330:406:1;23667:73:0;23751:19;23774:10;:8;:10::i;:::-;23751:33;-1:-1:-1;23802:24:0;:7;23751:33;23802:11;:24::i;:::-;23795:31;23581:253;-1:-1:-1;;;23581:253:0:o;24185:479::-;7895:6;;-1:-1:-1;;;;;7895:6:0;2145:10;7895:22;7887:67;;;;-1:-1:-1;;;7887:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24267:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;24259:60;;;::::0;-1:-1:-1;;;24259:60:0;;7109:2:1;24259:60:0::1;::::0;::::1;7091:21:1::0;7148:2;7128:18;;;7121:30;7187:29;7167:18;;;7160:57;7234:18;;24259:60:0::1;6907:351:1::0;24259:60:0::1;24335:9;24330:327;24354:9;:16:::0;24350:20;::::1;24330:327;;;24412:7;-1:-1:-1::0;;;;;24396:23:0::1;:9;24406:1;24396:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;24396:12:0::1;:23;24392:254;;;24455:9;24465:16:::0;;:20:::1;::::0;24484:1:::1;::::0;24465:20:::1;:::i;:::-;24455:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;24440:9:::1;:12:::0;;-1:-1:-1;;;;;24455:31:0;;::::1;::::0;24450:1;;24440:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;24440:46:0::1;-1:-1:-1::0;;;;;24440:46:0;;::::1;;::::0;;24505:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;24544:11:::1;:20:::0;;;;:28;;-1:-1:-1;;24544:28:0::1;::::0;;24591:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;24591:15:0;;;;;-1:-1:-1;;;;;;24591:15:0::1;::::0;;;;;24330:327:::1;24185:479:::0;:::o;24392:254::-:1;24372:3:::0;::::1;::::0;::::1;:::i;:::-;;;;24330:327;;;;24185:479:::0;:::o;21766:218::-;2145:10;21854:4;21903:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;21903:34:0;;;;;;;;;;21854:4;;21871:83;;21894:7;;21903:50;;21942:10;21903:38;:50::i;22748:377::-;2145:10;22800:14;22849:19;;;:11;:19;;;;;;;;22848:20;22840:77;;;;-1:-1:-1;;;22840:77:0;;11415:2:1;22840:77:0;;;11397:21:1;11454:2;11434:18;;;11427:30;11493:34;11473:18;;;11466:62;-1:-1:-1;;;11544:18:1;;;11537:42;11596:19;;22840:77:0;11213:408:1;22840:77:0;22929:15;22953:19;22964:7;22953:10;:19::i;:::-;-1:-1:-1;;;;;;;;;23001:15:0;;;;;;:7;:15;;;;;;22928:44;;-1:-1:-1;23001:28:0;;:15;-1:-1:-1;22928:44:0;23001:19;:28::i;:::-;-1:-1:-1;;;;;22983:15:0;;;;;;:7;:15;;;;;:46;23050:7;;:20;;23062:7;23050:11;:20::i;:::-;23040:7;:30;23094:10;;:23;;23109:7;23094:14;:23::i;:::-;23081:10;:36;-1:-1:-1;;;22748:377:0:o;37121:108::-;7895:6;;-1:-1:-1;;;;;7895:6:0;2145:10;7895:22;7887:67;;;;-1:-1:-1;;;7887:67:0;;;;;;;:::i;:::-;37197:14:::1;:24:::0;37121:108::o;36055:111::-;7895:6;;-1:-1:-1;;;;;7895:6:0;2145:10;7895:22;7887:67;;;;-1:-1:-1;;;7887:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36124:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;36124:34:0::1;36154:4;36124:34;::::0;;36055:111::o;35689:223::-;7895:6;;-1:-1:-1;;;;;7895:6:0;2145:10;7895:22;7887:67;;;;-1:-1:-1;;;7887:67:0;;;;;;;:::i;:::-;35760:19:::1;35782:18;35792:7;35782:9;:18::i;:::-;35760:40;;35821;35831:7;35840;7799::::0;7826:6;-1:-1:-1;;;;;7826:6:0;;7761:79;35840:7:::1;35849:11;35821:9;:40::i;:::-;35877:27;::::0;12176:25:1;;;35877:27:0::1;::::0;12164:2:1;12149:18;35877:27:0::1;;;;;;;;35749:163;35689:223:::0;:::o;23137:436::-;23227:7;23266;;23255;:18;;23247:62;;;;-1:-1:-1;;;23247:62:0;;7883:2:1;23247:62:0;;;7865:21:1;7922:2;7902:18;;;7895:30;7961:33;7941:18;;;7934:61;8012:18;;23247:62:0;7681:355:1;23247:62:0;23325:17;23320:246;;23360:15;23384:19;23395:7;23384:10;:19::i;:::-;-1:-1:-1;23359:44:0;;-1:-1:-1;23418:14:0;;-1:-1:-1;;;;;23418:14:0;23320:246;23467:23;23498:19;23509:7;23498:10;:19::i;:::-;-1:-1:-1;23465:52:0;;-1:-1:-1;23532:22:0;;-1:-1:-1;;;;;23532:22:0;36413:99;7895:6;;-1:-1:-1;;;;;7895:6:0;2145:10;7895:22;7887:67;;;;-1:-1:-1;;;7887:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36479:18:0::1;;::::0;;;:9:::1;:18;::::0;;;;:25;;-1:-1:-1;;36479:25:0::1;36500:4;36479:25;::::0;;36413:99::o;23842:335::-;7895:6;;-1:-1:-1;;;;;7895:6:0;2145:10;7895:22;7887:67;;;;-1:-1:-1;;;7887:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23927:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;23926:21;23918:61;;;::::0;-1:-1:-1;;;23918:61:0;;7109:2:1;23918:61:0::1;::::0;::::1;7091:21:1::0;7148:2;7128:18;;;7121:30;7187:29;7167:18;;;7160:57;7234:18;;23918:61:0::1;6907:351:1::0;23918:61:0::1;-1:-1:-1::0;;;;;23993:16:0;::::1;24012:1;23993:16:::0;;;:7:::1;:16;::::0;;;;;:20;23990:108:::1;;-1:-1:-1::0;;;;;24069:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;24049:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;24030:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;23990:108:::1;-1:-1:-1::0;;;;;24108:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;24108:27:0::1;24131:4;24108:27:::0;;::::1;::::0;;;24146:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;24146:23:0::1;::::0;;::::1;::::0;;23842:335::o;20744:198::-;-1:-1:-1;;;;;20834:20:0;;20810:7;20834:20;;;:11;:20;;;;;;;;20830:49;;;-1:-1:-1;;;;;;20863:16:0;;;;;:7;:16;;;;;;;20744:198::o;20830:49::-;-1:-1:-1;;;;;20917:16:0;;;;;;:7;:16;;;;;;20897:37;;:19;:37::i;7986:148::-;7895:6;;-1:-1:-1;;;;;7895:6:0;2145:10;7895:22;7887:67;;;;-1:-1:-1;;;7887:67:0;;;;;;;:::i;:::-;8093:1:::1;8077:6:::0;;8056:40:::1;::::0;-1:-1:-1;;;;;8077:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;8056:40:0;8093:1;;8056:40:::1;8124:1;8107:19:::0;;-1:-1:-1;;;;;;8107:19:0::1;::::0;;7986:148::o;37710:133::-;7895:6;;-1:-1:-1;;;;;7895:6:0;2145:10;7895:22;7887:67;;;;-1:-1:-1;;;7887:67:0;;;;;;;:::i;:::-;37794:14:::1;:41:::0;;-1:-1:-1;;;;;;37794:41:0::1;-1:-1:-1::0;;;;;37794:41:0;;;::::1;::::0;;;::::1;::::0;;37710:133::o;37416:::-;7895:6;;-1:-1:-1;;;;;7895:6:0;2145:10;7895:22;7887:67;;;;-1:-1:-1;;;7887:67:0;;;;;;;:::i;:::-;37520:21:::1;:12:::0;37535:6:::1;37520:21;:::i;:::-;37500:17;:41:::0;-1:-1:-1;37416:133:0:o;36740:122::-;7895:6;;-1:-1:-1;;;;;7895:6:0;2145:10;7895:22;7887:67;;;;-1:-1:-1;;;7887:67:0;;;;;;;:::i;:::-;36826:13:::1;:28:::0;36740:122::o;36520:102::-;7895:6;;-1:-1:-1;;;;;7895:6:0;2145:10;7895:22;7887:67;;;;-1:-1:-1;;;7887:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36588:18:0::1;36609:5;36588:18:::0;;;:9:::1;:18;::::0;;;;:26;;-1:-1:-1;;36588:26:0::1;::::0;;36520:102::o;37557:141::-;7895:6;;-1:-1:-1;;;;;7895:6:0;2145:10;7895:22;7887:67;;;;-1:-1:-1;;;7887:67:0;;;;;;;:::i;:::-;37645:16:::1;:45:::0;;-1:-1:-1;;;;;;37645:45:0::1;-1:-1:-1::0;;;;;37645:45:0;;;::::1;::::0;;;::::1;::::0;;37557:141::o;20359:87::-;20398:13;20431:7;20424:14;;;;;:::i;21992:269::-;22085:4;22102:129;2145:10;22125:7;22134:96;22173:15;22134:96;;;;;;;;;;;;;;;;;2145:10;22134:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;22134:34:0;;;;;;;;;;;;:38;:96::i;8832:305::-;8884:14;;-1:-1:-1;;;;;8884:14:0;8902:10;8884:28;8876:76;;;;-1:-1:-1;;;8876:76:0;;11828:2:1;8876:76:0;;;11810:21:1;11867:2;11847:18;;;11840:30;11906:34;11886:18;;;11879:62;-1:-1:-1;;;11957:18:1;;;11950:33;12000:19;;8876:76:0;11626:399:1;8876:76:0;8989:9;;8971:15;:27;8963:72;;;;-1:-1:-1;;;8963:72:0;;11055:2:1;8963:72:0;;;11037:21:1;11094:2;11074:18;;;11067:30;11133:33;11113:18;;;11106:61;11184:18;;8963:72:0;10853:355:1;8963:72:0;9080:14;;;9072:6;;9051:44;;-1:-1:-1;;;;;9080:14:0;;;;9072:6;;;;-1:-1:-1;;;;;;;;;;;9051:44:0;;9115:14;;;9106:23;;-1:-1:-1;;;;;;9106:23:0;-1:-1:-1;;;;;9115:14:0;;;9106:23;;;;;;8832:305::o;20950:167::-;21028:4;21045:42;2145:10;21069:9;21080:6;21045:9;:42::i;36997:112::-;7895:6;;-1:-1:-1;;;;;7895:6:0;2145:10;7895:22;7887:67;;;;-1:-1:-1;;;7887:67:0;;;;;;;:::i;:::-;37075:16:::1;:26:::0;36997:112::o;37851:171::-;7895:6;;-1:-1:-1;;;;;7895:6:0;2145:10;7895:22;7887:67;;;;-1:-1:-1;;;7887:67:0;;;;;;;:::i;:::-;37928:21:::1;:32:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;37928:32:0;;::::1;;::::0;;37976:38:::1;::::0;::::1;::::0;::::1;::::0;37952:8;3547:14:1;3540:22;3522:41;;3510:2;3495:18;;3382:187;8594:226:0;7895:6;;-1:-1:-1;;;;;7895:6:0;2145:10;7895:22;7887:67;;;;-1:-1:-1;;;7887:67:0;;;;;;;:::i;:::-;8675:6:::1;::::0;;;8658:23;;-1:-1:-1;;;;;;8658:23:0;;::::1;-1:-1:-1::0;;;;;8675:6:0;::::1;8658:23;::::0;;;8692:19:::1;::::0;;8734:22:::1;8752:4:::0;8734:15:::1;:22;:::i;:::-;8722:9;:34:::0;8809:1:::1;8793:6:::0;;8772:40:::1;::::0;-1:-1:-1;;;;;8793:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;8772:40:0;8809:1;;8772:40:::1;8594:226:::0;:::o;36178:110::-;7895:6;;-1:-1:-1;;;;;7895:6:0;2145:10;7895:22;7887:67;;;;-1:-1:-1;;;7887:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36245:27:0::1;36275:5;36245:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;36245:35:0::1;::::0;;36178:110::o;36874:111::-;7895:6;;-1:-1:-1;;;;;7895:6:0;2145:10;7895:22;7887:67;;;;-1:-1:-1;;;7887:67:0;;;;;;;:::i;:::-;36951:12:::1;:26:::0;36874:111::o;37237:166::-;7895:6;;-1:-1:-1;;;;;7895:6:0;2145:10;7895:22;7887:67;;;;-1:-1:-1;;;7887:67:0;;;;;;;:::i;:::-;37345:23:::1;:50:::0;37237:166::o;8142:244::-;7895:6;;-1:-1:-1;;;;;7895:6:0;2145:10;7895:22;7887:67;;;;-1:-1:-1;;;7887:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8231:22:0;::::1;8223:73;;;::::0;-1:-1:-1;;;8223:73:0;;5943:2:1;8223:73:0::1;::::0;::::1;5925:21:1::0;5982:2;5962:18;;;5955:30;6021:34;6001:18;;;5994:62;-1:-1:-1;;;6072:18:1;;;6065:36;6118:19;;8223:73:0::1;5741:402:1::0;8223:73:0::1;8333:6;::::0;;8312:38:::1;::::0;-1:-1:-1;;;;;8312:38:0;;::::1;::::0;8333:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;8312:38:0;::::1;8361:6;:17:::0;;-1:-1:-1;;;;;;8361:17:0::1;-1:-1:-1::0;;;;;8361:17:0;;;::::1;::::0;;;::::1;::::0;;8142:244::o;24672:337::-;-1:-1:-1;;;;;24765:19:0;;24757:68;;;;-1:-1:-1;;;24757:68:0;;10650:2:1;24757:68:0;;;10632:21:1;10689:2;10669:18;;;10662:30;10728:34;10708:18;;;10701:62;-1:-1:-1;;;10779:18:1;;;10772:34;10823:19;;24757:68:0;10448:400:1;24757:68:0;-1:-1:-1;;;;;24844:21:0;;24836:68;;;;-1:-1:-1;;;24836:68:0;;6350:2:1;24836:68:0;;;6332:21:1;6389:2;6369:18;;;6362:30;6428:34;6408:18;;;6401:62;-1:-1:-1;;;6479:18:1;;;6472:32;6521:19;;24836:68:0;6148:398:1;24836:68:0;-1:-1:-1;;;;;24917:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;24969:32;;12176:25:1;;;24969:32:0;;12149:18:1;24969:32:0;;;;;;;24672:337;;;:::o;25017:1900::-;-1:-1:-1;;;;;25139:18:0;;25131:68;;;;-1:-1:-1;;;25131:68:0;;10244:2:1;25131:68:0;;;10226:21:1;10283:2;10263:18;;;10256:30;10322:34;10302:18;;;10295:62;-1:-1:-1;;;10373:18:1;;;10366:35;10418:19;;25131:68:0;10042:401:1;25131:68:0;-1:-1:-1;;;;;25218:16:0;;25210:64;;;;-1:-1:-1;;;25210:64:0;;5128:2:1;25210:64:0;;;5110:21:1;5167:2;5147:18;;;5140:30;5206:34;5186:18;;;5179:62;-1:-1:-1;;;5257:18:1;;;5250:33;5300:19;;25210:64:0;4926:399:1;25210:64:0;25302:1;25293:6;:10;25285:64;;;;-1:-1:-1;;;25285:64:0;;9834:2:1;25285:64:0;;;9816:21:1;9873:2;9853:18;;;9846:30;9912:34;9892:18;;;9885:62;-1:-1:-1;;;9963:18:1;;;9956:39;10012:19;;25285:64:0;9632:405:1;25285:64:0;-1:-1:-1;;;;;25369:13:0;;;;;;:9;:13;;;;;;;;25368:14;25360:77;;;;-1:-1:-1;;;25360:77:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25457:15:0;;;;;;:9;:15;;;;;;;;25456:16;25448:79;;;;-1:-1:-1;;;25448:79:0;;;;;;;:::i;:::-;25543:15;;;;;;;:53;;;;-1:-1:-1;7799:7:0;7826:6;-1:-1:-1;;;;;25563:15:0;;;7826:6;;25563:15;;;:32;;-1:-1:-1;7799:7:0;7826:6;-1:-1:-1;;;;;25582:13:0;;;7826:6;;25582:13;;25563:32;25540:163;;;25622:15;;;;;;;25621:16;25613:78;;;;-1:-1:-1;;;25613:78:0;;7465:2:1;25613:78:0;;;7447:21:1;7504:2;7484:18;;;7477:30;7543:34;7523:18;;;7516:62;-1:-1:-1;;;7594:18:1;;;7587:47;7651:19;;25613:78:0;7263:413:1;25613:78:0;7799:7;7826:6;-1:-1:-1;;;;;25718:15:0;;;7826:6;;25718:15;;;;:32;;-1:-1:-1;7799:7:0;7826:6;-1:-1:-1;;;;;25737:13:0;;;7826:6;;25737:13;;25718:32;25715:139;;;25785:12;;25775:6;:22;;25767:75;;;;-1:-1:-1;;;25767:75:0;;8243:2:1;25767:75:0;;;8225:21:1;8282:2;8262:18;;;8255:30;8321:34;8301:18;;;8294:62;-1:-1:-1;;;8372:18:1;;;8365:38;8420:19;;25767:75:0;8041:404:1;25767:75:0;25866:28;25897:24;25915:4;25897:9;:24::i;:::-;25987:23;;26036:16;;25866:55;;-1:-1:-1;25963:47:0;;;;26036:16;;26035:17;:42;;;;-1:-1:-1;26056:21:0;;;;;;;26035:42;:65;;;;;26087:13;-1:-1:-1;;;;;26081:19:0;:2;-1:-1:-1;;;;;26081:19:0;;26035:65;26031:580;;;26121:23;26117:165;;;26188:23;;26165:46;;26230:32;26241:20;26230:10;:32::i;:::-;26351:14;;26311:21;;26351:14;;;;;:45;;;;;26379:17;;26369:7;:27;26351:45;26347:253;;;26449:17;;26439:7;:27;26435:81;;;-1:-1:-1;26499:17:0;;26435:81;26553:31;26567:16;:7;26579:3;26567:11;:16::i;:::-;26553:13;:31::i;:::-;26102:509;26031:580;-1:-1:-1;;;;;26758:24:0;;26631:12;26758:24;;;:18;:24;;;;;;26646:4;;26758:24;;;:50;;-1:-1:-1;;;;;;26786:22:0;;;;;;:18;:22;;;;;;;;26758:50;26755:96;;;-1:-1:-1;26834:5:0;26755:96;26871:38;26886:4;26891:2;26894:6;26901:7;26871:14;:38::i;:::-;25120:1797;;;25017:1900;;;:::o;3460:192::-;3546:7;3582:12;3574:6;;;;3566:29;;;;-1:-1:-1;;;3566:29:0;;;;;;;;:::i;:::-;-1:-1:-1;3606:9:0;3618:5;3622:1;3618;:5;:::i;:::-;3606:17;3460:192;-1:-1:-1;;;;;3460:192:0:o;33839:163::-;33880:7;33901:15;33918;33937:19;:17;:19::i;:::-;33900:56;;-1:-1:-1;33900:56:0;-1:-1:-1;33974:20:0;33900:56;;33974:11;:20::i;:::-;33967:27;;;;33839:163;:::o;3920:132::-;3978:7;4005:39;4009:1;4012;4005:39;;;;;;;;;;;;;;;;;:3;:39::i;3127:181::-;3185:7;;3217:5;3221:1;3217;:5;:::i;:::-;3205:17;;3246:1;3241;:6;;3233:46;;;;-1:-1:-1;;;3233:46:0;;6753:2:1;3233:46:0;;;6735:21:1;6792:2;6772:18;;;6765:30;6831:29;6811:18;;;6804:57;6878:18;;3233:46:0;6551:351:1;32637:419:0;32696:7;32705;32714;32723;32732;32741;32762:23;32787:12;32801:18;32823:20;32835:7;32823:11;:20::i;:::-;32761:82;;;;;;32855:15;32872:23;32897:12;32913:50;32925:7;32934:4;32940:10;32952;:8;:10::i;:::-;32913:11;:50::i;:::-;32854:109;;;;-1:-1:-1;32854:109:0;;-1:-1:-1;33014:15:0;;-1:-1:-1;33031:4:0;;-1:-1:-1;33037:10:0;;-1:-1:-1;32637:419:0;;-1:-1:-1;;;;;32637:419:0:o;3316:136::-;3374:7;3401:43;3405:1;3408;3401:43;;;;;;;;;;;;;;;;;:3;:43::i;26925:576::-;19623:16;:23;;-1:-1:-1;;19623:23:0;19642:4;19623:23;;;27040:21:::1;27072:38;27089:20:::0;27072:16:::1;:38::i;:::-;27121:26;27150:41;:21;27176:14:::0;27150:25:::1;:41::i;:::-;27262:16;::::0;27322::::1;::::0;27303:13:::1;::::0;27121:70;;-1:-1:-1;27241:99:0::1;::::0;-1:-1:-1;;;;;27262:16:0;;::::1;::::0;27280:59:::1;::::0;27322:16;27280:37:::1;::::0;27121:70;;27280:22:::1;:37::i;:::-;:41:::0;::::1;:59::i;:::-;27241:20;:99::i;:::-;27409:14;::::0;27467::::1;::::0;27448:13:::1;::::0;27388:95:::1;::::0;-1:-1:-1;;;;;27409:14:0::1;::::0;27425:57:::1;::::0;:37:::1;::::0;:18;;:22:::1;:37::i;27388:95::-;-1:-1:-1::0;;19669:16:0;:24;;-1:-1:-1;;19669:24:0;;;-1:-1:-1;26925:576:0:o;27515:135::-;19623:16;:23;;-1:-1:-1;;19623:23:0;19642:4;19623:23;;;27586:10;;27582:61:::1;;27610:24;27627:6;27610:16;:24::i;:::-;-1:-1:-1::0;19669:16:0;:24;;-1:-1:-1;;19669:24:0;;;27515:135::o;29451:704::-;29562:7;29558:40;;29584:14;:12;:14::i;:::-;-1:-1:-1;;;;;29623:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;29647:22:0;;;;;;:11;:22;;;;;;;;29646:23;29623:46;29619:467;;;29686:48;29708:6;29716:9;29727:6;29686:21;:48::i;:::-;29619:467;;;-1:-1:-1;;;;;29757:19:0;;;;;;:11;:19;;;;;;;;29756:20;:46;;;;-1:-1:-1;;;;;;29780:22:0;;;;;;:11;:22;;;;;;;;29756:46;29752:334;;;29819:46;29839:6;29847:9;29858:6;29819:19;:46::i;29752:334::-;-1:-1:-1;;;;;29887:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;29910:22:0;;;;;;:11;:22;;;;;;;;29887:45;29883:203;;;29949:48;29971:6;29979:9;29990:6;29949:21;:48::i;29883:203::-;30030:44;30048:6;30056:9;30067:6;30030:17;:44::i;:::-;30110:7;30106:41;;30132:15;35610;;35600:7;:25;35652:21;;35636:13;:37;35556:125;30132:15;29451:704;;;;:::o;34010:561::-;34107:7;;34143;;34060;;;;;34167:289;34191:9;:16;34187:20;;34167:289;;;34257:7;34233;:21;34241:9;34251:1;34241:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34241:12:0;34233:21;;;;;;;;;;;;;:31;;:66;;;34292:7;34268;:21;34276:9;34286:1;34276:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34276:12:0;34268:21;;;;;;;;;;;;;:31;34233:66;34229:97;;;34309:7;;34318;;34301:25;;;;;;;34010:561;;:::o;34229:97::-;34351:34;34363:7;:21;34371:9;34381:1;34371:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34371:12:0;34363:21;;;;;;;;;;;;;34351:7;;:11;:34::i;:::-;34341:44;;34410:34;34422:7;:21;34430:9;34440:1;34430:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34430:12:0;34422:21;;;;;;;;;;;;;34410:7;;:11;:34::i;:::-;34400:44;-1:-1:-1;34209:3:0;;;;:::i;:::-;;;;34167:289;;;-1:-1:-1;34492:7:0;;34480;;:20;;:11;:20::i;:::-;34470:7;:30;34466:61;;;34510:7;;34519;;34502:25;;;;;;34010:561;;:::o;34466:61::-;34546:7;;34555;;-1:-1:-1;34010:561:0;-1:-1:-1;34010:561:0:o;4060:278::-;4146:7;4181:12;4174:5;4166:28;;;;-1:-1:-1;;;4166:28:0;;;;;;;;:::i;:::-;-1:-1:-1;4205:9:0;4217:5;4221:1;4217;:5;:::i;33064:330::-;33124:7;33133;33142;33162:12;33177:24;33193:7;33177:15;:24::i;:::-;33162:39;;33212:18;33233:30;33255:7;33233:21;:30::i;:::-;33212:51;-1:-1:-1;33274:23:0;33300:33;33212:51;33300:17;:7;33312:4;33300:11;:17::i;:::-;:21;;:33::i;:::-;33274:59;33369:4;;-1:-1:-1;33375:10:0;;-1:-1:-1;33064:330:0;;-1:-1:-1;;;33064:330:0:o;33402:429::-;33517:7;;;;33573:24;:7;33585:11;33573;:24::i;:::-;33555:42;-1:-1:-1;33608:12:0;33623:21;:4;33632:11;33623:8;:21::i;:::-;33608:36;-1:-1:-1;33655:18:0;33676:27;:10;33691:11;33676:14;:27::i;:::-;33655:48;-1:-1:-1;33714:23:0;33740:33;33655:48;33740:17;:7;33752:4;33740:11;:17::i;:33::-;33792:7;;;;-1:-1:-1;33818:4:0;;-1:-1:-1;33402:429:0;;-1:-1:-1;;;;;;;33402:429:0:o;27662:666::-;27812:16;;;27826:1;27812:16;;;;;;;;27788:21;;27812:16;;;;;;;;;;-1:-1:-1;27812:16:0;27788:40;;27857:4;27839;27844:1;27839:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;27839:23:0;;;-1:-1:-1;;;;;27839:23:0;;;;;27883:15;-1:-1:-1;;;;;27883:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27873:4;27878:1;27873:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;27873:32:0;;;-1:-1:-1;;;;;27873:32:0;;;;;27918:62;27935:4;27950:15;27968:11;27918:8;:62::i;:::-;28019:240;;-1:-1:-1;;;28019:240:0;;-1:-1:-1;;;;;28019:15:0;:66;;;;:240;;28100:11;;28126:1;;28170:4;;28197;;28233:15;;28019:240;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28285:35;28302:11;28315:4;28285:35;;;;;;;:::i;3660:250::-;3718:7;3742:6;3738:47;;-1:-1:-1;3772:1:0;3765:8;;3738:47;3797:9;3809:5;3813:1;3809;:5;:::i;:::-;3797:17;-1:-1:-1;3842:1:0;3833:5;3837:1;3797:17;3833:5;:::i;:::-;:10;3825:56;;;;-1:-1:-1;;;3825:56:0;;9071:2:1;3825:56:0;;;9053:21:1;9110:2;9090:18;;;9083:30;9149:34;9129:18;;;9122:62;-1:-1:-1;;;9200:18:1;;;9193:31;9241:19;;3825:56:0;8869:397:1;38345:126:0;38437:26;;-1:-1:-1;;;;;38437:18:0;;;:26;;;;;38456:6;;38437:26;;;;38456:6;38437:18;:26;;;;;;;;;;;;;;;;;;;;;38345:126;;:::o;28340:578::-;28485:16;;;28499:1;28485:16;;;;;;;;28461:21;;28485:16;;;;;;;;;;-1:-1:-1;28485:16:0;28461:40;;28522:15;-1:-1:-1;;;;;28522:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28512:4;28517:1;28512:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;28512:32:0;;;-1:-1:-1;;;;;28512:32:0;;;;;28573:4;28555;28560:1;28555:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28555:23:0;;;:7;;;;;;;;;:23;28615:15;:66;;28689:6;28711:1;28758:4;28777:11;28819:24;:15;28839:3;28819:19;:24::i;:::-;28615:239;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28880:30;28897:6;28905:4;28880:30;;;;;;;:::i;35294:250::-;35340:7;;:12;:34;;;;-1:-1:-1;35356:13:0;;:18;35340:34;35337:46;;;35294:250::o;35337:46::-;35421:7;;;35403:15;:25;35463:13;;;35439:21;:37;-1:-1:-1;35497:11:0;;;;35519:17;35294:250::o;31264:563::-;31367:15;31384:23;31409:12;31423:23;31448:12;31462:18;31484:19;31495:7;31484:10;:19::i;:::-;-1:-1:-1;;;;;31529:15:0;;;;;;:7;:15;;;;;;31366:137;;-1:-1:-1;31366:137:0;;-1:-1:-1;31366:137:0;;-1:-1:-1;31366:137:0;-1:-1:-1;31366:137:0;-1:-1:-1;31366:137:0;-1:-1:-1;31529:28:0;;31549:7;31529:19;:28::i;:::-;-1:-1:-1;;;;;31511:15:0;;;;;;:7;:15;;;;;;;;:46;;;;31586:7;:15;;;;:28;;31606:7;31586:19;:28::i;:::-;-1:-1:-1;;;;;31568:15:0;;;;;;;:7;:15;;;;;;:46;;;;31646:18;;;;;;;:39;;31669:15;31646:22;:39::i;:::-;-1:-1:-1;;;;;31625:18:0;;;;;;:7;:18;;;;;:60;31699:26;31714:10;31699:14;:26::i;:::-;31736:23;31748:4;31754;31736:11;:23::i;:::-;31792:9;-1:-1:-1;;;;;31775:44:0;31784:6;-1:-1:-1;;;;;31775:44:0;;31803:15;31775:44;;;;12176:25:1;;12164:2;12149:18;;12030:177;31775:44:0;;;;;;;;31355:472;;;;;;31264:563;;;:::o;30673:583::-;30774:15;30791:23;30816:12;30830:23;30855:12;30869:18;30891:19;30902:7;30891:10;:19::i;:::-;-1:-1:-1;;;;;30936:15:0;;;;;;:7;:15;;;;;;30773:137;;-1:-1:-1;30773:137:0;;-1:-1:-1;30773:137:0;;-1:-1:-1;30773:137:0;-1:-1:-1;30773:137:0;-1:-1:-1;30773:137:0;-1:-1:-1;30936:28:0;;30773:137;30936:19;:28::i;:::-;-1:-1:-1;;;;;30918:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;30996:18;;;;;:7;:18;;;;;:39;;31019:15;30996:22;:39::i;:::-;-1:-1:-1;;;;;30975:18:0;;;;;;:7;:18;;;;;;;;:60;;;;31067:7;:18;;;;:39;;31090:15;31067:22;:39::i;31835:639::-;31938:15;31955:23;31980:12;31994:23;32019:12;32033:18;32055:19;32066:7;32055:10;:19::i;:::-;-1:-1:-1;;;;;32100:15:0;;;;;;:7;:15;;;;;;31937:137;;-1:-1:-1;31937:137:0;;-1:-1:-1;31937:137:0;;-1:-1:-1;31937:137:0;-1:-1:-1;31937:137:0;-1:-1:-1;31937:137:0;-1:-1:-1;32100:28:0;;32120:7;32100:19;:28::i;:::-;-1:-1:-1;;;;;32082:15:0;;;;;;:7;:15;;;;;;;;:46;;;;32157:7;:15;;;;:28;;32177:7;32157:19;:28::i;30163:502::-;30262:15;30279:23;30304:12;30318:23;30343:12;30357:18;30379:19;30390:7;30379:10;:19::i;:::-;-1:-1:-1;;;;;30427:15:0;;;;;;:7;:15;;;;;;30261:137;;-1:-1:-1;30261:137:0;;-1:-1:-1;30261:137:0;;-1:-1:-1;30261:137:0;-1:-1:-1;30261:137:0;-1:-1:-1;30261:137:0;-1:-1:-1;30427:28:0;;30261:137;30427:19;:28::i;34950:154::-;35014:7;35041:55;35080:5;35041:20;35053:7;;35041;:11;;:20;;;;:::i;:::-;:24;;:55::i;35116:166::-;35186:7;35213:61;35258:5;35213:26;35225:13;;35213:7;:11;;:26;;;;:::i;34583:355::-;34646:19;34669:10;:8;:10::i;:::-;34646:33;-1:-1:-1;34690:18:0;34711:27;:10;34646:33;34711:14;:27::i;:::-;34790:4;34774:22;;;;:7;:22;;;;;;34690:48;;-1:-1:-1;34774:38:0;;34690:48;34774:26;:38::i;:::-;34765:4;34749:22;;;;:7;:22;;;;;;;;:63;;;;34826:11;:26;;;;;;34823:107;;;34908:4;34892:22;;;;:7;:22;;;;;;:38;;34919:10;34892:26;:38::i;:::-;34883:4;34867:22;;;;:7;:22;;;;;:63;34635:303;;34583:355;:::o;32482:147::-;32560:7;;:17;;32572:4;32560:11;:17::i;:::-;32550:7;:27;32601:10;;:20;;32616:4;32601:14;:20::i;:::-;32588:10;:33;-1:-1:-1;;32482:147:0:o;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:60;;164:1;161;154:12;108:60;14:160;;;:::o;179:247::-;238:6;291:2;279:9;270:7;266:23;262:32;259:52;;;307:1;304;297:12;259:52;346:9;333:23;365:31;390:5;365:31;:::i;431:251::-;501:6;554:2;542:9;533:7;529:23;525:32;522:52;;;570:1;567;560:12;522:52;602:9;596:16;621:31;646:5;621:31;:::i;687:388::-;755:6;763;816:2;804:9;795:7;791:23;787:32;784:52;;;832:1;829;822:12;784:52;871:9;858:23;890:31;915:5;890:31;:::i;:::-;940:5;-1:-1:-1;997:2:1;982:18;;969:32;1010:33;969:32;1010:33;:::i;:::-;1062:7;1052:17;;;687:388;;;;;:::o;1080:456::-;1157:6;1165;1173;1226:2;1214:9;1205:7;1201:23;1197:32;1194:52;;;1242:1;1239;1232:12;1194:52;1281:9;1268:23;1300:31;1325:5;1300:31;:::i;:::-;1350:5;-1:-1:-1;1407:2:1;1392:18;;1379:32;1420:33;1379:32;1420:33;:::i;:::-;1080:456;;1472:7;;-1:-1:-1;;;1526:2:1;1511:18;;;;1498:32;;1080:456::o;1541:315::-;1609:6;1617;1670:2;1658:9;1649:7;1645:23;1641:32;1638:52;;;1686:1;1683;1676:12;1638:52;1725:9;1712:23;1744:31;1769:5;1744:31;:::i;:::-;1794:5;1846:2;1831:18;;;;1818:32;;-1:-1:-1;;;1541:315:1:o;1861:180::-;1917:6;1970:2;1958:9;1949:7;1945:23;1941:32;1938:52;;;1986:1;1983;1976:12;1938:52;2009:26;2025:9;2009:26;:::i;2046:180::-;2105:6;2158:2;2146:9;2137:7;2133:23;2129:32;2126:52;;;2174:1;2171;2164:12;2126:52;-1:-1:-1;2197:23:1;;2046:180;-1:-1:-1;2046:180:1:o;2231:248::-;2296:6;2304;2357:2;2345:9;2336:7;2332:23;2328:32;2325:52;;;2373:1;2370;2363:12;2325:52;2409:9;2396:23;2386:33;;2438:35;2469:2;2458:9;2454:18;2438:35;:::i;:::-;2428:45;;2231:248;;;;;:::o;2484:461::-;2537:3;2575:5;2569:12;2602:6;2597:3;2590:19;2628:4;2657:2;2652:3;2648:12;2641:19;;2694:2;2687:5;2683:14;2715:1;2725:195;2739:6;2736:1;2733:13;2725:195;;;2804:13;;-1:-1:-1;;;;;2800:39:1;2788:52;;2860:12;;;;2895:15;;;;2836:1;2754:9;2725:195;;;-1:-1:-1;2936:3:1;;2484:461;-1:-1:-1;;;;;2484:461:1:o;3809:510::-;4080:6;4069:9;4062:25;4123:3;4118:2;4107:9;4103:18;4096:31;4043:4;4144:57;4196:3;4185:9;4181:19;4173:6;4144:57;:::i;:::-;-1:-1:-1;;;;;4237:32:1;;;;4232:2;4217:18;;4210:60;-1:-1:-1;4301:2:1;4286:18;4279:34;4136:65;3809:510;-1:-1:-1;;3809:510:1:o;4324:597::-;4436:4;4465:2;4494;4483:9;4476:21;4526:6;4520:13;4569:6;4564:2;4553:9;4549:18;4542:34;4594:1;4604:140;4618:6;4615:1;4612:13;4604:140;;;4713:14;;;4709:23;;4703:30;4679:17;;;4698:2;4675:26;4668:66;4633:10;;4604:140;;;4762:6;4759:1;4756:13;4753:91;;;4832:1;4827:2;4818:6;4807:9;4803:22;4799:31;4792:42;4753:91;-1:-1:-1;4905:2:1;4884:15;-1:-1:-1;;4880:29:1;4865:45;;;;4912:2;4861:54;;4324:597;-1:-1:-1;;;4324:597:1:o;8450:414::-;8652:2;8634:21;;;8691:2;8671:18;;;8664:30;8730:34;8725:2;8710:18;;8703:62;-1:-1:-1;;;8796:2:1;8781:18;;8774:48;8854:3;8839:19;;8450:414::o;9271:356::-;9473:2;9455:21;;;9492:18;;;9485:30;9551:34;9546:2;9531:18;;9524:62;9618:2;9603:18;;9271:356::o;12212:332::-;12419:6;12408:9;12401:25;12462:2;12457;12446:9;12442:18;12435:30;12382:4;12482:56;12534:2;12523:9;12519:18;12511:6;12482:56;:::i;:::-;12474:64;12212:332;-1:-1:-1;;;;12212:332:1:o;12549:582::-;12848:6;12837:9;12830:25;12891:6;12886:2;12875:9;12871:18;12864:34;12934:3;12929:2;12918:9;12914:18;12907:31;12811:4;12955:57;13007:3;12996:9;12992:19;12984:6;12955:57;:::i;:::-;-1:-1:-1;;;;;13048:32:1;;;;13043:2;13028:18;;13021:60;-1:-1:-1;13112:3:1;13097:19;13090:35;12947:65;12549:582;-1:-1:-1;;;12549:582:1:o;13325:128::-;13365:3;13396:1;13392:6;13389:1;13386:13;13383:39;;;13402:18;;:::i;:::-;-1:-1:-1;13438:9:1;;13325:128::o;13458:217::-;13498:1;13524;13514:132;;13568:10;13563:3;13559:20;13556:1;13549:31;13603:4;13600:1;13593:15;13631:4;13628:1;13621:15;13514:132;-1:-1:-1;13660:9:1;;13458:217::o;13680:168::-;13720:7;13786:1;13782;13778:6;13774:14;13771:1;13768:21;13763:1;13756:9;13749:17;13745:45;13742:71;;;13793:18;;:::i;:::-;-1:-1:-1;13833:9:1;;13680:168::o;13853:125::-;13893:4;13921:1;13918;13915:8;13912:34;;;13926:18;;:::i;:::-;-1:-1:-1;13963:9:1;;13853:125::o;13983:380::-;14062:1;14058:12;;;;14105;;;14126:61;;14180:4;14172:6;14168:17;14158:27;;14126:61;14233:2;14225:6;14222:14;14202:18;14199:38;14196:161;;;14279:10;14274:3;14270:20;14267:1;14260:31;14314:4;14311:1;14304:15;14342:4;14339:1;14332:15;14196:161;;13983:380;;;:::o;14368:135::-;14407:3;-1:-1:-1;;14428:17:1;;14425:43;;;14448:18;;:::i;:::-;-1:-1:-1;14495:1:1;14484:13;;14368:135::o;14508:127::-;14569:10;14564:3;14560:20;14557:1;14550:31;14600:4;14597:1;14590:15;14624:4;14621:1;14614:15;14640:127;14701:10;14696:3;14692:20;14689:1;14682:31;14732:4;14729:1;14722:15;14756:4;14753:1;14746:15;14772:127;14833:10;14828:3;14824:20;14821:1;14814:31;14864:4;14861:1;14854:15;14888:4;14885:1;14878:15;15036:131;-1:-1:-1;;;;;15111:31:1;;15101:42;;15091:70;;15157:1;15154;15147:12;15091:70;15036:131;:::o

Swarm Source

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