ETH Price: $3,080.35 (-0.75%)

Token

BurnX 2.0 (BurnX20)
 

Overview

Max Total Supply

1,000,000,000,000,000 BurnX20

Holders

2,272 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
3,145,112,658.737735479 BurnX20

Value
$0.00
0x934687ec36be8a4845368bb47075a63ed3661a22
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

BurnX - a grassroots, community-driven project - is a meme token that employs two burn mechanisms, whereby a percentage of the total supply (capped) is burned over time.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
BurnX20

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 2 of 10: BurnX20.sol
// SPDX-License-Identifier: MIT

/**
 * BurnX 2.0 - #ShareFi on fire. Charity. Rewards.
 *
 * A community centric powerhouse of hot mechanics that funds good 
 * causes, rewards holders, & supports a healthy price floor. 
 * Blazing a path to financial freedom, truly. 
 *
 * Website: https://BurnX.finance
 * Telegram: https://t.me/BurnXCommunity
 * Twitter: https://twitter.com/BurnX_Community
*/

pragma solidity ^0.6.12;

// Contracts
import "./SafeMath.sol";
import "./Ownable.sol";
import "./Address.sol";
import "./IERC20.sol";
import "./IUniswapV2Factory.sol";
import "./IUniswapV2Pair.sol";
import "./IUniswapV2Router02.sol";

contract BurnX20 is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    // Reflect and allowances
    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;

    // Reflect exclusions - fees & rewards
    mapping(address => bool) private _isExcludedFromFee; // fee
    mapping(address => bool) private _isExcluded; // reward
    address[] private _excluded;

    // Bots
    mapping(address => bool) private _isBot;
    address[] private _bots;

    // Reflect & Total Supply (capped)
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1_000_000_000_000_000 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    // Standard token details
    string private _name = "BurnX 2.0";
    string private _symbol = "BurnX20";
    uint8 private _decimals = 9;

    // Default % trade tax settings
    uint256 private _taxFee = 4; // reflection
    uint256 private _marketingFee = 2; // marketing
    uint256 private _liquidityFee = 4; // liquidity

    // Rollback % trade tax settings
    uint256 private _prevTaxFee = _taxFee;
    uint256 private _prevMarketingFee = _marketingFee;
    uint256 private _prevLiquidityFee = _liquidityFee;

    // Uniswap
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    // Reentrancy, swap & liquify
    bool internal locked = false;
    bool public swapLiquifyEnabled = true;

    // Reentrancy guard
    modifier noReentrant() {
        locked = true;
        _;
        locked = false;
    }

    // Max token amount per TX
    uint256 private _maxTx = _tTotal;

    // Max tokens to be swapped - set to optimum
    uint256 private _amountSellLiquidity = 1000000000 * 10**9;

    // Events
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    // Wallets
    address payable private _marketingAddress;
    address private _lpAddress;

    constructor(address marketingAddress) public {
        // Total Supply to owner
        _rOwned[_msgSender()] = _rTotal;

        // Marketing
        _marketingAddress = payable(marketingAddress);

        // Uniswap router & pair
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;

        // Exclude addresses from reflect fee
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_msgSender()] = true;
        _isExcludedFromFee[_marketingAddress] = true;

        // LP token
        _lpAddress = _msgSender();

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

        return true;
    }

    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 transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(
            sender,
            _msgSender(),
            _allowances[sender][_msgSender()].sub(amount, "Amount exceeds allowance")
        );

        return true;
    }

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

        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue)
        public
        virtual
        returns (bool)
    {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].sub(
                subtractedValue,
                "Allowance below zero"
            )
        );

        return true;
    }

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

    function setExcludeFromFee(address account, bool excluded)
        external
        onlyOwner
    {
        _isExcludedFromFee[account] = excluded;
    }

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

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee)
        public
        view
        returns (uint256)
    {
        require(tAmount <= _tTotal);

        if (!deductTransferFee) {
            (uint256 rAmount, , , , , ) = _getValues(tAmount);

            return rAmount;
        } else {
            (, uint256 rTransferAmount, , , , ) = _getValues(tAmount);

            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount)
        public
        view
        returns (uint256)
    {
        require(rAmount <= _rTotal);

        uint256 currentRate = _getRate();

        return rAmount.div(currentRate);
    }

    function excludeFromReward(address account) external onlyOwner {
        require(account != address(uniswapV2Router)); // UniswapV2 router
        require(!_isExcluded[account]);

        if (_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }

        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner {
        require(_isExcluded[account]);

        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 addBots(address[] memory botAddresses) external onlyOwner {
        for (uint256 i = 0; i < botAddresses.length; i++) {
            require(botAddresses[i] != address(uniswapV2Router)); // UniswapV2 router

            _isBot[botAddresses[i]] = true;
            _bots.push(botAddresses[i]);
        }
    }

    function removeBot(address account) external onlyOwner {
        require(_isBot[account]);

        for (uint256 i = 0; i < _bots.length; i++) {
            if (_bots[i] == account) {
                _bots[i] = _bots[_bots.length - 1];
                _isBot[account] = false;
                _bots.pop();
                break;
            }
        }
    }

    function removeAllFee() private {
        if (_taxFee == 0 && _marketingFee == 0 && _liquidityFee == 0) return;

        _prevTaxFee = _taxFee;
        _prevMarketingFee = _marketingFee;
        _prevLiquidityFee = _liquidityFee;

        _taxFee = 0;
        _marketingFee = 0;
        _liquidityFee = 0;
    }

    function restoreAllFee() private {
        _taxFee = _prevTaxFee;
        _marketingFee = _prevMarketingFee;
        _liquidityFee = _prevLiquidityFee;
    }

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

    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 _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) private {
        require(sender != address(0));
        require(recipient != address(0));
        require(amount > 0);
        require(!_isBot[sender]);
        require(!_isBot[recipient]);
        require(!_isBot[tx.origin]);

        if (sender != owner() && recipient != owner()) {
            require(amount <= _maxTx); // Max TX amount
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        
        // Is token balance over minimum target for selling?
        bool overMinTokenBalance = contractTokenBalance >= _amountSellLiquidity;
        
        // Token balance over Max TX
        if (contractTokenBalance >= _maxTx) {
            contractTokenBalance = _maxTx;
        } else {
            // Token balance over minimum but below Max TX
            contractTokenBalance = _amountSellLiquidity;
        }

        if (
            !locked &&
            swapLiquifyEnabled &&
            overMinTokenBalance &&
            sender != address(uniswapV2Pair)
        ) {
            // Add liquidity
            swapAndLiquify(contractTokenBalance);
        }

        bool takeFee = true;

        // Temporarily omit the fee if any account is excluded
        if (_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]) {
            takeFee = false;
        }

        // Transfer amount - deducts any necessary fees
        _tokenTransfer(sender, recipient, amount, takeFee);
    }

    function swapAndLiquify(uint256 takeAmount) private noReentrant {
        // Marketing vs Liquidity allocation.
        uint256 marketingPecentage = _marketingFee.mul(10000).mul(10**9).div(_marketingFee.add(_liquidityFee));
        uint256 toMarketing = marketingPecentage.mul(takeAmount).div(10000).div(10**9);
        uint256 toLiquify = takeAmount.sub(toMarketing);

        // Split token balance into halves
        uint256 tokenHalfForETH = toLiquify.div(2);
        uint256 halfForTokenLP = toLiquify.sub(tokenHalfForETH);

        uint256 ethBalanceBeforeSwap = address(this).balance;

        // Swap tokens for ETH
        uint256 toSwapForEth = tokenHalfForETH.add(toMarketing);
        swapTokensForEth(toSwapForEth);

        // Get new ETH balance
        uint256 ethRecivedFromSwap = address(this).balance.sub(ethBalanceBeforeSwap);

        // Recent ETH balance * 50% of the allocated LP tokens / marketing tokens
        uint256 ethLpPart = ethRecivedFromSwap.mul(tokenHalfForETH).div(toSwapForEth);

        // Add liquidity to Uniswap
        addLiquidity(halfForTokenLP, ethLpPart);

        emit SwapAndLiquify(tokenHalfForETH, ethLpPart, halfForTokenLP);

        // Send the rest to marketing.
        sendETHToMarketing(ethRecivedFromSwap.sub(ethLpPart));
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // Generate the Uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

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

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

        // Add liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            _lpAddress,
            block.timestamp
        );
    }

    function sendETHToMarketing(uint256 amount) private {
        _marketingAddress.transfer(amount);
    }

    // Manual swap & send if the token is highly valued
    function manualSwap() external onlyOwner {
        uint256 contractBalance = balanceOf(address(this));
        swapTokensForEth(contractBalance);
    }

    function manualSend() public onlyOwner {
        uint256 contractETHBalance = address(this).balance;
        sendETHToMarketing(contractETHBalance);
    }

    function setSwapLiquifyEnabled() external onlyOwner {
        swapLiquifyEnabled = !swapLiquifyEnabled;
    }

    function isSwapLiquifyEnabled() public view returns (bool) {
        return swapLiquifyEnabled;
    }

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

    function _transferStandard(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tMarketingLiquidity
        ) = _getValues(tAmount);
        uint256 currentRate = _getRate();
        uint256 rMarketingLiquidity = tMarketingLiquidity.mul(currentRate);

        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount).sub(rMarketingLiquidity);

        _takeMarketingLiquidity(tMarketingLiquidity);
        _reflectFee(rFee, tFee);

        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tMarketingLiquidity
        ) = _getValues(tAmount);
        uint256 currentRate = _getRate();
        uint256 rMarketingLiquidity = tMarketingLiquidity.mul(currentRate);

        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount).sub(rMarketingLiquidity);

        _takeMarketingLiquidity(tMarketingLiquidity);
        _reflectFee(rFee, tFee);

        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tMarketingLiquidity
        ) = _getValues(tAmount);
        uint256 currentRate = _getRate();
        uint256 rMarketingLiquidity = tMarketingLiquidity.mul(currentRate);

        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount).sub(rMarketingLiquidity);

        _takeMarketingLiquidity(tMarketingLiquidity);
        _reflectFee(rFee, tFee);

        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tMarketingLiquidity
        ) = _getValues(tAmount);
        uint256 currentRate = _getRate();
        uint256 rMarketingLiquidity = tMarketingLiquidity.mul(currentRate);

        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount).sub(rMarketingLiquidity);

        _takeMarketingLiquidity(tMarketingLiquidity);
        _reflectFee(rFee, tFee);

        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _takeMarketingLiquidity(uint256 tMarketingLiquidity) private {
        uint256 currentRate = _getRate();
        uint256 rMarketingLiquidity = tMarketingLiquidity.mul(currentRate);

        _rOwned[address(this)] = _rOwned[address(this)].add(rMarketingLiquidity);

        if (_isExcluded[address(this)]) {
            _tOwned[address(this)] = _tOwned[address(this)].add(tMarketingLiquidity);
        }
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);

        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    // Recieve ETH when swapping
    receive() external payable {}

    function _getValues(uint256 tAmount)
        private
        view
        returns (
            uint256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        (
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tMarketingLiquidityFee
        ) = _getTValues(tAmount, _taxFee, _marketingFee.add(_liquidityFee));
        uint256 currentRate = _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(
            tAmount,
            tFee,
            currentRate
        );

        return (
            rAmount,
            rTransferAmount,
            rFee,
            tTransferAmount,
            tFee,
            tMarketingLiquidityFee
        );
    }

    function _getTValues(
        uint256 tAmount,
        uint256 taxFee,
        uint256 marketingLiquidityFee
    )
        private
        pure
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 tFee = tAmount.mul(taxFee).div(100);
        uint256 tMarketingLiquidityFee = tAmount.mul(marketingLiquidityFee).div(100);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tMarketingLiquidityFee);

        return (tTransferAmount, tFee, tMarketingLiquidityFee);
    }

    function _getRValues(
        uint256 tAmount,
        uint256 tFee,
        uint256 currentRate
    )
        private
        pure
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee);

        if (rFee != 0) {
            rFee = currentRate.div(2).add(rFee);
        }

        return (rAmount, rTransferAmount, rFee);
    }

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

        return rSupply.div(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.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }

        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);

        return (rSupply, tSupply);
    }

    function setTxFees(
        uint256 tax,
        uint256 marketing,
        uint256 liquidity
    ) external onlyOwner {
        require(tax.add(marketing).add(liquidity) <= 10);

        _taxFee = tax;
        _marketingFee = marketing;
        _liquidityFee = liquidity;
    }

    function setWallets(address marketingAddress, address lpAddress)
        external
        onlyOwner
    {
        _marketingAddress = payable(marketingAddress);

        _lpAddress = lpAddress;
    }

    function setAmountSellLiquidity(uint256 amountSellLiquidity)
        external
        onlyOwner
    {
        require(amountSellLiquidity >= 10**9);

        _amountSellLiquidity = amountSellLiquidity;
    }

    function setMaxTx(uint256 maxTx) external onlyOwner {
        require(maxTx >= 10**9);

        _maxTx = maxTx;
    }

    function recoverTokens(uint256 amount) public onlyOwner {
        _approve(address(this), owner(), amount);
        _transfer(address(this), owner(), amount);
    }

    function withdrawToken(
        address token,
        uint256 amount,
        address recipient
    ) external onlyOwner {
        require(token != uniswapV2Pair);
        require(token != address(this));

        IERC20(token).transfer(recipient, amount);
    }

    function migrateHolders(
        address[] memory recipients,
        uint256[] memory amounts
    ) external onlyOwner {
        require(recipients.length == amounts.length);

        for (uint256 i = 0; i < recipients.length; i++) {
            transfer(recipients[i], amounts[i]);
        }
    }
}

File 1 of 10: Address.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.12;

library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash =
            0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            codehash := extcodehash(account)
        }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

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

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                "Address: low-level call with value failed"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        return _functionCallWithValue(target, data, value, errorMessage);
    }

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

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) =
            target.call{value: weiValue}(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

File 3 of 10: Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.12;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

File 4 of 10: IERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.12;

interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount)
        external
        returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

File 5 of 10: IUniswapV2Factory.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.12;

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

    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(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

File 6 of 10: IUniswapV2Pair.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.12;

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 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 (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 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 (uint256);

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    event Mint(address indexed sender, uint256 amount0, uint256 amount1);
    event Burn(
        address indexed sender,
        uint256 amount0,
        uint256 amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    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 (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

File 7 of 10: IUniswapV2Router01.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.12;

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

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

File 8 of 10: IUniswapV2Router02.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.12;

import "./IUniswapV2Router01.sol";

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

File 9 of 10: Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.12;

import "./Context.sol";

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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

    function getUnlockTime() public view returns (uint256) {
        return _lockTime;
    }

    /**
     * @dev Locks the contract for the time specified.
     */
    function lock(uint256 time) public onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = block.timestamp + time;
        emit OwnershipTransferred(_owner, address(0));
    }

    /**
     * @dev Unocks the contract to the previous owner.
     */
    function unlock() public virtual {
        require(_previousOwner == msg.sender);
        require(block.timestamp >= _lockTime);
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}

File 10 of 10: SafeMath.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.12;

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"marketingAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"botAddresses","type":"address[]"}],"name":"addBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"isSwapLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"migrateHolders","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"recoverTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountSellLiquidity","type":"uint256"}],"name":"setAmountSellLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTx","type":"uint256"}],"name":"setMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setSwapLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tax","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"name":"setTxFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"marketingAddress","type":"address"},{"internalType":"address","name":"lpAddress","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405269d3c21bcecceda1000000600b55600b54600019816200002057fe5b0660001903600c556040518060400160405280600981526020017f4275726e5820322e300000000000000000000000000000000000000000000000815250600e90805190602001906200007592919062000734565b506040518060400160405280600781526020017f4275726e58323000000000000000000000000000000000000000000000000000815250600f9080519060200190620000c392919062000734565b506009601060006101000a81548160ff021916908360ff1602179055506004601155600260125560046013556011546014556012546015556013546016556000601760006101000a81548160ff0219169083151502179055506001601760016101000a81548160ff021916908315150217905550600b54601855670de0b6b3a76400006019553480156200015657600080fd5b506040516200627038038062006270833981810160405260208110156200017c57600080fd5b810190808051906020019092919050505060006200019f6200072c60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600c5460036000620002546200072c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200033357600080fd5b505afa15801562000348573d6000803e3d6000fd5b505050506040513d60208110156200035f57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620003d357600080fd5b505afa158015620003e8573d6000803e3d6000fd5b505050506040513d6020811015620003ff57600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b1580156200047a57600080fd5b505af11580156200048f573d6000803e3d6000fd5b505050506040513d6020811015620004a657600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000620005926200072c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200066d6200072c60201b60201c565b601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620006bd6200072c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b546040518082815260200191505060405180910390a35050620007da565b600033905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200077757805160ff1916838001178555620007a8565b82800160010185558215620007a8579182015b82811115620007a75782518255916020019190600101906200078a565b5b509050620007b79190620007bb565b5090565b5b80821115620007d6576000816000905550600101620007bc565b5090565b60805160601c60a05160601c615a3f620008316000398061181c5280611ab95280613a9152508061111e5280611dab5280612ce95280613e825280613f6e5280613f955280614b5c5280614b835250615a3f6000f3fe60806040526004361061024a5760003560e01c80635fecd92611610139578063a9059cbb116100b6578063dd4670641161007a578063dd46706414610eae578063dd62ed3e14610ee9578063e821432a14610f6e578063f2fde38b14610fbd578063f42938901461100e578063fabc40351461102557610251565b8063a9059cbb14610c6f578063af9549e014610ce0578063bc33718214610d3d578063d34628cc14610d78578063d3f6a15714610e3d57610251565b80638da5cb5b116100fd5780638da5cb5b14610adb5780638de9443614610b1c57806395d89b4114610b57578063a457c2d714610be7578063a69df4b514610c5857610251565b80635fecd9261461097c578063602bc62b146109cd57806370a08231146109f8578063715018a614610a5d57806388f8202014610a7457610251565b806339509351116101c757806349bd5a5e1161018b57806349bd5a5e146107135780635115baf21461075457806351bc3c85146108ad57806352390c02146108c45780635342acb41461091557610251565b806339509351146105885780633ccdbb28146105f957806341609b38146106745780634549b039146106a157806348971a0d146106fc57610251565b806323b872dd1161020e57806323b872dd146103ee5780632d8381191461047f57806330599fc5146104ce578063313ce567146105095780633685d4191461053757610251565b806306fdde0314610256578063095ea7b3146102e657806313114a9d146103575780631694505e1461038257806318160ddd146103c357610251565b3661025157005b600080fd5b34801561026257600080fd5b5061026b611052565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102ab578082015181840152602081019050610290565b50505050905090810190601f1680156102d85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102f257600080fd5b5061033f6004803603604081101561030957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110f4565b60405180821515815260200191505060405180910390f35b34801561036357600080fd5b5061036c611112565b6040518082815260200191505060405180910390f35b34801561038e57600080fd5b5061039761111c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103cf57600080fd5b506103d8611140565b6040518082815260200191505060405180910390f35b3480156103fa57600080fd5b506104676004803603606081101561041157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061114a565b60405180821515815260200191505060405180910390f35b34801561048b57600080fd5b506104b8600480360360208110156104a257600080fd5b8101908080359060200190929190505050611240565b6040518082815260200191505060405180910390f35b3480156104da57600080fd5b50610507600480360360208110156104f157600080fd5b8101908080359060200190929190505050611278565b005b34801561051557600080fd5b5061051e611367565b604051808260ff16815260200191505060405180910390f35b34801561054357600080fd5b506105866004803603602081101561055a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061137e565b005b34801561059457600080fd5b506105e1600480360360408110156105ab57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061169f565b60405180821515815260200191505060405180910390f35b34801561060557600080fd5b506106726004803603606081101561061c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611752565b005b34801561068057600080fd5b5061068961195e565b60405180821515815260200191505060405180910390f35b3480156106ad57600080fd5b506106e6600480360360408110156106c457600080fd5b8101908080359060200190929190803515159060200190929190505050611975565b6040518082815260200191505060405180910390f35b34801561070857600080fd5b506107116119c3565b005b34801561071f57600080fd5b50610728611ab7565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561076057600080fd5b506108ab6004803603604081101561077757600080fd5b810190808035906020019064010000000081111561079457600080fd5b8201836020820111156107a657600080fd5b803590602001918460208302840111640100000000831117156107c857600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561082857600080fd5b82018360208201111561083a57600080fd5b8035906020019184602083028401116401000000008311171561085c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611adb565b005b3480156108b957600080fd5b506108c2611c00565b005b3480156108d057600080fd5b50610913600480360360208110156108e757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ce1565b005b34801561092157600080fd5b506109646004803603602081101561093857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611feb565b60405180821515815260200191505060405180910390f35b34801561098857600080fd5b506109cb6004803603602081101561099f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612041565b005b3480156109d957600080fd5b506109e261231d565b6040518082815260200191505060405180910390f35b348015610a0457600080fd5b50610a4760048036036020811015610a1b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612327565b6040518082815260200191505060405180910390f35b348015610a6957600080fd5b50610a72612412565b005b348015610a8057600080fd5b50610ac360048036036020811015610a9757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612598565b60405180821515815260200191505060405180910390f35b348015610ae757600080fd5b50610af06125ee565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b2857600080fd5b50610b5560048036036020811015610b3f57600080fd5b8101908080359060200190929190505050612617565b005b348015610b6357600080fd5b50610b6c6126fa565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610bac578082015181840152602081019050610b91565b50505050905090810190601f168015610bd95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610bf357600080fd5b50610c4060048036036040811015610c0a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061279c565b60405180821515815260200191505060405180910390f35b348015610c6457600080fd5b50610c6d612886565b005b348015610c7b57600080fd5b50610cc860048036036040811015610c9257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506129ef565b60405180821515815260200191505060405180910390f35b348015610cec57600080fd5b50610d3b60048036036040811015610d0357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612a0d565b005b348015610d4957600080fd5b50610d7660048036036020811015610d6057600080fd5b8101908080359060200190929190505050612b30565b005b348015610d8457600080fd5b50610e3b60048036036020811015610d9b57600080fd5b8101908080359060200190640100000000811115610db857600080fd5b820183602082011115610dca57600080fd5b80359060200191846020830284011164010000000083111715610dec57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050612c13565b005b348015610e4957600080fd5b50610eac60048036036040811015610e6057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612e45565b005b348015610eba57600080fd5b50610ee760048036036020811015610ed157600080fd5b8101908080359060200190929190505050612f93565b005b348015610ef557600080fd5b50610f5860048036036040811015610f0c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613184565b6040518082815260200191505060405180910390f35b348015610f7a57600080fd5b50610fbb60048036036060811015610f9157600080fd5b8101908080359060200190929190803590602001909291908035906020019092919050505061320b565b005b348015610fc957600080fd5b5061100c60048036036020811015610fe057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061331f565b005b34801561101a57600080fd5b5061102361352a565b005b34801561103157600080fd5b5061103a613603565b60405180821515815260200191505060405180910390f35b6060600e8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156110ea5780601f106110bf576101008083540402835291602001916110ea565b820191906000526020600020905b8154815290600101906020018083116110cd57829003601f168201915b5050505050905090565b6000611108611101613616565b848461361e565b6001905092915050565b6000600d54905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600b54905090565b6000611157848484613815565b61123584611163613616565b611230856040518060400160405280601881526020017f416d6f756e74206578636565647320616c6c6f77616e63650000000000000000815250600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006111e6613616565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613bb49092919063ffffffff16565b61361e565b600190509392505050565b6000600c5482111561125157600080fd5b600061125b613c74565b90506112708184613c9f90919063ffffffff16565b915050919050565b611280613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611340576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6113523061134c6125ee565b8361361e565b6113643061135e6125ee565b83613815565b50565b6000601060009054906101000a900460ff16905090565b611386613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611446576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661149c57600080fd5b60005b60088054905081101561169b578173ffffffffffffffffffffffffffffffffffffffff16600882815481106114d057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561168e5760086001600880549050038154811061152c57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166008828154811061156457fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600880548061165457fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561169b565b808060010191505061149f565b5050565b60006117486116ac613616565b8461174385600560006116bd613616565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ce990919063ffffffff16565b61361e565b6001905092915050565b61175a613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461181a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561187357600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156118ac57600080fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561191d57600080fd5b505af1158015611931573d6000803e3d6000fd5b505050506040513d602081101561194757600080fd5b810190808051906020019092919050505050505050565b6000601760019054906101000a900460ff16905090565b6000600b5483111561198657600080fd5b816119a657600061199684613d71565b50505050509050809150506119bd565b60006119b184613d71565b50505050915050809150505b92915050565b6119cb613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a8b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601760019054906101000a900460ff1615601760016101000a81548160ff021916908315150217905550565b7f000000000000000000000000000000000000000000000000000000000000000081565b611ae3613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ba3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8051825114611bb157600080fd5b60005b8251811015611bfb57611bed838281518110611bcc57fe5b6020026020010151838381518110611be057fe5b60200260200101516129ef565b508080600101915050611bb4565b505050565b611c08613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cc8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000611cd330612327565b9050611cde81613dec565b50565b611ce9613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611da9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e0257600080fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611e5957600080fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611f2d57611ee9600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611240565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b612049613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612109576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661215f57600080fd5b60005b600a80549050811015612319578173ffffffffffffffffffffffffffffffffffffffff16600a828154811061219357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561230c57600a6001600a8054905003815481106121ef57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a828154811061222757fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a8054806122d257fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055612319565b8080600101915050612162565b5050565b6000600254905090565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156123c257600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061240d565b61240a600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611240565b90505b919050565b61241a613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61261f613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b633b9aca008110156126f057600080fd5b8060198190555050565b6060600f8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156127925780601f1061276757610100808354040283529160200191612792565b820191906000526020600020905b81548152906001019060200180831161277557829003601f168201915b5050505050905090565b600061287c6127a9613616565b84612877856040518060400160405280601481526020017f416c6c6f77616e63652062656c6f77207a65726f000000000000000000000000815250600560006127f0613616565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613bb49092919063ffffffff16565b61361e565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128e057600080fd5b6002544210156128ef57600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000612a036129fc613616565b8484613815565b6001905092915050565b612a15613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ad5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b612b38613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612bf8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b633b9aca00811015612c0957600080fd5b8060188190555050565b612c1b613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612cdb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60005b8151811015612e41577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16828281518110612d2a57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415612d5357600080fd5b600160096000848481518110612d6557fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a828281518110612dcc57fe5b60200260200101519080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508080600101915050612cde565b5050565b612e4d613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612f0d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b81601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b612f9b613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461305b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804201600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b613213613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146132d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600a6132fa826132ec8587613ce990919063ffffffff16565b613ce990919063ffffffff16565b111561330557600080fd5b826011819055508160128190555080601381905550505050565b613327613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146133e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561346d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061597d6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b613532613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146135f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60004790506136008161409a565b50565b601760019054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156136a4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806159e66024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561372a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806159a36022913960400191505060405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561384f57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561388957600080fd5b6000811161389657600080fd5b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156138ed57600080fd5b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561394457600080fd5b600960003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561399b57600080fd5b6139a36125ee565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015613a1157506139e16125ee565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15613a2657601854811115613a2557600080fd5b5b6000613a3130612327565b9050600060195482101590506018548210613a50576018549150613a56565b60195491505b601760009054906101000a900460ff16158015613a7f5750601760019054906101000a900460ff165b8015613a885750805b8015613ae057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15613aef57613aee82614106565b5b600060019050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613b965750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613ba057600090505b613bac868686846142f9565b505050505050565b6000838311158290613c61576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613c26578082015181840152602081019050613c0b565b50505050905090810190601f168015613c535780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000806000613c8161460a565b91509150613c988183613c9f90919063ffffffff16565b9250505090565b6000613ce183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061489b565b905092915050565b600080828401905083811015613d67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000806000806000806000806000613da28a601154613d9d601354601254613ce990919063ffffffff16565b614961565b9250925092506000613db2613c74565b90506000806000613dc48e87866149f7565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b6060600267ffffffffffffffff81118015613e0657600080fd5b50604051908082528060200260200182016040528015613e355781602001602082028036833780820191505090505b5090503081600081518110613e4657fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613ee657600080fd5b505afa158015613efa573d6000803e3d6000fd5b505050506040513d6020811015613f1057600080fd5b810190808051906020019092919050505081600181518110613f2e57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613f93307f00000000000000000000000000000000000000000000000000000000000000008461361e565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561405557808201518184015260208101905061403a565b505050509050019650505050505050600060405180830381600087803b15801561407e57600080fd5b505af1158015614092573d6000803e3d6000fd5b505050505050565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015614102573d6000803e3d6000fd5b5050565b6001601760006101000a81548160ff021916908315150217905550600061417861413d601354601254613ce990919063ffffffff16565b61416a633b9aca0061415c612710601254614a8690919063ffffffff16565b614a8690919063ffffffff16565b613c9f90919063ffffffff16565b905060006141b9633b9aca006141ab61271061419d8787614a8690919063ffffffff16565b613c9f90919063ffffffff16565b613c9f90919063ffffffff16565b905060006141d08285614b0c90919063ffffffff16565b905060006141e8600283613c9f90919063ffffffff16565b905060006141ff8284614b0c90919063ffffffff16565b90506000479050600061421b8685613ce990919063ffffffff16565b905061422681613dec565b600061423b8347614b0c90919063ffffffff16565b90506000614264836142568885614a8690919063ffffffff16565b613c9f90919063ffffffff16565b90506142708582614b56565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186828760405180848152602001838152602001828152602001935050505060405180910390a16142d26142cd8284614b0c90919063ffffffff16565b61409a565b5050505050505050506000601760006101000a81548160ff02191690831515021790555050565b8061430757614306614cc2565b5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156143aa5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156143bf576143ba848484614d24565b6145f6565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156144625750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561447757614472848484614fbb565b6145f5565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561451b5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156145305761452b848484615252565b6145f4565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156145d25750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156145e7576145e2848484615454565b6145f3565b6145f2848484615252565b5b5b5b5b8061460457614603615780565b5b50505050565b6000806000600c5490506000600b54905060005b60088054905081101561485e5782600360006008848154811061463d57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061472457508160046000600884815481106146bc57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561473b57600c54600b5494509450505050614897565b6147c4600360006008848154811061474f57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484614b0c90919063ffffffff16565b925061484f60046000600884815481106147da57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483614b0c90919063ffffffff16565b9150808060010191505061461e565b50614876600b54600c54613c9f90919063ffffffff16565b82101561488e57600c54600b54935093505050614897565b81819350935050505b9091565b60008083118290614947576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561490c5780820151818401526020810190506148f1565b50505050905090810190601f1680156149395780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161495357fe5b049050809150509392505050565b60008060008061498d606461497f888a614a8690919063ffffffff16565b613c9f90919063ffffffff16565b905060006149b760646149a9888b614a8690919063ffffffff16565b613c9f90919063ffffffff16565b905060006149e0826149d2858c614b0c90919063ffffffff16565b614b0c90919063ffffffff16565b905080838395509550955050505093509350939050565b600080600080614a108588614a8690919063ffffffff16565b90506000614a278688614a8690919063ffffffff16565b90506000614a3e8284614b0c90919063ffffffff16565b905060008214614a7157614a6e82614a6060028a613c9f90919063ffffffff16565b613ce990919063ffffffff16565b91505b82818395509550955050505093509350939050565b600080831415614a995760009050614b06565b6000828402905082848281614aaa57fe5b0414614b01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806159c56021913960400191505060405180910390fd5b809150505b92915050565b6000614b4e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613bb4565b905092915050565b614b81307f00000000000000000000000000000000000000000000000000000000000000008461361e565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b158015614c6b57600080fd5b505af1158015614c7f573d6000803e3d6000fd5b50505050506040513d6060811015614c9657600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050505050565b6000601154148015614cd657506000601254145b8015614ce457506000601354145b15614cee57614d22565b6011546014819055506012546015819055506013546016819055506000601181905550600060128190555060006013819055505b565b600080600080600080614d3687613d71565b9550955095509550955095506000614d4c613c74565b90506000614d638284614a8690919063ffffffff16565b9050614db789600460008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614b0c90919063ffffffff16565b600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614e4c88600360008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614b0c90919063ffffffff16565b600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614ef381614ee589600360008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ce990919063ffffffff16565b614b0c90919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614f3f8361579d565b614f498685615942565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040518082815260200191505060405180910390a35050505050505050505050565b600080600080600080614fcd87613d71565b9550955095509550955095506000614fe3613c74565b90506000614ffa8284614a8690919063ffffffff16565b905061504e88600360008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614b0c90919063ffffffff16565b600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506150e385600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ce990919063ffffffff16565b600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061518a8161517c89600360008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ce990919063ffffffff16565b614b0c90919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506151d68361579d565b6151e08685615942565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040518082815260200191505060405180910390a35050505050505050505050565b60008060008060008061526487613d71565b955095509550955095509550600061527a613c74565b905060006152918284614a8690919063ffffffff16565b90506152e588600360008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614b0c90919063ffffffff16565b600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061538c8161537e89600360008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ce990919063ffffffff16565b614b0c90919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506153d88361579d565b6153e28685615942565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040518082815260200191505060405180910390a35050505050505050505050565b60008060008060008061546687613d71565b955095509550955095509550600061547c613c74565b905060006154938284614a8690919063ffffffff16565b90506154e789600460008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614b0c90919063ffffffff16565b600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061557c88600360008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614b0c90919063ffffffff16565b600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061561185600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ce990919063ffffffff16565b600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506156b8816156aa89600360008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ce990919063ffffffff16565b614b0c90919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506157048361579d565b61570e8685615942565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040518082815260200191505060405180910390a35050505050505050505050565b601454601181905550601554601281905550601654601381905550565b60006157a7613c74565b905060006157be8284614a8690919063ffffffff16565b905061581281600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ce990919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561593d576158f983600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ce990919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61595782600c54614b0c90919063ffffffff16565b600c8190555061597281600d54613ce990919063ffffffff16565b600d81905550505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373a264697066735822122005427fdce118debf3ee1c97fed46b9e10b8270bbf549ccde02c0dafa87947f8b64736f6c634300060c003300000000000000000000000002a1a30acfe61cb76553b7102b39d6cb815caa83

Deployed Bytecode

0x60806040526004361061024a5760003560e01c80635fecd92611610139578063a9059cbb116100b6578063dd4670641161007a578063dd46706414610eae578063dd62ed3e14610ee9578063e821432a14610f6e578063f2fde38b14610fbd578063f42938901461100e578063fabc40351461102557610251565b8063a9059cbb14610c6f578063af9549e014610ce0578063bc33718214610d3d578063d34628cc14610d78578063d3f6a15714610e3d57610251565b80638da5cb5b116100fd5780638da5cb5b14610adb5780638de9443614610b1c57806395d89b4114610b57578063a457c2d714610be7578063a69df4b514610c5857610251565b80635fecd9261461097c578063602bc62b146109cd57806370a08231146109f8578063715018a614610a5d57806388f8202014610a7457610251565b806339509351116101c757806349bd5a5e1161018b57806349bd5a5e146107135780635115baf21461075457806351bc3c85146108ad57806352390c02146108c45780635342acb41461091557610251565b806339509351146105885780633ccdbb28146105f957806341609b38146106745780634549b039146106a157806348971a0d146106fc57610251565b806323b872dd1161020e57806323b872dd146103ee5780632d8381191461047f57806330599fc5146104ce578063313ce567146105095780633685d4191461053757610251565b806306fdde0314610256578063095ea7b3146102e657806313114a9d146103575780631694505e1461038257806318160ddd146103c357610251565b3661025157005b600080fd5b34801561026257600080fd5b5061026b611052565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102ab578082015181840152602081019050610290565b50505050905090810190601f1680156102d85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102f257600080fd5b5061033f6004803603604081101561030957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110f4565b60405180821515815260200191505060405180910390f35b34801561036357600080fd5b5061036c611112565b6040518082815260200191505060405180910390f35b34801561038e57600080fd5b5061039761111c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103cf57600080fd5b506103d8611140565b6040518082815260200191505060405180910390f35b3480156103fa57600080fd5b506104676004803603606081101561041157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061114a565b60405180821515815260200191505060405180910390f35b34801561048b57600080fd5b506104b8600480360360208110156104a257600080fd5b8101908080359060200190929190505050611240565b6040518082815260200191505060405180910390f35b3480156104da57600080fd5b50610507600480360360208110156104f157600080fd5b8101908080359060200190929190505050611278565b005b34801561051557600080fd5b5061051e611367565b604051808260ff16815260200191505060405180910390f35b34801561054357600080fd5b506105866004803603602081101561055a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061137e565b005b34801561059457600080fd5b506105e1600480360360408110156105ab57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061169f565b60405180821515815260200191505060405180910390f35b34801561060557600080fd5b506106726004803603606081101561061c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611752565b005b34801561068057600080fd5b5061068961195e565b60405180821515815260200191505060405180910390f35b3480156106ad57600080fd5b506106e6600480360360408110156106c457600080fd5b8101908080359060200190929190803515159060200190929190505050611975565b6040518082815260200191505060405180910390f35b34801561070857600080fd5b506107116119c3565b005b34801561071f57600080fd5b50610728611ab7565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561076057600080fd5b506108ab6004803603604081101561077757600080fd5b810190808035906020019064010000000081111561079457600080fd5b8201836020820111156107a657600080fd5b803590602001918460208302840111640100000000831117156107c857600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561082857600080fd5b82018360208201111561083a57600080fd5b8035906020019184602083028401116401000000008311171561085c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611adb565b005b3480156108b957600080fd5b506108c2611c00565b005b3480156108d057600080fd5b50610913600480360360208110156108e757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ce1565b005b34801561092157600080fd5b506109646004803603602081101561093857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611feb565b60405180821515815260200191505060405180910390f35b34801561098857600080fd5b506109cb6004803603602081101561099f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612041565b005b3480156109d957600080fd5b506109e261231d565b6040518082815260200191505060405180910390f35b348015610a0457600080fd5b50610a4760048036036020811015610a1b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612327565b6040518082815260200191505060405180910390f35b348015610a6957600080fd5b50610a72612412565b005b348015610a8057600080fd5b50610ac360048036036020811015610a9757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612598565b60405180821515815260200191505060405180910390f35b348015610ae757600080fd5b50610af06125ee565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b2857600080fd5b50610b5560048036036020811015610b3f57600080fd5b8101908080359060200190929190505050612617565b005b348015610b6357600080fd5b50610b6c6126fa565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610bac578082015181840152602081019050610b91565b50505050905090810190601f168015610bd95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610bf357600080fd5b50610c4060048036036040811015610c0a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061279c565b60405180821515815260200191505060405180910390f35b348015610c6457600080fd5b50610c6d612886565b005b348015610c7b57600080fd5b50610cc860048036036040811015610c9257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506129ef565b60405180821515815260200191505060405180910390f35b348015610cec57600080fd5b50610d3b60048036036040811015610d0357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612a0d565b005b348015610d4957600080fd5b50610d7660048036036020811015610d6057600080fd5b8101908080359060200190929190505050612b30565b005b348015610d8457600080fd5b50610e3b60048036036020811015610d9b57600080fd5b8101908080359060200190640100000000811115610db857600080fd5b820183602082011115610dca57600080fd5b80359060200191846020830284011164010000000083111715610dec57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050612c13565b005b348015610e4957600080fd5b50610eac60048036036040811015610e6057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612e45565b005b348015610eba57600080fd5b50610ee760048036036020811015610ed157600080fd5b8101908080359060200190929190505050612f93565b005b348015610ef557600080fd5b50610f5860048036036040811015610f0c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613184565b6040518082815260200191505060405180910390f35b348015610f7a57600080fd5b50610fbb60048036036060811015610f9157600080fd5b8101908080359060200190929190803590602001909291908035906020019092919050505061320b565b005b348015610fc957600080fd5b5061100c60048036036020811015610fe057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061331f565b005b34801561101a57600080fd5b5061102361352a565b005b34801561103157600080fd5b5061103a613603565b60405180821515815260200191505060405180910390f35b6060600e8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156110ea5780601f106110bf576101008083540402835291602001916110ea565b820191906000526020600020905b8154815290600101906020018083116110cd57829003601f168201915b5050505050905090565b6000611108611101613616565b848461361e565b6001905092915050565b6000600d54905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600b54905090565b6000611157848484613815565b61123584611163613616565b611230856040518060400160405280601881526020017f416d6f756e74206578636565647320616c6c6f77616e63650000000000000000815250600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006111e6613616565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613bb49092919063ffffffff16565b61361e565b600190509392505050565b6000600c5482111561125157600080fd5b600061125b613c74565b90506112708184613c9f90919063ffffffff16565b915050919050565b611280613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611340576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6113523061134c6125ee565b8361361e565b6113643061135e6125ee565b83613815565b50565b6000601060009054906101000a900460ff16905090565b611386613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611446576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661149c57600080fd5b60005b60088054905081101561169b578173ffffffffffffffffffffffffffffffffffffffff16600882815481106114d057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561168e5760086001600880549050038154811061152c57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166008828154811061156457fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600880548061165457fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561169b565b808060010191505061149f565b5050565b60006117486116ac613616565b8461174385600560006116bd613616565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ce990919063ffffffff16565b61361e565b6001905092915050565b61175a613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461181a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b7f000000000000000000000000af7c6dead245b93de19bb1bb828b0acce94aefb373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561187357600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156118ac57600080fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561191d57600080fd5b505af1158015611931573d6000803e3d6000fd5b505050506040513d602081101561194757600080fd5b810190808051906020019092919050505050505050565b6000601760019054906101000a900460ff16905090565b6000600b5483111561198657600080fd5b816119a657600061199684613d71565b50505050509050809150506119bd565b60006119b184613d71565b50505050915050809150505b92915050565b6119cb613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a8b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601760019054906101000a900460ff1615601760016101000a81548160ff021916908315150217905550565b7f000000000000000000000000af7c6dead245b93de19bb1bb828b0acce94aefb381565b611ae3613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ba3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8051825114611bb157600080fd5b60005b8251811015611bfb57611bed838281518110611bcc57fe5b6020026020010151838381518110611be057fe5b60200260200101516129ef565b508080600101915050611bb4565b505050565b611c08613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cc8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000611cd330612327565b9050611cde81613dec565b50565b611ce9613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611da9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e0257600080fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611e5957600080fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611f2d57611ee9600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611240565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b612049613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612109576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661215f57600080fd5b60005b600a80549050811015612319578173ffffffffffffffffffffffffffffffffffffffff16600a828154811061219357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561230c57600a6001600a8054905003815481106121ef57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a828154811061222757fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a8054806122d257fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055612319565b8080600101915050612162565b5050565b6000600254905090565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156123c257600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061240d565b61240a600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611240565b90505b919050565b61241a613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61261f613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b633b9aca008110156126f057600080fd5b8060198190555050565b6060600f8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156127925780601f1061276757610100808354040283529160200191612792565b820191906000526020600020905b81548152906001019060200180831161277557829003601f168201915b5050505050905090565b600061287c6127a9613616565b84612877856040518060400160405280601481526020017f416c6c6f77616e63652062656c6f77207a65726f000000000000000000000000815250600560006127f0613616565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613bb49092919063ffffffff16565b61361e565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128e057600080fd5b6002544210156128ef57600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000612a036129fc613616565b8484613815565b6001905092915050565b612a15613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ad5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b612b38613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612bf8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b633b9aca00811015612c0957600080fd5b8060188190555050565b612c1b613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612cdb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60005b8151811015612e41577f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff16828281518110612d2a57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415612d5357600080fd5b600160096000848481518110612d6557fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a828281518110612dcc57fe5b60200260200101519080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508080600101915050612cde565b5050565b612e4d613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612f0d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b81601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b612f9b613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461305b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804201600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b613213613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146132d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600a6132fa826132ec8587613ce990919063ffffffff16565b613ce990919063ffffffff16565b111561330557600080fd5b826011819055508160128190555080601381905550505050565b613327613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146133e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561346d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061597d6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b613532613616565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146135f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60004790506136008161409a565b50565b601760019054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156136a4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806159e66024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561372a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806159a36022913960400191505060405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561384f57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561388957600080fd5b6000811161389657600080fd5b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156138ed57600080fd5b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561394457600080fd5b600960003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561399b57600080fd5b6139a36125ee565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015613a1157506139e16125ee565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15613a2657601854811115613a2557600080fd5b5b6000613a3130612327565b9050600060195482101590506018548210613a50576018549150613a56565b60195491505b601760009054906101000a900460ff16158015613a7f5750601760019054906101000a900460ff165b8015613a885750805b8015613ae057507f000000000000000000000000af7c6dead245b93de19bb1bb828b0acce94aefb373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15613aef57613aee82614106565b5b600060019050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613b965750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613ba057600090505b613bac868686846142f9565b505050505050565b6000838311158290613c61576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613c26578082015181840152602081019050613c0b565b50505050905090810190601f168015613c535780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000806000613c8161460a565b91509150613c988183613c9f90919063ffffffff16565b9250505090565b6000613ce183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061489b565b905092915050565b600080828401905083811015613d67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000806000806000806000806000613da28a601154613d9d601354601254613ce990919063ffffffff16565b614961565b9250925092506000613db2613c74565b90506000806000613dc48e87866149f7565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b6060600267ffffffffffffffff81118015613e0657600080fd5b50604051908082528060200260200182016040528015613e355781602001602082028036833780820191505090505b5090503081600081518110613e4657fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613ee657600080fd5b505afa158015613efa573d6000803e3d6000fd5b505050506040513d6020811015613f1057600080fd5b810190808051906020019092919050505081600181518110613f2e57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613f93307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461361e565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561405557808201518184015260208101905061403a565b505050509050019650505050505050600060405180830381600087803b15801561407e57600080fd5b505af1158015614092573d6000803e3d6000fd5b505050505050565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015614102573d6000803e3d6000fd5b5050565b6001601760006101000a81548160ff021916908315150217905550600061417861413d601354601254613ce990919063ffffffff16565b61416a633b9aca0061415c612710601254614a8690919063ffffffff16565b614a8690919063ffffffff16565b613c9f90919063ffffffff16565b905060006141b9633b9aca006141ab61271061419d8787614a8690919063ffffffff16565b613c9f90919063ffffffff16565b613c9f90919063ffffffff16565b905060006141d08285614b0c90919063ffffffff16565b905060006141e8600283613c9f90919063ffffffff16565b905060006141ff8284614b0c90919063ffffffff16565b90506000479050600061421b8685613ce990919063ffffffff16565b905061422681613dec565b600061423b8347614b0c90919063ffffffff16565b90506000614264836142568885614a8690919063ffffffff16565b613c9f90919063ffffffff16565b90506142708582614b56565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186828760405180848152602001838152602001828152602001935050505060405180910390a16142d26142cd8284614b0c90919063ffffffff16565b61409a565b5050505050505050506000601760006101000a81548160ff02191690831515021790555050565b8061430757614306614cc2565b5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156143aa5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156143bf576143ba848484614d24565b6145f6565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156144625750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561447757614472848484614fbb565b6145f5565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561451b5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156145305761452b848484615252565b6145f4565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156145d25750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156145e7576145e2848484615454565b6145f3565b6145f2848484615252565b5b5b5b5b8061460457614603615780565b5b50505050565b6000806000600c5490506000600b54905060005b60088054905081101561485e5782600360006008848154811061463d57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061472457508160046000600884815481106146bc57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561473b57600c54600b5494509450505050614897565b6147c4600360006008848154811061474f57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484614b0c90919063ffffffff16565b925061484f60046000600884815481106147da57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483614b0c90919063ffffffff16565b9150808060010191505061461e565b50614876600b54600c54613c9f90919063ffffffff16565b82101561488e57600c54600b54935093505050614897565b81819350935050505b9091565b60008083118290614947576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561490c5780820151818401526020810190506148f1565b50505050905090810190601f1680156149395780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161495357fe5b049050809150509392505050565b60008060008061498d606461497f888a614a8690919063ffffffff16565b613c9f90919063ffffffff16565b905060006149b760646149a9888b614a8690919063ffffffff16565b613c9f90919063ffffffff16565b905060006149e0826149d2858c614b0c90919063ffffffff16565b614b0c90919063ffffffff16565b905080838395509550955050505093509350939050565b600080600080614a108588614a8690919063ffffffff16565b90506000614a278688614a8690919063ffffffff16565b90506000614a3e8284614b0c90919063ffffffff16565b905060008214614a7157614a6e82614a6060028a613c9f90919063ffffffff16565b613ce990919063ffffffff16565b91505b82818395509550955050505093509350939050565b600080831415614a995760009050614b06565b6000828402905082848281614aaa57fe5b0414614b01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806159c56021913960400191505060405180910390fd5b809150505b92915050565b6000614b4e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613bb4565b905092915050565b614b81307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461361e565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b158015614c6b57600080fd5b505af1158015614c7f573d6000803e3d6000fd5b50505050506040513d6060811015614c9657600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050505050565b6000601154148015614cd657506000601254145b8015614ce457506000601354145b15614cee57614d22565b6011546014819055506012546015819055506013546016819055506000601181905550600060128190555060006013819055505b565b600080600080600080614d3687613d71565b9550955095509550955095506000614d4c613c74565b90506000614d638284614a8690919063ffffffff16565b9050614db789600460008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614b0c90919063ffffffff16565b600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614e4c88600360008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614b0c90919063ffffffff16565b600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614ef381614ee589600360008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ce990919063ffffffff16565b614b0c90919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614f3f8361579d565b614f498685615942565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040518082815260200191505060405180910390a35050505050505050505050565b600080600080600080614fcd87613d71565b9550955095509550955095506000614fe3613c74565b90506000614ffa8284614a8690919063ffffffff16565b905061504e88600360008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614b0c90919063ffffffff16565b600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506150e385600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ce990919063ffffffff16565b600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061518a8161517c89600360008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ce990919063ffffffff16565b614b0c90919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506151d68361579d565b6151e08685615942565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040518082815260200191505060405180910390a35050505050505050505050565b60008060008060008061526487613d71565b955095509550955095509550600061527a613c74565b905060006152918284614a8690919063ffffffff16565b90506152e588600360008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614b0c90919063ffffffff16565b600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061538c8161537e89600360008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ce990919063ffffffff16565b614b0c90919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506153d88361579d565b6153e28685615942565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040518082815260200191505060405180910390a35050505050505050505050565b60008060008060008061546687613d71565b955095509550955095509550600061547c613c74565b905060006154938284614a8690919063ffffffff16565b90506154e789600460008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614b0c90919063ffffffff16565b600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061557c88600360008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614b0c90919063ffffffff16565b600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061561185600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ce990919063ffffffff16565b600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506156b8816156aa89600360008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ce990919063ffffffff16565b614b0c90919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506157048361579d565b61570e8685615942565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040518082815260200191505060405180910390a35050505050505050505050565b601454601181905550601554601281905550601654601381905550565b60006157a7613c74565b905060006157be8284614a8690919063ffffffff16565b905061581281600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ce990919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561593d576158f983600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ce990919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61595782600c54614b0c90919063ffffffff16565b600c8190555061597281600d54613ce990919063ffffffff16565b600d81905550505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373a264697066735822122005427fdce118debf3ee1c97fed46b9e10b8270bbf549ccde02c0dafa87947f8b64736f6c634300060c0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000002a1a30acfe61cb76553b7102b39d6cb815caa83

-----Decoded View---------------
Arg [0] : marketingAddress (address): 0x02A1A30AcfE61cB76553b7102b39D6CB815caA83

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000002a1a30acfe61cb76553b7102b39d6cb815caa83


Deployed Bytecode Sourcemap

636:22218:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3602:81;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4550:187;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;6074:85;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2015:51;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3867:93;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4743:370;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;6605:233;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22114:164;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3780:81;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;7222:436;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5119:290;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;22284:263;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13677:101;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;6165:434;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13562:109;;;;;;;;;;;;;:::i;:::-;;2072:38;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;22553:299;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13245:151;;;;;;;;;;;;;:::i;:::-;;6844:372;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8830:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;7986:358;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1853:88:8;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3966:196:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1279:145:8;;;;;;;;;;;;;:::i;:::-;;5791:118:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;656:77:8;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;21778:207:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3689:85;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5415:370;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2308:226:8;;;;;;;;;;;;;:::i;:::-;;4168:193:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;5915:153;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21991:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7664:316;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21573:199;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2018:213:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4367:177:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21289:278;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1573:274:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13402:154:1;;;;;;;;;;;;;:::i;:::-;;2185:37;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3602:81;3639:13;3671:5;3664:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3602:81;:::o;4550:187::-;4649:4;4669:39;4678:12;:10;:12::i;:::-;4692:7;4701:6;4669:8;:39::i;:::-;4726:4;4719:11;;4550:187;;;;:::o;6074:85::-;6116:7;6142:10;;6135:17;;6074:85;:::o;2015:51::-;;;:::o;3867:93::-;3920:7;3946;;3939:14;;3867:93;:::o;4743:370::-;4871:4;4887:36;4897:6;4905:9;4916:6;4887:9;:36::i;:::-;4933:151;4955:6;4975:12;:10;:12::i;:::-;5001:73;5039:6;5001:73;;;;;;;;;;;;;;;;;:11;:19;5013:6;5001:19;;;;;;;;;;;;;;;:33;5021:12;:10;:12::i;:::-;5001:33;;;;;;;;;;;;;;;;:37;;:73;;;;;:::i;:::-;4933:8;:151::i;:::-;5102:4;5095:11;;4743:370;;;;;:::o;6605:233::-;6696:7;6738;;6727;:18;;6719:27;;;;;;6757:19;6779:10;:8;:10::i;:::-;6757:32;;6807:24;6819:11;6807:7;:11;;:24;;;;:::i;:::-;6800:31;;;6605:233;;;:::o;22114:164::-;870:12:8;:10;:12::i;:::-;860:22;;:6;;;;;;;;;;:22;;;852:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22180:40:1::1;22197:4;22204:7;:5;:7::i;:::-;22213:6;22180:8;:40::i;:::-;22230:41;22248:4;22255:7;:5;:7::i;:::-;22264:6;22230:9;:41::i;:::-;22114:164:::0;:::o;3780:81::-;3821:5;3845:9;;;;;;;;;;;3838:16;;3780:81;:::o;7222:436::-;870:12:8;:10;:12::i;:::-;860:22;;:6;;;;;;;;;;:22;;;852:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7301:11:1::1;:20;7313:7;7301:20;;;;;;;;;;;;;;;;;;;;;;;;;7293:29;;;::::0;::::1;;7338:9;7333:319;7357:9;:16;;;;7353:1;:20;7333:319;;;7414:7;7398:23;;:9;7408:1;7398:12;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;7394:248;;;7456:9;7485:1;7466:9;:16;;;;:20;7456:31;;;;;;;;;;;;;;;;;;;;;;;;;7441:9;7451:1;7441:12;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;7524:1;7505:7;:16;7513:7;7505:16;;;;;;;;;;;;;;;:20;;;;7566:5;7543:11;:20;7555:7;7543:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;7589:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7622:5;;7394:248;7375:3;;;;;;;7333:319;;;;7222:436:::0;:::o;5119:290::-;5231:4;5251:129;5273:12;:10;:12::i;:::-;5299:7;5320:50;5359:10;5320:11;:25;5332:12;:10;:12::i;:::-;5320:25;;;;;;;;;;;;;;;:34;5346:7;5320:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;5251:8;:129::i;:::-;5398:4;5391:11;;5119:290;;;;:::o;22284:263::-;870:12:8;:10;:12::i;:::-;860:22;;:6;;;;;;;;;;:22;;;852:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22433:13:1::1;22424:22;;:5;:22;;;;22416:31;;;::::0;::::1;;22482:4;22465:22;;:5;:22;;;;22457:31;;;::::0;::::1;;22506:5;22499:22;;;22522:9;22533:6;22499:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;22284:263:::0;;;:::o;13677:101::-;13730:4;13753:18;;;;;;;;;;;13746:25;;13677:101;:::o;6165:434::-;6280:7;6322;;6311;:18;;6303:27;;;;;;6346:17;6341:252;;6380:15;6409:19;6420:7;6409:10;:19::i;:::-;6379:49;;;;;;;6450:7;6443:14;;;;;6341:252;6491:23;6526:19;6537:7;6526:10;:19::i;:::-;6488:57;;;;;;;6567:15;6560:22;;;6165:434;;;;;:::o;13562:109::-;870:12:8;:10;:12::i;:::-;860:22;;:6;;;;;;;;;;:22;;;852:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13646:18:1::1;;;;;;;;;;;13645:19;13624:18;;:40;;;;;;;;;;;;;;;;;;13562:109::o:0;2072:38::-;;;:::o;22553:299::-;870:12:8;:10;:12::i;:::-;860:22;;:6;;;;;;;;;;:22;;;852:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22712:7:1::1;:14;22691:10;:17;:35;22683:44;;;::::0;::::1;;22743:9;22738:108;22762:10;:17;22758:1;:21;22738:108;;;22800:35;22809:10;22820:1;22809:13;;;;;;;;;;;;;;22824:7;22832:1;22824:10;;;;;;;;;;;;;;22800:8;:35::i;:::-;;22781:3;;;;;;;22738:108;;;;22553:299:::0;;:::o;13245:151::-;870:12:8;:10;:12::i;:::-;860:22;;:6;;;;;;;;;;:22;;;852:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13296:23:1::1;13322:24;13340:4;13322:9;:24::i;:::-;13296:50;;13356:33;13373:15;13356:16;:33::i;:::-;929:1:8;13245:151:1:o:0;6844:372::-;870:12:8;:10;:12::i;:::-;860:22;;:6;;;;;;;;;;:22;;;852:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6944:15:1::1;6925:35;;:7;:35;;;;6917:44;;;::::0;::::1;;7000:11;:20;7012:7;7000:20;;;;;;;;;;;;;;;;;;;;;;;;;6999:21;6991:30;;;::::0;::::1;;7055:1;7036:7;:16;7044:7;7036:16;;;;;;;;;;;;;;;;:20;7032:107;;;7091:37;7111:7;:16;7119:7;7111:16;;;;;;;;;;;;;;;;7091:19;:37::i;:::-;7072:7;:16;7080:7;7072:16;;;;;;;;;;;;;;;:56;;;;7032:107;7172:4;7149:11;:20;7161:7;7149:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;7186:9;7201:7;7186:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6844:372:::0;:::o;8830:122::-;8895:4;8918:18;:27;8937:7;8918:27;;;;;;;;;;;;;;;;;;;;;;;;;8911:34;;8830:122;;;:::o;7986:358::-;870:12:8;:10;:12::i;:::-;860:22;;:6;;;;;;;;;;:22;;;852:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8059:6:1::1;:15;8066:7;8059:15;;;;;;;;;;;;;;;;;;;;;;;;;8051:24;;;::::0;::::1;;8091:9;8086:252;8110:5;:12;;;;8106:1;:16;8086:252;;;8159:7;8147:19;;:5;8153:1;8147:8;;;;;;;;;;;;;;;;;;;;;;;;;:19;;;8143:185;;;8197:5;8218:1;8203:5;:12;;;;:16;8197:23;;;;;;;;;;;;;;;;;;;;;;;;;8186:5;8192:1;8186:8;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;8256:5;8238:6;:15;8245:7;8238:15;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;8279:5;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8308:5;;8143:185;8124:3;;;;;;;8086:252;;;;7986:358:::0;:::o;1853:88:8:-;1899:7;1925:9;;1918:16;;1853:88;:::o;3966:196:1:-;4032:7;4055:11;:20;4067:7;4055:20;;;;;;;;;;;;;;;;;;;;;;;;;4051:49;;;4084:7;:16;4092:7;4084:16;;;;;;;;;;;;;;;;4077:23;;;;4051:49;4118:37;4138:7;:16;4146:7;4138:16;;;;;;;;;;;;;;;;4118:19;:37::i;:::-;4111:44;;3966:196;;;;:::o;1279:145:8:-;870:12;:10;:12::i;:::-;860:22;;:6;;;;;;;;;;:22;;;852:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1385:1:::1;1348:40;;1369:6;::::0;::::1;;;;;;;;1348:40;;;;;;;;;;;;1415:1;1398:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;1279:145::o:0;5791:118:1:-;5859:4;5882:11;:20;5894:7;5882:20;;;;;;;;;;;;;;;;;;;;;;;;;5875:27;;5791:118;;;:::o;656:77:8:-;694:7;720:6;;;;;;;;;;;713:13;;656:77;:::o;21778:207:1:-;870:12:8;:10;:12::i;:::-;860:22;;:6;;;;;;;;;;:22;;;852:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21919:5:1::1;21896:19;:28;;21888:37;;;::::0;::::1;;21959:19;21936:20;:42;;;;21778:207:::0;:::o;3689:85::-;3728:13;3760:7;3753:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3689:85;:::o;5415:370::-;5532:4;5552:204;5574:12;:10;:12::i;:::-;5600:7;5621:125;5677:15;5621:125;;;;;;;;;;;;;;;;;:11;:25;5633:12;:10;:12::i;:::-;5621:25;;;;;;;;;;;;;;;:34;5647:7;5621:34;;;;;;;;;;;;;;;;:38;;:125;;;;;:::i;:::-;5552:8;:204::i;:::-;5774:4;5767:11;;5415:370;;;;:::o;2308:226:8:-;2377:10;2359:28;;:14;;;;;;;;;;;:28;;;2351:37;;;;;;2425:9;;2406:15;:28;;2398:37;;;;;;2479:14;;;;;;;;;;;2450:44;;2471:6;;;;;;;;;;2450:44;;;;;;;;;;;;2513:14;;;;;;;;;;;2504:6;;:23;;;;;;;;;;;;;;;;;;2308:226::o;4168:193:1:-;4270:4;4290:42;4300:12;:10;:12::i;:::-;4314:9;4325:6;4290:9;:42::i;:::-;4350:4;4343:11;;4168:193;;;;:::o;5915:153::-;870:12:8;:10;:12::i;:::-;860:22;;:6;;;;;;;;;;:22;;;852:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6053:8:1::1;6023:18;:27;6042:7;6023:27;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;5915:153:::0;;:::o;21991:117::-;870:12:8;:10;:12::i;:::-;860:22;;:6;;;;;;;;;;:22;;;852:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22070:5:1::1;22061;:14;;22053:23;;;::::0;::::1;;22096:5;22087:6;:14;;;;21991:117:::0;:::o;7664:316::-;870:12:8;:10;:12::i;:::-;860:22;;:6;;;;;;;;;;:22;;;852:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7746:9:1::1;7741:233;7765:12;:19;7761:1;:23;7741:233;;;7840:15;7813:43;;:12;7826:1;7813:15;;;;;;;;;;;;;;:43;;;;7805:52;;;::::0;::::1;;7918:4;7892:6;:23;7899:12;7912:1;7899:15;;;;;;;;;;;;;;7892:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;7936:5;7947:12;7960:1;7947:15;;;;;;;;;;;;;;7936:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7786:3;;;;;;;7741:233;;;;7664:316:::0;:::o;21573:199::-;870:12:8;:10;:12::i;:::-;860:22;;:6;;;;;;;;;;:22;;;852:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21715:16:1::1;21687:17;;:45;;;;;;;;;;;;;;;;;;21756:9;21743:10;;:22;;;;;;;;;;;;;;;;;;21573:199:::0;;:::o;2018:213:8:-;870:12;:10;:12::i;:::-;860:22;;:6;;;;;;;;;;:22;;;852:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2090:6:::1;::::0;::::1;;;;;;;;2073:14;;:23;;;;;;;;;;;;;;;;;;2123:1;2106:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;2165:4;2147:15;:22;2135:9;:34;;;;2221:1;2184:40;;2205:6;::::0;::::1;;;;;;;;2184:40;;;;;;;;;;;;2018:213:::0;:::o;4367:177:1:-;4480:7;4510:11;:18;4522:5;4510:18;;;;;;;;;;;;;;;:27;4529:7;4510:27;;;;;;;;;;;;;;;;4503:34;;4367:177;;;;:::o;21289:278::-;870:12:8;:10;:12::i;:::-;860:22;;:6;;;;;;;;;;:22;;;852:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21463:2:1::1;21426:33;21449:9;21426:18;21434:9;21426:3;:7;;:18;;;;:::i;:::-;:22;;:33;;;;:::i;:::-;:39;;21418:48;;;::::0;::::1;;21487:3;21477:7;:13;;;;21516:9;21500:13;:25;;;;21551:9;21535:13;:25;;;;21289:278:::0;;;:::o;1573:274:8:-;870:12;:10;:12::i;:::-;860:22;;:6;;;;;;;;;;:22;;;852:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1694:1:::1;1674:22;;:8;:22;;;;1653:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1804:8;1775:38;;1796:6;::::0;::::1;;;;;;;;1775:38;;;;;;;;;;;;1832:8;1823:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;1573:274:::0;:::o;13402:154:1:-;870:12:8;:10;:12::i;:::-;860:22;;:6;;;;;;;;;;:22;;;852:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13451:26:1::1;13480:21;13451:50;;13511:38;13530:18;13511;:38::i;:::-;929:1:8;13402:154:1:o:0;2185:37::-;;;;;;;;;;;;;:::o;587:96:2:-;640:7;666:10;659:17;;587:96;:::o;8958:362:1:-;9097:1;9080:19;;:5;:19;;;;9072:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9177:1;9158:21;;:7;:21;;;;9150:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9259:6;9229:11;:18;9241:5;9229:18;;;;;;;;;;;;;;;:27;9248:7;9229:27;;;;;;;;;;;;;;;:36;;;;9297:7;9281:32;;9290:5;9281:32;;;9306:6;9281:32;;;;;;;;;;;;;;;;;;8958:362;;;:::o;9326:1529::-;9470:1;9452:20;;:6;:20;;;;9444:29;;;;;;9512:1;9491:23;;:9;:23;;;;9483:32;;;;;;9542:1;9533:6;:10;9525:19;;;;;;9563:6;:14;9570:6;9563:14;;;;;;;;;;;;;;;;;;;;;;;;;9562:15;9554:24;;;;;;9597:6;:17;9604:9;9597:17;;;;;;;;;;;;;;;;;;;;;;;;;9596:18;9588:27;;;;;;9634:6;:17;9641:9;9634:17;;;;;;;;;;;;;;;;;;;;;;;;;9633:18;9625:27;;;;;;9677:7;:5;:7::i;:::-;9667:17;;:6;:17;;;;:41;;;;;9701:7;:5;:7::i;:::-;9688:20;;:9;:20;;;;9667:41;9663:114;;;9742:6;;9732;:16;;9724:25;;;;;;9663:114;9787:28;9818:24;9836:4;9818:9;:24::i;:::-;9787:55;;9922:24;9973:20;;9949;:44;;9922:71;;10077:6;;10053:20;:30;10049:223;;10122:6;;10099:29;;10049:223;;;10241:20;;10218:43;;10049:223;10300:6;;;;;;;;;;;10299:7;:41;;;;;10322:18;;;;;;;;;;;10299:41;:76;;;;;10356:19;10299:76;:124;;;;;10409:13;10391:32;;:6;:32;;;;10299:124;10282:242;;;10477:36;10492:20;10477:14;:36::i;:::-;10282:242;10534:12;10549:4;10534:19;;10631:18;:26;10650:6;10631:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;10661:18;:29;10680:9;10661:29;;;;;;;;;;;;;;;;;;;;;;;;;10631:59;10627:105;;;10716:5;10706:15;;10627:105;10798:50;10813:6;10821:9;10832:6;10840:7;10798:14;:50::i;:::-;9326:1529;;;;;;:::o;1183:217:9:-;1299:7;1331:1;1326;:6;;1334:12;1318:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1357:9;1373:1;1369;:5;1357:17;;1392:1;1385:8;;;1183:217;;;;;:::o;20520:162:1:-;20562:7;20582:15;20599;20618:19;:17;:19::i;:::-;20581:56;;;;20655:20;20667:7;20655;:11;;:20;;;;:::i;:::-;20648:27;;;;20520:162;:::o;2568:130:9:-;2626:7;2652:39;2656:1;2659;2652:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2645:46;;2568:130;;;;:::o;311:176::-;369:7;388:9;404:1;400;:5;388:17;;428:1;423;:6;;415:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;479:1;472:8;;;311:176;;;;:::o;18655:798:1:-;18751:7;18772;18793;18814;18835;18856;18902:23;18939:12;18965:30;19008:63;19020:7;19029;;19038:32;19056:13;;19038;;:17;;:32;;;;:::i;:::-;19008:11;:63::i;:::-;18888:183;;;;;;19081:19;19103:10;:8;:10::i;:::-;19081:32;;19124:15;19141:23;19166:12;19182:85;19207:7;19228:4;19246:11;19182;:85::i;:::-;19123:144;;;;;;19299:7;19320:15;19349:4;19367:15;19396:4;19414:22;19278:168;;;;;;;;;;;;;;;;;;;18655:798;;;;;;;:::o;12153:536::-;12277:21;12315:1;12301:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12277:40;;12345:4;12327;12332:1;12327:7;;;;;;;;;;;;;:23;;;;;;;;;;;12370:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12360:4;12365:1;12360:7;;;;;;;;;;;;;:32;;;;;;;;;;;12403:62;12420:4;12435:15;12453:11;12403:8;:62::i;:::-;12492:15;:66;;;12572:11;12597:1;12612:4;12638;12657:15;12492:190;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12153:536;;:::o;13080:103::-;13142:17;;;;;;;;;;;:26;;:34;13169:6;13142:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13080:103;:::o;10861:1286::-;2295:4;2286:6;;:13;;;;;;;;;;;;;;;;;;10981:26:::1;11010:73;11050:32;11068:13;;11050;;:17;;:32;;;;:::i;:::-;11010:35;11039:5;11010:24;11028:5;11010:13;;:17;;:24;;;;:::i;:::-;:28;;:35;;;;:::i;:::-;:39;;:73;;;;:::i;:::-;10981:102;;11093:19;11115:56;11165:5;11115:45;11154:5;11115:34;11138:10;11115:18;:22;;:34;;;;:::i;:::-;:38;;:45;;;;:::i;:::-;:49;;:56;;;;:::i;:::-;11093:78;;11181:17;11201:27;11216:11;11201:10;:14;;:27;;;;:::i;:::-;11181:47;;11282:23;11308:16;11322:1;11308:9;:13;;:16;;;;:::i;:::-;11282:42;;11334:22;11359:30;11373:15;11359:9;:13;;:30;;;;:::i;:::-;11334:55;;11400:28;11431:21;11400:52;;11494:20;11517:32;11537:11;11517:15;:19;;:32;;;;:::i;:::-;11494:55;;11559:30;11576:12;11559:16;:30::i;:::-;11631:26;11660:47;11686:20;11660:21;:25;;:47;;;;:::i;:::-;11631:76;;11800:17;11820:57;11864:12;11820:39;11843:15;11820:18;:22;;:39;;;;:::i;:::-;:43;;:57;;;;:::i;:::-;11800:77;;11924:39;11937:14;11953:9;11924:12;:39::i;:::-;11979:58;11994:15;12011:9;12022:14;11979:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12087:53;12106:33;12129:9;12106:18;:22;;:33;;;;:::i;:::-;12087:18;:53::i;:::-;2309:1;;;;;;;;;2329:5:::0;2320:6;;:14;;;;;;;;;;;;;;;;;;10861:1286;:::o;13784:817::-;13934:7;13929:28;;13943:14;:12;:14::i;:::-;13929:28;13972:11;:19;13984:6;13972:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;13996:11;:22;14008:9;13996:22;;;;;;;;;;;;;;;;;;;;;;;;;13995:23;13972:46;13968:587;;;14034:48;14056:6;14064:9;14075:6;14034:21;:48::i;:::-;13968:587;;;14104:11;:19;14116:6;14104:19;;;;;;;;;;;;;;;;;;;;;;;;;14103:20;:46;;;;;14127:11;:22;14139:9;14127:22;;;;;;;;;;;;;;;;;;;;;;;;;14103:46;14099:456;;;14165:46;14185:6;14193:9;14204:6;14165:19;:46::i;:::-;14099:456;;;14233:11;:19;14245:6;14233:19;;;;;;;;;;;;;;;;;;;;;;;;;14232:20;:47;;;;;14257:11;:22;14269:9;14257:22;;;;;;;;;;;;;;;;;;;;;;;;;14256:23;14232:47;14228:327;;;14295:44;14313:6;14321:9;14332:6;14295:17;:44::i;:::-;14228:327;;;14360:11;:19;14372:6;14360:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;14383:11;:22;14395:9;14383:22;;;;;;;;;;;;;;;;;;;;;;;;;14360:45;14356:199;;;14421:48;14443:6;14451:9;14462:6;14421:21;:48::i;:::-;14356:199;;;14500:44;14518:6;14526:9;14537:6;14500:17;:44::i;:::-;14356:199;14228:327;14099:456;13968:587;14570:7;14565:29;;14579:15;:13;:15::i;:::-;14565:29;13784:817;;;;:::o;20688:595::-;20739:7;20748;20767:15;20785:7;;20767:25;;20802:15;20820:7;;20802:25;;20843:9;20838:331;20862:9;:16;;;;20858:1;:20;20838:331;;;20944:7;20920;:21;20928:9;20938:1;20928:12;;;;;;;;;;;;;;;;;;;;;;;;;20920:21;;;;;;;;;;;;;;;;:31;:82;;;;20995:7;20971;:21;20979:9;20989:1;20979:12;;;;;;;;;;;;;;;;;;;;;;;;;20971:21;;;;;;;;;;;;;;;;:31;20920:82;20899:143;;;21025:7;;21034;;21017:25;;;;;;;;;20899:143;21066:34;21078:7;:21;21086:9;21096:1;21086:12;;;;;;;;;;;;;;;;;;;;;;;;;21078:21;;;;;;;;;;;;;;;;21066:7;:11;;:34;;;;:::i;:::-;21056:44;;21124:34;21136:7;:21;21144:9;21154:1;21144:12;;;;;;;;;;;;;;;;;;;;;;;;;21136:21;;;;;;;;;;;;;;;;21124:7;:11;;:34;;;;:::i;:::-;21114:44;;20880:3;;;;;;;20838:331;;;;21193:20;21205:7;;21193;;:11;;:20;;;;:::i;:::-;21183:7;:30;21179:61;;;21223:7;;21232;;21215:25;;;;;;;;21179:61;21259:7;21268;21251:25;;;;;;20688:595;;;:::o;3180:302:9:-;3296:7;3327:1;3323;:5;3330:12;3315:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3353:9;3369:1;3365;:5;;;;;;3353:17;;3474:1;3467:8;;;3180:302;;;;;:::o;19459:530:1:-;19633:7;19654;19675;19707:12;19722:28;19746:3;19722:19;19734:6;19722:7;:11;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;19707:43;;19760:30;19793:43;19832:3;19793:34;19805:21;19793:7;:11;;:34;;;;:::i;:::-;:38;;:43;;;;:::i;:::-;19760:76;;19846:23;19872:45;19894:22;19872:17;19884:4;19872:7;:11;;:17;;;;:::i;:::-;:21;;:45;;;;:::i;:::-;19846:71;;19936:15;19953:4;19959:22;19928:54;;;;;;;;;19459:530;;;;;;;:::o;19995:519::-;20157:7;20178;20199;20231:15;20249:24;20261:11;20249:7;:11;;:24;;;;:::i;:::-;20231:42;;20283:12;20298:21;20307:11;20298:4;:8;;:21;;;;:::i;:::-;20283:36;;20329:23;20355:17;20367:4;20355:7;:11;;:17;;;;:::i;:::-;20329:43;;20395:1;20387:4;:9;20383:75;;20419:28;20442:4;20419:18;20435:1;20419:11;:15;;:18;;;;:::i;:::-;:22;;:28;;;;:::i;:::-;20412:35;;20383:75;20476:7;20485:15;20502:4;20468:39;;;;;;;;;19995:519;;;;;;;:::o;1647:459:9:-;1705:7;1951:1;1946;:6;1942:45;;;1975:1;1968:8;;;;1942:45;1997:9;2013:1;2009;:5;1997:17;;2041:1;2036;2032;:5;;;;;;:10;2024:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2098:1;2091:8;;;1647:459;;;;;:::o;758:134::-;816:7;842:43;846:1;849;842:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;835:50;;758:134;;;;:::o;12695:379:1:-;12775:62;12792:4;12807:15;12825:11;12775:8;:62::i;:::-;12873:15;:31;;;12912:9;12944:4;12963:11;12988:1;13003;13018:10;;;;;;;;;;;13042:15;12873:194;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12695:379;;:::o;8350:311::-;8407:1;8396:7;;:12;:34;;;;;8429:1;8412:13;;:18;8396:34;:56;;;;;8451:1;8434:13;;:18;8396:56;8392:69;;;8454:7;;8392:69;8485:7;;8471:11;:21;;;;8522:13;;8502:17;:33;;;;8565:13;;8545:17;:33;;;;8599:1;8589:7;:11;;;;8626:1;8610:13;:17;;;;8653:1;8637:13;:17;;;;8350:311;:::o;16251:840::-;16396:15;16425:23;16462:12;16488:23;16525:12;16551:27;16591:19;16602:7;16591:10;:19::i;:::-;16382:228;;;;;;;;;;;;16620:19;16642:10;:8;:10::i;:::-;16620:32;;16662:27;16692:36;16716:11;16692:19;:23;;:36;;;;:::i;:::-;16662:66;;16757:28;16777:7;16757;:15;16765:6;16757:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;16739:7;:15;16747:6;16739:15;;;;;;;;;;;;;;;:46;;;;16813:28;16833:7;16813;:15;16821:6;16813:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;16795:7;:15;16803:6;16795:15;;;;;;;;;;;;;;;:46;;;;16872:64;16916:19;16872:39;16895:15;16872:7;:18;16880:9;16872:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;:43;;:64;;;;:::i;:::-;16851:7;:18;16859:9;16851:18;;;;;;;;;;;;;;;:85;;;;16947:44;16971:19;16947:23;:44::i;:::-;17001:23;17013:4;17019;17001:11;:23::i;:::-;17057:9;17040:44;;17049:6;17040:44;;;17068:15;17040:44;;;;;;;;;;;;;;;;;;16251:840;;;;;;;;;;;:::o;15393:852::-;15536:15;15565:23;15602:12;15628:23;15665:12;15691:27;15731:19;15742:7;15731:10;:19::i;:::-;15522:228;;;;;;;;;;;;15760:19;15782:10;:8;:10::i;:::-;15760:32;;15802:27;15832:36;15856:11;15832:19;:23;;:36;;;;:::i;:::-;15802:66;;15897:28;15917:7;15897;:15;15905:6;15897:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;15879:7;:15;15887:6;15879:15;;;;;;;;;;;;;;;:46;;;;15956:39;15979:15;15956:7;:18;15964:9;15956:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;15935:7;:18;15943:9;15935:18;;;;;;;;;;;;;;;:60;;;;16026:64;16070:19;16026:39;16049:15;16026:7;:18;16034:9;16026:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;:43;;:64;;;;:::i;:::-;16005:7;:18;16013:9;16005:18;;;;;;;;;;;;;;;:85;;;;16101:44;16125:19;16101:23;:44::i;:::-;16155:23;16167:4;16173;16155:11;:23::i;:::-;16211:9;16194:44;;16203:6;16194:44;;;16222:15;16194:44;;;;;;;;;;;;;;;;;;15393:852;;;;;;;;;;;:::o;14607:780::-;14748:15;14777:23;14814:12;14840:23;14877:12;14903:27;14943:19;14954:7;14943:10;:19::i;:::-;14734:228;;;;;;;;;;;;14972:19;14994:10;:8;:10::i;:::-;14972:32;;15014:27;15044:36;15068:11;15044:19;:23;;:36;;;;:::i;:::-;15014:66;;15109:28;15129:7;15109;:15;15117:6;15109:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;15091:7;:15;15099:6;15091:15;;;;;;;;;;;;;;;:46;;;;15168:64;15212:19;15168:39;15191:15;15168:7;:18;15176:9;15168:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;:43;;:64;;;;:::i;:::-;15147:7;:18;15155:9;15147:18;;;;;;;;;;;;;;;:85;;;;15243:44;15267:19;15243:23;:44::i;:::-;15297:23;15309:4;15315;15297:11;:23::i;:::-;15353:9;15336:44;;15345:6;15336:44;;;15364:15;15336:44;;;;;;;;;;;;;;;;;;14607:780;;;;;;;;;;;:::o;17097:910::-;17242:15;17271:23;17308:12;17334:23;17371:12;17397:27;17437:19;17448:7;17437:10;:19::i;:::-;17228:228;;;;;;;;;;;;17466:19;17488:10;:8;:10::i;:::-;17466:32;;17508:27;17538:36;17562:11;17538:19;:23;;:36;;;;:::i;:::-;17508:66;;17603:28;17623:7;17603;:15;17611:6;17603:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;17585:7;:15;17593:6;17585:15;;;;;;;;;;;;;;;:46;;;;17659:28;17679:7;17659;:15;17667:6;17659:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;17641:7;:15;17649:6;17641:15;;;;;;;;;;;;;;;:46;;;;17718:39;17741:15;17718:7;:18;17726:9;17718:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;17697:7;:18;17705:9;17697:18;;;;;;;;;;;;;;;:60;;;;17788:64;17832:19;17788:39;17811:15;17788:7;:18;17796:9;17788:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;:43;;:64;;;;:::i;:::-;17767:7;:18;17775:9;17767:18;;;;;;;;;;;;;;;:85;;;;17863:44;17887:19;17863:23;:44::i;:::-;17917:23;17929:4;17935;17917:11;:23::i;:::-;17973:9;17956:44;;17965:6;17956:44;;;17984:15;17956:44;;;;;;;;;;;;;;;;;;17097:910;;;;;;;;;;;:::o;8667:157::-;8720:11;;8710:7;:21;;;;8757:17;;8741:13;:33;;;;8800:17;;8784:13;:33;;;;8667:157::o;18013:417::-;18093:19;18115:10;:8;:10::i;:::-;18093:32;;18135:27;18165:36;18189:11;18165:19;:23;;:36;;;;:::i;:::-;18135:66;;18237:47;18264:19;18237:7;:22;18253:4;18237:22;;;;;;;;;;;;;;;;:26;;:47;;;;:::i;:::-;18212:7;:22;18228:4;18212:22;;;;;;;;;;;;;;;:72;;;;18299:11;:26;18319:4;18299:26;;;;;;;;;;;;;;;;;;;;;;;;;18295:129;;;18366:47;18393:19;18366:7;:22;18382:4;18366:22;;;;;;;;;;;;;;;;:26;;:47;;;;:::i;:::-;18341:7;:22;18357:4;18341:22;;;;;;;;;;;;;;;:72;;;;18295:129;18013:417;;;:::o;18436:145::-;18513:17;18525:4;18513:7;;:11;;:17;;;;:::i;:::-;18503:7;:27;;;;18554:20;18569:4;18554:10;;:14;;:20;;;;:::i;:::-;18541:10;:33;;;;18436:145;;:::o

Swarm Source

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