ETH Price: $2,275.96 (+2.48%)

Token

FlyGuyz (FLYY)
 

Overview

Max Total Supply

888,000,000 FLYY

Holders

19 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
40 FLYY

Value
$0.00
0x0695F33c1DEbaaDa3DaB7B40471DE598972ff078
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:
FlyGuyz

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-07-22
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

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

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

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

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

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

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, 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 Mint(address indexed sender, uint amount0, uint amount1);
    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 mint(address to) external returns (uint liquidity);

    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 FlyGuyz is Context, IERC20, Ownable {
    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;

    mapping(address => bool) private _isExcludedFromFee;

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

    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 888000000 * 10**18;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));

    uint256 private _tFeeTotal;

    string private _name = "FlyGuyz";
    string private _symbol = "FLYY";
    uint8 private _decimals = 18;

    address public devAndMarketingWallet =
        msg.sender;

    uint256 private _reflectionFee;
    uint256 private _autoLPFee;
    uint256 private _devAndMarketingFee;

    // 6% buy/sell tax: (3% auto LP, 2% reflection to all holders, 1% development and marketing)
    uint8 public autoLPFee = 3;
    uint8 public reflectionFee = 2;
    uint8 public devAndMarketingFee = 1;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;

    uint256 private numTokensSellToAddToLiquidity = 100000 * 10**18;

    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor() {
        _rOwned[_msgSender()] = _rTotal;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;

        _isExcludedFromFee[msg.sender] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[devAndMarketingWallet] = true;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }

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

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

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

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

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

    function tokenFromReflection(uint256 rAmount)
        private
        view
        returns (uint256)
    {
        require(
            rAmount <= _rTotal,
            "Amount must be less than total reflections"
        );
        uint256 currentRate = _getRate();
        return rAmount / currentRate;
    }

    function _getRate() private view returns (uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply / tSupply;
    }

    function _getCurrentSupply() private view returns (uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;

        for (uint256 i = 0; i < _excluded.length; i++) {
            if (
                _rOwned[_excluded[i]] > rSupply ||
                _tOwned[_excluded[i]] > tSupply
            ) return (_rTotal, _tTotal);
            rSupply = rSupply - _rOwned[_excluded[i]];
            tSupply = tSupply - _tOwned[_excluded[i]];
        }

        if (rSupply < (_rTotal / _tTotal)) return (_rTotal, _tTotal);

        return (rSupply, tSupply);
    }

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        uint256 contractTokenBalance = balanceOf(address(this));

        bool overMinTokenBalance = contractTokenBalance >=
            numTokensSellToAddToLiquidity;

        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            from != uniswapV2Pair &&
            swapAndLiquifyEnabled
        ) {
            contractTokenBalance = numTokensSellToAddToLiquidity;

            swapAndLiquify(contractTokenBalance);
        }

        bool takeFee = true;

        if (
            _isExcludedFromFee[from] ||
            _isExcludedFromFee[to] ||
            (from != uniswapV2Pair && to != uniswapV2Pair)
        ) {
            takeFee = false;
        }

        if (takeFee) {
            _setFee();
        }

        _tokenTransfer(from, to, amount, takeFee);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        uint256 half = contractTokenBalance / 2;
        uint256 otherHalf = contractTokenBalance - half;

        uint256 initialBalance = address(this).balance;

        swapTokensForEth(half);

        uint256 newBalance = address(this).balance - initialBalance;

        addLiquidity(otherHalf, newBalance);

        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            owner(),
            block.timestamp
        );
    }

    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount,
        bool takeFee
    ) private {
        if (!takeFee) removeAllFee();

        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }

        if (!takeFee) _setFee();
    }

    function removeAllFee() private {
        _reflectionFee = 0;
        _autoLPFee = 0;
        _devAndMarketingFee = 0;
    }

    function _setFee() private {
        _devAndMarketingFee = devAndMarketingFee;
        _reflectionFee = reflectionFee;
        _autoLPFee = autoLPFee;
    }

    function _transferFromExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity,
            uint256 tDevAndMarketing
        ) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(
            tAmount,
            tFee,
            tLiquidity,
            tDevAndMarketing
        );

        _tOwned[sender] = _tOwned[sender] - tAmount;
        _rOwned[sender] = _rOwned[sender] - rAmount;
        _rOwned[recipient] = _rOwned[recipient] + rTransferAmount;

        _takeLiquidity(tLiquidity);
        _takeDevAndMarketing(tDevAndMarketing);
        _reflectFee(rFee, tFee);

        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity,
            uint256 tDevAndMarketing
        ) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(
            tAmount,
            tFee,
            tLiquidity,
            tDevAndMarketing
        );

        _rOwned[sender] = _rOwned[sender] - rAmount;
        _tOwned[recipient] = _tOwned[recipient] + tTransferAmount;
        _rOwned[recipient] = _rOwned[recipient] + rTransferAmount;

        _takeLiquidity(tLiquidity);
        _takeDevAndMarketing(tDevAndMarketing);
        _reflectFee(rFee, tFee);

        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferStandard(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity,
            uint256 tDevAndMarketing
        ) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(
            tAmount,
            tFee,
            tLiquidity,
            tDevAndMarketing
        );

        _rOwned[sender] = _rOwned[sender] - rAmount;
        _rOwned[recipient] = _rOwned[recipient] + rTransferAmount;

        _takeLiquidity(tLiquidity);
        _takeDevAndMarketing(tDevAndMarketing);
        _reflectFee(rFee, tFee);

        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity,
            uint256 tDevAndMarketing
        ) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(
            tAmount,
            tFee,
            tLiquidity,
            tDevAndMarketing
        );

        _tOwned[sender] = _tOwned[sender] - tAmount;
        _rOwned[sender] = _rOwned[sender] - rAmount;
        _tOwned[recipient] = _tOwned[recipient] + tTransferAmount;
        _rOwned[recipient] = _rOwned[recipient] + rTransferAmount;

        _takeLiquidity(tLiquidity);
        _takeDevAndMarketing(tDevAndMarketing);
        _reflectFee(rFee, tFee);

        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _getTValues(uint256 tAmount)
        private
        view
        returns (
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tDevAndMarketing = calculateDevAndMarketingFee(tAmount);
        uint256 tTransferAmount = tAmount -
            tFee -
            tLiquidity -
            tDevAndMarketing;
        return (tTransferAmount, tFee, tLiquidity, tDevAndMarketing);
    }

    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return (_amount * _reflectionFee) / (10**2);
    }

    function calculateLiquidityFee(uint256 _amount)
        private
        view
        returns (uint256)
    {
        return (_amount * _autoLPFee) / 10**2;
    }

    function calculateDevAndMarketingFee(uint256 _amount)
        private
        view
        returns (uint256)
    {
        return (_amount * _devAndMarketingFee) / 10**2;
    }

    function _getRValues(
        uint256 tAmount,
        uint256 tFee,
        uint256 tLiquidity,
        uint256 tDevAndMarketing
    )
        private
        view
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 currentRate = _getRate();
        uint256 rAmount = tAmount * currentRate;
        uint256 rFee = tFee * currentRate;
        uint256 rLiquidity = tLiquidity * currentRate;
        uint256 rDevAndMarketing = tDevAndMarketing * currentRate;

        uint256 rTransferAmount = rAmount -
            rFee -
            rLiquidity -
            rDevAndMarketing;
        return (rAmount, rTransferAmount, rFee);
    }

    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate = _getRate();
        uint256 rLiquidity = tLiquidity * currentRate;
        _rOwned[address(this)] = _rOwned[address(this)] + rLiquidity;
        if (_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)] + tLiquidity;
    }

    function _takeDevAndMarketing(uint256 tDevAndMarketing) private {
        uint256 currentRate = _getRate();
        uint256 rDevAndMarketing = tDevAndMarketing * currentRate;
        _rOwned[devAndMarketingWallet] =
            _rOwned[devAndMarketingWallet] +
            rDevAndMarketing;
        if (_isExcluded[devAndMarketingWallet])
            _tOwned[devAndMarketingWallet] =
                _tOwned[devAndMarketingWallet] +
                tDevAndMarketing;
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal - rFee;
        _tFeeTotal = _tFeeTotal + tFee;
    }

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

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

    function _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 transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(
            sender,
            _msgSender(),
            (_allowances[sender][_msgSender()] - amount)
        );
        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue)
        public
        virtual
        returns (bool)
    {
        _approve(
            _msgSender(),
            spender,
            (_allowances[_msgSender()][spender] - subtractedValue)
        );
        return true;
    }

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

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

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

    function includeInReward(address account) external onlyOwner {
        require(_isExcluded[account], "Account is already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

    function changeDevAndMarketingWallet(address newWallet)
        public
        onlyOwner
        returns (bool)
    {
        devAndMarketingWallet = newWallet;
        _isExcludedFromFee[devAndMarketingWallet] = true;
        return true;
    }

    function transferOwnership(address newOwner) public override onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        _isExcludedFromFee[newOwner] = true;
        _transferOwnership(newOwner);
    }

    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }

    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }

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

    function isExcludedFromFee(address account) public view returns (bool) {
        return _isExcludedFromFee[account];
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","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":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":[{"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":[],"name":"autoLPFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","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":"newWallet","type":"address"}],"name":"changeDevAndMarketingWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAndMarketingFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devAndMarketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":[],"name":"reflectionFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526b02de89507556d84678000000600755600754600019620000269190620006b7565b6000196200003591906200071e565b6008556040518060400160405280600781526020017f466c794775797a00000000000000000000000000000000000000000000000000815250600a90816200007e9190620009c9565b506040518060400160405280600481526020017f464c595900000000000000000000000000000000000000000000000000000000815250600b9081620000c59190620009c9565b506012600c60006101000a81548160ff021916908360ff16021790555033600c60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003601060006101000a81548160ff021916908360ff1602179055506002601060016101000a81548160ff021916908360ff1602179055506001601060026101000a81548160ff021916908360ff1602179055506001601060046101000a81548160ff02191690831515021790555069152d02c7e14af6800000601155348015620001ad57600080fd5b50620001ce620001c2620005b260201b60201c565b620005ba60201b60201c565b60085460016000620001e5620005b260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000288573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ae919062000b1a565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000316573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033c919062000b1a565b6040518363ffffffff1660e01b81526004016200035b92919062000b5d565b6020604051808303816000875af11580156200037b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a1919062000b1a565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250506001600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160046000600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000542620005b260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600754604051620005a3919062000b9b565b60405180910390a35062000bb8565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620006c4826200067e565b9150620006d1836200067e565b925082620006e457620006e362000688565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200072b826200067e565b915062000738836200067e565b9250828210156200074e576200074d620006ef565b5b828203905092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620007db57607f821691505b602082108103620007f157620007f062000793565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200085b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200081c565b6200086786836200081c565b95508019841693508086168417925050509392505050565b6000819050919050565b6000620008aa620008a46200089e846200067e565b6200087f565b6200067e565b9050919050565b6000819050919050565b620008c68362000889565b620008de620008d582620008b1565b84845462000829565b825550505050565b600090565b620008f5620008e6565b62000902818484620008bb565b505050565b5b818110156200092a576200091e600082620008eb565b60018101905062000908565b5050565b601f82111562000979576200094381620007f7565b6200094e846200080c565b810160208510156200095e578190505b620009766200096d856200080c565b83018262000907565b50505b505050565b600082821c905092915050565b60006200099e600019846008026200097e565b1980831691505092915050565b6000620009b983836200098b565b9150826002028217905092915050565b620009d48262000759565b67ffffffffffffffff811115620009f057620009ef62000764565b5b620009fc8254620007c2565b62000a098282856200092e565b600060209050601f83116001811462000a41576000841562000a2c578287015190505b62000a388582620009ab565b86555062000aa8565b601f19841662000a5186620007f7565b60005b8281101562000a7b5784890151825560018201915060208501945060208101905062000a54565b8683101562000a9b578489015162000a97601f8916826200098b565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000ae28262000ab5565b9050919050565b62000af48162000ad5565b811462000b0057600080fd5b50565b60008151905062000b148162000ae9565b92915050565b60006020828403121562000b335762000b3262000ab0565b5b600062000b438482850162000b03565b91505092915050565b62000b578162000ad5565b82525050565b600060408201905062000b74600083018562000b4c565b62000b83602083018462000b4c565b9392505050565b62000b95816200067e565b82525050565b600060208201905062000bb2600083018462000b8a565b92915050565b60805160a05161470962000c1660003960008181610dec01528181611caa01528181611dd40152611e2b015260008181610837015281816124b501528181612596015281816125bd01528181612659015261268001526147096000f3fe6080604052600436106101d15760003560e01c8063715018a6116100f7578063a9059cbb11610095578063dd62ed3e11610064578063dd62ed3e146106c1578063e1bef5e4146106fe578063ea2f0b3714610729578063f2fde38b14610752576101d8565b8063a9059cbb146105f3578063ae3085e114610630578063c49b9a801461066d578063c74a195814610696576101d8565b80638da5cb5b116100d15780638da5cb5b1461053557806395d89b411461056057806399d977c41461058b578063a457c2d7146105b6576101d8565b8063715018a6146104b657806383ad7994146104cd57806388f82020146104f8576101d8565b80633685d4191161016f5780634a74bb021161013e5780634a74bb02146103e857806352390c02146104135780635342acb41461043c57806370a0823114610479576101d8565b80633685d4191461032e5780633950935114610357578063437823ec1461039457806349bd5a5e146103bd576101d8565b80631694505e116101ab5780631694505e1461027057806318160ddd1461029b57806323b872dd146102c6578063313ce56714610303576101d8565b806306fdde03146101dd578063095ea7b31461020857806313114a9d14610245576101d8565b366101d857005b600080fd5b3480156101e957600080fd5b506101f261077b565b6040516101ff9190613971565b60405180910390f35b34801561021457600080fd5b5061022f600480360381019061022a9190613a2c565b61080d565b60405161023c9190613a87565b60405180910390f35b34801561025157600080fd5b5061025a61082b565b6040516102679190613ab1565b60405180910390f35b34801561027c57600080fd5b50610285610835565b6040516102929190613b2b565b60405180910390f35b3480156102a757600080fd5b506102b0610859565b6040516102bd9190613ab1565b60405180910390f35b3480156102d257600080fd5b506102ed60048036038101906102e89190613b46565b610863565b6040516102fa9190613a87565b60405180910390f35b34801561030f57600080fd5b5061031861091b565b6040516103259190613bb5565b60405180910390f35b34801561033a57600080fd5b5061035560048036038101906103509190613bd0565b610932565b005b34801561036357600080fd5b5061037e60048036038101906103799190613a2c565b610c67565b60405161038b9190613a87565b60405180910390f35b3480156103a057600080fd5b506103bb60048036038101906103b69190613bd0565b610d13565b005b3480156103c957600080fd5b506103d2610dea565b6040516103df9190613c0c565b60405180910390f35b3480156103f457600080fd5b506103fd610e0e565b60405161040a9190613a87565b60405180910390f35b34801561041f57600080fd5b5061043a60048036038101906104359190613bd0565b610e21565b005b34801561044857600080fd5b50610463600480360381019061045e9190613bd0565b6110bc565b6040516104709190613a87565b60405180910390f35b34801561048557600080fd5b506104a0600480360381019061049b9190613bd0565b611112565b6040516104ad9190613ab1565b60405180910390f35b3480156104c257600080fd5b506104cb6111fd565b005b3480156104d957600080fd5b506104e2611285565b6040516104ef9190613bb5565b60405180910390f35b34801561050457600080fd5b5061051f600480360381019061051a9190613bd0565b611298565b60405161052c9190613a87565b60405180910390f35b34801561054157600080fd5b5061054a6112ee565b6040516105579190613c0c565b60405180910390f35b34801561056c57600080fd5b50610575611317565b6040516105829190613971565b60405180910390f35b34801561059757600080fd5b506105a06113a9565b6040516105ad9190613bb5565b60405180910390f35b3480156105c257600080fd5b506105dd60048036038101906105d89190613a2c565b6113bc565b6040516105ea9190613a87565b60405180910390f35b3480156105ff57600080fd5b5061061a60048036038101906106159190613a2c565b611468565b6040516106279190613a87565b60405180910390f35b34801561063c57600080fd5b5061065760048036038101906106529190613bd0565b611486565b6040516106649190613a87565b60405180910390f35b34801561067957600080fd5b50610694600480360381019061068f9190613c53565b6115c8565b005b3480156106a257600080fd5b506106ab611698565b6040516106b89190613c0c565b60405180910390f35b3480156106cd57600080fd5b506106e860048036038101906106e39190613c80565b6116be565b6040516106f59190613ab1565b60405180910390f35b34801561070a57600080fd5b50610713611745565b6040516107209190613bb5565b60405180910390f35b34801561073557600080fd5b50610750600480360381019061074b9190613bd0565b611758565b005b34801561075e57600080fd5b5061077960048036038101906107749190613bd0565b61182f565b005b6060600a805461078a90613cef565b80601f01602080910402602001604051908101604052809291908181526020018280546107b690613cef565b80156108035780601f106107d857610100808354040283529160200191610803565b820191906000526020600020905b8154815290600101906020018083116107e657829003601f168201915b5050505050905090565b600061082161081a61197e565b8484611986565b6001905092915050565b6000600954905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600754905090565b6000610870848484611b4f565b6109108461087c61197e565b84600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006108c661197e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461090b9190613d4f565b611986565b600190509392505050565b6000600c60009054906101000a900460ff16905090565b61093a61197e565b73ffffffffffffffffffffffffffffffffffffffff166109586112ee565b73ffffffffffffffffffffffffffffffffffffffff16146109ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a590613dcf565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610a3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3190613e3b565b60405180910390fd5b60005b600680549050811015610c63578173ffffffffffffffffffffffffffffffffffffffff1660068281548110610a7557610a74613e5b565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610c505760066001600680549050610acf9190613d4f565b81548110610ae057610adf613e5b565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660068281548110610b1f57610b1e613e5b565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006805480610c1657610c15613e8a565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055610c63565b8080610c5b90613eb9565b915050610a3d565b5050565b6000610d09610c7461197e565b848460036000610c8261197e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d049190613f01565b611986565b6001905092915050565b610d1b61197e565b73ffffffffffffffffffffffffffffffffffffffff16610d396112ee565b73ffffffffffffffffffffffffffffffffffffffff1614610d8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8690613dcf565b60405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601060049054906101000a900460ff1681565b610e2961197e565b73ffffffffffffffffffffffffffffffffffffffff16610e476112ee565b73ffffffffffffffffffffffffffffffffffffffff1614610e9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9490613dcf565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610f2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2190613e3b565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115610ffe57610fba600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ea8565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156111ad57600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506111f8565b6111f5600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ea8565b90505b919050565b61120561197e565b73ffffffffffffffffffffffffffffffffffffffff166112236112ee565b73ffffffffffffffffffffffffffffffffffffffff1614611279576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127090613dcf565b60405180910390fd5b6112836000611f0f565b565b601060019054906101000a900460ff1681565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600b805461132690613cef565b80601f016020809104026020016040519081016040528092919081815260200182805461135290613cef565b801561139f5780601f106113745761010080835404028352916020019161139f565b820191906000526020600020905b81548152906001019060200180831161138257829003601f168201915b5050505050905090565b601060029054906101000a900460ff1681565b600061145e6113c961197e565b8484600360006113d761197e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114599190613d4f565b611986565b6001905092915050565b600061147c61147561197e565b8484611b4f565b6001905092915050565b600061149061197e565b73ffffffffffffffffffffffffffffffffffffffff166114ae6112ee565b73ffffffffffffffffffffffffffffffffffffffff1614611504576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fb90613dcf565b60405180910390fd5b81600c60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160046000600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b6115d061197e565b73ffffffffffffffffffffffffffffffffffffffff166115ee6112ee565b73ffffffffffffffffffffffffffffffffffffffff1614611644576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163b90613dcf565b60405180910390fd5b80601060046101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161168d9190613a87565b60405180910390a150565b600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601060009054906101000a900460ff1681565b61176061197e565b73ffffffffffffffffffffffffffffffffffffffff1661177e6112ee565b73ffffffffffffffffffffffffffffffffffffffff16146117d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cb90613dcf565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61183761197e565b73ffffffffffffffffffffffffffffffffffffffff166118556112ee565b73ffffffffffffffffffffffffffffffffffffffff16146118ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a290613dcf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361191a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191190613fc9565b60405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061197b81611f0f565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036119f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ec9061405b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5b906140ed565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611b429190613ab1565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611bbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb59061417f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2490614211565b60405180910390fd5b60008111611c70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c67906142a3565b60405180910390fd5b6000611c7b30611112565b905060006011548210159050808015611ca15750601060039054906101000a900460ff16155b8015611cf957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015611d115750601060049054906101000a900460ff165b15611d25576011549150611d2482611fd3565b5b600060019050600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611dcc5750600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80611e7b57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614158015611e7a57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b5b15611e8557600090505b8015611e9457611e93612094565b5b611ea0868686846120e1565b505050505050565b6000600854821115611eef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee690614335565b60405180910390fd5b6000611ef96123f2565b90508083611f079190614384565b915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601060036101000a81548160ff0219169083151502179055506000600282611ffd9190614384565b90506000818361200d9190613d4f565b9050600047905061201d83612416565b6000814761202b9190613d4f565b90506120378382612653565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405161206a939291906143b5565b60405180910390a1505050506000601060036101000a81548160ff02191690831515021790555050565b601060029054906101000a900460ff1660ff16600f81905550601060019054906101000a900460ff1660ff16600d81905550601060009054906101000a900460ff1660ff16600e81905550565b806120ef576120ee612734565b5b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156121925750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156121a7576121a284848461274e565b6123de565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561224a5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561225f5761225a8484846129b3565b6123dd565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156123035750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561231857612313848484612c18565b6123dc565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156123ba5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156123cf576123ca848484612def565b6123db565b6123da848484612c18565b5b5b5b5b806123ec576123eb612094565b5b50505050565b60008060006123ff6130e2565b91509150808261240f9190614384565b9250505090565b6000600267ffffffffffffffff811115612433576124326143ec565b5b6040519080825280602002602001820160405280156124615781602001602082028036833780820191505090505b509050308160008151811061247957612478613e5b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561251e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125429190614430565b8160018151811061255657612555613e5b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506125bb307f000000000000000000000000000000000000000000000000000000000000000084611986565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161261d959493929190614556565b600060405180830381600087803b15801561263757600080fd5b505af115801561264b573d6000803e3d6000fd5b505050505050565b61267e307f000000000000000000000000000000000000000000000000000000000000000084611986565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806126c86112ee565b426040518863ffffffff1660e01b81526004016126ea969594939291906145b0565b60606040518083038185885af1158015612708573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061272d9190614626565b5050505050565b6000600d819055506000600e819055506000600f81905550565b60008060008061275d85613380565b93509350935093506000806000612776888787876133ea565b92509250925087600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127c79190613d4f565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128559190613d4f565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128e39190613f01565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061292f85613479565b61293884613609565b6129428187613843565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8960405161299f9190613ab1565b60405180910390a350505050505050505050565b6000806000806129c285613380565b935093509350935060008060006129db888787876133ea565b92509250925082600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a2c9190613d4f565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555086600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612aba9190613f01565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b489190613f01565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612b9485613479565b612b9d84613609565b612ba78187613843565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef89604051612c049190613ab1565b60405180910390a350505050505050505050565b600080600080612c2785613380565b93509350935093506000806000612c40888787876133ea565b92509250925082600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c919190613d4f565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d1f9190613f01565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612d6b85613479565b612d7484613609565b612d7e8187613843565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef89604051612ddb9190613ab1565b60405180910390a350505050505050505050565b600080600080612dfe85613380565b93509350935093506000806000612e17888787876133ea565b92509250925087600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e689190613d4f565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ef69190613d4f565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555086600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f849190613f01565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130129190613f01565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061305e85613479565b61306784613609565b6130718187613843565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef896040516130ce9190613ab1565b60405180910390a350505050505050505050565b600080600060085490506000600754905060005b60068054905081101561334a5782600160006006848154811061311c5761311b613e5b565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061320a57508160026000600684815481106131a2576131a1613e5b565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15613221576008546007549450945050505061337c565b600160006006838154811061323957613238613e5b565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836132aa9190613d4f565b925060026000600683815481106132c4576132c3613e5b565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826133359190613d4f565b9150808061334290613eb9565b9150506130f6565b5060075460085461335b9190614384565b8210156133735760085460075493509350505061337c565b81819350935050505b9091565b60008060008060006133918661386f565b9050600061339e87613892565b905060006133ab886138b5565b905060008183858b6133bd9190613d4f565b6133c79190613d4f565b6133d19190613d4f565b9050808484849750975097509750505050509193509193565b6000806000806133f86123f2565b9050600081896134089190614679565b9050600082896134189190614679565b9050600083896134289190614679565b9050600084896134389190614679565b905060008183858761344a9190613d4f565b6134549190613d4f565b61345e9190613d4f565b90508481859850985098505050505050509450945094915050565b60006134836123f2565b9050600081836134939190614679565b905080600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134e09190613f01565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156136045782600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135c09190613f01565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b60006136136123f2565b9050600081836136239190614679565b90508060016000600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136929190613f01565b60016000600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060056000600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561383e578260026000600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137d89190613f01565b60026000600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b816008546138519190613d4f565b600881905550806009546138659190613f01565b6009819055505050565b60006064600d54836138819190614679565b61388b9190614384565b9050919050565b60006064600e54836138a49190614679565b6138ae9190614384565b9050919050565b60006064600f54836138c79190614679565b6138d19190614384565b9050919050565b600081519050919050565b600082825260208201905092915050565b60005b838110156139125780820151818401526020810190506138f7565b83811115613921576000848401525b50505050565b6000601f19601f8301169050919050565b6000613943826138d8565b61394d81856138e3565b935061395d8185602086016138f4565b61396681613927565b840191505092915050565b6000602082019050818103600083015261398b8184613938565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006139c382613998565b9050919050565b6139d3816139b8565b81146139de57600080fd5b50565b6000813590506139f0816139ca565b92915050565b6000819050919050565b613a09816139f6565b8114613a1457600080fd5b50565b600081359050613a2681613a00565b92915050565b60008060408385031215613a4357613a42613993565b5b6000613a51858286016139e1565b9250506020613a6285828601613a17565b9150509250929050565b60008115159050919050565b613a8181613a6c565b82525050565b6000602082019050613a9c6000830184613a78565b92915050565b613aab816139f6565b82525050565b6000602082019050613ac66000830184613aa2565b92915050565b6000819050919050565b6000613af1613aec613ae784613998565b613acc565b613998565b9050919050565b6000613b0382613ad6565b9050919050565b6000613b1582613af8565b9050919050565b613b2581613b0a565b82525050565b6000602082019050613b406000830184613b1c565b92915050565b600080600060608486031215613b5f57613b5e613993565b5b6000613b6d868287016139e1565b9350506020613b7e868287016139e1565b9250506040613b8f86828701613a17565b9150509250925092565b600060ff82169050919050565b613baf81613b99565b82525050565b6000602082019050613bca6000830184613ba6565b92915050565b600060208284031215613be657613be5613993565b5b6000613bf4848285016139e1565b91505092915050565b613c06816139b8565b82525050565b6000602082019050613c216000830184613bfd565b92915050565b613c3081613a6c565b8114613c3b57600080fd5b50565b600081359050613c4d81613c27565b92915050565b600060208284031215613c6957613c68613993565b5b6000613c7784828501613c3e565b91505092915050565b60008060408385031215613c9757613c96613993565b5b6000613ca5858286016139e1565b9250506020613cb6858286016139e1565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613d0757607f821691505b602082108103613d1a57613d19613cc0565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613d5a826139f6565b9150613d65836139f6565b925082821015613d7857613d77613d20565b5b828203905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613db96020836138e3565b9150613dc482613d83565b602082019050919050565b60006020820190508181036000830152613de881613dac565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b6000613e25601b836138e3565b9150613e3082613def565b602082019050919050565b60006020820190508181036000830152613e5481613e18565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000613ec4826139f6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ef657613ef5613d20565b5b600182019050919050565b6000613f0c826139f6565b9150613f17836139f6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613f4c57613f4b613d20565b5b828201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613fb36026836138e3565b9150613fbe82613f57565b604082019050919050565b60006020820190508181036000830152613fe281613fa6565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006140456024836138e3565b915061405082613fe9565b604082019050919050565b6000602082019050818103600083015261407481614038565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006140d76022836138e3565b91506140e28261407b565b604082019050919050565b60006020820190508181036000830152614106816140ca565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006141696025836138e3565b91506141748261410d565b604082019050919050565b600060208201905081810360008301526141988161415c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006141fb6023836138e3565b91506142068261419f565b604082019050919050565b6000602082019050818103600083015261422a816141ee565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061428d6029836138e3565b915061429882614231565b604082019050919050565b600060208201905081810360008301526142bc81614280565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b600061431f602a836138e3565b915061432a826142c3565b604082019050919050565b6000602082019050818103600083015261434e81614312565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061438f826139f6565b915061439a836139f6565b9250826143aa576143a9614355565b5b828204905092915050565b60006060820190506143ca6000830186613aa2565b6143d76020830185613aa2565b6143e46040830184613aa2565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061442a816139ca565b92915050565b60006020828403121561444657614445613993565b5b60006144548482850161441b565b91505092915050565b6000819050919050565b600061448261447d6144788461445d565b613acc565b6139f6565b9050919050565b61449281614467565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6144cd816139b8565b82525050565b60006144df83836144c4565b60208301905092915050565b6000602082019050919050565b600061450382614498565b61450d81856144a3565b9350614518836144b4565b8060005b8381101561454957815161453088826144d3565b975061453b836144eb565b92505060018101905061451c565b5085935050505092915050565b600060a08201905061456b6000830188613aa2565b6145786020830187614489565b818103604083015261458a81866144f8565b90506145996060830185613bfd565b6145a66080830184613aa2565b9695505050505050565b600060c0820190506145c56000830189613bfd565b6145d26020830188613aa2565b6145df6040830187614489565b6145ec6060830186614489565b6145f96080830185613bfd565b61460660a0830184613aa2565b979650505050505050565b60008151905061462081613a00565b92915050565b60008060006060848603121561463f5761463e613993565b5b600061464d86828701614611565b935050602061465e86828701614611565b925050604061466f86828701614611565b9150509250925092565b6000614684826139f6565b915061468f836139f6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146c8576146c7613d20565b5b82820290509291505056fea26469706673582212203ff9e42ec5b8b69322f329f6065f5bd6b65478304ba16e92ce3ca806c38a956964736f6c634300080f0033

Deployed Bytecode

0x6080604052600436106101d15760003560e01c8063715018a6116100f7578063a9059cbb11610095578063dd62ed3e11610064578063dd62ed3e146106c1578063e1bef5e4146106fe578063ea2f0b3714610729578063f2fde38b14610752576101d8565b8063a9059cbb146105f3578063ae3085e114610630578063c49b9a801461066d578063c74a195814610696576101d8565b80638da5cb5b116100d15780638da5cb5b1461053557806395d89b411461056057806399d977c41461058b578063a457c2d7146105b6576101d8565b8063715018a6146104b657806383ad7994146104cd57806388f82020146104f8576101d8565b80633685d4191161016f5780634a74bb021161013e5780634a74bb02146103e857806352390c02146104135780635342acb41461043c57806370a0823114610479576101d8565b80633685d4191461032e5780633950935114610357578063437823ec1461039457806349bd5a5e146103bd576101d8565b80631694505e116101ab5780631694505e1461027057806318160ddd1461029b57806323b872dd146102c6578063313ce56714610303576101d8565b806306fdde03146101dd578063095ea7b31461020857806313114a9d14610245576101d8565b366101d857005b600080fd5b3480156101e957600080fd5b506101f261077b565b6040516101ff9190613971565b60405180910390f35b34801561021457600080fd5b5061022f600480360381019061022a9190613a2c565b61080d565b60405161023c9190613a87565b60405180910390f35b34801561025157600080fd5b5061025a61082b565b6040516102679190613ab1565b60405180910390f35b34801561027c57600080fd5b50610285610835565b6040516102929190613b2b565b60405180910390f35b3480156102a757600080fd5b506102b0610859565b6040516102bd9190613ab1565b60405180910390f35b3480156102d257600080fd5b506102ed60048036038101906102e89190613b46565b610863565b6040516102fa9190613a87565b60405180910390f35b34801561030f57600080fd5b5061031861091b565b6040516103259190613bb5565b60405180910390f35b34801561033a57600080fd5b5061035560048036038101906103509190613bd0565b610932565b005b34801561036357600080fd5b5061037e60048036038101906103799190613a2c565b610c67565b60405161038b9190613a87565b60405180910390f35b3480156103a057600080fd5b506103bb60048036038101906103b69190613bd0565b610d13565b005b3480156103c957600080fd5b506103d2610dea565b6040516103df9190613c0c565b60405180910390f35b3480156103f457600080fd5b506103fd610e0e565b60405161040a9190613a87565b60405180910390f35b34801561041f57600080fd5b5061043a60048036038101906104359190613bd0565b610e21565b005b34801561044857600080fd5b50610463600480360381019061045e9190613bd0565b6110bc565b6040516104709190613a87565b60405180910390f35b34801561048557600080fd5b506104a0600480360381019061049b9190613bd0565b611112565b6040516104ad9190613ab1565b60405180910390f35b3480156104c257600080fd5b506104cb6111fd565b005b3480156104d957600080fd5b506104e2611285565b6040516104ef9190613bb5565b60405180910390f35b34801561050457600080fd5b5061051f600480360381019061051a9190613bd0565b611298565b60405161052c9190613a87565b60405180910390f35b34801561054157600080fd5b5061054a6112ee565b6040516105579190613c0c565b60405180910390f35b34801561056c57600080fd5b50610575611317565b6040516105829190613971565b60405180910390f35b34801561059757600080fd5b506105a06113a9565b6040516105ad9190613bb5565b60405180910390f35b3480156105c257600080fd5b506105dd60048036038101906105d89190613a2c565b6113bc565b6040516105ea9190613a87565b60405180910390f35b3480156105ff57600080fd5b5061061a60048036038101906106159190613a2c565b611468565b6040516106279190613a87565b60405180910390f35b34801561063c57600080fd5b5061065760048036038101906106529190613bd0565b611486565b6040516106649190613a87565b60405180910390f35b34801561067957600080fd5b50610694600480360381019061068f9190613c53565b6115c8565b005b3480156106a257600080fd5b506106ab611698565b6040516106b89190613c0c565b60405180910390f35b3480156106cd57600080fd5b506106e860048036038101906106e39190613c80565b6116be565b6040516106f59190613ab1565b60405180910390f35b34801561070a57600080fd5b50610713611745565b6040516107209190613bb5565b60405180910390f35b34801561073557600080fd5b50610750600480360381019061074b9190613bd0565b611758565b005b34801561075e57600080fd5b5061077960048036038101906107749190613bd0565b61182f565b005b6060600a805461078a90613cef565b80601f01602080910402602001604051908101604052809291908181526020018280546107b690613cef565b80156108035780601f106107d857610100808354040283529160200191610803565b820191906000526020600020905b8154815290600101906020018083116107e657829003601f168201915b5050505050905090565b600061082161081a61197e565b8484611986565b6001905092915050565b6000600954905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600754905090565b6000610870848484611b4f565b6109108461087c61197e565b84600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006108c661197e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461090b9190613d4f565b611986565b600190509392505050565b6000600c60009054906101000a900460ff16905090565b61093a61197e565b73ffffffffffffffffffffffffffffffffffffffff166109586112ee565b73ffffffffffffffffffffffffffffffffffffffff16146109ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a590613dcf565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610a3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3190613e3b565b60405180910390fd5b60005b600680549050811015610c63578173ffffffffffffffffffffffffffffffffffffffff1660068281548110610a7557610a74613e5b565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610c505760066001600680549050610acf9190613d4f565b81548110610ae057610adf613e5b565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660068281548110610b1f57610b1e613e5b565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006805480610c1657610c15613e8a565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055610c63565b8080610c5b90613eb9565b915050610a3d565b5050565b6000610d09610c7461197e565b848460036000610c8261197e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d049190613f01565b611986565b6001905092915050565b610d1b61197e565b73ffffffffffffffffffffffffffffffffffffffff16610d396112ee565b73ffffffffffffffffffffffffffffffffffffffff1614610d8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8690613dcf565b60405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b7f000000000000000000000000fc2431decb440c6c6fe225d1c8f744136188e2d281565b601060049054906101000a900460ff1681565b610e2961197e565b73ffffffffffffffffffffffffffffffffffffffff16610e476112ee565b73ffffffffffffffffffffffffffffffffffffffff1614610e9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9490613dcf565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610f2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2190613e3b565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115610ffe57610fba600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ea8565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156111ad57600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506111f8565b6111f5600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ea8565b90505b919050565b61120561197e565b73ffffffffffffffffffffffffffffffffffffffff166112236112ee565b73ffffffffffffffffffffffffffffffffffffffff1614611279576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127090613dcf565b60405180910390fd5b6112836000611f0f565b565b601060019054906101000a900460ff1681565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600b805461132690613cef565b80601f016020809104026020016040519081016040528092919081815260200182805461135290613cef565b801561139f5780601f106113745761010080835404028352916020019161139f565b820191906000526020600020905b81548152906001019060200180831161138257829003601f168201915b5050505050905090565b601060029054906101000a900460ff1681565b600061145e6113c961197e565b8484600360006113d761197e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114599190613d4f565b611986565b6001905092915050565b600061147c61147561197e565b8484611b4f565b6001905092915050565b600061149061197e565b73ffffffffffffffffffffffffffffffffffffffff166114ae6112ee565b73ffffffffffffffffffffffffffffffffffffffff1614611504576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fb90613dcf565b60405180910390fd5b81600c60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160046000600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b6115d061197e565b73ffffffffffffffffffffffffffffffffffffffff166115ee6112ee565b73ffffffffffffffffffffffffffffffffffffffff1614611644576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163b90613dcf565b60405180910390fd5b80601060046101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161168d9190613a87565b60405180910390a150565b600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601060009054906101000a900460ff1681565b61176061197e565b73ffffffffffffffffffffffffffffffffffffffff1661177e6112ee565b73ffffffffffffffffffffffffffffffffffffffff16146117d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cb90613dcf565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61183761197e565b73ffffffffffffffffffffffffffffffffffffffff166118556112ee565b73ffffffffffffffffffffffffffffffffffffffff16146118ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a290613dcf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361191a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191190613fc9565b60405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061197b81611f0f565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036119f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ec9061405b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5b906140ed565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611b429190613ab1565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611bbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb59061417f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2490614211565b60405180910390fd5b60008111611c70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c67906142a3565b60405180910390fd5b6000611c7b30611112565b905060006011548210159050808015611ca15750601060039054906101000a900460ff16155b8015611cf957507f000000000000000000000000fc2431decb440c6c6fe225d1c8f744136188e2d273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015611d115750601060049054906101000a900460ff165b15611d25576011549150611d2482611fd3565b5b600060019050600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611dcc5750600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80611e7b57507f000000000000000000000000fc2431decb440c6c6fe225d1c8f744136188e2d273ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614158015611e7a57507f000000000000000000000000fc2431decb440c6c6fe225d1c8f744136188e2d273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b5b15611e8557600090505b8015611e9457611e93612094565b5b611ea0868686846120e1565b505050505050565b6000600854821115611eef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee690614335565b60405180910390fd5b6000611ef96123f2565b90508083611f079190614384565b915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601060036101000a81548160ff0219169083151502179055506000600282611ffd9190614384565b90506000818361200d9190613d4f565b9050600047905061201d83612416565b6000814761202b9190613d4f565b90506120378382612653565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405161206a939291906143b5565b60405180910390a1505050506000601060036101000a81548160ff02191690831515021790555050565b601060029054906101000a900460ff1660ff16600f81905550601060019054906101000a900460ff1660ff16600d81905550601060009054906101000a900460ff1660ff16600e81905550565b806120ef576120ee612734565b5b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156121925750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156121a7576121a284848461274e565b6123de565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561224a5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561225f5761225a8484846129b3565b6123dd565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156123035750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561231857612313848484612c18565b6123dc565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156123ba5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156123cf576123ca848484612def565b6123db565b6123da848484612c18565b5b5b5b5b806123ec576123eb612094565b5b50505050565b60008060006123ff6130e2565b91509150808261240f9190614384565b9250505090565b6000600267ffffffffffffffff811115612433576124326143ec565b5b6040519080825280602002602001820160405280156124615781602001602082028036833780820191505090505b509050308160008151811061247957612478613e5b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561251e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125429190614430565b8160018151811061255657612555613e5b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506125bb307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611986565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161261d959493929190614556565b600060405180830381600087803b15801561263757600080fd5b505af115801561264b573d6000803e3d6000fd5b505050505050565b61267e307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611986565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806126c86112ee565b426040518863ffffffff1660e01b81526004016126ea969594939291906145b0565b60606040518083038185885af1158015612708573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061272d9190614626565b5050505050565b6000600d819055506000600e819055506000600f81905550565b60008060008061275d85613380565b93509350935093506000806000612776888787876133ea565b92509250925087600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127c79190613d4f565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128559190613d4f565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128e39190613f01565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061292f85613479565b61293884613609565b6129428187613843565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8960405161299f9190613ab1565b60405180910390a350505050505050505050565b6000806000806129c285613380565b935093509350935060008060006129db888787876133ea565b92509250925082600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a2c9190613d4f565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555086600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612aba9190613f01565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b489190613f01565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612b9485613479565b612b9d84613609565b612ba78187613843565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef89604051612c049190613ab1565b60405180910390a350505050505050505050565b600080600080612c2785613380565b93509350935093506000806000612c40888787876133ea565b92509250925082600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c919190613d4f565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d1f9190613f01565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612d6b85613479565b612d7484613609565b612d7e8187613843565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef89604051612ddb9190613ab1565b60405180910390a350505050505050505050565b600080600080612dfe85613380565b93509350935093506000806000612e17888787876133ea565b92509250925087600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e689190613d4f565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ef69190613d4f565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555086600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f849190613f01565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130129190613f01565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061305e85613479565b61306784613609565b6130718187613843565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef896040516130ce9190613ab1565b60405180910390a350505050505050505050565b600080600060085490506000600754905060005b60068054905081101561334a5782600160006006848154811061311c5761311b613e5b565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061320a57508160026000600684815481106131a2576131a1613e5b565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15613221576008546007549450945050505061337c565b600160006006838154811061323957613238613e5b565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836132aa9190613d4f565b925060026000600683815481106132c4576132c3613e5b565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826133359190613d4f565b9150808061334290613eb9565b9150506130f6565b5060075460085461335b9190614384565b8210156133735760085460075493509350505061337c565b81819350935050505b9091565b60008060008060006133918661386f565b9050600061339e87613892565b905060006133ab886138b5565b905060008183858b6133bd9190613d4f565b6133c79190613d4f565b6133d19190613d4f565b9050808484849750975097509750505050509193509193565b6000806000806133f86123f2565b9050600081896134089190614679565b9050600082896134189190614679565b9050600083896134289190614679565b9050600084896134389190614679565b905060008183858761344a9190613d4f565b6134549190613d4f565b61345e9190613d4f565b90508481859850985098505050505050509450945094915050565b60006134836123f2565b9050600081836134939190614679565b905080600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134e09190613f01565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156136045782600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135c09190613f01565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b60006136136123f2565b9050600081836136239190614679565b90508060016000600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136929190613f01565b60016000600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060056000600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561383e578260026000600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137d89190613f01565b60026000600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b816008546138519190613d4f565b600881905550806009546138659190613f01565b6009819055505050565b60006064600d54836138819190614679565b61388b9190614384565b9050919050565b60006064600e54836138a49190614679565b6138ae9190614384565b9050919050565b60006064600f54836138c79190614679565b6138d19190614384565b9050919050565b600081519050919050565b600082825260208201905092915050565b60005b838110156139125780820151818401526020810190506138f7565b83811115613921576000848401525b50505050565b6000601f19601f8301169050919050565b6000613943826138d8565b61394d81856138e3565b935061395d8185602086016138f4565b61396681613927565b840191505092915050565b6000602082019050818103600083015261398b8184613938565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006139c382613998565b9050919050565b6139d3816139b8565b81146139de57600080fd5b50565b6000813590506139f0816139ca565b92915050565b6000819050919050565b613a09816139f6565b8114613a1457600080fd5b50565b600081359050613a2681613a00565b92915050565b60008060408385031215613a4357613a42613993565b5b6000613a51858286016139e1565b9250506020613a6285828601613a17565b9150509250929050565b60008115159050919050565b613a8181613a6c565b82525050565b6000602082019050613a9c6000830184613a78565b92915050565b613aab816139f6565b82525050565b6000602082019050613ac66000830184613aa2565b92915050565b6000819050919050565b6000613af1613aec613ae784613998565b613acc565b613998565b9050919050565b6000613b0382613ad6565b9050919050565b6000613b1582613af8565b9050919050565b613b2581613b0a565b82525050565b6000602082019050613b406000830184613b1c565b92915050565b600080600060608486031215613b5f57613b5e613993565b5b6000613b6d868287016139e1565b9350506020613b7e868287016139e1565b9250506040613b8f86828701613a17565b9150509250925092565b600060ff82169050919050565b613baf81613b99565b82525050565b6000602082019050613bca6000830184613ba6565b92915050565b600060208284031215613be657613be5613993565b5b6000613bf4848285016139e1565b91505092915050565b613c06816139b8565b82525050565b6000602082019050613c216000830184613bfd565b92915050565b613c3081613a6c565b8114613c3b57600080fd5b50565b600081359050613c4d81613c27565b92915050565b600060208284031215613c6957613c68613993565b5b6000613c7784828501613c3e565b91505092915050565b60008060408385031215613c9757613c96613993565b5b6000613ca5858286016139e1565b9250506020613cb6858286016139e1565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613d0757607f821691505b602082108103613d1a57613d19613cc0565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613d5a826139f6565b9150613d65836139f6565b925082821015613d7857613d77613d20565b5b828203905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613db96020836138e3565b9150613dc482613d83565b602082019050919050565b60006020820190508181036000830152613de881613dac565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b6000613e25601b836138e3565b9150613e3082613def565b602082019050919050565b60006020820190508181036000830152613e5481613e18565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000613ec4826139f6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ef657613ef5613d20565b5b600182019050919050565b6000613f0c826139f6565b9150613f17836139f6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613f4c57613f4b613d20565b5b828201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613fb36026836138e3565b9150613fbe82613f57565b604082019050919050565b60006020820190508181036000830152613fe281613fa6565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006140456024836138e3565b915061405082613fe9565b604082019050919050565b6000602082019050818103600083015261407481614038565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006140d76022836138e3565b91506140e28261407b565b604082019050919050565b60006020820190508181036000830152614106816140ca565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006141696025836138e3565b91506141748261410d565b604082019050919050565b600060208201905081810360008301526141988161415c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006141fb6023836138e3565b91506142068261419f565b604082019050919050565b6000602082019050818103600083015261422a816141ee565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061428d6029836138e3565b915061429882614231565b604082019050919050565b600060208201905081810360008301526142bc81614280565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b600061431f602a836138e3565b915061432a826142c3565b604082019050919050565b6000602082019050818103600083015261434e81614312565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061438f826139f6565b915061439a836139f6565b9250826143aa576143a9614355565b5b828204905092915050565b60006060820190506143ca6000830186613aa2565b6143d76020830185613aa2565b6143e46040830184613aa2565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061442a816139ca565b92915050565b60006020828403121561444657614445613993565b5b60006144548482850161441b565b91505092915050565b6000819050919050565b600061448261447d6144788461445d565b613acc565b6139f6565b9050919050565b61449281614467565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6144cd816139b8565b82525050565b60006144df83836144c4565b60208301905092915050565b6000602082019050919050565b600061450382614498565b61450d81856144a3565b9350614518836144b4565b8060005b8381101561454957815161453088826144d3565b975061453b836144eb565b92505060018101905061451c565b5085935050505092915050565b600060a08201905061456b6000830188613aa2565b6145786020830187614489565b818103604083015261458a81866144f8565b90506145996060830185613bfd565b6145a66080830184613aa2565b9695505050505050565b600060c0820190506145c56000830189613bfd565b6145d26020830188613aa2565b6145df6040830187614489565b6145ec6060830186614489565b6145f96080830185613bfd565b61460660a0830184613aa2565b979650505050505050565b60008151905061462081613a00565b92915050565b60008060006060848603121561463f5761463e613993565b5b600061464d86828701614611565b935050602061465e86828701614611565b925050604061466f86828701614611565b9150509250925092565b6000614684826139f6565b915061468f836139f6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146c8576146c7613d20565b5b82820290509291505056fea26469706673582212203ff9e42ec5b8b69322f329f6065f5bd6b65478304ba16e92ce3ca806c38a956964736f6c634300080f0033

Deployed Bytecode Sourcemap

11078:18141:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13399:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25473:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27165:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12153:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13676:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26053:352;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13585:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27600:477;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26413:299;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28639:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12211:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12286:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27260:332;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29055:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13779:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1610:103;;;;;;;;;;;;;:::i;:::-;;12072:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27037:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1387:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13490;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12109:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26720:309;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15094:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28085:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28876:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11760:58;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25281:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12039:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28758:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28346:285;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13399:83;13436:13;13469:5;13462:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13399:83;:::o;25473:193::-;25575:4;25597:39;25606:12;:10;:12::i;:::-;25620:7;25629:6;25597:8;:39::i;:::-;25654:4;25647:11;;25473:193;;;;:::o;27165:87::-;27207:7;27234:10;;27227:17;;27165:87;:::o;12153:51::-;;;:::o;13676:95::-;13729:7;13756;;13749:14;;13676:95;:::o;26053:352::-;26185:4;26202:36;26212:6;26220:9;26231:6;26202:9;:36::i;:::-;26249:126;26272:6;26293:12;:10;:12::i;:::-;26357:6;26321:11;:19;26333:6;26321:19;;;;;;;;;;;;;;;:33;26341:12;:10;:12::i;:::-;26321:33;;;;;;;;;;;;;;;;:42;;;;:::i;:::-;26249:8;:126::i;:::-;26393:4;26386:11;;26053:352;;;;;:::o;13585:83::-;13626:5;13651:9;;;;;;;;;;;13644:16;;13585:83;:::o;27600:477::-;1533:12;:10;:12::i;:::-;1522:23;;:7;:5;:7::i;:::-;:23;;;1514:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27680:11:::1;:20;27692:7;27680:20;;;;;;;;;;;;;;;;;;;;;;;;;27672:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;27748:9;27743:327;27767:9;:16;;;;27763:1;:20;27743:327;;;27825:7;27809:23;;:9;27819:1;27809:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:23;;::::0;27805:254:::1;;27868:9;27897:1;27878:9;:16;;;;:20;;;;:::i;:::-;27868:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27853:9;27863:1;27853:12;;;;;;;;:::i;:::-;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;27937:1;27918:7;:16;27926:7;27918:16;;;;;;;;;;;;;;;:20;;;;27980:5;27957:11;:20;27969:7;27957:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;28004:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;28038:5;;27805:254;27785:3;;;;;:::i;:::-;;;;27743:327;;;;27600:477:::0;:::o;26413:299::-;26528:4;26550:132;26573:12;:10;:12::i;:::-;26600:7;26660:10;26623:11;:25;26635:12;:10;:12::i;:::-;26623:25;;;;;;;;;;;;;;;:34;26649:7;26623:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;26550:8;:132::i;:::-;26700:4;26693:11;;26413:299;;;;:::o;28639:111::-;1533:12;:10;:12::i;:::-;1522:23;;:7;:5;:7::i;:::-;:23;;;1514:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28738:4:::1;28708:18;:27;28727:7;28708:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;28639:111:::0;:::o;12211:38::-;;;:::o;12286:40::-;;;;;;;;;;;;;:::o;27260:332::-;1533:12;:10;:12::i;:::-;1522:23;;:7;:5;:7::i;:::-;:23;;;1514:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27341:11:::1;:20;27353:7;27341:20;;;;;;;;;;;;;;;;;;;;;;;;;27340:21;27332:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;27427:1;27408:7;:16;27416:7;27408:16;;;;;;;;;;;;;;;;:20;27404:109;;;27464:37;27484:7;:16;27492:7;27484:16;;;;;;;;;;;;;;;;27464:19;:37::i;:::-;27445:7;:16;27453:7;27445:16;;;;;;;;;;;;;;;:56;;;;27404:109;27546:4;27523:11;:20;27535:7;27523:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;27561:9;27576:7;27561:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27260:332:::0;:::o;29055:124::-;29120:4;29144:18;:27;29163:7;29144:27;;;;;;;;;;;;;;;;;;;;;;;;;29137:34;;29055:124;;;:::o;13779:198::-;13845:7;13869:11;:20;13881:7;13869:20;;;;;;;;;;;;;;;;;;;;;;;;;13865:49;;;13898:7;:16;13906:7;13898:16;;;;;;;;;;;;;;;;13891:23;;;;13865:49;13932:37;13952:7;:16;13960:7;13952:16;;;;;;;;;;;;;;;;13932:19;:37::i;:::-;13925:44;;13779:198;;;;:::o;1610:103::-;1533:12;:10;:12::i;:::-;1522:23;;:7;:5;:7::i;:::-;:23;;;1514:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1675:30:::1;1702:1;1675:18;:30::i;:::-;1610:103::o:0;12072:30::-;;;;;;;;;;;;;:::o;27037:120::-;27105:4;27129:11;:20;27141:7;27129:20;;;;;;;;;;;;;;;;;;;;;;;;;27122:27;;27037:120;;;:::o;1387:87::-;1433:7;1460:6;;;;;;;;;;;1453:13;;1387:87;:::o;13490:::-;13529:13;13562:7;13555:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13490:87;:::o;12109:35::-;;;;;;;;;;;;;:::o;26720:309::-;26840:4;26862:137;26885:12;:10;:12::i;:::-;26912:7;26972:15;26935:11;:25;26947:12;:10;:12::i;:::-;26935:25;;;;;;;;;;;;;;;:34;26961:7;26935:34;;;;;;;;;;;;;;;;:52;;;;:::i;:::-;26862:8;:137::i;:::-;27017:4;27010:11;;26720:309;;;;:::o;15094:199::-;15199:4;15221:42;15231:12;:10;:12::i;:::-;15245:9;15256:6;15221:9;:42::i;:::-;15281:4;15274:11;;15094:199;;;;:::o;28085:253::-;28194:4;1533:12;:10;:12::i;:::-;1522:23;;:7;:5;:7::i;:::-;:23;;;1514:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28240:9:::1;28216:21;;:33;;;;;;;;;;;;;;;;;;28304:4;28260:18;:41;28279:21;;;;;;;;;;;28260:41;;;;;;;;;;;;;;;;:48;;;;;;;;;;;;;;;;;;28326:4;28319:11;;28085:253:::0;;;:::o;28876:171::-;1533:12;:10;:12::i;:::-;1522:23;;:7;:5;:7::i;:::-;:23;;;1514:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28977:8:::1;28953:21;;:32;;;;;;;;;;;;;;;;;;29001:38;29030:8;29001:38;;;;;;:::i;:::-;;;;;;;;28876:171:::0;:::o;11760:58::-;;;;;;;;;;;;;:::o;25281:184::-;25398:7;25430:11;:18;25442:5;25430:18;;;;;;;;;;;;;;;:27;25449:7;25430:27;;;;;;;;;;;;;;;;25423:34;;25281:184;;;;:::o;12039:26::-;;;;;;;;;;;;;:::o;28758:110::-;1533:12;:10;:12::i;:::-;1522:23;;:7;:5;:7::i;:::-;:23;;;1514:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28855:5:::1;28825:18;:27;28844:7;28825:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;28758:110:::0;:::o;28346:285::-;1533:12;:10;:12::i;:::-;1522:23;;:7;:5;:7::i;:::-;:23;;;1514:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28470:1:::1;28450:22;;:8;:22;;::::0;28428:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;28580:4;28549:18;:28;28568:8;28549:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;28595:28;28614:8;28595:18;:28::i;:::-;28346:285:::0;:::o;895:98::-;948:7;975:10;968:17;;895:98;:::o;25674:371::-;25818:1;25801:19;;:5;:19;;;25793:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25899:1;25880:21;;:7;:21;;;25872:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25983:6;25953:11;:18;25965:5;25953:18;;;;;;;;;;;;;;;:27;25972:7;25953:27;;;;;;;;;;;;;;;:36;;;;26021:7;26005:32;;26014:5;26005:32;;;26030:6;26005:32;;;;;;:::i;:::-;;;;;;;;25674:371;;;:::o;15301:1174::-;15439:1;15423:18;;:4;:18;;;15415:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15516:1;15502:16;;:2;:16;;;15494:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;15586:1;15577:6;:10;15569:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;15646:28;15677:24;15695:4;15677:9;:24::i;:::-;15646:55;;15714:24;15778:29;;15741:20;:66;;15714:93;;15838:19;:53;;;;;15875:16;;;;;;;;;;;15874:17;15838:53;:91;;;;;15916:13;15908:21;;:4;:21;;;;15838:91;:129;;;;;15946:21;;;;;;;;;;;15838:129;15820:291;;;16017:29;;15994:52;;16063:36;16078:20;16063:14;:36::i;:::-;15820:291;16123:12;16138:4;16123:19;;16173:18;:24;16192:4;16173:24;;;;;;;;;;;;;;;;;;;;;;;;;:63;;;;16214:18;:22;16233:2;16214:22;;;;;;;;;;;;;;;;;;;;;;;;;16173:63;:126;;;;16262:13;16254:21;;:4;:21;;;;:44;;;;;16285:13;16279:19;;:2;:19;;;;16254:44;16173:126;16155:198;;;16336:5;16326:15;;16155:198;16369:7;16365:49;;;16393:9;:7;:9::i;:::-;16365:49;16426:41;16441:4;16447:2;16451:6;16459:7;16426:14;:41::i;:::-;15404:1071;;;15301:1174;;;:::o;13985:320::-;14080:7;14138;;14127;:18;;14105:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;14226:19;14248:10;:8;:10::i;:::-;14226:32;;14286:11;14276:7;:21;;;;:::i;:::-;14269:28;;;13985:320;;;:::o;1967:191::-;2041:16;2060:6;;;;;;;;;;;2041:25;;2086:8;2077:6;;:17;;;;;;;;;;;;;;;;;;2141:8;2110:40;;2131:8;2110:40;;;;;;;;;;;;2030:128;1967:191;:::o;16483:465::-;12718:4;12699:16;;:23;;;;;;;;;;;;;;;;;;16568:12:::1;16606:1;16583:20;:24;;;;:::i;:::-;16568:39;;16618:17;16661:4;16638:20;:27;;;;:::i;:::-;16618:47;;16678:22;16703:21;16678:46;;16737:22;16754:4;16737:16;:22::i;:::-;16772:18;16817:14;16793:21;:38;;;;:::i;:::-;16772:59;;16844:35;16857:9;16868:10;16844:12;:35::i;:::-;16897:43;16912:4;16918:10;16930:9;16897:43;;;;;;;;:::i;:::-;;;;;;;;16557:391;;;;12764:5:::0;12745:16;;:24;;;;;;;;;;;;;;;;;;16483:465;:::o;18785:160::-;18845:18;;;;;;;;;;;18823:40;;:19;:40;;;;18891:13;;;;;;;;;;;18874:30;;:14;:30;;;;18928:9;;;;;;;;;;;18915:22;;:10;:22;;;;18785:160::o;17809:832::-;17965:7;17960:28;;17974:14;:12;:14::i;:::-;17960:28;18005:11;:19;18017:6;18005:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;18029:11;:22;18041:9;18029:22;;;;;;;;;;;;;;;;;;;;;;;;;18028:23;18005:46;18001:597;;;18068:48;18090:6;18098:9;18109:6;18068:21;:48::i;:::-;18001:597;;;18139:11;:19;18151:6;18139:19;;;;;;;;;;;;;;;;;;;;;;;;;18138:20;:46;;;;;18162:11;:22;18174:9;18162:22;;;;;;;;;;;;;;;;;;;;;;;;;18138:46;18134:464;;;18201:46;18221:6;18229:9;18240:6;18201:19;:46::i;:::-;18134:464;;;18270:11;:19;18282:6;18270:19;;;;;;;;;;;;;;;;;;;;;;;;;18269:20;:47;;;;;18294:11;:22;18306:9;18294:22;;;;;;;;;;;;;;;;;;;;;;;;;18293:23;18269:47;18265:333;;;18333:44;18351:6;18359:9;18370:6;18333:17;:44::i;:::-;18265:333;;;18399:11;:19;18411:6;18399:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;18422:11;:22;18434:9;18422:22;;;;;;;;;;;;;;;;;;;;;;;;;18399:45;18395:203;;;18461:48;18483:6;18491:9;18502:6;18461:21;:48::i;:::-;18395:203;;;18542:44;18560:6;18568:9;18579:6;18542:17;:44::i;:::-;18395:203;18265:333;18134:464;18001:597;18615:7;18610:23;;18624:9;:7;:9::i;:::-;18610:23;17809:832;;;;:::o;14313:161::-;14355:7;14376:15;14393;14412:19;:17;:19::i;:::-;14375:56;;;;14459:7;14449;:17;;;;:::i;:::-;14442:24;;;;14313:161;:::o;16956:475::-;17022:21;17060:1;17046:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17022:40;;17091:4;17073;17078:1;17073:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;17117:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17107:4;17112:1;17107:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;17152:62;17169:4;17184:15;17202:11;17152:8;:62::i;:::-;17227:15;:66;;;17308:11;17334:1;17350:4;17377;17397:15;17227:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17011:420;16956:475;:::o;17439:362::-;17520:62;17537:4;17552:15;17570:11;17520:8;:62::i;:::-;17595:15;:31;;;17634:9;17667:4;17687:11;17713:1;17729;17745:7;:5;:7::i;:::-;17767:15;17595:198;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;17439:362;;:::o;18649:128::-;18709:1;18692:14;:18;;;;18734:1;18721:10;:14;;;;18768:1;18746:19;:23;;;;18649:128::o;18953:866::-;19104:23;19142:12;19169:18;19202:24;19240:20;19252:7;19240:11;:20::i;:::-;19089:171;;;;;;;;19272:15;19289:23;19314:12;19330:119;19356:7;19378:4;19397:10;19422:16;19330:11;:119::i;:::-;19271:178;;;;;;19498:7;19480;:15;19488:6;19480:15;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;19462:7;:15;19470:6;19462:15;;;;;;;;;;;;;;;:43;;;;19552:7;19534;:15;19542:6;19534:15;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;19516:7;:15;19524:6;19516:15;;;;;;;;;;;;;;;:43;;;;19612:15;19591:7;:18;19599:9;19591:18;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;19570:7;:18;19578:9;19570:18;;;;;;;;;;;;;;;:57;;;;19640:26;19655:10;19640:14;:26::i;:::-;19677:38;19698:16;19677:20;:38::i;:::-;19726:23;19738:4;19744;19726:11;:23::i;:::-;19784:9;19767:44;;19776:6;19767:44;;;19795:15;19767:44;;;;;;:::i;:::-;;;;;;;;19078:741;;;;;;;18953:866;;;:::o;19827:878::-;19976:23;20014:12;20041:18;20074:24;20112:20;20124:7;20112:11;:20::i;:::-;19961:171;;;;;;;;20144:15;20161:23;20186:12;20202:119;20228:7;20250:4;20269:10;20294:16;20202:11;:119::i;:::-;20143:178;;;;;;20370:7;20352;:15;20360:6;20352:15;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;20334:7;:15;20342:6;20334:15;;;;;;;;;;;;;;;:43;;;;20430:15;20409:7;:18;20417:9;20409:18;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;20388:7;:18;20396:9;20388:18;;;;;;;;;;;;;;;:57;;;;20498:15;20477:7;:18;20485:9;20477:18;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;20456:7;:18;20464:9;20456:18;;;;;;;;;;;;;;;:57;;;;20526:26;20541:10;20526:14;:26::i;:::-;20563:38;20584:16;20563:20;:38::i;:::-;20612:23;20624:4;20630;20612:11;:23::i;:::-;20670:9;20653:44;;20662:6;20653:44;;;20681:15;20653:44;;;;;;:::i;:::-;;;;;;;;19950:755;;;;;;;19827:878;;;:::o;20713:808::-;20860:23;20898:12;20925:18;20958:24;20996:20;21008:7;20996:11;:20::i;:::-;20845:171;;;;;;;;21028:15;21045:23;21070:12;21086:119;21112:7;21134:4;21153:10;21178:16;21086:11;:119::i;:::-;21027:178;;;;;;21254:7;21236;:15;21244:6;21236:15;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;21218:7;:15;21226:6;21218:15;;;;;;;;;;;;;;;:43;;;;21314:15;21293:7;:18;21301:9;21293:18;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;21272:7;:18;21280:9;21272:18;;;;;;;;;;;;;;;:57;;;;21342:26;21357:10;21342:14;:26::i;:::-;21379:38;21400:16;21379:20;:38::i;:::-;21428:23;21440:4;21446;21428:11;:23::i;:::-;21486:9;21469:44;;21478:6;21469:44;;;21497:15;21469:44;;;;;;:::i;:::-;;;;;;;;20834:687;;;;;;;20713:808;;;:::o;21529:934::-;21680:23;21718:12;21745:18;21778:24;21816:20;21828:7;21816:11;:20::i;:::-;21665:171;;;;;;;;21848:15;21865:23;21890:12;21906:119;21932:7;21954:4;21973:10;21998:16;21906:11;:119::i;:::-;21847:178;;;;;;22074:7;22056;:15;22064:6;22056:15;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;22038:7;:15;22046:6;22038:15;;;;;;;;;;;;;;;:43;;;;22128:7;22110;:15;22118:6;22110:15;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;22092:7;:15;22100:6;22092:15;;;;;;;;;;;;;;;:43;;;;22188:15;22167:7;:18;22175:9;22167:18;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;22146:7;:18;22154:9;22146:18;;;;;;;;;;;;;;;:57;;;;22256:15;22235:7;:18;22243:9;22235:18;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;22214:7;:18;22222:9;22214:18;;;;;;;;;;;;;;;:57;;;;22284:26;22299:10;22284:14;:26::i;:::-;22321:38;22342:16;22321:20;:38::i;:::-;22370:23;22382:4;22388;22370:11;:23::i;:::-;22428:9;22411:44;;22420:6;22411:44;;;22439:15;22411:44;;;;;;:::i;:::-;;;;;;;;21654:809;;;;;;;21529:934;;;:::o;14482:604::-;14533:7;14542;14562:15;14580:7;;14562:25;;14598:15;14616:7;;14598:25;;14641:9;14636:332;14660:9;:16;;;;14656:1;:20;14636:332;;;14744:7;14720;:21;14728:9;14738:1;14728:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14720:21;;;;;;;;;;;;;;;;:31;:83;;;;14796:7;14772;:21;14780:9;14790:1;14780:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14772:21;;;;;;;;;;;;;;;;:31;14720:83;14698:146;;;14827:7;;14836;;14819:25;;;;;;;;;14698:146;14879:7;:21;14887:9;14897:1;14887:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14879:21;;;;;;;;;;;;;;;;14869:7;:31;;;;:::i;:::-;14859:41;;14935:7;:21;14943:9;14953:1;14943:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14935:21;;;;;;;;;;;;;;;;14925:7;:31;;;;:::i;:::-;14915:41;;14678:3;;;;;:::i;:::-;;;;14636:332;;;;15005:7;;14995;;:17;;;;:::i;:::-;14984:7;:29;14980:60;;;15023:7;;15032;;15015:25;;;;;;;;14980:60;15061:7;15070;15053:25;;;;;;14482:604;;;:::o;22471:578::-;22572:7;22594;22616;22638;22673:12;22688:24;22704:7;22688:15;:24::i;:::-;22673:39;;22723:18;22744:30;22766:7;22744:21;:30::i;:::-;22723:51;;22785:24;22812:36;22840:7;22812:27;:36::i;:::-;22785:63;;22859:23;22954:16;22928:10;22908:4;22885:7;:27;;;;:::i;:::-;:53;;;;:::i;:::-;:85;;;;:::i;:::-;22859:111;;22989:15;23006:4;23012:10;23024:16;22981:60;;;;;;;;;;;;22471:578;;;;;:::o;23565:715::-;23769:7;23791;23813;23848:19;23870:10;:8;:10::i;:::-;23848:32;;23891:15;23919:11;23909:7;:21;;;;:::i;:::-;23891:39;;23941:12;23963:11;23956:4;:18;;;;:::i;:::-;23941:33;;23985:18;24019:11;24006:10;:24;;;;:::i;:::-;23985:45;;24041:24;24087:11;24068:16;:30;;;;:::i;:::-;24041:57;;24111:23;24206:16;24180:10;24160:4;24137:7;:27;;;;:::i;:::-;:53;;;;:::i;:::-;:85;;;;:::i;:::-;24111:111;;24241:7;24250:15;24267:4;24233:39;;;;;;;;;;;;23565:715;;;;;;;;:::o;24288:346::-;24351:19;24373:10;:8;:10::i;:::-;24351:32;;24394:18;24428:11;24415:10;:24;;;;:::i;:::-;24394:45;;24500:10;24475:7;:22;24491:4;24475:22;;;;;;;;;;;;;;;;:35;;;;:::i;:::-;24450:7;:22;24466:4;24450:22;;;;;;;;;;;;;;;:60;;;;24525:11;:26;24545:4;24525:26;;;;;;;;;;;;;;;;;;;;;;;;;24521:105;;;24616:10;24591:7;:22;24607:4;24591:22;;;;;;;;;;;;;;;;:35;;;;:::i;:::-;24566:7;:22;24582:4;24566:22;;;;;;;;;;;;;;;:60;;;;24521:105;24340:294;;24288:346;:::o;24642:482::-;24717:19;24739:10;:8;:10::i;:::-;24717:32;;24760:24;24806:11;24787:16;:30;;;;:::i;:::-;24760:57;;24920:16;24874:7;:30;24882:21;;;;;;;;;;;24874:30;;;;;;;;;;;;;;;;:62;;;;:::i;:::-;24828:7;:30;24836:21;;;;;;;;;;;24828:30;;;;;;;;;;;;;;;:108;;;;24951:11;:34;24963:21;;;;;;;;;;;24951:34;;;;;;;;;;;;;;;;;;;;;;;;;24947:169;;;25100:16;25050:7;:30;25058:21;;;;;;;;;;;25050:30;;;;;;;;;;;;;;;;:66;;;;:::i;:::-;25000:7;:30;25008:21;;;;;;;;;;;25000:30;;;;;;;;;;;;;;;:116;;;;24947:169;24706:418;;24642:482;:::o;25132:141::-;25220:4;25210:7;;:14;;;;:::i;:::-;25200:7;:24;;;;25261:4;25248:10;;:17;;;;:::i;:::-;25235:10;:30;;;;25132:141;;:::o;23057:135::-;23121:7;23178:5;23159:14;;23149:7;:24;;;;:::i;:::-;23148:36;;;;:::i;:::-;23141:43;;23057:135;;;:::o;23200:167::-;23297:7;23354:5;23340:10;;23330:7;:20;;;;:::i;:::-;23329:30;;;;:::i;:::-;23322:37;;23200:167;;;:::o;23375:182::-;23478:7;23544:5;23521:19;;23511:7;:29;;;;:::i;:::-;23510:39;;;;:::i;:::-;23503:46;;23375:182;;;:::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:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:118::-;3581:24;3599:5;3581:24;:::i;:::-;3576:3;3569:37;3494:118;;:::o;3618:222::-;3711:4;3749:2;3738:9;3734:18;3726:26;;3762:71;3830:1;3819:9;3815:17;3806:6;3762:71;:::i;:::-;3618:222;;;;:::o;3846:60::-;3874:3;3895:5;3888:12;;3846:60;;;:::o;3912:142::-;3962:9;3995:53;4013:34;4022:24;4040:5;4022:24;:::i;:::-;4013:34;:::i;:::-;3995:53;:::i;:::-;3982:66;;3912:142;;;:::o;4060:126::-;4110:9;4143:37;4174:5;4143:37;:::i;:::-;4130:50;;4060:126;;;:::o;4192:152::-;4268:9;4301:37;4332:5;4301:37;:::i;:::-;4288:50;;4192:152;;;:::o;4350:183::-;4463:63;4520:5;4463:63;:::i;:::-;4458:3;4451:76;4350:183;;:::o;4539:274::-;4658:4;4696:2;4685:9;4681:18;4673:26;;4709:97;4803:1;4792:9;4788:17;4779:6;4709:97;:::i;:::-;4539:274;;;;:::o;4819:619::-;4896:6;4904;4912;4961:2;4949:9;4940:7;4936:23;4932:32;4929:119;;;4967:79;;:::i;:::-;4929:119;5087:1;5112:53;5157:7;5148:6;5137:9;5133:22;5112:53;:::i;:::-;5102:63;;5058:117;5214:2;5240:53;5285:7;5276:6;5265:9;5261:22;5240:53;:::i;:::-;5230:63;;5185:118;5342:2;5368:53;5413:7;5404:6;5393:9;5389:22;5368:53;:::i;:::-;5358:63;;5313:118;4819:619;;;;;:::o;5444:86::-;5479:7;5519:4;5512:5;5508:16;5497:27;;5444:86;;;:::o;5536:112::-;5619:22;5635:5;5619:22;:::i;:::-;5614:3;5607:35;5536:112;;:::o;5654:214::-;5743:4;5781:2;5770:9;5766:18;5758:26;;5794:67;5858:1;5847:9;5843:17;5834:6;5794:67;:::i;:::-;5654:214;;;;:::o;5874:329::-;5933:6;5982:2;5970:9;5961:7;5957:23;5953:32;5950:119;;;5988:79;;:::i;:::-;5950:119;6108:1;6133:53;6178:7;6169:6;6158:9;6154:22;6133:53;:::i;:::-;6123:63;;6079:117;5874:329;;;;:::o;6209:118::-;6296:24;6314:5;6296:24;:::i;:::-;6291:3;6284:37;6209:118;;:::o;6333:222::-;6426:4;6464:2;6453:9;6449:18;6441:26;;6477:71;6545:1;6534:9;6530:17;6521:6;6477:71;:::i;:::-;6333:222;;;;:::o;6561:116::-;6631:21;6646:5;6631:21;:::i;:::-;6624:5;6621:32;6611:60;;6667:1;6664;6657:12;6611:60;6561:116;:::o;6683:133::-;6726:5;6764:6;6751:20;6742:29;;6780:30;6804:5;6780:30;:::i;:::-;6683:133;;;;:::o;6822:323::-;6878:6;6927:2;6915:9;6906:7;6902:23;6898:32;6895:119;;;6933:79;;:::i;:::-;6895:119;7053:1;7078:50;7120:7;7111:6;7100:9;7096:22;7078:50;:::i;:::-;7068:60;;7024:114;6822:323;;;;:::o;7151:474::-;7219:6;7227;7276:2;7264:9;7255:7;7251:23;7247:32;7244:119;;;7282:79;;:::i;:::-;7244:119;7402:1;7427:53;7472:7;7463:6;7452:9;7448:22;7427:53;:::i;:::-;7417:63;;7373:117;7529:2;7555:53;7600:7;7591:6;7580:9;7576:22;7555:53;:::i;:::-;7545:63;;7500:118;7151:474;;;;;:::o;7631:180::-;7679:77;7676:1;7669:88;7776:4;7773:1;7766:15;7800:4;7797:1;7790:15;7817:320;7861:6;7898:1;7892:4;7888:12;7878:22;;7945:1;7939:4;7935:12;7966:18;7956:81;;8022:4;8014:6;8010:17;8000:27;;7956:81;8084:2;8076:6;8073:14;8053:18;8050:38;8047:84;;8103:18;;:::i;:::-;8047:84;7868:269;7817:320;;;:::o;8143:180::-;8191:77;8188:1;8181:88;8288:4;8285:1;8278:15;8312:4;8309:1;8302:15;8329:191;8369:4;8389:20;8407:1;8389:20;:::i;:::-;8384:25;;8423:20;8441:1;8423:20;:::i;:::-;8418:25;;8462:1;8459;8456:8;8453:34;;;8467:18;;:::i;:::-;8453:34;8512:1;8509;8505:9;8497:17;;8329:191;;;;:::o;8526:182::-;8666:34;8662:1;8654:6;8650:14;8643:58;8526:182;:::o;8714:366::-;8856:3;8877:67;8941:2;8936:3;8877:67;:::i;:::-;8870:74;;8953:93;9042:3;8953:93;:::i;:::-;9071:2;9066:3;9062:12;9055:19;;8714:366;;;:::o;9086:419::-;9252:4;9290:2;9279:9;9275:18;9267:26;;9339:9;9333:4;9329:20;9325:1;9314:9;9310:17;9303:47;9367:131;9493:4;9367:131;:::i;:::-;9359:139;;9086:419;;;:::o;9511:177::-;9651:29;9647:1;9639:6;9635:14;9628:53;9511:177;:::o;9694:366::-;9836:3;9857:67;9921:2;9916:3;9857:67;:::i;:::-;9850:74;;9933:93;10022:3;9933:93;:::i;:::-;10051:2;10046:3;10042:12;10035:19;;9694:366;;;:::o;10066:419::-;10232:4;10270:2;10259:9;10255:18;10247:26;;10319:9;10313:4;10309:20;10305:1;10294:9;10290:17;10283:47;10347:131;10473:4;10347:131;:::i;:::-;10339:139;;10066:419;;;:::o;10491:180::-;10539:77;10536:1;10529:88;10636:4;10633:1;10626:15;10660:4;10657:1;10650:15;10677:180;10725:77;10722:1;10715:88;10822:4;10819:1;10812:15;10846:4;10843:1;10836:15;10863:233;10902:3;10925:24;10943:5;10925:24;:::i;:::-;10916:33;;10971:66;10964:5;10961:77;10958:103;;11041:18;;:::i;:::-;10958:103;11088:1;11081:5;11077:13;11070:20;;10863:233;;;:::o;11102:305::-;11142:3;11161:20;11179:1;11161:20;:::i;:::-;11156:25;;11195:20;11213:1;11195:20;:::i;:::-;11190:25;;11349:1;11281:66;11277:74;11274:1;11271:81;11268:107;;;11355:18;;:::i;:::-;11268:107;11399:1;11396;11392:9;11385:16;;11102:305;;;;:::o;11413:225::-;11553:34;11549:1;11541:6;11537:14;11530:58;11622:8;11617:2;11609:6;11605:15;11598:33;11413:225;:::o;11644:366::-;11786:3;11807:67;11871:2;11866:3;11807:67;:::i;:::-;11800:74;;11883:93;11972:3;11883:93;:::i;:::-;12001:2;11996:3;11992:12;11985:19;;11644:366;;;:::o;12016:419::-;12182:4;12220:2;12209:9;12205:18;12197:26;;12269:9;12263:4;12259:20;12255:1;12244:9;12240:17;12233:47;12297:131;12423:4;12297:131;:::i;:::-;12289:139;;12016:419;;;:::o;12441:223::-;12581:34;12577:1;12569:6;12565:14;12558:58;12650:6;12645:2;12637:6;12633:15;12626:31;12441:223;:::o;12670:366::-;12812:3;12833:67;12897:2;12892:3;12833:67;:::i;:::-;12826:74;;12909:93;12998:3;12909:93;:::i;:::-;13027:2;13022:3;13018:12;13011:19;;12670:366;;;:::o;13042:419::-;13208:4;13246:2;13235:9;13231:18;13223:26;;13295:9;13289:4;13285:20;13281:1;13270:9;13266:17;13259:47;13323:131;13449:4;13323:131;:::i;:::-;13315:139;;13042:419;;;:::o;13467:221::-;13607:34;13603:1;13595:6;13591:14;13584:58;13676:4;13671:2;13663:6;13659:15;13652:29;13467:221;:::o;13694:366::-;13836:3;13857:67;13921:2;13916:3;13857:67;:::i;:::-;13850:74;;13933:93;14022:3;13933:93;:::i;:::-;14051:2;14046:3;14042:12;14035:19;;13694:366;;;:::o;14066:419::-;14232:4;14270:2;14259:9;14255:18;14247:26;;14319:9;14313:4;14309:20;14305:1;14294:9;14290:17;14283:47;14347:131;14473:4;14347:131;:::i;:::-;14339:139;;14066:419;;;:::o;14491:224::-;14631:34;14627:1;14619:6;14615:14;14608:58;14700:7;14695:2;14687:6;14683:15;14676:32;14491:224;:::o;14721:366::-;14863:3;14884:67;14948:2;14943:3;14884:67;:::i;:::-;14877:74;;14960:93;15049:3;14960:93;:::i;:::-;15078:2;15073:3;15069:12;15062:19;;14721:366;;;:::o;15093:419::-;15259:4;15297:2;15286:9;15282:18;15274:26;;15346:9;15340:4;15336:20;15332:1;15321:9;15317:17;15310:47;15374:131;15500:4;15374:131;:::i;:::-;15366:139;;15093:419;;;:::o;15518:222::-;15658:34;15654:1;15646:6;15642:14;15635:58;15727:5;15722:2;15714:6;15710:15;15703:30;15518:222;:::o;15746:366::-;15888:3;15909:67;15973:2;15968:3;15909:67;:::i;:::-;15902:74;;15985:93;16074:3;15985:93;:::i;:::-;16103:2;16098:3;16094:12;16087:19;;15746:366;;;:::o;16118:419::-;16284:4;16322:2;16311:9;16307:18;16299:26;;16371:9;16365:4;16361:20;16357:1;16346:9;16342:17;16335:47;16399:131;16525:4;16399:131;:::i;:::-;16391:139;;16118:419;;;:::o;16543:228::-;16683:34;16679:1;16671:6;16667:14;16660:58;16752:11;16747:2;16739:6;16735:15;16728:36;16543:228;:::o;16777:366::-;16919:3;16940:67;17004:2;16999:3;16940:67;:::i;:::-;16933:74;;17016:93;17105:3;17016:93;:::i;:::-;17134:2;17129:3;17125:12;17118:19;;16777:366;;;:::o;17149:419::-;17315:4;17353:2;17342:9;17338:18;17330:26;;17402:9;17396:4;17392:20;17388:1;17377:9;17373:17;17366:47;17430:131;17556:4;17430:131;:::i;:::-;17422:139;;17149:419;;;:::o;17574:229::-;17714:34;17710:1;17702:6;17698:14;17691:58;17783:12;17778:2;17770:6;17766:15;17759:37;17574:229;:::o;17809:366::-;17951:3;17972:67;18036:2;18031:3;17972:67;:::i;:::-;17965:74;;18048:93;18137:3;18048:93;:::i;:::-;18166:2;18161:3;18157:12;18150:19;;17809:366;;;:::o;18181:419::-;18347:4;18385:2;18374:9;18370:18;18362:26;;18434:9;18428:4;18424:20;18420:1;18409:9;18405:17;18398:47;18462:131;18588:4;18462:131;:::i;:::-;18454:139;;18181:419;;;:::o;18606:180::-;18654:77;18651:1;18644:88;18751:4;18748:1;18741:15;18775:4;18772:1;18765:15;18792:185;18832:1;18849:20;18867:1;18849:20;:::i;:::-;18844:25;;18883:20;18901:1;18883:20;:::i;:::-;18878:25;;18922:1;18912:35;;18927:18;;:::i;:::-;18912:35;18969:1;18966;18962:9;18957:14;;18792:185;;;;:::o;18983:442::-;19132:4;19170:2;19159:9;19155:18;19147:26;;19183:71;19251:1;19240:9;19236:17;19227:6;19183:71;:::i;:::-;19264:72;19332:2;19321:9;19317:18;19308:6;19264:72;:::i;:::-;19346;19414:2;19403:9;19399:18;19390:6;19346:72;:::i;:::-;18983:442;;;;;;:::o;19431:180::-;19479:77;19476:1;19469:88;19576:4;19573:1;19566:15;19600:4;19597:1;19590:15;19617:143;19674:5;19705:6;19699:13;19690:22;;19721:33;19748:5;19721:33;:::i;:::-;19617:143;;;;:::o;19766:351::-;19836:6;19885:2;19873:9;19864:7;19860:23;19856:32;19853:119;;;19891:79;;:::i;:::-;19853:119;20011:1;20036:64;20092:7;20083:6;20072:9;20068:22;20036:64;:::i;:::-;20026:74;;19982:128;19766:351;;;;:::o;20123:85::-;20168:7;20197:5;20186:16;;20123:85;;;:::o;20214:158::-;20272:9;20305:61;20323:42;20332:32;20358:5;20332:32;:::i;:::-;20323:42;:::i;:::-;20305:61;:::i;:::-;20292:74;;20214:158;;;:::o;20378:147::-;20473:45;20512:5;20473:45;:::i;:::-;20468:3;20461:58;20378:147;;:::o;20531:114::-;20598:6;20632:5;20626:12;20616:22;;20531:114;;;:::o;20651:184::-;20750:11;20784:6;20779:3;20772:19;20824:4;20819:3;20815:14;20800:29;;20651:184;;;;:::o;20841:132::-;20908:4;20931:3;20923:11;;20961:4;20956:3;20952:14;20944:22;;20841:132;;;:::o;20979:108::-;21056:24;21074:5;21056:24;:::i;:::-;21051:3;21044:37;20979:108;;:::o;21093:179::-;21162:10;21183:46;21225:3;21217:6;21183:46;:::i;:::-;21261:4;21256:3;21252:14;21238:28;;21093:179;;;;:::o;21278:113::-;21348:4;21380;21375:3;21371:14;21363:22;;21278:113;;;:::o;21427:732::-;21546:3;21575:54;21623:5;21575:54;:::i;:::-;21645:86;21724:6;21719:3;21645:86;:::i;:::-;21638:93;;21755:56;21805:5;21755:56;:::i;:::-;21834:7;21865:1;21850:284;21875:6;21872:1;21869:13;21850:284;;;21951:6;21945:13;21978:63;22037:3;22022:13;21978:63;:::i;:::-;21971:70;;22064:60;22117:6;22064:60;:::i;:::-;22054:70;;21910:224;21897:1;21894;21890:9;21885:14;;21850:284;;;21854:14;22150:3;22143:10;;21551:608;;;21427:732;;;;:::o;22165:831::-;22428:4;22466:3;22455:9;22451:19;22443:27;;22480:71;22548:1;22537:9;22533:17;22524:6;22480:71;:::i;:::-;22561:80;22637:2;22626:9;22622:18;22613:6;22561:80;:::i;:::-;22688:9;22682:4;22678:20;22673:2;22662:9;22658:18;22651:48;22716:108;22819:4;22810:6;22716:108;:::i;:::-;22708:116;;22834:72;22902:2;22891:9;22887:18;22878:6;22834:72;:::i;:::-;22916:73;22984:3;22973:9;22969:19;22960:6;22916:73;:::i;:::-;22165:831;;;;;;;;:::o;23002:807::-;23251:4;23289:3;23278:9;23274:19;23266:27;;23303:71;23371:1;23360:9;23356:17;23347:6;23303:71;:::i;:::-;23384:72;23452:2;23441:9;23437:18;23428:6;23384:72;:::i;:::-;23466:80;23542:2;23531:9;23527:18;23518:6;23466:80;:::i;:::-;23556;23632:2;23621:9;23617:18;23608:6;23556:80;:::i;:::-;23646:73;23714:3;23703:9;23699:19;23690:6;23646:73;:::i;:::-;23729;23797:3;23786:9;23782:19;23773:6;23729:73;:::i;:::-;23002:807;;;;;;;;;:::o;23815:143::-;23872:5;23903:6;23897:13;23888:22;;23919:33;23946:5;23919:33;:::i;:::-;23815:143;;;;:::o;23964:663::-;24052:6;24060;24068;24117:2;24105:9;24096:7;24092:23;24088:32;24085:119;;;24123:79;;:::i;:::-;24085:119;24243:1;24268:64;24324:7;24315:6;24304:9;24300:22;24268:64;:::i;:::-;24258:74;;24214:128;24381:2;24407:64;24463:7;24454:6;24443:9;24439:22;24407:64;:::i;:::-;24397:74;;24352:129;24520:2;24546:64;24602:7;24593:6;24582:9;24578:22;24546:64;:::i;:::-;24536:74;;24491:129;23964:663;;;;;:::o;24633:348::-;24673:7;24696:20;24714:1;24696:20;:::i;:::-;24691:25;;24730:20;24748:1;24730:20;:::i;:::-;24725:25;;24918:1;24850:66;24846:74;24843:1;24840:81;24835:1;24828:9;24821:17;24817:105;24814:131;;;24925:18;;:::i;:::-;24814:131;24973:1;24970;24966:9;24955:20;;24633:348;;;;:::o

Swarm Source

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