ETH Price: $2,330.20 (+1.81%)

Token

SafeX (SFX)
 

Overview

Max Total Supply

500,000,000 SFX

Holders

63

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
177,275.659475833 SFX

Value
$0.00
0xfca5ad6d57697ff96f6a407dc8b8ce5cd28ed867
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:
SafeX

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-05-29
*/

/**

*/


// SPDX-License-Identifier: MIT Licence
pragma solidity ^0.8.4;



abstract contract Context {

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

    function _msgData() internal view virtual returns (bytes memory) {
        this; 
        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) {
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        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 SafeX is Context, IERC20, Ownable {
    
    using SafeMath for uint256;
    using Address for address;
    
    string private _name = "SafeX";
    string private _symbol = "SFX";
    uint8 private _decimals = 9;

    address payable public MarketingWallet = payable(0xF2236BBd938AF426AFfF073E8998cdaa838b3922);
    address payable public SAFEXWallet = payable(0xF2236BBd938AF426AFfF073E8998cdaa838b3922);
    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;
    
    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    
    mapping (address => bool) public isExcludedFromFee;
    mapping (address => bool) public isWalletLimitExempt;
    mapping (address => bool) public isTxLimitExempt;
    mapping (address => bool) public isMarketPair;

    uint256 private _buyLiquidityFee = 1;
    uint256 private _buyMarketingFee = 3;
    uint256 private _buySafexFee = 0;
    uint256 private _sellLiquidityFee = 1;
    uint256 private _sellMarketingFee = 4;
    uint256 private _sellSafexFee = 1;

    uint256 private _liquidityShare = 1;
    uint256 private _marketingShare = 2;
    uint256 private _SafeXShare = 1;

    uint256 public _totalTaxIfBuying = 3;
    uint256 public _totalTaxIfSelling = 4;
    uint256 private _totalDistributionShares = 4;

    uint256 public _totalSupply = 500 * 10**6 * 10**9;
    uint256 public _maxTxAmount = 500 * 10**6 * 10**9;
    uint256 public _walletMax = 500 * 10**6 * 10**9;
    uint256 private minimumTokensBeforeSwap = 25000 * 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;

        isExcludedFromFee[owner()] = true;
        isExcludedFromFee[address(this)] = true;
        
        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(_buySafexFee);
        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellSafexFee);
        _totalDistributionShares = _liquidityShare.add(_marketingShare).add(_SafeXShare);

        isWalletLimitExempt[owner()] = true;
        isWalletLimitExempt[address(uniswapPair)] = true;
        isWalletLimitExempt[address(this)] = true;
        
        isTxLimitExempt[owner()] = true;
        isTxLimitExempt[address(this)] = true;

        isMarketPair[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 {
        isMarketPair[account] = true;
    }

    function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner {
        isTxLimitExempt[holder] = exempt;
    }
    
    function setIsExcludedFromFee(address account, bool newValue) public onlyOwner {
        isExcludedFromFee[account] = newValue;
    }
    
    function setDistributionSettings(uint256 newLiquidityShare, uint256 newMarketingShare, uint256 newDragonShare) external onlyOwner() {
        _liquidityShare = newLiquidityShare;
        _marketingShare = newMarketingShare;
        _SafeXShare = newDragonShare;

        _totalDistributionShares = _liquidityShare.add(_marketingShare).add(_SafeXShare);
    }

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

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

    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

        isWalletLimitExempt[address(uniswapPair)] = true;
        isMarketPair[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(!isTxLimitExempt[sender] && !isTxLimitExempt[recipient]) {
                require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            }            

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

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

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

            if(checkWalletLimit && !isWalletLimitExempt[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(_liquidityShare).div(_totalDistributionShares).div(2);
        uint256 tokensForSwap = tAmount.sub(tokensForLP);

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

        uint256 totalETHFee = _totalDistributionShares.sub(_liquidityShare.div(2));
        
        uint256 amountETHLiquidity = amountReceived.mul(_liquidityShare).div(totalETHFee).div(2);
        uint256 amountETHDev = amountReceived.mul(_SafeXShare).div(totalETHFee);
        uint256 amountETHMarketing = amountReceived.sub(amountETHLiquidity).sub(amountETHDev);

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

        if(amountETHDev > 0)
            transferToAddressETH(SAFEXWallet, amountETHDev);

        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(isMarketPair[sender]) {
            feeAmount = amount.mul(_totalTaxIfBuying).div(100);
        }
        else if(isMarketPair[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":"MarketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SAFEXWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalSupply","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":"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":[],"name":"checkWalletLimit","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":[],"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":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMarketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWalletLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityShare","type":"uint256"},{"internalType":"uint256","name":"newMarketingShare","type":"uint256"},{"internalType":"uint256","name":"newDragonShare","type":"uint256"}],"name":"setDistributionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setIsExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsWalletLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setNumTokensBeforeSwap","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":[],"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"}]

60a06040526040518060400160405280600581526020017f5361666558000000000000000000000000000000000000000000000000000000815250600290805190602001906200005192919062000b42565b506040518060400160405280600381526020017f5346580000000000000000000000000000000000000000000000000000000000815250600390805190602001906200009f92919062000b42565b506009600460006101000a81548160ff021916908360ff16021790555073f2236bbd938af426afff073e8998cdaa838b3922600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073f2236bbd938af426afff073e8998cdaa838b3922600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b8152506001600c556003600d556000600e556001600f55600460105560016011556001601255600260135560016014556003601555600460165560046017556706f05b59d3b200006018556706f05b59d3b200006019556706f05b59d3b20000601a556516bcc41e9000601b556001601d60156101000a81548160ff0219169083151502179055506000601d60166101000a81548160ff0219169083151502179055506001601d60176101000a81548160ff0219169083151502179055503480156200026657600080fd5b5060006200027962000aae60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200037757600080fd5b505afa1580156200038c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003b2919062000c09565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200041557600080fd5b505afa1580156200042a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000450919062000c09565b6040518363ffffffff1660e01b81526004016200046f92919062000c7e565b602060405180830381600087803b1580156200048a57600080fd5b505af11580156200049f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004c5919062000c09565b601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601854600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600860006200060162000ab660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620006e3600e54620006cf600d54600c5462000adf60201b62001fe41790919060201c565b62000adf60201b62001fe41790919060201c565b601581905550620007226011546200070e601054600f5462000adf60201b62001fe41790919060201c565b62000adf60201b62001fe41790919060201c565b601681905550620007616014546200074d60135460125462000adf60201b62001fe41790919060201c565b62000adf60201b62001fe41790919060201c565b6017819055506001600960006200077d62000ab660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000620008b662000ab660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060185460066000620009f062000aae60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000a3e62000aae60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60185460405162000a9f919062000ccd565b60405180910390a35062000e6d565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080828462000af0919062000cfb565b90508381101562000b38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b2f9062000cab565b60405180910390fd5b8091505092915050565b82805462000b509062000d96565b90600052602060002090601f01602090048101928262000b74576000855562000bc0565b82601f1062000b8f57805160ff191683800117855562000bc0565b8280016001018555821562000bc0579182015b8281111562000bbf57825182559160200191906001019062000ba2565b5b50905062000bcf919062000bd3565b5090565b5b8082111562000bee57600081600090555060010162000bd4565b5090565b60008151905062000c038162000e53565b92915050565b60006020828403121562000c1c57600080fd5b600062000c2c8482850162000bf2565b91505092915050565b62000c408162000d58565b82525050565b600062000c55601b8362000cea565b915062000c628262000e2a565b602082019050919050565b62000c788162000d8c565b82525050565b600060408201905062000c95600083018562000c35565b62000ca4602083018462000c35565b9392505050565b6000602082019050818103600083015262000cc68162000c46565b9050919050565b600060208201905062000ce4600083018462000c6d565b92915050565b600082825260208201905092915050565b600062000d088262000d8c565b915062000d158362000d8c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000d4d5762000d4c62000dcc565b5b828201905092915050565b600062000d658262000d6c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000600282049050600182168062000daf57607f821691505b6020821081141562000dc65762000dc562000dfb565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b62000e5e8162000d58565b811462000e6a57600080fd5b50565b60805160601c61424c62000e9360003960008181610cbd0152610ce9015261424c6000f3fe60806040526004361061024a5760003560e01c806382eefb4311610139578063c816841b116100b6578063ef422a181161007a578063ef422a18146108ef578063f0cd1dac14610918578063f2fde38b14610943578063f45477f71461096c578063f84ba65d14610997578063f872858a146109c057610251565b8063c816841b146107f6578063c867d60b14610821578063da00097d1461085e578063dd62ed3e14610889578063e207a92b146108c657610251565b8063a457c2d7116100fd578063a457c2d714610701578063a5d69d1f1461073e578063a9059cbb14610767578063c2d4640e146107a4578063c49b9a80146107cd57610251565b806382eefb431461062c5780638b42507f146106575780638da5cb5b14610694578063914eb66a146106bf57806395d89b41146106d657610251565b806339509351116101c75780635342acb41161018b5780635342acb41461051f5780635881f3ef1461055c57806370a08231146105995780637d1db4a5146105d6578063807c2d9c1461060157610251565b806339509351146104265780633b97084a146104635780633eaaf86b1461048c5780633ecad271146104b75780634a74bb02146104f457610251565b806323b872dd1161020e57806323b872dd1461033d5780632598cdb21461037a57806327c8f835146103a55780632b112e49146103d0578063313ce567146103fb57610251565b806306fdde0314610256578063095ea7b3146102815780631694505e146102be57806318160ddd146102e95780632198cf6c1461031457610251565b3661025157005b600080fd5b34801561026257600080fd5b5061026b6109eb565b60405161027891906139fd565b60405180910390f35b34801561028d57600080fd5b506102a860048036038101906102a39190613579565b610a7d565b6040516102b591906139c7565b60405180910390f35b3480156102ca57600080fd5b506102d3610a9b565b6040516102e091906139e2565b60405180910390f35b3480156102f557600080fd5b506102fe610ac1565b60405161030b9190613b3f565b60405180910390f35b34801561032057600080fd5b5061033b6004803603810190610336919061353d565b610acb565b005b34801561034957600080fd5b50610364600480360381019061035f91906134ee565b610bbb565b60405161037191906139c7565b60405180910390f35b34801561038657600080fd5b5061038f610c95565b60405161039c9190613922565b60405180910390f35b3480156103b157600080fd5b506103ba610cbb565b6040516103c79190613907565b60405180910390f35b3480156103dc57600080fd5b506103e5610cdf565b6040516103f29190613b3f565b60405180910390f35b34801561040757600080fd5b50610410610d23565b60405161041d9190613be4565b60405180910390f35b34801561043257600080fd5b5061044d60048036038101906104489190613579565b610d3a565b60405161045a91906139c7565b60405180910390f35b34801561046f57600080fd5b5061048a600480360381019061048591906135de565b610ded565b005b34801561049857600080fd5b506104a1610e8c565b6040516104ae9190613b3f565b60405180910390f35b3480156104c357600080fd5b506104de60048036038101906104d99190613460565b610e92565b6040516104eb91906139c7565b60405180910390f35b34801561050057600080fd5b50610509610eb2565b60405161051691906139c7565b60405180910390f35b34801561052b57600080fd5b5061054660048036038101906105419190613460565b610ec5565b60405161055391906139c7565b60405180910390f35b34801561056857600080fd5b50610583600480360381019061057e9190613460565b610ee5565b6040516105909190613907565b60405180910390f35b3480156105a557600080fd5b506105c060048036038101906105bb9190613460565b611443565b6040516105cd9190613b3f565b60405180910390f35b3480156105e257600080fd5b506105eb61148c565b6040516105f89190613b3f565b60405180910390f35b34801561060d57600080fd5b50610616611492565b6040516106239190613b3f565b60405180910390f35b34801561063857600080fd5b50610641611498565b60405161064e9190613b3f565b60405180910390f35b34801561066357600080fd5b5061067e60048036038101906106799190613460565b61149e565b60405161068b91906139c7565b60405180910390f35b3480156106a057600080fd5b506106a96114be565b6040516106b69190613907565b60405180910390f35b3480156106cb57600080fd5b506106d46114e7565b005b3480156106e257600080fd5b506106eb61163a565b6040516106f891906139fd565b60405180910390f35b34801561070d57600080fd5b5061072860048036038101906107239190613579565b6116cc565b60405161073591906139c7565b60405180910390f35b34801561074a57600080fd5b50610765600480360381019061076091906135b5565b611799565b005b34801561077357600080fd5b5061078e60048036038101906107899190613579565b61184b565b60405161079b91906139c7565b60405180910390f35b3480156107b057600080fd5b506107cb60048036038101906107c69190613607565b61186a565b005b3480156107d957600080fd5b506107f460048036038101906107ef91906135b5565b61194a565b005b34801561080257600080fd5b5061080b611a33565b6040516108189190613907565b60405180910390f35b34801561082d57600080fd5b5061084860048036038101906108439190613460565b611a59565b60405161085591906139c7565b60405180910390f35b34801561086a57600080fd5b50610873611a79565b60405161088091906139c7565b60405180910390f35b34801561089557600080fd5b506108b060048036038101906108ab91906134b2565b611a8c565b6040516108bd9190613b3f565b60405180910390f35b3480156108d257600080fd5b506108ed60048036038101906108e89190613460565b611b13565b005b3480156108fb57600080fd5b506109166004803603810190610911919061353d565b611c03565b005b34801561092457600080fd5b5061092d611cf3565b60405161093a9190613b3f565b60405180910390f35b34801561094f57600080fd5b5061096a60048036038101906109659190613460565b611cf9565b005b34801561097857600080fd5b50610981611ebb565b60405161098e9190613922565b60405180910390f35b3480156109a357600080fd5b506109be60048036038101906109b9919061353d565b611ee1565b005b3480156109cc57600080fd5b506109d5611fd1565b6040516109e291906139c7565b60405180910390f35b6060600280546109fa90613e39565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2690613e39565b8015610a735780601f10610a4857610100808354040283529160200191610a73565b820191906000526020600020905b815481529060010190602001808311610a5657829003601f168201915b5050505050905090565b6000610a91610a8a612042565b848461204a565b6001905092915050565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601854905090565b610ad3612042565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5790613adf565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000610bc8848484612215565b50610c8a84610bd5612042565b610c85856040518060600160405280602881526020016141ca60289139600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c3b612042565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127fa9092919063ffffffff16565b61204a565b600190509392505050565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610d1e610d0d7f0000000000000000000000000000000000000000000000000000000000000000611443565b60185461285e90919063ffffffff16565b905090565b6000600460009054906101000a900460ff16905090565b6000610de3610d47612042565b84610dde8560076000610d58612042565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fe490919063ffffffff16565b61204a565b6001905092915050565b610df5612042565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7990613adf565b60405180910390fd5b80601b8190555050565b60185481565b600b6020528060005260406000206000915054906101000a900460ff1681565b601d60159054906101000a900460ff1681565b60086020528060005260406000206000915054906101000a900460ff1681565b6000610eef612042565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7390613adf565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610fc757600080fd5b505afa158015610fdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fff9190613489565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561106157600080fd5b505afa158015611075573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110999190613489565b6040518363ffffffff1660e01b81526004016110b692919061393d565b60206040518083038186803b1580156110ce57600080fd5b505afa1580156110e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111069190613489565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112c7578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561118357600080fd5b505afa158015611197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bb9190613489565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561121d57600080fd5b505afa158015611231573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112559190613489565b6040518363ffffffff1660e01b815260040161127292919061393d565b602060405180830381600087803b15801561128c57600080fd5b505af11580156112a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c49190613489565b91505b81601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160096000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050919050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60195481565b601a5481565b60165481565b600a6020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6114ef612042565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461157c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157390613adf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60606003805461164990613e39565b80601f016020809104026020016040519081016040528092919081815260200182805461167590613e39565b80156116c25780601f10611697576101008083540402835291602001916116c2565b820191906000526020600020905b8154815290600101906020018083116116a557829003601f168201915b5050505050905090565b600061178f6116d9612042565b8461178a856040518060600160405280602581526020016141f26025913960076000611703612042565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127fa9092919063ffffffff16565b61204a565b6001905092915050565b6117a1612042565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461182e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182590613adf565b60405180910390fd5b80601d60166101000a81548160ff02191690831515021790555050565b600061185f611858612042565b8484612215565b506001905092915050565b611872612042565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f690613adf565b60405180910390fd5b82601281905550816013819055508060148190555061193f601454611931601354601254611fe490919063ffffffff16565b611fe490919063ffffffff16565b601781905550505050565b611952612042565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d690613adf565b60405180910390fd5b80601d60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611a2891906139c7565b60405180910390a150565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60096020528060005260406000206000915054906101000a900460ff1681565b601d60169054906101000a900460ff1681565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611b1b612042565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ba8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9f90613adf565b60405180910390fd5b6001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611c0b612042565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8f90613adf565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60155481565b611d01612042565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8590613adf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df590613a3f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611ee9612042565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6d90613adf565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601d60179054906101000a900460ff1681565b6000808284611ff39190613c54565b905083811015612038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202f90613a7f565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156120ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b190613b1f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561212a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212190613a5f565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516122089190613b3f565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612286576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227d90613aff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ed90613a1f565b60405180910390fd5b601d60149054906101000a900460ff161561231d576123168484846128a8565b90506127f3565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156123c15750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561240c5760195482111561240b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240290613a9f565b60405180910390fd5b5b600061241730611443565b90506000601b54821015905080801561243d5750601d60149054906101000a900460ff16155b80156124935750600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156124ab5750601d60159054906101000a900460ff165b156124d557601d60169054906101000a900460ff16156124cb57601b5491505b6124d482612a7b565b5b61255e846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127fa9092919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806126445750600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61265857612653878787612c6c565b61265a565b845b9050601d60179054906101000a900460ff1680156126c25750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156126f157601a546126e5826126d789611443565b611fe490919063ffffffff16565b11156126f057600080fd5b5b61274381600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fe490919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516127e39190613b3f565b60405180910390a3600193505050505b9392505050565b6000838311158290612842576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283991906139fd565b60405180910390fd5b50600083856128519190613d35565b9050809150509392505050565b60006128a083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506127fa565b905092915050565b6000612933826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127fa9092919063ffffffff16565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506129c882600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fe490919063ffffffff16565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612a689190613b3f565b60405180910390a3600190509392505050565b6001601d60146101000a81548160ff0219169083151502179055506000612ad46002612ac6601754612ab860125487612e9390919063ffffffff16565b612f0e90919063ffffffff16565b612f0e90919063ffffffff16565b90506000612aeb828461285e90919063ffffffff16565b9050612af681612f58565b60004790506000612b27612b166002601254612f0e90919063ffffffff16565b60175461285e90919063ffffffff16565b90506000612b656002612b5784612b4960125488612e9390919063ffffffff16565b612f0e90919063ffffffff16565b612f0e90919063ffffffff16565b90506000612b9083612b8260145487612e9390919063ffffffff16565b612f0e90919063ffffffff16565b90506000612bb982612bab858861285e90919063ffffffff16565b61285e90919063ffffffff16565b90506000811115612bf157612bf0600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613255565b5b6000821115612c2757612c26600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613255565b5b600083118015612c375750600087115b15612c4757612c4687846132a0565b5b505050505050506000601d60146101000a81548160ff02191690831515021790555050565b60008060009050600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612cf457612ced6064612cdf60155486612e9390919063ffffffff16565b612f0e90919063ffffffff16565b9050612d72565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612d7157612d6e6064612d6060165486612e9390919063ffffffff16565b612f0e90919063ffffffff16565b90505b5b6000811115612e7657612dcd81600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fe490919063ffffffff16565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612e6d9190613b3f565b60405180910390a35b612e89818461285e90919063ffffffff16565b9150509392505050565b600080831415612ea65760009050612f08565b60008284612eb49190613cdb565b9050828482612ec39190613caa565b14612f03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612efa90613abf565b60405180910390fd5b809150505b92915050565b6000612f5083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613394565b905092915050565b6000600267ffffffffffffffff811115612f9b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015612fc95781602001602082028036833780820191505090505b5090503081600081518110613007577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156130a957600080fd5b505afa1580156130bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130e19190613489565b8160018151811061311b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061318230601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461204a565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016131e6959493929190613b8a565b600060405180830381600087803b15801561320057600080fd5b505af1158015613214573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051613249929190613b5a565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561329b573d6000803e3d6000fd5b505050565b6132cd30601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461204a565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806133196114be565b426040518863ffffffff1660e01b815260040161333b96959493929190613966565b6060604051808303818588803b15801561335457600080fd5b505af1158015613368573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061338d9190613656565b5050505050565b600080831182906133db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133d291906139fd565b60405180910390fd5b50600083856133ea9190613caa565b9050809150509392505050565b60008135905061340681614184565b92915050565b60008151905061341b81614184565b92915050565b6000813590506134308161419b565b92915050565b600081359050613445816141b2565b92915050565b60008151905061345a816141b2565b92915050565b60006020828403121561347257600080fd5b6000613480848285016133f7565b91505092915050565b60006020828403121561349b57600080fd5b60006134a98482850161340c565b91505092915050565b600080604083850312156134c557600080fd5b60006134d3858286016133f7565b92505060206134e4858286016133f7565b9150509250929050565b60008060006060848603121561350357600080fd5b6000613511868287016133f7565b9350506020613522868287016133f7565b925050604061353386828701613436565b9150509250925092565b6000806040838503121561355057600080fd5b600061355e858286016133f7565b925050602061356f85828601613421565b9150509250929050565b6000806040838503121561358c57600080fd5b600061359a858286016133f7565b92505060206135ab85828601613436565b9150509250929050565b6000602082840312156135c757600080fd5b60006135d584828501613421565b91505092915050565b6000602082840312156135f057600080fd5b60006135fe84828501613436565b91505092915050565b60008060006060848603121561361c57600080fd5b600061362a86828701613436565b935050602061363b86828701613436565b925050604061364c86828701613436565b9150509250925092565b60008060006060848603121561366b57600080fd5b60006136798682870161344b565b935050602061368a8682870161344b565b925050604061369b8682870161344b565b9150509250925092565b60006136b183836136cc565b60208301905092915050565b6136c681613d7b565b82525050565b6136d581613d69565b82525050565b6136e481613d69565b82525050565b60006136f582613c0f565b6136ff8185613c32565b935061370a83613bff565b8060005b8381101561373b57815161372288826136a5565b975061372d83613c25565b92505060018101905061370e565b5085935050505092915050565b61375181613d8d565b82525050565b61376081613dd0565b82525050565b61376f81613df4565b82525050565b600061378082613c1a565b61378a8185613c43565b935061379a818560208601613e06565b6137a381613ef8565b840191505092915050565b60006137bb602383613c43565b91506137c682613f09565b604082019050919050565b60006137de602683613c43565b91506137e982613f58565b604082019050919050565b6000613801602283613c43565b915061380c82613fa7565b604082019050919050565b6000613824601b83613c43565b915061382f82613ff6565b602082019050919050565b6000613847602883613c43565b91506138528261401f565b604082019050919050565b600061386a602183613c43565b91506138758261406e565b604082019050919050565b600061388d602083613c43565b9150613898826140bd565b602082019050919050565b60006138b0602583613c43565b91506138bb826140e6565b604082019050919050565b60006138d3602483613c43565b91506138de82614135565b604082019050919050565b6138f281613db9565b82525050565b61390181613dc3565b82525050565b600060208201905061391c60008301846136db565b92915050565b600060208201905061393760008301846136bd565b92915050565b600060408201905061395260008301856136db565b61395f60208301846136db565b9392505050565b600060c08201905061397b60008301896136db565b61398860208301886138e9565b6139956040830187613766565b6139a26060830186613766565b6139af60808301856136db565b6139bc60a08301846138e9565b979650505050505050565b60006020820190506139dc6000830184613748565b92915050565b60006020820190506139f76000830184613757565b92915050565b60006020820190508181036000830152613a178184613775565b905092915050565b60006020820190508181036000830152613a38816137ae565b9050919050565b60006020820190508181036000830152613a58816137d1565b9050919050565b60006020820190508181036000830152613a78816137f4565b9050919050565b60006020820190508181036000830152613a9881613817565b9050919050565b60006020820190508181036000830152613ab88161383a565b9050919050565b60006020820190508181036000830152613ad88161385d565b9050919050565b60006020820190508181036000830152613af881613880565b9050919050565b60006020820190508181036000830152613b18816138a3565b9050919050565b60006020820190508181036000830152613b38816138c6565b9050919050565b6000602082019050613b5460008301846138e9565b92915050565b6000604082019050613b6f60008301856138e9565b8181036020830152613b8181846136ea565b90509392505050565b600060a082019050613b9f60008301886138e9565b613bac6020830187613766565b8181036040830152613bbe81866136ea565b9050613bcd60608301856136db565b613bda60808301846138e9565b9695505050505050565b6000602082019050613bf960008301846138f8565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000613c5f82613db9565b9150613c6a83613db9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613c9f57613c9e613e6b565b5b828201905092915050565b6000613cb582613db9565b9150613cc083613db9565b925082613cd057613ccf613e9a565b5b828204905092915050565b6000613ce682613db9565b9150613cf183613db9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613d2a57613d29613e6b565b5b828202905092915050565b6000613d4082613db9565b9150613d4b83613db9565b925082821015613d5e57613d5d613e6b565b5b828203905092915050565b6000613d7482613d99565b9050919050565b6000613d8682613d99565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000613ddb82613de2565b9050919050565b6000613ded82613d99565b9050919050565b6000613dff82613db9565b9050919050565b60005b83811015613e24578082015181840152602081019050613e09565b83811115613e33576000848401525b50505050565b60006002820490506001821680613e5157607f821691505b60208210811415613e6557613e64613ec9565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b61418d81613d69565b811461419857600080fd5b50565b6141a481613d8d565b81146141af57600080fd5b50565b6141bb81613db9565b81146141c657600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a527da801ef5e683411457c7c19f2188f420dbc5dfc837798dfd746e9d6bfb3764736f6c63430008040033

Deployed Bytecode

0x60806040526004361061024a5760003560e01c806382eefb4311610139578063c816841b116100b6578063ef422a181161007a578063ef422a18146108ef578063f0cd1dac14610918578063f2fde38b14610943578063f45477f71461096c578063f84ba65d14610997578063f872858a146109c057610251565b8063c816841b146107f6578063c867d60b14610821578063da00097d1461085e578063dd62ed3e14610889578063e207a92b146108c657610251565b8063a457c2d7116100fd578063a457c2d714610701578063a5d69d1f1461073e578063a9059cbb14610767578063c2d4640e146107a4578063c49b9a80146107cd57610251565b806382eefb431461062c5780638b42507f146106575780638da5cb5b14610694578063914eb66a146106bf57806395d89b41146106d657610251565b806339509351116101c75780635342acb41161018b5780635342acb41461051f5780635881f3ef1461055c57806370a08231146105995780637d1db4a5146105d6578063807c2d9c1461060157610251565b806339509351146104265780633b97084a146104635780633eaaf86b1461048c5780633ecad271146104b75780634a74bb02146104f457610251565b806323b872dd1161020e57806323b872dd1461033d5780632598cdb21461037a57806327c8f835146103a55780632b112e49146103d0578063313ce567146103fb57610251565b806306fdde0314610256578063095ea7b3146102815780631694505e146102be57806318160ddd146102e95780632198cf6c1461031457610251565b3661025157005b600080fd5b34801561026257600080fd5b5061026b6109eb565b60405161027891906139fd565b60405180910390f35b34801561028d57600080fd5b506102a860048036038101906102a39190613579565b610a7d565b6040516102b591906139c7565b60405180910390f35b3480156102ca57600080fd5b506102d3610a9b565b6040516102e091906139e2565b60405180910390f35b3480156102f557600080fd5b506102fe610ac1565b60405161030b9190613b3f565b60405180910390f35b34801561032057600080fd5b5061033b6004803603810190610336919061353d565b610acb565b005b34801561034957600080fd5b50610364600480360381019061035f91906134ee565b610bbb565b60405161037191906139c7565b60405180910390f35b34801561038657600080fd5b5061038f610c95565b60405161039c9190613922565b60405180910390f35b3480156103b157600080fd5b506103ba610cbb565b6040516103c79190613907565b60405180910390f35b3480156103dc57600080fd5b506103e5610cdf565b6040516103f29190613b3f565b60405180910390f35b34801561040757600080fd5b50610410610d23565b60405161041d9190613be4565b60405180910390f35b34801561043257600080fd5b5061044d60048036038101906104489190613579565b610d3a565b60405161045a91906139c7565b60405180910390f35b34801561046f57600080fd5b5061048a600480360381019061048591906135de565b610ded565b005b34801561049857600080fd5b506104a1610e8c565b6040516104ae9190613b3f565b60405180910390f35b3480156104c357600080fd5b506104de60048036038101906104d99190613460565b610e92565b6040516104eb91906139c7565b60405180910390f35b34801561050057600080fd5b50610509610eb2565b60405161051691906139c7565b60405180910390f35b34801561052b57600080fd5b5061054660048036038101906105419190613460565b610ec5565b60405161055391906139c7565b60405180910390f35b34801561056857600080fd5b50610583600480360381019061057e9190613460565b610ee5565b6040516105909190613907565b60405180910390f35b3480156105a557600080fd5b506105c060048036038101906105bb9190613460565b611443565b6040516105cd9190613b3f565b60405180910390f35b3480156105e257600080fd5b506105eb61148c565b6040516105f89190613b3f565b60405180910390f35b34801561060d57600080fd5b50610616611492565b6040516106239190613b3f565b60405180910390f35b34801561063857600080fd5b50610641611498565b60405161064e9190613b3f565b60405180910390f35b34801561066357600080fd5b5061067e60048036038101906106799190613460565b61149e565b60405161068b91906139c7565b60405180910390f35b3480156106a057600080fd5b506106a96114be565b6040516106b69190613907565b60405180910390f35b3480156106cb57600080fd5b506106d46114e7565b005b3480156106e257600080fd5b506106eb61163a565b6040516106f891906139fd565b60405180910390f35b34801561070d57600080fd5b5061072860048036038101906107239190613579565b6116cc565b60405161073591906139c7565b60405180910390f35b34801561074a57600080fd5b50610765600480360381019061076091906135b5565b611799565b005b34801561077357600080fd5b5061078e60048036038101906107899190613579565b61184b565b60405161079b91906139c7565b60405180910390f35b3480156107b057600080fd5b506107cb60048036038101906107c69190613607565b61186a565b005b3480156107d957600080fd5b506107f460048036038101906107ef91906135b5565b61194a565b005b34801561080257600080fd5b5061080b611a33565b6040516108189190613907565b60405180910390f35b34801561082d57600080fd5b5061084860048036038101906108439190613460565b611a59565b60405161085591906139c7565b60405180910390f35b34801561086a57600080fd5b50610873611a79565b60405161088091906139c7565b60405180910390f35b34801561089557600080fd5b506108b060048036038101906108ab91906134b2565b611a8c565b6040516108bd9190613b3f565b60405180910390f35b3480156108d257600080fd5b506108ed60048036038101906108e89190613460565b611b13565b005b3480156108fb57600080fd5b506109166004803603810190610911919061353d565b611c03565b005b34801561092457600080fd5b5061092d611cf3565b60405161093a9190613b3f565b60405180910390f35b34801561094f57600080fd5b5061096a60048036038101906109659190613460565b611cf9565b005b34801561097857600080fd5b50610981611ebb565b60405161098e9190613922565b60405180910390f35b3480156109a357600080fd5b506109be60048036038101906109b9919061353d565b611ee1565b005b3480156109cc57600080fd5b506109d5611fd1565b6040516109e291906139c7565b60405180910390f35b6060600280546109fa90613e39565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2690613e39565b8015610a735780601f10610a4857610100808354040283529160200191610a73565b820191906000526020600020905b815481529060010190602001808311610a5657829003601f168201915b5050505050905090565b6000610a91610a8a612042565b848461204a565b6001905092915050565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601854905090565b610ad3612042565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5790613adf565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000610bc8848484612215565b50610c8a84610bd5612042565b610c85856040518060600160405280602881526020016141ca60289139600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c3b612042565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127fa9092919063ffffffff16565b61204a565b600190509392505050565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000dead81565b6000610d1e610d0d7f000000000000000000000000000000000000000000000000000000000000dead611443565b60185461285e90919063ffffffff16565b905090565b6000600460009054906101000a900460ff16905090565b6000610de3610d47612042565b84610dde8560076000610d58612042565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fe490919063ffffffff16565b61204a565b6001905092915050565b610df5612042565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7990613adf565b60405180910390fd5b80601b8190555050565b60185481565b600b6020528060005260406000206000915054906101000a900460ff1681565b601d60159054906101000a900460ff1681565b60086020528060005260406000206000915054906101000a900460ff1681565b6000610eef612042565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7390613adf565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610fc757600080fd5b505afa158015610fdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fff9190613489565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561106157600080fd5b505afa158015611075573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110999190613489565b6040518363ffffffff1660e01b81526004016110b692919061393d565b60206040518083038186803b1580156110ce57600080fd5b505afa1580156110e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111069190613489565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112c7578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561118357600080fd5b505afa158015611197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bb9190613489565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561121d57600080fd5b505afa158015611231573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112559190613489565b6040518363ffffffff1660e01b815260040161127292919061393d565b602060405180830381600087803b15801561128c57600080fd5b505af11580156112a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c49190613489565b91505b81601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160096000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050919050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60195481565b601a5481565b60165481565b600a6020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6114ef612042565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461157c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157390613adf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60606003805461164990613e39565b80601f016020809104026020016040519081016040528092919081815260200182805461167590613e39565b80156116c25780601f10611697576101008083540402835291602001916116c2565b820191906000526020600020905b8154815290600101906020018083116116a557829003601f168201915b5050505050905090565b600061178f6116d9612042565b8461178a856040518060600160405280602581526020016141f26025913960076000611703612042565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127fa9092919063ffffffff16565b61204a565b6001905092915050565b6117a1612042565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461182e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182590613adf565b60405180910390fd5b80601d60166101000a81548160ff02191690831515021790555050565b600061185f611858612042565b8484612215565b506001905092915050565b611872612042565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f690613adf565b60405180910390fd5b82601281905550816013819055508060148190555061193f601454611931601354601254611fe490919063ffffffff16565b611fe490919063ffffffff16565b601781905550505050565b611952612042565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d690613adf565b60405180910390fd5b80601d60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611a2891906139c7565b60405180910390a150565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60096020528060005260406000206000915054906101000a900460ff1681565b601d60169054906101000a900460ff1681565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611b1b612042565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ba8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9f90613adf565b60405180910390fd5b6001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611c0b612042565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8f90613adf565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60155481565b611d01612042565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8590613adf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df590613a3f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611ee9612042565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6d90613adf565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601d60179054906101000a900460ff1681565b6000808284611ff39190613c54565b905083811015612038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202f90613a7f565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156120ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b190613b1f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561212a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212190613a5f565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516122089190613b3f565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612286576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227d90613aff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ed90613a1f565b60405180910390fd5b601d60149054906101000a900460ff161561231d576123168484846128a8565b90506127f3565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156123c15750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561240c5760195482111561240b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240290613a9f565b60405180910390fd5b5b600061241730611443565b90506000601b54821015905080801561243d5750601d60149054906101000a900460ff16155b80156124935750600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156124ab5750601d60159054906101000a900460ff165b156124d557601d60169054906101000a900460ff16156124cb57601b5491505b6124d482612a7b565b5b61255e846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127fa9092919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806126445750600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61265857612653878787612c6c565b61265a565b845b9050601d60179054906101000a900460ff1680156126c25750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156126f157601a546126e5826126d789611443565b611fe490919063ffffffff16565b11156126f057600080fd5b5b61274381600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fe490919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516127e39190613b3f565b60405180910390a3600193505050505b9392505050565b6000838311158290612842576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283991906139fd565b60405180910390fd5b50600083856128519190613d35565b9050809150509392505050565b60006128a083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506127fa565b905092915050565b6000612933826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127fa9092919063ffffffff16565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506129c882600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fe490919063ffffffff16565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612a689190613b3f565b60405180910390a3600190509392505050565b6001601d60146101000a81548160ff0219169083151502179055506000612ad46002612ac6601754612ab860125487612e9390919063ffffffff16565b612f0e90919063ffffffff16565b612f0e90919063ffffffff16565b90506000612aeb828461285e90919063ffffffff16565b9050612af681612f58565b60004790506000612b27612b166002601254612f0e90919063ffffffff16565b60175461285e90919063ffffffff16565b90506000612b656002612b5784612b4960125488612e9390919063ffffffff16565b612f0e90919063ffffffff16565b612f0e90919063ffffffff16565b90506000612b9083612b8260145487612e9390919063ffffffff16565b612f0e90919063ffffffff16565b90506000612bb982612bab858861285e90919063ffffffff16565b61285e90919063ffffffff16565b90506000811115612bf157612bf0600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613255565b5b6000821115612c2757612c26600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613255565b5b600083118015612c375750600087115b15612c4757612c4687846132a0565b5b505050505050506000601d60146101000a81548160ff02191690831515021790555050565b60008060009050600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612cf457612ced6064612cdf60155486612e9390919063ffffffff16565b612f0e90919063ffffffff16565b9050612d72565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612d7157612d6e6064612d6060165486612e9390919063ffffffff16565b612f0e90919063ffffffff16565b90505b5b6000811115612e7657612dcd81600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fe490919063ffffffff16565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612e6d9190613b3f565b60405180910390a35b612e89818461285e90919063ffffffff16565b9150509392505050565b600080831415612ea65760009050612f08565b60008284612eb49190613cdb565b9050828482612ec39190613caa565b14612f03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612efa90613abf565b60405180910390fd5b809150505b92915050565b6000612f5083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613394565b905092915050565b6000600267ffffffffffffffff811115612f9b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015612fc95781602001602082028036833780820191505090505b5090503081600081518110613007577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156130a957600080fd5b505afa1580156130bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130e19190613489565b8160018151811061311b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061318230601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461204a565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016131e6959493929190613b8a565b600060405180830381600087803b15801561320057600080fd5b505af1158015613214573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051613249929190613b5a565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561329b573d6000803e3d6000fd5b505050565b6132cd30601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461204a565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806133196114be565b426040518863ffffffff1660e01b815260040161333b96959493929190613966565b6060604051808303818588803b15801561335457600080fd5b505af1158015613368573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061338d9190613656565b5050505050565b600080831182906133db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133d291906139fd565b60405180910390fd5b50600083856133ea9190613caa565b9050809150509392505050565b60008135905061340681614184565b92915050565b60008151905061341b81614184565b92915050565b6000813590506134308161419b565b92915050565b600081359050613445816141b2565b92915050565b60008151905061345a816141b2565b92915050565b60006020828403121561347257600080fd5b6000613480848285016133f7565b91505092915050565b60006020828403121561349b57600080fd5b60006134a98482850161340c565b91505092915050565b600080604083850312156134c557600080fd5b60006134d3858286016133f7565b92505060206134e4858286016133f7565b9150509250929050565b60008060006060848603121561350357600080fd5b6000613511868287016133f7565b9350506020613522868287016133f7565b925050604061353386828701613436565b9150509250925092565b6000806040838503121561355057600080fd5b600061355e858286016133f7565b925050602061356f85828601613421565b9150509250929050565b6000806040838503121561358c57600080fd5b600061359a858286016133f7565b92505060206135ab85828601613436565b9150509250929050565b6000602082840312156135c757600080fd5b60006135d584828501613421565b91505092915050565b6000602082840312156135f057600080fd5b60006135fe84828501613436565b91505092915050565b60008060006060848603121561361c57600080fd5b600061362a86828701613436565b935050602061363b86828701613436565b925050604061364c86828701613436565b9150509250925092565b60008060006060848603121561366b57600080fd5b60006136798682870161344b565b935050602061368a8682870161344b565b925050604061369b8682870161344b565b9150509250925092565b60006136b183836136cc565b60208301905092915050565b6136c681613d7b565b82525050565b6136d581613d69565b82525050565b6136e481613d69565b82525050565b60006136f582613c0f565b6136ff8185613c32565b935061370a83613bff565b8060005b8381101561373b57815161372288826136a5565b975061372d83613c25565b92505060018101905061370e565b5085935050505092915050565b61375181613d8d565b82525050565b61376081613dd0565b82525050565b61376f81613df4565b82525050565b600061378082613c1a565b61378a8185613c43565b935061379a818560208601613e06565b6137a381613ef8565b840191505092915050565b60006137bb602383613c43565b91506137c682613f09565b604082019050919050565b60006137de602683613c43565b91506137e982613f58565b604082019050919050565b6000613801602283613c43565b915061380c82613fa7565b604082019050919050565b6000613824601b83613c43565b915061382f82613ff6565b602082019050919050565b6000613847602883613c43565b91506138528261401f565b604082019050919050565b600061386a602183613c43565b91506138758261406e565b604082019050919050565b600061388d602083613c43565b9150613898826140bd565b602082019050919050565b60006138b0602583613c43565b91506138bb826140e6565b604082019050919050565b60006138d3602483613c43565b91506138de82614135565b604082019050919050565b6138f281613db9565b82525050565b61390181613dc3565b82525050565b600060208201905061391c60008301846136db565b92915050565b600060208201905061393760008301846136bd565b92915050565b600060408201905061395260008301856136db565b61395f60208301846136db565b9392505050565b600060c08201905061397b60008301896136db565b61398860208301886138e9565b6139956040830187613766565b6139a26060830186613766565b6139af60808301856136db565b6139bc60a08301846138e9565b979650505050505050565b60006020820190506139dc6000830184613748565b92915050565b60006020820190506139f76000830184613757565b92915050565b60006020820190508181036000830152613a178184613775565b905092915050565b60006020820190508181036000830152613a38816137ae565b9050919050565b60006020820190508181036000830152613a58816137d1565b9050919050565b60006020820190508181036000830152613a78816137f4565b9050919050565b60006020820190508181036000830152613a9881613817565b9050919050565b60006020820190508181036000830152613ab88161383a565b9050919050565b60006020820190508181036000830152613ad88161385d565b9050919050565b60006020820190508181036000830152613af881613880565b9050919050565b60006020820190508181036000830152613b18816138a3565b9050919050565b60006020820190508181036000830152613b38816138c6565b9050919050565b6000602082019050613b5460008301846138e9565b92915050565b6000604082019050613b6f60008301856138e9565b8181036020830152613b8181846136ea565b90509392505050565b600060a082019050613b9f60008301886138e9565b613bac6020830187613766565b8181036040830152613bbe81866136ea565b9050613bcd60608301856136db565b613bda60808301846138e9565b9695505050505050565b6000602082019050613bf960008301846138f8565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000613c5f82613db9565b9150613c6a83613db9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613c9f57613c9e613e6b565b5b828201905092915050565b6000613cb582613db9565b9150613cc083613db9565b925082613cd057613ccf613e9a565b5b828204905092915050565b6000613ce682613db9565b9150613cf183613db9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613d2a57613d29613e6b565b5b828202905092915050565b6000613d4082613db9565b9150613d4b83613db9565b925082821015613d5e57613d5d613e6b565b5b828203905092915050565b6000613d7482613d99565b9050919050565b6000613d8682613d99565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000613ddb82613de2565b9050919050565b6000613ded82613d99565b9050919050565b6000613dff82613db9565b9050919050565b60005b83811015613e24578082015181840152602081019050613e09565b83811115613e33576000848401525b50505050565b60006002820490506001821680613e5157607f821691505b60208210811415613e6557613e64613ec9565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b61418d81613d69565b811461419857600080fd5b50565b6141a481613d8d565b81146141af57600080fd5b50565b6141bb81613db9565b81146141c657600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a527da801ef5e683411457c7c19f2188f420dbc5dfc837798dfd746e9d6bfb3764736f6c63430008040033

Deployed Bytecode Sourcemap

13829:13250:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17436:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18602:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15456:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17713:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19886:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21835:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14066:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14260:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20477:128;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17622:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18099:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20029:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15225:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14652:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15571:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14481:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20751:807;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17821:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15281:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15337:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15128:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14597:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5368:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5593:145;;;;;;;;;;;;;:::i;:::-;;17527:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18325:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20340:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21660:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19514:364;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20161:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15504:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14538:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15618:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17948:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19116:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19367:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15085:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5746:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14165:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19228:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15670:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17436:83;17473:13;17506:5;17499:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17436:83;:::o;18602:161::-;18677:4;18694:39;18703:12;:10;:12::i;:::-;18717:7;18726:6;18694:8;:39::i;:::-;18751:4;18744:11;;18602:161;;;;:::o;15456:41::-;;;;;;;;;;;;;:::o;17713:100::-;17766:7;17793:12;;17786:19;;17713:100;:::o;19886:135::-;5512:12;:10;:12::i;:::-;5502:22;;:6;;;;;;;;;;:22;;;5494:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20007:6:::1;19977:19;:27;19997:6;19977:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;19886:135:::0;;:::o;21835:313::-;21933:4;21950:36;21960:6;21968:9;21979:6;21950:9;:36::i;:::-;;21997:121;22006:6;22014:12;:10;:12::i;:::-;22028:89;22066:6;22028:89;;;;;;;;;;;;;;;;;:11;:19;22040:6;22028:19;;;;;;;;;;;;;;;:33;22048:12;:10;:12::i;:::-;22028:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;21997:8;:121::i;:::-;22136:4;22129:11;;21835:313;;;;;:::o;14066:92::-;;;;;;;;;;;;;:::o;14260:81::-;;;:::o;20477:128::-;20530:7;20557:40;20574:22;20584:11;20574:9;:22::i;:::-;20557:12;;:16;;:40;;;;:::i;:::-;20550:47;;20477:128;:::o;17622:83::-;17663:5;17688:9;;;;;;;;;;;17681:16;;17622:83;:::o;18099:218::-;18187:4;18204:83;18213:12;:10;:12::i;:::-;18227:7;18236:50;18275:10;18236:11;:25;18248:12;:10;:12::i;:::-;18236:25;;;;;;;;;;;;;;;:34;18262:7;18236:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;18204:8;:83::i;:::-;18305:4;18298:11;;18099:218;;;;:::o;20029:124::-;5512:12;:10;:12::i;:::-;5502:22;;:6;;;;;;;;;;:22;;;5494:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20137:8:::1;20111:23;:34;;;;20029:124:::0;:::o;15225:49::-;;;;:::o;14652:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;15571:40::-;;;;;;;;;;;;;:::o;14481:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;20751:807::-;20831:22;5512:12;:10;:12::i;:::-;5502:22;;:6;;;;;;;;;;:22;;;5494:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20868:35:::1;20925:16;20868:74;;20991:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20973:53;;;21035:4;21042:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20973:93;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20956:110;;21108:1;21082:28;;:14;:28;;;21079:225;;;21196:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21178:74;;;21261:4;21268:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21178:114;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21161:131;;21079:225;21330:14;21316:11;;:28;;;;;;;;;;;;;;;;;;21396:16;21378:15;;:34;;;;;;;;;;;;;;;;;;21494:4;21450:19;:41;21478:11;;;;;;;;;;;21450:41;;;;;;;;;;;;;;;;:48;;;;;;;;;;;;;;;;;;21546:4;21509:12;:34;21530:11;;;;;;;;;;;21509:34;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;5572:1;20751:807:::0;;;:::o;17821:119::-;17887:7;17914:9;:18;17924:7;17914:18;;;;;;;;;;;;;;;;17907:25;;17821:119;;;:::o;15281:49::-;;;;:::o;15337:47::-;;;;:::o;15128:37::-;;;;:::o;14597:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;5368:79::-;5406:7;5433:6;;;;;;;;;;;5426:13;;5368:79;:::o;5593:145::-;5512:12;:10;:12::i;:::-;5502:22;;:6;;;;;;;;;;:22;;;5494:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;5697:1:::1;5660:40;;5681:6;::::0;::::1;;;;;;;;5660:40;;;;;;;;;;;;5728:1;5711:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;5593:145::o:0;17527:87::-;17566:13;17599:7;17592:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17527:87;:::o;18325:269::-;18418:4;18435:129;18444:12;:10;:12::i;:::-;18458:7;18467:96;18506:15;18467:96;;;;;;;;;;;;;;;;;:11;:25;18479:12;:10;:12::i;:::-;18467:25;;;;;;;;;;;;;;;:34;18493:7;18467:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;18435:8;:129::i;:::-;18582:4;18575:11;;18325:269;;;;:::o;20340:125::-;5512:12;:10;:12::i;:::-;5502:22;;:6;;;;;;;;;;:22;;;5494:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20449:8:::1;20421:25;;:36;;;;;;;;;;;;;;;;;;20340:125:::0;:::o;21660:167::-;21738:4;21755:42;21765:12;:10;:12::i;:::-;21779:9;21790:6;21755:9;:42::i;:::-;;21815:4;21808:11;;21660:167;;;;:::o;19514:364::-;5512:12;:10;:12::i;:::-;5502:22;;:6;;;;;;;;;;:22;;;5494:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19675:17:::1;19657:15;:35;;;;19721:17;19703:15;:35;;;;19763:14;19749:11;:28;;;;19817:53;19858:11;;19817:36;19837:15;;19817;;:19;;:36;;;;:::i;:::-;:40;;:53;;;;:::i;:::-;19790:24;:80;;;;19514:364:::0;;;:::o;20161:171::-;5512:12;:10;:12::i;:::-;5502:22;;:6;;;;;;;;;;:22;;;5494:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20262:8:::1;20238:21;;:32;;;;;;;;;;;;;;;;;;20286:38;20315:8;20286:38;;;;;;:::i;:::-;;;;;;;;20161:171:::0;:::o;15504:26::-;;;;;;;;;;;;;:::o;14538:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;15618:45::-;;;;;;;;;;;;;:::o;17948:143::-;18029:7;18056:11;:18;18068:5;18056:18;;;;;;;;;;;;;;;:27;18075:7;18056:27;;;;;;;;;;;;;;;;18049:34;;17948:143;;;;:::o;19116:104::-;5512:12;:10;:12::i;:::-;5502:22;;:6;;;;;;;;;;:22;;;5494:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19208:4:::1;19184:12;:21;19197:7;19184:21;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;19116:104:::0;:::o;19367:135::-;5512:12;:10;:12::i;:::-;5502:22;;:6;;;;;;;;;;:22;;;5494:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19486:8:::1;19457:17;:26;19475:7;19457:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;19367:135:::0;;:::o;15085:36::-;;;;:::o;5746:244::-;5512:12;:10;:12::i;:::-;5502:22;;:6;;;;;;;;;;:22;;;5494:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;5855:1:::1;5835:22;;:8;:22;;;;5827:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5945:8;5916:38;;5937:6;::::0;::::1;;;;;;;;5916:38;;;;;;;;;;;;5974:8;5965:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;5746:244:::0;:::o;14165:88::-;;;;;;;;;;;;;:::o;19228:127::-;5512:12;:10;:12::i;:::-;5502:22;;:6;;;;;;;;;;:22;;;5494:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19341:6:::1;19315:15;:23;19331:6;19315:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;19228:127:::0;;:::o;15670:35::-;;;;;;;;;;;;;:::o;1072:181::-;1130:7;1150:9;1166:1;1162;:5;;;;:::i;:::-;1150:17;;1191:1;1186;:6;;1178:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1244:1;1237:8;;;1072:181;;;;:::o;122:115::-;175:15;218:10;203:26;;122:115;:::o;18771:337::-;18881:1;18864:19;;:5;:19;;;;18856:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18962:1;18943:21;;:7;:21;;;;18935:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19046:6;19016:11;:18;19028:5;19016:18;;;;;;;;;;;;;;;:27;19035:7;19016:27;;;;;;;;;;;;;;;:36;;;;19084:7;19068:32;;19077:5;19068:32;;;19093:6;19068:32;;;;;;:::i;:::-;;;;;;;;18771:337;;;:::o;22156:1707::-;22243:4;22288:1;22270:20;;:6;:20;;;;22262:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;22372:1;22351:23;;:9;:23;;;;22343:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;22430:16;;;;;;;;;;;22427:1429;;;22480:41;22495:6;22503:9;22514:6;22480:14;:41::i;:::-;22473:48;;;;22427:1429;22577:15;:23;22593:6;22577:23;;;;;;;;;;;;;;;;;;;;;;;;;22576:24;:55;;;;;22605:15;:26;22621:9;22605:26;;;;;;;;;;;;;;;;;;;;;;;;;22604:27;22576:55;22573:170;;;22670:12;;22660:6;:22;;22652:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;22573:170;22771:28;22802:24;22820:4;22802:9;:24::i;:::-;22771:55;;22841:28;22896:23;;22872:20;:47;;22841:78;;22952:23;:44;;;;;22980:16;;;;;;;;;;;22979:17;22952:44;:69;;;;;23001:12;:20;23014:6;23001:20;;;;;;;;;;;;;;;;;;;;;;;;;23000:21;22952:69;:94;;;;;23025:21;;;;;;;;;;;22952:94;22948:305;;;23084:25;;;;;;;;;;;23081:97;;;23155:23;;23132:46;;23081:97;23197:36;23212:20;23197:14;:36::i;:::-;22948:305;23289:53;23311:6;23289:53;;;;;;;;;;;;;;;;;:9;:17;23299:6;23289:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;23269:9;:17;23279:6;23269:17;;;;;;;;;;;;;;;:73;;;;23359:19;23382:17;:25;23400:6;23382:25;;;;;;;;;;;;;;;;;;;;;;;;;:57;;;;23411:17;:28;23429:9;23411:28;;;;;;;;;;;;;;;;;;;;;;;;;23382:57;23381:148;;23495:34;23503:6;23511:9;23522:6;23495:7;:34::i;:::-;23381:148;;;23486:6;23381:148;23359:170;;23549:16;;;;;;;;;;;:51;;;;;23570:19;:30;23590:9;23570:30;;;;;;;;;;;;;;;;;;;;;;;;;23569:31;23549:51;23546:133;;;23668:10;;23627:37;23652:11;23627:20;23637:9;23627;:20::i;:::-;:24;;:37;;;;:::i;:::-;:51;;23619:60;;;;;;23546:133;23719:37;23744:11;23719:9;:20;23729:9;23719:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;23696:9;:20;23706:9;23696:20;;;;;;;;;;;;;;;:60;;;;23795:9;23778:40;;23787:6;23778:40;;;23806:11;23778:40;;;;;;:::i;:::-;;;;;;;;23840:4;23833:11;;;;;22156:1707;;;;;;:::o;1405:192::-;1491:7;1524:1;1519;:6;;1527:12;1511:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1551:9;1567:1;1563;:5;;;;:::i;:::-;1551:17;;1588:1;1581:8;;;1405:192;;;;;:::o;1261:136::-;1319:7;1346:43;1350:1;1353;1346:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1339:50;;1261:136;;;;:::o;23871:330::-;23964:4;24001:53;24023:6;24001:53;;;;;;;;;;;;;;;;;:9;:17;24011:6;24001:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;23981:9;:17;23991:6;23981:17;;;;;;;;;;;;;;;:73;;;;24088:32;24113:6;24088:9;:20;24098:9;24088:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;24065:9;:20;24075:9;24065:20;;;;;;;;;;;;;;;:55;;;;24153:9;24136:35;;24145:6;24136:35;;;24164:6;24136:35;;;;;;:::i;:::-;;;;;;;;24189:4;24182:11;;23871:330;;;;;:::o;24209:1032::-;16147:4;16128:16;;:23;;;;;;;;;;;;;;;;;;24291:19:::1;24313:65;24376:1;24313:58;24346:24;;24313:28;24325:15;;24313:7;:11;;:28;;;;:::i;:::-;:32;;:58;;;;:::i;:::-;:62;;:65;;;;:::i;:::-;24291:87;;24389:21;24413:24;24425:11;24413:7;:11;;:24;;;;:::i;:::-;24389:48;;24450:31;24467:13;24450:16;:31::i;:::-;24492:22;24517:21;24492:46;;24551:19;24573:52;24602:22;24622:1;24602:15;;:19;;:22;;;;:::i;:::-;24573:24;;:28;;:52;;;;:::i;:::-;24551:74;;24646:26;24675:59;24732:1;24675:52;24715:11;24675:35;24694:15;;24675:14;:18;;:35;;;;:::i;:::-;:39;;:52;;;;:::i;:::-;:56;;:59;;;;:::i;:::-;24646:88;;24745:20;24768:48;24804:11;24768:31;24787:11;;24768:14;:18;;:31;;;;:::i;:::-;:35;;:48;;;;:::i;:::-;24745:71;;24827:26;24856:56;24899:12;24856:38;24875:18;24856:14;:18;;:38;;;;:::i;:::-;:42;;:56;;;;:::i;:::-;24827:85;;24949:1;24928:18;:22;24925:97;;;24965:57;24986:15;;;;;;;;;;;25003:18;24965:20;:57::i;:::-;24925:97;25053:1;25038:12;:16;25035:81;;;25069:47;25090:11;;;;;;;;;;;25103:12;25069:20;:47::i;:::-;25035:81;25153:1;25132:18;:22;:41;;;;;25172:1;25158:11;:15;25132:41;25129:104;;;25188:45;25201:11;25214:18;25188:12;:45::i;:::-;25129:104;16162:1;;;;;;;16193:5:::0;16174:16;;:24;;;;;;;;;;;;;;;;;;24209:1032;:::o;26448:622::-;26534:7;26564:17;26584:1;26564:21;;26609:12;:20;26622:6;26609:20;;;;;;;;;;;;;;;;;;;;;;;;;26606:223;;;26658:38;26692:3;26658:29;26669:17;;26658:6;:10;;:29;;;;:::i;:::-;:33;;:38;;;;:::i;:::-;26646:50;;26606:223;;;26726:12;:23;26739:9;26726:23;;;;;;;;;;;;;;;;;;;;;;;;;26723:106;;;26778:39;26813:3;26778:30;26789:18;;26778:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;26766:51;;26723:106;26606:223;26864:1;26852:9;:13;26849:173;;;26909:39;26938:9;26909;:24;26927:4;26909:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;26882:9;:24;26900:4;26882:24;;;;;;;;;;;;;;;:66;;;;26993:4;26968:42;;26977:6;26968:42;;;27000:9;26968:42;;;;;;:::i;:::-;;;;;;;;26849:173;27041:21;27052:9;27041:6;:10;;:21;;;;:::i;:::-;27034:28;;;26448:622;;;;;:::o;1605:250::-;1663:7;1692:1;1687;:6;1683:47;;;1717:1;1710:8;;;;1683:47;1742:9;1758:1;1754;:5;;;;:::i;:::-;1742:17;;1787:1;1782;1778;:5;;;;:::i;:::-;:10;1770:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;1846:1;1839:8;;;1605:250;;;;;:::o;1863:132::-;1921:7;1948:39;1952:1;1955;1948:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;1941:46;;1863:132;;;;:::o;25253:666::-;25379:21;25417:1;25403:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25379:40;;25448:4;25430;25435:1;25430:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;25474:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25464:4;25469:1;25464:7;;;;;;;;;;;;;;;;;;;;;:32;;;;;;;;;;;25509:62;25526:4;25541:15;;;;;;;;;;;25559:11;25509:8;:62::i;:::-;25610:15;;;;;;;;;;;:66;;;25691:11;25717:1;25761:4;25788;25824:15;25610:240;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25876:35;25893:11;25906:4;25876:35;;;;;;;:::i;:::-;;;;;;;;25253:666;;:::o;20613:126::-;20705:9;:18;;:26;20724:6;20705:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20613:126;;:::o;25927:513::-;26075:62;26092:4;26107:15;;;;;;;;;;;26125:11;26075:8;:62::i;:::-;26180:15;;;;;;;;;;;:31;;;26219:9;26252:4;26272:11;26298:1;26341;26384:7;:5;:7::i;:::-;26406:15;26180:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;25927:513;;:::o;2003:278::-;2089:7;2121:1;2117;:5;2124:12;2109:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2148:9;2164:1;2160;:5;;;;:::i;:::-;2148:17;;2272:1;2265:8;;;2003:278;;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;301:133::-;344:5;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;350:84;;;;:::o;440:139::-;486:5;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;492:87;;;;:::o;585:143::-;642:5;673:6;667:13;658:22;;689:33;716:5;689:33;:::i;:::-;648:80;;;;:::o;734:262::-;793:6;842:2;830:9;821:7;817:23;813:32;810:2;;;858:1;855;848:12;810:2;901:1;926:53;971:7;962:6;951:9;947:22;926:53;:::i;:::-;916:63;;872:117;800:196;;;;:::o;1002:284::-;1072:6;1121:2;1109:9;1100:7;1096:23;1092:32;1089:2;;;1137:1;1134;1127:12;1089:2;1180:1;1205:64;1261:7;1252:6;1241:9;1237:22;1205:64;:::i;:::-;1195:74;;1151:128;1079:207;;;;:::o;1292:407::-;1360:6;1368;1417:2;1405:9;1396:7;1392:23;1388:32;1385:2;;;1433:1;1430;1423:12;1385:2;1476:1;1501:53;1546:7;1537:6;1526:9;1522:22;1501:53;:::i;:::-;1491:63;;1447:117;1603:2;1629:53;1674:7;1665:6;1654:9;1650:22;1629:53;:::i;:::-;1619:63;;1574:118;1375:324;;;;;:::o;1705:552::-;1782:6;1790;1798;1847:2;1835:9;1826:7;1822:23;1818:32;1815:2;;;1863:1;1860;1853:12;1815:2;1906:1;1931:53;1976:7;1967:6;1956:9;1952:22;1931:53;:::i;:::-;1921:63;;1877:117;2033:2;2059:53;2104:7;2095:6;2084:9;2080:22;2059:53;:::i;:::-;2049:63;;2004:118;2161:2;2187:53;2232:7;2223:6;2212:9;2208:22;2187:53;:::i;:::-;2177:63;;2132:118;1805:452;;;;;:::o;2263:401::-;2328:6;2336;2385:2;2373:9;2364:7;2360:23;2356:32;2353:2;;;2401:1;2398;2391:12;2353:2;2444:1;2469:53;2514:7;2505:6;2494:9;2490:22;2469:53;:::i;:::-;2459:63;;2415:117;2571:2;2597:50;2639:7;2630:6;2619:9;2615:22;2597:50;:::i;:::-;2587:60;;2542:115;2343:321;;;;;:::o;2670:407::-;2738:6;2746;2795:2;2783:9;2774:7;2770:23;2766:32;2763:2;;;2811:1;2808;2801:12;2763:2;2854:1;2879:53;2924:7;2915:6;2904:9;2900:22;2879:53;:::i;:::-;2869:63;;2825:117;2981:2;3007:53;3052:7;3043:6;3032:9;3028:22;3007:53;:::i;:::-;2997:63;;2952:118;2753:324;;;;;:::o;3083:256::-;3139:6;3188:2;3176:9;3167:7;3163:23;3159:32;3156:2;;;3204:1;3201;3194:12;3156:2;3247:1;3272:50;3314:7;3305:6;3294:9;3290:22;3272:50;:::i;:::-;3262:60;;3218:114;3146:193;;;;:::o;3345:262::-;3404:6;3453:2;3441:9;3432:7;3428:23;3424:32;3421:2;;;3469:1;3466;3459:12;3421:2;3512:1;3537:53;3582:7;3573:6;3562:9;3558:22;3537:53;:::i;:::-;3527:63;;3483:117;3411:196;;;;:::o;3613:552::-;3690:6;3698;3706;3755:2;3743:9;3734:7;3730:23;3726:32;3723:2;;;3771:1;3768;3761:12;3723:2;3814:1;3839:53;3884:7;3875:6;3864:9;3860:22;3839:53;:::i;:::-;3829:63;;3785:117;3941:2;3967:53;4012:7;4003:6;3992:9;3988:22;3967:53;:::i;:::-;3957:63;;3912:118;4069:2;4095:53;4140:7;4131:6;4120:9;4116:22;4095:53;:::i;:::-;4085:63;;4040:118;3713:452;;;;;:::o;4171:596::-;4259:6;4267;4275;4324:2;4312:9;4303:7;4299:23;4295:32;4292:2;;;4340:1;4337;4330:12;4292:2;4383:1;4408:64;4464:7;4455:6;4444:9;4440:22;4408:64;:::i;:::-;4398:74;;4354:128;4521:2;4547:64;4603:7;4594:6;4583:9;4579:22;4547:64;:::i;:::-;4537:74;;4492:129;4660:2;4686:64;4742:7;4733:6;4722:9;4718:22;4686:64;:::i;:::-;4676:74;;4631:129;4282:485;;;;;:::o;4773:179::-;4842:10;4863:46;4905:3;4897:6;4863:46;:::i;:::-;4941:4;4936:3;4932:14;4918:28;;4853:99;;;;:::o;4958:142::-;5061:32;5087:5;5061:32;:::i;:::-;5056:3;5049:45;5039:61;;:::o;5106:108::-;5183:24;5201:5;5183:24;:::i;:::-;5178:3;5171:37;5161:53;;:::o;5220:118::-;5307:24;5325:5;5307:24;:::i;:::-;5302:3;5295:37;5285:53;;:::o;5374:732::-;5493:3;5522:54;5570:5;5522:54;:::i;:::-;5592:86;5671:6;5666:3;5592:86;:::i;:::-;5585:93;;5702:56;5752:5;5702:56;:::i;:::-;5781:7;5812:1;5797:284;5822:6;5819:1;5816:13;5797:284;;;5898:6;5892:13;5925:63;5984:3;5969:13;5925:63;:::i;:::-;5918:70;;6011:60;6064:6;6011:60;:::i;:::-;6001:70;;5857:224;5844:1;5841;5837:9;5832:14;;5797:284;;;5801:14;6097:3;6090:10;;5498:608;;;;;;;:::o;6112:109::-;6193:21;6208:5;6193:21;:::i;:::-;6188:3;6181:34;6171:50;;:::o;6227:185::-;6341:64;6399:5;6341:64;:::i;:::-;6336:3;6329:77;6319:93;;:::o;6418:147::-;6513:45;6552:5;6513:45;:::i;:::-;6508:3;6501:58;6491:74;;:::o;6571:364::-;6659:3;6687:39;6720:5;6687:39;:::i;:::-;6742:71;6806:6;6801:3;6742:71;:::i;:::-;6735:78;;6822:52;6867:6;6862:3;6855:4;6848:5;6844:16;6822:52;:::i;:::-;6899:29;6921:6;6899:29;:::i;:::-;6894:3;6890:39;6883:46;;6663:272;;;;;:::o;6941:366::-;7083:3;7104:67;7168:2;7163:3;7104:67;:::i;:::-;7097:74;;7180:93;7269:3;7180:93;:::i;:::-;7298:2;7293:3;7289:12;7282:19;;7087:220;;;:::o;7313:366::-;7455:3;7476:67;7540:2;7535:3;7476:67;:::i;:::-;7469:74;;7552:93;7641:3;7552:93;:::i;:::-;7670:2;7665:3;7661:12;7654:19;;7459:220;;;:::o;7685:366::-;7827:3;7848:67;7912:2;7907:3;7848:67;:::i;:::-;7841:74;;7924:93;8013:3;7924:93;:::i;:::-;8042:2;8037:3;8033:12;8026:19;;7831:220;;;:::o;8057:366::-;8199:3;8220:67;8284:2;8279:3;8220:67;:::i;:::-;8213:74;;8296:93;8385:3;8296:93;:::i;:::-;8414:2;8409:3;8405:12;8398:19;;8203:220;;;:::o;8429:366::-;8571:3;8592:67;8656:2;8651:3;8592:67;:::i;:::-;8585:74;;8668:93;8757:3;8668:93;:::i;:::-;8786:2;8781:3;8777:12;8770:19;;8575:220;;;:::o;8801:366::-;8943:3;8964:67;9028:2;9023:3;8964:67;:::i;:::-;8957:74;;9040:93;9129:3;9040:93;:::i;:::-;9158:2;9153:3;9149:12;9142:19;;8947:220;;;:::o;9173:366::-;9315:3;9336:67;9400:2;9395:3;9336:67;:::i;:::-;9329:74;;9412:93;9501:3;9412:93;:::i;:::-;9530:2;9525:3;9521:12;9514:19;;9319:220;;;:::o;9545:366::-;9687:3;9708:67;9772:2;9767:3;9708:67;:::i;:::-;9701:74;;9784:93;9873:3;9784:93;:::i;:::-;9902:2;9897:3;9893:12;9886:19;;9691:220;;;:::o;9917:366::-;10059:3;10080:67;10144:2;10139:3;10080:67;:::i;:::-;10073:74;;10156:93;10245:3;10156:93;:::i;:::-;10274:2;10269:3;10265:12;10258:19;;10063:220;;;:::o;10289:118::-;10376:24;10394:5;10376:24;:::i;:::-;10371:3;10364:37;10354:53;;:::o;10413:112::-;10496:22;10512:5;10496:22;:::i;:::-;10491:3;10484:35;10474:51;;:::o;10531:222::-;10624:4;10662:2;10651:9;10647:18;10639:26;;10675:71;10743:1;10732:9;10728:17;10719:6;10675:71;:::i;:::-;10629:124;;;;:::o;10759:254::-;10868:4;10906:2;10895:9;10891:18;10883:26;;10919:87;11003:1;10992:9;10988:17;10979:6;10919:87;:::i;:::-;10873:140;;;;:::o;11019:332::-;11140:4;11178:2;11167:9;11163:18;11155:26;;11191:71;11259:1;11248:9;11244:17;11235:6;11191:71;:::i;:::-;11272:72;11340:2;11329:9;11325:18;11316:6;11272:72;:::i;:::-;11145:206;;;;;:::o;11357:807::-;11606:4;11644:3;11633:9;11629:19;11621:27;;11658:71;11726:1;11715:9;11711:17;11702:6;11658:71;:::i;:::-;11739:72;11807:2;11796:9;11792:18;11783:6;11739:72;:::i;:::-;11821:80;11897:2;11886:9;11882:18;11873:6;11821:80;:::i;:::-;11911;11987:2;11976:9;11972:18;11963:6;11911:80;:::i;:::-;12001:73;12069:3;12058:9;12054:19;12045:6;12001:73;:::i;:::-;12084;12152:3;12141:9;12137:19;12128:6;12084:73;:::i;:::-;11611:553;;;;;;;;;:::o;12170:210::-;12257:4;12295:2;12284:9;12280:18;12272:26;;12308:65;12370:1;12359:9;12355:17;12346:6;12308:65;:::i;:::-;12262:118;;;;:::o;12386:276::-;12506:4;12544:2;12533:9;12529:18;12521:26;;12557:98;12652:1;12641:9;12637:17;12628:6;12557:98;:::i;:::-;12511:151;;;;:::o;12668:313::-;12781:4;12819:2;12808:9;12804:18;12796:26;;12868:9;12862:4;12858:20;12854:1;12843:9;12839:17;12832:47;12896:78;12969:4;12960:6;12896:78;:::i;:::-;12888:86;;12786:195;;;;:::o;12987:419::-;13153:4;13191:2;13180:9;13176:18;13168:26;;13240:9;13234:4;13230:20;13226:1;13215:9;13211:17;13204:47;13268:131;13394:4;13268:131;:::i;:::-;13260:139;;13158:248;;;:::o;13412:419::-;13578:4;13616:2;13605:9;13601:18;13593:26;;13665:9;13659:4;13655:20;13651:1;13640:9;13636:17;13629:47;13693:131;13819:4;13693:131;:::i;:::-;13685:139;;13583:248;;;:::o;13837:419::-;14003:4;14041:2;14030:9;14026:18;14018:26;;14090:9;14084:4;14080:20;14076:1;14065:9;14061:17;14054:47;14118:131;14244:4;14118:131;:::i;:::-;14110:139;;14008:248;;;:::o;14262:419::-;14428:4;14466:2;14455:9;14451:18;14443:26;;14515:9;14509:4;14505:20;14501:1;14490:9;14486:17;14479:47;14543:131;14669:4;14543:131;:::i;:::-;14535:139;;14433:248;;;:::o;14687:419::-;14853:4;14891:2;14880:9;14876:18;14868:26;;14940:9;14934:4;14930:20;14926:1;14915:9;14911:17;14904:47;14968:131;15094:4;14968:131;:::i;:::-;14960:139;;14858:248;;;:::o;15112:419::-;15278:4;15316:2;15305:9;15301:18;15293:26;;15365:9;15359:4;15355:20;15351:1;15340:9;15336:17;15329:47;15393:131;15519:4;15393:131;:::i;:::-;15385:139;;15283:248;;;:::o;15537:419::-;15703:4;15741:2;15730:9;15726:18;15718:26;;15790:9;15784:4;15780:20;15776:1;15765:9;15761:17;15754:47;15818:131;15944:4;15818:131;:::i;:::-;15810:139;;15708:248;;;:::o;15962:419::-;16128:4;16166:2;16155:9;16151:18;16143:26;;16215:9;16209:4;16205:20;16201:1;16190:9;16186:17;16179:47;16243:131;16369:4;16243:131;:::i;:::-;16235:139;;16133:248;;;:::o;16387:419::-;16553:4;16591:2;16580:9;16576:18;16568:26;;16640:9;16634:4;16630:20;16626:1;16615:9;16611:17;16604:47;16668:131;16794:4;16668:131;:::i;:::-;16660:139;;16558:248;;;:::o;16812:222::-;16905:4;16943:2;16932:9;16928:18;16920:26;;16956:71;17024:1;17013:9;17009:17;17000:6;16956:71;:::i;:::-;16910:124;;;;:::o;17040:483::-;17211:4;17249:2;17238:9;17234:18;17226:26;;17262:71;17330:1;17319:9;17315:17;17306:6;17262:71;:::i;:::-;17380:9;17374:4;17370:20;17365:2;17354:9;17350:18;17343:48;17408:108;17511:4;17502:6;17408:108;:::i;:::-;17400:116;;17216:307;;;;;:::o;17529:831::-;17792:4;17830:3;17819:9;17815:19;17807:27;;17844:71;17912:1;17901:9;17897:17;17888:6;17844:71;:::i;:::-;17925:80;18001:2;17990:9;17986:18;17977:6;17925:80;:::i;:::-;18052:9;18046:4;18042:20;18037:2;18026:9;18022:18;18015:48;18080:108;18183:4;18174:6;18080:108;:::i;:::-;18072:116;;18198:72;18266:2;18255:9;18251:18;18242:6;18198:72;:::i;:::-;18280:73;18348:3;18337:9;18333:19;18324:6;18280:73;:::i;:::-;17797:563;;;;;;;;:::o;18366:214::-;18455:4;18493:2;18482:9;18478:18;18470:26;;18506:67;18570:1;18559:9;18555:17;18546:6;18506:67;:::i;:::-;18460:120;;;;:::o;18586:132::-;18653:4;18676:3;18668:11;;18706:4;18701:3;18697:14;18689:22;;18658:60;;;:::o;18724:114::-;18791:6;18825:5;18819:12;18809:22;;18798:40;;;:::o;18844:99::-;18896:6;18930:5;18924:12;18914:22;;18903:40;;;:::o;18949:113::-;19019:4;19051;19046:3;19042:14;19034:22;;19024:38;;;:::o;19068:184::-;19167:11;19201:6;19196:3;19189:19;19241:4;19236:3;19232:14;19217:29;;19179:73;;;;:::o;19258:169::-;19342:11;19376:6;19371:3;19364:19;19416:4;19411:3;19407:14;19392:29;;19354:73;;;;:::o;19433:305::-;19473:3;19492:20;19510:1;19492:20;:::i;:::-;19487:25;;19526:20;19544:1;19526:20;:::i;:::-;19521:25;;19680:1;19612:66;19608:74;19605:1;19602:81;19599:2;;;19686:18;;:::i;:::-;19599:2;19730:1;19727;19723:9;19716:16;;19477:261;;;;:::o;19744:185::-;19784:1;19801:20;19819:1;19801:20;:::i;:::-;19796:25;;19835:20;19853:1;19835:20;:::i;:::-;19830:25;;19874:1;19864:2;;19879:18;;:::i;:::-;19864:2;19921:1;19918;19914:9;19909:14;;19786:143;;;;:::o;19935:348::-;19975:7;19998:20;20016:1;19998:20;:::i;:::-;19993:25;;20032:20;20050:1;20032:20;:::i;:::-;20027:25;;20220:1;20152:66;20148:74;20145:1;20142:81;20137:1;20130:9;20123:17;20119:105;20116:2;;;20227:18;;:::i;:::-;20116:2;20275:1;20272;20268:9;20257:20;;19983:300;;;;:::o;20289:191::-;20329:4;20349:20;20367:1;20349:20;:::i;:::-;20344:25;;20383:20;20401:1;20383:20;:::i;:::-;20378:25;;20422:1;20419;20416:8;20413:2;;;20427:18;;:::i;:::-;20413:2;20472:1;20469;20465:9;20457:17;;20334:146;;;;:::o;20486:96::-;20523:7;20552:24;20570:5;20552:24;:::i;:::-;20541:35;;20531:51;;;:::o;20588:104::-;20633:7;20662:24;20680:5;20662:24;:::i;:::-;20651:35;;20641:51;;;:::o;20698:90::-;20732:7;20775:5;20768:13;20761:21;20750:32;;20740:48;;;:::o;20794:126::-;20831:7;20871:42;20864:5;20860:54;20849:65;;20839:81;;;:::o;20926:77::-;20963:7;20992:5;20981:16;;20971:32;;;:::o;21009:86::-;21044:7;21084:4;21077:5;21073:16;21062:27;;21052:43;;;:::o;21101:180::-;21178:9;21211:64;21269:5;21211:64;:::i;:::-;21198:77;;21188:93;;;:::o;21287:140::-;21364:9;21397:24;21415:5;21397:24;:::i;:::-;21384:37;;21374:53;;;:::o;21433:121::-;21491:9;21524:24;21542:5;21524:24;:::i;:::-;21511:37;;21501:53;;;:::o;21560:307::-;21628:1;21638:113;21652:6;21649:1;21646:13;21638:113;;;21737:1;21732:3;21728:11;21722:18;21718:1;21713:3;21709:11;21702:39;21674:2;21671:1;21667:10;21662:15;;21638:113;;;21769:6;21766:1;21763:13;21760:2;;;21849:1;21840:6;21835:3;21831:16;21824:27;21760:2;21609:258;;;;:::o;21873:320::-;21917:6;21954:1;21948:4;21944:12;21934:22;;22001:1;21995:4;21991:12;22022:18;22012:2;;22078:4;22070:6;22066:17;22056:27;;22012:2;22140;22132:6;22129:14;22109:18;22106:38;22103:2;;;22159:18;;:::i;:::-;22103:2;21924:269;;;;:::o;22199:180::-;22247:77;22244:1;22237:88;22344:4;22341:1;22334:15;22368:4;22365:1;22358:15;22385:180;22433:77;22430:1;22423:88;22530:4;22527:1;22520:15;22554:4;22551:1;22544:15;22571:180;22619:77;22616:1;22609:88;22716:4;22713:1;22706:15;22740:4;22737:1;22730:15;22757:102;22798:6;22849:2;22845:7;22840:2;22833:5;22829:14;22825:28;22815:38;;22805:54;;;:::o;22865:222::-;23005:34;23001:1;22993:6;22989:14;22982:58;23074:5;23069:2;23061:6;23057:15;23050:30;22971:116;:::o;23093:225::-;23233:34;23229:1;23221:6;23217:14;23210:58;23302:8;23297:2;23289:6;23285:15;23278:33;23199:119;:::o;23324:221::-;23464:34;23460:1;23452:6;23448:14;23441:58;23533:4;23528:2;23520:6;23516:15;23509:29;23430:115;:::o;23551:177::-;23691:29;23687:1;23679:6;23675:14;23668:53;23657:71;:::o;23734:227::-;23874:34;23870:1;23862:6;23858:14;23851:58;23943:10;23938:2;23930:6;23926:15;23919:35;23840:121;:::o;23967:220::-;24107:34;24103:1;24095:6;24091:14;24084:58;24176:3;24171:2;24163:6;24159:15;24152:28;24073:114;:::o;24193:182::-;24333:34;24329:1;24321:6;24317:14;24310:58;24299:76;:::o;24381:224::-;24521:34;24517:1;24509:6;24505:14;24498:58;24590:7;24585:2;24577:6;24573:15;24566:32;24487:118;:::o;24611:223::-;24751:34;24747:1;24739:6;24735:14;24728:58;24820:6;24815:2;24807:6;24803:15;24796:31;24717:117;:::o;24840:122::-;24913:24;24931:5;24913:24;:::i;:::-;24906:5;24903:35;24893:2;;24952:1;24949;24942:12;24893:2;24883:79;:::o;24968:116::-;25038:21;25053:5;25038:21;:::i;:::-;25031:5;25028:32;25018:2;;25074:1;25071;25064:12;25018:2;25008:76;:::o;25090:122::-;25163:24;25181:5;25163:24;:::i;:::-;25156:5;25153:35;25143:2;;25202:1;25199;25192:12;25143:2;25133:79;:::o

Swarm Source

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