ETH Price: $3,307.77 (-0.53%)
Gas: 10 Gwei

Token

Ninjew Turtles (TMNJ)
 

Overview

Max Total Supply

1,000,000,000 TMNJ

Holders

16

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
221,379,667.234237525580167878 TMNJ

Value
$0.00
0x1101194f932b871bf971a3a4805f11de836ea394
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
TMNJ

Compiler Version
v0.8.22+commit.4fc1097e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-01-15
*/

/**
$TMNJ Teenage Mutant Ninjew Turtles
... coming to a city near you!

2% of ALL transactions will programmatically go directly to The Abolition 
Initiative to fight human trafficking via the Giving Block.

Organization: The Abolition Initiative
Donation Wallet: 0xFD5ff21404940E3F79ab3eb9489e0cE8fb4fe4bc

https://www.ninjewturtles.xyz
https://twitter.com/ninjewturtles
https://t.me/ninjewturtles
**/


// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;
pragma experimental ABIEncoderV2;

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

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

contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual 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");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(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"
        );
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @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
    );
}

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(
        address account
    ) public view virtual override returns (uint256) {
        return _balances[account];
    }

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

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(
        address owner,
        address spender
    ) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(
        address spender,
        uint256 amount
    ) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(
            currentAllowance >= amount,
            "ERC20: transfer amount exceeds allowance"
        );
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

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

    function decreaseAllowance(
        address spender,
        uint256 subtractedValue
    ) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(
            senderBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        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 _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

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

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

interface IUniswapV2Router02 {
    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 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;
}

//  Main Token Contract
contract TMNJ is ERC20, Ownable {
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    bool private swapping;

    address public charityWallet;
    address public devWallet;

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public swapEnabled = false;
    bool public tradingActive = false;

    uint256 public launchedAt;
    uint256 public launchedAtTimestamp;

    uint256 public buyTotalFees = 10;
    uint256 public buyCharityFee = 5;
    uint256 public buyDevFee = 5;

    uint256 public sellTotalFees = 10;
    uint256 public sellCharityFee = 5;
    uint256 public sellDevFee = 5;

    uint256 tokensForCharity;
    uint256 tokenForDev;

    /******************/

    // exlcude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;
    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event CharityWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event devWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor() ERC20("Ninjew Turtles", "TMNJ") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 totalSupply = 1_000_000_000 * 1e18; // 1 billion

        maxTransactionAmount = 20_000_000 * 1e18; // 2%   of total supply is maxTransactionAmountTxn
        maxWallet = 20_000_000 * 1e18; // 3 % of total supply is  maxWallet
        swapTokensAtAmount = 1_000_000 * 1e18; //.1% at start

        charityWallet = address(msg.sender); // set as Charity wallet
        devWallet = address(msg.sender); // set as dev wallet
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);

        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(owner(), totalSupply);
    }

    receive() external payable {}

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    function launched() internal view returns (bool) {
        return launchedAt != 0;
    }

    function launch() public onlyOwner {
        require(launchedAt == 0, "Already launched boi");
        launchedAt = block.number;
        launchedAtTimestamp = block.timestamp;
        tradingActive = true;
        swapEnabled = true;
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(
        uint256 newAmount
    ) external onlyOwner returns (bool) {
        swapTokensAtAmount = newAmount * (10 ** 18);
        return true;
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        maxTransactionAmount = newNum * (10 ** 18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        maxWallet = newNum * (10 ** 18);
    }

    function excludeFromMaxTransaction(
        address updAds,
        bool isEx
    ) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function updateBuyFees(
        uint256 _charityFee,
        uint256 _devFee
    ) external onlyOwner {
        buyCharityFee = _charityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyCharityFee + buyDevFee;
    }

    function updateSellFees(
        uint256 _charityFee,
        uint256 _devFee
    ) external onlyOwner {
        sellCharityFee = _charityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellCharityFee + sellDevFee;
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function setAutomatedMarketMakerPair(
        address pair,
        bool value
    ) public onlyOwner {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateCharityWallet(
        address newCharityWallet
    ) external onlyOwner {
        emit CharityWalletUpdated(newCharityWallet, charityWallet);
        charityWallet = newCharityWallet;
    }

    function updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }
                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Sell transfer amount exceeds the maxTransactionAmount."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = (amount * sellTotalFees) / 100;
                tokensForCharity += (fees * sellCharityFee) / sellTotalFees;
                tokenForDev += (fees * sellDevFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = (amount * buyTotalFees) / 100;
                tokensForCharity += (fees * buyCharityFee) / buyTotalFees;
                tokenForDev += (fees * buyDevFee) / buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

        super._transfer(from, to, amount);
    }

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

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            deadAddress,
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForCharity + tokenForDev;
        bool success;

        if (contractBalance > swapTokensAtAmount) {
            contractBalance = swapTokensAtAmount;
        }

        uint256 amountToSwapForETH = contractBalance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = (address(this).balance);
        uint256 ethForDev = (ethBalance * tokenForDev) / totalTokensToSwap;

        tokensForCharity = 0;
        tokenForDev = 0;

        (success, ) = address(devWallet).call{value: ethForDev}("");
        (success, ) = address(charityWallet).call{
            value: address(this).balance
        }("");
    }

    function withdrawETH(uint256 _amount) external onlyOwner {
        require(address(this).balance >= _amount, "Invalid Amount");
        payable(msg.sender).transfer(_amount);
    }

    function withdrawToken(IERC20 _token, uint256 _amount) external onlyOwner {
        require(_token.balanceOf(address(this)) >= _amount, "Invalid Amount");
        _token.transfer(msg.sender, _amount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"CharityWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","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":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","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":"tokensIntoLiquidity","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyCharityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"charityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","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":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAtTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellCharityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"uint256","name":"_charityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newCharityWallet","type":"address"}],"name":"updateCharityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_charityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600b5f6101000a81548160ff0219169083151502179055505f600b60016101000a81548160ff0219169083151502179055505f600b60026101000a81548160ff021916908315150217905550600a600e556005600f556005601055600a601155600560125560056013553480156200007c575f80fd5b506040518060400160405280600e81526020017f4e696e6a657720547572746c65730000000000000000000000000000000000008152506040518060400160405280600481526020017f544d4e4a000000000000000000000000000000000000000000000000000000008152508160039081620000fa919062000c57565b5080600490816200010c919062000c57565b5050506200012f62000123620004cb60201b60201c565b620004d260201b60201c565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d90506200015a8160016200059560201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001d8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001fe919062000da0565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000264573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200028a919062000da0565b6040518363ffffffff1660e01b8152600401620002a992919062000de1565b6020604051808303815f875af1158015620002c6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002ec919062000da0565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200033460a05160016200059560201b60201c565b6200034960a05160016200067c60201b60201c565b5f6b033b2e3c9fd0803ce800000090506a108b2a2c280290940000006008819055506a108b2a2c28029094000000600a8190555069d3c21bcecceda10000006009819055503360065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503360075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000430620004226200071a60201b60201c565b60016200074260201b60201c565b620004433060016200074260201b60201c565b6200045861dead60016200074260201b60201c565b6200047a6200046c6200071a60201b60201c565b60016200059560201b60201c565b6200048d3060016200059560201b60201c565b620004a261dead60016200059560201b60201c565b620004c3620004b66200071a60201b60201c565b826200087960201b60201c565b505062000fc2565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620005a5620004cb60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620005cb6200071a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000624576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200061b9062000e6a565b60405180910390fd5b8060175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000752620004cb60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620007786200071a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620007d1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007c89062000e6a565b60405180910390fd5b8060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200086d919062000ea6565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620008ea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008e19062000f0f565b60405180910390fd5b620008fd5f8383620009e960201b60201c565b8060025f82825462000910919062000f5c565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825462000964919062000f5c565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620009ca919062000fa7565b60405180910390a3620009e55f8383620009ee60201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000a6f57607f821691505b60208210810362000a855762000a8462000a2a565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000ae97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000aac565b62000af5868362000aac565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000b3f62000b3962000b338462000b0d565b62000b16565b62000b0d565b9050919050565b5f819050919050565b62000b5a8362000b1f565b62000b7262000b698262000b46565b84845462000ab8565b825550505050565b5f90565b62000b8862000b7a565b62000b9581848462000b4f565b505050565b5b8181101562000bbc5762000bb05f8262000b7e565b60018101905062000b9b565b5050565b601f82111562000c0b5762000bd58162000a8b565b62000be08462000a9d565b8101602085101562000bf0578190505b62000c0862000bff8562000a9d565b83018262000b9a565b50505b505050565b5f82821c905092915050565b5f62000c2d5f198460080262000c10565b1980831691505092915050565b5f62000c47838362000c1c565b9150826002028217905092915050565b62000c6282620009f3565b67ffffffffffffffff81111562000c7e5762000c7d620009fd565b5b62000c8a825462000a57565b62000c9782828562000bc0565b5f60209050601f83116001811462000ccd575f841562000cb8578287015190505b62000cc4858262000c3a565b86555062000d33565b601f19841662000cdd8662000a8b565b5f5b8281101562000d065784890151825560018201915060208501945060208101905062000cdf565b8683101562000d26578489015162000d22601f89168262000c1c565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000d6a8262000d3f565b9050919050565b62000d7c8162000d5e565b811462000d87575f80fd5b50565b5f8151905062000d9a8162000d71565b92915050565b5f6020828403121562000db85762000db762000d3b565b5b5f62000dc78482850162000d8a565b91505092915050565b62000ddb8162000d5e565b82525050565b5f60408201905062000df65f83018562000dd0565b62000e05602083018462000dd0565b9392505050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f62000e5260208362000e0c565b915062000e5f8262000e1c565b602082019050919050565b5f6020820190508181035f83015262000e838162000e44565b9050919050565b5f8115159050919050565b62000ea08162000e8a565b82525050565b5f60208201905062000ebb5f83018462000e95565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62000ef7601f8362000e0c565b915062000f048262000ec1565b602082019050919050565b5f6020820190508181035f83015262000f288162000ee9565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000f688262000b0d565b915062000f758362000b0d565b925082820190508082111562000f905762000f8f62000f2f565b5b92915050565b62000fa18162000b0d565b82525050565b5f60208201905062000fbc5f83018462000f96565b92915050565b60805160a05161464f620010005f395f818161133101526118ca01525f8181610e500152818161333a015281816134190152613440015261464f5ff3fe6080604052600436106102e7575f3560e01c80637b2087691161018f578063bbc0c742116100db578063d257b34f11610094578063e2f456051161006e578063e2f4560514610b30578063f14210a614610b5a578063f2fde38b14610b82578063f8b45b0514610baa576102ee565b8063d257b34f14610a8e578063d85ba06314610aca578063dd62ed3e14610af4576102ee565b8063bbc0c74214610996578063bf56b371146109c0578063c0246668146109ea578063c18bc19514610a12578063c6d2577d14610a3a578063c8c8ebe414610a64576102ee565b80639c3b4fdc11610148578063a1dc92bc11610122578063a1dc92bc146108b8578063a457c2d7146108e2578063a9059cbb1461091e578063b62496f51461095a576102ee565b80639c3b4fdc1461083c5780639e281a9814610866578063a0d82dc51461088e576102ee565b80637b208769146107445780638da5cb5b1461076e5780638ea5220f14610798578063924de9b7146107c257806395d89b41146107ea5780639a7a23d614610814576102ee565b8063313ce5671161024e57806366ca9b831161020757806370a08231116101e157806370a08231146106a0578063715018a6146106dc578063751039fc146106f25780637571336a1461071c576102ee565b806366ca9b83146106245780636a486a8e1461064c5780636ddd171314610676576102ee565b8063313ce5671461050657806339509351146105305780633e65d4aa1461056c57806349bd5a5e146105945780634a62bb65146105be5780634fbee193146105e8576102ee565b80631694505e116102a05780631694505e146103fc57806318160ddd146104265780631816467f14610450578063203e727e1461047857806323b872dd146104a057806327c8f835146104dc576102ee565b806301339c21146102f257806302dbd8f81461030857806306fdde0314610330578063095ea7b31461035a5780630d7f14411461039657806310d5de53146103c0576102ee565b366102ee57005b5f80fd5b3480156102fd575f80fd5b50610306610bd4565b005b348015610313575f80fd5b5061032e60048036038101906103299190613507565b610cda565b005b34801561033b575f80fd5b50610344610d7e565b60405161035191906135cf565b60405180910390f35b348015610365575f80fd5b50610380600480360381019061037b9190613649565b610e0e565b60405161038d91906136a1565b60405180910390f35b3480156103a1575f80fd5b506103aa610e2b565b6040516103b791906136c9565b60405180910390f35b3480156103cb575f80fd5b506103e660048036038101906103e191906136e2565b610e31565b6040516103f391906136a1565b60405180910390f35b348015610407575f80fd5b50610410610e4e565b60405161041d9190613768565b60405180910390f35b348015610431575f80fd5b5061043a610e72565b60405161044791906136c9565b60405180910390f35b34801561045b575f80fd5b50610476600480360381019061047191906136e2565b610e7b565b005b348015610483575f80fd5b5061049e60048036038101906104999190613781565b610fb5565b005b3480156104ab575f80fd5b506104c660048036038101906104c191906137ac565b61104e565b6040516104d391906136a1565b60405180910390f35b3480156104e7575f80fd5b506104f0611140565b6040516104fd919061380b565b60405180910390f35b348015610511575f80fd5b5061051a611146565b604051610527919061383f565b60405180910390f35b34801561053b575f80fd5b5061055660048036038101906105519190613649565b61114e565b60405161056391906136a1565b60405180910390f35b348015610577575f80fd5b50610592600480360381019061058d91906136e2565b6111f5565b005b34801561059f575f80fd5b506105a861132f565b6040516105b5919061380b565b60405180910390f35b3480156105c9575f80fd5b506105d2611353565b6040516105df91906136a1565b60405180910390f35b3480156105f3575f80fd5b5061060e600480360381019061060991906136e2565b611365565b60405161061b91906136a1565b60405180910390f35b34801561062f575f80fd5b5061064a60048036038101906106459190613507565b6113b7565b005b348015610657575f80fd5b5061066061145b565b60405161066d91906136c9565b60405180910390f35b348015610681575f80fd5b5061068a611461565b60405161069791906136a1565b60405180910390f35b3480156106ab575f80fd5b506106c660048036038101906106c191906136e2565b611474565b6040516106d391906136c9565b60405180910390f35b3480156106e7575f80fd5b506106f06114b9565b005b3480156106fd575f80fd5b50610706611540565b60405161071391906136a1565b60405180910390f35b348015610727575f80fd5b50610742600480360381019061073d9190613882565b6115dd565b005b34801561074f575f80fd5b506107586116b1565b604051610765919061380b565b60405180910390f35b348015610779575f80fd5b506107826116d6565b60405161078f919061380b565b60405180910390f35b3480156107a3575f80fd5b506107ac6116fe565b6040516107b9919061380b565b60405180910390f35b3480156107cd575f80fd5b506107e860048036038101906107e391906138c0565b611723565b005b3480156107f5575f80fd5b506107fe6117bc565b60405161080b91906135cf565b60405180910390f35b34801561081f575f80fd5b5061083a60048036038101906108359190613882565b61184c565b005b348015610847575f80fd5b50610850611964565b60405161085d91906136c9565b60405180910390f35b348015610871575f80fd5b5061088c60048036038101906108879190613926565b61196a565b005b348015610899575f80fd5b506108a2611b20565b6040516108af91906136c9565b60405180910390f35b3480156108c3575f80fd5b506108cc611b26565b6040516108d991906136c9565b60405180910390f35b3480156108ed575f80fd5b5061090860048036038101906109039190613649565b611b2c565b60405161091591906136a1565b60405180910390f35b348015610929575f80fd5b50610944600480360381019061093f9190613649565b611c12565b60405161095191906136a1565b60405180910390f35b348015610965575f80fd5b50610980600480360381019061097b91906136e2565b611c2f565b60405161098d91906136a1565b60405180910390f35b3480156109a1575f80fd5b506109aa611c4c565b6040516109b791906136a1565b60405180910390f35b3480156109cb575f80fd5b506109d4611c5f565b6040516109e191906136c9565b60405180910390f35b3480156109f5575f80fd5b50610a106004803603810190610a0b9190613882565b611c65565b005b348015610a1d575f80fd5b50610a386004803603810190610a339190613781565b611d87565b005b348015610a45575f80fd5b50610a4e611e20565b604051610a5b91906136c9565b60405180910390f35b348015610a6f575f80fd5b50610a78611e26565b604051610a8591906136c9565b60405180910390f35b348015610a99575f80fd5b50610ab46004803603810190610aaf9190613781565b611e2c565b604051610ac191906136a1565b60405180910390f35b348015610ad5575f80fd5b50610ade611ecc565b604051610aeb91906136c9565b60405180910390f35b348015610aff575f80fd5b50610b1a6004803603810190610b159190613964565b611ed2565b604051610b2791906136c9565b60405180910390f35b348015610b3b575f80fd5b50610b44611f54565b604051610b5191906136c9565b60405180910390f35b348015610b65575f80fd5b50610b806004803603810190610b7b9190613781565b611f5a565b005b348015610b8d575f80fd5b50610ba86004803603810190610ba391906136e2565b612060565b005b348015610bb5575f80fd5b50610bbe612156565b604051610bcb91906136c9565b60405180910390f35b610bdc61215c565b73ffffffffffffffffffffffffffffffffffffffff16610bfa6116d6565b73ffffffffffffffffffffffffffffffffffffffff1614610c50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c47906139ec565b60405180910390fd5b5f600c5414610c94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8b90613a54565b60405180910390fd5b43600c8190555042600d819055506001600b60026101000a81548160ff0219169083151502179055506001600b60016101000a81548160ff021916908315150217905550565b610ce261215c565b73ffffffffffffffffffffffffffffffffffffffff16610d006116d6565b73ffffffffffffffffffffffffffffffffffffffff1614610d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4d906139ec565b60405180910390fd5b8160128190555080601381905550601354601254610d749190613a9f565b6011819055505050565b606060038054610d8d90613aff565b80601f0160208091040260200160405190810160405280929190818152602001828054610db990613aff565b8015610e045780601f10610ddb57610100808354040283529160200191610e04565b820191905f5260205f20905b815481529060010190602001808311610de757829003601f168201915b5050505050905090565b5f610e21610e1a61215c565b8484612163565b6001905092915050565b60125481565b6017602052805f5260405f205f915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b610e8361215c565b73ffffffffffffffffffffffffffffffffffffffff16610ea16116d6565b73ffffffffffffffffffffffffffffffffffffffff1614610ef7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eee906139ec565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610fbd61215c565b73ffffffffffffffffffffffffffffffffffffffff16610fdb6116d6565b73ffffffffffffffffffffffffffffffffffffffff1614611031576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611028906139ec565b60405180910390fd5b670de0b6b3a7640000816110459190613b2f565b60088190555050565b5f61105a848484612326565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6110a161215c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611120576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111790613be0565b60405180910390fd5b6111348561112c61215c565b858403612163565b60019150509392505050565b61dead81565b5f6012905090565b5f6111eb61115a61215c565b848460015f61116761215c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546111e69190613a9f565b612163565b6001905092915050565b6111fd61215c565b73ffffffffffffffffffffffffffffffffffffffff1661121b6116d6565b73ffffffffffffffffffffffffffffffffffffffff1614611271576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611268906139ec565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fc20073d1c4443096c55d22a3812db7261aa6911634e1a0850f068d0c9923402d60405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b5f9054906101000a900460ff1681565b5f60165f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b6113bf61215c565b73ffffffffffffffffffffffffffffffffffffffff166113dd6116d6565b73ffffffffffffffffffffffffffffffffffffffff1614611433576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142a906139ec565b60405180910390fd5b81600f8190555080601081905550601054600f546114519190613a9f565b600e819055505050565b60115481565b600b60019054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6114c161215c565b73ffffffffffffffffffffffffffffffffffffffff166114df6116d6565b73ffffffffffffffffffffffffffffffffffffffff1614611535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152c906139ec565b60405180910390fd5b61153e5f612d36565b565b5f61154961215c565b73ffffffffffffffffffffffffffffffffffffffff166115676116d6565b73ffffffffffffffffffffffffffffffffffffffff16146115bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b4906139ec565b60405180910390fd5b5f600b5f6101000a81548160ff0219169083151502179055506001905090565b6115e561215c565b73ffffffffffffffffffffffffffffffffffffffff166116036116d6565b73ffffffffffffffffffffffffffffffffffffffff1614611659576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611650906139ec565b60405180910390fd5b8060175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61172b61215c565b73ffffffffffffffffffffffffffffffffffffffff166117496116d6565b73ffffffffffffffffffffffffffffffffffffffff161461179f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611796906139ec565b60405180910390fd5b80600b60016101000a81548160ff02191690831515021790555050565b6060600480546117cb90613aff565b80601f01602080910402602001604051908101604052809291908181526020018280546117f790613aff565b80156118425780601f1061181957610100808354040283529160200191611842565b820191905f5260205f20905b81548152906001019060200180831161182557829003601f168201915b5050505050905090565b61185461215c565b73ffffffffffffffffffffffffffffffffffffffff166118726116d6565b73ffffffffffffffffffffffffffffffffffffffff16146118c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bf906139ec565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194d90613c6e565b60405180910390fd5b6119608282612df9565b5050565b60105481565b61197261215c565b73ffffffffffffffffffffffffffffffffffffffff166119906116d6565b73ffffffffffffffffffffffffffffffffffffffff16146119e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119dd906139ec565b60405180910390fd5b808273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611a20919061380b565b602060405180830381865afa158015611a3b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a5f9190613ca0565b1015611aa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9790613d15565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611adb929190613d33565b6020604051808303815f875af1158015611af7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b1b9190613d6e565b505050565b60135481565b600f5481565b5f8060015f611b3961215c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611bf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bea90613e09565b60405180910390fd5b611c07611bfe61215c565b85858403612163565b600191505092915050565b5f611c25611c1e61215c565b8484612326565b6001905092915050565b6018602052805f5260405f205f915054906101000a900460ff1681565b600b60029054906101000a900460ff1681565b600c5481565b611c6d61215c565b73ffffffffffffffffffffffffffffffffffffffff16611c8b6116d6565b73ffffffffffffffffffffffffffffffffffffffff1614611ce1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd8906139ec565b60405180910390fd5b8060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611d7b91906136a1565b60405180910390a25050565b611d8f61215c565b73ffffffffffffffffffffffffffffffffffffffff16611dad6116d6565b73ffffffffffffffffffffffffffffffffffffffff1614611e03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfa906139ec565b60405180910390fd5b670de0b6b3a764000081611e179190613b2f565b600a8190555050565b600d5481565b60085481565b5f611e3561215c565b73ffffffffffffffffffffffffffffffffffffffff16611e536116d6565b73ffffffffffffffffffffffffffffffffffffffff1614611ea9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea0906139ec565b60405180910390fd5b670de0b6b3a764000082611ebd9190613b2f565b60098190555060019050919050565b600e5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60095481565b611f6261215c565b73ffffffffffffffffffffffffffffffffffffffff16611f806116d6565b73ffffffffffffffffffffffffffffffffffffffff1614611fd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fcd906139ec565b60405180910390fd5b80471015612019576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201090613d15565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f1935050505015801561205c573d5f803e3d5ffd5b5050565b61206861215c565b73ffffffffffffffffffffffffffffffffffffffff166120866116d6565b73ffffffffffffffffffffffffffffffffffffffff16146120dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d3906139ec565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361214a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214190613e97565b60405180910390fd5b61215381612d36565b50565b600a5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036121d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c890613f25565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361223f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223690613fb3565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161231991906136c9565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612394576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238b90614041565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612402576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f9906140cf565b60405180910390fd5b5f81036124195761241483835f612e97565b612d31565b600b5f9054906101000a900460ff16156128fd576124356116d6565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156124a357506124736116d6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124db57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612515575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561252e5750600560149054906101000a900460ff16155b156128fc57600b60029054906101000a900460ff166126225760165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806125e2575060165f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612621576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261890614137565b60405180910390fd5b5b60185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156126bf575060175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561276657600854811115612709576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612700906141c5565b60405180910390fd5b600a5461271583611474565b826127209190613a9f565b1115612761576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127589061422d565b60405180910390fd5b6128fb565b60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612803575060175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156128525760085481111561284d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612844906142bb565b60405180910390fd5b6128fa565b60175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166128f957600a546128ac83611474565b826128b79190613a9f565b11156128f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ef9061422d565b60405180910390fd5b5b5b5b5b5b5f61290730611474565b90505f600954821015905080801561292b5750600b60019054906101000a900460ff165b80156129445750600560149054906101000a900460ff16155b8015612997575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156129ea575060165f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612a3d575060165f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612a80576001600560146101000a81548160ff021916908315150217905550612a6561310c565b5f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff1615905060165f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612b2f575060165f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612b38575f90505b5f8115612d215760185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612b9657505f601154115b15612c2057606460115486612bab9190613b2f565b612bb59190614306565b905060115460125482612bc89190613b2f565b612bd29190614306565b60145f828254612be29190613a9f565b9250508190555060115460135482612bfa9190613b2f565b612c049190614306565b60155f828254612c149190613a9f565b92505081905550612cfe565b60185f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612c7757505f600e54115b15612cfd576064600e5486612c8c9190613b2f565b612c969190614306565b9050600e54600f5482612ca99190613b2f565b612cb39190614306565b60145f828254612cc39190613a9f565b92505081905550600e5460105482612cdb9190613b2f565b612ce59190614306565b60155f828254612cf59190613a9f565b925050819055505b5b5f811115612d1257612d11873083612e97565b5b8085612d1e9190614336565b94505b612d2c878787612e97565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612f05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612efc90614041565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612f73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6a906140cf565b60405180910390fd5b612f7e838383613293565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613001576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff8906143d9565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461308f9190613a9f565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516130f391906136c9565b60405180910390a3613106848484613298565b50505050565b5f61311630611474565b90505f6015546014546131299190613a9f565b90505f60095483111561313c5760095492505b5f8390506131498161329d565b5f4790505f846015548361315d9190613b2f565b6131679190614306565b90505f6014819055505f60158190555060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516131bc90614424565b5f6040518083038185875af1925050503d805f81146131f6576040519150601f19603f3d011682016040523d82523d5f602084013e6131fb565b606091505b50508094505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161324690614424565b5f6040518083038185875af1925050503d805f8114613280576040519150601f19603f3d011682016040523d82523d5f602084013e613285565b606091505b505080945050505050505050565b505050565b505050565b5f600267ffffffffffffffff8111156132b9576132b8614438565b5b6040519080825280602002602001820160405280156132e75781602001602082028036833780820191505090505b50905030815f815181106132fe576132fd614465565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133a1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133c591906144a6565b816001815181106133d9576133d8614465565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061343e307f000000000000000000000000000000000000000000000000000000000000000084612163565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161349f9594939291906145c1565b5f604051808303815f87803b1580156134b6575f80fd5b505af11580156134c8573d5f803e3d5ffd5b505050505050565b5f80fd5b5f819050919050565b6134e6816134d4565b81146134f0575f80fd5b50565b5f81359050613501816134dd565b92915050565b5f806040838503121561351d5761351c6134d0565b5b5f61352a858286016134f3565b925050602061353b858286016134f3565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561357c578082015181840152602081019050613561565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6135a182613545565b6135ab818561354f565b93506135bb81856020860161355f565b6135c481613587565b840191505092915050565b5f6020820190508181035f8301526135e78184613597565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613618826135ef565b9050919050565b6136288161360e565b8114613632575f80fd5b50565b5f813590506136438161361f565b92915050565b5f806040838503121561365f5761365e6134d0565b5b5f61366c85828601613635565b925050602061367d858286016134f3565b9150509250929050565b5f8115159050919050565b61369b81613687565b82525050565b5f6020820190506136b45f830184613692565b92915050565b6136c3816134d4565b82525050565b5f6020820190506136dc5f8301846136ba565b92915050565b5f602082840312156136f7576136f66134d0565b5b5f61370484828501613635565b91505092915050565b5f819050919050565b5f61373061372b613726846135ef565b61370d565b6135ef565b9050919050565b5f61374182613716565b9050919050565b5f61375282613737565b9050919050565b61376281613748565b82525050565b5f60208201905061377b5f830184613759565b92915050565b5f60208284031215613796576137956134d0565b5b5f6137a3848285016134f3565b91505092915050565b5f805f606084860312156137c3576137c26134d0565b5b5f6137d086828701613635565b93505060206137e186828701613635565b92505060406137f2868287016134f3565b9150509250925092565b6138058161360e565b82525050565b5f60208201905061381e5f8301846137fc565b92915050565b5f60ff82169050919050565b61383981613824565b82525050565b5f6020820190506138525f830184613830565b92915050565b61386181613687565b811461386b575f80fd5b50565b5f8135905061387c81613858565b92915050565b5f8060408385031215613898576138976134d0565b5b5f6138a585828601613635565b92505060206138b68582860161386e565b9150509250929050565b5f602082840312156138d5576138d46134d0565b5b5f6138e28482850161386e565b91505092915050565b5f6138f58261360e565b9050919050565b613905816138eb565b811461390f575f80fd5b50565b5f81359050613920816138fc565b92915050565b5f806040838503121561393c5761393b6134d0565b5b5f61394985828601613912565b925050602061395a858286016134f3565b9150509250929050565b5f806040838503121561397a576139796134d0565b5b5f61398785828601613635565b925050602061399885828601613635565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6139d660208361354f565b91506139e1826139a2565b602082019050919050565b5f6020820190508181035f830152613a03816139ca565b9050919050565b7f416c7265616479206c61756e6368656420626f690000000000000000000000005f82015250565b5f613a3e60148361354f565b9150613a4982613a0a565b602082019050919050565b5f6020820190508181035f830152613a6b81613a32565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613aa9826134d4565b9150613ab4836134d4565b9250828201905080821115613acc57613acb613a72565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613b1657607f821691505b602082108103613b2957613b28613ad2565b5b50919050565b5f613b39826134d4565b9150613b44836134d4565b9250828202613b52816134d4565b91508282048414831517613b6957613b68613a72565b5b5092915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f613bca60288361354f565b9150613bd582613b70565b604082019050919050565b5f6020820190508181035f830152613bf781613bbe565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613c5860398361354f565b9150613c6382613bfe565b604082019050919050565b5f6020820190508181035f830152613c8581613c4c565b9050919050565b5f81519050613c9a816134dd565b92915050565b5f60208284031215613cb557613cb46134d0565b5b5f613cc284828501613c8c565b91505092915050565b7f496e76616c696420416d6f756e740000000000000000000000000000000000005f82015250565b5f613cff600e8361354f565b9150613d0a82613ccb565b602082019050919050565b5f6020820190508181035f830152613d2c81613cf3565b9050919050565b5f604082019050613d465f8301856137fc565b613d5360208301846136ba565b9392505050565b5f81519050613d6881613858565b92915050565b5f60208284031215613d8357613d826134d0565b5b5f613d9084828501613d5a565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613df360258361354f565b9150613dfe82613d99565b604082019050919050565b5f6020820190508181035f830152613e2081613de7565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613e8160268361354f565b9150613e8c82613e27565b604082019050919050565b5f6020820190508181035f830152613eae81613e75565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613f0f60248361354f565b9150613f1a82613eb5565b604082019050919050565b5f6020820190508181035f830152613f3c81613f03565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613f9d60228361354f565b9150613fa882613f43565b604082019050919050565b5f6020820190508181035f830152613fca81613f91565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61402b60258361354f565b915061403682613fd1565b604082019050919050565b5f6020820190508181035f8301526140588161401f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6140b960238361354f565b91506140c48261405f565b604082019050919050565b5f6020820190508181035f8301526140e6816140ad565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f61412160168361354f565b915061412c826140ed565b602082019050919050565b5f6020820190508181035f83015261414e81614115565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f6141af60358361354f565b91506141ba82614155565b604082019050919050565b5f6020820190508181035f8301526141dc816141a3565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f61421760138361354f565b9150614222826141e3565b602082019050919050565b5f6020820190508181035f8301526142448161420b565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f6142a560368361354f565b91506142b08261424b565b604082019050919050565b5f6020820190508181035f8301526142d281614299565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f614310826134d4565b915061431b836134d4565b92508261432b5761432a6142d9565b5b828204905092915050565b5f614340826134d4565b915061434b836134d4565b925082820390508181111561436357614362613a72565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6143c360268361354f565b91506143ce82614369565b604082019050919050565b5f6020820190508181035f8301526143f0816143b7565b9050919050565b5f81905092915050565b50565b5f61440f5f836143f7565b915061441a82614401565b5f82019050919050565b5f61442e82614404565b9150819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506144a08161361f565b92915050565b5f602082840312156144bb576144ba6134d0565b5b5f6144c884828501614492565b91505092915050565b5f819050919050565b5f6144f46144ef6144ea846144d1565b61370d565b6134d4565b9050919050565b614504816144da565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61453c8161360e565b82525050565b5f61454d8383614533565b60208301905092915050565b5f602082019050919050565b5f61456f8261450a565b6145798185614514565b935061458483614524565b805f5b838110156145b457815161459b8882614542565b97506145a683614559565b925050600181019050614587565b5085935050505092915050565b5f60a0820190506145d45f8301886136ba565b6145e160208301876144fb565b81810360408301526145f38186614565565b905061460260608301856137fc565b61460f60808301846136ba565b969550505050505056fea26469706673582212204e2a06e61c941966f39b04e93e966dd046c968569523797bdf22e21f42130a6c64736f6c63430008160033

Deployed Bytecode

0x6080604052600436106102e7575f3560e01c80637b2087691161018f578063bbc0c742116100db578063d257b34f11610094578063e2f456051161006e578063e2f4560514610b30578063f14210a614610b5a578063f2fde38b14610b82578063f8b45b0514610baa576102ee565b8063d257b34f14610a8e578063d85ba06314610aca578063dd62ed3e14610af4576102ee565b8063bbc0c74214610996578063bf56b371146109c0578063c0246668146109ea578063c18bc19514610a12578063c6d2577d14610a3a578063c8c8ebe414610a64576102ee565b80639c3b4fdc11610148578063a1dc92bc11610122578063a1dc92bc146108b8578063a457c2d7146108e2578063a9059cbb1461091e578063b62496f51461095a576102ee565b80639c3b4fdc1461083c5780639e281a9814610866578063a0d82dc51461088e576102ee565b80637b208769146107445780638da5cb5b1461076e5780638ea5220f14610798578063924de9b7146107c257806395d89b41146107ea5780639a7a23d614610814576102ee565b8063313ce5671161024e57806366ca9b831161020757806370a08231116101e157806370a08231146106a0578063715018a6146106dc578063751039fc146106f25780637571336a1461071c576102ee565b806366ca9b83146106245780636a486a8e1461064c5780636ddd171314610676576102ee565b8063313ce5671461050657806339509351146105305780633e65d4aa1461056c57806349bd5a5e146105945780634a62bb65146105be5780634fbee193146105e8576102ee565b80631694505e116102a05780631694505e146103fc57806318160ddd146104265780631816467f14610450578063203e727e1461047857806323b872dd146104a057806327c8f835146104dc576102ee565b806301339c21146102f257806302dbd8f81461030857806306fdde0314610330578063095ea7b31461035a5780630d7f14411461039657806310d5de53146103c0576102ee565b366102ee57005b5f80fd5b3480156102fd575f80fd5b50610306610bd4565b005b348015610313575f80fd5b5061032e60048036038101906103299190613507565b610cda565b005b34801561033b575f80fd5b50610344610d7e565b60405161035191906135cf565b60405180910390f35b348015610365575f80fd5b50610380600480360381019061037b9190613649565b610e0e565b60405161038d91906136a1565b60405180910390f35b3480156103a1575f80fd5b506103aa610e2b565b6040516103b791906136c9565b60405180910390f35b3480156103cb575f80fd5b506103e660048036038101906103e191906136e2565b610e31565b6040516103f391906136a1565b60405180910390f35b348015610407575f80fd5b50610410610e4e565b60405161041d9190613768565b60405180910390f35b348015610431575f80fd5b5061043a610e72565b60405161044791906136c9565b60405180910390f35b34801561045b575f80fd5b50610476600480360381019061047191906136e2565b610e7b565b005b348015610483575f80fd5b5061049e60048036038101906104999190613781565b610fb5565b005b3480156104ab575f80fd5b506104c660048036038101906104c191906137ac565b61104e565b6040516104d391906136a1565b60405180910390f35b3480156104e7575f80fd5b506104f0611140565b6040516104fd919061380b565b60405180910390f35b348015610511575f80fd5b5061051a611146565b604051610527919061383f565b60405180910390f35b34801561053b575f80fd5b5061055660048036038101906105519190613649565b61114e565b60405161056391906136a1565b60405180910390f35b348015610577575f80fd5b50610592600480360381019061058d91906136e2565b6111f5565b005b34801561059f575f80fd5b506105a861132f565b6040516105b5919061380b565b60405180910390f35b3480156105c9575f80fd5b506105d2611353565b6040516105df91906136a1565b60405180910390f35b3480156105f3575f80fd5b5061060e600480360381019061060991906136e2565b611365565b60405161061b91906136a1565b60405180910390f35b34801561062f575f80fd5b5061064a60048036038101906106459190613507565b6113b7565b005b348015610657575f80fd5b5061066061145b565b60405161066d91906136c9565b60405180910390f35b348015610681575f80fd5b5061068a611461565b60405161069791906136a1565b60405180910390f35b3480156106ab575f80fd5b506106c660048036038101906106c191906136e2565b611474565b6040516106d391906136c9565b60405180910390f35b3480156106e7575f80fd5b506106f06114b9565b005b3480156106fd575f80fd5b50610706611540565b60405161071391906136a1565b60405180910390f35b348015610727575f80fd5b50610742600480360381019061073d9190613882565b6115dd565b005b34801561074f575f80fd5b506107586116b1565b604051610765919061380b565b60405180910390f35b348015610779575f80fd5b506107826116d6565b60405161078f919061380b565b60405180910390f35b3480156107a3575f80fd5b506107ac6116fe565b6040516107b9919061380b565b60405180910390f35b3480156107cd575f80fd5b506107e860048036038101906107e391906138c0565b611723565b005b3480156107f5575f80fd5b506107fe6117bc565b60405161080b91906135cf565b60405180910390f35b34801561081f575f80fd5b5061083a60048036038101906108359190613882565b61184c565b005b348015610847575f80fd5b50610850611964565b60405161085d91906136c9565b60405180910390f35b348015610871575f80fd5b5061088c60048036038101906108879190613926565b61196a565b005b348015610899575f80fd5b506108a2611b20565b6040516108af91906136c9565b60405180910390f35b3480156108c3575f80fd5b506108cc611b26565b6040516108d991906136c9565b60405180910390f35b3480156108ed575f80fd5b5061090860048036038101906109039190613649565b611b2c565b60405161091591906136a1565b60405180910390f35b348015610929575f80fd5b50610944600480360381019061093f9190613649565b611c12565b60405161095191906136a1565b60405180910390f35b348015610965575f80fd5b50610980600480360381019061097b91906136e2565b611c2f565b60405161098d91906136a1565b60405180910390f35b3480156109a1575f80fd5b506109aa611c4c565b6040516109b791906136a1565b60405180910390f35b3480156109cb575f80fd5b506109d4611c5f565b6040516109e191906136c9565b60405180910390f35b3480156109f5575f80fd5b50610a106004803603810190610a0b9190613882565b611c65565b005b348015610a1d575f80fd5b50610a386004803603810190610a339190613781565b611d87565b005b348015610a45575f80fd5b50610a4e611e20565b604051610a5b91906136c9565b60405180910390f35b348015610a6f575f80fd5b50610a78611e26565b604051610a8591906136c9565b60405180910390f35b348015610a99575f80fd5b50610ab46004803603810190610aaf9190613781565b611e2c565b604051610ac191906136a1565b60405180910390f35b348015610ad5575f80fd5b50610ade611ecc565b604051610aeb91906136c9565b60405180910390f35b348015610aff575f80fd5b50610b1a6004803603810190610b159190613964565b611ed2565b604051610b2791906136c9565b60405180910390f35b348015610b3b575f80fd5b50610b44611f54565b604051610b5191906136c9565b60405180910390f35b348015610b65575f80fd5b50610b806004803603810190610b7b9190613781565b611f5a565b005b348015610b8d575f80fd5b50610ba86004803603810190610ba391906136e2565b612060565b005b348015610bb5575f80fd5b50610bbe612156565b604051610bcb91906136c9565b60405180910390f35b610bdc61215c565b73ffffffffffffffffffffffffffffffffffffffff16610bfa6116d6565b73ffffffffffffffffffffffffffffffffffffffff1614610c50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c47906139ec565b60405180910390fd5b5f600c5414610c94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8b90613a54565b60405180910390fd5b43600c8190555042600d819055506001600b60026101000a81548160ff0219169083151502179055506001600b60016101000a81548160ff021916908315150217905550565b610ce261215c565b73ffffffffffffffffffffffffffffffffffffffff16610d006116d6565b73ffffffffffffffffffffffffffffffffffffffff1614610d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4d906139ec565b60405180910390fd5b8160128190555080601381905550601354601254610d749190613a9f565b6011819055505050565b606060038054610d8d90613aff565b80601f0160208091040260200160405190810160405280929190818152602001828054610db990613aff565b8015610e045780601f10610ddb57610100808354040283529160200191610e04565b820191905f5260205f20905b815481529060010190602001808311610de757829003601f168201915b5050505050905090565b5f610e21610e1a61215c565b8484612163565b6001905092915050565b60125481565b6017602052805f5260405f205f915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b610e8361215c565b73ffffffffffffffffffffffffffffffffffffffff16610ea16116d6565b73ffffffffffffffffffffffffffffffffffffffff1614610ef7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eee906139ec565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610fbd61215c565b73ffffffffffffffffffffffffffffffffffffffff16610fdb6116d6565b73ffffffffffffffffffffffffffffffffffffffff1614611031576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611028906139ec565b60405180910390fd5b670de0b6b3a7640000816110459190613b2f565b60088190555050565b5f61105a848484612326565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6110a161215c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611120576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111790613be0565b60405180910390fd5b6111348561112c61215c565b858403612163565b60019150509392505050565b61dead81565b5f6012905090565b5f6111eb61115a61215c565b848460015f61116761215c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546111e69190613a9f565b612163565b6001905092915050565b6111fd61215c565b73ffffffffffffffffffffffffffffffffffffffff1661121b6116d6565b73ffffffffffffffffffffffffffffffffffffffff1614611271576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611268906139ec565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fc20073d1c4443096c55d22a3812db7261aa6911634e1a0850f068d0c9923402d60405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f000000000000000000000000244c71d3a7e571df94429dd8878f01d75eb55ed481565b600b5f9054906101000a900460ff1681565b5f60165f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b6113bf61215c565b73ffffffffffffffffffffffffffffffffffffffff166113dd6116d6565b73ffffffffffffffffffffffffffffffffffffffff1614611433576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142a906139ec565b60405180910390fd5b81600f8190555080601081905550601054600f546114519190613a9f565b600e819055505050565b60115481565b600b60019054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6114c161215c565b73ffffffffffffffffffffffffffffffffffffffff166114df6116d6565b73ffffffffffffffffffffffffffffffffffffffff1614611535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152c906139ec565b60405180910390fd5b61153e5f612d36565b565b5f61154961215c565b73ffffffffffffffffffffffffffffffffffffffff166115676116d6565b73ffffffffffffffffffffffffffffffffffffffff16146115bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b4906139ec565b60405180910390fd5b5f600b5f6101000a81548160ff0219169083151502179055506001905090565b6115e561215c565b73ffffffffffffffffffffffffffffffffffffffff166116036116d6565b73ffffffffffffffffffffffffffffffffffffffff1614611659576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611650906139ec565b60405180910390fd5b8060175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61172b61215c565b73ffffffffffffffffffffffffffffffffffffffff166117496116d6565b73ffffffffffffffffffffffffffffffffffffffff161461179f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611796906139ec565b60405180910390fd5b80600b60016101000a81548160ff02191690831515021790555050565b6060600480546117cb90613aff565b80601f01602080910402602001604051908101604052809291908181526020018280546117f790613aff565b80156118425780601f1061181957610100808354040283529160200191611842565b820191905f5260205f20905b81548152906001019060200180831161182557829003601f168201915b5050505050905090565b61185461215c565b73ffffffffffffffffffffffffffffffffffffffff166118726116d6565b73ffffffffffffffffffffffffffffffffffffffff16146118c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bf906139ec565b60405180910390fd5b7f000000000000000000000000244c71d3a7e571df94429dd8878f01d75eb55ed473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194d90613c6e565b60405180910390fd5b6119608282612df9565b5050565b60105481565b61197261215c565b73ffffffffffffffffffffffffffffffffffffffff166119906116d6565b73ffffffffffffffffffffffffffffffffffffffff16146119e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119dd906139ec565b60405180910390fd5b808273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611a20919061380b565b602060405180830381865afa158015611a3b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a5f9190613ca0565b1015611aa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9790613d15565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611adb929190613d33565b6020604051808303815f875af1158015611af7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b1b9190613d6e565b505050565b60135481565b600f5481565b5f8060015f611b3961215c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611bf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bea90613e09565b60405180910390fd5b611c07611bfe61215c565b85858403612163565b600191505092915050565b5f611c25611c1e61215c565b8484612326565b6001905092915050565b6018602052805f5260405f205f915054906101000a900460ff1681565b600b60029054906101000a900460ff1681565b600c5481565b611c6d61215c565b73ffffffffffffffffffffffffffffffffffffffff16611c8b6116d6565b73ffffffffffffffffffffffffffffffffffffffff1614611ce1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd8906139ec565b60405180910390fd5b8060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611d7b91906136a1565b60405180910390a25050565b611d8f61215c565b73ffffffffffffffffffffffffffffffffffffffff16611dad6116d6565b73ffffffffffffffffffffffffffffffffffffffff1614611e03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfa906139ec565b60405180910390fd5b670de0b6b3a764000081611e179190613b2f565b600a8190555050565b600d5481565b60085481565b5f611e3561215c565b73ffffffffffffffffffffffffffffffffffffffff16611e536116d6565b73ffffffffffffffffffffffffffffffffffffffff1614611ea9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea0906139ec565b60405180910390fd5b670de0b6b3a764000082611ebd9190613b2f565b60098190555060019050919050565b600e5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60095481565b611f6261215c565b73ffffffffffffffffffffffffffffffffffffffff16611f806116d6565b73ffffffffffffffffffffffffffffffffffffffff1614611fd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fcd906139ec565b60405180910390fd5b80471015612019576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201090613d15565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f1935050505015801561205c573d5f803e3d5ffd5b5050565b61206861215c565b73ffffffffffffffffffffffffffffffffffffffff166120866116d6565b73ffffffffffffffffffffffffffffffffffffffff16146120dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d3906139ec565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361214a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214190613e97565b60405180910390fd5b61215381612d36565b50565b600a5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036121d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c890613f25565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361223f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223690613fb3565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161231991906136c9565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612394576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238b90614041565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612402576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f9906140cf565b60405180910390fd5b5f81036124195761241483835f612e97565b612d31565b600b5f9054906101000a900460ff16156128fd576124356116d6565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156124a357506124736116d6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124db57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612515575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561252e5750600560149054906101000a900460ff16155b156128fc57600b60029054906101000a900460ff166126225760165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806125e2575060165f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612621576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261890614137565b60405180910390fd5b5b60185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156126bf575060175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561276657600854811115612709576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612700906141c5565b60405180910390fd5b600a5461271583611474565b826127209190613a9f565b1115612761576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127589061422d565b60405180910390fd5b6128fb565b60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612803575060175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156128525760085481111561284d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612844906142bb565b60405180910390fd5b6128fa565b60175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166128f957600a546128ac83611474565b826128b79190613a9f565b11156128f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ef9061422d565b60405180910390fd5b5b5b5b5b5b5f61290730611474565b90505f600954821015905080801561292b5750600b60019054906101000a900460ff165b80156129445750600560149054906101000a900460ff16155b8015612997575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156129ea575060165f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612a3d575060165f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612a80576001600560146101000a81548160ff021916908315150217905550612a6561310c565b5f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff1615905060165f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612b2f575060165f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612b38575f90505b5f8115612d215760185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612b9657505f601154115b15612c2057606460115486612bab9190613b2f565b612bb59190614306565b905060115460125482612bc89190613b2f565b612bd29190614306565b60145f828254612be29190613a9f565b9250508190555060115460135482612bfa9190613b2f565b612c049190614306565b60155f828254612c149190613a9f565b92505081905550612cfe565b60185f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612c7757505f600e54115b15612cfd576064600e5486612c8c9190613b2f565b612c969190614306565b9050600e54600f5482612ca99190613b2f565b612cb39190614306565b60145f828254612cc39190613a9f565b92505081905550600e5460105482612cdb9190613b2f565b612ce59190614306565b60155f828254612cf59190613a9f565b925050819055505b5b5f811115612d1257612d11873083612e97565b5b8085612d1e9190614336565b94505b612d2c878787612e97565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612f05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612efc90614041565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612f73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6a906140cf565b60405180910390fd5b612f7e838383613293565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613001576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff8906143d9565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461308f9190613a9f565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516130f391906136c9565b60405180910390a3613106848484613298565b50505050565b5f61311630611474565b90505f6015546014546131299190613a9f565b90505f60095483111561313c5760095492505b5f8390506131498161329d565b5f4790505f846015548361315d9190613b2f565b6131679190614306565b90505f6014819055505f60158190555060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516131bc90614424565b5f6040518083038185875af1925050503d805f81146131f6576040519150601f19603f3d011682016040523d82523d5f602084013e6131fb565b606091505b50508094505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161324690614424565b5f6040518083038185875af1925050503d805f8114613280576040519150601f19603f3d011682016040523d82523d5f602084013e613285565b606091505b505080945050505050505050565b505050565b505050565b5f600267ffffffffffffffff8111156132b9576132b8614438565b5b6040519080825280602002602001820160405280156132e75781602001602082028036833780820191505090505b50905030815f815181106132fe576132fd614465565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133a1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133c591906144a6565b816001815181106133d9576133d8614465565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061343e307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612163565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161349f9594939291906145c1565b5f604051808303815f87803b1580156134b6575f80fd5b505af11580156134c8573d5f803e3d5ffd5b505050505050565b5f80fd5b5f819050919050565b6134e6816134d4565b81146134f0575f80fd5b50565b5f81359050613501816134dd565b92915050565b5f806040838503121561351d5761351c6134d0565b5b5f61352a858286016134f3565b925050602061353b858286016134f3565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561357c578082015181840152602081019050613561565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6135a182613545565b6135ab818561354f565b93506135bb81856020860161355f565b6135c481613587565b840191505092915050565b5f6020820190508181035f8301526135e78184613597565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613618826135ef565b9050919050565b6136288161360e565b8114613632575f80fd5b50565b5f813590506136438161361f565b92915050565b5f806040838503121561365f5761365e6134d0565b5b5f61366c85828601613635565b925050602061367d858286016134f3565b9150509250929050565b5f8115159050919050565b61369b81613687565b82525050565b5f6020820190506136b45f830184613692565b92915050565b6136c3816134d4565b82525050565b5f6020820190506136dc5f8301846136ba565b92915050565b5f602082840312156136f7576136f66134d0565b5b5f61370484828501613635565b91505092915050565b5f819050919050565b5f61373061372b613726846135ef565b61370d565b6135ef565b9050919050565b5f61374182613716565b9050919050565b5f61375282613737565b9050919050565b61376281613748565b82525050565b5f60208201905061377b5f830184613759565b92915050565b5f60208284031215613796576137956134d0565b5b5f6137a3848285016134f3565b91505092915050565b5f805f606084860312156137c3576137c26134d0565b5b5f6137d086828701613635565b93505060206137e186828701613635565b92505060406137f2868287016134f3565b9150509250925092565b6138058161360e565b82525050565b5f60208201905061381e5f8301846137fc565b92915050565b5f60ff82169050919050565b61383981613824565b82525050565b5f6020820190506138525f830184613830565b92915050565b61386181613687565b811461386b575f80fd5b50565b5f8135905061387c81613858565b92915050565b5f8060408385031215613898576138976134d0565b5b5f6138a585828601613635565b92505060206138b68582860161386e565b9150509250929050565b5f602082840312156138d5576138d46134d0565b5b5f6138e28482850161386e565b91505092915050565b5f6138f58261360e565b9050919050565b613905816138eb565b811461390f575f80fd5b50565b5f81359050613920816138fc565b92915050565b5f806040838503121561393c5761393b6134d0565b5b5f61394985828601613912565b925050602061395a858286016134f3565b9150509250929050565b5f806040838503121561397a576139796134d0565b5b5f61398785828601613635565b925050602061399885828601613635565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6139d660208361354f565b91506139e1826139a2565b602082019050919050565b5f6020820190508181035f830152613a03816139ca565b9050919050565b7f416c7265616479206c61756e6368656420626f690000000000000000000000005f82015250565b5f613a3e60148361354f565b9150613a4982613a0a565b602082019050919050565b5f6020820190508181035f830152613a6b81613a32565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613aa9826134d4565b9150613ab4836134d4565b9250828201905080821115613acc57613acb613a72565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613b1657607f821691505b602082108103613b2957613b28613ad2565b5b50919050565b5f613b39826134d4565b9150613b44836134d4565b9250828202613b52816134d4565b91508282048414831517613b6957613b68613a72565b5b5092915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f613bca60288361354f565b9150613bd582613b70565b604082019050919050565b5f6020820190508181035f830152613bf781613bbe565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613c5860398361354f565b9150613c6382613bfe565b604082019050919050565b5f6020820190508181035f830152613c8581613c4c565b9050919050565b5f81519050613c9a816134dd565b92915050565b5f60208284031215613cb557613cb46134d0565b5b5f613cc284828501613c8c565b91505092915050565b7f496e76616c696420416d6f756e740000000000000000000000000000000000005f82015250565b5f613cff600e8361354f565b9150613d0a82613ccb565b602082019050919050565b5f6020820190508181035f830152613d2c81613cf3565b9050919050565b5f604082019050613d465f8301856137fc565b613d5360208301846136ba565b9392505050565b5f81519050613d6881613858565b92915050565b5f60208284031215613d8357613d826134d0565b5b5f613d9084828501613d5a565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613df360258361354f565b9150613dfe82613d99565b604082019050919050565b5f6020820190508181035f830152613e2081613de7565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613e8160268361354f565b9150613e8c82613e27565b604082019050919050565b5f6020820190508181035f830152613eae81613e75565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613f0f60248361354f565b9150613f1a82613eb5565b604082019050919050565b5f6020820190508181035f830152613f3c81613f03565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613f9d60228361354f565b9150613fa882613f43565b604082019050919050565b5f6020820190508181035f830152613fca81613f91565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61402b60258361354f565b915061403682613fd1565b604082019050919050565b5f6020820190508181035f8301526140588161401f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6140b960238361354f565b91506140c48261405f565b604082019050919050565b5f6020820190508181035f8301526140e6816140ad565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f61412160168361354f565b915061412c826140ed565b602082019050919050565b5f6020820190508181035f83015261414e81614115565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f6141af60358361354f565b91506141ba82614155565b604082019050919050565b5f6020820190508181035f8301526141dc816141a3565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f61421760138361354f565b9150614222826141e3565b602082019050919050565b5f6020820190508181035f8301526142448161420b565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f6142a560368361354f565b91506142b08261424b565b604082019050919050565b5f6020820190508181035f8301526142d281614299565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f614310826134d4565b915061431b836134d4565b92508261432b5761432a6142d9565b5b828204905092915050565b5f614340826134d4565b915061434b836134d4565b925082820390508181111561436357614362613a72565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6143c360268361354f565b91506143ce82614369565b604082019050919050565b5f6020820190508181035f8301526143f0816143b7565b9050919050565b5f81905092915050565b50565b5f61440f5f836143f7565b915061441a82614401565b5f82019050919050565b5f61442e82614404565b9150819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506144a08161361f565b92915050565b5f602082840312156144bb576144ba6134d0565b5b5f6144c884828501614492565b91505092915050565b5f819050919050565b5f6144f46144ef6144ea846144d1565b61370d565b6134d4565b9050919050565b614504816144da565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61453c8161360e565b82525050565b5f61454d8383614533565b60208301905092915050565b5f602082019050919050565b5f61456f8261450a565b6145798185614514565b935061458483614524565b805f5b838110156145b457815161459b8882614542565b97506145a683614559565b925050600181019050614587565b5085935050505092915050565b5f60a0820190506145d45f8301886136ba565b6145e160208301876144fb565b81810360408301526145f38186614565565b905061460260608301856137fc565b61460f60808301846136ba565b969550505050505056fea26469706673582212204e2a06e61c941966f39b04e93e966dd046c968569523797bdf22e21f42130a6c64736f6c63430008160033

Deployed Bytecode Sourcemap

15535:12785:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19407:246;;;;;;;;;;;;;:::i;:::-;;20787:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5068:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6465:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16302:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16579:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15574:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5557:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21951:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19918:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6667:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15677:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5399:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7204:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21733:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15632:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15952:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22116:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20547:232;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16262:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15992:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5728:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1500:103;;;;;;;;;;;;;:::i;:::-;;19180:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20174:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15769:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1192:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15804:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20439:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5287:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21223:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16225:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28108:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16342:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16186:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7502:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5879:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16798:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16030:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16072:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21033:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20050:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16104:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15837:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19723:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16147:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6142:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15879:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27917:183;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1758:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15919:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19407:246;1423:12;:10;:12::i;:::-;1412:23;;:7;:5;:7::i;:::-;:23;;;1404:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19475:1:::1;19461:10;;:15;19453:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;19525:12;19512:10;:25;;;;19570:15;19548:19;:37;;;;19612:4;19596:13;;:20;;;;;;;;;;;;;;;;;;19641:4;19627:11;;:18;;;;;;;;;;;;;;;;;;19407:246::o:0;20787:238::-;1423:12;:10;:12::i;:::-;1412:23;;:7;:5;:7::i;:::-;:23;;;1404:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20921:11:::1;20904:14;:28;;;;20956:7;20943:10;:20;;;;21007:10;;20990:14;;:27;;;;:::i;:::-;20974:13;:43;;;;20787:238:::0;;:::o;5068:100::-;5122:13;5155:5;5148:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5068:100;:::o;6465:194::-;6573:4;6590:39;6599:12;:10;:12::i;:::-;6613:7;6622:6;6590:8;:39::i;:::-;6647:4;6640:11;;6465:194;;;;:::o;16302:33::-;;;;:::o;16579:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;15574:51::-;;;:::o;5557:108::-;5618:7;5645:12;;5638:19;;5557:108;:::o;21951:157::-;1423:12;:10;:12::i;:::-;1412:23;;:7;:5;:7::i;:::-;:23;;;1404:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22058:9:::1;;;;;;;;;;;22030:38;;22047:9;22030:38;;;;;;;;;;;;22091:9;22079;;:21;;;;;;;;;;;;;;;;;;21951:157:::0;:::o;19918:124::-;1423:12;:10;:12::i;:::-;1412:23;;:7;:5;:7::i;:::-;:23;;;1404:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20025:8:::1;20015:6;:19;;;;:::i;:::-;19992:20;:42;;;;19918:124:::0;:::o;6667:529::-;6807:4;6824:36;6834:6;6842:9;6853:6;6824:9;:36::i;:::-;6873:24;6900:11;:19;6912:6;6900:19;;;;;;;;;;;;;;;:33;6920:12;:10;:12::i;:::-;6900:33;;;;;;;;;;;;;;;;6873:60;;6986:6;6966:16;:26;;6944:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;7096:57;7105:6;7113:12;:10;:12::i;:::-;7146:6;7127:16;:25;7096:8;:57::i;:::-;7184:4;7177:11;;;6667:529;;;;;:::o;15677:53::-;15723:6;15677:53;:::o;5399:93::-;5457:5;5482:2;5475:9;;5399:93;:::o;7204:290::-;7317:4;7334:130;7357:12;:10;:12::i;:::-;7384:7;7443:10;7406:11;:25;7418:12;:10;:12::i;:::-;7406:25;;;;;;;;;;;;;;;:34;7432:7;7406:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;7334:8;:130::i;:::-;7482:4;7475:11;;7204:290;;;;:::o;21733:210::-;1423:12;:10;:12::i;:::-;1412:23;;:7;:5;:7::i;:::-;:23;;;1404:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21878:13:::1;;;;;;;;;;;21839:53;;21860:16;21839:53;;;;;;;;;;;;21919:16;21903:13;;:32;;;;;;;;;;;;;;;;;;21733:210:::0;:::o;15632:38::-;;;:::o;15952:33::-;;;;;;;;;;;;;:::o;22116:126::-;22182:4;22206:19;:28;22226:7;22206:28;;;;;;;;;;;;;;;;;;;;;;;;;22199:35;;22116:126;;;:::o;20547:232::-;1423:12;:10;:12::i;:::-;1412:23;;:7;:5;:7::i;:::-;:23;;;1404:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20679:11:::1;20663:13;:27;;;;20713:7;20701:9;:19;;;;20762:9;;20746:13;;:25;;;;:::i;:::-;20731:12;:40;;;;20547:232:::0;;:::o;16262:33::-;;;;:::o;15992:31::-;;;;;;;;;;;;;:::o;5728:143::-;5818:7;5845:9;:18;5855:7;5845:18;;;;;;;;;;;;;;;;5838:25;;5728:143;;;:::o;1500:103::-;1423:12;:10;:12::i;:::-;1412:23;;:7;:5;:7::i;:::-;:23;;;1404:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1565:30:::1;1592:1;1565:18;:30::i;:::-;1500:103::o:0;19180:121::-;19232:4;1423:12;:10;:12::i;:::-;1412:23;;:7;:5;:7::i;:::-;:23;;;1404:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19266:5:::1;19249:14;;:22;;;;;;;;;;;;;;;;;;19289:4;19282:11;;19180:121:::0;:::o;20174:169::-;1423:12;:10;:12::i;:::-;1412:23;;:7;:5;:7::i;:::-;:23;;;1404:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20331:4:::1;20289:31;:39;20321:6;20289:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;20174:169:::0;;:::o;15769:28::-;;;;;;;;;;;;;:::o;1192:87::-;1238:7;1265:6;;;;;;;;;;;1258:13;;1192:87;:::o;15804:24::-;;;;;;;;;;;;;:::o;20439:100::-;1423:12;:10;:12::i;:::-;1412:23;;:7;:5;:7::i;:::-;:23;;;1404:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20524:7:::1;20510:11;;:21;;;;;;;;;;;;;;;;;;20439:100:::0;:::o;5287:104::-;5343:13;5376:7;5369:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5287:104;:::o;21223:306::-;1423:12;:10;:12::i;:::-;1412:23;;:7;:5;:7::i;:::-;:23;;;1404:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21369:13:::1;21361:21;;:4;:21;;::::0;21339:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;21480:41;21509:4;21515:5;21480:28;:41::i;:::-;21223:306:::0;;:::o;16225:28::-;;;;:::o;28108:209::-;1423:12;:10;:12::i;:::-;1412:23;;:7;:5;:7::i;:::-;:23;;;1404:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28236:7:::1;28201:6;:16;;;28226:4;28201:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:42;;28193:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;28273:6;:15;;;28289:10;28301:7;28273:36;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28108:209:::0;;:::o;16342:29::-;;;;:::o;16186:32::-;;;;:::o;7502:475::-;7620:4;7637:24;7664:11;:25;7676:12;:10;:12::i;:::-;7664:25;;;;;;;;;;;;;;;:34;7690:7;7664:34;;;;;;;;;;;;;;;;7637:61;;7751:15;7731:16;:35;;7709:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;7867:67;7876:12;:10;:12::i;:::-;7890:7;7918:15;7899:16;:34;7867:8;:67::i;:::-;7965:4;7958:11;;;7502:475;;;;:::o;5879:200::-;5990:4;6007:42;6017:12;:10;:12::i;:::-;6031:9;6042:6;6007:9;:42::i;:::-;6067:4;6060:11;;5879:200;;;;:::o;16798:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;16030:33::-;;;;;;;;;;;;;:::o;16072:25::-;;;;:::o;21033:182::-;1423:12;:10;:12::i;:::-;1412:23;;:7;:5;:7::i;:::-;:23;;;1404:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21149:8:::1;21118:19;:28;21138:7;21118:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;21189:7;21173:34;;;21198:8;21173:34;;;;;;:::i;:::-;;;;;;;;21033:182:::0;;:::o;20050:116::-;1423:12;:10;:12::i;:::-;1412:23;;:7;:5;:7::i;:::-;:23;;;1404:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20149:8:::1;20139:6;:19;;;;:::i;:::-;20127:9;:31;;;;20050:116:::0;:::o;16104:34::-;;;;:::o;15837:35::-;;;;:::o;19723:187::-;19820:4;1423:12;:10;:12::i;:::-;1412:23;;:7;:5;:7::i;:::-;:23;;;1404:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19871:8:::1;19858:9;:22;;;;:::i;:::-;19837:18;:43;;;;19898:4;19891:11;;19723:187:::0;;;:::o;16147:32::-;;;;:::o;6142:176::-;6256:7;6283:11;:18;6295:5;6283:18;;;;;;;;;;;;;;;:27;6302:7;6283:27;;;;;;;;;;;;;;;;6276:34;;6142:176;;;;:::o;15879:33::-;;;;:::o;27917:183::-;1423:12;:10;:12::i;:::-;1412:23;;:7;:5;:7::i;:::-;:23;;;1404:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28018:7:::1;27993:21;:32;;27985:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;28063:10;28055:28;;:37;28084:7;28055:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;27917:183:::0;:::o;1758:238::-;1423:12;:10;:12::i;:::-;1412:23;;:7;:5;:7::i;:::-;:23;;;1404:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1881:1:::1;1861:22;;:8;:22;;::::0;1839:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1960:28;1979:8;1960:18;:28::i;:::-;1758:238:::0;:::o;15919:24::-;;;;:::o;550:98::-;603:7;630:10;623:17;;550:98;:::o;9769:380::-;9922:1;9905:19;;:5;:19;;;9897:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10003:1;9984:21;;:7;:21;;;9976:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10087:6;10057:11;:18;10069:5;10057:18;;;;;;;;;;;;;;;:27;10076:7;10057:27;;;;;;;;;;;;;;;:36;;;;10125:7;10109:32;;10118:5;10109:32;;;10134:6;10109:32;;;;;;:::i;:::-;;;;;;;;9769:380;;;:::o;22250:3742::-;22398:1;22382:18;;:4;:18;;;22374:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22475:1;22461:16;;:2;:16;;;22453:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;22544:1;22534:6;:11;22530:93;;22562:28;22578:4;22584:2;22588:1;22562:15;:28::i;:::-;22605:7;;22530:93;22639:14;;;;;;;;;;;22635:1692;;;22700:7;:5;:7::i;:::-;22692:15;;:4;:15;;;;:49;;;;;22734:7;:5;:7::i;:::-;22728:13;;:2;:13;;;;22692:49;:86;;;;;22776:1;22762:16;;:2;:16;;;;22692:86;:128;;;;;22813:6;22799:21;;:2;:21;;;;22692:128;:158;;;;;22842:8;;;;;;;;;;;22841:9;22692:158;22670:1646;;;22890:13;;;;;;;;;;;22885:223;;22962:19;:25;22982:4;22962:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;22991:19;:23;23011:2;22991:23;;;;;;;;;;;;;;;;;;;;;;;;;22962:52;22928:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;22885:223;23180:25;:31;23206:4;23180:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;23237:31;:35;23269:2;23237:35;;;;;;;;;;;;;;;;;;;;;;;;;23236:36;23180:92;23154:1147;;;23359:20;;23349:6;:30;;23315:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;23567:9;;23550:13;23560:2;23550:9;:13::i;:::-;23541:6;:22;;;;:::i;:::-;:35;;23507:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;23154:1147;;;23745:25;:29;23771:2;23745:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;23800:31;:37;23832:4;23800:37;;;;;;;;;;;;;;;;;;;;;;;;;23799:38;23745:92;23719:582;;;23924:20;;23914:6;:30;;23880:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;23719:582;;;24081:31;:35;24113:2;24081:35;;;;;;;;;;;;;;;;;;;;;;;;;24076:225;;24201:9;;24184:13;24194:2;24184:9;:13::i;:::-;24175:6;:22;;;;:::i;:::-;:35;;24141:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;24076:225;23719:582;23154:1147;22670:1646;22635:1692;24339:28;24370:24;24388:4;24370:9;:24::i;:::-;24339:55;;24407:12;24446:18;;24422:20;:42;;24407:57;;24495:7;:35;;;;;24519:11;;;;;;;;;;;24495:35;:61;;;;;24548:8;;;;;;;;;;;24547:9;24495:61;:110;;;;;24574:25;:31;24600:4;24574:31;;;;;;;;;;;;;;;;;;;;;;;;;24573:32;24495:110;:153;;;;;24623:19;:25;24643:4;24623:25;;;;;;;;;;;;;;;;;;;;;;;;;24622:26;24495:153;:194;;;;;24666:19;:23;24686:2;24666:23;;;;;;;;;;;;;;;;;;;;;;;;;24665:24;24495:194;24477:326;;;24727:4;24716:8;;:15;;;;;;;;;;;;;;;;;;24748:10;:8;:10::i;:::-;24786:5;24775:8;;:16;;;;;;;;;;;;;;;;;;24477:326;24815:12;24831:8;;;;;;;;;;;24830:9;24815:24;;24941:19;:25;24961:4;24941:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;24970:19;:23;24990:2;24970:23;;;;;;;;;;;;;;;;;;;;;;;;;24941:52;24937:100;;;25020:5;25010:15;;24937:100;25049:12;25154:7;25150:789;;;25206:25;:29;25232:2;25206:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;25255:1;25239:13;;:17;25206:50;25202:588;;;25311:3;25294:13;;25285:6;:22;;;;:::i;:::-;25284:30;;;;:::i;:::-;25277:37;;25379:13;;25361:14;;25354:4;:21;;;;:::i;:::-;25353:39;;;;:::i;:::-;25333:16;;:59;;;;;;;:::i;:::-;;;;;;;;25448:13;;25434:10;;25427:4;:17;;;;:::i;:::-;25426:35;;;;:::i;:::-;25411:11;;:50;;;;;;;:::i;:::-;;;;;;;;25202:588;;;25523:25;:31;25549:4;25523:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;25573:1;25558:12;;:16;25523:51;25519:271;;;25628:3;25612:12;;25603:6;:21;;;;:::i;:::-;25602:29;;;;:::i;:::-;25595:36;;25695:12;;25678:13;;25671:4;:20;;;;:::i;:::-;25670:37;;;;:::i;:::-;25650:16;;:57;;;;;;;:::i;:::-;;;;;;;;25762:12;;25749:9;;25742:4;:16;;;;:::i;:::-;25741:33;;;;:::i;:::-;25726:11;;:48;;;;;;;:::i;:::-;;;;;;;;25519:271;25202:588;25817:1;25810:4;:8;25806:91;;;25839:42;25855:4;25869;25876;25839:15;:42::i;:::-;25806:91;25923:4;25913:14;;;;;:::i;:::-;;;25150:789;25951:33;25967:4;25973:2;25977:6;25951:15;:33::i;:::-;22363:3629;;;;22250:3742;;;;:::o;2156:191::-;2230:16;2249:6;;;;;;;;;;;2230:25;;2275:8;2266:6;;:17;;;;;;;;;;;;;;;;;;2330:8;2299:40;;2320:8;2299:40;;;;;;;;;;;;2219:128;2156:191;:::o;21537:188::-;21654:5;21620:25;:31;21646:4;21620:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;21711:5;21677:40;;21705:4;21677:40;;;;;;;;;;;;21537:188;;:::o;7985:770::-;8143:1;8125:20;;:6;:20;;;8117:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;8227:1;8206:23;;:9;:23;;;8198:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;8282:47;8303:6;8311:9;8322:6;8282:20;:47::i;:::-;8342:21;8366:9;:17;8376:6;8366:17;;;;;;;;;;;;;;;;8342:41;;8433:6;8416:13;:23;;8394:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;8577:6;8561:13;:22;8541:9;:17;8551:6;8541:17;;;;;;;;;;;;;;;:42;;;;8629:6;8605:9;:20;8615:9;8605:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;8670:9;8653:35;;8662:6;8653:35;;;8681:6;8653:35;;;;;;:::i;:::-;;;;;;;;8701:46;8721:6;8729:9;8740:6;8701:19;:46::i;:::-;8106:649;7985:770;;;:::o;27122:787::-;27161:23;27187:24;27205:4;27187:9;:24::i;:::-;27161:50;;27222:25;27269:11;;27250:16;;:30;;;;:::i;:::-;27222:58;;27291:12;27338:18;;27320:15;:36;27316:105;;;27391:18;;27373:36;;27316:105;27433:26;27462:15;27433:44;;27490:36;27507:18;27490:16;:36::i;:::-;27539:18;27561:21;27539:44;;27594:17;27643;27628:11;;27615:10;:24;;;;:::i;:::-;27614:46;;;;:::i;:::-;27594:66;;27692:1;27673:16;:20;;;;27718:1;27704:11;:15;;;;27754:9;;;;;;;;;;;27746:23;;27777:9;27746:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27732:59;;;;;27824:13;;;;;;;;;;;27816:27;;27865:21;27816:85;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27802:99;;;;;27150:759;;;;;;27122:787::o;10157:125::-;;;;:::o;10290:124::-;;;;:::o;26000:589::-;26126:21;26164:1;26150:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26126:40;;26195:4;26177;26182:1;26177:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;26221:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26211:4;26216:1;26211:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;26256:62;26273:4;26288:15;26306:11;26256:8;:62::i;:::-;26357:15;:66;;;26438:11;26464:1;26508:4;26535;26555:15;26357:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26055:534;26000:589;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:246::-;1531:1;1541:113;1555:6;1552:1;1549:13;1541:113;;;1640:1;1635:3;1631:11;1625:18;1621:1;1616:3;1612:11;1605:39;1577:2;1574:1;1570:10;1565:15;;1541:113;;;1688:1;1679:6;1674:3;1670:16;1663:27;1512:184;1450:246;;;:::o;1702:102::-;1743:6;1794:2;1790:7;1785:2;1778:5;1774:14;1770:28;1760:38;;1702:102;;;:::o;1810:377::-;1898:3;1926:39;1959:5;1926:39;:::i;:::-;1981:71;2045:6;2040:3;1981:71;:::i;:::-;1974:78;;2061:65;2119:6;2114:3;2107:4;2100:5;2096:16;2061:65;:::i;:::-;2151:29;2173:6;2151:29;:::i;:::-;2146:3;2142:39;2135:46;;1902:285;1810:377;;;;:::o;2193:313::-;2306:4;2344:2;2333:9;2329:18;2321:26;;2393:9;2387:4;2383:20;2379:1;2368:9;2364:17;2357:47;2421:78;2494:4;2485:6;2421:78;:::i;:::-;2413:86;;2193:313;;;;:::o;2512:126::-;2549:7;2589:42;2582:5;2578:54;2567:65;;2512:126;;;:::o;2644:96::-;2681:7;2710:24;2728:5;2710:24;:::i;:::-;2699:35;;2644:96;;;:::o;2746:122::-;2819:24;2837:5;2819:24;:::i;:::-;2812:5;2809:35;2799:63;;2858:1;2855;2848:12;2799:63;2746:122;:::o;2874:139::-;2920:5;2958:6;2945:20;2936:29;;2974:33;3001:5;2974:33;:::i;:::-;2874:139;;;;:::o;3019:474::-;3087:6;3095;3144:2;3132:9;3123:7;3119:23;3115:32;3112:119;;;3150:79;;:::i;:::-;3112:119;3270:1;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3241:117;3397:2;3423:53;3468:7;3459:6;3448:9;3444:22;3423:53;:::i;:::-;3413:63;;3368:118;3019:474;;;;;:::o;3499:90::-;3533:7;3576:5;3569:13;3562:21;3551:32;;3499:90;;;:::o;3595:109::-;3676:21;3691:5;3676:21;:::i;:::-;3671:3;3664:34;3595:109;;:::o;3710:210::-;3797:4;3835:2;3824:9;3820:18;3812:26;;3848:65;3910:1;3899:9;3895:17;3886:6;3848:65;:::i;:::-;3710:210;;;;:::o;3926:118::-;4013:24;4031:5;4013:24;:::i;:::-;4008:3;4001:37;3926:118;;:::o;4050:222::-;4143:4;4181:2;4170:9;4166:18;4158:26;;4194:71;4262:1;4251:9;4247:17;4238:6;4194:71;:::i;:::-;4050:222;;;;:::o;4278:329::-;4337:6;4386:2;4374:9;4365:7;4361:23;4357:32;4354:119;;;4392:79;;:::i;:::-;4354:119;4512:1;4537:53;4582:7;4573:6;4562:9;4558:22;4537:53;:::i;:::-;4527:63;;4483:117;4278:329;;;;:::o;4613:60::-;4641:3;4662:5;4655:12;;4613:60;;;:::o;4679:142::-;4729:9;4762:53;4780:34;4789:24;4807:5;4789:24;:::i;:::-;4780:34;:::i;:::-;4762:53;:::i;:::-;4749:66;;4679:142;;;:::o;4827:126::-;4877:9;4910:37;4941:5;4910:37;:::i;:::-;4897:50;;4827:126;;;:::o;4959:153::-;5036:9;5069:37;5100:5;5069:37;:::i;:::-;5056:50;;4959:153;;;:::o;5118:185::-;5232:64;5290:5;5232:64;:::i;:::-;5227:3;5220:77;5118:185;;:::o;5309:276::-;5429:4;5467:2;5456:9;5452:18;5444:26;;5480:98;5575:1;5564:9;5560:17;5551:6;5480:98;:::i;:::-;5309:276;;;;:::o;5591:329::-;5650:6;5699:2;5687:9;5678:7;5674:23;5670:32;5667:119;;;5705:79;;:::i;:::-;5667:119;5825:1;5850:53;5895:7;5886:6;5875:9;5871:22;5850:53;:::i;:::-;5840:63;;5796:117;5591:329;;;;:::o;5926:619::-;6003:6;6011;6019;6068:2;6056:9;6047:7;6043:23;6039:32;6036:119;;;6074:79;;:::i;:::-;6036:119;6194:1;6219:53;6264:7;6255:6;6244:9;6240:22;6219:53;:::i;:::-;6209:63;;6165:117;6321:2;6347:53;6392:7;6383:6;6372:9;6368:22;6347:53;:::i;:::-;6337:63;;6292:118;6449:2;6475:53;6520:7;6511:6;6500:9;6496:22;6475:53;:::i;:::-;6465:63;;6420:118;5926:619;;;;;:::o;6551:118::-;6638:24;6656:5;6638:24;:::i;:::-;6633:3;6626:37;6551:118;;:::o;6675:222::-;6768:4;6806:2;6795:9;6791:18;6783:26;;6819:71;6887:1;6876:9;6872:17;6863:6;6819:71;:::i;:::-;6675:222;;;;:::o;6903:86::-;6938:7;6978:4;6971:5;6967:16;6956:27;;6903:86;;;:::o;6995:112::-;7078:22;7094:5;7078:22;:::i;:::-;7073:3;7066:35;6995:112;;:::o;7113:214::-;7202:4;7240:2;7229:9;7225:18;7217:26;;7253:67;7317:1;7306:9;7302:17;7293:6;7253:67;:::i;:::-;7113:214;;;;:::o;7333:116::-;7403:21;7418:5;7403:21;:::i;:::-;7396:5;7393:32;7383:60;;7439:1;7436;7429:12;7383:60;7333:116;:::o;7455:133::-;7498:5;7536:6;7523:20;7514:29;;7552:30;7576:5;7552:30;:::i;:::-;7455:133;;;;:::o;7594:468::-;7659:6;7667;7716:2;7704:9;7695:7;7691:23;7687:32;7684:119;;;7722:79;;:::i;:::-;7684:119;7842:1;7867:53;7912:7;7903:6;7892:9;7888:22;7867:53;:::i;:::-;7857:63;;7813:117;7969:2;7995:50;8037:7;8028:6;8017:9;8013:22;7995:50;:::i;:::-;7985:60;;7940:115;7594:468;;;;;:::o;8068:323::-;8124:6;8173:2;8161:9;8152:7;8148:23;8144:32;8141:119;;;8179:79;;:::i;:::-;8141:119;8299:1;8324:50;8366:7;8357:6;8346:9;8342:22;8324:50;:::i;:::-;8314:60;;8270:114;8068:323;;;;:::o;8397:110::-;8448:7;8477:24;8495:5;8477:24;:::i;:::-;8466:35;;8397:110;;;:::o;8513:150::-;8600:38;8632:5;8600:38;:::i;:::-;8593:5;8590:49;8580:77;;8653:1;8650;8643:12;8580:77;8513:150;:::o;8669:167::-;8729:5;8767:6;8754:20;8745:29;;8783:47;8824:5;8783:47;:::i;:::-;8669:167;;;;:::o;8842:502::-;8924:6;8932;8981:2;8969:9;8960:7;8956:23;8952:32;8949:119;;;8987:79;;:::i;:::-;8949:119;9107:1;9132:67;9191:7;9182:6;9171:9;9167:22;9132:67;:::i;:::-;9122:77;;9078:131;9248:2;9274:53;9319:7;9310:6;9299:9;9295:22;9274:53;:::i;:::-;9264:63;;9219:118;8842:502;;;;;:::o;9350:474::-;9418:6;9426;9475:2;9463:9;9454:7;9450:23;9446:32;9443:119;;;9481:79;;:::i;:::-;9443:119;9601:1;9626:53;9671:7;9662:6;9651:9;9647:22;9626:53;:::i;:::-;9616:63;;9572:117;9728:2;9754:53;9799:7;9790:6;9779:9;9775:22;9754:53;:::i;:::-;9744:63;;9699:118;9350:474;;;;;:::o;9830:182::-;9970:34;9966:1;9958:6;9954:14;9947:58;9830:182;:::o;10018:366::-;10160:3;10181:67;10245:2;10240:3;10181:67;:::i;:::-;10174:74;;10257:93;10346:3;10257:93;:::i;:::-;10375:2;10370:3;10366:12;10359:19;;10018:366;;;:::o;10390:419::-;10556:4;10594:2;10583:9;10579:18;10571:26;;10643:9;10637:4;10633:20;10629:1;10618:9;10614:17;10607:47;10671:131;10797:4;10671:131;:::i;:::-;10663:139;;10390:419;;;:::o;10815:170::-;10955:22;10951:1;10943:6;10939:14;10932:46;10815:170;:::o;10991:366::-;11133:3;11154:67;11218:2;11213:3;11154:67;:::i;:::-;11147:74;;11230:93;11319:3;11230:93;:::i;:::-;11348:2;11343:3;11339:12;11332:19;;10991:366;;;:::o;11363:419::-;11529:4;11567:2;11556:9;11552:18;11544:26;;11616:9;11610:4;11606:20;11602:1;11591:9;11587:17;11580:47;11644:131;11770:4;11644:131;:::i;:::-;11636:139;;11363:419;;;:::o;11788:180::-;11836:77;11833:1;11826:88;11933:4;11930:1;11923:15;11957:4;11954:1;11947:15;11974:191;12014:3;12033:20;12051:1;12033:20;:::i;:::-;12028:25;;12067:20;12085:1;12067:20;:::i;:::-;12062:25;;12110:1;12107;12103:9;12096:16;;12131:3;12128:1;12125:10;12122:36;;;12138:18;;:::i;:::-;12122:36;11974:191;;;;:::o;12171:180::-;12219:77;12216:1;12209:88;12316:4;12313:1;12306:15;12340:4;12337:1;12330:15;12357:320;12401:6;12438:1;12432:4;12428:12;12418:22;;12485:1;12479:4;12475:12;12506:18;12496:81;;12562:4;12554:6;12550:17;12540:27;;12496:81;12624:2;12616:6;12613:14;12593:18;12590:38;12587:84;;12643:18;;:::i;:::-;12587:84;12408:269;12357:320;;;:::o;12683:410::-;12723:7;12746:20;12764:1;12746:20;:::i;:::-;12741:25;;12780:20;12798:1;12780:20;:::i;:::-;12775:25;;12835:1;12832;12828:9;12857:30;12875:11;12857:30;:::i;:::-;12846:41;;13036:1;13027:7;13023:15;13020:1;13017:22;12997:1;12990:9;12970:83;12947:139;;13066:18;;:::i;:::-;12947:139;12731:362;12683:410;;;;:::o;13099:227::-;13239:34;13235:1;13227:6;13223:14;13216:58;13308:10;13303:2;13295:6;13291:15;13284:35;13099:227;:::o;13332:366::-;13474:3;13495:67;13559:2;13554:3;13495:67;:::i;:::-;13488:74;;13571:93;13660:3;13571:93;:::i;:::-;13689:2;13684:3;13680:12;13673:19;;13332:366;;;:::o;13704:419::-;13870:4;13908:2;13897:9;13893:18;13885:26;;13957:9;13951:4;13947:20;13943:1;13932:9;13928:17;13921:47;13985:131;14111:4;13985:131;:::i;:::-;13977:139;;13704:419;;;:::o;14129:244::-;14269:34;14265:1;14257:6;14253:14;14246:58;14338:27;14333:2;14325:6;14321:15;14314:52;14129:244;:::o;14379:366::-;14521:3;14542:67;14606:2;14601:3;14542:67;:::i;:::-;14535:74;;14618:93;14707:3;14618:93;:::i;:::-;14736:2;14731:3;14727:12;14720:19;;14379:366;;;:::o;14751:419::-;14917:4;14955:2;14944:9;14940:18;14932:26;;15004:9;14998:4;14994:20;14990:1;14979:9;14975:17;14968:47;15032:131;15158:4;15032:131;:::i;:::-;15024:139;;14751:419;;;:::o;15176:143::-;15233:5;15264:6;15258:13;15249:22;;15280:33;15307:5;15280:33;:::i;:::-;15176:143;;;;:::o;15325:351::-;15395:6;15444:2;15432:9;15423:7;15419:23;15415:32;15412:119;;;15450:79;;:::i;:::-;15412:119;15570:1;15595:64;15651:7;15642:6;15631:9;15627:22;15595:64;:::i;:::-;15585:74;;15541:128;15325:351;;;;:::o;15682:164::-;15822:16;15818:1;15810:6;15806:14;15799:40;15682:164;:::o;15852:366::-;15994:3;16015:67;16079:2;16074:3;16015:67;:::i;:::-;16008:74;;16091:93;16180:3;16091:93;:::i;:::-;16209:2;16204:3;16200:12;16193:19;;15852:366;;;:::o;16224:419::-;16390:4;16428:2;16417:9;16413:18;16405:26;;16477:9;16471:4;16467:20;16463:1;16452:9;16448:17;16441:47;16505:131;16631:4;16505:131;:::i;:::-;16497:139;;16224:419;;;:::o;16649:332::-;16770:4;16808:2;16797:9;16793:18;16785:26;;16821:71;16889:1;16878:9;16874:17;16865:6;16821:71;:::i;:::-;16902:72;16970:2;16959:9;16955:18;16946:6;16902:72;:::i;:::-;16649:332;;;;;:::o;16987:137::-;17041:5;17072:6;17066:13;17057:22;;17088:30;17112:5;17088:30;:::i;:::-;16987:137;;;;:::o;17130:345::-;17197:6;17246:2;17234:9;17225:7;17221:23;17217:32;17214:119;;;17252:79;;:::i;:::-;17214:119;17372:1;17397:61;17450:7;17441:6;17430:9;17426:22;17397:61;:::i;:::-;17387:71;;17343:125;17130:345;;;;:::o;17481:224::-;17621:34;17617:1;17609:6;17605:14;17598:58;17690:7;17685:2;17677:6;17673:15;17666:32;17481:224;:::o;17711:366::-;17853:3;17874:67;17938:2;17933:3;17874:67;:::i;:::-;17867:74;;17950:93;18039:3;17950:93;:::i;:::-;18068:2;18063:3;18059:12;18052:19;;17711:366;;;:::o;18083:419::-;18249:4;18287:2;18276:9;18272:18;18264:26;;18336:9;18330:4;18326:20;18322:1;18311:9;18307:17;18300:47;18364:131;18490:4;18364:131;:::i;:::-;18356:139;;18083:419;;;:::o;18508:225::-;18648:34;18644:1;18636:6;18632:14;18625:58;18717:8;18712:2;18704:6;18700:15;18693:33;18508:225;:::o;18739:366::-;18881:3;18902:67;18966:2;18961:3;18902:67;:::i;:::-;18895:74;;18978:93;19067:3;18978:93;:::i;:::-;19096:2;19091:3;19087:12;19080:19;;18739:366;;;:::o;19111:419::-;19277:4;19315:2;19304:9;19300:18;19292:26;;19364:9;19358:4;19354:20;19350:1;19339:9;19335:17;19328:47;19392:131;19518:4;19392:131;:::i;:::-;19384:139;;19111:419;;;:::o;19536:223::-;19676:34;19672:1;19664:6;19660:14;19653:58;19745:6;19740:2;19732:6;19728:15;19721:31;19536:223;:::o;19765:366::-;19907:3;19928:67;19992:2;19987:3;19928:67;:::i;:::-;19921:74;;20004:93;20093:3;20004:93;:::i;:::-;20122:2;20117:3;20113:12;20106:19;;19765:366;;;:::o;20137:419::-;20303:4;20341:2;20330:9;20326:18;20318:26;;20390:9;20384:4;20380:20;20376:1;20365:9;20361:17;20354:47;20418:131;20544:4;20418:131;:::i;:::-;20410:139;;20137:419;;;:::o;20562:221::-;20702:34;20698:1;20690:6;20686:14;20679:58;20771:4;20766:2;20758:6;20754:15;20747:29;20562:221;:::o;20789:366::-;20931:3;20952:67;21016:2;21011:3;20952:67;:::i;:::-;20945:74;;21028:93;21117:3;21028:93;:::i;:::-;21146:2;21141:3;21137:12;21130:19;;20789:366;;;:::o;21161:419::-;21327:4;21365:2;21354:9;21350:18;21342:26;;21414:9;21408:4;21404:20;21400:1;21389:9;21385:17;21378:47;21442:131;21568:4;21442:131;:::i;:::-;21434:139;;21161:419;;;:::o;21586:224::-;21726:34;21722:1;21714:6;21710:14;21703:58;21795:7;21790:2;21782:6;21778:15;21771:32;21586:224;:::o;21816:366::-;21958:3;21979:67;22043:2;22038:3;21979:67;:::i;:::-;21972:74;;22055:93;22144:3;22055:93;:::i;:::-;22173:2;22168:3;22164:12;22157:19;;21816:366;;;:::o;22188:419::-;22354:4;22392:2;22381:9;22377:18;22369:26;;22441:9;22435:4;22431:20;22427:1;22416:9;22412:17;22405:47;22469:131;22595:4;22469:131;:::i;:::-;22461:139;;22188:419;;;:::o;22613:222::-;22753:34;22749:1;22741:6;22737:14;22730:58;22822:5;22817:2;22809:6;22805:15;22798:30;22613:222;:::o;22841:366::-;22983:3;23004:67;23068:2;23063:3;23004:67;:::i;:::-;22997:74;;23080:93;23169:3;23080:93;:::i;:::-;23198:2;23193:3;23189:12;23182:19;;22841:366;;;:::o;23213:419::-;23379:4;23417:2;23406:9;23402:18;23394:26;;23466:9;23460:4;23456:20;23452:1;23441:9;23437:17;23430:47;23494:131;23620:4;23494:131;:::i;:::-;23486:139;;23213:419;;;:::o;23638:172::-;23778:24;23774:1;23766:6;23762:14;23755:48;23638:172;:::o;23816:366::-;23958:3;23979:67;24043:2;24038:3;23979:67;:::i;:::-;23972:74;;24055:93;24144:3;24055:93;:::i;:::-;24173:2;24168:3;24164:12;24157:19;;23816:366;;;:::o;24188:419::-;24354:4;24392:2;24381:9;24377:18;24369:26;;24441:9;24435:4;24431:20;24427:1;24416:9;24412:17;24405:47;24469:131;24595:4;24469:131;:::i;:::-;24461:139;;24188:419;;;:::o;24613:240::-;24753:34;24749:1;24741:6;24737:14;24730:58;24822:23;24817:2;24809:6;24805:15;24798:48;24613:240;:::o;24859:366::-;25001:3;25022:67;25086:2;25081:3;25022:67;:::i;:::-;25015:74;;25098:93;25187:3;25098:93;:::i;:::-;25216:2;25211:3;25207:12;25200:19;;24859:366;;;:::o;25231:419::-;25397:4;25435:2;25424:9;25420:18;25412:26;;25484:9;25478:4;25474:20;25470:1;25459:9;25455:17;25448:47;25512:131;25638:4;25512:131;:::i;:::-;25504:139;;25231:419;;;:::o;25656:169::-;25796:21;25792:1;25784:6;25780:14;25773:45;25656:169;:::o;25831:366::-;25973:3;25994:67;26058:2;26053:3;25994:67;:::i;:::-;25987:74;;26070:93;26159:3;26070:93;:::i;:::-;26188:2;26183:3;26179:12;26172:19;;25831:366;;;:::o;26203:419::-;26369:4;26407:2;26396:9;26392:18;26384:26;;26456:9;26450:4;26446:20;26442:1;26431:9;26427:17;26420:47;26484:131;26610:4;26484:131;:::i;:::-;26476:139;;26203:419;;;:::o;26628:241::-;26768:34;26764:1;26756:6;26752:14;26745:58;26837:24;26832:2;26824:6;26820:15;26813:49;26628:241;:::o;26875:366::-;27017:3;27038:67;27102:2;27097:3;27038:67;:::i;:::-;27031:74;;27114:93;27203:3;27114:93;:::i;:::-;27232:2;27227:3;27223:12;27216:19;;26875:366;;;:::o;27247:419::-;27413:4;27451:2;27440:9;27436:18;27428:26;;27500:9;27494:4;27490:20;27486:1;27475:9;27471:17;27464:47;27528:131;27654:4;27528:131;:::i;:::-;27520:139;;27247:419;;;:::o;27672:180::-;27720:77;27717:1;27710:88;27817:4;27814:1;27807:15;27841:4;27838:1;27831:15;27858:185;27898:1;27915:20;27933:1;27915:20;:::i;:::-;27910:25;;27949:20;27967:1;27949:20;:::i;:::-;27944:25;;27988:1;27978:35;;27993:18;;:::i;:::-;27978:35;28035:1;28032;28028:9;28023:14;;27858:185;;;;:::o;28049:194::-;28089:4;28109:20;28127:1;28109:20;:::i;:::-;28104:25;;28143:20;28161:1;28143:20;:::i;:::-;28138:25;;28187:1;28184;28180:9;28172:17;;28211:1;28205:4;28202:11;28199:37;;;28216:18;;:::i;:::-;28199:37;28049:194;;;;:::o;28249:225::-;28389:34;28385:1;28377:6;28373:14;28366:58;28458:8;28453:2;28445:6;28441:15;28434:33;28249:225;:::o;28480:366::-;28622:3;28643:67;28707:2;28702:3;28643:67;:::i;:::-;28636:74;;28719:93;28808:3;28719:93;:::i;:::-;28837:2;28832:3;28828:12;28821:19;;28480:366;;;:::o;28852:419::-;29018:4;29056:2;29045:9;29041:18;29033:26;;29105:9;29099:4;29095:20;29091:1;29080:9;29076:17;29069:47;29133:131;29259:4;29133:131;:::i;:::-;29125:139;;28852:419;;;:::o;29277:147::-;29378:11;29415:3;29400:18;;29277:147;;;;:::o;29430:114::-;;:::o;29550:398::-;29709:3;29730:83;29811:1;29806:3;29730:83;:::i;:::-;29723:90;;29822:93;29911:3;29822:93;:::i;:::-;29940:1;29935:3;29931:11;29924:18;;29550:398;;;:::o;29954:379::-;30138:3;30160:147;30303:3;30160:147;:::i;:::-;30153:154;;30324:3;30317:10;;29954:379;;;:::o;30339:180::-;30387:77;30384:1;30377:88;30484:4;30481:1;30474:15;30508:4;30505:1;30498:15;30525:180;30573:77;30570:1;30563:88;30670:4;30667:1;30660:15;30694:4;30691:1;30684:15;30711:143;30768:5;30799:6;30793:13;30784:22;;30815:33;30842:5;30815:33;:::i;:::-;30711:143;;;;:::o;30860:351::-;30930:6;30979:2;30967:9;30958:7;30954:23;30950:32;30947:119;;;30985:79;;:::i;:::-;30947:119;31105:1;31130:64;31186:7;31177:6;31166:9;31162:22;31130:64;:::i;:::-;31120:74;;31076:128;30860:351;;;;:::o;31217:85::-;31262:7;31291:5;31280:16;;31217:85;;;:::o;31308:158::-;31366:9;31399:61;31417:42;31426:32;31452:5;31426:32;:::i;:::-;31417:42;:::i;:::-;31399:61;:::i;:::-;31386:74;;31308:158;;;:::o;31472:147::-;31567:45;31606:5;31567:45;:::i;:::-;31562:3;31555:58;31472:147;;:::o;31625:114::-;31692:6;31726:5;31720:12;31710:22;;31625:114;;;:::o;31745:184::-;31844:11;31878:6;31873:3;31866:19;31918:4;31913:3;31909:14;31894:29;;31745:184;;;;:::o;31935:132::-;32002:4;32025:3;32017:11;;32055:4;32050:3;32046:14;32038:22;;31935:132;;;:::o;32073:108::-;32150:24;32168:5;32150:24;:::i;:::-;32145:3;32138:37;32073:108;;:::o;32187:179::-;32256:10;32277:46;32319:3;32311:6;32277:46;:::i;:::-;32355:4;32350:3;32346:14;32332:28;;32187:179;;;;:::o;32372:113::-;32442:4;32474;32469:3;32465:14;32457:22;;32372:113;;;:::o;32521:732::-;32640:3;32669:54;32717:5;32669:54;:::i;:::-;32739:86;32818:6;32813:3;32739:86;:::i;:::-;32732:93;;32849:56;32899:5;32849:56;:::i;:::-;32928:7;32959:1;32944:284;32969:6;32966:1;32963:13;32944:284;;;33045:6;33039:13;33072:63;33131:3;33116:13;33072:63;:::i;:::-;33065:70;;33158:60;33211:6;33158:60;:::i;:::-;33148:70;;33004:224;32991:1;32988;32984:9;32979:14;;32944:284;;;32948:14;33244:3;33237:10;;32645:608;;;32521:732;;;;:::o;33259:831::-;33522:4;33560:3;33549:9;33545:19;33537:27;;33574:71;33642:1;33631:9;33627:17;33618:6;33574:71;:::i;:::-;33655:80;33731:2;33720:9;33716:18;33707:6;33655:80;:::i;:::-;33782:9;33776:4;33772:20;33767:2;33756:9;33752:18;33745:48;33810:108;33913:4;33904:6;33810:108;:::i;:::-;33802:116;;33928:72;33996:2;33985:9;33981:18;33972:6;33928:72;:::i;:::-;34010:73;34078:3;34067:9;34063:19;34054:6;34010:73;:::i;:::-;33259:831;;;;;;;;:::o

Swarm Source

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