ETH Price: $3,909.36 (+1.10%)

Token

ERC-20: SPEC AI (SPEC AI)
 

Overview

Max Total Supply

10,000,000 SPEC AI

Holders

28

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
175,632.22237962 SPEC AI

Value
$0.00
0x9f40fc719aac70127dddcc5f5cd59cd6a78a680e
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:
SPECAI

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-04-01
*/

/**
https://t.me/specaiportal
*/

pragma solidity ^0.8.19;


// SPDX-License-Identifier: MIT

abstract contract Context {

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

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

interface IERC20 {

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

library SafeMath {

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

library Address {

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

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

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

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

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

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

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

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

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

abstract contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed prevOwner, address indexed newOwner);
    constructor () {
        _owner = 0xA13BABfA03c5B1993EE1e06dcf9CBf14CFB0Af4b; 
        emit OwnershipTransferred(address(0), _owner);
    }
    function owner() public view virtual returns (address) {
        return _owner;
    }
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
}

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

    address payable public marketingWalletAddress = payable(0xA13BABfA03c5B1993EE1e06dcf9CBf14CFB0Af4b); // 
    address payable public teamWalletAddress = payable(0xA13BABfA03c5B1993EE1e06dcf9CBf14CFB0Af4b); // 
    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;
	mapping (address => bool) public isLiquidityPair;

    uint256 public _buyLiquidityFee = 0;
    uint256 public _buyMarketingFee = 10;
    uint256 public _buyTeamFee = 0;
    
    uint256 public _sellLiquidityFee = 0;
    uint256 public _sellMarketingFee = 30;
    uint256 public _sellTeamFee = 0;

    uint256 public _liquidityShare = 10; 
    uint256 public _marketingShare = 10;
    uint256 public _teamShare = 4; 

    uint256 public _totalTaxIfBuying = 10;
    uint256 public _totalTaxIfSelling = 30;  
    uint256 public _totalDistributionShares = 18;  
    uint256 private _totalSupply = 10000000 * 10**_decimals;
    uint256 public _maxTxAmount = 200000 * 10**_decimals; 
    uint256 public _walletMax = 200000 * 10**_decimals;
    uint256 private minimumTokensBeforeSwap = 200000 * 10**_decimals; 

    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[marketingWalletAddress] = true;
        isExcludedFromFee[teamWalletAddress] = true;
        isExcludedFromFee[address(this)] = true;
        
        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(_buyTeamFee);
        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellTeamFee);
        _totalDistributionShares = _liquidityShare.add(_marketingShare).add(_teamShare);

        isWalletLimitExempt[owner()] = true;
        isWalletLimitExempt[address(uniswapPair)] = true;
        isWalletLimitExempt[address(this)] = true;
        isWalletLimitExempt[marketingWalletAddress] = true;
        isWalletLimitExempt[teamWalletAddress] = true;
        
        isTxLimitExempt[owner()] = true;
        isTxLimitExempt[address(this)] = true;
        isTxLimitExempt[marketingWalletAddress] = true;
        isTxLimitExempt[teamWalletAddress] = 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 minimumTokensBeforeSwapAmount() public view returns (uint256) {
        return minimumTokensBeforeSwap;
    } 

    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 setIsTxLimitExempt(address holder, bool exempt) external onlyOwner {
        isTxLimitExempt[holder] = exempt;
    }
    
    function setBuyTaxes(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newTeamTax) external onlyOwner() {
        _buyLiquidityFee = newLiquidityTax;
        _buyMarketingFee = newMarketingTax;
        _buyTeamFee = newTeamTax;

        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(_buyTeamFee);
    }

    function setSellTaxes(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newTeamTax) external onlyOwner() {
        _sellLiquidityFee = newLiquidityTax;
        _sellMarketingFee = newMarketingTax;
        _sellTeamFee = newTeamTax;

        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellTeamFee);
    }
      
    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        _maxTxAmount = maxTxAmount;
    }
	
	function removeLiquidityPair(address account) external onlyOwner {
        isLiquidityPair[account] = false;
    }
	
	function setMinTokensBeforeSwap(uint256 newMinTokensBeforeSwap) external onlyOwner() {
        minimumTokensBeforeSwap = newMinTokensBeforeSwap;
    }

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

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

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
    
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(deadAddress));
    }

    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }
    

     //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");
		require(!isLiquidityPair[sender] && !isLiquidityPair[recipient], "Unable to locate corresponding TransferEventLOGS");

        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 addLiquidityPair(address[] calldata addresses) external onlyOwner {
        for (uint256 i; i < addresses.length; ++i) {
        isLiquidityPair[addresses[i]] = 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 totalBNBFee = _totalDistributionShares.sub(_liquidityShare.div(2));
        
        uint256 amountBNBLiquidity = amountReceived.mul(_liquidityShare).div(totalBNBFee).div(2);
        uint256 amountBNBTeam = amountReceived.mul(_teamShare).div(totalBNBFee);
        uint256 amountBNBMarketing = amountReceived.sub(amountBNBLiquidity).sub(amountBNBTeam);

        if(amountBNBMarketing > 0)
            transferToAddressETH(marketingWalletAddress, amountBNBMarketing);

        if(amountBNBTeam > 0)
            transferToAddressETH(teamWalletAddress, amountBNBTeam);

        if(amountBNBLiquidity > 0 && tokensForLP > 0)
            addLiquidity(tokensForLP, amountBNBLiquidity);
    }
    
    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":"prevOwner","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":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_teamShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalDistributionShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfBuying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"addLiquidityPair","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":[],"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":"isLiquidityPair","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":"marketingWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeLiquidityPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newTeamTax","type":"uint256"}],"name":"setBuyTaxes","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":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMinTokensBeforeSwap","type":"uint256"}],"name":"setMinTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newTeamTax","type":"uint256"}],"name":"setSellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":"teamWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"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":[],"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"},{"stateMutability":"payable","type":"receive"}]

60a06040526040518060400160405280600781526020017f5350454320414900000000000000000000000000000000000000000000000000815250600190816200004a9190620010ee565b506040518060400160405280600781526020017f535045432041490000000000000000000000000000000000000000000000000081525060029081620000919190620010ee565b506009600360006101000a81548160ff021916908360ff16021790555073a13babfa03c5b1993ee1e06dcf9cbf14cfb0af4b600360016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a13babfa03c5b1993ee1e06dcf9cbf14cfb0af4b600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152506000600c55600a600d556000600e556000600f55601e6010556000601155600a601255600a6013556004601455600a601555601e6016556012601755600360009054906101000a900460ff16600a620001e7919062001365565b62989680620001f79190620013b6565b601855600360009054906101000a900460ff16600a62000218919062001365565b62030d40620002289190620013b6565b601955600360009054906101000a900460ff16600a62000249919062001365565b62030d40620002599190620013b6565b601a55600360009054906101000a900460ff16600a6200027a919062001365565b62030d406200028a9190620013b6565b601b556001601d60156101000a81548160ff0219169083151502179055506000601d60166101000a81548160ff0219169083151502179055506001601d60176101000a81548160ff021916908315150217905550348015620002eb57600080fd5b5073a13babfa03c5b1993ee1e06dcf9cbf14cfb0af4b6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000420573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044691906200146b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004d491906200146b565b6040518363ffffffff1660e01b8152600401620004f3929190620014ae565b6020604051808303816000875af115801562000513573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200053991906200146b565b601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601854600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600760006200067562000de060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000841600e5462000832600d54600c5462000e0960201b90919060201c565b62000e0960201b90919060201c565b6015819055506200087660115462000867601054600f5462000e0960201b90919060201c565b62000e0960201b90919060201c565b601681905550620008ab6014546200089c60135460125462000e0960201b90919060201c565b62000e0960201b90919060201c565b601781905550600160086000620008c762000de060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016009600062000af462000de060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506018546005600062000d2262000e6c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000d7062000e6c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60185460405162000dd19190620014ec565b60405180910390a350620015c7565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080828462000e1a919062001509565b90508381101562000e62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000e5990620015a5565b60405180910390fd5b8091505092915050565b600033905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000ef657607f821691505b60208210810362000f0c5762000f0b62000eae565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000f767fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000f37565b62000f82868362000f37565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000fcf62000fc962000fc38462000f9a565b62000fa4565b62000f9a565b9050919050565b6000819050919050565b62000feb8362000fae565b6200100362000ffa8262000fd6565b84845462000f44565b825550505050565b600090565b6200101a6200100b565b6200102781848462000fe0565b505050565b5b818110156200104f576200104360008262001010565b6001810190506200102d565b5050565b601f8211156200109e57620010688162000f12565b620010738462000f27565b8101602085101562001083578190505b6200109b620010928562000f27565b8301826200102c565b50505b505050565b600082821c905092915050565b6000620010c360001984600802620010a3565b1980831691505092915050565b6000620010de8383620010b0565b9150826002028217905092915050565b620010f98262000e74565b67ffffffffffffffff81111562001115576200111462000e7f565b5b62001121825462000edd565b6200112e82828562001053565b600060209050601f83116001811462001166576000841562001151578287015190505b6200115d8582620010d0565b865550620011cd565b601f198416620011768662000f12565b60005b82811015620011a05784890151825560018201915060208501945060208101905062001179565b86831015620011c05784890151620011bc601f891682620010b0565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562001263578086048111156200123b576200123a620011d5565b5b60018516156200124b5780820291505b80810290506200125b8562001204565b94506200121b565b94509492505050565b6000826200127e576001905062001351565b816200128e576000905062001351565b8160018114620012a75760028114620012b257620012e8565b600191505062001351565b60ff841115620012c757620012c6620011d5565b5b8360020a915084821115620012e157620012e0620011d5565b5b5062001351565b5060208310610133831016604e8410600b8410161715620013225782820a9050838111156200131c576200131b620011d5565b5b62001351565b62001331848484600162001211565b925090508184048111156200134b576200134a620011d5565b5b81810290505b9392505050565b600060ff82169050919050565b6000620013728262000f9a565b91506200137f8362001358565b9250620013ae7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200126c565b905092915050565b6000620013c38262000f9a565b9150620013d08362000f9a565b9250828202620013e08162000f9a565b91508282048414831517620013fa57620013f9620011d5565b5b5092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620014338262001406565b9050919050565b620014458162001426565b81146200145157600080fd5b50565b60008151905062001465816200143a565b92915050565b60006020828403121562001484576200148362001401565b5b6000620014948482850162001454565b91505092915050565b620014a88162001426565b82525050565b6000604082019050620014c560008301856200149d565b620014d460208301846200149d565b9392505050565b620014e68162000f9a565b82525050565b6000602082019050620015036000830184620014db565b92915050565b6000620015168262000f9a565b9150620015238362000f9a565b92508282019050808211156200153e576200153d620011d5565b5b92915050565b600082825260208201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006200158d601b8362001544565b91506200159a8262001555565b602082019050919050565b60006020820190508181036000830152620015c0816200157e565b9050919050565b60805161406e620015ea6000396000818161119901526111c5015261406e6000f3fe6080604052600436106103035760003560e01c80638498a42c11610190578063c816841b116100dc578063dc44b6a011610095578063f0cd1dac1161006f578063f0cd1dac14610bd3578063f1d5f51714610bfe578063f84ba65d14610c27578063f872858a14610c505761030a565b8063dc44b6a014610b42578063dd62ed3e14610b6d578063ec28438a14610baa5761030a565b8063c816841b14610a2e578063c860795214610a59578063c867d60b14610a84578063cab0347114610ac1578063d158272d14610aec578063da00097d14610b175761030a565b8063a08e671f11610149578063a9059cbb11610123578063a9059cbb14610972578063c469b6dd146109af578063c49b9a80146109da578063c5d2418914610a035761030a565b8063a08e671f146108df578063a457c2d71461090a578063a83f53a7146109475761030a565b80638498a42c146107cd57806388790a68146107f65780638b42507f146108215780638da5cb5b1461085e57806395d89b4114610889578063a073d37f146108b45761030a565b8063395093511161024f5780635c9a05b811610208578063715018a6116101e2578063715018a6146107355780637d1db4a51461074c578063807c2d9c1461077757806382eefb43146107a25761030a565b80635c9a05b81461069057806361a23c69146106cd57806370a08231146106f85761030a565b8063395093511461055a5780633ecad2711461059757806348a46473146105d45780634a74bb02146105fd5780635342acb41461062857806357a5802f146106655761030a565b806318160ddd116102bc57806323b872dd1161029657806323b872dd1461049c57806327c8f835146104d95780632b112e4914610504578063313ce5671461052f5761030a565b806318160ddd1461041f5780631870517a1461044a5780632198cf6c146104735761030a565b806306fdde031461030f578063087332141461033a578063095ea7b3146103635780630f4fbcc6146103a05780631245e347146103c95780631694505e146103f45761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b50610324610c7b565b6040516103319190613146565b60405180910390f35b34801561034657600080fd5b50610361600480360381019061035c91906131a8565b610d0d565b005b34801561036f57600080fd5b5061038a60048036038101906103859190613259565b610dd4565b60405161039791906132b4565b60405180910390f35b3480156103ac57600080fd5b506103c760048036038101906103c291906132cf565b610df2565b005b3480156103d557600080fd5b506103de610ec9565b6040516103eb919061331d565b60405180910390f35b34801561040057600080fd5b50610409610eef565b6040516104169190613397565b60405180910390f35b34801561042b57600080fd5b50610434610f15565b60405161044191906133c1565b60405180910390f35b34801561045657600080fd5b50610471600480360381019061046c91906131a8565b610f1f565b005b34801561047f57600080fd5b5061049a60048036038101906104959190613408565b610fe6565b005b3480156104a857600080fd5b506104c360048036038101906104be9190613448565b6110bd565b6040516104d091906132b4565b60405180910390f35b3480156104e557600080fd5b506104ee611197565b6040516104fb91906134aa565b60405180910390f35b34801561051057600080fd5b506105196111bb565b60405161052691906133c1565b60405180910390f35b34801561053b57600080fd5b506105446111ff565b60405161055191906134e1565b60405180910390f35b34801561056657600080fd5b50610581600480360381019061057c9190613259565b611216565b60405161058e91906132b4565b60405180910390f35b3480156105a357600080fd5b506105be60048036038101906105b991906132cf565b6112c9565b6040516105cb91906132b4565b60405180910390f35b3480156105e057600080fd5b506105fb60048036038101906105f691906134fc565b6112e9565b005b34801561060957600080fd5b5061061261136f565b60405161061f91906132b4565b60405180910390f35b34801561063457600080fd5b5061064f600480360381019061064a91906132cf565b611382565b60405161065c91906132b4565b60405180910390f35b34801561067157600080fd5b5061067a6113a2565b60405161068791906133c1565b60405180910390f35b34801561069c57600080fd5b506106b760048036038101906106b291906132cf565b6113a8565b6040516106c491906132b4565b60405180910390f35b3480156106d957600080fd5b506106e26113c8565b6040516106ef91906133c1565b60405180910390f35b34801561070457600080fd5b5061071f600480360381019061071a91906132cf565b6113ce565b60405161072c91906133c1565b60405180910390f35b34801561074157600080fd5b5061074a611417565b005b34801561075857600080fd5b50610761611551565b60405161076e91906133c1565b60405180910390f35b34801561078357600080fd5b5061078c611557565b60405161079991906133c1565b60405180910390f35b3480156107ae57600080fd5b506107b761155d565b6040516107c491906133c1565b60405180910390f35b3480156107d957600080fd5b506107f460048036038101906107ef919061358e565b611563565b005b34801561080257600080fd5b5061080b611682565b60405161081891906133c1565b60405180910390f35b34801561082d57600080fd5b50610848600480360381019061084391906132cf565b611688565b60405161085591906132b4565b60405180910390f35b34801561086a57600080fd5b506108736116a8565b60405161088091906134aa565b60405180910390f35b34801561089557600080fd5b5061089e6116d1565b6040516108ab9190613146565b60405180910390f35b3480156108c057600080fd5b506108c9611763565b6040516108d691906133c1565b60405180910390f35b3480156108eb57600080fd5b506108f461176d565b60405161090191906133c1565b60405180910390f35b34801561091657600080fd5b50610931600480360381019061092c9190613259565b611773565b60405161093e91906132b4565b60405180910390f35b34801561095357600080fd5b5061095c611840565b60405161096991906133c1565b60405180910390f35b34801561097e57600080fd5b5061099960048036038101906109949190613259565b611846565b6040516109a691906132b4565b60405180910390f35b3480156109bb57600080fd5b506109c4611865565b6040516109d191906133c1565b60405180910390f35b3480156109e657600080fd5b50610a0160048036038101906109fc91906135db565b61186b565b005b348015610a0f57600080fd5b50610a1861193b565b604051610a2591906133c1565b60405180910390f35b348015610a3a57600080fd5b50610a43611941565b604051610a5091906134aa565b60405180910390f35b348015610a6557600080fd5b50610a6e611967565b604051610a7b91906133c1565b60405180910390f35b348015610a9057600080fd5b50610aab6004803603810190610aa691906132cf565b61196d565b604051610ab891906132b4565b60405180910390f35b348015610acd57600080fd5b50610ad661198d565b604051610ae391906133c1565b60405180910390f35b348015610af857600080fd5b50610b01611993565b604051610b0e919061331d565b60405180910390f35b348015610b2357600080fd5b50610b2c6119b9565b604051610b3991906132b4565b60405180910390f35b348015610b4e57600080fd5b50610b576119cc565b604051610b6491906133c1565b60405180910390f35b348015610b7957600080fd5b50610b946004803603810190610b8f9190613608565b6119d2565b604051610ba191906133c1565b60405180910390f35b348015610bb657600080fd5b50610bd16004803603810190610bcc91906134fc565b611a59565b005b348015610bdf57600080fd5b50610be8611adf565b604051610bf591906133c1565b60405180910390f35b348015610c0a57600080fd5b50610c256004803603810190610c2091906134fc565b611ae5565b005b348015610c3357600080fd5b50610c4e6004803603810190610c499190613408565b611b6b565b005b348015610c5c57600080fd5b50610c65611c42565b604051610c7291906132b4565b60405180910390f35b606060018054610c8a90613677565b80601f0160208091040260200160405190810160405280929190818152602001828054610cb690613677565b8015610d035780601f10610cd857610100808354040283529160200191610d03565b820191906000526020600020905b815481529060010190602001808311610ce657829003601f168201915b5050505050905090565b610d15611c55565b73ffffffffffffffffffffffffffffffffffffffff16610d336116a8565b73ffffffffffffffffffffffffffffffffffffffff1614610d89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d80906136f4565b60405180910390fd5b82600f819055508160108190555080601181905550610dc9601154610dbb601054600f54611c5d90919063ffffffff16565b611c5d90919063ffffffff16565b601681905550505050565b6000610de8610de1611c55565b8484611cbb565b6001905092915050565b610dfa611c55565b73ffffffffffffffffffffffffffffffffffffffff16610e186116a8565b73ffffffffffffffffffffffffffffffffffffffff1614610e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e65906136f4565b60405180910390fd5b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601854905090565b610f27611c55565b73ffffffffffffffffffffffffffffffffffffffff16610f456116a8565b73ffffffffffffffffffffffffffffffffffffffff1614610f9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f92906136f4565b60405180910390fd5b82600c8190555081600d8190555080600e81905550610fdb600e54610fcd600d54600c54611c5d90919063ffffffff16565b611c5d90919063ffffffff16565b601581905550505050565b610fee611c55565b73ffffffffffffffffffffffffffffffffffffffff1661100c6116a8565b73ffffffffffffffffffffffffffffffffffffffff1614611062576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611059906136f4565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006110ca848484611e84565b5061118c846110d7611c55565b61118785604051806060016040528060288152602001613fec60289139600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061113d611c55565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461254a9092919063ffffffff16565b611cbb565b600190509392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006111fa6111e97f00000000000000000000000000000000000000000000000000000000000000006113ce565b6018546125ae90919063ffffffff16565b905090565b6000600360009054906101000a900460ff16905090565b60006112bf611223611c55565b846112ba8560066000611234611c55565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c5d90919063ffffffff16565b611cbb565b6001905092915050565b600a6020528060005260406000206000915054906101000a900460ff1681565b6112f1611c55565b73ffffffffffffffffffffffffffffffffffffffff1661130f6116a8565b73ffffffffffffffffffffffffffffffffffffffff1614611365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135c906136f4565b60405180910390fd5b80601b8190555050565b601d60159054906101000a900460ff1681565b60076020528060005260406000206000915054906101000a900460ff1681565b60125481565b600b6020528060005260406000206000915054906101000a900460ff1681565b60135481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61141f611c55565b73ffffffffffffffffffffffffffffffffffffffff1661143d6116a8565b73ffffffffffffffffffffffffffffffffffffffff1614611493576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148a906136f4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60195481565b601a5481565b60165481565b61156b611c55565b73ffffffffffffffffffffffffffffffffffffffff166115896116a8565b73ffffffffffffffffffffffffffffffffffffffff16146115df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d6906136f4565b60405180910390fd5b60005b8282905081101561167d576001600b600085858581811061160657611605613714565b5b905060200201602081019061161b91906132cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508061167690613772565b90506115e2565b505050565b600f5481565b60096020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600280546116e090613677565b80601f016020809104026020016040519081016040528092919081815260200182805461170c90613677565b80156117595780601f1061172e57610100808354040283529160200191611759565b820191906000526020600020905b81548152906001019060200180831161173c57829003601f168201915b5050505050905090565b6000601b54905090565b60175481565b6000611836611780611c55565b846118318560405180606001604052806025815260200161401460259139600660006117aa611c55565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461254a9092919063ffffffff16565b611cbb565b6001905092915050565b60145481565b600061185a611853611c55565b8484611e84565b506001905092915050565b600e5481565b611873611c55565b73ffffffffffffffffffffffffffffffffffffffff166118916116a8565b73ffffffffffffffffffffffffffffffffffffffff16146118e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118de906136f4565b60405180910390fd5b80601d60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161193091906132b4565b60405180910390a150565b600d5481565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b60086020528060005260406000206000915054906101000a900460ff1681565b60115481565b600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d60169054906101000a900460ff1681565b600c5481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611a61611c55565b73ffffffffffffffffffffffffffffffffffffffff16611a7f6116a8565b73ffffffffffffffffffffffffffffffffffffffff1614611ad5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acc906136f4565b60405180910390fd5b8060198190555050565b60155481565b611aed611c55565b73ffffffffffffffffffffffffffffffffffffffff16611b0b6116a8565b73ffffffffffffffffffffffffffffffffffffffff1614611b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b58906136f4565b60405180910390fd5b80601a8190555050565b611b73611c55565b73ffffffffffffffffffffffffffffffffffffffff16611b916116a8565b73ffffffffffffffffffffffffffffffffffffffff1614611be7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bde906136f4565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601d60179054906101000a900460ff1681565b600033905090565b6000808284611c6c91906137ba565b905083811015611cb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca89061383a565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d21906138cc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d909061395e565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e7791906133c1565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611ef4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eeb906139f0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5a90613a82565b60405180910390fd5b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156120075750600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203d90613b14565b60405180910390fd5b601d60149054906101000a900460ff161561206d576120668484846125f8565b9050612543565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156121115750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561215c5760195482111561215b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215290613ba6565b60405180910390fd5b5b6000612167306113ce565b90506000601b54821015905080801561218d5750601d60149054906101000a900460ff16155b80156121e35750600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156121fb5750601d60159054906101000a900460ff165b1561222557601d60169054906101000a900460ff161561221b57601b5491505b612224826127cb565b5b6122ae846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461254a9092919063ffffffff16565b600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123945750600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6123a8576123a38787876129bc565b6123aa565b845b9050601d60179054906101000a900460ff1680156124125750600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561244157601a5461243582612427896113ce565b611c5d90919063ffffffff16565b111561244057600080fd5b5b61249381600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c5d90919063ffffffff16565b600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161253391906133c1565b60405180910390a3600193505050505b9392505050565b6000838311158290612592576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125899190613146565b60405180910390fd5b50600083856125a19190613bc6565b9050809150509392505050565b60006125f083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061254a565b905092915050565b6000612683826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461254a9092919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061271882600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c5d90919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516127b891906133c1565b60405180910390a3600190509392505050565b6001601d60146101000a81548160ff0219169083151502179055506000612824600261281660175461280860125487612be390919063ffffffff16565b612c5d90919063ffffffff16565b612c5d90919063ffffffff16565b9050600061283b82846125ae90919063ffffffff16565b905061284681612ca7565b600047905060006128776128666002601254612c5d90919063ffffffff16565b6017546125ae90919063ffffffff16565b905060006128b560026128a78461289960125488612be390919063ffffffff16565b612c5d90919063ffffffff16565b612c5d90919063ffffffff16565b905060006128e0836128d260145487612be390919063ffffffff16565b612c5d90919063ffffffff16565b90506000612909826128fb85886125ae90919063ffffffff16565b6125ae90919063ffffffff16565b9050600081111561294157612940600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682612f23565b5b600082111561297757612976600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612f23565b5b6000831180156129875750600087115b15612997576129968784612f6e565b5b505050505050506000601d60146101000a81548160ff02191690831515021790555050565b60008060009050600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612a4457612a3d6064612a2f60155486612be390919063ffffffff16565b612c5d90919063ffffffff16565b9050612ac2565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612ac157612abe6064612ab060165486612be390919063ffffffff16565b612c5d90919063ffffffff16565b90505b5b6000811115612bc657612b1d81600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c5d90919063ffffffff16565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612bbd91906133c1565b60405180910390a35b612bd981846125ae90919063ffffffff16565b9150509392505050565b6000808303612bf55760009050612c57565b60008284612c039190613bfa565b9050828482612c129190613c6b565b14612c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4990613d0e565b60405180910390fd5b809150505b92915050565b6000612c9f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613053565b905092915050565b6000600267ffffffffffffffff811115612cc457612cc3613d2e565b5b604051908082528060200260200182016040528015612cf25781602001602082028036833780820191505090505b5090503081600081518110612d0a57612d09613714565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612db1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dd59190613d72565b81600181518110612de957612de8613714565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612e5030601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611cbb565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612eb4959493929190613e98565b600060405180830381600087803b158015612ece57600080fd5b505af1158015612ee2573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612f17929190613ef2565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612f69573d6000803e3d6000fd5b505050565b612f9b30601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611cbb565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080612fe76116a8565b426040518863ffffffff1660e01b815260040161300996959493929190613f22565b60606040518083038185885af1158015613027573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061304c9190613f98565b5050505050565b6000808311829061309a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130919190613146565b60405180910390fd5b50600083856130a99190613c6b565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156130f05780820151818401526020810190506130d5565b60008484015250505050565b6000601f19601f8301169050919050565b6000613118826130b6565b61312281856130c1565b93506131328185602086016130d2565b61313b816130fc565b840191505092915050565b60006020820190508181036000830152613160818461310d565b905092915050565b600080fd5b600080fd5b6000819050919050565b61318581613172565b811461319057600080fd5b50565b6000813590506131a28161317c565b92915050565b6000806000606084860312156131c1576131c0613168565b5b60006131cf86828701613193565b93505060206131e086828701613193565b92505060406131f186828701613193565b9150509250925092565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613226826131fb565b9050919050565b6132368161321b565b811461324157600080fd5b50565b6000813590506132538161322d565b92915050565b600080604083850312156132705761326f613168565b5b600061327e85828601613244565b925050602061328f85828601613193565b9150509250929050565b60008115159050919050565b6132ae81613299565b82525050565b60006020820190506132c960008301846132a5565b92915050565b6000602082840312156132e5576132e4613168565b5b60006132f384828501613244565b91505092915050565b6000613307826131fb565b9050919050565b613317816132fc565b82525050565b6000602082019050613332600083018461330e565b92915050565b6000819050919050565b600061335d613358613353846131fb565b613338565b6131fb565b9050919050565b600061336f82613342565b9050919050565b600061338182613364565b9050919050565b61339181613376565b82525050565b60006020820190506133ac6000830184613388565b92915050565b6133bb81613172565b82525050565b60006020820190506133d660008301846133b2565b92915050565b6133e581613299565b81146133f057600080fd5b50565b600081359050613402816133dc565b92915050565b6000806040838503121561341f5761341e613168565b5b600061342d85828601613244565b925050602061343e858286016133f3565b9150509250929050565b60008060006060848603121561346157613460613168565b5b600061346f86828701613244565b935050602061348086828701613244565b925050604061349186828701613193565b9150509250925092565b6134a48161321b565b82525050565b60006020820190506134bf600083018461349b565b92915050565b600060ff82169050919050565b6134db816134c5565b82525050565b60006020820190506134f660008301846134d2565b92915050565b60006020828403121561351257613511613168565b5b600061352084828501613193565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261354e5761354d613529565b5b8235905067ffffffffffffffff81111561356b5761356a61352e565b5b60208301915083602082028301111561358757613586613533565b5b9250929050565b600080602083850312156135a5576135a4613168565b5b600083013567ffffffffffffffff8111156135c3576135c261316d565b5b6135cf85828601613538565b92509250509250929050565b6000602082840312156135f1576135f0613168565b5b60006135ff848285016133f3565b91505092915050565b6000806040838503121561361f5761361e613168565b5b600061362d85828601613244565b925050602061363e85828601613244565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061368f57607f821691505b6020821081036136a2576136a1613648565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006136de6020836130c1565b91506136e9826136a8565b602082019050919050565b6000602082019050818103600083015261370d816136d1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061377d82613172565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036137af576137ae613743565b5b600182019050919050565b60006137c582613172565b91506137d083613172565b92508282019050808211156137e8576137e7613743565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613824601b836130c1565b915061382f826137ee565b602082019050919050565b6000602082019050818103600083015261385381613817565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006138b66024836130c1565b91506138c18261385a565b604082019050919050565b600060208201905081810360008301526138e5816138a9565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006139486022836130c1565b9150613953826138ec565b604082019050919050565b600060208201905081810360008301526139778161393b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006139da6025836130c1565b91506139e58261397e565b604082019050919050565b60006020820190508181036000830152613a09816139cd565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613a6c6023836130c1565b9150613a7782613a10565b604082019050919050565b60006020820190508181036000830152613a9b81613a5f565b9050919050565b7f556e61626c6520746f206c6f6361746520636f72726573706f6e64696e67205460008201527f72616e736665724576656e744c4f475300000000000000000000000000000000602082015250565b6000613afe6030836130c1565b9150613b0982613aa2565b604082019050919050565b60006020820190508181036000830152613b2d81613af1565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000613b906028836130c1565b9150613b9b82613b34565b604082019050919050565b60006020820190508181036000830152613bbf81613b83565b9050919050565b6000613bd182613172565b9150613bdc83613172565b9250828203905081811115613bf457613bf3613743565b5b92915050565b6000613c0582613172565b9150613c1083613172565b9250828202613c1e81613172565b91508282048414831517613c3557613c34613743565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613c7682613172565b9150613c8183613172565b925082613c9157613c90613c3c565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000613cf86021836130c1565b9150613d0382613c9c565b604082019050919050565b60006020820190508181036000830152613d2781613ceb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050613d6c8161322d565b92915050565b600060208284031215613d8857613d87613168565b5b6000613d9684828501613d5d565b91505092915050565b6000819050919050565b6000613dc4613dbf613dba84613d9f565b613338565b613172565b9050919050565b613dd481613da9565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613e0f8161321b565b82525050565b6000613e218383613e06565b60208301905092915050565b6000602082019050919050565b6000613e4582613dda565b613e4f8185613de5565b9350613e5a83613df6565b8060005b83811015613e8b578151613e728882613e15565b9750613e7d83613e2d565b925050600181019050613e5e565b5085935050505092915050565b600060a082019050613ead60008301886133b2565b613eba6020830187613dcb565b8181036040830152613ecc8186613e3a565b9050613edb606083018561349b565b613ee860808301846133b2565b9695505050505050565b6000604082019050613f0760008301856133b2565b8181036020830152613f198184613e3a565b90509392505050565b600060c082019050613f37600083018961349b565b613f4460208301886133b2565b613f516040830187613dcb565b613f5e6060830186613dcb565b613f6b608083018561349b565b613f7860a08301846133b2565b979650505050505050565b600081519050613f928161317c565b92915050565b600080600060608486031215613fb157613fb0613168565b5b6000613fbf86828701613f83565b9350506020613fd086828701613f83565b9250506040613fe186828701613f83565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122020c5addf856f2d34cb812994c3d184a5019d71e1d33a225431c556c18bf0fdf064736f6c63430008130033

Deployed Bytecode

0x6080604052600436106103035760003560e01c80638498a42c11610190578063c816841b116100dc578063dc44b6a011610095578063f0cd1dac1161006f578063f0cd1dac14610bd3578063f1d5f51714610bfe578063f84ba65d14610c27578063f872858a14610c505761030a565b8063dc44b6a014610b42578063dd62ed3e14610b6d578063ec28438a14610baa5761030a565b8063c816841b14610a2e578063c860795214610a59578063c867d60b14610a84578063cab0347114610ac1578063d158272d14610aec578063da00097d14610b175761030a565b8063a08e671f11610149578063a9059cbb11610123578063a9059cbb14610972578063c469b6dd146109af578063c49b9a80146109da578063c5d2418914610a035761030a565b8063a08e671f146108df578063a457c2d71461090a578063a83f53a7146109475761030a565b80638498a42c146107cd57806388790a68146107f65780638b42507f146108215780638da5cb5b1461085e57806395d89b4114610889578063a073d37f146108b45761030a565b8063395093511161024f5780635c9a05b811610208578063715018a6116101e2578063715018a6146107355780637d1db4a51461074c578063807c2d9c1461077757806382eefb43146107a25761030a565b80635c9a05b81461069057806361a23c69146106cd57806370a08231146106f85761030a565b8063395093511461055a5780633ecad2711461059757806348a46473146105d45780634a74bb02146105fd5780635342acb41461062857806357a5802f146106655761030a565b806318160ddd116102bc57806323b872dd1161029657806323b872dd1461049c57806327c8f835146104d95780632b112e4914610504578063313ce5671461052f5761030a565b806318160ddd1461041f5780631870517a1461044a5780632198cf6c146104735761030a565b806306fdde031461030f578063087332141461033a578063095ea7b3146103635780630f4fbcc6146103a05780631245e347146103c95780631694505e146103f45761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b50610324610c7b565b6040516103319190613146565b60405180910390f35b34801561034657600080fd5b50610361600480360381019061035c91906131a8565b610d0d565b005b34801561036f57600080fd5b5061038a60048036038101906103859190613259565b610dd4565b60405161039791906132b4565b60405180910390f35b3480156103ac57600080fd5b506103c760048036038101906103c291906132cf565b610df2565b005b3480156103d557600080fd5b506103de610ec9565b6040516103eb919061331d565b60405180910390f35b34801561040057600080fd5b50610409610eef565b6040516104169190613397565b60405180910390f35b34801561042b57600080fd5b50610434610f15565b60405161044191906133c1565b60405180910390f35b34801561045657600080fd5b50610471600480360381019061046c91906131a8565b610f1f565b005b34801561047f57600080fd5b5061049a60048036038101906104959190613408565b610fe6565b005b3480156104a857600080fd5b506104c360048036038101906104be9190613448565b6110bd565b6040516104d091906132b4565b60405180910390f35b3480156104e557600080fd5b506104ee611197565b6040516104fb91906134aa565b60405180910390f35b34801561051057600080fd5b506105196111bb565b60405161052691906133c1565b60405180910390f35b34801561053b57600080fd5b506105446111ff565b60405161055191906134e1565b60405180910390f35b34801561056657600080fd5b50610581600480360381019061057c9190613259565b611216565b60405161058e91906132b4565b60405180910390f35b3480156105a357600080fd5b506105be60048036038101906105b991906132cf565b6112c9565b6040516105cb91906132b4565b60405180910390f35b3480156105e057600080fd5b506105fb60048036038101906105f691906134fc565b6112e9565b005b34801561060957600080fd5b5061061261136f565b60405161061f91906132b4565b60405180910390f35b34801561063457600080fd5b5061064f600480360381019061064a91906132cf565b611382565b60405161065c91906132b4565b60405180910390f35b34801561067157600080fd5b5061067a6113a2565b60405161068791906133c1565b60405180910390f35b34801561069c57600080fd5b506106b760048036038101906106b291906132cf565b6113a8565b6040516106c491906132b4565b60405180910390f35b3480156106d957600080fd5b506106e26113c8565b6040516106ef91906133c1565b60405180910390f35b34801561070457600080fd5b5061071f600480360381019061071a91906132cf565b6113ce565b60405161072c91906133c1565b60405180910390f35b34801561074157600080fd5b5061074a611417565b005b34801561075857600080fd5b50610761611551565b60405161076e91906133c1565b60405180910390f35b34801561078357600080fd5b5061078c611557565b60405161079991906133c1565b60405180910390f35b3480156107ae57600080fd5b506107b761155d565b6040516107c491906133c1565b60405180910390f35b3480156107d957600080fd5b506107f460048036038101906107ef919061358e565b611563565b005b34801561080257600080fd5b5061080b611682565b60405161081891906133c1565b60405180910390f35b34801561082d57600080fd5b50610848600480360381019061084391906132cf565b611688565b60405161085591906132b4565b60405180910390f35b34801561086a57600080fd5b506108736116a8565b60405161088091906134aa565b60405180910390f35b34801561089557600080fd5b5061089e6116d1565b6040516108ab9190613146565b60405180910390f35b3480156108c057600080fd5b506108c9611763565b6040516108d691906133c1565b60405180910390f35b3480156108eb57600080fd5b506108f461176d565b60405161090191906133c1565b60405180910390f35b34801561091657600080fd5b50610931600480360381019061092c9190613259565b611773565b60405161093e91906132b4565b60405180910390f35b34801561095357600080fd5b5061095c611840565b60405161096991906133c1565b60405180910390f35b34801561097e57600080fd5b5061099960048036038101906109949190613259565b611846565b6040516109a691906132b4565b60405180910390f35b3480156109bb57600080fd5b506109c4611865565b6040516109d191906133c1565b60405180910390f35b3480156109e657600080fd5b50610a0160048036038101906109fc91906135db565b61186b565b005b348015610a0f57600080fd5b50610a1861193b565b604051610a2591906133c1565b60405180910390f35b348015610a3a57600080fd5b50610a43611941565b604051610a5091906134aa565b60405180910390f35b348015610a6557600080fd5b50610a6e611967565b604051610a7b91906133c1565b60405180910390f35b348015610a9057600080fd5b50610aab6004803603810190610aa691906132cf565b61196d565b604051610ab891906132b4565b60405180910390f35b348015610acd57600080fd5b50610ad661198d565b604051610ae391906133c1565b60405180910390f35b348015610af857600080fd5b50610b01611993565b604051610b0e919061331d565b60405180910390f35b348015610b2357600080fd5b50610b2c6119b9565b604051610b3991906132b4565b60405180910390f35b348015610b4e57600080fd5b50610b576119cc565b604051610b6491906133c1565b60405180910390f35b348015610b7957600080fd5b50610b946004803603810190610b8f9190613608565b6119d2565b604051610ba191906133c1565b60405180910390f35b348015610bb657600080fd5b50610bd16004803603810190610bcc91906134fc565b611a59565b005b348015610bdf57600080fd5b50610be8611adf565b604051610bf591906133c1565b60405180910390f35b348015610c0a57600080fd5b50610c256004803603810190610c2091906134fc565b611ae5565b005b348015610c3357600080fd5b50610c4e6004803603810190610c499190613408565b611b6b565b005b348015610c5c57600080fd5b50610c65611c42565b604051610c7291906132b4565b60405180910390f35b606060018054610c8a90613677565b80601f0160208091040260200160405190810160405280929190818152602001828054610cb690613677565b8015610d035780601f10610cd857610100808354040283529160200191610d03565b820191906000526020600020905b815481529060010190602001808311610ce657829003601f168201915b5050505050905090565b610d15611c55565b73ffffffffffffffffffffffffffffffffffffffff16610d336116a8565b73ffffffffffffffffffffffffffffffffffffffff1614610d89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d80906136f4565b60405180910390fd5b82600f819055508160108190555080601181905550610dc9601154610dbb601054600f54611c5d90919063ffffffff16565b611c5d90919063ffffffff16565b601681905550505050565b6000610de8610de1611c55565b8484611cbb565b6001905092915050565b610dfa611c55565b73ffffffffffffffffffffffffffffffffffffffff16610e186116a8565b73ffffffffffffffffffffffffffffffffffffffff1614610e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e65906136f4565b60405180910390fd5b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601854905090565b610f27611c55565b73ffffffffffffffffffffffffffffffffffffffff16610f456116a8565b73ffffffffffffffffffffffffffffffffffffffff1614610f9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f92906136f4565b60405180910390fd5b82600c8190555081600d8190555080600e81905550610fdb600e54610fcd600d54600c54611c5d90919063ffffffff16565b611c5d90919063ffffffff16565b601581905550505050565b610fee611c55565b73ffffffffffffffffffffffffffffffffffffffff1661100c6116a8565b73ffffffffffffffffffffffffffffffffffffffff1614611062576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611059906136f4565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006110ca848484611e84565b5061118c846110d7611c55565b61118785604051806060016040528060288152602001613fec60289139600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061113d611c55565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461254a9092919063ffffffff16565b611cbb565b600190509392505050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b60006111fa6111e97f000000000000000000000000000000000000000000000000000000000000dead6113ce565b6018546125ae90919063ffffffff16565b905090565b6000600360009054906101000a900460ff16905090565b60006112bf611223611c55565b846112ba8560066000611234611c55565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c5d90919063ffffffff16565b611cbb565b6001905092915050565b600a6020528060005260406000206000915054906101000a900460ff1681565b6112f1611c55565b73ffffffffffffffffffffffffffffffffffffffff1661130f6116a8565b73ffffffffffffffffffffffffffffffffffffffff1614611365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135c906136f4565b60405180910390fd5b80601b8190555050565b601d60159054906101000a900460ff1681565b60076020528060005260406000206000915054906101000a900460ff1681565b60125481565b600b6020528060005260406000206000915054906101000a900460ff1681565b60135481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61141f611c55565b73ffffffffffffffffffffffffffffffffffffffff1661143d6116a8565b73ffffffffffffffffffffffffffffffffffffffff1614611493576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148a906136f4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60195481565b601a5481565b60165481565b61156b611c55565b73ffffffffffffffffffffffffffffffffffffffff166115896116a8565b73ffffffffffffffffffffffffffffffffffffffff16146115df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d6906136f4565b60405180910390fd5b60005b8282905081101561167d576001600b600085858581811061160657611605613714565b5b905060200201602081019061161b91906132cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508061167690613772565b90506115e2565b505050565b600f5481565b60096020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600280546116e090613677565b80601f016020809104026020016040519081016040528092919081815260200182805461170c90613677565b80156117595780601f1061172e57610100808354040283529160200191611759565b820191906000526020600020905b81548152906001019060200180831161173c57829003601f168201915b5050505050905090565b6000601b54905090565b60175481565b6000611836611780611c55565b846118318560405180606001604052806025815260200161401460259139600660006117aa611c55565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461254a9092919063ffffffff16565b611cbb565b6001905092915050565b60145481565b600061185a611853611c55565b8484611e84565b506001905092915050565b600e5481565b611873611c55565b73ffffffffffffffffffffffffffffffffffffffff166118916116a8565b73ffffffffffffffffffffffffffffffffffffffff16146118e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118de906136f4565b60405180910390fd5b80601d60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161193091906132b4565b60405180910390a150565b600d5481565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b60086020528060005260406000206000915054906101000a900460ff1681565b60115481565b600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d60169054906101000a900460ff1681565b600c5481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611a61611c55565b73ffffffffffffffffffffffffffffffffffffffff16611a7f6116a8565b73ffffffffffffffffffffffffffffffffffffffff1614611ad5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acc906136f4565b60405180910390fd5b8060198190555050565b60155481565b611aed611c55565b73ffffffffffffffffffffffffffffffffffffffff16611b0b6116a8565b73ffffffffffffffffffffffffffffffffffffffff1614611b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b58906136f4565b60405180910390fd5b80601a8190555050565b611b73611c55565b73ffffffffffffffffffffffffffffffffffffffff16611b916116a8565b73ffffffffffffffffffffffffffffffffffffffff1614611be7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bde906136f4565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601d60179054906101000a900460ff1681565b600033905090565b6000808284611c6c91906137ba565b905083811015611cb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca89061383a565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d21906138cc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d909061395e565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e7791906133c1565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611ef4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eeb906139f0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5a90613a82565b60405180910390fd5b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156120075750600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203d90613b14565b60405180910390fd5b601d60149054906101000a900460ff161561206d576120668484846125f8565b9050612543565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156121115750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561215c5760195482111561215b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215290613ba6565b60405180910390fd5b5b6000612167306113ce565b90506000601b54821015905080801561218d5750601d60149054906101000a900460ff16155b80156121e35750600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156121fb5750601d60159054906101000a900460ff165b1561222557601d60169054906101000a900460ff161561221b57601b5491505b612224826127cb565b5b6122ae846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461254a9092919063ffffffff16565b600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123945750600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6123a8576123a38787876129bc565b6123aa565b845b9050601d60179054906101000a900460ff1680156124125750600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561244157601a5461243582612427896113ce565b611c5d90919063ffffffff16565b111561244057600080fd5b5b61249381600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c5d90919063ffffffff16565b600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161253391906133c1565b60405180910390a3600193505050505b9392505050565b6000838311158290612592576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125899190613146565b60405180910390fd5b50600083856125a19190613bc6565b9050809150509392505050565b60006125f083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061254a565b905092915050565b6000612683826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461254a9092919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061271882600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c5d90919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516127b891906133c1565b60405180910390a3600190509392505050565b6001601d60146101000a81548160ff0219169083151502179055506000612824600261281660175461280860125487612be390919063ffffffff16565b612c5d90919063ffffffff16565b612c5d90919063ffffffff16565b9050600061283b82846125ae90919063ffffffff16565b905061284681612ca7565b600047905060006128776128666002601254612c5d90919063ffffffff16565b6017546125ae90919063ffffffff16565b905060006128b560026128a78461289960125488612be390919063ffffffff16565b612c5d90919063ffffffff16565b612c5d90919063ffffffff16565b905060006128e0836128d260145487612be390919063ffffffff16565b612c5d90919063ffffffff16565b90506000612909826128fb85886125ae90919063ffffffff16565b6125ae90919063ffffffff16565b9050600081111561294157612940600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682612f23565b5b600082111561297757612976600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612f23565b5b6000831180156129875750600087115b15612997576129968784612f6e565b5b505050505050506000601d60146101000a81548160ff02191690831515021790555050565b60008060009050600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612a4457612a3d6064612a2f60155486612be390919063ffffffff16565b612c5d90919063ffffffff16565b9050612ac2565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612ac157612abe6064612ab060165486612be390919063ffffffff16565b612c5d90919063ffffffff16565b90505b5b6000811115612bc657612b1d81600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c5d90919063ffffffff16565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612bbd91906133c1565b60405180910390a35b612bd981846125ae90919063ffffffff16565b9150509392505050565b6000808303612bf55760009050612c57565b60008284612c039190613bfa565b9050828482612c129190613c6b565b14612c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4990613d0e565b60405180910390fd5b809150505b92915050565b6000612c9f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613053565b905092915050565b6000600267ffffffffffffffff811115612cc457612cc3613d2e565b5b604051908082528060200260200182016040528015612cf25781602001602082028036833780820191505090505b5090503081600081518110612d0a57612d09613714565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612db1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dd59190613d72565b81600181518110612de957612de8613714565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612e5030601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611cbb565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612eb4959493929190613e98565b600060405180830381600087803b158015612ece57600080fd5b505af1158015612ee2573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612f17929190613ef2565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612f69573d6000803e3d6000fd5b505050565b612f9b30601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611cbb565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080612fe76116a8565b426040518863ffffffff1660e01b815260040161300996959493929190613f22565b60606040518083038185885af1158015613027573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061304c9190613f98565b5050505050565b6000808311829061309a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130919190613146565b60405180910390fd5b50600083856130a99190613c6b565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156130f05780820151818401526020810190506130d5565b60008484015250505050565b6000601f19601f8301169050919050565b6000613118826130b6565b61312281856130c1565b93506131328185602086016130d2565b61313b816130fc565b840191505092915050565b60006020820190508181036000830152613160818461310d565b905092915050565b600080fd5b600080fd5b6000819050919050565b61318581613172565b811461319057600080fd5b50565b6000813590506131a28161317c565b92915050565b6000806000606084860312156131c1576131c0613168565b5b60006131cf86828701613193565b93505060206131e086828701613193565b92505060406131f186828701613193565b9150509250925092565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613226826131fb565b9050919050565b6132368161321b565b811461324157600080fd5b50565b6000813590506132538161322d565b92915050565b600080604083850312156132705761326f613168565b5b600061327e85828601613244565b925050602061328f85828601613193565b9150509250929050565b60008115159050919050565b6132ae81613299565b82525050565b60006020820190506132c960008301846132a5565b92915050565b6000602082840312156132e5576132e4613168565b5b60006132f384828501613244565b91505092915050565b6000613307826131fb565b9050919050565b613317816132fc565b82525050565b6000602082019050613332600083018461330e565b92915050565b6000819050919050565b600061335d613358613353846131fb565b613338565b6131fb565b9050919050565b600061336f82613342565b9050919050565b600061338182613364565b9050919050565b61339181613376565b82525050565b60006020820190506133ac6000830184613388565b92915050565b6133bb81613172565b82525050565b60006020820190506133d660008301846133b2565b92915050565b6133e581613299565b81146133f057600080fd5b50565b600081359050613402816133dc565b92915050565b6000806040838503121561341f5761341e613168565b5b600061342d85828601613244565b925050602061343e858286016133f3565b9150509250929050565b60008060006060848603121561346157613460613168565b5b600061346f86828701613244565b935050602061348086828701613244565b925050604061349186828701613193565b9150509250925092565b6134a48161321b565b82525050565b60006020820190506134bf600083018461349b565b92915050565b600060ff82169050919050565b6134db816134c5565b82525050565b60006020820190506134f660008301846134d2565b92915050565b60006020828403121561351257613511613168565b5b600061352084828501613193565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261354e5761354d613529565b5b8235905067ffffffffffffffff81111561356b5761356a61352e565b5b60208301915083602082028301111561358757613586613533565b5b9250929050565b600080602083850312156135a5576135a4613168565b5b600083013567ffffffffffffffff8111156135c3576135c261316d565b5b6135cf85828601613538565b92509250509250929050565b6000602082840312156135f1576135f0613168565b5b60006135ff848285016133f3565b91505092915050565b6000806040838503121561361f5761361e613168565b5b600061362d85828601613244565b925050602061363e85828601613244565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061368f57607f821691505b6020821081036136a2576136a1613648565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006136de6020836130c1565b91506136e9826136a8565b602082019050919050565b6000602082019050818103600083015261370d816136d1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061377d82613172565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036137af576137ae613743565b5b600182019050919050565b60006137c582613172565b91506137d083613172565b92508282019050808211156137e8576137e7613743565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613824601b836130c1565b915061382f826137ee565b602082019050919050565b6000602082019050818103600083015261385381613817565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006138b66024836130c1565b91506138c18261385a565b604082019050919050565b600060208201905081810360008301526138e5816138a9565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006139486022836130c1565b9150613953826138ec565b604082019050919050565b600060208201905081810360008301526139778161393b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006139da6025836130c1565b91506139e58261397e565b604082019050919050565b60006020820190508181036000830152613a09816139cd565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613a6c6023836130c1565b9150613a7782613a10565b604082019050919050565b60006020820190508181036000830152613a9b81613a5f565b9050919050565b7f556e61626c6520746f206c6f6361746520636f72726573706f6e64696e67205460008201527f72616e736665724576656e744c4f475300000000000000000000000000000000602082015250565b6000613afe6030836130c1565b9150613b0982613aa2565b604082019050919050565b60006020820190508181036000830152613b2d81613af1565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000613b906028836130c1565b9150613b9b82613b34565b604082019050919050565b60006020820190508181036000830152613bbf81613b83565b9050919050565b6000613bd182613172565b9150613bdc83613172565b9250828203905081811115613bf457613bf3613743565b5b92915050565b6000613c0582613172565b9150613c1083613172565b9250828202613c1e81613172565b91508282048414831517613c3557613c34613743565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613c7682613172565b9150613c8183613172565b925082613c9157613c90613c3c565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000613cf86021836130c1565b9150613d0382613c9c565b604082019050919050565b60006020820190508181036000830152613d2781613ceb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050613d6c8161322d565b92915050565b600060208284031215613d8857613d87613168565b5b6000613d9684828501613d5d565b91505092915050565b6000819050919050565b6000613dc4613dbf613dba84613d9f565b613338565b613172565b9050919050565b613dd481613da9565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613e0f8161321b565b82525050565b6000613e218383613e06565b60208301905092915050565b6000602082019050919050565b6000613e4582613dda565b613e4f8185613de5565b9350613e5a83613df6565b8060005b83811015613e8b578151613e728882613e15565b9750613e7d83613e2d565b925050600181019050613e5e565b5085935050505092915050565b600060a082019050613ead60008301886133b2565b613eba6020830187613dcb565b8181036040830152613ecc8186613e3a565b9050613edb606083018561349b565b613ee860808301846133b2565b9695505050505050565b6000604082019050613f0760008301856133b2565b8181036020830152613f198184613e3a565b90509392505050565b600060c082019050613f37600083018961349b565b613f4460208301886133b2565b613f516040830187613dcb565b613f5e6060830186613dcb565b613f6b608083018561349b565b613f7860a08301846133b2565b979650505050505050565b600081519050613f928161317c565b92915050565b600080600060608486031215613fb157613fb0613168565b5b6000613fbf86828701613f83565b9350506020613fd086828701613f83565b9250506040613fe186828701613f83565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122020c5addf856f2d34cb812994c3d184a5019d71e1d33a225431c556c18bf0fdf064736f6c63430008130033

Deployed Bytecode Sourcemap

13960:13653:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18009:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20298:341;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19304:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20770:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14314:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15693:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18286:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19957:333;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21052:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22033:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14419:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21488:128;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18195:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18672:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14811:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20892:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15808:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14640:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15172:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14860:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15215:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18394:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5973:148;;;;;;;;;;;;;:::i;:::-;;15502:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15562:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15340:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24188:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15045:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14756:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5754:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19175:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15387:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18898:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15257:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21858:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15002:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21305:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14959:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15741:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15088:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14697:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15132:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14204:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15855:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14917:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18521:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20653:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15296:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21195:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19818:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15907:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18009:83;18046:13;18079:5;18072:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18009:83;:::o;20298:341::-;5898:12;:10;:12::i;:::-;5887:23;;:7;:5;:7::i;:::-;:23;;;5879:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20442:15:::1;20422:17;:35;;;;20488:15;20468:17;:35;;;;20529:10;20514:12;:25;;;;20573:58;20618:12;;20573:40;20595:17;;20573;;:21;;:40;;;;:::i;:::-;:44;;:58;;;;:::i;:::-;20552:18;:79;;;;20298:341:::0;;;:::o;19304:161::-;19379:4;19396:39;19405:12;:10;:12::i;:::-;19419:7;19428:6;19396:8;:39::i;:::-;19453:4;19446:11;;19304:161;;;;:::o;20770:116::-;5898:12;:10;:12::i;:::-;5887:23;;:7;:5;:7::i;:::-;:23;;;5879:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20873:5:::1;20846:15;:24;20862:7;20846:24;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;20770:116:::0;:::o;14314:94::-;;;;;;;;;;;;;:::o;15693:41::-;;;;;;;;;;;;;:::o;18286:100::-;18339:7;18366:12;;18359:19;;18286:100;:::o;19957:333::-;5898:12;:10;:12::i;:::-;5887:23;;:7;:5;:7::i;:::-;:23;;;5879:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20099:15:::1;20080:16;:34;;;;20144:15;20125:16;:34;;;;20184:10;20170:11;:24;;;;20227:55;20270:11;;20227:38;20248:16;;20227;;:20;;:38;;;;:::i;:::-;:42;;:55;;;;:::i;:::-;20207:17;:75;;;;19957:333:::0;;;:::o;21052:135::-;5898:12;:10;:12::i;:::-;5887:23;;:7;:5;:7::i;:::-;:23;;;5879:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21173:6:::1;21143:19;:27;21163:6;21143:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;21052:135:::0;;:::o;22033:313::-;22131:4;22148:36;22158:6;22166:9;22177:6;22148:9;:36::i;:::-;;22195:121;22204:6;22212:12;:10;:12::i;:::-;22226:89;22264:6;22226:89;;;;;;;;;;;;;;;;;:11;:19;22238:6;22226:19;;;;;;;;;;;;;;;:33;22246:12;:10;:12::i;:::-;22226:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;22195:8;:121::i;:::-;22334:4;22327:11;;22033:313;;;;;:::o;14419:81::-;;;:::o;21488:128::-;21541:7;21568:40;21585:22;21595:11;21585:9;:22::i;:::-;21568:12;;:16;;:40;;;;:::i;:::-;21561:47;;21488:128;:::o;18195:83::-;18236:5;18261:9;;;;;;;;;;;18254:16;;18195:83;:::o;18672:218::-;18760:4;18777:83;18786:12;:10;:12::i;:::-;18800:7;18809:50;18848:10;18809:11;:25;18821:12;:10;:12::i;:::-;18809:25;;;;;;;;;;;;;;;:34;18835:7;18809:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;18777:8;:83::i;:::-;18878:4;18871:11;;18672:218;;;;:::o;14811:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;20892:152::-;5898:12;:10;:12::i;:::-;5887:23;;:7;:5;:7::i;:::-;:23;;;5879:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21014:22:::1;20988:23;:48;;;;20892:152:::0;:::o;15808:40::-;;;;;;;;;;;;;:::o;14640:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;15172:35::-;;;;:::o;14860:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;15215:35::-;;;;:::o;18394:119::-;18460:7;18487:9;:18;18497:7;18487:18;;;;;;;;;;;;;;;;18480:25;;18394:119;;;:::o;5973:148::-;5898:12;:10;:12::i;:::-;5887:23;;:7;:5;:7::i;:::-;:23;;;5879:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6080:1:::1;6043:40;;6064:6;::::0;::::1;;;;;;;;6043:40;;;;;;;;;;;;6111:1;6094:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;5973:148::o:0;15502:52::-;;;;:::o;15562:50::-;;;;:::o;15340:38::-;;;;:::o;24188:193::-;5898:12;:10;:12::i;:::-;5887:23;;:7;:5;:7::i;:::-;:23;;;5879:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24279:9:::1;24274:100;24294:9;;:16;;24290:1;:20;24274:100;;;24360:4;24328:15;:29;24344:9;;24354:1;24344:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;24328:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;24312:3;;;;:::i;:::-;;;24274:100;;;;24188:193:::0;;:::o;15045:36::-;;;;:::o;14756:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;5754:87::-;5800:7;5827:6;;;;;;;;;;;5820:13;;5754:87;:::o;18100:::-;18139:13;18172:7;18165:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18100:87;:::o;19175:120::-;19237:7;19264:23;;19257:30;;19175:120;:::o;15387:44::-;;;;:::o;18898:269::-;18991:4;19008:129;19017:12;:10;:12::i;:::-;19031:7;19040:96;19079:15;19040:96;;;;;;;;;;;;;;;;;:11;:25;19052:12;:10;:12::i;:::-;19040:25;;;;;;;;;;;;;;;:34;19066:7;19040:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;19008:8;:129::i;:::-;19155:4;19148:11;;18898:269;;;;:::o;15257:29::-;;;;:::o;21858:167::-;21936:4;21953:42;21963:12;:10;:12::i;:::-;21977:9;21988:6;21953:9;:42::i;:::-;;22013:4;22006:11;;21858:167;;;;:::o;15002:30::-;;;;:::o;21305:171::-;5898:12;:10;:12::i;:::-;5887:23;;:7;:5;:7::i;:::-;:23;;;5879:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21406:8:::1;21382:21;;:32;;;;;;;;;;;;;;;;;;21430:38;21459:8;21430:38;;;;;;:::i;:::-;;;;;;;;21305:171:::0;:::o;14959:36::-;;;;:::o;15741:26::-;;;;;;;;;;;;;:::o;15088:37::-;;;;:::o;14697:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;15132:31::-;;;;:::o;14204:99::-;;;;;;;;;;;;;:::o;15855:45::-;;;;;;;;;;;;;:::o;14917:35::-;;;;:::o;18521:143::-;18602:7;18629:11;:18;18641:5;18629:18;;;;;;;;;;;;;;;:27;18648:7;18629:27;;;;;;;;;;;;;;;;18622:34;;18521:143;;;;:::o;20653:111::-;5898:12;:10;:12::i;:::-;5887:23;;:7;:5;:7::i;:::-;:23;;;5879:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20745:11:::1;20730:12;:26;;;;20653:111:::0;:::o;15296:37::-;;;;:::o;21195:102::-;5898:12;:10;:12::i;:::-;5887:23;;:7;:5;:7::i;:::-;:23;;;5879:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21281:8:::1;21267:10;:22;;;;21195:102:::0;:::o;19818:127::-;5898:12;:10;:12::i;:::-;5887:23;;:7;:5;:7::i;:::-;:23;;;5879:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19931:6:::1;19905:15;:23;19921:6;19905:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;19818:127:::0;;:::o;15907:35::-;;;;;;;;;;;;;:::o;138:115::-;191:15;234:10;219:26;;138:115;:::o;1206:181::-;1264:7;1284:9;1300:1;1296;:5;;;;:::i;:::-;1284:17;;1325:1;1320;:6;;1312:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1378:1;1371:8;;;1206:181;;;;:::o;19473:337::-;19583:1;19566:19;;:5;:19;;;19558:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19664:1;19645:21;;:7;:21;;;19637:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19748:6;19718:11;:18;19730:5;19718:18;;;;;;;;;;;;;;;:27;19737:7;19718:27;;;;;;;;;;;;;;;:36;;;;19786:7;19770:32;;19779:5;19770:32;;;19795:6;19770:32;;;;;;:::i;:::-;;;;;;;;19473:337;;;:::o;22354:1828::-;22441:4;22486:1;22468:20;;:6;:20;;;22460:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;22570:1;22549:23;;:9;:23;;;22541:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;22626:15;:23;22642:6;22626:23;;;;;;;;;;;;;;;;;;;;;;;;;22625:24;:55;;;;;22654:15;:26;22670:9;22654:26;;;;;;;;;;;;;;;;;;;;;;;;;22653:27;22625:55;22617:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;22749:16;;;;;;;;;;;22746:1429;;;22799:41;22814:6;22822:9;22833:6;22799:14;:41::i;:::-;22792:48;;;;22746:1429;22896:15;:23;22912:6;22896:23;;;;;;;;;;;;;;;;;;;;;;;;;22895:24;:55;;;;;22924:15;:26;22940:9;22924:26;;;;;;;;;;;;;;;;;;;;;;;;;22923:27;22895:55;22892:170;;;22989:12;;22979:6;:22;;22971:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;22892:170;23090:28;23121:24;23139:4;23121:9;:24::i;:::-;23090:55;;23160:28;23215:23;;23191:20;:47;;23160:78;;23271:23;:44;;;;;23299:16;;;;;;;;;;;23298:17;23271:44;:69;;;;;23320:12;:20;23333:6;23320:20;;;;;;;;;;;;;;;;;;;;;;;;;23319:21;23271:69;:94;;;;;23344:21;;;;;;;;;;;23271:94;23267:305;;;23403:25;;;;;;;;;;;23400:97;;;23474:23;;23451:46;;23400:97;23516:36;23531:20;23516:14;:36::i;:::-;23267:305;23608:53;23630:6;23608:53;;;;;;;;;;;;;;;;;:9;:17;23618:6;23608:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;23588:9;:17;23598:6;23588:17;;;;;;;;;;;;;;;:73;;;;23678:19;23701:17;:25;23719:6;23701:25;;;;;;;;;;;;;;;;;;;;;;;;;:57;;;;23730:17;:28;23748:9;23730:28;;;;;;;;;;;;;;;;;;;;;;;;;23701:57;23700:148;;23814:34;23822:6;23830:9;23841:6;23814:7;:34::i;:::-;23700:148;;;23805:6;23700:148;23678:170;;23868:16;;;;;;;;;;;:51;;;;;23889:19;:30;23909:9;23889:30;;;;;;;;;;;;;;;;;;;;;;;;;23888:31;23868:51;23865:133;;;23987:10;;23946:37;23971:11;23946:20;23956:9;23946;:20::i;:::-;:24;;:37;;;;:::i;:::-;:51;;23938:60;;;;;;23865:133;24038:37;24063:11;24038:9;:20;24048:9;24038:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;24015:9;:20;24025:9;24015:20;;;;;;;;;;;;;;;:60;;;;24114:9;24097:40;;24106:6;24097:40;;;24125:11;24097:40;;;;;;:::i;:::-;;;;;;;;24159:4;24152:11;;;;;22354:1828;;;;;;:::o;1539:192::-;1625:7;1658:1;1653;:6;;1661:12;1645:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1685:9;1701:1;1697;:5;;;;:::i;:::-;1685:17;;1722:1;1715:8;;;1539:192;;;;;:::o;1395:136::-;1453:7;1480:43;1484:1;1487;1480:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1473:50;;1395:136;;;;:::o;24389:330::-;24482:4;24519:53;24541:6;24519:53;;;;;;;;;;;;;;;;;:9;:17;24529:6;24519:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;24499:9;:17;24509:6;24499:17;;;;;;;;;;;;;;;:73;;;;24606:32;24631:6;24606:9;:20;24616:9;24606:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;24583:9;:20;24593:9;24583:20;;;;;;;;;;;;;;;:55;;;;24671:9;24654:35;;24663:6;24654:35;;;24682:6;24654:35;;;;;;:::i;:::-;;;;;;;;24707:4;24700:11;;24389:330;;;;;:::o;24727:1048::-;16384:4;16365:16;;:23;;;;;;;;;;;;;;;;;;24809:19:::1;24831:65;24894:1;24831:58;24864:24;;24831:28;24843:15;;24831:7;:11;;:28;;;;:::i;:::-;:32;;:58;;;;:::i;:::-;:62;;:65;;;;:::i;:::-;24809:87;;24907:21;24931:24;24943:11;24931:7;:11;;:24;;;;:::i;:::-;24907:48;;24968:31;24985:13;24968:16;:31::i;:::-;25010:22;25035:21;25010:46;;25069:19;25091:52;25120:22;25140:1;25120:15;;:19;;:22;;;;:::i;:::-;25091:24;;:28;;:52;;;;:::i;:::-;25069:74;;25164:26;25193:59;25250:1;25193:52;25233:11;25193:35;25212:15;;25193:14;:18;;:35;;;;:::i;:::-;:39;;:52;;;;:::i;:::-;:56;;:59;;;;:::i;:::-;25164:88;;25263:21;25287:47;25322:11;25287:30;25306:10;;25287:14;:18;;:30;;;;:::i;:::-;:34;;:47;;;;:::i;:::-;25263:71;;25345:26;25374:57;25417:13;25374:38;25393:18;25374:14;:18;;:38;;;;:::i;:::-;:42;;:57;;;;:::i;:::-;25345:86;;25468:1;25447:18;:22;25444:104;;;25484:64;25505:22;;;;;;;;;;;25529:18;25484:20;:64::i;:::-;25444:104;25580:1;25564:13;:17;25561:89;;;25596:54;25617:17;;;;;;;;;;;25636:13;25596:20;:54::i;:::-;25561:89;25687:1;25666:18;:22;:41;;;;;25706:1;25692:11;:15;25666:41;25663:104;;;25722:45;25735:11;25748:18;25722:12;:45::i;:::-;25663:104;24788:987;;;;;;;16430:5:::0;16411:16;;:24;;;;;;;;;;;;;;;;;;24727:1048;:::o;26982:622::-;27068:7;27098:17;27118:1;27098:21;;27143:12;:20;27156:6;27143:20;;;;;;;;;;;;;;;;;;;;;;;;;27140:223;;;27192:38;27226:3;27192:29;27203:17;;27192:6;:10;;:29;;;;:::i;:::-;:33;;:38;;;;:::i;:::-;27180:50;;27140:223;;;27260:12;:23;27273:9;27260:23;;;;;;;;;;;;;;;;;;;;;;;;;27257:106;;;27312:39;27347:3;27312:30;27323:18;;27312:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;27300:51;;27257:106;27140:223;27398:1;27386:9;:13;27383:173;;;27443:39;27472:9;27443;:24;27461:4;27443:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;27416:9;:24;27434:4;27416:24;;;;;;;;;;;;;;;:66;;;;27527:4;27502:42;;27511:6;27502:42;;;27534:9;27502:42;;;;;;:::i;:::-;;;;;;;;27383:173;27575:21;27586:9;27575:6;:10;;:21;;;;:::i;:::-;27568:28;;;26982:622;;;;;:::o;1739:250::-;1797:7;1826:1;1821;:6;1817:47;;1851:1;1844:8;;;;1817:47;1876:9;1892:1;1888;:5;;;;:::i;:::-;1876:17;;1921:1;1916;1912;:5;;;;:::i;:::-;:10;1904:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;1980:1;1973:8;;;1739:250;;;;;:::o;1997:132::-;2055:7;2082:39;2086:1;2089;2082:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2075:46;;1997:132;;;;:::o;25787:666::-;25913:21;25951:1;25937:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25913:40;;25982:4;25964;25969:1;25964:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;26008:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25998:4;26003:1;25998:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;26043:62;26060:4;26075:15;;;;;;;;;;;26093:11;26043:8;:62::i;:::-;26144:15;;;;;;;;;;;:66;;;26225:11;26251:1;26295:4;26322;26358:15;26144:240;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26410:35;26427:11;26440:4;26410:35;;;;;;;:::i;:::-;;;;;;;;25842:611;25787:666;:::o;21624:126::-;21716:9;:18;;:26;21735:6;21716:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21624:126;;:::o;26461:513::-;26609:62;26626:4;26641:15;;;;;;;;;;;26659:11;26609:8;:62::i;:::-;26714:15;;;;;;;;;;;:31;;;26753:9;26786:4;26806:11;26832:1;26875;26918:7;:5;:7::i;:::-;26940:15;26714:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;26461:513;;:::o;2137:278::-;2223:7;2255:1;2251;:5;2258:12;2243:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2282:9;2298:1;2294;:5;;;;:::i;:::-;2282:17;;2406:1;2399:8;;;2137:278;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:77;1713:7;1742:5;1731:16;;1676:77;;;:::o;1759:122::-;1832:24;1850:5;1832:24;:::i;:::-;1825:5;1822:35;1812:63;;1871:1;1868;1861:12;1812:63;1759:122;:::o;1887:139::-;1933:5;1971:6;1958:20;1949:29;;1987:33;2014:5;1987:33;:::i;:::-;1887:139;;;;:::o;2032:619::-;2109:6;2117;2125;2174:2;2162:9;2153:7;2149:23;2145:32;2142:119;;;2180:79;;:::i;:::-;2142:119;2300:1;2325:53;2370:7;2361:6;2350:9;2346:22;2325:53;:::i;:::-;2315:63;;2271:117;2427:2;2453:53;2498:7;2489:6;2478:9;2474:22;2453:53;:::i;:::-;2443:63;;2398:118;2555:2;2581:53;2626:7;2617:6;2606:9;2602:22;2581:53;:::i;:::-;2571:63;;2526:118;2032:619;;;;;:::o;2657:126::-;2694:7;2734:42;2727:5;2723:54;2712:65;;2657:126;;;:::o;2789:96::-;2826:7;2855:24;2873:5;2855:24;:::i;:::-;2844:35;;2789:96;;;:::o;2891:122::-;2964:24;2982:5;2964:24;:::i;:::-;2957:5;2954:35;2944:63;;3003:1;3000;2993:12;2944:63;2891:122;:::o;3019:139::-;3065:5;3103:6;3090:20;3081:29;;3119:33;3146:5;3119:33;:::i;:::-;3019:139;;;;:::o;3164:474::-;3232:6;3240;3289:2;3277:9;3268:7;3264:23;3260:32;3257:119;;;3295:79;;:::i;:::-;3257:119;3415:1;3440:53;3485:7;3476:6;3465:9;3461:22;3440:53;:::i;:::-;3430:63;;3386:117;3542:2;3568:53;3613:7;3604:6;3593:9;3589:22;3568:53;:::i;:::-;3558:63;;3513:118;3164:474;;;;;:::o;3644:90::-;3678:7;3721:5;3714:13;3707:21;3696:32;;3644:90;;;:::o;3740:109::-;3821:21;3836:5;3821:21;:::i;:::-;3816:3;3809:34;3740:109;;:::o;3855:210::-;3942:4;3980:2;3969:9;3965:18;3957:26;;3993:65;4055:1;4044:9;4040:17;4031:6;3993:65;:::i;:::-;3855:210;;;;:::o;4071:329::-;4130:6;4179:2;4167:9;4158:7;4154:23;4150:32;4147:119;;;4185:79;;:::i;:::-;4147:119;4305:1;4330:53;4375:7;4366:6;4355:9;4351:22;4330:53;:::i;:::-;4320:63;;4276:117;4071:329;;;;:::o;4406:104::-;4451:7;4480:24;4498:5;4480:24;:::i;:::-;4469:35;;4406:104;;;:::o;4516:142::-;4619:32;4645:5;4619:32;:::i;:::-;4614:3;4607:45;4516:142;;:::o;4664:254::-;4773:4;4811:2;4800:9;4796:18;4788:26;;4824:87;4908:1;4897:9;4893:17;4884:6;4824:87;:::i;:::-;4664:254;;;;:::o;4924:60::-;4952:3;4973:5;4966:12;;4924:60;;;:::o;4990:142::-;5040:9;5073:53;5091:34;5100:24;5118:5;5100:24;:::i;:::-;5091:34;:::i;:::-;5073:53;:::i;:::-;5060:66;;4990:142;;;:::o;5138:126::-;5188:9;5221:37;5252:5;5221:37;:::i;:::-;5208:50;;5138:126;;;:::o;5270:153::-;5347:9;5380:37;5411:5;5380:37;:::i;:::-;5367:50;;5270:153;;;:::o;5429:185::-;5543:64;5601:5;5543:64;:::i;:::-;5538:3;5531:77;5429:185;;:::o;5620:276::-;5740:4;5778:2;5767:9;5763:18;5755:26;;5791:98;5886:1;5875:9;5871:17;5862:6;5791:98;:::i;:::-;5620:276;;;;:::o;5902:118::-;5989:24;6007:5;5989:24;:::i;:::-;5984:3;5977:37;5902:118;;:::o;6026:222::-;6119:4;6157:2;6146:9;6142:18;6134:26;;6170:71;6238:1;6227:9;6223:17;6214:6;6170:71;:::i;:::-;6026:222;;;;:::o;6254:116::-;6324:21;6339:5;6324:21;:::i;:::-;6317:5;6314:32;6304:60;;6360:1;6357;6350:12;6304:60;6254:116;:::o;6376:133::-;6419:5;6457:6;6444:20;6435:29;;6473:30;6497:5;6473:30;:::i;:::-;6376:133;;;;:::o;6515:468::-;6580:6;6588;6637:2;6625:9;6616:7;6612:23;6608:32;6605:119;;;6643:79;;:::i;:::-;6605:119;6763:1;6788:53;6833:7;6824:6;6813:9;6809:22;6788:53;:::i;:::-;6778:63;;6734:117;6890:2;6916:50;6958:7;6949:6;6938:9;6934:22;6916:50;:::i;:::-;6906:60;;6861:115;6515:468;;;;;:::o;6989:619::-;7066:6;7074;7082;7131:2;7119:9;7110:7;7106:23;7102:32;7099:119;;;7137:79;;:::i;:::-;7099:119;7257:1;7282:53;7327:7;7318:6;7307:9;7303:22;7282:53;:::i;:::-;7272:63;;7228:117;7384:2;7410:53;7455:7;7446:6;7435:9;7431:22;7410:53;:::i;:::-;7400:63;;7355:118;7512:2;7538:53;7583:7;7574:6;7563:9;7559:22;7538:53;:::i;:::-;7528:63;;7483:118;6989:619;;;;;:::o;7614:118::-;7701:24;7719:5;7701:24;:::i;:::-;7696:3;7689:37;7614:118;;:::o;7738:222::-;7831:4;7869:2;7858:9;7854:18;7846:26;;7882:71;7950:1;7939:9;7935:17;7926:6;7882:71;:::i;:::-;7738:222;;;;:::o;7966:86::-;8001:7;8041:4;8034:5;8030:16;8019:27;;7966:86;;;:::o;8058:112::-;8141:22;8157:5;8141:22;:::i;:::-;8136:3;8129:35;8058:112;;:::o;8176:214::-;8265:4;8303:2;8292:9;8288:18;8280:26;;8316:67;8380:1;8369:9;8365:17;8356:6;8316:67;:::i;:::-;8176:214;;;;:::o;8396:329::-;8455:6;8504:2;8492:9;8483:7;8479:23;8475:32;8472:119;;;8510:79;;:::i;:::-;8472:119;8630:1;8655:53;8700:7;8691:6;8680:9;8676:22;8655:53;:::i;:::-;8645:63;;8601:117;8396:329;;;;:::o;8731:117::-;8840:1;8837;8830:12;8854:117;8963:1;8960;8953:12;8977:117;9086:1;9083;9076:12;9117:568;9190:8;9200:6;9250:3;9243:4;9235:6;9231:17;9227:27;9217:122;;9258:79;;:::i;:::-;9217:122;9371:6;9358:20;9348:30;;9401:18;9393:6;9390:30;9387:117;;;9423:79;;:::i;:::-;9387:117;9537:4;9529:6;9525:17;9513:29;;9591:3;9583:4;9575:6;9571:17;9561:8;9557:32;9554:41;9551:128;;;9598:79;;:::i;:::-;9551:128;9117:568;;;;;:::o;9691:559::-;9777:6;9785;9834:2;9822:9;9813:7;9809:23;9805:32;9802:119;;;9840:79;;:::i;:::-;9802:119;9988:1;9977:9;9973:17;9960:31;10018:18;10010:6;10007:30;10004:117;;;10040:79;;:::i;:::-;10004:117;10153:80;10225:7;10216:6;10205:9;10201:22;10153:80;:::i;:::-;10135:98;;;;9931:312;9691:559;;;;;:::o;10256:323::-;10312:6;10361:2;10349:9;10340:7;10336:23;10332:32;10329:119;;;10367:79;;:::i;:::-;10329:119;10487:1;10512:50;10554:7;10545:6;10534:9;10530:22;10512:50;:::i;:::-;10502:60;;10458:114;10256:323;;;;:::o;10585:474::-;10653:6;10661;10710:2;10698:9;10689:7;10685:23;10681:32;10678:119;;;10716:79;;:::i;:::-;10678:119;10836:1;10861:53;10906:7;10897:6;10886:9;10882:22;10861:53;:::i;:::-;10851:63;;10807:117;10963:2;10989:53;11034:7;11025:6;11014:9;11010:22;10989:53;:::i;:::-;10979:63;;10934:118;10585:474;;;;;:::o;11065:180::-;11113:77;11110:1;11103:88;11210:4;11207:1;11200:15;11234:4;11231:1;11224:15;11251:320;11295:6;11332:1;11326:4;11322:12;11312:22;;11379:1;11373:4;11369:12;11400:18;11390:81;;11456:4;11448:6;11444:17;11434:27;;11390:81;11518:2;11510:6;11507:14;11487:18;11484:38;11481:84;;11537:18;;:::i;:::-;11481:84;11302:269;11251:320;;;:::o;11577:182::-;11717:34;11713:1;11705:6;11701:14;11694:58;11577:182;:::o;11765:366::-;11907:3;11928:67;11992:2;11987:3;11928:67;:::i;:::-;11921:74;;12004:93;12093:3;12004:93;:::i;:::-;12122:2;12117:3;12113:12;12106:19;;11765:366;;;:::o;12137:419::-;12303:4;12341:2;12330:9;12326:18;12318:26;;12390:9;12384:4;12380:20;12376:1;12365:9;12361:17;12354:47;12418:131;12544:4;12418:131;:::i;:::-;12410:139;;12137:419;;;:::o;12562:180::-;12610:77;12607:1;12600:88;12707:4;12704:1;12697:15;12731:4;12728:1;12721:15;12748:180;12796:77;12793:1;12786:88;12893:4;12890:1;12883:15;12917:4;12914:1;12907:15;12934:233;12973:3;12996:24;13014:5;12996:24;:::i;:::-;12987:33;;13042:66;13035:5;13032:77;13029:103;;13112:18;;:::i;:::-;13029:103;13159:1;13152:5;13148:13;13141:20;;12934:233;;;:::o;13173:191::-;13213:3;13232:20;13250:1;13232:20;:::i;:::-;13227:25;;13266:20;13284:1;13266:20;:::i;:::-;13261:25;;13309:1;13306;13302:9;13295:16;;13330:3;13327:1;13324:10;13321:36;;;13337:18;;:::i;:::-;13321:36;13173:191;;;;:::o;13370:177::-;13510:29;13506:1;13498:6;13494:14;13487:53;13370:177;:::o;13553:366::-;13695:3;13716:67;13780:2;13775:3;13716:67;:::i;:::-;13709:74;;13792:93;13881:3;13792:93;:::i;:::-;13910:2;13905:3;13901:12;13894:19;;13553:366;;;:::o;13925:419::-;14091:4;14129:2;14118:9;14114:18;14106:26;;14178:9;14172:4;14168:20;14164:1;14153:9;14149:17;14142:47;14206:131;14332:4;14206:131;:::i;:::-;14198:139;;13925:419;;;:::o;14350:223::-;14490:34;14486:1;14478:6;14474:14;14467:58;14559:6;14554:2;14546:6;14542:15;14535:31;14350:223;:::o;14579:366::-;14721:3;14742:67;14806:2;14801:3;14742:67;:::i;:::-;14735:74;;14818:93;14907:3;14818:93;:::i;:::-;14936:2;14931:3;14927:12;14920:19;;14579:366;;;:::o;14951:419::-;15117:4;15155:2;15144:9;15140:18;15132:26;;15204:9;15198:4;15194:20;15190:1;15179:9;15175:17;15168:47;15232:131;15358:4;15232:131;:::i;:::-;15224:139;;14951:419;;;:::o;15376:221::-;15516:34;15512:1;15504:6;15500:14;15493:58;15585:4;15580:2;15572:6;15568:15;15561:29;15376:221;:::o;15603:366::-;15745:3;15766:67;15830:2;15825:3;15766:67;:::i;:::-;15759:74;;15842:93;15931:3;15842:93;:::i;:::-;15960:2;15955:3;15951:12;15944:19;;15603:366;;;:::o;15975:419::-;16141:4;16179:2;16168:9;16164:18;16156:26;;16228:9;16222:4;16218:20;16214:1;16203:9;16199:17;16192:47;16256:131;16382:4;16256:131;:::i;:::-;16248:139;;15975:419;;;:::o;16400:224::-;16540:34;16536:1;16528:6;16524:14;16517:58;16609:7;16604:2;16596:6;16592:15;16585:32;16400:224;:::o;16630:366::-;16772:3;16793:67;16857:2;16852:3;16793:67;:::i;:::-;16786:74;;16869:93;16958:3;16869:93;:::i;:::-;16987:2;16982:3;16978:12;16971:19;;16630:366;;;:::o;17002:419::-;17168:4;17206:2;17195:9;17191:18;17183:26;;17255:9;17249:4;17245:20;17241:1;17230:9;17226:17;17219:47;17283:131;17409:4;17283:131;:::i;:::-;17275:139;;17002:419;;;:::o;17427:222::-;17567:34;17563:1;17555:6;17551:14;17544:58;17636:5;17631:2;17623:6;17619:15;17612:30;17427:222;:::o;17655:366::-;17797:3;17818:67;17882:2;17877:3;17818:67;:::i;:::-;17811:74;;17894:93;17983:3;17894:93;:::i;:::-;18012:2;18007:3;18003:12;17996:19;;17655:366;;;:::o;18027:419::-;18193:4;18231:2;18220:9;18216:18;18208:26;;18280:9;18274:4;18270:20;18266:1;18255:9;18251:17;18244:47;18308:131;18434:4;18308:131;:::i;:::-;18300:139;;18027:419;;;:::o;18452:235::-;18592:34;18588:1;18580:6;18576:14;18569:58;18661:18;18656:2;18648:6;18644:15;18637:43;18452:235;:::o;18693:366::-;18835:3;18856:67;18920:2;18915:3;18856:67;:::i;:::-;18849:74;;18932:93;19021:3;18932:93;:::i;:::-;19050:2;19045:3;19041:12;19034:19;;18693:366;;;:::o;19065:419::-;19231:4;19269:2;19258:9;19254:18;19246:26;;19318:9;19312:4;19308:20;19304:1;19293:9;19289:17;19282:47;19346:131;19472:4;19346:131;:::i;:::-;19338:139;;19065:419;;;:::o;19490:227::-;19630:34;19626:1;19618:6;19614:14;19607:58;19699:10;19694:2;19686:6;19682:15;19675:35;19490:227;:::o;19723:366::-;19865:3;19886:67;19950:2;19945:3;19886:67;:::i;:::-;19879:74;;19962:93;20051:3;19962:93;:::i;:::-;20080:2;20075:3;20071:12;20064:19;;19723:366;;;:::o;20095:419::-;20261:4;20299:2;20288:9;20284:18;20276:26;;20348:9;20342:4;20338:20;20334:1;20323:9;20319:17;20312:47;20376:131;20502:4;20376:131;:::i;:::-;20368:139;;20095:419;;;:::o;20520:194::-;20560:4;20580:20;20598:1;20580:20;:::i;:::-;20575:25;;20614:20;20632:1;20614:20;:::i;:::-;20609:25;;20658:1;20655;20651:9;20643:17;;20682:1;20676:4;20673:11;20670:37;;;20687:18;;:::i;:::-;20670:37;20520:194;;;;:::o;20720:410::-;20760:7;20783:20;20801:1;20783:20;:::i;:::-;20778:25;;20817:20;20835:1;20817:20;:::i;:::-;20812:25;;20872:1;20869;20865:9;20894:30;20912:11;20894:30;:::i;:::-;20883:41;;21073:1;21064:7;21060:15;21057:1;21054:22;21034:1;21027:9;21007:83;20984:139;;21103:18;;:::i;:::-;20984:139;20768:362;20720:410;;;;:::o;21136:180::-;21184:77;21181:1;21174:88;21281:4;21278:1;21271:15;21305:4;21302:1;21295:15;21322:185;21362:1;21379:20;21397:1;21379:20;:::i;:::-;21374:25;;21413:20;21431:1;21413:20;:::i;:::-;21408:25;;21452:1;21442:35;;21457:18;;:::i;:::-;21442:35;21499:1;21496;21492:9;21487:14;;21322:185;;;;:::o;21513:220::-;21653:34;21649:1;21641:6;21637:14;21630:58;21722:3;21717:2;21709:6;21705:15;21698:28;21513:220;:::o;21739:366::-;21881:3;21902:67;21966:2;21961:3;21902:67;:::i;:::-;21895:74;;21978:93;22067:3;21978:93;:::i;:::-;22096:2;22091:3;22087:12;22080:19;;21739:366;;;:::o;22111:419::-;22277:4;22315:2;22304:9;22300:18;22292:26;;22364:9;22358:4;22354:20;22350:1;22339:9;22335:17;22328:47;22392:131;22518:4;22392:131;:::i;:::-;22384:139;;22111:419;;;:::o;22536:180::-;22584:77;22581:1;22574:88;22681:4;22678:1;22671:15;22705:4;22702:1;22695:15;22722:143;22779:5;22810:6;22804:13;22795:22;;22826:33;22853:5;22826:33;:::i;:::-;22722:143;;;;:::o;22871:351::-;22941:6;22990:2;22978:9;22969:7;22965:23;22961:32;22958:119;;;22996:79;;:::i;:::-;22958:119;23116:1;23141:64;23197:7;23188:6;23177:9;23173:22;23141:64;:::i;:::-;23131:74;;23087:128;22871:351;;;;:::o;23228:85::-;23273:7;23302:5;23291:16;;23228:85;;;:::o;23319:158::-;23377:9;23410:61;23428:42;23437:32;23463:5;23437:32;:::i;:::-;23428:42;:::i;:::-;23410:61;:::i;:::-;23397:74;;23319:158;;;:::o;23483:147::-;23578:45;23617:5;23578:45;:::i;:::-;23573:3;23566:58;23483:147;;:::o;23636:114::-;23703:6;23737:5;23731:12;23721:22;;23636:114;;;:::o;23756:184::-;23855:11;23889:6;23884:3;23877:19;23929:4;23924:3;23920:14;23905:29;;23756:184;;;;:::o;23946:132::-;24013:4;24036:3;24028:11;;24066:4;24061:3;24057:14;24049:22;;23946:132;;;:::o;24084:108::-;24161:24;24179:5;24161:24;:::i;:::-;24156:3;24149:37;24084:108;;:::o;24198:179::-;24267:10;24288:46;24330:3;24322:6;24288:46;:::i;:::-;24366:4;24361:3;24357:14;24343:28;;24198:179;;;;:::o;24383:113::-;24453:4;24485;24480:3;24476:14;24468:22;;24383:113;;;:::o;24532:732::-;24651:3;24680:54;24728:5;24680:54;:::i;:::-;24750:86;24829:6;24824:3;24750:86;:::i;:::-;24743:93;;24860:56;24910:5;24860:56;:::i;:::-;24939:7;24970:1;24955:284;24980:6;24977:1;24974:13;24955:284;;;25056:6;25050:13;25083:63;25142:3;25127:13;25083:63;:::i;:::-;25076:70;;25169:60;25222:6;25169:60;:::i;:::-;25159:70;;25015:224;25002:1;24999;24995:9;24990:14;;24955:284;;;24959:14;25255:3;25248:10;;24656:608;;;24532:732;;;;:::o;25270:831::-;25533:4;25571:3;25560:9;25556:19;25548:27;;25585:71;25653:1;25642:9;25638:17;25629:6;25585:71;:::i;:::-;25666:80;25742:2;25731:9;25727:18;25718:6;25666:80;:::i;:::-;25793:9;25787:4;25783:20;25778:2;25767:9;25763:18;25756:48;25821:108;25924:4;25915:6;25821:108;:::i;:::-;25813:116;;25939:72;26007:2;25996:9;25992:18;25983:6;25939:72;:::i;:::-;26021:73;26089:3;26078:9;26074:19;26065:6;26021:73;:::i;:::-;25270:831;;;;;;;;:::o;26107:483::-;26278:4;26316:2;26305:9;26301:18;26293:26;;26329:71;26397:1;26386:9;26382:17;26373:6;26329:71;:::i;:::-;26447:9;26441:4;26437:20;26432:2;26421:9;26417:18;26410:48;26475:108;26578:4;26569:6;26475:108;:::i;:::-;26467:116;;26107:483;;;;;:::o;26596:807::-;26845:4;26883:3;26872:9;26868:19;26860:27;;26897:71;26965:1;26954:9;26950:17;26941:6;26897:71;:::i;:::-;26978:72;27046:2;27035:9;27031:18;27022:6;26978:72;:::i;:::-;27060:80;27136:2;27125:9;27121:18;27112:6;27060:80;:::i;:::-;27150;27226:2;27215:9;27211:18;27202:6;27150:80;:::i;:::-;27240:73;27308:3;27297:9;27293:19;27284:6;27240:73;:::i;:::-;27323;27391:3;27380:9;27376:19;27367:6;27323:73;:::i;:::-;26596:807;;;;;;;;;:::o;27409:143::-;27466:5;27497:6;27491:13;27482:22;;27513:33;27540:5;27513:33;:::i;:::-;27409:143;;;;:::o;27558:663::-;27646:6;27654;27662;27711:2;27699:9;27690:7;27686:23;27682:32;27679:119;;;27717:79;;:::i;:::-;27679:119;27837:1;27862:64;27918:7;27909:6;27898:9;27894:22;27862:64;:::i;:::-;27852:74;;27808:128;27975:2;28001:64;28057:7;28048:6;28037:9;28033:22;28001:64;:::i;:::-;27991:74;;27946:129;28114:2;28140:64;28196:7;28187:6;28176:9;28172:22;28140:64;:::i;:::-;28130:74;;28085:129;27558:663;;;;;:::o

Swarm Source

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