ETH Price: $3,415.72 (-2.42%)
Gas: 8 Gwei

Token

levitate (LEVI)
 

Overview

Max Total Supply

1,000,000,000 LEVI

Holders

95

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
Uniswap V2: LEVI 15
Balance
0.00000061 LEVI

Value
$0.00
0x61d801bd64fd97cb1a81b4f8c3cf17ba1a3efd3a
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
LevitateToken

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/*
  
  Bridging the gap between crypto and the music industry, bringing the emerging 'Sythewave Hype' to DEFI!

  levitatetoken.xyz
  t.me/levitatetoken

*/

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


abstract contract Context {

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

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

interface IERC20 {

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

library SafeMath {

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

library Address {

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

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

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

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

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

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

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

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

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

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

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

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

    function owner() public view returns (address) {
        return _owner;
    }   
    
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    
    function waiveOwnership() 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;
    }
}

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

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

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

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 LevitateToken is Context, IERC20, Ownable {
    
    using SafeMath for uint256;
    using Address for address;
    
    string private _name ="levitate";
    string private _symbol = "LEVI";
    uint8 private _decimals = 9;

    address payable private taxWallet1 = payable(0x1Df6Bd92c44EaFa53E36e268C9394E3059A80447);
    address payable private taxWallet2 = payable(0xE3577106f5A2bEe763c5519d5709a25aB58be1e7);
    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;
    
    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    
    mapping (address => bool) public checkExcludedFromFees;
    mapping (address => bool) public checkWalletLimitExcept;
    mapping (address => bool) public checkTxLimitExcept;
    mapping (address => bool) public checkMarketPair;

    uint256 public _buyLiquidityFees = 0;
    uint256 public _buyMarketingFees = 4;
    uint256 public _buyDevelopmentFees = 0;
    uint256 public _sellLiquidityFees = 0;
    uint256 public _sellMarketingFees = 4;
    uint256 public _sellDevelopmentFees = 0;

    uint256 public _liquidityShares = 0;
    uint256 public _marketingShares = 8;
    uint256 public _developmentShares = 2;

    uint256 public _totalTaxIfBuying = 4;
    uint256 public _totalTaxIfSelling = 4;
    uint256 public _totalDistributionShares = 10;

    uint256 private _totalSupply = 1000 * 10**6 * 10**9;
    uint256 public _maxTxAmount = 20 * 10**6 * 10**9;
    uint256 public _walletMax = 20 * 10**6 * 10**9;
    uint256 private minimumTokensBeforeSwap = 10 * 10**9; 

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapPair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public swapAndLiquifyByLimitOnly = false;
    bool public checkWalletLimit = true;

    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 () {
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); 

        uniswapPair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        _allowances[address(this)][address(uniswapV2Router)] = _totalSupply;

        checkExcludedFromFees[owner()] = true;
        checkExcludedFromFees[address(this)] = true;
        
        _totalTaxIfBuying = _buyLiquidityFees.add(_buyMarketingFees).add(_buyDevelopmentFees);
        _totalTaxIfSelling = _sellLiquidityFees.add(_sellMarketingFees).add(_sellDevelopmentFees);
        _totalDistributionShares = _liquidityShares.add(_marketingShares).add(_developmentShares);

        checkWalletLimitExcept[owner()] = true;
        checkWalletLimitExcept[address(uniswapPair)] = true;
        checkWalletLimitExcept[address(this)] = true;
        
        checkTxLimitExcept[owner()] = true;
        checkTxLimitExcept[address(this)] = true;

        checkMarketPair[address(uniswapPair)] = true;

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

    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 totalSupply() public view override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account];
    }

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

    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 approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

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

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function addMarketPair(address account) public onlyOwner {
        checkMarketPair[account] = true;
    }

    function setcheckTxLimitExcept(address holder, bool exempt) external onlyOwner {
        checkTxLimitExcept[holder] = exempt;
    }
    
    function setcheckExcludedFromFees(address account, bool newValue) public onlyOwner {
        checkExcludedFromFees[account] = newValue;
    }

    function setBuyFee(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newDevelopmentTax) external onlyOwner() {
        _buyLiquidityFees = newLiquidityTax;
        _buyMarketingFees = newMarketingTax;
        _buyDevelopmentFees = newDevelopmentTax;

        _totalTaxIfBuying = _buyLiquidityFees.add(_buyMarketingFees).add(_buyDevelopmentFees);
    }

    function setSellFee(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newDevelopmentTax) external onlyOwner() {
        _sellLiquidityFees = newLiquidityTax;
        _sellMarketingFees = newMarketingTax;
        _sellDevelopmentFees = newDevelopmentTax;

        _totalTaxIfSelling = _sellLiquidityFees.add(_sellMarketingFees).add(_sellDevelopmentFees);
    }
    
    function setDistributionSettings(uint256 newLiquidityShare, uint256 newMarketingShare, uint256 newDevelopmentShare) external onlyOwner() {
        _liquidityShares = newLiquidityShare;
        _marketingShares = newMarketingShare;
        _developmentShares = newDevelopmentShare;

        _totalDistributionShares = _liquidityShares.add(_marketingShares).add(_developmentShares);
    }
    
    function adjustMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        require(maxTxAmount <= (10000 * 10**6 * 10**9), "Max wallet should be less or euqal to 4% totalSupply");
        _maxTxAmount = maxTxAmount;
    }

    function enableDisableWalletLimit(bool newValue) external onlyOwner {
       checkWalletLimit = newValue;
    }

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

    function setWalletLimit(uint256 newLimit) external onlyOwner {
        _walletMax  = newLimit;
    }

    function setNumTokensBeforeSwap(uint256 newLimit) external onlyOwner() {
        minimumTokensBeforeSwap = newLimit;
    }

    function settaxWallet1(address newAddress) external onlyOwner() {
        taxWallet1 = payable(newAddress);
    }

    function settaxWallet2(address newAddress) external onlyOwner() {
        taxWallet2 = payable(newAddress);
    }

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

    function setSwapAndLiquifyByLimitOnly(bool newValue) public onlyOwner {
        swapAndLiquifyByLimitOnly = newValue;
    }
    
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(deadAddress));
    }

    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }
    
    function changeRouterVersion(address newRouterAddress) public onlyOwner returns(address newPairAddress) {

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(newRouterAddress); 

        newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory()).getPair(address(this), _uniswapV2Router.WETH());

        if(newPairAddress == address(0)) //Create If Doesnt exist
        {
            newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory())
                .createPair(address(this), _uniswapV2Router.WETH());
        }

        uniswapPair = newPairAddress; //Set new pair address
        uniswapV2Router = _uniswapV2Router; //Set new router address

        checkWalletLimitExcept[address(uniswapPair)] = true;
        checkMarketPair[address(uniswapPair)] = true;
    }

     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, 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 _transfer(address sender, address recipient, uint256 amount) private returns (bool) {

        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        if(inSwapAndLiquify)
        { 
            return _basicTransfer(sender, recipient, amount); 
        }
        else
        {
            if(!checkTxLimitExcept[sender] && !checkTxLimitExcept[recipient]) {
                require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            }            

            uint256 contractTokenBalance = balanceOf(address(this));
            bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;
            
            if (overMinimumTokenBalance && !inSwapAndLiquify && !checkMarketPair[sender] && swapAndLiquifyEnabled) 
            {
                if(swapAndLiquifyByLimitOnly)
                    contractTokenBalance = minimumTokensBeforeSwap;
                swapAndLiquify(contractTokenBalance);    
            }

            _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

            uint256 finalAmount = (checkExcludedFromFees[sender] || checkExcludedFromFees[recipient]) ? 
                                         amount : takeFee(sender, recipient, amount);

            if(checkWalletLimit && !checkWalletLimitExcept[recipient])
                require(balanceOf(recipient).add(finalAmount) <= _walletMax);

            _balances[recipient] = _balances[recipient].add(finalAmount);

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

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

    function swapAndLiquify(uint256 tAmount) private lockTheSwap {
        
        uint256 tokensForLP = tAmount.mul(_liquidityShares).div(_totalDistributionShares).div(2);
        uint256 tokensForSwap = tAmount.sub(tokensForLP);

        swapTokensForEth(tokensForSwap);
        uint256 amountReceived = address(this).balance;

        uint256 totalETHFee = _totalDistributionShares.sub(_liquidityShares.div(2));
        
        uint256 amountETHLiquidity = amountReceived.mul(_liquidityShares).div(totalETHFee).div(2);
        uint256 amountETHDevelopment = amountReceived.mul(_developmentShares).div(totalETHFee);
        uint256 amountETHMarketing = amountReceived.sub(amountETHLiquidity).sub(amountETHDevelopment);

        if(amountETHMarketing > 0)
            transferToAddressETH(taxWallet1, amountETHMarketing);

        if(amountETHDevelopment > 0)
            transferToAddressETH(taxWallet2, amountETHDevelopment);

        if(amountETHLiquidity > 0 && tokensForLP > 0)
            addLiquidity(tokensForLP, amountETHLiquidity);
    }
    
    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 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 takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        
        uint256 feeAmount = 0;
        
        if(checkMarketPair[sender]) {
            feeAmount = amount.mul(_totalTaxIfBuying).div(100);
        }
        else if(checkMarketPair[recipient]) {
            feeAmount = amount.mul(_totalTaxIfSelling).div(100);
        }
        
        if(feeAmount > 0) {
            _balances[address(this)] = _balances[address(this)].add(feeAmount);
            emit Transfer(sender, address(this), feeAmount);
        }

        return amount.sub(feeAmount);
    }
    
}

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":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":"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"},{"inputs":[],"name":"_buyDevelopmentFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLiquidityFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_developmentShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingShares","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":"_sellDevelopmentFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalDistributionShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfBuying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addMarketPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"adjustMaxTxAmount","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"newRouterAddress","type":"address"}],"name":"changeRouterVersion","outputs":[{"internalType":"address","name":"newPairAddress","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"checkExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"checkMarketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"checkTxLimitExcept","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"checkWalletLimitExcept","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"bool","name":"newValue","type":"bool"}],"name":"enableDisableWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"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":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newDevelopmentTax","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityShare","type":"uint256"},{"internalType":"uint256","name":"newMarketingShare","type":"uint256"},{"internalType":"uint256","name":"newDevelopmentShare","type":"uint256"}],"name":"setDistributionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setNumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newDevelopmentTax","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setSwapAndLiquifyByLimitOnly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setcheckExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setcheckTxLimitExcept","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setcheckWalletLimitExcept","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"settaxWallet1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"settaxWallet2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyByLimitOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[],"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":"uniswapPair","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":"waiveOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526040518060400160405280600881526020017f6c65766974617465000000000000000000000000000000000000000000000000815250600290816200004a919062000d78565b506040518060400160405280600481526020017f4c455649000000000000000000000000000000000000000000000000000000008152506003908162000091919062000d78565b506009600460006101000a81548160ff021916908360ff160217905550731df6bd92c44eafa53e36e268c9394e3059a80447600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073e3577106f5a2bee763c5519d5709a25ab58be1e7600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152506000600c556004600d556000600e556000600f556004601055600060115560006012556008601355600260145560046015556004601655600a601755670de0b6b3a764000060185566470de4df82000060195566470de4df820000601a556402540be400601b556001601d60156101000a81548160ff0219169083151502179055506000601d60166101000a81548160ff0219169083151502179055506001601d60176101000a81548160ff0219169083151502179055503480156200025257600080fd5b5060006200026562000a6a60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000368573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200038e919062000ec9565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003f6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200041c919062000ec9565b6040518363ffffffff1660e01b81526004016200043b92919062000f0c565b6020604051808303816000875af11580156200045b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000481919062000ec9565b601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601854600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160086000620005bd62000a7260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200069f600e546200068b600d54600c5462000a9b60201b620028751790919060201c565b62000a9b60201b620028751790919060201c565b601581905550620006de601154620006ca601054600f5462000a9b60201b620028751790919060201c565b62000a9b60201b620028751790919060201c565b6016819055506200071d6014546200070960135460125462000a9b60201b620028751790919060201c565b62000a9b60201b620028751790919060201c565b6017819055506001600960006200073962000a7260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60006200087262000a7260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060185460066000620009ac62000a6a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620009fa62000a6a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60185460405162000a5b919062000f4a565b60405180910390a35062001054565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080828462000aac919062000f96565b90508381101562000af4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000aeb9062001032565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000b8057607f821691505b60208210810362000b965762000b9562000b38565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000c007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000bc1565b62000c0c868362000bc1565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000c5962000c5362000c4d8462000c24565b62000c2e565b62000c24565b9050919050565b6000819050919050565b62000c758362000c38565b62000c8d62000c848262000c60565b84845462000bce565b825550505050565b600090565b62000ca462000c95565b62000cb181848462000c6a565b505050565b5b8181101562000cd95762000ccd60008262000c9a565b60018101905062000cb7565b5050565b601f82111562000d285762000cf28162000b9c565b62000cfd8462000bb1565b8101602085101562000d0d578190505b62000d2562000d1c8562000bb1565b83018262000cb6565b50505b505050565b600082821c905092915050565b600062000d4d6000198460080262000d2d565b1980831691505092915050565b600062000d68838362000d3a565b9150826002028217905092915050565b62000d838262000afe565b67ffffffffffffffff81111562000d9f5762000d9e62000b09565b5b62000dab825462000b67565b62000db882828562000cdd565b600060209050601f83116001811462000df0576000841562000ddb578287015190505b62000de7858262000d5a565b86555062000e57565b601f19841662000e008662000b9c565b60005b8281101562000e2a5784890151825560018201915060208501945060208101905062000e03565b8683101562000e4a578489015162000e46601f89168262000d3a565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000e918262000e64565b9050919050565b62000ea38162000e84565b811462000eaf57600080fd5b50565b60008151905062000ec38162000e98565b92915050565b60006020828403121562000ee25762000ee162000e5f565b5b600062000ef28482850162000eb2565b91505092915050565b62000f068162000e84565b82525050565b600060408201905062000f23600083018562000efb565b62000f32602083018462000efb565b9392505050565b62000f448162000c24565b82525050565b600060208201905062000f61600083018462000f39565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000fa38262000c24565b915062000fb08362000c24565b925082820190508082111562000fcb5762000fca62000f67565b5b92915050565b600082825260208201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006200101a601b8362000fd1565b9150620010278262000fe2565b602082019050919050565b600060208201905081810360008301526200104d816200100b565b9050919050565b608051614b2b620010776000396000818161124801526112740152614b2b6000f3fe6080604052600436106103545760003560e01c806370a08231116101c6578063bbaa7d44116100f7578063dd62ed3e11610095578063f1d5f5171161006f578063f1d5f51714610c87578063f2fde38b14610cb0578063f872858a14610cd9578063fabf706314610d045761035b565b8063dd62ed3e14610bf6578063e207a92b14610c33578063f0cd1dac14610c5c5761035b565b8063c78a789b116100d1578063c78a789b14610b38578063c816841b14610b75578063d76e26a314610ba0578063da00097d14610bcb5761035b565b8063bbaa7d4414610abd578063c2d4640e14610ae6578063c49b9a8014610b0f5761035b565b806395d89b4111610164578063a457c2d71161013e578063a457c2d7146109ef578063a5d69d1f14610a2c578063a9059cbb14610a55578063b6c3af3414610a925761035b565b806395d89b411461096e5780639e3fa32314610999578063a08e671f146109c45761035b565b806382eefb43116101a057806382eefb43146108d85780638da5cb5b146109035780638f03aad51461092e578063914eb66a146109575761035b565b806370a08231146108455780637d1db4a514610882578063807c2d9c146108ad5761035b565b80632f0a5fd4116102a0578063565cec381161023e578063646d470011610218578063646d47001461079b578063661b6e36146107c6578063667b511c146107f1578063705f9d741461081a5761035b565b8063565cec381461070a57806357e6adcb146107355780635881f3ef1461075e5761035b565b80633b97084a1161027a5780633b97084a1461063c5780634a74bb0214610665578063526012e81461069057806355324fa9146106cd5761035b565b80632f0a5fd4146105a9578063313ce567146105d457806339509351146105ff5761035b565b806323b872dd1161030d57806327c8f835116102e757806327c8f835146104ff5780632b112e491461052a5780632cdae5cb146105555780632df671091461057e5761035b565b806323b872dd1461047057806325519cf2146104ad5780632563ae83146104d65761035b565b806306fdde0314610360578063095ea7b31461038b5780630fe1203c146103c85780631694505e146103f157806318160ddd1461041c5780631d865c30146104475761035b565b3661035b57005b600080fd5b34801561036c57600080fd5b50610375610d41565b6040516103829190613c83565b60405180910390f35b34801561039757600080fd5b506103b260048036038101906103ad9190613d3e565b610dd3565b6040516103bf9190613d99565b60405180910390f35b3480156103d457600080fd5b506103ef60048036038101906103ea9190613db4565b610df1565b005b3480156103fd57600080fd5b50610406610eca565b6040516104139190613e40565b60405180910390f35b34801561042857600080fd5b50610431610ef0565b60405161043e9190613e6a565b60405180910390f35b34801561045357600080fd5b5061046e60048036038101906104699190613e85565b610efa565b005b34801561047c57600080fd5b5061049760048036038101906104929190613ed8565b610fda565b6040516104a49190613d99565b60405180910390f35b3480156104b957600080fd5b506104d460048036038101906104cf9190613e85565b6110b4565b005b3480156104e257600080fd5b506104fd60048036038101906104f89190613f57565b611194565b005b34801561050b57600080fd5b50610514611246565b6040516105219190613f93565b60405180910390f35b34801561053657600080fd5b5061053f61126a565b60405161054c9190613e6a565b60405180910390f35b34801561056157600080fd5b5061057c60048036038101906105779190613fae565b6112ae565b005b34801561058a57600080fd5b5061059361139e565b6040516105a09190613e6a565b60405180910390f35b3480156105b557600080fd5b506105be6113a4565b6040516105cb9190613e6a565b60405180910390f35b3480156105e057600080fd5b506105e96113aa565b6040516105f6919061400a565b60405180910390f35b34801561060b57600080fd5b5061062660048036038101906106219190613d3e565b6113c1565b6040516106339190613d99565b60405180910390f35b34801561064857600080fd5b50610663600480360381019061065e9190614025565b611474565b005b34801561067157600080fd5b5061067a611513565b6040516106879190613d99565b60405180910390f35b34801561069c57600080fd5b506106b760048036038101906106b29190613db4565b611526565b6040516106c49190613d99565b60405180910390f35b3480156106d957600080fd5b506106f460048036038101906106ef9190613db4565b611546565b6040516107019190613d99565b60405180910390f35b34801561071657600080fd5b5061071f611566565b60405161072c9190613e6a565b60405180910390f35b34801561074157600080fd5b5061075c60048036038101906107579190613fae565b61156c565b005b34801561076a57600080fd5b5061078560048036038101906107809190613db4565b61165c565b6040516107929190613f93565b60405180910390f35b3480156107a757600080fd5b506107b0611b5f565b6040516107bd9190613e6a565b60405180910390f35b3480156107d257600080fd5b506107db611b65565b6040516107e89190613e6a565b60405180910390f35b3480156107fd57600080fd5b5061081860048036038101906108139190613fae565b611b6b565b005b34801561082657600080fd5b5061082f611c5b565b60405161083c9190613e6a565b60405180910390f35b34801561085157600080fd5b5061086c60048036038101906108679190613db4565b611c61565b6040516108799190613e6a565b60405180910390f35b34801561088e57600080fd5b50610897611caa565b6040516108a49190613e6a565b60405180910390f35b3480156108b957600080fd5b506108c2611cb0565b6040516108cf9190613e6a565b60405180910390f35b3480156108e457600080fd5b506108ed611cb6565b6040516108fa9190613e6a565b60405180910390f35b34801561090f57600080fd5b50610918611cbc565b6040516109259190613f93565b60405180910390f35b34801561093a57600080fd5b5061095560048036038101906109509190614025565b611ce5565b005b34801561096357600080fd5b5061096c611dcf565b005b34801561097a57600080fd5b50610983611f22565b6040516109909190613c83565b60405180910390f35b3480156109a557600080fd5b506109ae611fb4565b6040516109bb9190613e6a565b60405180910390f35b3480156109d057600080fd5b506109d9611fba565b6040516109e69190613e6a565b60405180910390f35b3480156109fb57600080fd5b50610a166004803603810190610a119190613d3e565b611fc0565b604051610a239190613d99565b60405180910390f35b348015610a3857600080fd5b50610a536004803603810190610a4e9190613f57565b61208d565b005b348015610a6157600080fd5b50610a7c6004803603810190610a779190613d3e565b61213f565b604051610a899190613d99565b60405180910390f35b348015610a9e57600080fd5b50610aa761215e565b604051610ab49190613e6a565b60405180910390f35b348015610ac957600080fd5b50610ae46004803603810190610adf9190613db4565b612164565b005b348015610af257600080fd5b50610b0d6004803603810190610b089190613e85565b61223d565b005b348015610b1b57600080fd5b50610b366004803603810190610b319190613f57565b61231d565b005b348015610b4457600080fd5b50610b5f6004803603810190610b5a9190613db4565b612406565b604051610b6c9190613d99565b60405180910390f35b348015610b8157600080fd5b50610b8a612426565b604051610b979190613f93565b60405180910390f35b348015610bac57600080fd5b50610bb561244c565b604051610bc29190613e6a565b60405180910390f35b348015610bd757600080fd5b50610be0612452565b604051610bed9190613d99565b60405180910390f35b348015610c0257600080fd5b50610c1d6004803603810190610c189190614052565b612465565b604051610c2a9190613e6a565b60405180910390f35b348015610c3f57600080fd5b50610c5a6004803603810190610c559190613db4565b6124ec565b005b348015610c6857600080fd5b50610c716125dc565b604051610c7e9190613e6a565b60405180910390f35b348015610c9357600080fd5b50610cae6004803603810190610ca99190614025565b6125e2565b005b348015610cbc57600080fd5b50610cd76004803603810190610cd29190613db4565b612681565b005b348015610ce557600080fd5b50610cee612842565b604051610cfb9190613d99565b60405180910390f35b348015610d1057600080fd5b50610d2b6004803603810190610d269190613db4565b612855565b604051610d389190613d99565b60405180910390f35b606060028054610d50906140c1565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7c906140c1565b8015610dc95780601f10610d9e57610100808354040283529160200191610dc9565b820191906000526020600020905b815481529060010190602001808311610dac57829003601f168201915b5050505050905090565b6000610de7610de06128d3565b84846128db565b6001905092915050565b610df96128d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7d9061413e565b60405180910390fd5b80600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601854905090565b610f026128d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f869061413e565b60405180910390fd5b82600f819055508160108190555080601181905550610fcf601154610fc1601054600f5461287590919063ffffffff16565b61287590919063ffffffff16565b601681905550505050565b6000610fe7848484612aa4565b506110a984610ff46128d3565b6110a485604051806060016040528060288152602001614aa960289139600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061105a6128d3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130879092919063ffffffff16565b6128db565b600190509392505050565b6110bc6128d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611149576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111409061413e565b60405180910390fd5b82600c8190555081600d8190555080600e81905550611189600e5461117b600d54600c5461287590919063ffffffff16565b61287590919063ffffffff16565b601581905550505050565b61119c6128d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611229576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112209061413e565b60405180910390fd5b80601d60176101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006112a96112987f0000000000000000000000000000000000000000000000000000000000000000611c61565b6018546130eb90919063ffffffff16565b905090565b6112b66128d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611343576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133a9061413e565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600d5481565b600f5481565b6000600460009054906101000a900460ff16905090565b600061146a6113ce6128d3565b8461146585600760006113df6128d3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287590919063ffffffff16565b6128db565b6001905092915050565b61147c6128d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611509576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115009061413e565b60405180910390fd5b80601b8190555050565b601d60159054906101000a900460ff1681565b60096020528060005260406000206000915054906101000a900460ff1681565b600b6020528060005260406000206000915054906101000a900460ff1681565b60135481565b6115746128d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611601576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f89061413e565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006116666128d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea9061413e565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611743573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117679190614173565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f29190614173565b6040518363ffffffff1660e01b815260040161180f9291906141a0565b602060405180830381865afa15801561182c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118509190614173565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036119e3578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118f59190614173565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561195c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119809190614173565b6040518363ffffffff1660e01b815260040161199d9291906141a0565b6020604051808303816000875af11580156119bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e09190614173565b91505b81601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160096000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050919050565b60115481565b60105481565b611b736128d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf79061413e565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600e5481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60195481565b601a5481565b60165481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611ced6128d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d719061413e565b60405180910390fd5b678ac7230489e80000811115611dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbc9061423b565b60405180910390fd5b8060198190555050565b611dd76128d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5b9061413e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b606060038054611f31906140c1565b80601f0160208091040260200160405190810160405280929190818152602001828054611f5d906140c1565b8015611faa5780601f10611f7f57610100808354040283529160200191611faa565b820191906000526020600020905b815481529060010190602001808311611f8d57829003601f168201915b5050505050905090565b60125481565b60175481565b6000612083611fcd6128d3565b8461207e85604051806060016040528060258152602001614ad16025913960076000611ff76128d3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130879092919063ffffffff16565b6128db565b6001905092915050565b6120956128d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612122576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121199061413e565b60405180910390fd5b80601d60166101000a81548160ff02191690831515021790555050565b600061215361214c6128d3565b8484612aa4565b506001905092915050565b600c5481565b61216c6128d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f09061413e565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6122456128d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c99061413e565b60405180910390fd5b82601281905550816013819055508060148190555061231260145461230460135460125461287590919063ffffffff16565b61287590919063ffffffff16565b601781905550505050565b6123256128d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a99061413e565b60405180910390fd5b80601d60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516123fb9190613d99565b60405180910390a150565b600a6020528060005260406000206000915054906101000a900460ff1681565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b601d60169054906101000a900460ff1681565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6124f46128d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612581576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125789061413e565b60405180910390fd5b6001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60155481565b6125ea6128d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612677576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266e9061413e565b60405180910390fd5b80601a8190555050565b6126896128d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612716576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270d9061413e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612785576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277c906142cd565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601d60179054906101000a900460ff1681565b60086020528060005260406000206000915054906101000a900460ff1681565b6000808284612884919061431c565b9050838110156128c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c09061439c565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361294a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129419061442e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b0906144c0565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612a979190613e6a565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612b14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0b90614552565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7a906145e4565b60405180910390fd5b601d60149054906101000a900460ff1615612baa57612ba3848484613135565b9050613080565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612c4e5750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c9957601954821115612c98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8f90614676565b60405180910390fd5b5b6000612ca430611c61565b90506000601b548210159050808015612cca5750601d60149054906101000a900460ff16155b8015612d205750600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d385750601d60159054906101000a900460ff165b15612d6257601d60169054906101000a900460ff1615612d5857601b5491505b612d6182613308565b5b612deb846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130879092919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ed15750600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612ee557612ee08787876134f9565b612ee7565b845b9050601d60179054906101000a900460ff168015612f4f5750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f7e57601a54612f7282612f6489611c61565b61287590919063ffffffff16565b1115612f7d57600080fd5b5b612fd081600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287590919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516130709190613e6a565b60405180910390a3600193505050505b9392505050565b60008383111582906130cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130c69190613c83565b60405180910390fd5b50600083856130de9190614696565b9050809150509392505050565b600061312d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613087565b905092915050565b60006131c0826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130879092919063ffffffff16565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061325582600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287590919063ffffffff16565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516132f59190613e6a565b60405180910390a3600190509392505050565b6001601d60146101000a81548160ff021916908315150217905550600061336160026133536017546133456012548761372090919063ffffffff16565b61379a90919063ffffffff16565b61379a90919063ffffffff16565b9050600061337882846130eb90919063ffffffff16565b9050613383816137e4565b600047905060006133b46133a3600260125461379a90919063ffffffff16565b6017546130eb90919063ffffffff16565b905060006133f260026133e4846133d66012548861372090919063ffffffff16565b61379a90919063ffffffff16565b61379a90919063ffffffff16565b9050600061341d8361340f6014548761372090919063ffffffff16565b61379a90919063ffffffff16565b905060006134468261343885886130eb90919063ffffffff16565b6130eb90919063ffffffff16565b9050600081111561347e5761347d600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613a60565b5b60008211156134b4576134b3600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613a60565b5b6000831180156134c45750600087115b156134d4576134d38784613aab565b5b505050505050506000601d60146101000a81548160ff02191690831515021790555050565b60008060009050600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156135815761357a606461356c6015548661372090919063ffffffff16565b61379a90919063ffffffff16565b90506135ff565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156135fe576135fb60646135ed6016548661372090919063ffffffff16565b61379a90919063ffffffff16565b90505b5b60008111156137035761365a81600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287590919063ffffffff16565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516136fa9190613e6a565b60405180910390a35b61371681846130eb90919063ffffffff16565b9150509392505050565b60008083036137325760009050613794565b6000828461374091906146ca565b905082848261374f919061473b565b1461378f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613786906147de565b60405180910390fd5b809150505b92915050565b60006137dc83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613b90565b905092915050565b6000600267ffffffffffffffff811115613801576138006147fe565b5b60405190808252806020026020018201604052801561382f5781602001602082028036833780820191505090505b50905030816000815181106138475761384661482d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156138ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139129190614173565b816001815181106139265761392561482d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061398d30601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846128db565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016139f1959493929190614955565b600060405180830381600087803b158015613a0b57600080fd5b505af1158015613a1f573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051613a549291906149af565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613aa6573d6000803e3d6000fd5b505050565b613ad830601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846128db565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613b24611cbc565b426040518863ffffffff1660e01b8152600401613b46969594939291906149df565b60606040518083038185885af1158015613b64573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613b899190614a55565b5050505050565b60008083118290613bd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bce9190613c83565b60405180910390fd5b5060008385613be6919061473b565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613c2d578082015181840152602081019050613c12565b60008484015250505050565b6000601f19601f8301169050919050565b6000613c5582613bf3565b613c5f8185613bfe565b9350613c6f818560208601613c0f565b613c7881613c39565b840191505092915050565b60006020820190508181036000830152613c9d8184613c4a565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613cd582613caa565b9050919050565b613ce581613cca565b8114613cf057600080fd5b50565b600081359050613d0281613cdc565b92915050565b6000819050919050565b613d1b81613d08565b8114613d2657600080fd5b50565b600081359050613d3881613d12565b92915050565b60008060408385031215613d5557613d54613ca5565b5b6000613d6385828601613cf3565b9250506020613d7485828601613d29565b9150509250929050565b60008115159050919050565b613d9381613d7e565b82525050565b6000602082019050613dae6000830184613d8a565b92915050565b600060208284031215613dca57613dc9613ca5565b5b6000613dd884828501613cf3565b91505092915050565b6000819050919050565b6000613e06613e01613dfc84613caa565b613de1565b613caa565b9050919050565b6000613e1882613deb565b9050919050565b6000613e2a82613e0d565b9050919050565b613e3a81613e1f565b82525050565b6000602082019050613e556000830184613e31565b92915050565b613e6481613d08565b82525050565b6000602082019050613e7f6000830184613e5b565b92915050565b600080600060608486031215613e9e57613e9d613ca5565b5b6000613eac86828701613d29565b9350506020613ebd86828701613d29565b9250506040613ece86828701613d29565b9150509250925092565b600080600060608486031215613ef157613ef0613ca5565b5b6000613eff86828701613cf3565b9350506020613f1086828701613cf3565b9250506040613f2186828701613d29565b9150509250925092565b613f3481613d7e565b8114613f3f57600080fd5b50565b600081359050613f5181613f2b565b92915050565b600060208284031215613f6d57613f6c613ca5565b5b6000613f7b84828501613f42565b91505092915050565b613f8d81613cca565b82525050565b6000602082019050613fa86000830184613f84565b92915050565b60008060408385031215613fc557613fc4613ca5565b5b6000613fd385828601613cf3565b9250506020613fe485828601613f42565b9150509250929050565b600060ff82169050919050565b61400481613fee565b82525050565b600060208201905061401f6000830184613ffb565b92915050565b60006020828403121561403b5761403a613ca5565b5b600061404984828501613d29565b91505092915050565b6000806040838503121561406957614068613ca5565b5b600061407785828601613cf3565b925050602061408885828601613cf3565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806140d957607f821691505b6020821081036140ec576140eb614092565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614128602083613bfe565b9150614133826140f2565b602082019050919050565b600060208201905081810360008301526141578161411b565b9050919050565b60008151905061416d81613cdc565b92915050565b60006020828403121561418957614188613ca5565b5b60006141978482850161415e565b91505092915050565b60006040820190506141b56000830185613f84565b6141c26020830184613f84565b9392505050565b7f4d61782077616c6c65742073686f756c64206265206c657373206f722065757160008201527f616c20746f20342520746f74616c537570706c79000000000000000000000000602082015250565b6000614225603483613bfe565b9150614230826141c9565b604082019050919050565b6000602082019050818103600083015261425481614218565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006142b7602683613bfe565b91506142c28261425b565b604082019050919050565b600060208201905081810360008301526142e6816142aa565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061432782613d08565b915061433283613d08565b925082820190508082111561434a576143496142ed565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614386601b83613bfe565b915061439182614350565b602082019050919050565b600060208201905081810360008301526143b581614379565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614418602483613bfe565b9150614423826143bc565b604082019050919050565b600060208201905081810360008301526144478161440b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006144aa602283613bfe565b91506144b58261444e565b604082019050919050565b600060208201905081810360008301526144d98161449d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061453c602583613bfe565b9150614547826144e0565b604082019050919050565b6000602082019050818103600083015261456b8161452f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006145ce602383613bfe565b91506145d982614572565b604082019050919050565b600060208201905081810360008301526145fd816145c1565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000614660602883613bfe565b915061466b82614604565b604082019050919050565b6000602082019050818103600083015261468f81614653565b9050919050565b60006146a182613d08565b91506146ac83613d08565b92508282039050818111156146c4576146c36142ed565b5b92915050565b60006146d582613d08565b91506146e083613d08565b92508282026146ee81613d08565b91508282048414831517614705576147046142ed565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061474682613d08565b915061475183613d08565b9250826147615761476061470c565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006147c8602183613bfe565b91506147d38261476c565b604082019050919050565b600060208201905081810360008301526147f7816147bb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b600061488161487c6148778461485c565b613de1565b613d08565b9050919050565b61489181614866565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6148cc81613cca565b82525050565b60006148de83836148c3565b60208301905092915050565b6000602082019050919050565b600061490282614897565b61490c81856148a2565b9350614917836148b3565b8060005b8381101561494857815161492f88826148d2565b975061493a836148ea565b92505060018101905061491b565b5085935050505092915050565b600060a08201905061496a6000830188613e5b565b6149776020830187614888565b818103604083015261498981866148f7565b90506149986060830185613f84565b6149a56080830184613e5b565b9695505050505050565b60006040820190506149c46000830185613e5b565b81810360208301526149d681846148f7565b90509392505050565b600060c0820190506149f46000830189613f84565b614a016020830188613e5b565b614a0e6040830187614888565b614a1b6060830186614888565b614a286080830185613f84565b614a3560a0830184613e5b565b979650505050505050565b600081519050614a4f81613d12565b92915050565b600080600060608486031215614a6e57614a6d613ca5565b5b6000614a7c86828701614a40565b9350506020614a8d86828701614a40565b9250506040614a9e86828701614a40565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d7b1a6431f0817c075f76c983023696273fe6951acb9dbec5c38992d09d0ef5564736f6c63430008110033

Deployed Bytecode

0x6080604052600436106103545760003560e01c806370a08231116101c6578063bbaa7d44116100f7578063dd62ed3e11610095578063f1d5f5171161006f578063f1d5f51714610c87578063f2fde38b14610cb0578063f872858a14610cd9578063fabf706314610d045761035b565b8063dd62ed3e14610bf6578063e207a92b14610c33578063f0cd1dac14610c5c5761035b565b8063c78a789b116100d1578063c78a789b14610b38578063c816841b14610b75578063d76e26a314610ba0578063da00097d14610bcb5761035b565b8063bbaa7d4414610abd578063c2d4640e14610ae6578063c49b9a8014610b0f5761035b565b806395d89b4111610164578063a457c2d71161013e578063a457c2d7146109ef578063a5d69d1f14610a2c578063a9059cbb14610a55578063b6c3af3414610a925761035b565b806395d89b411461096e5780639e3fa32314610999578063a08e671f146109c45761035b565b806382eefb43116101a057806382eefb43146108d85780638da5cb5b146109035780638f03aad51461092e578063914eb66a146109575761035b565b806370a08231146108455780637d1db4a514610882578063807c2d9c146108ad5761035b565b80632f0a5fd4116102a0578063565cec381161023e578063646d470011610218578063646d47001461079b578063661b6e36146107c6578063667b511c146107f1578063705f9d741461081a5761035b565b8063565cec381461070a57806357e6adcb146107355780635881f3ef1461075e5761035b565b80633b97084a1161027a5780633b97084a1461063c5780634a74bb0214610665578063526012e81461069057806355324fa9146106cd5761035b565b80632f0a5fd4146105a9578063313ce567146105d457806339509351146105ff5761035b565b806323b872dd1161030d57806327c8f835116102e757806327c8f835146104ff5780632b112e491461052a5780632cdae5cb146105555780632df671091461057e5761035b565b806323b872dd1461047057806325519cf2146104ad5780632563ae83146104d65761035b565b806306fdde0314610360578063095ea7b31461038b5780630fe1203c146103c85780631694505e146103f157806318160ddd1461041c5780631d865c30146104475761035b565b3661035b57005b600080fd5b34801561036c57600080fd5b50610375610d41565b6040516103829190613c83565b60405180910390f35b34801561039757600080fd5b506103b260048036038101906103ad9190613d3e565b610dd3565b6040516103bf9190613d99565b60405180910390f35b3480156103d457600080fd5b506103ef60048036038101906103ea9190613db4565b610df1565b005b3480156103fd57600080fd5b50610406610eca565b6040516104139190613e40565b60405180910390f35b34801561042857600080fd5b50610431610ef0565b60405161043e9190613e6a565b60405180910390f35b34801561045357600080fd5b5061046e60048036038101906104699190613e85565b610efa565b005b34801561047c57600080fd5b5061049760048036038101906104929190613ed8565b610fda565b6040516104a49190613d99565b60405180910390f35b3480156104b957600080fd5b506104d460048036038101906104cf9190613e85565b6110b4565b005b3480156104e257600080fd5b506104fd60048036038101906104f89190613f57565b611194565b005b34801561050b57600080fd5b50610514611246565b6040516105219190613f93565b60405180910390f35b34801561053657600080fd5b5061053f61126a565b60405161054c9190613e6a565b60405180910390f35b34801561056157600080fd5b5061057c60048036038101906105779190613fae565b6112ae565b005b34801561058a57600080fd5b5061059361139e565b6040516105a09190613e6a565b60405180910390f35b3480156105b557600080fd5b506105be6113a4565b6040516105cb9190613e6a565b60405180910390f35b3480156105e057600080fd5b506105e96113aa565b6040516105f6919061400a565b60405180910390f35b34801561060b57600080fd5b5061062660048036038101906106219190613d3e565b6113c1565b6040516106339190613d99565b60405180910390f35b34801561064857600080fd5b50610663600480360381019061065e9190614025565b611474565b005b34801561067157600080fd5b5061067a611513565b6040516106879190613d99565b60405180910390f35b34801561069c57600080fd5b506106b760048036038101906106b29190613db4565b611526565b6040516106c49190613d99565b60405180910390f35b3480156106d957600080fd5b506106f460048036038101906106ef9190613db4565b611546565b6040516107019190613d99565b60405180910390f35b34801561071657600080fd5b5061071f611566565b60405161072c9190613e6a565b60405180910390f35b34801561074157600080fd5b5061075c60048036038101906107579190613fae565b61156c565b005b34801561076a57600080fd5b5061078560048036038101906107809190613db4565b61165c565b6040516107929190613f93565b60405180910390f35b3480156107a757600080fd5b506107b0611b5f565b6040516107bd9190613e6a565b60405180910390f35b3480156107d257600080fd5b506107db611b65565b6040516107e89190613e6a565b60405180910390f35b3480156107fd57600080fd5b5061081860048036038101906108139190613fae565b611b6b565b005b34801561082657600080fd5b5061082f611c5b565b60405161083c9190613e6a565b60405180910390f35b34801561085157600080fd5b5061086c60048036038101906108679190613db4565b611c61565b6040516108799190613e6a565b60405180910390f35b34801561088e57600080fd5b50610897611caa565b6040516108a49190613e6a565b60405180910390f35b3480156108b957600080fd5b506108c2611cb0565b6040516108cf9190613e6a565b60405180910390f35b3480156108e457600080fd5b506108ed611cb6565b6040516108fa9190613e6a565b60405180910390f35b34801561090f57600080fd5b50610918611cbc565b6040516109259190613f93565b60405180910390f35b34801561093a57600080fd5b5061095560048036038101906109509190614025565b611ce5565b005b34801561096357600080fd5b5061096c611dcf565b005b34801561097a57600080fd5b50610983611f22565b6040516109909190613c83565b60405180910390f35b3480156109a557600080fd5b506109ae611fb4565b6040516109bb9190613e6a565b60405180910390f35b3480156109d057600080fd5b506109d9611fba565b6040516109e69190613e6a565b60405180910390f35b3480156109fb57600080fd5b50610a166004803603810190610a119190613d3e565b611fc0565b604051610a239190613d99565b60405180910390f35b348015610a3857600080fd5b50610a536004803603810190610a4e9190613f57565b61208d565b005b348015610a6157600080fd5b50610a7c6004803603810190610a779190613d3e565b61213f565b604051610a899190613d99565b60405180910390f35b348015610a9e57600080fd5b50610aa761215e565b604051610ab49190613e6a565b60405180910390f35b348015610ac957600080fd5b50610ae46004803603810190610adf9190613db4565b612164565b005b348015610af257600080fd5b50610b0d6004803603810190610b089190613e85565b61223d565b005b348015610b1b57600080fd5b50610b366004803603810190610b319190613f57565b61231d565b005b348015610b4457600080fd5b50610b5f6004803603810190610b5a9190613db4565b612406565b604051610b6c9190613d99565b60405180910390f35b348015610b8157600080fd5b50610b8a612426565b604051610b979190613f93565b60405180910390f35b348015610bac57600080fd5b50610bb561244c565b604051610bc29190613e6a565b60405180910390f35b348015610bd757600080fd5b50610be0612452565b604051610bed9190613d99565b60405180910390f35b348015610c0257600080fd5b50610c1d6004803603810190610c189190614052565b612465565b604051610c2a9190613e6a565b60405180910390f35b348015610c3f57600080fd5b50610c5a6004803603810190610c559190613db4565b6124ec565b005b348015610c6857600080fd5b50610c716125dc565b604051610c7e9190613e6a565b60405180910390f35b348015610c9357600080fd5b50610cae6004803603810190610ca99190614025565b6125e2565b005b348015610cbc57600080fd5b50610cd76004803603810190610cd29190613db4565b612681565b005b348015610ce557600080fd5b50610cee612842565b604051610cfb9190613d99565b60405180910390f35b348015610d1057600080fd5b50610d2b6004803603810190610d269190613db4565b612855565b604051610d389190613d99565b60405180910390f35b606060028054610d50906140c1565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7c906140c1565b8015610dc95780601f10610d9e57610100808354040283529160200191610dc9565b820191906000526020600020905b815481529060010190602001808311610dac57829003601f168201915b5050505050905090565b6000610de7610de06128d3565b84846128db565b6001905092915050565b610df96128d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7d9061413e565b60405180910390fd5b80600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601854905090565b610f026128d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f869061413e565b60405180910390fd5b82600f819055508160108190555080601181905550610fcf601154610fc1601054600f5461287590919063ffffffff16565b61287590919063ffffffff16565b601681905550505050565b6000610fe7848484612aa4565b506110a984610ff46128d3565b6110a485604051806060016040528060288152602001614aa960289139600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061105a6128d3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130879092919063ffffffff16565b6128db565b600190509392505050565b6110bc6128d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611149576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111409061413e565b60405180910390fd5b82600c8190555081600d8190555080600e81905550611189600e5461117b600d54600c5461287590919063ffffffff16565b61287590919063ffffffff16565b601581905550505050565b61119c6128d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611229576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112209061413e565b60405180910390fd5b80601d60176101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b60006112a96112987f000000000000000000000000000000000000000000000000000000000000dead611c61565b6018546130eb90919063ffffffff16565b905090565b6112b66128d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611343576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133a9061413e565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600d5481565b600f5481565b6000600460009054906101000a900460ff16905090565b600061146a6113ce6128d3565b8461146585600760006113df6128d3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287590919063ffffffff16565b6128db565b6001905092915050565b61147c6128d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611509576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115009061413e565b60405180910390fd5b80601b8190555050565b601d60159054906101000a900460ff1681565b60096020528060005260406000206000915054906101000a900460ff1681565b600b6020528060005260406000206000915054906101000a900460ff1681565b60135481565b6115746128d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611601576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f89061413e565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006116666128d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea9061413e565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611743573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117679190614173565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f29190614173565b6040518363ffffffff1660e01b815260040161180f9291906141a0565b602060405180830381865afa15801561182c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118509190614173565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036119e3578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118f59190614173565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561195c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119809190614173565b6040518363ffffffff1660e01b815260040161199d9291906141a0565b6020604051808303816000875af11580156119bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e09190614173565b91505b81601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160096000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050919050565b60115481565b60105481565b611b736128d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf79061413e565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600e5481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60195481565b601a5481565b60165481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611ced6128d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d719061413e565b60405180910390fd5b678ac7230489e80000811115611dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbc9061423b565b60405180910390fd5b8060198190555050565b611dd76128d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5b9061413e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b606060038054611f31906140c1565b80601f0160208091040260200160405190810160405280929190818152602001828054611f5d906140c1565b8015611faa5780601f10611f7f57610100808354040283529160200191611faa565b820191906000526020600020905b815481529060010190602001808311611f8d57829003601f168201915b5050505050905090565b60125481565b60175481565b6000612083611fcd6128d3565b8461207e85604051806060016040528060258152602001614ad16025913960076000611ff76128d3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130879092919063ffffffff16565b6128db565b6001905092915050565b6120956128d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612122576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121199061413e565b60405180910390fd5b80601d60166101000a81548160ff02191690831515021790555050565b600061215361214c6128d3565b8484612aa4565b506001905092915050565b600c5481565b61216c6128d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f09061413e565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6122456128d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c99061413e565b60405180910390fd5b82601281905550816013819055508060148190555061231260145461230460135460125461287590919063ffffffff16565b61287590919063ffffffff16565b601781905550505050565b6123256128d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a99061413e565b60405180910390fd5b80601d60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516123fb9190613d99565b60405180910390a150565b600a6020528060005260406000206000915054906101000a900460ff1681565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b601d60169054906101000a900460ff1681565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6124f46128d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612581576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125789061413e565b60405180910390fd5b6001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60155481565b6125ea6128d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612677576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266e9061413e565b60405180910390fd5b80601a8190555050565b6126896128d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612716576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270d9061413e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612785576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277c906142cd565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601d60179054906101000a900460ff1681565b60086020528060005260406000206000915054906101000a900460ff1681565b6000808284612884919061431c565b9050838110156128c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c09061439c565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361294a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129419061442e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b0906144c0565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612a979190613e6a565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612b14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0b90614552565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7a906145e4565b60405180910390fd5b601d60149054906101000a900460ff1615612baa57612ba3848484613135565b9050613080565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612c4e5750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c9957601954821115612c98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8f90614676565b60405180910390fd5b5b6000612ca430611c61565b90506000601b548210159050808015612cca5750601d60149054906101000a900460ff16155b8015612d205750600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d385750601d60159054906101000a900460ff165b15612d6257601d60169054906101000a900460ff1615612d5857601b5491505b612d6182613308565b5b612deb846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130879092919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ed15750600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612ee557612ee08787876134f9565b612ee7565b845b9050601d60179054906101000a900460ff168015612f4f5750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f7e57601a54612f7282612f6489611c61565b61287590919063ffffffff16565b1115612f7d57600080fd5b5b612fd081600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287590919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516130709190613e6a565b60405180910390a3600193505050505b9392505050565b60008383111582906130cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130c69190613c83565b60405180910390fd5b50600083856130de9190614696565b9050809150509392505050565b600061312d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613087565b905092915050565b60006131c0826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130879092919063ffffffff16565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061325582600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287590919063ffffffff16565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516132f59190613e6a565b60405180910390a3600190509392505050565b6001601d60146101000a81548160ff021916908315150217905550600061336160026133536017546133456012548761372090919063ffffffff16565b61379a90919063ffffffff16565b61379a90919063ffffffff16565b9050600061337882846130eb90919063ffffffff16565b9050613383816137e4565b600047905060006133b46133a3600260125461379a90919063ffffffff16565b6017546130eb90919063ffffffff16565b905060006133f260026133e4846133d66012548861372090919063ffffffff16565b61379a90919063ffffffff16565b61379a90919063ffffffff16565b9050600061341d8361340f6014548761372090919063ffffffff16565b61379a90919063ffffffff16565b905060006134468261343885886130eb90919063ffffffff16565b6130eb90919063ffffffff16565b9050600081111561347e5761347d600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613a60565b5b60008211156134b4576134b3600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613a60565b5b6000831180156134c45750600087115b156134d4576134d38784613aab565b5b505050505050506000601d60146101000a81548160ff02191690831515021790555050565b60008060009050600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156135815761357a606461356c6015548661372090919063ffffffff16565b61379a90919063ffffffff16565b90506135ff565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156135fe576135fb60646135ed6016548661372090919063ffffffff16565b61379a90919063ffffffff16565b90505b5b60008111156137035761365a81600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461287590919063ffffffff16565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516136fa9190613e6a565b60405180910390a35b61371681846130eb90919063ffffffff16565b9150509392505050565b60008083036137325760009050613794565b6000828461374091906146ca565b905082848261374f919061473b565b1461378f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613786906147de565b60405180910390fd5b809150505b92915050565b60006137dc83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613b90565b905092915050565b6000600267ffffffffffffffff811115613801576138006147fe565b5b60405190808252806020026020018201604052801561382f5781602001602082028036833780820191505090505b50905030816000815181106138475761384661482d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156138ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139129190614173565b816001815181106139265761392561482d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061398d30601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846128db565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016139f1959493929190614955565b600060405180830381600087803b158015613a0b57600080fd5b505af1158015613a1f573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051613a549291906149af565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613aa6573d6000803e3d6000fd5b505050565b613ad830601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846128db565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613b24611cbc565b426040518863ffffffff1660e01b8152600401613b46969594939291906149df565b60606040518083038185885af1158015613b64573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613b899190614a55565b5050505050565b60008083118290613bd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bce9190613c83565b60405180910390fd5b5060008385613be6919061473b565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613c2d578082015181840152602081019050613c12565b60008484015250505050565b6000601f19601f8301169050919050565b6000613c5582613bf3565b613c5f8185613bfe565b9350613c6f818560208601613c0f565b613c7881613c39565b840191505092915050565b60006020820190508181036000830152613c9d8184613c4a565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613cd582613caa565b9050919050565b613ce581613cca565b8114613cf057600080fd5b50565b600081359050613d0281613cdc565b92915050565b6000819050919050565b613d1b81613d08565b8114613d2657600080fd5b50565b600081359050613d3881613d12565b92915050565b60008060408385031215613d5557613d54613ca5565b5b6000613d6385828601613cf3565b9250506020613d7485828601613d29565b9150509250929050565b60008115159050919050565b613d9381613d7e565b82525050565b6000602082019050613dae6000830184613d8a565b92915050565b600060208284031215613dca57613dc9613ca5565b5b6000613dd884828501613cf3565b91505092915050565b6000819050919050565b6000613e06613e01613dfc84613caa565b613de1565b613caa565b9050919050565b6000613e1882613deb565b9050919050565b6000613e2a82613e0d565b9050919050565b613e3a81613e1f565b82525050565b6000602082019050613e556000830184613e31565b92915050565b613e6481613d08565b82525050565b6000602082019050613e7f6000830184613e5b565b92915050565b600080600060608486031215613e9e57613e9d613ca5565b5b6000613eac86828701613d29565b9350506020613ebd86828701613d29565b9250506040613ece86828701613d29565b9150509250925092565b600080600060608486031215613ef157613ef0613ca5565b5b6000613eff86828701613cf3565b9350506020613f1086828701613cf3565b9250506040613f2186828701613d29565b9150509250925092565b613f3481613d7e565b8114613f3f57600080fd5b50565b600081359050613f5181613f2b565b92915050565b600060208284031215613f6d57613f6c613ca5565b5b6000613f7b84828501613f42565b91505092915050565b613f8d81613cca565b82525050565b6000602082019050613fa86000830184613f84565b92915050565b60008060408385031215613fc557613fc4613ca5565b5b6000613fd385828601613cf3565b9250506020613fe485828601613f42565b9150509250929050565b600060ff82169050919050565b61400481613fee565b82525050565b600060208201905061401f6000830184613ffb565b92915050565b60006020828403121561403b5761403a613ca5565b5b600061404984828501613d29565b91505092915050565b6000806040838503121561406957614068613ca5565b5b600061407785828601613cf3565b925050602061408885828601613cf3565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806140d957607f821691505b6020821081036140ec576140eb614092565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614128602083613bfe565b9150614133826140f2565b602082019050919050565b600060208201905081810360008301526141578161411b565b9050919050565b60008151905061416d81613cdc565b92915050565b60006020828403121561418957614188613ca5565b5b60006141978482850161415e565b91505092915050565b60006040820190506141b56000830185613f84565b6141c26020830184613f84565b9392505050565b7f4d61782077616c6c65742073686f756c64206265206c657373206f722065757160008201527f616c20746f20342520746f74616c537570706c79000000000000000000000000602082015250565b6000614225603483613bfe565b9150614230826141c9565b604082019050919050565b6000602082019050818103600083015261425481614218565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006142b7602683613bfe565b91506142c28261425b565b604082019050919050565b600060208201905081810360008301526142e6816142aa565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061432782613d08565b915061433283613d08565b925082820190508082111561434a576143496142ed565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614386601b83613bfe565b915061439182614350565b602082019050919050565b600060208201905081810360008301526143b581614379565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614418602483613bfe565b9150614423826143bc565b604082019050919050565b600060208201905081810360008301526144478161440b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006144aa602283613bfe565b91506144b58261444e565b604082019050919050565b600060208201905081810360008301526144d98161449d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061453c602583613bfe565b9150614547826144e0565b604082019050919050565b6000602082019050818103600083015261456b8161452f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006145ce602383613bfe565b91506145d982614572565b604082019050919050565b600060208201905081810360008301526145fd816145c1565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000614660602883613bfe565b915061466b82614604565b604082019050919050565b6000602082019050818103600083015261468f81614653565b9050919050565b60006146a182613d08565b91506146ac83613d08565b92508282039050818111156146c4576146c36142ed565b5b92915050565b60006146d582613d08565b91506146e083613d08565b92508282026146ee81613d08565b91508282048414831517614705576147046142ed565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061474682613d08565b915061475183613d08565b9250826147615761476061470c565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006147c8602183613bfe565b91506147d38261476c565b604082019050919050565b600060208201905081810360008301526147f7816147bb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b600061488161487c6148778461485c565b613de1565b613d08565b9050919050565b61489181614866565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6148cc81613cca565b82525050565b60006148de83836148c3565b60208301905092915050565b6000602082019050919050565b600061490282614897565b61490c81856148a2565b9350614917836148b3565b8060005b8381101561494857815161492f88826148d2565b975061493a836148ea565b92505060018101905061491b565b5085935050505092915050565b600060a08201905061496a6000830188613e5b565b6149776020830187614888565b818103604083015261498981866148f7565b90506149986060830185613f84565b6149a56080830184613e5b565b9695505050505050565b60006040820190506149c46000830185613e5b565b81810360208301526149d681846148f7565b90509392505050565b600060c0820190506149f46000830189613f84565b614a016020830188613e5b565b614a0e6040830187614888565b614a1b6060830186614888565b614a286080830185613f84565b614a3560a0830184613e5b565b979650505050505050565b600081519050614a4f81613d12565b92915050565b600080600060608486031215614a6e57614a6d613ca5565b5b6000614a7c86828701614a40565b9350506020614a8d86828701614a40565b9250506040614a9e86828701614a40565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d7b1a6431f0817c075f76c983023696273fe6951acb9dbec5c38992d09d0ef5564736f6c63430008110033

Deployed Bytecode Sourcemap

14400:14928:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18095:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19261:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22096:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16062:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18372:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20559:373;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24022:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20186:365;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21584:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14838:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22658:128;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20035:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15340:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15428:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18281:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18758:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21964:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16177:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15120:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15240:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15606:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21705:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22932:813;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15516:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15472:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19890:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15383:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18480:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15892:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15947:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15737:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5939:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21348:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6164:145;;;;;;;;;;;;;:::i;:::-;;18186:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15564:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15781:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18984:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22521:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23847:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15297:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22219:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20944:392;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22342:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15182:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16110:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15648:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16224:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18607:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19775:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15694:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21854:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6317:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16276:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15059:54;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18095:83;18132:13;18165:5;18158:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18095:83;:::o;19261:161::-;19336:4;19353:39;19362:12;:10;:12::i;:::-;19376:7;19385:6;19353:8;:39::i;:::-;19410:4;19403:11;;19261:161;;;;:::o;22096:115::-;6083:12;:10;:12::i;:::-;6073:22;;:6;;;;;;;;;;:22;;;6065:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22192:10:::1;22171;;:32;;;;;;;;;;;;;;;;;;22096:115:::0;:::o;16062:41::-;;;;;;;;;;;;;:::o;18372:100::-;18425:7;18452:12;;18445:19;;18372:100;:::o;20559:373::-;6083:12;:10;:12::i;:::-;6073:22;;:6;;;;;;;;;;:22;;;6065:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20709:15:::1;20688:18;:36;;;;20756:15;20735:18;:36;;;;20805:17;20782:20;:40;;;;20856:68;20903:20;;20856:42;20879:18;;20856;;:22;;:42;;;;:::i;:::-;:46;;:68;;;;:::i;:::-;20835:18;:89;;;;20559:373:::0;;;:::o;24022:313::-;24120:4;24137:36;24147:6;24155:9;24166:6;24137:9;:36::i;:::-;;24184:121;24193:6;24201:12;:10;:12::i;:::-;24215:89;24253:6;24215:89;;;;;;;;;;;;;;;;;:11;:19;24227:6;24215:19;;;;;;;;;;;;;;;:33;24235:12;:10;:12::i;:::-;24215:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;24184:8;:121::i;:::-;24323:4;24316:11;;24022:313;;;;;:::o;20186:365::-;6083:12;:10;:12::i;:::-;6073:22;;:6;;;;;;;;;;:22;;;6065:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20334:15:::1;20314:17;:35;;;;20380:15;20360:17;:35;;;;20428:17;20406:19;:39;;;;20478:65;20523:19;;20478:40;20500:17;;20478;;:21;;:40;;;;:::i;:::-;:44;;:65;;;;:::i;:::-;20458:17;:85;;;;20186:365:::0;;;:::o;21584:113::-;6083:12;:10;:12::i;:::-;6073:22;;:6;;;;;;;;;;:22;;;6065:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21681:8:::1;21662:16;;:27;;;;;;;;;;;;;;;;;;21584:113:::0;:::o;14838:81::-;;;:::o;22658:128::-;22711:7;22738:40;22755:22;22765:11;22755:9;:22::i;:::-;22738:12;;:16;;:40;;;;:::i;:::-;22731:47;;22658:128;:::o;20035:143::-;6083:12;:10;:12::i;:::-;6073:22;;:6;;;;;;;;;;:22;;;6065:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20162:8:::1;20129:21;:30;20151:7;20129:30;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;20035:143:::0;;:::o;15340:36::-;;;;:::o;15428:37::-;;;;:::o;18281:83::-;18322:5;18347:9;;;;;;;;;;;18340:16;;18281:83;:::o;18758:218::-;18846:4;18863:83;18872:12;:10;:12::i;:::-;18886:7;18895:50;18934:10;18895:11;:25;18907:12;:10;:12::i;:::-;18895:25;;;;;;;;;;;;;;;:34;18921:7;18895:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;18863:8;:83::i;:::-;18964:4;18957:11;;18758:218;;;;:::o;21964:124::-;6083:12;:10;:12::i;:::-;6073:22;;:6;;;;;;;;;;:22;;;6065:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22072:8:::1;22046:23;:34;;;;21964:124:::0;:::o;16177:40::-;;;;;;;;;;;;;:::o;15120:55::-;;;;;;;;;;;;;;;;;;;;;;:::o;15240:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;15606:35::-;;;;:::o;21705:141::-;6083:12;:10;:12::i;:::-;6073:22;;:6;;;;;;;;;;:22;;;6065:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21832:6:::1;21799:22;:30;21822:6;21799:30;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;21705:141:::0;;:::o;22932:813::-;23012:22;6083:12;:10;:12::i;:::-;6073:22;;:6;;;;;;;;;;:22;;;6065:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23049:35:::1;23106:16;23049:74;;23172:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23154:53;;;23216:4;23223:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23154:93;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23137:110;;23289:1;23263:28;;:14;:28;;::::0;23260:225:::1;;23377:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23359:74;;;23442:4;23449:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23359:114;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23342:131;;23260:225;23511:14;23497:11;;:28;;;;;;;;;;;;;;;;;;23577:16;23559:15;;:34;;;;;;;;;;;;;;;;;;23678:4;23631:22;:44;23662:11;;;;;;;;;;;23631:44;;;;;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;23733:4;23693:15;:37;23717:11;;;;;;;;;;;23693:37;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;23036:709;22932:813:::0;;;:::o;15516:39::-;;;;:::o;15472:37::-;;;;:::o;19890:133::-;6083:12;:10;:12::i;:::-;6073:22;;:6;;;;;;;;;;:22;;;6065:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20009:6:::1;19980:18;:26;19999:6;19980:26;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;19890:133:::0;;:::o;15383:38::-;;;;:::o;18480:119::-;18546:7;18573:9;:18;18583:7;18573:18;;;;;;;;;;;;;;;;18566:25;;18480:119;;;:::o;15892:48::-;;;;:::o;15947:46::-;;;;:::o;15737:37::-;;;;:::o;5939:79::-;5977:7;6004:6;;;;;;;;;;;5997:13;;5939:79;:::o;21348:228::-;6083:12;:10;:12::i;:::-;6073:22;;:6;;;;;;;;;;:22;;;6065:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21452:21:::1;21436:11;:38;;21428:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;21557:11;21542:12;:26;;;;21348:228:::0;:::o;6164:145::-;6083:12;:10;:12::i;:::-;6073:22;;:6;;;;;;;;;;:22;;;6065:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6268:1:::1;6231:40;;6252:6;::::0;::::1;;;;;;;;6231:40;;;;;;;;;;;;6299:1;6282:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;6164:145::o:0;18186:87::-;18225:13;18258:7;18251:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18186:87;:::o;15564:35::-;;;;:::o;15781:44::-;;;;:::o;18984:269::-;19077:4;19094:129;19103:12;:10;:12::i;:::-;19117:7;19126:96;19165:15;19126:96;;;;;;;;;;;;;;;;;:11;:25;19138:12;:10;:12::i;:::-;19126:25;;;;;;;;;;;;;;;:34;19152:7;19126:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;19094:8;:129::i;:::-;19241:4;19234:11;;18984:269;;;;:::o;22521:125::-;6083:12;:10;:12::i;:::-;6073:22;;:6;;;;;;;;;;:22;;;6065:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22630:8:::1;22602:25;;:36;;;;;;;;;;;;;;;;;;22521:125:::0;:::o;23847:167::-;23925:4;23942:42;23952:12;:10;:12::i;:::-;23966:9;23977:6;23942:9;:42::i;:::-;;24002:4;23995:11;;23847:167;;;;:::o;15297:36::-;;;;:::o;22219:115::-;6083:12;:10;:12::i;:::-;6073:22;;:6;;;;;;;;;;:22;;;6065:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22315:10:::1;22294;;:32;;;;;;;;;;;;;;;;;;22219:115:::0;:::o;20944:392::-;6083:12;:10;:12::i;:::-;6073:22;;:6;;;;;;;;;;:22;;;6065:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21111:17:::1;21092:16;:36;;;;21158:17;21139:16;:36;;;;21207:19;21186:18;:40;;;;21266:62;21309:18;;21266:38;21287:16;;21266;;:20;;:38;;;;:::i;:::-;:42;;:62;;;;:::i;:::-;21239:24;:89;;;;20944:392:::0;;;:::o;22342:171::-;6083:12;:10;:12::i;:::-;6073:22;;:6;;;;;;;;;;:22;;;6065:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22443:8:::1;22419:21;;:32;;;;;;;;;;;;;;;;;;22467:38;22496:8;22467:38;;;;;;:::i;:::-;;;;;;;;22342:171:::0;:::o;15182:51::-;;;;;;;;;;;;;;;;;;;;;;:::o;16110:26::-;;;;;;;;;;;;;:::o;15648:37::-;;;;:::o;16224:45::-;;;;;;;;;;;;;:::o;18607:143::-;18688:7;18715:11;:18;18727:5;18715:18;;;;;;;;;;;;;;;:27;18734:7;18715:27;;;;;;;;;;;;;;;;18708:34;;18607:143;;;;:::o;19775:107::-;6083:12;:10;:12::i;:::-;6073:22;;:6;;;;;;;;;;:22;;;6065:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19870:4:::1;19843:15;:24;19859:7;19843:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;19775:107:::0;:::o;15694:36::-;;;;:::o;21854:102::-;6083:12;:10;:12::i;:::-;6073:22;;:6;;;;;;;;;;:22;;;6065:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21940:8:::1;21926:10;:22;;;;21854:102:::0;:::o;6317:244::-;6083:12;:10;:12::i;:::-;6073:22;;:6;;;;;;;;;;:22;;;6065:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6426:1:::1;6406:22;;:8;:22;;::::0;6398:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;6516:8;6487:38;;6508:6;::::0;::::1;;;;;;;;6487:38;;;;;;;;;;;;6545:8;6536:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;6317:244:::0;:::o;16276:35::-;;;;;;;;;;;;;:::o;15059:54::-;;;;;;;;;;;;;;;;;;;;;;:::o;1341:181::-;1399:7;1419:9;1435:1;1431;:5;;;;:::i;:::-;1419:17;;1460:1;1455;:6;;1447:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1513:1;1506:8;;;1341:181;;;;:::o;273:115::-;326:15;369:10;354:26;;273:115;:::o;19430:337::-;19540:1;19523:19;;:5;:19;;;19515:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19621:1;19602:21;;:7;:21;;;19594:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19705:6;19675:11;:18;19687:5;19675:18;;;;;;;;;;;;;;;:27;19694:7;19675:27;;;;;;;;;;;;;;;:36;;;;19743:7;19727:32;;19736:5;19727:32;;;19752:6;19727:32;;;;;;:::i;:::-;;;;;;;;19430:337;;;:::o;24343:1727::-;24430:4;24475:1;24457:20;;:6;:20;;;24449:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;24559:1;24538:23;;:9;:23;;;24530:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;24617:16;;;;;;;;;;;24614:1449;;;24667:41;24682:6;24690:9;24701:6;24667:14;:41::i;:::-;24660:48;;;;24614:1449;24764:18;:26;24783:6;24764:26;;;;;;;;;;;;;;;;;;;;;;;;;24763:27;:61;;;;;24795:18;:29;24814:9;24795:29;;;;;;;;;;;;;;;;;;;;;;;;;24794:30;24763:61;24760:176;;;24863:12;;24853:6;:22;;24845:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;24760:176;24964:28;24995:24;25013:4;24995:9;:24::i;:::-;24964:55;;25034:28;25089:23;;25065:20;:47;;25034:78;;25145:23;:44;;;;;25173:16;;;;;;;;;;;25172:17;25145:44;:72;;;;;25194:15;:23;25210:6;25194:23;;;;;;;;;;;;;;;;;;;;;;;;;25193:24;25145:72;:97;;;;;25221:21;;;;;;;;;;;25145:97;25141:308;;;25280:25;;;;;;;;;;;25277:97;;;25351:23;;25328:46;;25277:97;25393:36;25408:20;25393:14;:36::i;:::-;25141:308;25485:53;25507:6;25485:53;;;;;;;;;;;;;;;;;:9;:17;25495:6;25485:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;25465:9;:17;25475:6;25465:17;;;;;;;;;;;;;;;:73;;;;25555:19;25578:21;:29;25600:6;25578:29;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;25611:21;:32;25633:9;25611:32;;;;;;;;;;;;;;;;;;;;;;;;;25578:65;25577:156;;25699:34;25707:6;25715:9;25726:6;25699:7;:34::i;:::-;25577:156;;;25690:6;25577:156;25555:178;;25753:16;;;;;;;;;;;:54;;;;;25774:22;:33;25797:9;25774:33;;;;;;;;;;;;;;;;;;;;;;;;;25773:34;25753:54;25750:136;;;25875:10;;25834:37;25859:11;25834:20;25844:9;25834;:20::i;:::-;:24;;:37;;;;:::i;:::-;:51;;25826:60;;;;;;25750:136;25926:37;25951:11;25926:9;:20;25936:9;25926:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;25903:9;:20;25913:9;25903:20;;;;;;;;;;;;;;;:60;;;;26002:9;25985:40;;25994:6;25985:40;;;26013:11;25985:40;;;;;;:::i;:::-;;;;;;;;26047:4;26040:11;;;;;24343:1727;;;;;;:::o;1674:192::-;1760:7;1793:1;1788;:6;;1796:12;1780:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1820:9;1836:1;1832;:5;;;;:::i;:::-;1820:17;;1857:1;1850:8;;;1674:192;;;;;:::o;1530:136::-;1588:7;1615:43;1619:1;1622;1615:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1608:50;;1530:136;;;;:::o;26078:330::-;26171:4;26208:53;26230:6;26208:53;;;;;;;;;;;;;;;;;:9;:17;26218:6;26208:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;26188:9;:17;26198:6;26188:17;;;;;;;;;;;;;;;:73;;;;26295:32;26320:6;26295:9;:20;26305:9;26295:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;26272:9;:20;26282:9;26272:20;;;;;;;;;;;;;;;:55;;;;26360:9;26343:35;;26352:6;26343:35;;;26371:6;26343:35;;;;;;:::i;:::-;;;;;;;;26396:4;26389:11;;26078:330;;;;;:::o;26416:1068::-;16753:4;16734:16;;:23;;;;;;;;;;;;;;;;;;26498:19:::1;26520:66;26584:1;26520:59;26554:24;;26520:29;26532:16;;26520:7;:11;;:29;;;;:::i;:::-;:33;;:59;;;;:::i;:::-;:63;;:66;;;;:::i;:::-;26498:88;;26597:21;26621:24;26633:11;26621:7;:11;;:24;;;;:::i;:::-;26597:48;;26658:31;26675:13;26658:16;:31::i;:::-;26700:22;26725:21;26700:46;;26759:19;26781:53;26810:23;26831:1;26810:16;;:20;;:23;;;;:::i;:::-;26781:24;;:28;;:53;;;;:::i;:::-;26759:75;;26855:26;26884:60;26942:1;26884:53;26925:11;26884:36;26903:16;;26884:14;:18;;:36;;;;:::i;:::-;:40;;:53;;;;:::i;:::-;:57;;:60;;;;:::i;:::-;26855:89;;26955:28;26986:55;27029:11;26986:38;27005:18;;26986:14;:18;;:38;;;;:::i;:::-;:42;;:55;;;;:::i;:::-;26955:86;;27052:26;27081:64;27124:20;27081:38;27100:18;27081:14;:18;;:38;;;;:::i;:::-;:42;;:64;;;;:::i;:::-;27052:93;;27182:1;27161:18;:22;27158:92;;;27198:52;27219:10;;;;;;;;;;;27231:18;27198:20;:52::i;:::-;27158:92;27289:1;27266:20;:24;27263:96;;;27305:54;27326:10;;;;;;;;;;;27338:20;27305;:54::i;:::-;27263:96;27396:1;27375:18;:22;:41;;;;;27415:1;27401:11;:15;27375:41;27372:104;;;27431:45;27444:11;27457:18;27431:12;:45::i;:::-;27372:104;26477:1007;;;;;;;16799:5:::0;16780:16;;:24;;;;;;;;;;;;;;;;;;26416:1068;:::o;28691:628::-;28777:7;28807:17;28827:1;28807:21;;28852:15;:23;28868:6;28852:23;;;;;;;;;;;;;;;;;;;;;;;;;28849:229;;;28904:38;28938:3;28904:29;28915:17;;28904:6;:10;;:29;;;;:::i;:::-;:33;;:38;;;;:::i;:::-;28892:50;;28849:229;;;28972:15;:26;28988:9;28972:26;;;;;;;;;;;;;;;;;;;;;;;;;28969:109;;;29027:39;29062:3;29027:30;29038:18;;29027:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;29015:51;;28969:109;28849:229;29113:1;29101:9;:13;29098:173;;;29158:39;29187:9;29158;:24;29176:4;29158:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;29131:9;:24;29149:4;29131:24;;;;;;;;;;;;;;;:66;;;;29242:4;29217:42;;29226:6;29217:42;;;29249:9;29217:42;;;;;;:::i;:::-;;;;;;;;29098:173;29290:21;29301:9;29290:6;:10;;:21;;;;:::i;:::-;29283:28;;;28691:628;;;;;:::o;1874:250::-;1932:7;1961:1;1956;:6;1952:47;;1986:1;1979:8;;;;1952:47;2011:9;2027:1;2023;:5;;;;:::i;:::-;2011:17;;2056:1;2051;2047;:5;;;;:::i;:::-;:10;2039:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2115:1;2108:8;;;1874:250;;;;;:::o;2132:132::-;2190:7;2217:39;2221:1;2224;2217:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2210:46;;2132:132;;;;:::o;27496:666::-;27622:21;27660:1;27646:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27622:40;;27691:4;27673;27678:1;27673:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27717:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27707:4;27712:1;27707:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;27752:62;27769:4;27784:15;;;;;;;;;;;27802:11;27752:8;:62::i;:::-;27853:15;;;;;;;;;;;:66;;;27934:11;27960:1;28004:4;28031;28067:15;27853:240;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28119:35;28136:11;28149:4;28119:35;;;;;;;:::i;:::-;;;;;;;;27551:611;27496:666;:::o;22794:126::-;22886:9;:18;;:26;22905:6;22886:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22794:126;;:::o;28170:513::-;28318:62;28335:4;28350:15;;;;;;;;;;;28368:11;28318:8;:62::i;:::-;28423:15;;;;;;;;;;;:31;;;28462:9;28495:4;28515:11;28541:1;28584;28627:7;:5;:7::i;:::-;28649:15;28423:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28170:513;;:::o;2272:278::-;2358:7;2390:1;2386;:5;2393:12;2378:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2417:9;2433:1;2429;:5;;;;:::i;:::-;2417:17;;2541:1;2534:8;;;2272:278;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:619::-;5188:6;5196;5204;5253:2;5241:9;5232:7;5228:23;5224:32;5221:119;;;5259:79;;:::i;:::-;5221:119;5379:1;5404:53;5449:7;5440:6;5429:9;5425:22;5404:53;:::i;:::-;5394:63;;5350:117;5506:2;5532:53;5577:7;5568:6;5557:9;5553:22;5532:53;:::i;:::-;5522:63;;5477:118;5634:2;5660:53;5705:7;5696:6;5685:9;5681:22;5660:53;:::i;:::-;5650:63;;5605:118;5111:619;;;;;:::o;5736:::-;5813:6;5821;5829;5878:2;5866:9;5857:7;5853:23;5849:32;5846:119;;;5884:79;;:::i;:::-;5846:119;6004:1;6029:53;6074:7;6065:6;6054:9;6050:22;6029:53;:::i;:::-;6019:63;;5975:117;6131:2;6157:53;6202:7;6193:6;6182:9;6178:22;6157:53;:::i;:::-;6147:63;;6102:118;6259:2;6285:53;6330:7;6321:6;6310:9;6306:22;6285:53;:::i;:::-;6275:63;;6230:118;5736:619;;;;;:::o;6361:116::-;6431:21;6446:5;6431:21;:::i;:::-;6424:5;6421:32;6411:60;;6467:1;6464;6457:12;6411:60;6361:116;:::o;6483:133::-;6526:5;6564:6;6551:20;6542:29;;6580:30;6604:5;6580:30;:::i;:::-;6483:133;;;;:::o;6622:323::-;6678:6;6727:2;6715:9;6706:7;6702:23;6698:32;6695:119;;;6733:79;;:::i;:::-;6695:119;6853:1;6878:50;6920:7;6911:6;6900:9;6896:22;6878:50;:::i;:::-;6868:60;;6824:114;6622:323;;;;:::o;6951:118::-;7038:24;7056:5;7038:24;:::i;:::-;7033:3;7026:37;6951:118;;:::o;7075:222::-;7168:4;7206:2;7195:9;7191:18;7183:26;;7219:71;7287:1;7276:9;7272:17;7263:6;7219:71;:::i;:::-;7075:222;;;;:::o;7303:468::-;7368:6;7376;7425:2;7413:9;7404:7;7400:23;7396:32;7393:119;;;7431:79;;:::i;:::-;7393:119;7551:1;7576:53;7621:7;7612:6;7601:9;7597:22;7576:53;:::i;:::-;7566:63;;7522:117;7678:2;7704:50;7746:7;7737:6;7726:9;7722:22;7704:50;:::i;:::-;7694:60;;7649:115;7303:468;;;;;:::o;7777:86::-;7812:7;7852:4;7845:5;7841:16;7830:27;;7777:86;;;:::o;7869:112::-;7952:22;7968:5;7952:22;:::i;:::-;7947:3;7940:35;7869:112;;:::o;7987:214::-;8076:4;8114:2;8103:9;8099:18;8091:26;;8127:67;8191:1;8180:9;8176:17;8167:6;8127:67;:::i;:::-;7987:214;;;;:::o;8207:329::-;8266:6;8315:2;8303:9;8294:7;8290:23;8286:32;8283:119;;;8321:79;;:::i;:::-;8283:119;8441:1;8466:53;8511:7;8502:6;8491:9;8487:22;8466:53;:::i;:::-;8456:63;;8412:117;8207:329;;;;:::o;8542:474::-;8610:6;8618;8667:2;8655:9;8646:7;8642:23;8638:32;8635:119;;;8673:79;;:::i;:::-;8635:119;8793:1;8818:53;8863:7;8854:6;8843:9;8839:22;8818:53;:::i;:::-;8808:63;;8764:117;8920:2;8946:53;8991:7;8982:6;8971:9;8967:22;8946:53;:::i;:::-;8936:63;;8891:118;8542:474;;;;;:::o;9022:180::-;9070:77;9067:1;9060:88;9167:4;9164:1;9157:15;9191:4;9188:1;9181:15;9208:320;9252:6;9289:1;9283:4;9279:12;9269:22;;9336:1;9330:4;9326:12;9357:18;9347:81;;9413:4;9405:6;9401:17;9391:27;;9347:81;9475:2;9467:6;9464:14;9444:18;9441:38;9438:84;;9494:18;;:::i;:::-;9438:84;9259:269;9208:320;;;:::o;9534:182::-;9674:34;9670:1;9662:6;9658:14;9651:58;9534:182;:::o;9722:366::-;9864:3;9885:67;9949:2;9944:3;9885:67;:::i;:::-;9878:74;;9961:93;10050:3;9961:93;:::i;:::-;10079:2;10074:3;10070:12;10063:19;;9722:366;;;:::o;10094:419::-;10260:4;10298:2;10287:9;10283:18;10275:26;;10347:9;10341:4;10337:20;10333:1;10322:9;10318:17;10311:47;10375:131;10501:4;10375:131;:::i;:::-;10367:139;;10094:419;;;:::o;10519:143::-;10576:5;10607:6;10601:13;10592:22;;10623:33;10650:5;10623:33;:::i;:::-;10519:143;;;;:::o;10668:351::-;10738:6;10787:2;10775:9;10766:7;10762:23;10758:32;10755:119;;;10793:79;;:::i;:::-;10755:119;10913:1;10938:64;10994:7;10985:6;10974:9;10970:22;10938:64;:::i;:::-;10928:74;;10884:128;10668:351;;;;:::o;11025:332::-;11146:4;11184:2;11173:9;11169:18;11161:26;;11197:71;11265:1;11254:9;11250:17;11241:6;11197:71;:::i;:::-;11278:72;11346:2;11335:9;11331:18;11322:6;11278:72;:::i;:::-;11025:332;;;;;:::o;11363:239::-;11503:34;11499:1;11491:6;11487:14;11480:58;11572:22;11567:2;11559:6;11555:15;11548:47;11363:239;:::o;11608:366::-;11750:3;11771:67;11835:2;11830:3;11771:67;:::i;:::-;11764:74;;11847:93;11936:3;11847:93;:::i;:::-;11965:2;11960:3;11956:12;11949:19;;11608:366;;;:::o;11980:419::-;12146:4;12184:2;12173:9;12169:18;12161:26;;12233:9;12227:4;12223:20;12219:1;12208:9;12204:17;12197:47;12261:131;12387:4;12261:131;:::i;:::-;12253:139;;11980:419;;;:::o;12405:225::-;12545:34;12541:1;12533:6;12529:14;12522:58;12614:8;12609:2;12601:6;12597:15;12590:33;12405:225;:::o;12636:366::-;12778:3;12799:67;12863:2;12858:3;12799:67;:::i;:::-;12792:74;;12875:93;12964:3;12875:93;:::i;:::-;12993:2;12988:3;12984:12;12977:19;;12636:366;;;:::o;13008:419::-;13174:4;13212:2;13201:9;13197:18;13189:26;;13261:9;13255:4;13251:20;13247:1;13236:9;13232:17;13225:47;13289:131;13415:4;13289:131;:::i;:::-;13281:139;;13008:419;;;:::o;13433:180::-;13481:77;13478:1;13471:88;13578:4;13575:1;13568:15;13602:4;13599:1;13592:15;13619:191;13659:3;13678:20;13696:1;13678:20;:::i;:::-;13673:25;;13712:20;13730:1;13712:20;:::i;:::-;13707:25;;13755:1;13752;13748:9;13741:16;;13776:3;13773:1;13770:10;13767:36;;;13783:18;;:::i;:::-;13767:36;13619:191;;;;:::o;13816:177::-;13956:29;13952:1;13944:6;13940:14;13933:53;13816:177;:::o;13999:366::-;14141:3;14162:67;14226:2;14221:3;14162:67;:::i;:::-;14155:74;;14238:93;14327:3;14238:93;:::i;:::-;14356:2;14351:3;14347:12;14340:19;;13999:366;;;:::o;14371:419::-;14537:4;14575:2;14564:9;14560:18;14552:26;;14624:9;14618:4;14614:20;14610:1;14599:9;14595:17;14588:47;14652:131;14778:4;14652:131;:::i;:::-;14644:139;;14371:419;;;:::o;14796:223::-;14936:34;14932:1;14924:6;14920:14;14913:58;15005:6;15000:2;14992:6;14988:15;14981:31;14796:223;:::o;15025:366::-;15167:3;15188:67;15252:2;15247:3;15188:67;:::i;:::-;15181:74;;15264:93;15353:3;15264:93;:::i;:::-;15382:2;15377:3;15373:12;15366:19;;15025:366;;;:::o;15397:419::-;15563:4;15601:2;15590:9;15586:18;15578:26;;15650:9;15644:4;15640:20;15636:1;15625:9;15621:17;15614:47;15678:131;15804:4;15678:131;:::i;:::-;15670:139;;15397:419;;;:::o;15822:221::-;15962:34;15958:1;15950:6;15946:14;15939:58;16031:4;16026:2;16018:6;16014:15;16007:29;15822:221;:::o;16049:366::-;16191:3;16212:67;16276:2;16271:3;16212:67;:::i;:::-;16205:74;;16288:93;16377:3;16288:93;:::i;:::-;16406:2;16401:3;16397:12;16390:19;;16049:366;;;:::o;16421:419::-;16587:4;16625:2;16614:9;16610:18;16602:26;;16674:9;16668:4;16664:20;16660:1;16649:9;16645:17;16638:47;16702:131;16828:4;16702:131;:::i;:::-;16694:139;;16421:419;;;:::o;16846:224::-;16986:34;16982:1;16974:6;16970:14;16963:58;17055:7;17050:2;17042:6;17038:15;17031:32;16846:224;:::o;17076:366::-;17218:3;17239:67;17303:2;17298:3;17239:67;:::i;:::-;17232:74;;17315:93;17404:3;17315:93;:::i;:::-;17433:2;17428:3;17424:12;17417:19;;17076:366;;;:::o;17448:419::-;17614:4;17652:2;17641:9;17637:18;17629:26;;17701:9;17695:4;17691:20;17687:1;17676:9;17672:17;17665:47;17729:131;17855:4;17729:131;:::i;:::-;17721:139;;17448:419;;;:::o;17873:222::-;18013:34;18009:1;18001:6;17997:14;17990:58;18082:5;18077:2;18069:6;18065:15;18058:30;17873:222;:::o;18101:366::-;18243:3;18264:67;18328:2;18323:3;18264:67;:::i;:::-;18257:74;;18340:93;18429:3;18340:93;:::i;:::-;18458:2;18453:3;18449:12;18442:19;;18101:366;;;:::o;18473:419::-;18639:4;18677:2;18666:9;18662:18;18654:26;;18726:9;18720:4;18716:20;18712:1;18701:9;18697:17;18690:47;18754:131;18880:4;18754:131;:::i;:::-;18746:139;;18473:419;;;:::o;18898:227::-;19038:34;19034:1;19026:6;19022:14;19015:58;19107:10;19102:2;19094:6;19090:15;19083:35;18898:227;:::o;19131:366::-;19273:3;19294:67;19358:2;19353:3;19294:67;:::i;:::-;19287:74;;19370:93;19459:3;19370:93;:::i;:::-;19488:2;19483:3;19479:12;19472:19;;19131:366;;;:::o;19503:419::-;19669:4;19707:2;19696:9;19692:18;19684:26;;19756:9;19750:4;19746:20;19742:1;19731:9;19727:17;19720:47;19784:131;19910:4;19784:131;:::i;:::-;19776:139;;19503:419;;;:::o;19928:194::-;19968:4;19988:20;20006:1;19988:20;:::i;:::-;19983:25;;20022:20;20040:1;20022:20;:::i;:::-;20017:25;;20066:1;20063;20059:9;20051:17;;20090:1;20084:4;20081:11;20078:37;;;20095:18;;:::i;:::-;20078:37;19928:194;;;;:::o;20128:410::-;20168:7;20191:20;20209:1;20191:20;:::i;:::-;20186:25;;20225:20;20243:1;20225:20;:::i;:::-;20220:25;;20280:1;20277;20273:9;20302:30;20320:11;20302:30;:::i;:::-;20291:41;;20481:1;20472:7;20468:15;20465:1;20462:22;20442:1;20435:9;20415:83;20392:139;;20511:18;;:::i;:::-;20392:139;20176:362;20128:410;;;;:::o;20544:180::-;20592:77;20589:1;20582:88;20689:4;20686:1;20679:15;20713:4;20710:1;20703:15;20730:185;20770:1;20787:20;20805:1;20787:20;:::i;:::-;20782:25;;20821:20;20839:1;20821:20;:::i;:::-;20816:25;;20860:1;20850:35;;20865:18;;:::i;:::-;20850:35;20907:1;20904;20900:9;20895:14;;20730:185;;;;:::o;20921:220::-;21061:34;21057:1;21049:6;21045:14;21038:58;21130:3;21125:2;21117:6;21113:15;21106:28;20921:220;:::o;21147:366::-;21289:3;21310:67;21374:2;21369:3;21310:67;:::i;:::-;21303:74;;21386:93;21475:3;21386:93;:::i;:::-;21504:2;21499:3;21495:12;21488:19;;21147:366;;;:::o;21519:419::-;21685:4;21723:2;21712:9;21708:18;21700:26;;21772:9;21766:4;21762:20;21758:1;21747:9;21743:17;21736:47;21800:131;21926:4;21800:131;:::i;:::-;21792:139;;21519:419;;;:::o;21944:180::-;21992:77;21989:1;21982:88;22089:4;22086:1;22079:15;22113:4;22110:1;22103:15;22130:180;22178:77;22175:1;22168:88;22275:4;22272:1;22265:15;22299:4;22296:1;22289:15;22316:85;22361:7;22390:5;22379:16;;22316:85;;;:::o;22407:158::-;22465:9;22498:61;22516:42;22525:32;22551:5;22525:32;:::i;:::-;22516:42;:::i;:::-;22498:61;:::i;:::-;22485:74;;22407:158;;;:::o;22571:147::-;22666:45;22705:5;22666:45;:::i;:::-;22661:3;22654:58;22571:147;;:::o;22724:114::-;22791:6;22825:5;22819:12;22809:22;;22724:114;;;:::o;22844:184::-;22943:11;22977:6;22972:3;22965:19;23017:4;23012:3;23008:14;22993:29;;22844:184;;;;:::o;23034:132::-;23101:4;23124:3;23116:11;;23154:4;23149:3;23145:14;23137:22;;23034:132;;;:::o;23172:108::-;23249:24;23267:5;23249:24;:::i;:::-;23244:3;23237:37;23172:108;;:::o;23286:179::-;23355:10;23376:46;23418:3;23410:6;23376:46;:::i;:::-;23454:4;23449:3;23445:14;23431:28;;23286:179;;;;:::o;23471:113::-;23541:4;23573;23568:3;23564:14;23556:22;;23471:113;;;:::o;23620:732::-;23739:3;23768:54;23816:5;23768:54;:::i;:::-;23838:86;23917:6;23912:3;23838:86;:::i;:::-;23831:93;;23948:56;23998:5;23948:56;:::i;:::-;24027:7;24058:1;24043:284;24068:6;24065:1;24062:13;24043:284;;;24144:6;24138:13;24171:63;24230:3;24215:13;24171:63;:::i;:::-;24164:70;;24257:60;24310:6;24257:60;:::i;:::-;24247:70;;24103:224;24090:1;24087;24083:9;24078:14;;24043:284;;;24047:14;24343:3;24336:10;;23744:608;;;23620:732;;;;:::o;24358:831::-;24621:4;24659:3;24648:9;24644:19;24636:27;;24673:71;24741:1;24730:9;24726:17;24717:6;24673:71;:::i;:::-;24754:80;24830:2;24819:9;24815:18;24806:6;24754:80;:::i;:::-;24881:9;24875:4;24871:20;24866:2;24855:9;24851:18;24844:48;24909:108;25012:4;25003:6;24909:108;:::i;:::-;24901:116;;25027:72;25095:2;25084:9;25080:18;25071:6;25027:72;:::i;:::-;25109:73;25177:3;25166:9;25162:19;25153:6;25109:73;:::i;:::-;24358:831;;;;;;;;:::o;25195:483::-;25366:4;25404:2;25393:9;25389:18;25381:26;;25417:71;25485:1;25474:9;25470:17;25461:6;25417:71;:::i;:::-;25535:9;25529:4;25525:20;25520:2;25509:9;25505:18;25498:48;25563:108;25666:4;25657:6;25563:108;:::i;:::-;25555:116;;25195:483;;;;;:::o;25684:807::-;25933:4;25971:3;25960:9;25956:19;25948:27;;25985:71;26053:1;26042:9;26038:17;26029:6;25985:71;:::i;:::-;26066:72;26134:2;26123:9;26119:18;26110:6;26066:72;:::i;:::-;26148:80;26224:2;26213:9;26209:18;26200:6;26148:80;:::i;:::-;26238;26314:2;26303:9;26299:18;26290:6;26238:80;:::i;:::-;26328:73;26396:3;26385:9;26381:19;26372:6;26328:73;:::i;:::-;26411;26479:3;26468:9;26464:19;26455:6;26411:73;:::i;:::-;25684:807;;;;;;;;;:::o;26497:143::-;26554:5;26585:6;26579:13;26570:22;;26601:33;26628:5;26601:33;:::i;:::-;26497:143;;;;:::o;26646:663::-;26734:6;26742;26750;26799:2;26787:9;26778:7;26774:23;26770:32;26767:119;;;26805:79;;:::i;:::-;26767:119;26925:1;26950:64;27006:7;26997:6;26986:9;26982:22;26950:64;:::i;:::-;26940:74;;26896:128;27063:2;27089:64;27145:7;27136:6;27125:9;27121:22;27089:64;:::i;:::-;27079:74;;27034:129;27202:2;27228:64;27284:7;27275:6;27264:9;27260:22;27228:64;:::i;:::-;27218:74;;27173:129;26646:663;;;;;:::o

Swarm Source

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