ETH Price: $2,435.66 (-2.13%)
Gas: 6.75 Gwei

Token

SMURFY COIN (SMURFY)
 

Overview

Max Total Supply

1,500,000,000 SMURFY

Holders

150

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.474655805941169351 SMURFY

Value
$0.00
0xe80fc29f7258f430ac5a58fb20cbf4dfbd55dda4
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:
SMURFY_COIN

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-07-03
*/

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

abstract contract Context {

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

    function _msgData() internal view virtual returns (bytes memory) {
        this; 
        return msg.data;
    }
}

interface IERC20 {

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

library SafeMath {

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

library Address {

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

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

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

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

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

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

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

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

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

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

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

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

    function owner() public view returns (address) {
        return _owner;
    }   
    
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    
    function waiveOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

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

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

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

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

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

contract SMURFY_COIN is Context, IERC20, Ownable {
    
    using SafeMath for uint256;
    using Address for address;
    
    string private _name = "SMURFY COIN";
    string private _symbol = "SMURFY";
    uint8 private _decimals = 18;

    address payable private marketingWalletAddress = payable(0xc041e7D68e5920d8751C949254a2ED8089bFFc07);
    address payable private DevelopmentWalletAddress = payable(0x05B31A4EF9BE31bf72871630C830C20E6196261D);
    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;
    
    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    
    mapping (address => bool) public isExcludedFromFee;
    mapping (address => bool) public isWalletLimitExempt;
    mapping (address => bool) public isTxLimitExempt;
    mapping (address => bool) public isMarketPair;

    uint256 public _buyLiquidityFee = 0;
    uint256 public _buyMarketingFee = 19;
    uint256 public _buyDevelopmentFee = 1;
    uint256 public _sellLiquidityFee = 0;
    uint256 public _sellMarketingFee = 19;
    uint256 public _sellDevelopmentFee = 1;

    uint256 public _liquidityShare = 0;
    uint256 public _marketingShare = 60;
    uint256 public _DevelopmentShare = 40;

    uint256 public _totalTaxIfBuying = 20;
    uint256 public _totalTaxIfSelling = 20;
    uint256 public _totalDistributionShares = 100;

    uint256 private _totalSupply = 1_500_000_000 * 10**_decimals;
    uint256 public _maxTxAmount = _totalSupply * 1 / 100; 
    uint256 public _walletMax = _totalSupply * 2 / 100;
    uint256 private minimumTokensBeforeSwap = _totalSupply * 1 / 10000; 

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

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );
    
    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); 

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

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

        isExcludedFromFee[owner()] = true;
        isExcludedFromFee[address(this)] = true;
        
        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(_buyDevelopmentFee);
        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellDevelopmentFee);
        _totalDistributionShares = _liquidityShare.add(_marketingShare).add(_DevelopmentShare);

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

        isMarketPair[address(uniswapPair)] = true;

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

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

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

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

    function totalSupply() public view override returns (uint256) {
        return _totalSupply;
    }

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

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

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

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

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

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

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

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

    function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner {
        isTxLimitExempt[holder] = exempt;
    }
    
    function setIsExcludedFromFee(address account, bool newValue) public onlyOwner {
        isExcludedFromFee[account] = newValue;
    }

    function setBuyTaxes(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newDevelopmentTax) external onlyOwner() {
        _buyLiquidityFee = newLiquidityTax;
        _buyMarketingFee = newMarketingTax;
        _buyDevelopmentFee = newDevelopmentTax;

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

    function setSellTaxes(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newDevelopmentTax) external onlyOwner() {
        _sellLiquidityFee = newLiquidityTax;
        _sellMarketingFee = newMarketingTax;
        _sellDevelopmentFee = newDevelopmentTax;

        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellDevelopmentFee);
    }
    
    function setDistributionSettings(uint256 newLiquidityShare, uint256 newMarketingShare, uint256 newDevelopmentShare) external onlyOwner() {
        _liquidityShare = newLiquidityShare;
        _marketingShare = newMarketingShare;
        _DevelopmentShare = newDevelopmentShare;

        _totalDistributionShares = _liquidityShare.add(_marketingShare).add(_DevelopmentShare);
    }
    
    function setMaxTxAmount(uint256 amountDiv1000) external onlyOwner() {
        _maxTxAmount = _totalSupply * amountDiv1000 / 1000;
    }

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

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

    function setWalletLimit(uint256 amountDiv1000) external onlyOwner {
        _walletMax  = _totalSupply * amountDiv1000 / 1000;
    }

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

    function setMarketingWalletAddress(address newAddress) external onlyOwner() {
        marketingWalletAddress = payable(newAddress);
    }

    function setDevelopmentWalletAddress(address newAddress) external onlyOwner() {
        DevelopmentWalletAddress = payable(newAddress);
    }

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

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

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

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(newRouterAddress); 

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

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

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

        isWalletLimitExempt[address(uniswapPair)] = true;
        isMarketPair[address(uniswapPair)] = true;
    }

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

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

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

    function _transfer(address sender, address recipient, uint256 amount) private returns (bool) {

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

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

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

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

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

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

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

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

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

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

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

        uint256 totalBNBFee = _totalDistributionShares.sub(_liquidityShare.div(2));
        
        uint256 amountBNBLiquidity = amountReceived.mul(_liquidityShare).div(totalBNBFee).div(2);
        uint256 amountBNBDevelopment = amountReceived.mul(_DevelopmentShare).div(totalBNBFee);
        uint256 amountBNBMarketing = amountReceived.sub(amountBNBLiquidity).sub(amountBNBDevelopment);

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

        if(amountBNBDevelopment > 0)
            transferToAddressETH(DevelopmentWalletAddress, amountBNBDevelopment);

        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
            DevelopmentWalletAddress,
            block.timestamp
        );
    }

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        
        uint256 feeAmount = 0;
        
        if(isMarketPair[sender]) {
            feeAmount = amount.mul(_totalTaxIfBuying).div(100);
        }
        else if(isMarketPair[recipient]) {
            feeAmount = amount.mul(_totalTaxIfSelling).div(100);
        }
        
        if(feeAmount > 0) {
            _balances[address(this)] = _balances[address(this)].add(feeAmount);
            emit Transfer(sender, address(this), feeAmount);
        }

        return amount.sub(feeAmount);
    }
    
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_DevelopmentShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"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":"_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":"_sellDevelopmentFee","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":"_totalDistributionShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfBuying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addMarketPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newRouterAddress","type":"address"}],"name":"changeRouterVersion","outputs":[{"internalType":"address","name":"newPairAddress","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"checkWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"enableDisableWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMarketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWalletLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newDevelopmentTax","type":"uint256"}],"name":"setBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setDevelopmentWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityShare","type":"uint256"},{"internalType":"uint256","name":"newMarketingShare","type":"uint256"},{"internalType":"uint256","name":"newDevelopmentShare","type":"uint256"}],"name":"setDistributionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setIsExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsWalletLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setMarketingWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountDiv1000","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setNumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newDevelopmentTax","type":"uint256"}],"name":"setSellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setSwapAndLiquifyByLimitOnly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountDiv1000","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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"waiveOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526040518060400160405280600b81526020017f534d5552465920434f494e000000000000000000000000000000000000000000815250600290816200004a919062000dc8565b506040518060400160405280600681526020017f534d5552465900000000000000000000000000000000000000000000000000008152506003908162000091919062000dc8565b506012600460006101000a81548160ff021916908360ff16021790555073c041e7d68e5920d8751c949254a2ed8089bffc07600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507305b31a4ef9be31bf72871630c830c20e6196261d600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152506000600c556013600d556001600e556000600f55601360105560016011556000601255603c6013556028601455601460155560146016556064601755600460009054906101000a900460ff16600a620001e791906200103f565b6359682f00620001f8919062001090565b601855606460016018546200020e919062001090565b6200021a91906200110a565b6019556064600260185462000230919062001090565b6200023c91906200110a565b601a55612710600160185462000253919062001090565b6200025f91906200110a565b601b556001601d60156101000a81548160ff0219169083151502179055506000601d60166101000a81548160ff0219169083151502179055506001601d60176101000a81548160ff021916908315150217905550348015620002c057600080fd5b506000620002d362000aba60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003d6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003fc9190620011ac565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000464573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200048a9190620011ac565b6040518363ffffffff1660e01b8152600401620004a9929190620011ef565b6020604051808303816000875af1158015620004c9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004ef9190620011ac565b601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601854600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600860006200062b62000ac260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000703600e54620006f4600d54600c5462000aeb60201b90919060201c565b62000aeb60201b90919060201c565b6015819055506200073860115462000729601054600f5462000aeb60201b90919060201c565b62000aeb60201b90919060201c565b6016819055506200076d6014546200075e60135460125462000aeb60201b90919060201c565b62000aeb60201b90919060201c565b6017819055506001600960006200078962000ac260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000620008c262000ac260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060185460066000620009fc62000aba60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000a4a62000aba60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60185460405162000aab91906200122d565b60405180910390a35062001308565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080828462000afc91906200124a565b90508381101562000b44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b3b90620012e6565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000bd057607f821691505b60208210810362000be65762000be562000b88565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000c507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c11565b62000c5c868362000c11565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000ca962000ca362000c9d8462000c74565b62000c7e565b62000c74565b9050919050565b6000819050919050565b62000cc58362000c88565b62000cdd62000cd48262000cb0565b84845462000c1e565b825550505050565b600090565b62000cf462000ce5565b62000d0181848462000cba565b505050565b5b8181101562000d295762000d1d60008262000cea565b60018101905062000d07565b5050565b601f82111562000d785762000d428162000bec565b62000d4d8462000c01565b8101602085101562000d5d578190505b62000d7562000d6c8562000c01565b83018262000d06565b50505b505050565b600082821c905092915050565b600062000d9d6000198460080262000d7d565b1980831691505092915050565b600062000db8838362000d8a565b9150826002028217905092915050565b62000dd38262000b4e565b67ffffffffffffffff81111562000def5762000dee62000b59565b5b62000dfb825462000bb7565b62000e0882828562000d2d565b600060209050601f83116001811462000e40576000841562000e2b578287015190505b62000e37858262000daa565b86555062000ea7565b601f19841662000e508662000bec565b60005b8281101562000e7a5784890151825560018201915060208501945060208101905062000e53565b8683101562000e9a578489015162000e96601f89168262000d8a565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000f3d5780860481111562000f155762000f1462000eaf565b5b600185161562000f255780820291505b808102905062000f358562000ede565b945062000ef5565b94509492505050565b60008262000f5857600190506200102b565b8162000f6857600090506200102b565b816001811462000f81576002811462000f8c5762000fc2565b60019150506200102b565b60ff84111562000fa15762000fa062000eaf565b5b8360020a91508482111562000fbb5762000fba62000eaf565b5b506200102b565b5060208310610133831016604e8410600b841016171562000ffc5782820a90508381111562000ff65762000ff562000eaf565b5b6200102b565b6200100b848484600162000eeb565b9250905081840481111562001025576200102462000eaf565b5b81810290505b9392505050565b600060ff82169050919050565b60006200104c8262000c74565b9150620010598362001032565b9250620010887fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000f46565b905092915050565b60006200109d8262000c74565b9150620010aa8362000c74565b9250828202620010ba8162000c74565b91508282048414831517620010d457620010d362000eaf565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620011178262000c74565b9150620011248362000c74565b925082620011375762001136620010db565b5b828204905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620011748262001147565b9050919050565b620011868162001167565b81146200119257600080fd5b50565b600081519050620011a6816200117b565b92915050565b600060208284031215620011c557620011c462001142565b5b6000620011d58482850162001195565b91505092915050565b620011e98162001167565b82525050565b6000604082019050620012066000830185620011de565b620012156020830184620011de565b9392505050565b620012278162000c74565b82525050565b60006020820190506200124460008301846200121c565b92915050565b6000620012578262000c74565b9150620012648362000c74565b92508282019050808211156200127f576200127e62000eaf565b5b92915050565b600082825260208201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000620012ce601b8362001285565b9150620012db8262001296565b602082019050919050565b600060208201905081810360008301526200130181620012bf565b9050919050565b608051614abe6200132b6000396000818161125f015261128b0152614abe6000f3fe6080604052600436106103545760003560e01c806382eefb43116101c6578063c8607952116100f7578063ef422a1811610095578063f2fde38b1161006f578063f2fde38b14610c99578063f331c7b014610cc2578063f84ba65d14610ced578063f872858a14610d165761035b565b8063ef422a1814610c1c578063f0cd1dac14610c45578063f1d5f51714610c705761035b565b8063dc44b6a0116100d1578063dc44b6a014610b62578063dd62ed3e14610b8d578063e207a92b14610bca578063ec28438a14610bf35761035b565b8063c860795214610acf578063c867d60b14610afa578063da00097d14610b375761035b565b8063a457c2d711610164578063c2d4640e1161013e578063c2d4640e14610a27578063c49b9a8014610a50578063c5d2418914610a79578063c816841b14610aa45761035b565b8063a457c2d714610984578063a5d69d1f146109c1578063a9059cbb146109ea5761035b565b80638da5cb5b116101a05780638da5cb5b146108ec578063914eb66a1461091757806395d89b411461092e578063a08e671f146109595761035b565b806382eefb431461085957806388790a68146108845780638b42507f146108af5761035b565b806339509351116102a057806357a5802f1161023e57806370a082311161021857806370a082311461079d5780637d1db4a5146107da5780637d7846ff14610805578063807c2d9c1461082e5761035b565b806357a5802f1461070a5780635881f3ef1461073557806361a23c69146107725761035b565b80634a74bb021161027a5780634a74bb021461064e5780634cb80fd5146106795780635342acb4146106a2578063554abc33146106df5761035b565b806339509351146105ab5780633b97084a146105e85780633ecad271146106115761035b565b80632198cf6c1161030d57806327c8f835116102e757806327c8f835146104ff5780632b112e491461052a578063313ce5671461055557806337249b65146105805761035b565b80632198cf6c1461047057806323b872dd146104995780632563ae83146104d65761035b565b806306fdde0314610360578063087332141461038b578063095ea7b3146103b45780631694505e146103f157806318160ddd1461041c5780631870517a146104475761035b565b3661035b57005b600080fd5b34801561036c57600080fd5b50610375610d41565b6040516103829190613c87565b60405180910390f35b34801561039757600080fd5b506103b260048036038101906103ad9190613ce4565b610dd3565b005b3480156103c057600080fd5b506103db60048036038101906103d69190613d95565b610eb3565b6040516103e89190613df0565b60405180910390f35b3480156103fd57600080fd5b50610406610ed1565b6040516104139190613e6a565b60405180910390f35b34801561042857600080fd5b50610431610ef7565b60405161043e9190613e94565b60405180910390f35b34801561045357600080fd5b5061046e60048036038101906104699190613ce4565b610f01565b005b34801561047c57600080fd5b5061049760048036038101906104929190613edb565b610fe1565b005b3480156104a557600080fd5b506104c060048036038101906104bb9190613f1b565b6110d1565b6040516104cd9190613df0565b60405180910390f35b3480156104e257600080fd5b506104fd60048036038101906104f89190613f6e565b6111ab565b005b34801561050b57600080fd5b5061051461125d565b6040516105219190613faa565b60405180910390f35b34801561053657600080fd5b5061053f611281565b60405161054c9190613e94565b60405180910390f35b34801561056157600080fd5b5061056a6112c5565b6040516105779190613fe1565b60405180910390f35b34801561058c57600080fd5b506105956112dc565b6040516105a29190613e94565b60405180910390f35b3480156105b757600080fd5b506105d260048036038101906105cd9190613d95565b6112e2565b6040516105df9190613df0565b60405180910390f35b3480156105f457600080fd5b5061060f600480360381019061060a9190613ffc565b611395565b005b34801561061d57600080fd5b5061063860048036038101906106339190614029565b611434565b6040516106459190613df0565b60405180910390f35b34801561065a57600080fd5b50610663611454565b6040516106709190613df0565b60405180910390f35b34801561068557600080fd5b506106a0600480360381019061069b9190614029565b611467565b005b3480156106ae57600080fd5b506106c960048036038101906106c49190614029565b611540565b6040516106d69190613df0565b60405180910390f35b3480156106eb57600080fd5b506106f4611560565b6040516107019190613e94565b60405180910390f35b34801561071657600080fd5b5061071f611566565b60405161072c9190613e94565b60405180910390f35b34801561074157600080fd5b5061075c60048036038101906107579190614029565b61156c565b6040516107699190613faa565b60405180910390f35b34801561077e57600080fd5b50610787611a6f565b6040516107949190613e94565b60405180910390f35b3480156107a957600080fd5b506107c460048036038101906107bf9190614029565b611a75565b6040516107d19190613e94565b60405180910390f35b3480156107e657600080fd5b506107ef611abe565b6040516107fc9190613e94565b60405180910390f35b34801561081157600080fd5b5061082c60048036038101906108279190614029565b611ac4565b005b34801561083a57600080fd5b50610843611b9d565b6040516108509190613e94565b60405180910390f35b34801561086557600080fd5b5061086e611ba3565b60405161087b9190613e94565b60405180910390f35b34801561089057600080fd5b50610899611ba9565b6040516108a69190613e94565b60405180910390f35b3480156108bb57600080fd5b506108d660048036038101906108d19190614029565b611baf565b6040516108e39190613df0565b60405180910390f35b3480156108f857600080fd5b50610901611bcf565b60405161090e9190613faa565b60405180910390f35b34801561092357600080fd5b5061092c611bf8565b005b34801561093a57600080fd5b50610943611d4b565b6040516109509190613c87565b60405180910390f35b34801561096557600080fd5b5061096e611ddd565b60405161097b9190613e94565b60405180910390f35b34801561099057600080fd5b506109ab60048036038101906109a69190613d95565b611de3565b6040516109b89190613df0565b60405180910390f35b3480156109cd57600080fd5b506109e860048036038101906109e39190613f6e565b611eb0565b005b3480156109f657600080fd5b50610a116004803603810190610a0c9190613d95565b611f62565b604051610a1e9190613df0565b60405180910390f35b348015610a3357600080fd5b50610a4e6004803603810190610a499190613ce4565b611f81565b005b348015610a5c57600080fd5b50610a776004803603810190610a729190613f6e565b612061565b005b348015610a8557600080fd5b50610a8e61214a565b604051610a9b9190613e94565b60405180910390f35b348015610ab057600080fd5b50610ab9612150565b604051610ac69190613faa565b60405180910390f35b348015610adb57600080fd5b50610ae4612176565b604051610af19190613e94565b60405180910390f35b348015610b0657600080fd5b50610b216004803603810190610b1c9190614029565b61217c565b604051610b2e9190613df0565b60405180910390f35b348015610b4357600080fd5b50610b4c61219c565b604051610b599190613df0565b60405180910390f35b348015610b6e57600080fd5b50610b776121af565b604051610b849190613e94565b60405180910390f35b348015610b9957600080fd5b50610bb46004803603810190610baf9190614056565b6121b5565b604051610bc19190613e94565b60405180910390f35b348015610bd657600080fd5b50610bf16004803603810190610bec9190614029565b61223c565b005b348015610bff57600080fd5b50610c1a6004803603810190610c159190613ffc565b61232c565b005b348015610c2857600080fd5b50610c436004803603810190610c3e9190613edb565b6123e5565b005b348015610c5157600080fd5b50610c5a6124d5565b604051610c679190613e94565b60405180910390f35b348015610c7c57600080fd5b50610c976004803603810190610c929190613ffc565b6124db565b005b348015610ca557600080fd5b50610cc06004803603810190610cbb9190614029565b612594565b005b348015610cce57600080fd5b50610cd7612755565b604051610ce49190613e94565b60405180910390f35b348015610cf957600080fd5b50610d146004803603810190610d0f9190613edb565b61275b565b005b348015610d2257600080fd5b50610d2b61284b565b604051610d389190613df0565b60405180910390f35b606060028054610d50906140c5565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7c906140c5565b8015610dc95780601f10610d9e57610100808354040283529160200191610dc9565b820191906000526020600020905b815481529060010190602001808311610dac57829003601f168201915b5050505050905090565b610ddb61285e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5f90614142565b60405180910390fd5b82600f819055508160108190555080601181905550610ea8601154610e9a601054600f5461286690919063ffffffff16565b61286690919063ffffffff16565b601681905550505050565b6000610ec7610ec061285e565b84846128c4565b6001905092915050565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601854905090565b610f0961285e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8d90614142565b60405180910390fd5b82600c8190555081600d8190555080600e81905550610fd6600e54610fc8600d54600c5461286690919063ffffffff16565b61286690919063ffffffff16565b601581905550505050565b610fe961285e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106d90614142565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006110de848484612a8d565b506111a0846110eb61285e565b61119b85604051806060016040528060288152602001614a3c60289139600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061115161285e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130709092919063ffffffff16565b6128c4565b600190509392505050565b6111b361285e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611240576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123790614142565b60405180910390fd5b80601d60176101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006112c06112af7f0000000000000000000000000000000000000000000000000000000000000000611a75565b6018546130d490919063ffffffff16565b905090565b6000600460009054906101000a900460ff16905090565b60115481565b600061138b6112ef61285e565b84611386856007600061130061285e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461286690919063ffffffff16565b6128c4565b6001905092915050565b61139d61285e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461142a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142190614142565b60405180910390fd5b80601b8190555050565b600b6020528060005260406000206000915054906101000a900460ff1681565b601d60159054906101000a900460ff1681565b61146f61285e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f390614142565b60405180910390fd5b80600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60086020528060005260406000206000915054906101000a900460ff1681565b60145481565b60125481565b600061157661285e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611603576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fa90614142565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611653573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116779190614177565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117029190614177565b6040518363ffffffff1660e01b815260040161171f9291906141a4565b602060405180830381865afa15801561173c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117609190614177565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036118f3578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118059190614177565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561186c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118909190614177565b6040518363ffffffff1660e01b81526004016118ad9291906141a4565b6020604051808303816000875af11580156118cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118f09190614177565b91505b81601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160096000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050919050565b60135481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60195481565b611acc61285e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5090614142565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601a5481565b60165481565b600f5481565b600a6020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611c0061285e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8490614142565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b606060038054611d5a906140c5565b80601f0160208091040260200160405190810160405280929190818152602001828054611d86906140c5565b8015611dd35780601f10611da857610100808354040283529160200191611dd3565b820191906000526020600020905b815481529060010190602001808311611db657829003601f168201915b5050505050905090565b60175481565b6000611ea6611df061285e565b84611ea185604051806060016040528060258152602001614a646025913960076000611e1a61285e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130709092919063ffffffff16565b6128c4565b6001905092915050565b611eb861285e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3c90614142565b60405180910390fd5b80601d60166101000a81548160ff02191690831515021790555050565b6000611f76611f6f61285e565b8484612a8d565b506001905092915050565b611f8961285e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612016576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200d90614142565b60405180910390fd5b82601281905550816013819055508060148190555061205660145461204860135460125461286690919063ffffffff16565b61286690919063ffffffff16565b601781905550505050565b61206961285e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ed90614142565b60405180910390fd5b80601d60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161213f9190613df0565b60405180910390a150565b600d5481565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b60096020528060005260406000206000915054906101000a900460ff1681565b601d60169054906101000a900460ff1681565b600c5481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61224461285e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c890614142565b60405180910390fd5b6001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61233461285e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b890614142565b60405180910390fd5b6103e8816018546123d291906141fc565b6123dc919061426d565b60198190555050565b6123ed61285e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461247a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247190614142565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60155481565b6124e361285e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612570576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256790614142565b60405180910390fd5b6103e88160185461258191906141fc565b61258b919061426d565b601a8190555050565b61259c61285e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612629576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262090614142565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268f90614310565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e5481565b61276361285e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e790614142565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601d60179054906101000a900460ff1681565b600033905090565b60008082846128759190614330565b9050838110156128ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b1906143b0565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612933576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292a90614442565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612999906144d4565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612a809190613e94565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612afd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af490614566565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b63906145f8565b60405180910390fd5b601d60149054906101000a900460ff1615612b9357612b8c84848461311e565b9050613069565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612c375750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c8257601954821115612c81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c789061468a565b60405180910390fd5b5b6000612c8d30611a75565b90506000601b548210159050808015612cb35750601d60149054906101000a900460ff16155b8015612d095750600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d215750601d60159054906101000a900460ff165b15612d4b57601d60169054906101000a900460ff1615612d4157601b5491505b612d4a826132f1565b5b612dd4846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130709092919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612eba5750600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612ece57612ec98787876134e2565b612ed0565b845b9050601d60179054906101000a900460ff168015612f385750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f6757601a54612f5b82612f4d89611a75565b61286690919063ffffffff16565b1115612f6657600080fd5b5b612fb981600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461286690919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516130599190613e94565b60405180910390a3600193505050505b9392505050565b60008383111582906130b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130af9190613c87565b60405180910390fd5b50600083856130c791906146aa565b9050809150509392505050565b600061311683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613070565b905092915050565b60006131a9826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130709092919063ffffffff16565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061323e82600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461286690919063ffffffff16565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516132de9190613e94565b60405180910390a3600190509392505050565b6001601d60146101000a81548160ff021916908315150217905550600061334a600261333c60175461332e6012548761370990919063ffffffff16565b61378390919063ffffffff16565b61378390919063ffffffff16565b9050600061336182846130d490919063ffffffff16565b905061336c816137cd565b6000479050600061339d61338c600260125461378390919063ffffffff16565b6017546130d490919063ffffffff16565b905060006133db60026133cd846133bf6012548861370990919063ffffffff16565b61378390919063ffffffff16565b61378390919063ffffffff16565b90506000613406836133f86014548761370990919063ffffffff16565b61378390919063ffffffff16565b9050600061342f8261342185886130d490919063ffffffff16565b6130d490919063ffffffff16565b9050600081111561346757613466600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613a49565b5b600082111561349d5761349c600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613a49565b5b6000831180156134ad5750600087115b156134bd576134bc8784613a94565b5b505050505050506000601d60146101000a81548160ff02191690831515021790555050565b60008060009050600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561356a5761356360646135556015548661370990919063ffffffff16565b61378390919063ffffffff16565b90506135e8565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156135e7576135e460646135d66016548661370990919063ffffffff16565b61378390919063ffffffff16565b90505b5b60008111156136ec5761364381600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461286690919063ffffffff16565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516136e39190613e94565b60405180910390a35b6136ff81846130d490919063ffffffff16565b9150509392505050565b600080830361371b576000905061377d565b6000828461372991906141fc565b9050828482613738919061426d565b14613778576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161376f90614750565b60405180910390fd5b809150505b92915050565b60006137c583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613b94565b905092915050565b6000600267ffffffffffffffff8111156137ea576137e9614770565b5b6040519080825280602002602001820160405280156138185781602001602082028036833780820191505090505b50905030816000815181106138305761382f61479f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156138d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138fb9190614177565b8160018151811061390f5761390e61479f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061397630601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846128c4565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016139da9594939291906148c7565b600060405180830381600087803b1580156139f457600080fd5b505af1158015613a08573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051613a3d929190614921565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613a8f573d6000803e3d6000fd5b505050565b613ac130601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846128c4565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613b4a96959493929190614972565b60606040518083038185885af1158015613b68573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613b8d91906149e8565b5050505050565b60008083118290613bdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bd29190613c87565b60405180910390fd5b5060008385613bea919061426d565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613c31578082015181840152602081019050613c16565b60008484015250505050565b6000601f19601f8301169050919050565b6000613c5982613bf7565b613c638185613c02565b9350613c73818560208601613c13565b613c7c81613c3d565b840191505092915050565b60006020820190508181036000830152613ca18184613c4e565b905092915050565b600080fd5b6000819050919050565b613cc181613cae565b8114613ccc57600080fd5b50565b600081359050613cde81613cb8565b92915050565b600080600060608486031215613cfd57613cfc613ca9565b5b6000613d0b86828701613ccf565b9350506020613d1c86828701613ccf565b9250506040613d2d86828701613ccf565b9150509250925092565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613d6282613d37565b9050919050565b613d7281613d57565b8114613d7d57600080fd5b50565b600081359050613d8f81613d69565b92915050565b60008060408385031215613dac57613dab613ca9565b5b6000613dba85828601613d80565b9250506020613dcb85828601613ccf565b9150509250929050565b60008115159050919050565b613dea81613dd5565b82525050565b6000602082019050613e056000830184613de1565b92915050565b6000819050919050565b6000613e30613e2b613e2684613d37565b613e0b565b613d37565b9050919050565b6000613e4282613e15565b9050919050565b6000613e5482613e37565b9050919050565b613e6481613e49565b82525050565b6000602082019050613e7f6000830184613e5b565b92915050565b613e8e81613cae565b82525050565b6000602082019050613ea96000830184613e85565b92915050565b613eb881613dd5565b8114613ec357600080fd5b50565b600081359050613ed581613eaf565b92915050565b60008060408385031215613ef257613ef1613ca9565b5b6000613f0085828601613d80565b9250506020613f1185828601613ec6565b9150509250929050565b600080600060608486031215613f3457613f33613ca9565b5b6000613f4286828701613d80565b9350506020613f5386828701613d80565b9250506040613f6486828701613ccf565b9150509250925092565b600060208284031215613f8457613f83613ca9565b5b6000613f9284828501613ec6565b91505092915050565b613fa481613d57565b82525050565b6000602082019050613fbf6000830184613f9b565b92915050565b600060ff82169050919050565b613fdb81613fc5565b82525050565b6000602082019050613ff66000830184613fd2565b92915050565b60006020828403121561401257614011613ca9565b5b600061402084828501613ccf565b91505092915050565b60006020828403121561403f5761403e613ca9565b5b600061404d84828501613d80565b91505092915050565b6000806040838503121561406d5761406c613ca9565b5b600061407b85828601613d80565b925050602061408c85828601613d80565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806140dd57607f821691505b6020821081036140f0576140ef614096565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061412c602083613c02565b9150614137826140f6565b602082019050919050565b6000602082019050818103600083015261415b8161411f565b9050919050565b60008151905061417181613d69565b92915050565b60006020828403121561418d5761418c613ca9565b5b600061419b84828501614162565b91505092915050565b60006040820190506141b96000830185613f9b565b6141c66020830184613f9b565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061420782613cae565b915061421283613cae565b925082820261422081613cae565b91508282048414831517614237576142366141cd565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061427882613cae565b915061428383613cae565b9250826142935761429261423e565b5b828204905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006142fa602683613c02565b91506143058261429e565b604082019050919050565b60006020820190508181036000830152614329816142ed565b9050919050565b600061433b82613cae565b915061434683613cae565b925082820190508082111561435e5761435d6141cd565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061439a601b83613c02565b91506143a582614364565b602082019050919050565b600060208201905081810360008301526143c98161438d565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061442c602483613c02565b9150614437826143d0565b604082019050919050565b6000602082019050818103600083015261445b8161441f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006144be602283613c02565b91506144c982614462565b604082019050919050565b600060208201905081810360008301526144ed816144b1565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614550602583613c02565b915061455b826144f4565b604082019050919050565b6000602082019050818103600083015261457f81614543565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006145e2602383613c02565b91506145ed82614586565b604082019050919050565b60006020820190508181036000830152614611816145d5565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000614674602883613c02565b915061467f82614618565b604082019050919050565b600060208201905081810360008301526146a381614667565b9050919050565b60006146b582613cae565b91506146c083613cae565b92508282039050818111156146d8576146d76141cd565b5b92915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061473a602183613c02565b9150614745826146de565b604082019050919050565b600060208201905081810360008301526147698161472d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b60006147f36147ee6147e9846147ce565b613e0b565b613cae565b9050919050565b614803816147d8565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61483e81613d57565b82525050565b60006148508383614835565b60208301905092915050565b6000602082019050919050565b600061487482614809565b61487e8185614814565b935061488983614825565b8060005b838110156148ba5781516148a18882614844565b97506148ac8361485c565b92505060018101905061488d565b5085935050505092915050565b600060a0820190506148dc6000830188613e85565b6148e960208301876147fa565b81810360408301526148fb8186614869565b905061490a6060830185613f9b565b6149176080830184613e85565b9695505050505050565b60006040820190506149366000830185613e85565b81810360208301526149488184614869565b90509392505050565b600061495c82613e37565b9050919050565b61496c81614951565b82525050565b600060c0820190506149876000830189613f9b565b6149946020830188613e85565b6149a160408301876147fa565b6149ae60608301866147fa565b6149bb6080830185614963565b6149c860a0830184613e85565b979650505050505050565b6000815190506149e281613cb8565b92915050565b600080600060608486031215614a0157614a00613ca9565b5b6000614a0f868287016149d3565b9350506020614a20868287016149d3565b9250506040614a31868287016149d3565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122015b0d5f78c13d5fd8e4429d172a14d4087339ee010f4d121e8b1b36f36425f1564736f6c63430008130033

Deployed Bytecode

0x6080604052600436106103545760003560e01c806382eefb43116101c6578063c8607952116100f7578063ef422a1811610095578063f2fde38b1161006f578063f2fde38b14610c99578063f331c7b014610cc2578063f84ba65d14610ced578063f872858a14610d165761035b565b8063ef422a1814610c1c578063f0cd1dac14610c45578063f1d5f51714610c705761035b565b8063dc44b6a0116100d1578063dc44b6a014610b62578063dd62ed3e14610b8d578063e207a92b14610bca578063ec28438a14610bf35761035b565b8063c860795214610acf578063c867d60b14610afa578063da00097d14610b375761035b565b8063a457c2d711610164578063c2d4640e1161013e578063c2d4640e14610a27578063c49b9a8014610a50578063c5d2418914610a79578063c816841b14610aa45761035b565b8063a457c2d714610984578063a5d69d1f146109c1578063a9059cbb146109ea5761035b565b80638da5cb5b116101a05780638da5cb5b146108ec578063914eb66a1461091757806395d89b411461092e578063a08e671f146109595761035b565b806382eefb431461085957806388790a68146108845780638b42507f146108af5761035b565b806339509351116102a057806357a5802f1161023e57806370a082311161021857806370a082311461079d5780637d1db4a5146107da5780637d7846ff14610805578063807c2d9c1461082e5761035b565b806357a5802f1461070a5780635881f3ef1461073557806361a23c69146107725761035b565b80634a74bb021161027a5780634a74bb021461064e5780634cb80fd5146106795780635342acb4146106a2578063554abc33146106df5761035b565b806339509351146105ab5780633b97084a146105e85780633ecad271146106115761035b565b80632198cf6c1161030d57806327c8f835116102e757806327c8f835146104ff5780632b112e491461052a578063313ce5671461055557806337249b65146105805761035b565b80632198cf6c1461047057806323b872dd146104995780632563ae83146104d65761035b565b806306fdde0314610360578063087332141461038b578063095ea7b3146103b45780631694505e146103f157806318160ddd1461041c5780631870517a146104475761035b565b3661035b57005b600080fd5b34801561036c57600080fd5b50610375610d41565b6040516103829190613c87565b60405180910390f35b34801561039757600080fd5b506103b260048036038101906103ad9190613ce4565b610dd3565b005b3480156103c057600080fd5b506103db60048036038101906103d69190613d95565b610eb3565b6040516103e89190613df0565b60405180910390f35b3480156103fd57600080fd5b50610406610ed1565b6040516104139190613e6a565b60405180910390f35b34801561042857600080fd5b50610431610ef7565b60405161043e9190613e94565b60405180910390f35b34801561045357600080fd5b5061046e60048036038101906104699190613ce4565b610f01565b005b34801561047c57600080fd5b5061049760048036038101906104929190613edb565b610fe1565b005b3480156104a557600080fd5b506104c060048036038101906104bb9190613f1b565b6110d1565b6040516104cd9190613df0565b60405180910390f35b3480156104e257600080fd5b506104fd60048036038101906104f89190613f6e565b6111ab565b005b34801561050b57600080fd5b5061051461125d565b6040516105219190613faa565b60405180910390f35b34801561053657600080fd5b5061053f611281565b60405161054c9190613e94565b60405180910390f35b34801561056157600080fd5b5061056a6112c5565b6040516105779190613fe1565b60405180910390f35b34801561058c57600080fd5b506105956112dc565b6040516105a29190613e94565b60405180910390f35b3480156105b757600080fd5b506105d260048036038101906105cd9190613d95565b6112e2565b6040516105df9190613df0565b60405180910390f35b3480156105f457600080fd5b5061060f600480360381019061060a9190613ffc565b611395565b005b34801561061d57600080fd5b5061063860048036038101906106339190614029565b611434565b6040516106459190613df0565b60405180910390f35b34801561065a57600080fd5b50610663611454565b6040516106709190613df0565b60405180910390f35b34801561068557600080fd5b506106a0600480360381019061069b9190614029565b611467565b005b3480156106ae57600080fd5b506106c960048036038101906106c49190614029565b611540565b6040516106d69190613df0565b60405180910390f35b3480156106eb57600080fd5b506106f4611560565b6040516107019190613e94565b60405180910390f35b34801561071657600080fd5b5061071f611566565b60405161072c9190613e94565b60405180910390f35b34801561074157600080fd5b5061075c60048036038101906107579190614029565b61156c565b6040516107699190613faa565b60405180910390f35b34801561077e57600080fd5b50610787611a6f565b6040516107949190613e94565b60405180910390f35b3480156107a957600080fd5b506107c460048036038101906107bf9190614029565b611a75565b6040516107d19190613e94565b60405180910390f35b3480156107e657600080fd5b506107ef611abe565b6040516107fc9190613e94565b60405180910390f35b34801561081157600080fd5b5061082c60048036038101906108279190614029565b611ac4565b005b34801561083a57600080fd5b50610843611b9d565b6040516108509190613e94565b60405180910390f35b34801561086557600080fd5b5061086e611ba3565b60405161087b9190613e94565b60405180910390f35b34801561089057600080fd5b50610899611ba9565b6040516108a69190613e94565b60405180910390f35b3480156108bb57600080fd5b506108d660048036038101906108d19190614029565b611baf565b6040516108e39190613df0565b60405180910390f35b3480156108f857600080fd5b50610901611bcf565b60405161090e9190613faa565b60405180910390f35b34801561092357600080fd5b5061092c611bf8565b005b34801561093a57600080fd5b50610943611d4b565b6040516109509190613c87565b60405180910390f35b34801561096557600080fd5b5061096e611ddd565b60405161097b9190613e94565b60405180910390f35b34801561099057600080fd5b506109ab60048036038101906109a69190613d95565b611de3565b6040516109b89190613df0565b60405180910390f35b3480156109cd57600080fd5b506109e860048036038101906109e39190613f6e565b611eb0565b005b3480156109f657600080fd5b50610a116004803603810190610a0c9190613d95565b611f62565b604051610a1e9190613df0565b60405180910390f35b348015610a3357600080fd5b50610a4e6004803603810190610a499190613ce4565b611f81565b005b348015610a5c57600080fd5b50610a776004803603810190610a729190613f6e565b612061565b005b348015610a8557600080fd5b50610a8e61214a565b604051610a9b9190613e94565b60405180910390f35b348015610ab057600080fd5b50610ab9612150565b604051610ac69190613faa565b60405180910390f35b348015610adb57600080fd5b50610ae4612176565b604051610af19190613e94565b60405180910390f35b348015610b0657600080fd5b50610b216004803603810190610b1c9190614029565b61217c565b604051610b2e9190613df0565b60405180910390f35b348015610b4357600080fd5b50610b4c61219c565b604051610b599190613df0565b60405180910390f35b348015610b6e57600080fd5b50610b776121af565b604051610b849190613e94565b60405180910390f35b348015610b9957600080fd5b50610bb46004803603810190610baf9190614056565b6121b5565b604051610bc19190613e94565b60405180910390f35b348015610bd657600080fd5b50610bf16004803603810190610bec9190614029565b61223c565b005b348015610bff57600080fd5b50610c1a6004803603810190610c159190613ffc565b61232c565b005b348015610c2857600080fd5b50610c436004803603810190610c3e9190613edb565b6123e5565b005b348015610c5157600080fd5b50610c5a6124d5565b604051610c679190613e94565b60405180910390f35b348015610c7c57600080fd5b50610c976004803603810190610c929190613ffc565b6124db565b005b348015610ca557600080fd5b50610cc06004803603810190610cbb9190614029565b612594565b005b348015610cce57600080fd5b50610cd7612755565b604051610ce49190613e94565b60405180910390f35b348015610cf957600080fd5b50610d146004803603810190610d0f9190613edb565b61275b565b005b348015610d2257600080fd5b50610d2b61284b565b604051610d389190613df0565b60405180910390f35b606060028054610d50906140c5565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7c906140c5565b8015610dc95780601f10610d9e57610100808354040283529160200191610dc9565b820191906000526020600020905b815481529060010190602001808311610dac57829003601f168201915b5050505050905090565b610ddb61285e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5f90614142565b60405180910390fd5b82600f819055508160108190555080601181905550610ea8601154610e9a601054600f5461286690919063ffffffff16565b61286690919063ffffffff16565b601681905550505050565b6000610ec7610ec061285e565b84846128c4565b6001905092915050565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601854905090565b610f0961285e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8d90614142565b60405180910390fd5b82600c8190555081600d8190555080600e81905550610fd6600e54610fc8600d54600c5461286690919063ffffffff16565b61286690919063ffffffff16565b601581905550505050565b610fe961285e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106d90614142565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006110de848484612a8d565b506111a0846110eb61285e565b61119b85604051806060016040528060288152602001614a3c60289139600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061115161285e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130709092919063ffffffff16565b6128c4565b600190509392505050565b6111b361285e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611240576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123790614142565b60405180910390fd5b80601d60176101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b60006112c06112af7f000000000000000000000000000000000000000000000000000000000000dead611a75565b6018546130d490919063ffffffff16565b905090565b6000600460009054906101000a900460ff16905090565b60115481565b600061138b6112ef61285e565b84611386856007600061130061285e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461286690919063ffffffff16565b6128c4565b6001905092915050565b61139d61285e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461142a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142190614142565b60405180910390fd5b80601b8190555050565b600b6020528060005260406000206000915054906101000a900460ff1681565b601d60159054906101000a900460ff1681565b61146f61285e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f390614142565b60405180910390fd5b80600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60086020528060005260406000206000915054906101000a900460ff1681565b60145481565b60125481565b600061157661285e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611603576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fa90614142565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611653573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116779190614177565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117029190614177565b6040518363ffffffff1660e01b815260040161171f9291906141a4565b602060405180830381865afa15801561173c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117609190614177565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036118f3578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118059190614177565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561186c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118909190614177565b6040518363ffffffff1660e01b81526004016118ad9291906141a4565b6020604051808303816000875af11580156118cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118f09190614177565b91505b81601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160096000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050919050565b60135481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60195481565b611acc61285e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5090614142565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601a5481565b60165481565b600f5481565b600a6020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611c0061285e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8490614142565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b606060038054611d5a906140c5565b80601f0160208091040260200160405190810160405280929190818152602001828054611d86906140c5565b8015611dd35780601f10611da857610100808354040283529160200191611dd3565b820191906000526020600020905b815481529060010190602001808311611db657829003601f168201915b5050505050905090565b60175481565b6000611ea6611df061285e565b84611ea185604051806060016040528060258152602001614a646025913960076000611e1a61285e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130709092919063ffffffff16565b6128c4565b6001905092915050565b611eb861285e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3c90614142565b60405180910390fd5b80601d60166101000a81548160ff02191690831515021790555050565b6000611f76611f6f61285e565b8484612a8d565b506001905092915050565b611f8961285e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612016576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200d90614142565b60405180910390fd5b82601281905550816013819055508060148190555061205660145461204860135460125461286690919063ffffffff16565b61286690919063ffffffff16565b601781905550505050565b61206961285e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ed90614142565b60405180910390fd5b80601d60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161213f9190613df0565b60405180910390a150565b600d5481565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b60096020528060005260406000206000915054906101000a900460ff1681565b601d60169054906101000a900460ff1681565b600c5481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61224461285e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c890614142565b60405180910390fd5b6001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61233461285e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b890614142565b60405180910390fd5b6103e8816018546123d291906141fc565b6123dc919061426d565b60198190555050565b6123ed61285e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461247a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247190614142565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60155481565b6124e361285e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612570576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256790614142565b60405180910390fd5b6103e88160185461258191906141fc565b61258b919061426d565b601a8190555050565b61259c61285e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612629576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262090614142565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268f90614310565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e5481565b61276361285e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e790614142565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601d60179054906101000a900460ff1681565b600033905090565b60008082846128759190614330565b9050838110156128ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b1906143b0565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612933576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292a90614442565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612999906144d4565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612a809190613e94565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612afd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af490614566565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b63906145f8565b60405180910390fd5b601d60149054906101000a900460ff1615612b9357612b8c84848461311e565b9050613069565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612c375750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c8257601954821115612c81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c789061468a565b60405180910390fd5b5b6000612c8d30611a75565b90506000601b548210159050808015612cb35750601d60149054906101000a900460ff16155b8015612d095750600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d215750601d60159054906101000a900460ff165b15612d4b57601d60169054906101000a900460ff1615612d4157601b5491505b612d4a826132f1565b5b612dd4846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130709092919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612eba5750600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612ece57612ec98787876134e2565b612ed0565b845b9050601d60179054906101000a900460ff168015612f385750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f6757601a54612f5b82612f4d89611a75565b61286690919063ffffffff16565b1115612f6657600080fd5b5b612fb981600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461286690919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516130599190613e94565b60405180910390a3600193505050505b9392505050565b60008383111582906130b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130af9190613c87565b60405180910390fd5b50600083856130c791906146aa565b9050809150509392505050565b600061311683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613070565b905092915050565b60006131a9826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130709092919063ffffffff16565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061323e82600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461286690919063ffffffff16565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516132de9190613e94565b60405180910390a3600190509392505050565b6001601d60146101000a81548160ff021916908315150217905550600061334a600261333c60175461332e6012548761370990919063ffffffff16565b61378390919063ffffffff16565b61378390919063ffffffff16565b9050600061336182846130d490919063ffffffff16565b905061336c816137cd565b6000479050600061339d61338c600260125461378390919063ffffffff16565b6017546130d490919063ffffffff16565b905060006133db60026133cd846133bf6012548861370990919063ffffffff16565b61378390919063ffffffff16565b61378390919063ffffffff16565b90506000613406836133f86014548761370990919063ffffffff16565b61378390919063ffffffff16565b9050600061342f8261342185886130d490919063ffffffff16565b6130d490919063ffffffff16565b9050600081111561346757613466600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613a49565b5b600082111561349d5761349c600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613a49565b5b6000831180156134ad5750600087115b156134bd576134bc8784613a94565b5b505050505050506000601d60146101000a81548160ff02191690831515021790555050565b60008060009050600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561356a5761356360646135556015548661370990919063ffffffff16565b61378390919063ffffffff16565b90506135e8565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156135e7576135e460646135d66016548661370990919063ffffffff16565b61378390919063ffffffff16565b90505b5b60008111156136ec5761364381600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461286690919063ffffffff16565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516136e39190613e94565b60405180910390a35b6136ff81846130d490919063ffffffff16565b9150509392505050565b600080830361371b576000905061377d565b6000828461372991906141fc565b9050828482613738919061426d565b14613778576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161376f90614750565b60405180910390fd5b809150505b92915050565b60006137c583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613b94565b905092915050565b6000600267ffffffffffffffff8111156137ea576137e9614770565b5b6040519080825280602002602001820160405280156138185781602001602082028036833780820191505090505b50905030816000815181106138305761382f61479f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156138d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138fb9190614177565b8160018151811061390f5761390e61479f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061397630601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846128c4565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016139da9594939291906148c7565b600060405180830381600087803b1580156139f457600080fd5b505af1158015613a08573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051613a3d929190614921565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613a8f573d6000803e3d6000fd5b505050565b613ac130601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846128c4565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613b4a96959493929190614972565b60606040518083038185885af1158015613b68573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613b8d91906149e8565b5050505050565b60008083118290613bdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bd29190613c87565b60405180910390fd5b5060008385613bea919061426d565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613c31578082015181840152602081019050613c16565b60008484015250505050565b6000601f19601f8301169050919050565b6000613c5982613bf7565b613c638185613c02565b9350613c73818560208601613c13565b613c7c81613c3d565b840191505092915050565b60006020820190508181036000830152613ca18184613c4e565b905092915050565b600080fd5b6000819050919050565b613cc181613cae565b8114613ccc57600080fd5b50565b600081359050613cde81613cb8565b92915050565b600080600060608486031215613cfd57613cfc613ca9565b5b6000613d0b86828701613ccf565b9350506020613d1c86828701613ccf565b9250506040613d2d86828701613ccf565b9150509250925092565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613d6282613d37565b9050919050565b613d7281613d57565b8114613d7d57600080fd5b50565b600081359050613d8f81613d69565b92915050565b60008060408385031215613dac57613dab613ca9565b5b6000613dba85828601613d80565b9250506020613dcb85828601613ccf565b9150509250929050565b60008115159050919050565b613dea81613dd5565b82525050565b6000602082019050613e056000830184613de1565b92915050565b6000819050919050565b6000613e30613e2b613e2684613d37565b613e0b565b613d37565b9050919050565b6000613e4282613e15565b9050919050565b6000613e5482613e37565b9050919050565b613e6481613e49565b82525050565b6000602082019050613e7f6000830184613e5b565b92915050565b613e8e81613cae565b82525050565b6000602082019050613ea96000830184613e85565b92915050565b613eb881613dd5565b8114613ec357600080fd5b50565b600081359050613ed581613eaf565b92915050565b60008060408385031215613ef257613ef1613ca9565b5b6000613f0085828601613d80565b9250506020613f1185828601613ec6565b9150509250929050565b600080600060608486031215613f3457613f33613ca9565b5b6000613f4286828701613d80565b9350506020613f5386828701613d80565b9250506040613f6486828701613ccf565b9150509250925092565b600060208284031215613f8457613f83613ca9565b5b6000613f9284828501613ec6565b91505092915050565b613fa481613d57565b82525050565b6000602082019050613fbf6000830184613f9b565b92915050565b600060ff82169050919050565b613fdb81613fc5565b82525050565b6000602082019050613ff66000830184613fd2565b92915050565b60006020828403121561401257614011613ca9565b5b600061402084828501613ccf565b91505092915050565b60006020828403121561403f5761403e613ca9565b5b600061404d84828501613d80565b91505092915050565b6000806040838503121561406d5761406c613ca9565b5b600061407b85828601613d80565b925050602061408c85828601613d80565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806140dd57607f821691505b6020821081036140f0576140ef614096565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061412c602083613c02565b9150614137826140f6565b602082019050919050565b6000602082019050818103600083015261415b8161411f565b9050919050565b60008151905061417181613d69565b92915050565b60006020828403121561418d5761418c613ca9565b5b600061419b84828501614162565b91505092915050565b60006040820190506141b96000830185613f9b565b6141c66020830184613f9b565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061420782613cae565b915061421283613cae565b925082820261422081613cae565b91508282048414831517614237576142366141cd565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061427882613cae565b915061428383613cae565b9250826142935761429261423e565b5b828204905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006142fa602683613c02565b91506143058261429e565b604082019050919050565b60006020820190508181036000830152614329816142ed565b9050919050565b600061433b82613cae565b915061434683613cae565b925082820190508082111561435e5761435d6141cd565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061439a601b83613c02565b91506143a582614364565b602082019050919050565b600060208201905081810360008301526143c98161438d565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061442c602483613c02565b9150614437826143d0565b604082019050919050565b6000602082019050818103600083015261445b8161441f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006144be602283613c02565b91506144c982614462565b604082019050919050565b600060208201905081810360008301526144ed816144b1565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614550602583613c02565b915061455b826144f4565b604082019050919050565b6000602082019050818103600083015261457f81614543565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006145e2602383613c02565b91506145ed82614586565b604082019050919050565b60006020820190508181036000830152614611816145d5565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000614674602883613c02565b915061467f82614618565b604082019050919050565b600060208201905081810360008301526146a381614667565b9050919050565b60006146b582613cae565b91506146c083613cae565b92508282039050818111156146d8576146d76141cd565b5b92915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061473a602183613c02565b9150614745826146de565b604082019050919050565b600060208201905081810360008301526147698161472d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b60006147f36147ee6147e9846147ce565b613e0b565b613cae565b9050919050565b614803816147d8565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61483e81613d57565b82525050565b60006148508383614835565b60208301905092915050565b6000602082019050919050565b600061487482614809565b61487e8185614814565b935061488983614825565b8060005b838110156148ba5781516148a18882614844565b97506148ac8361485c565b92505060018101905061488d565b5085935050505092915050565b600060a0820190506148dc6000830188613e85565b6148e960208301876147fa565b81810360408301526148fb8186614869565b905061490a6060830185613f9b565b6149176080830184613e85565b9695505050505050565b60006040820190506149366000830185613e85565b81810360208301526149488184614869565b90509392505050565b600061495c82613e37565b9050919050565b61496c81614951565b82525050565b600060c0820190506149876000830189613f9b565b6149946020830188613e85565b6149a160408301876147fa565b6149ae60608301866147fa565b6149bb6080830185614963565b6149c860a0830184613e85565b979650505050505050565b6000815190506149e281613cb8565b92915050565b600080600060608486031215614a0157614a00613ca9565b5b6000614a0f868287016149d3565b9350506020614a20868287016149d3565b9250506040614a31868287016149d3565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122015b0d5f78c13d5fd8e4429d172a14d4087339ee010f4d121e8b1b36f36425f1564736f6c63430008130033

Deployed Bytecode Sourcemap

14112:14904:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17820:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20263:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18986:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15822:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18097:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19894:361;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21308:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23697:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21187:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14581:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22339:128;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18006:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15243:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18483:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21593:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14973:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15937:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21725:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14802:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15373:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15290:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22613:807;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15331:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18205:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15629:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21872:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15689:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15463:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15156:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14918:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5651:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5876:145;;;;;;;;;;;;;:::i;:::-;;17911:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15508:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18709:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22202:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23522:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20644:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22023:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15069:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15870:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15199:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14859:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15984:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15027:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18332:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19500:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21042:137;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19751:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15419:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21451:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6029:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15112:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19612:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16036:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17820:83;17857:13;17890:5;17883:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17820:83;:::o;20263:369::-;5795:12;:10;:12::i;:::-;5785:22;;:6;;;;;;;;;;:22;;;5777:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20414:15:::1;20394:17;:35;;;;20460:15;20440:17;:35;;;;20508:17;20486:19;:39;;;;20559:65;20604:19;;20559:40;20581:17;;20559;;:21;;:40;;;;:::i;:::-;:44;;:65;;;;:::i;:::-;20538:18;:86;;;;20263:369:::0;;;:::o;18986:161::-;19061:4;19078:39;19087:12;:10;:12::i;:::-;19101:7;19110:6;19078:8;:39::i;:::-;19135:4;19128:11;;18986:161;;;;:::o;15822:41::-;;;;;;;;;;;;;:::o;18097:100::-;18150:7;18177:12;;18170:19;;18097:100;:::o;19894:361::-;5795:12;:10;:12::i;:::-;5785:22;;:6;;;;;;;;;;:22;;;5777:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20043:15:::1;20024:16;:34;;;;20088:15;20069:16;:34;;;;20135:17;20114:18;:38;;;;20185:62;20228:18;;20185:38;20206:16;;20185;;:20;;:38;;;;:::i;:::-;:42;;:62;;;;:::i;:::-;20165:17;:82;;;;19894:361:::0;;;:::o;21308:135::-;5795:12;:10;:12::i;:::-;5785:22;;:6;;;;;;;;;;:22;;;5777:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21429:6:::1;21399:19;:27;21419:6;21399:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;21308:135:::0;;:::o;23697:313::-;23795:4;23812:36;23822:6;23830:9;23841:6;23812:9;:36::i;:::-;;23859:121;23868:6;23876:12;:10;:12::i;:::-;23890:89;23928:6;23890:89;;;;;;;;;;;;;;;;;:11;:19;23902:6;23890:19;;;;;;;;;;;;;;;:33;23910:12;:10;:12::i;:::-;23890:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;23859:8;:121::i;:::-;23998:4;23991:11;;23697:313;;;;;:::o;21187:113::-;5795:12;:10;:12::i;:::-;5785:22;;:6;;;;;;;;;;:22;;;5777:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21284:8:::1;21265:16;;:27;;;;;;;;;;;;;;;;;;21187:113:::0;:::o;14581:81::-;;;:::o;22339:128::-;22392:7;22419:40;22436:22;22446:11;22436:9;:22::i;:::-;22419:12;;:16;;:40;;;;:::i;:::-;22412:47;;22339:128;:::o;18006:83::-;18047:5;18072:9;;;;;;;;;;;18065:16;;18006:83;:::o;15243:38::-;;;;:::o;18483:218::-;18571:4;18588:83;18597:12;:10;:12::i;:::-;18611:7;18620:50;18659:10;18620:11;:25;18632:12;:10;:12::i;:::-;18620:25;;;;;;;;;;;;;;;:34;18646:7;18620:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;18588:8;:83::i;:::-;18689:4;18682:11;;18483:218;;;;:::o;21593:124::-;5795:12;:10;:12::i;:::-;5785:22;;:6;;;;;;;;;;:22;;;5777:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21701:8:::1;21675:23;:34;;;;21593:124:::0;:::o;14973:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;15937:40::-;;;;;;;;;;;;;:::o;21725:139::-;5795:12;:10;:12::i;:::-;5785:22;;:6;;;;;;;;;;:22;;;5777:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21845:10:::1;21812:22;;:44;;;;;;;;;;;;;;;;;;21725:139:::0;:::o;14802:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;15373:37::-;;;;:::o;15290:34::-;;;;:::o;22613:807::-;22693:22;5795:12;:10;:12::i;:::-;5785:22;;:6;;;;;;;;;;:22;;;5777:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22730:35:::1;22787:16;22730:74;;22853:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22835:53;;;22897:4;22904:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22835:93;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22818:110;;22970:1;22944:28;;:14;:28;;::::0;22941:225:::1;;23058:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23040:74;;;23123:4;23130:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23040:114;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23023:131;;22941:225;23192:14;23178:11;;:28;;;;;;;;;;;;;;;;;;23258:16;23240:15;;:34;;;;;;;;;;;;;;;;;;23356:4;23312:19;:41;23340:11;;;;;;;;;;;23312:41;;;;;;;;;;;;;;;;:48;;;;;;;;;;;;;;;;;;23408:4;23371:12;:34;23392:11;;;;;;;;;;;23371:34;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;22717:703;22613:807:::0;;;:::o;15331:35::-;;;;:::o;18205:119::-;18271:7;18298:9;:18;18308:7;18298:18;;;;;;;;;;;;;;;;18291:25;;18205:119;;;:::o;15629:52::-;;;;:::o;21872:143::-;5795:12;:10;:12::i;:::-;5785:22;;:6;;;;;;;;;;:22;;;5777:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21996:10:::1;21961:24;;:46;;;;;;;;;;;;;;;;;;21872:143:::0;:::o;15689:50::-;;;;:::o;15463:38::-;;;;:::o;15156:36::-;;;;:::o;14918:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;5651:79::-;5689:7;5716:6;;;;;;;;;;;5709:13;;5651:79;:::o;5876:145::-;5795:12;:10;:12::i;:::-;5785:22;;:6;;;;;;;;;;:22;;;5777:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;5980:1:::1;5943:40;;5964:6;::::0;::::1;;;;;;;;5943:40;;;;;;;;;;;;6011:1;5994:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;5876:145::o:0;17911:87::-;17950:13;17983:7;17976:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17911:87;:::o;15508:45::-;;;;:::o;18709:269::-;18802:4;18819:129;18828:12;:10;:12::i;:::-;18842:7;18851:96;18890:15;18851:96;;;;;;;;;;;;;;;;;:11;:25;18863:12;:10;:12::i;:::-;18851:25;;;;;;;;;;;;;;;:34;18877:7;18851:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;18819:8;:129::i;:::-;18966:4;18959:11;;18709:269;;;;:::o;22202:125::-;5795:12;:10;:12::i;:::-;5785:22;;:6;;;;;;;;;;:22;;;5777:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22311:8:::1;22283:25;;:36;;;;;;;;;;;;;;;;;;22202:125:::0;:::o;23522:167::-;23600:4;23617:42;23627:12;:10;:12::i;:::-;23641:9;23652:6;23617:9;:42::i;:::-;;23677:4;23670:11;;23522:167;;;;:::o;20644:386::-;5795:12;:10;:12::i;:::-;5785:22;;:6;;;;;;;;;;:22;;;5777:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20810:17:::1;20792:15;:35;;;;20856:17;20838:15;:35;;;;20904:19;20884:17;:39;;;;20963:59;21004:17;;20963:36;20983:15;;20963;;:19;;:36;;;;:::i;:::-;:40;;:59;;;;:::i;:::-;20936:24;:86;;;;20644:386:::0;;;:::o;22023:171::-;5795:12;:10;:12::i;:::-;5785:22;;:6;;;;;;;;;;:22;;;5777:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22124:8:::1;22100:21;;:32;;;;;;;;;;;;;;;;;;22148:38;22177:8;22148:38;;;;;;:::i;:::-;;;;;;;;22023:171:::0;:::o;15069:36::-;;;;:::o;15870:26::-;;;;;;;;;;;;;:::o;15199:37::-;;;;:::o;14859:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;15984:45::-;;;;;;;;;;;;;:::o;15027:35::-;;;;:::o;18332:143::-;18413:7;18440:11;:18;18452:5;18440:18;;;;;;;;;;;;;;;:27;18459:7;18440:27;;;;;;;;;;;;;;;;18433:34;;18332:143;;;;:::o;19500:104::-;5795:12;:10;:12::i;:::-;5785:22;;:6;;;;;;;;;;:22;;;5777:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19592:4:::1;19568:12;:21;19581:7;19568:21;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;19500:104:::0;:::o;21042:137::-;5795:12;:10;:12::i;:::-;5785:22;;:6;;;;;;;;;;:22;;;5777:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21167:4:::1;21151:13;21136:12;;:28;;;;:::i;:::-;:35;;;;:::i;:::-;21121:12;:50;;;;21042:137:::0;:::o;19751:135::-;5795:12;:10;:12::i;:::-;5785:22;;:6;;;;;;;;;;:22;;;5777:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19870:8:::1;19841:17;:26;19859:7;19841:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;19751:135:::0;;:::o;15419:37::-;;;;:::o;21451:134::-;5795:12;:10;:12::i;:::-;5785:22;;:6;;;;;;;;;;:22;;;5777:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21573:4:::1;21557:13;21542:12;;:28;;;;:::i;:::-;:35;;;;:::i;:::-;21528:10;:49;;;;21451:134:::0;:::o;6029:244::-;5795:12;:10;:12::i;:::-;5785:22;;:6;;;;;;;;;;:22;;;5777:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6138:1:::1;6118:22;;:8;:22;;::::0;6110:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;6228:8;6199:38;;6220:6;::::0;::::1;;;;;;;;6199:38;;;;;;;;;;;;6257:8;6248:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;6029:244:::0;:::o;15112:37::-;;;;:::o;19612:127::-;5795:12;:10;:12::i;:::-;5785:22;;:6;;;;;;;;;;:22;;;5777:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19725:6:::1;19699:15;:23;19715:6;19699:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;19612:127:::0;;:::o;16036:35::-;;;;;;;;;;;;;:::o;103:115::-;156:15;199:10;184:26;;103:115;:::o;1053:181::-;1111:7;1131:9;1147:1;1143;:5;;;;:::i;:::-;1131:17;;1172:1;1167;:6;;1159:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1225:1;1218:8;;;1053:181;;;;:::o;19155:337::-;19265:1;19248:19;;:5;:19;;;19240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19346:1;19327:21;;:7;:21;;;19319:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19430:6;19400:11;:18;19412:5;19400:18;;;;;;;;;;;;;;;:27;19419:7;19400:27;;;;;;;;;;;;;;;:36;;;;19468:7;19452:32;;19461:5;19452:32;;;19477:6;19452:32;;;;;;:::i;:::-;;;;;;;;19155:337;;;:::o;24018:1707::-;24105:4;24150:1;24132:20;;:6;:20;;;24124:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;24234:1;24213:23;;:9;:23;;;24205:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;24292:16;;;;;;;;;;;24289:1429;;;24342:41;24357:6;24365:9;24376:6;24342:14;:41::i;:::-;24335:48;;;;24289:1429;24439:15;:23;24455:6;24439:23;;;;;;;;;;;;;;;;;;;;;;;;;24438:24;:55;;;;;24467:15;:26;24483:9;24467:26;;;;;;;;;;;;;;;;;;;;;;;;;24466:27;24438:55;24435:170;;;24532:12;;24522:6;:22;;24514:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;24435:170;24633:28;24664:24;24682:4;24664:9;:24::i;:::-;24633:55;;24703:28;24758:23;;24734:20;:47;;24703:78;;24814:23;:44;;;;;24842:16;;;;;;;;;;;24841:17;24814:44;:69;;;;;24863:12;:20;24876:6;24863:20;;;;;;;;;;;;;;;;;;;;;;;;;24862:21;24814:69;:94;;;;;24887:21;;;;;;;;;;;24814:94;24810:305;;;24946:25;;;;;;;;;;;24943:97;;;25017:23;;24994:46;;24943:97;25059:36;25074:20;25059:14;:36::i;:::-;24810:305;25151:53;25173:6;25151:53;;;;;;;;;;;;;;;;;:9;:17;25161:6;25151:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;25131:9;:17;25141:6;25131:17;;;;;;;;;;;;;;;:73;;;;25221:19;25244:17;:25;25262:6;25244:25;;;;;;;;;;;;;;;;;;;;;;;;;:57;;;;25273:17;:28;25291:9;25273:28;;;;;;;;;;;;;;;;;;;;;;;;;25244:57;25243:148;;25357:34;25365:6;25373:9;25384:6;25357:7;:34::i;:::-;25243:148;;;25348:6;25243:148;25221:170;;25411:16;;;;;;;;;;;:51;;;;;25432:19;:30;25452:9;25432:30;;;;;;;;;;;;;;;;;;;;;;;;;25431:31;25411:51;25408:133;;;25530:10;;25489:37;25514:11;25489:20;25499:9;25489;:20::i;:::-;:24;;:37;;;;:::i;:::-;:51;;25481:60;;;;;;25408:133;25581:37;25606:11;25581:9;:20;25591:9;25581:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;25558:9;:20;25568:9;25558:20;;;;;;;;;;;;;;;:60;;;;25657:9;25640:40;;25649:6;25640:40;;;25668:11;25640:40;;;;;;:::i;:::-;;;;;;;;25702:4;25695:11;;;;;24018:1707;;;;;;:::o;1386:192::-;1472:7;1505:1;1500;:6;;1508:12;1492:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1532:9;1548:1;1544;:5;;;;:::i;:::-;1532:17;;1569:1;1562:8;;;1386:192;;;;;:::o;1242:136::-;1300:7;1327:43;1331:1;1334;1327:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1320:50;;1242:136;;;;:::o;25733:330::-;25826:4;25863:53;25885:6;25863:53;;;;;;;;;;;;;;;;;:9;:17;25873:6;25863:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;25843:9;:17;25853:6;25843:17;;;;;;;;;;;;;;;:73;;;;25950:32;25975:6;25950:9;:20;25960:9;25950:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;25927:9;:20;25937:9;25927:20;;;;;;;;;;;;;;;:55;;;;26015:9;25998:35;;26007:6;25998:35;;;26026:6;25998:35;;;;;;:::i;:::-;;;;;;;;26051:4;26044:11;;25733:330;;;;;:::o;26071:1090::-;16513:4;16494:16;;:23;;;;;;;;;;;;;;;;;;26153:19:::1;26175:65;26238:1;26175:58;26208:24;;26175:28;26187:15;;26175:7;:11;;:28;;;;:::i;:::-;:32;;:58;;;;:::i;:::-;:62;;:65;;;;:::i;:::-;26153:87;;26251:21;26275:24;26287:11;26275:7;:11;;:24;;;;:::i;:::-;26251:48;;26312:31;26329:13;26312:16;:31::i;:::-;26354:22;26379:21;26354:46;;26413:19;26435:52;26464:22;26484:1;26464:15;;:19;;:22;;;;:::i;:::-;26435:24;;:28;;:52;;;;:::i;:::-;26413:74;;26508:26;26537:59;26594:1;26537:52;26577:11;26537:35;26556:15;;26537:14;:18;;:35;;;;:::i;:::-;:39;;:52;;;;:::i;:::-;:56;;:59;;;;:::i;:::-;26508:88;;26607:28;26638:54;26680:11;26638:37;26657:17;;26638:14;:18;;:37;;;;:::i;:::-;:41;;:54;;;;:::i;:::-;26607:85;;26703:26;26732:64;26775:20;26732:38;26751:18;26732:14;:18;;:38;;;;:::i;:::-;:42;;:64;;;;:::i;:::-;26703:93;;26833:1;26812:18;:22;26809:104;;;26849:64;26870:22;;;;;;;;;;;26894:18;26849:20;:64::i;:::-;26809:104;26952:1;26929:20;:24;26926:110;;;26968:68;26989:24;;;;;;;;;;;27015:20;26968;:68::i;:::-;26926:110;27073:1;27052:18;:22;:41;;;;;27092:1;27078:11;:15;27052:41;27049:104;;;27108:45;27121:11;27134:18;27108:12;:45::i;:::-;27049:104;26132:1029;;;;;;;16559:5:::0;16540:16;;:24;;;;;;;;;;;;;;;;;;26071:1090;:::o;28385:622::-;28471:7;28501:17;28521:1;28501:21;;28546:12;:20;28559:6;28546:20;;;;;;;;;;;;;;;;;;;;;;;;;28543:223;;;28595:38;28629:3;28595:29;28606:17;;28595:6;:10;;:29;;;;:::i;:::-;:33;;:38;;;;:::i;:::-;28583:50;;28543:223;;;28663:12;:23;28676:9;28663:23;;;;;;;;;;;;;;;;;;;;;;;;;28660:106;;;28715:39;28750:3;28715:30;28726:18;;28715:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;28703:51;;28660:106;28543:223;28801:1;28789:9;:13;28786:173;;;28846:39;28875:9;28846;:24;28864:4;28846:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;28819:9;:24;28837:4;28819:24;;;;;;;;;;;;;;;:66;;;;28930:4;28905:42;;28914:6;28905:42;;;28937:9;28905:42;;;;;;:::i;:::-;;;;;;;;28786:173;28978:21;28989:9;28978:6;:10;;:21;;;;:::i;:::-;28971:28;;;28385:622;;;;;:::o;1586:250::-;1644:7;1673:1;1668;:6;1664:47;;1698:1;1691:8;;;;1664:47;1723:9;1739:1;1735;:5;;;;:::i;:::-;1723:17;;1768:1;1763;1759;:5;;;;:::i;:::-;:10;1751:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;1827:1;1820:8;;;1586:250;;;;;:::o;1844:132::-;1902:7;1929:39;1933:1;1936;1929:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;1922:46;;1844:132;;;;:::o;27173:666::-;27299:21;27337:1;27323:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27299:40;;27368:4;27350;27355:1;27350:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27394:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27384:4;27389:1;27384:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;27429:62;27446:4;27461:15;;;;;;;;;;;27479:11;27429:8;:62::i;:::-;27530:15;;;;;;;;;;;:66;;;27611:11;27637:1;27681:4;27708;27744:15;27530:240;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27796:35;27813:11;27826:4;27796:35;;;;;;;:::i;:::-;;;;;;;;27228:611;27173:666;:::o;22475:126::-;22567:9;:18;;:26;22586:6;22567:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22475:126;;:::o;27847:530::-;27995:62;28012:4;28027:15;;;;;;;;;;;28045:11;27995:8;:62::i;:::-;28100:15;;;;;;;;;;;:31;;;28139:9;28172:4;28192:11;28218:1;28261;28304:24;;;;;;;;;;;28343:15;28100:269;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27847:530;;:::o;1984:278::-;2070:7;2102:1;2098;:5;2105:12;2090:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2129:9;2145:1;2141;:5;;;;:::i;:::-;2129:17;;2253:1;2246:8;;;1984:278;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676: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:60::-;4099:3;4120:5;4113:12;;4071:60;;;:::o;4137:142::-;4187:9;4220:53;4238:34;4247:24;4265:5;4247:24;:::i;:::-;4238:34;:::i;:::-;4220:53;:::i;:::-;4207:66;;4137:142;;;:::o;4285:126::-;4335:9;4368:37;4399:5;4368:37;:::i;:::-;4355:50;;4285:126;;;:::o;4417:153::-;4494:9;4527:37;4558:5;4527:37;:::i;:::-;4514:50;;4417:153;;;:::o;4576:185::-;4690:64;4748:5;4690:64;:::i;:::-;4685:3;4678:77;4576:185;;:::o;4767:276::-;4887:4;4925:2;4914:9;4910:18;4902:26;;4938:98;5033:1;5022:9;5018:17;5009:6;4938:98;:::i;:::-;4767:276;;;;:::o;5049:118::-;5136:24;5154:5;5136:24;:::i;:::-;5131:3;5124:37;5049:118;;:::o;5173:222::-;5266:4;5304:2;5293:9;5289:18;5281:26;;5317:71;5385:1;5374:9;5370:17;5361:6;5317:71;:::i;:::-;5173:222;;;;:::o;5401:116::-;5471:21;5486:5;5471:21;:::i;:::-;5464:5;5461:32;5451:60;;5507:1;5504;5497:12;5451:60;5401:116;:::o;5523:133::-;5566:5;5604:6;5591:20;5582:29;;5620:30;5644:5;5620:30;:::i;:::-;5523:133;;;;:::o;5662:468::-;5727:6;5735;5784:2;5772:9;5763:7;5759:23;5755:32;5752:119;;;5790:79;;:::i;:::-;5752:119;5910:1;5935:53;5980:7;5971:6;5960:9;5956:22;5935:53;:::i;:::-;5925:63;;5881:117;6037:2;6063:50;6105:7;6096:6;6085:9;6081:22;6063:50;:::i;:::-;6053:60;;6008:115;5662:468;;;;;:::o;6136:619::-;6213:6;6221;6229;6278:2;6266:9;6257:7;6253:23;6249:32;6246:119;;;6284:79;;:::i;:::-;6246:119;6404:1;6429:53;6474:7;6465:6;6454:9;6450:22;6429:53;:::i;:::-;6419:63;;6375:117;6531:2;6557:53;6602:7;6593:6;6582:9;6578:22;6557:53;:::i;:::-;6547:63;;6502:118;6659:2;6685:53;6730:7;6721:6;6710:9;6706:22;6685:53;:::i;:::-;6675:63;;6630:118;6136:619;;;;;:::o;6761:323::-;6817:6;6866:2;6854:9;6845:7;6841:23;6837:32;6834:119;;;6872:79;;:::i;:::-;6834:119;6992:1;7017:50;7059:7;7050:6;7039:9;7035:22;7017:50;:::i;:::-;7007:60;;6963:114;6761:323;;;;:::o;7090:118::-;7177:24;7195:5;7177:24;:::i;:::-;7172:3;7165:37;7090:118;;:::o;7214:222::-;7307:4;7345:2;7334:9;7330:18;7322:26;;7358:71;7426:1;7415:9;7411:17;7402:6;7358:71;:::i;:::-;7214:222;;;;:::o;7442:86::-;7477:7;7517:4;7510:5;7506:16;7495:27;;7442:86;;;:::o;7534:112::-;7617:22;7633:5;7617:22;:::i;:::-;7612:3;7605:35;7534:112;;:::o;7652:214::-;7741:4;7779:2;7768:9;7764:18;7756:26;;7792:67;7856:1;7845:9;7841:17;7832:6;7792:67;:::i;:::-;7652:214;;;;:::o;7872:329::-;7931:6;7980:2;7968:9;7959:7;7955:23;7951:32;7948:119;;;7986:79;;:::i;:::-;7948:119;8106:1;8131:53;8176:7;8167:6;8156:9;8152:22;8131:53;:::i;:::-;8121:63;;8077:117;7872:329;;;;:::o;8207:::-;8266:6;8315:2;8303:9;8294:7;8290:23;8286:32;8283:119;;;8321:79;;:::i;:::-;8283:119;8441:1;8466:53;8511:7;8502:6;8491:9;8487:22;8466:53;:::i;:::-;8456:63;;8412:117;8207:329;;;;:::o;8542:474::-;8610:6;8618;8667:2;8655:9;8646:7;8642:23;8638:32;8635:119;;;8673:79;;:::i;:::-;8635:119;8793:1;8818:53;8863:7;8854:6;8843:9;8839:22;8818:53;:::i;:::-;8808:63;;8764:117;8920:2;8946:53;8991:7;8982:6;8971:9;8967:22;8946:53;:::i;:::-;8936:63;;8891:118;8542:474;;;;;:::o;9022:180::-;9070:77;9067:1;9060:88;9167:4;9164:1;9157:15;9191:4;9188:1;9181:15;9208:320;9252:6;9289:1;9283:4;9279:12;9269:22;;9336:1;9330:4;9326:12;9357:18;9347:81;;9413:4;9405:6;9401:17;9391:27;;9347:81;9475:2;9467:6;9464:14;9444:18;9441:38;9438:84;;9494:18;;:::i;:::-;9438:84;9259:269;9208:320;;;:::o;9534:182::-;9674:34;9670:1;9662:6;9658:14;9651:58;9534:182;:::o;9722:366::-;9864:3;9885:67;9949:2;9944:3;9885:67;:::i;:::-;9878:74;;9961:93;10050:3;9961:93;:::i;:::-;10079:2;10074:3;10070:12;10063:19;;9722:366;;;:::o;10094:419::-;10260:4;10298:2;10287:9;10283:18;10275:26;;10347:9;10341:4;10337:20;10333:1;10322:9;10318:17;10311:47;10375:131;10501:4;10375:131;:::i;:::-;10367:139;;10094:419;;;:::o;10519:143::-;10576:5;10607:6;10601:13;10592:22;;10623:33;10650:5;10623:33;:::i;:::-;10519:143;;;;:::o;10668:351::-;10738:6;10787:2;10775:9;10766:7;10762:23;10758:32;10755:119;;;10793:79;;:::i;:::-;10755:119;10913:1;10938:64;10994:7;10985:6;10974:9;10970:22;10938:64;:::i;:::-;10928:74;;10884:128;10668:351;;;;:::o;11025:332::-;11146:4;11184:2;11173:9;11169:18;11161:26;;11197:71;11265:1;11254:9;11250:17;11241:6;11197:71;:::i;:::-;11278:72;11346:2;11335:9;11331:18;11322:6;11278:72;:::i;:::-;11025:332;;;;;:::o;11363:180::-;11411:77;11408:1;11401:88;11508:4;11505:1;11498:15;11532:4;11529:1;11522:15;11549:410;11589:7;11612:20;11630:1;11612:20;:::i;:::-;11607:25;;11646:20;11664:1;11646:20;:::i;:::-;11641:25;;11701:1;11698;11694:9;11723:30;11741:11;11723:30;:::i;:::-;11712:41;;11902:1;11893:7;11889:15;11886:1;11883:22;11863:1;11856:9;11836:83;11813:139;;11932:18;;:::i;:::-;11813:139;11597:362;11549:410;;;;:::o;11965:180::-;12013:77;12010:1;12003:88;12110:4;12107:1;12100:15;12134:4;12131:1;12124:15;12151:185;12191:1;12208:20;12226:1;12208:20;:::i;:::-;12203:25;;12242:20;12260:1;12242:20;:::i;:::-;12237:25;;12281:1;12271:35;;12286:18;;:::i;:::-;12271:35;12328:1;12325;12321:9;12316:14;;12151:185;;;;:::o;12342:225::-;12482:34;12478:1;12470:6;12466:14;12459:58;12551:8;12546:2;12538:6;12534:15;12527:33;12342:225;:::o;12573:366::-;12715:3;12736:67;12800:2;12795:3;12736:67;:::i;:::-;12729:74;;12812:93;12901:3;12812:93;:::i;:::-;12930:2;12925:3;12921:12;12914:19;;12573:366;;;:::o;12945:419::-;13111:4;13149:2;13138:9;13134:18;13126:26;;13198:9;13192:4;13188:20;13184:1;13173:9;13169:17;13162:47;13226:131;13352:4;13226:131;:::i;:::-;13218:139;;12945:419;;;:::o;13370:191::-;13410:3;13429:20;13447:1;13429:20;:::i;:::-;13424:25;;13463:20;13481:1;13463:20;:::i;:::-;13458:25;;13506:1;13503;13499:9;13492:16;;13527:3;13524:1;13521:10;13518:36;;;13534:18;;:::i;:::-;13518:36;13370:191;;;;:::o;13567:177::-;13707:29;13703:1;13695:6;13691:14;13684:53;13567:177;:::o;13750:366::-;13892:3;13913:67;13977:2;13972:3;13913:67;:::i;:::-;13906:74;;13989:93;14078:3;13989:93;:::i;:::-;14107:2;14102:3;14098:12;14091:19;;13750:366;;;:::o;14122:419::-;14288:4;14326:2;14315:9;14311:18;14303:26;;14375:9;14369:4;14365:20;14361:1;14350:9;14346:17;14339:47;14403:131;14529:4;14403:131;:::i;:::-;14395:139;;14122:419;;;:::o;14547:223::-;14687:34;14683:1;14675:6;14671:14;14664:58;14756:6;14751:2;14743:6;14739:15;14732:31;14547:223;:::o;14776:366::-;14918:3;14939:67;15003:2;14998:3;14939:67;:::i;:::-;14932:74;;15015:93;15104:3;15015:93;:::i;:::-;15133:2;15128:3;15124:12;15117:19;;14776:366;;;:::o;15148:419::-;15314:4;15352:2;15341:9;15337:18;15329:26;;15401:9;15395:4;15391:20;15387:1;15376:9;15372:17;15365:47;15429:131;15555:4;15429:131;:::i;:::-;15421:139;;15148:419;;;:::o;15573:221::-;15713:34;15709:1;15701:6;15697:14;15690:58;15782:4;15777:2;15769:6;15765:15;15758:29;15573:221;:::o;15800:366::-;15942:3;15963:67;16027:2;16022:3;15963:67;:::i;:::-;15956:74;;16039:93;16128:3;16039:93;:::i;:::-;16157:2;16152:3;16148:12;16141:19;;15800:366;;;:::o;16172:419::-;16338:4;16376:2;16365:9;16361:18;16353:26;;16425:9;16419:4;16415:20;16411:1;16400:9;16396:17;16389:47;16453:131;16579:4;16453:131;:::i;:::-;16445:139;;16172:419;;;:::o;16597:224::-;16737:34;16733:1;16725:6;16721:14;16714:58;16806:7;16801:2;16793:6;16789:15;16782:32;16597:224;:::o;16827:366::-;16969:3;16990:67;17054:2;17049:3;16990:67;:::i;:::-;16983:74;;17066:93;17155:3;17066:93;:::i;:::-;17184:2;17179:3;17175:12;17168:19;;16827:366;;;:::o;17199:419::-;17365:4;17403:2;17392:9;17388:18;17380:26;;17452:9;17446:4;17442:20;17438:1;17427:9;17423:17;17416:47;17480:131;17606:4;17480:131;:::i;:::-;17472:139;;17199:419;;;:::o;17624:222::-;17764:34;17760:1;17752:6;17748:14;17741:58;17833:5;17828:2;17820:6;17816:15;17809:30;17624:222;:::o;17852:366::-;17994:3;18015:67;18079:2;18074:3;18015:67;:::i;:::-;18008:74;;18091:93;18180:3;18091:93;:::i;:::-;18209:2;18204:3;18200:12;18193:19;;17852:366;;;:::o;18224:419::-;18390:4;18428:2;18417:9;18413:18;18405:26;;18477:9;18471:4;18467:20;18463:1;18452:9;18448:17;18441:47;18505:131;18631:4;18505:131;:::i;:::-;18497:139;;18224:419;;;:::o;18649:227::-;18789:34;18785:1;18777:6;18773:14;18766:58;18858:10;18853:2;18845:6;18841:15;18834:35;18649:227;:::o;18882:366::-;19024:3;19045:67;19109:2;19104:3;19045:67;:::i;:::-;19038:74;;19121:93;19210:3;19121:93;:::i;:::-;19239:2;19234:3;19230:12;19223:19;;18882:366;;;:::o;19254:419::-;19420:4;19458:2;19447:9;19443:18;19435:26;;19507:9;19501:4;19497:20;19493:1;19482:9;19478:17;19471:47;19535:131;19661:4;19535:131;:::i;:::-;19527:139;;19254:419;;;:::o;19679:194::-;19719:4;19739:20;19757:1;19739:20;:::i;:::-;19734:25;;19773:20;19791:1;19773:20;:::i;:::-;19768:25;;19817:1;19814;19810:9;19802:17;;19841:1;19835:4;19832:11;19829:37;;;19846:18;;:::i;:::-;19829:37;19679:194;;;;:::o;19879:220::-;20019:34;20015:1;20007:6;20003:14;19996:58;20088:3;20083:2;20075:6;20071:15;20064:28;19879:220;:::o;20105:366::-;20247:3;20268:67;20332:2;20327:3;20268:67;:::i;:::-;20261:74;;20344:93;20433:3;20344:93;:::i;:::-;20462:2;20457:3;20453:12;20446:19;;20105:366;;;:::o;20477:419::-;20643:4;20681:2;20670:9;20666:18;20658:26;;20730:9;20724:4;20720:20;20716:1;20705:9;20701:17;20694:47;20758:131;20884:4;20758:131;:::i;:::-;20750:139;;20477:419;;;:::o;20902:180::-;20950:77;20947:1;20940:88;21047:4;21044:1;21037:15;21071:4;21068:1;21061:15;21088:180;21136:77;21133:1;21126:88;21233:4;21230:1;21223:15;21257:4;21254:1;21247:15;21274:85;21319:7;21348:5;21337:16;;21274:85;;;:::o;21365:158::-;21423:9;21456:61;21474:42;21483:32;21509:5;21483:32;:::i;:::-;21474:42;:::i;:::-;21456:61;:::i;:::-;21443:74;;21365:158;;;:::o;21529:147::-;21624:45;21663:5;21624:45;:::i;:::-;21619:3;21612:58;21529:147;;:::o;21682:114::-;21749:6;21783:5;21777:12;21767:22;;21682:114;;;:::o;21802:184::-;21901:11;21935:6;21930:3;21923:19;21975:4;21970:3;21966:14;21951:29;;21802:184;;;;:::o;21992:132::-;22059:4;22082:3;22074:11;;22112:4;22107:3;22103:14;22095:22;;21992:132;;;:::o;22130:108::-;22207:24;22225:5;22207:24;:::i;:::-;22202:3;22195:37;22130:108;;:::o;22244:179::-;22313:10;22334:46;22376:3;22368:6;22334:46;:::i;:::-;22412:4;22407:3;22403:14;22389:28;;22244:179;;;;:::o;22429:113::-;22499:4;22531;22526:3;22522:14;22514:22;;22429:113;;;:::o;22578:732::-;22697:3;22726:54;22774:5;22726:54;:::i;:::-;22796:86;22875:6;22870:3;22796:86;:::i;:::-;22789:93;;22906:56;22956:5;22906:56;:::i;:::-;22985:7;23016:1;23001:284;23026:6;23023:1;23020:13;23001:284;;;23102:6;23096:13;23129:63;23188:3;23173:13;23129:63;:::i;:::-;23122:70;;23215:60;23268:6;23215:60;:::i;:::-;23205:70;;23061:224;23048:1;23045;23041:9;23036:14;;23001:284;;;23005:14;23301:3;23294:10;;22702:608;;;22578:732;;;;:::o;23316:831::-;23579:4;23617:3;23606:9;23602:19;23594:27;;23631:71;23699:1;23688:9;23684:17;23675:6;23631:71;:::i;:::-;23712:80;23788:2;23777:9;23773:18;23764:6;23712:80;:::i;:::-;23839:9;23833:4;23829:20;23824:2;23813:9;23809:18;23802:48;23867:108;23970:4;23961:6;23867:108;:::i;:::-;23859:116;;23985:72;24053:2;24042:9;24038:18;24029:6;23985:72;:::i;:::-;24067:73;24135:3;24124:9;24120:19;24111:6;24067:73;:::i;:::-;23316:831;;;;;;;;:::o;24153:483::-;24324:4;24362:2;24351:9;24347:18;24339:26;;24375:71;24443:1;24432:9;24428:17;24419:6;24375:71;:::i;:::-;24493:9;24487:4;24483:20;24478:2;24467:9;24463:18;24456:48;24521:108;24624:4;24615:6;24521:108;:::i;:::-;24513:116;;24153:483;;;;;:::o;24642:134::-;24700:9;24733:37;24764:5;24733:37;:::i;:::-;24720:50;;24642:134;;;:::o;24782:147::-;24877:45;24916:5;24877:45;:::i;:::-;24872:3;24865:58;24782:147;;:::o;24935:823::-;25192:4;25230:3;25219:9;25215:19;25207:27;;25244:71;25312:1;25301:9;25297:17;25288:6;25244:71;:::i;:::-;25325:72;25393:2;25382:9;25378:18;25369:6;25325:72;:::i;:::-;25407:80;25483:2;25472:9;25468:18;25459:6;25407:80;:::i;:::-;25497;25573:2;25562:9;25558:18;25549:6;25497:80;:::i;:::-;25587:81;25663:3;25652:9;25648:19;25639:6;25587:81;:::i;:::-;25678:73;25746:3;25735:9;25731:19;25722:6;25678:73;:::i;:::-;24935:823;;;;;;;;;:::o;25764:143::-;25821:5;25852:6;25846:13;25837:22;;25868:33;25895:5;25868:33;:::i;:::-;25764:143;;;;:::o;25913:663::-;26001:6;26009;26017;26066:2;26054:9;26045:7;26041:23;26037:32;26034:119;;;26072:79;;:::i;:::-;26034:119;26192:1;26217:64;26273:7;26264:6;26253:9;26249:22;26217:64;:::i;:::-;26207:74;;26163:128;26330:2;26356:64;26412:7;26403:6;26392:9;26388:22;26356:64;:::i;:::-;26346:74;;26301:129;26469:2;26495:64;26551:7;26542:6;26531:9;26527:22;26495:64;:::i;:::-;26485:74;;26440:129;25913:663;;;;;:::o

Swarm Source

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