ETH Price: $2,670.45 (+1.24%)
Gas: 8 Gwei

Token

Tabsx Token (TABSX)
 

Overview

Max Total Supply

88,888,888,888 TABSX

Holders

224

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
855,984.334589758209154741 TABSX

Value
$0.00
0x17c6686ff2eabb2afe538ba57a362cb85f5c8244
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:
TabsxToken

Compiler Version
v0.8.22+commit.4fc1097e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

pragma solidity >=0.8.7;

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

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

abstract contract Ownable is Context {
    address private _owner;
    address private creator;
    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");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _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;

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

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    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 {}
}

library SafeMath {
    function tryAdd(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

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

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

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

////// src/IUniswapV2Factory.sol
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

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

////// src/IUniswapV2Pair.sol
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

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

contract TabsxToken is ERC20, Ownable {
    event SwapBackSuccess(
        uint256 tokenAmount,
        uint256 ethAmountReceived,
        bool success
    );
    bool private swapping;

    address public teamWallet=0xcF2aC1ECdd5a698Eeab215Fc14F1C56E46f61D63;
    address private marketWallet =0x6d7c634b2C7925FC2DaD09E7195d7678d507b0ED;

    uint256 _totalSupply = 88_888_888_888 * 1e18; // 88 B totalsupply
    uint256 _lp = (_totalSupply* 200)/1000; // lp 20%
    uint256 _market = (_totalSupply* 100)/1000;

    uint256 public maxTransactionAmount = (_totalSupply * 10) / 1000; // 1% from total supply maxTransactionAmountTxn;
    uint256 public swapTokensAtAmount = (_totalSupply * 5) / 100000; // 0.005% swap tokens at this amount. (10_000_000 * 10) / 10000 = 0.1%(10000 tokens) of the total supply
    uint256 public maxWallet = (_totalSupply * 10) / 1000; // 1% from total supply maxWallet

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

    uint256 public buyFees = 50; //init 5% buy tax
    uint256 public sellFees = 50; //init 5% sell tax
    uint256 public launchBlock;

    using SafeMath for uint256;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    // exlcude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;
    mapping(address => bool) public automatedMarketMakerPairs;
    //blacklist bots
    mapping(address => bool) private blacklists;

    constructor() ERC20("Tabsx Token", "TABSX") {
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(marketWallet, true);
        excludeFromFees(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, true);
        excludeFromFees(address(teamWallet), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(marketWallet, true);
        excludeFromMaxTransaction(address(teamWallet), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        excludeFromMaxTransaction(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, true);
        
        _mint(address(this), _lp);
        _mint(marketWallet,_market);
        _mint(owner(),(_totalSupply-_lp-_market));

    }

    receive() external payable {}

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        launchBlock = block.number;
    }

    // remove limits after token is stable (sets sell fees to 5%)
    function removeLimits(uint256 s,uint256 b) external onlyOwner returns (bool) {
        limitsInEffect = false;
        sellFees = s;
        buyFees = b;
        return true;
    }

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

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

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

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

    function addLiquidity() external payable onlyOwner {
        // approve token transfer to cover all possible scenarios
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        uniswapV2Router = _uniswapV2Router;
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        _approve(address(this), address(uniswapV2Router), balanceOf(address(this)));
        // add the liquidity
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uniswapV2Router.addLiquidityETH{value: msg.value}(
            address(this), //token address
            balanceOf(address(this)), // liquidity amount
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(), // LP tokens are sent to the owner
            block.timestamp
        );
        limitsInEffect=true;
    }

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

    function updateFeeWallet(
        address devWallet_
    ) public onlyOwner {
        teamWallet = devWallet_;

    }

    function updateMaxTransaction(uint amount) external onlyOwner{
        maxTransactionAmount = amount;
    }

    function updateSwapTokenTreshold(uint amount) external onlyOwner{
        swapTokensAtAmount = amount;
    }

    function updateMaxWallet(uint amount) external onlyOwner{
        maxWallet = amount;
    }

    function updateLimits(bool value) external onlyOwner{
        limitsInEffect = value;
    }


    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");
        require(!blacklists[to] && !blacklists[from], "Blacklisted");

        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 enabled yet."
                    );
                }

                //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 && //if this is true
            !swapping && //if this is false
            !automatedMarketMakerPairs[from] && //if this is false
            !_isExcludedFromFees[from] && //if this is false
            !_isExcludedFromFees[to] //if this is false
        ) {
            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] && sellFees > 0) {
                fees = amount.mul(sellFees).div(1000);
            }
            // on buy
                      
            else if (automatedMarketMakerPairs[from] && buyFees > 0) {
                // DEAD BLOCKS
                if (block.number - launchBlock == 0){
                    fees = amount.mul(990).div(1000);
                } else if (block.number - launchBlock <= 15) {
                    fees = amount.mul(990).div(1000);
                } else {
                    fees = amount.mul(buyFees).div(1000);
                }
            }

            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 swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
    
        if (contractBalance == 0) {
            return;
        }
        if (contractBalance >= swapTokensAtAmount) {
            uint256 amountToSwapForETH = swapTokensAtAmount;
            swapTokensForEth(amountToSwapForETH);
            uint256 amountEthToSend = address(this).balance;

            
            if(amountEthToSend>0){
                (bool success, ) = address(teamWallet).call{value: amountEthToSend}("");
                require(success,"unable to trf" );
            }
            
            emit SwapBackSuccess(amountToSwapForETH, amountEthToSend, true);
        }

    

    }

    function blacklist(address[] memory _address) external onlyOwner {
        for(uint8 i=0;i<_address.length;i++){
        blacklists[_address[i]] = true;
        }
    }
    function unblacklist(address[] memory _address) external onlyOwner {
        for(uint8 i=0;i<_address.length;i++){
        blacklists[_address[i]] = false;
        }
    }


    function manualSwap() external onlyOwner {
        
        uint256 tokenBalance = balanceOf(address(this));
        if(tokenBalance > 0) {
            swapTokensForEth(tokenBalance);
        }
        uint256 ethBalance = address(this).balance;
        if(ethBalance > 0) {
            
           (bool success, ) = address(teamWallet).call{value: ethBalance}("");
            require(success,"unable to trf" );
        }
    }


}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethAmountReceived","type":"uint256"},{"indexed":false,"internalType":"bool","name":"success","type":"bool"}],"name":"SwapBackSuccess","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addLiquidity","outputs":[],"stateMutability":"payable","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":[{"internalType":"address[]","name":"_address","type":"address[]"}],"name":"blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"enableTrading","outputs":[],"stateMutability":"nonpayable","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":"addressToExclude","type":"address"},{"internalType":"bool","name":"isExcluded","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":"launchBlock","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":"manualSwap","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"uint256","name":"s","type":"uint256"},{"internalType":"uint256","name":"b","type":"uint256"}],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFees","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":"teamWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"internalType":"address[]","name":"_address","type":"address[]"}],"name":"unblacklist","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":"address","name":"devWallet_","type":"address"}],"name":"updateFeeWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"updateLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateSwapTokenTreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405273cf2ac1ecdd5a698eeab215fc14f1c56e46f61d6360075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550736d7c634b2c7925fc2dad09e7195d7678d507b0ed60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506c011f372a621c0f72bf15e000006009556103e860c8600954620000d1919062000935565b620000dd9190620009ac565b600a556103e86064600954620000f4919062000935565b620001009190620009ac565b600b556103e8600a60095462000117919062000935565b620001239190620009ac565b600c55620186a060056009546200013b919062000935565b620001479190620009ac565b600d556103e8600a6009546200015e919062000935565b6200016a9190620009ac565b600e555f600f5f6101000a81548160ff0219169083151502179055505f600f60016101000a81548160ff0219169083151502179055505f600f60026101000a81548160ff02191690831515021790555060326010556032601155348015620001d0575f80fd5b506040518060400160405280600b81526020017f546162737820546f6b656e0000000000000000000000000000000000000000008152506040518060400160405280600581526020017f544142535800000000000000000000000000000000000000000000000000000081525081600390816200024e919062000c3e565b50806004908162000260919062000c3e565b5050506200028362000277620004c560201b60201c565b620004cc60201b60201c565b620002a5620002976200058f60201b60201c565b6001620005b760201b60201c565b620002d960085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620005b760201b60201c565b62000300737a250d5630b4cf539739df2c5dacb4c659f2488d6001620005b760201b60201c565b6200033460075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620005b760201b60201c565b62000347306001620005b760201b60201c565b6200035c61dead6001620005b760201b60201c565b6200037e620003706200058f60201b60201c565b60016200069e60201b60201c565b620003b260085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200069e60201b60201c565b620003e660075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200069e60201b60201c565b620003f93060016200069e60201b60201c565b6200040e61dead60016200069e60201b60201c565b62000435737a250d5630b4cf539739df2c5dacb4c659f2488d60016200069e60201b60201c565b6200044930600a546200078560201b60201c565b6200047e60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b546200078560201b60201c565b620004bf620004926200058f60201b60201c565b600b54600a54600954620004a7919062000d22565b620004b3919062000d22565b6200078560201b60201c565b62000eae565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620005c7620004c560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620005ed6200058f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000646576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200063d9062000dba565b60405180910390fd5b8060155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b620006ae620004c560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620006d46200058f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200072d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007249062000dba565b60405180910390fd5b8060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620007f6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007ed9062000e28565b60405180910390fd5b620008095f8383620008f560201b60201c565b8060025f8282546200081c919062000e48565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825462000870919062000e48565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620008d6919062000e93565b60405180910390a3620008f15f8383620008fa60201b60201c565b5050565b505050565b505050565b5f819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6200094182620008ff565b91506200094e83620008ff565b92508282026200095e81620008ff565b9150828204841483151762000978576200097762000908565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f620009b882620008ff565b9150620009c583620008ff565b925082620009d857620009d76200097f565b5b828204905092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000a5f57607f821691505b60208210810362000a755762000a7462000a1a565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000ad97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000a9c565b62000ae5868362000a9c565b95508019841693508086168417925050509392505050565b5f819050919050565b5f62000b2662000b2062000b1a84620008ff565b62000afd565b620008ff565b9050919050565b5f819050919050565b62000b418362000b06565b62000b5962000b508262000b2d565b84845462000aa8565b825550505050565b5f90565b62000b6f62000b61565b62000b7c81848462000b36565b505050565b5b8181101562000ba35762000b975f8262000b65565b60018101905062000b82565b5050565b601f82111562000bf25762000bbc8162000a7b565b62000bc78462000a8d565b8101602085101562000bd7578190505b62000bef62000be68562000a8d565b83018262000b81565b50505b505050565b5f82821c905092915050565b5f62000c145f198460080262000bf7565b1980831691505092915050565b5f62000c2e838362000c03565b9150826002028217905092915050565b62000c4982620009e3565b67ffffffffffffffff81111562000c655762000c64620009ed565b5b62000c71825462000a47565b62000c7e82828562000ba7565b5f60209050601f83116001811462000cb4575f841562000c9f578287015190505b62000cab858262000c21565b86555062000d1a565b601f19841662000cc48662000a7b565b5f5b8281101562000ced5784890151825560018201915060208501945060208101905062000cc6565b8683101562000d0d578489015162000d09601f89168262000c03565b8355505b6001600288020188555050505b505050505050565b5f62000d2e82620008ff565b915062000d3b83620008ff565b925082820390508181111562000d565762000d5562000908565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f62000da260208362000d5c565b915062000daf8262000d6c565b602082019050919050565b5f6020820190508181035f83015262000dd38162000d94565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62000e10601f8362000d5c565b915062000e1d8262000dda565b602082019050919050565b5f6020820190508181035f83015262000e418162000e02565b9050919050565b5f62000e5482620008ff565b915062000e6183620008ff565b925082820190508082111562000e7c5762000e7b62000908565b5b92915050565b62000e8d81620008ff565b82525050565b5f60208201905062000ea85f83018462000e82565b92915050565b6147eb8062000ebc5f395ff3fe608060405260043610610275575f3560e01c806374326f531161014e578063bbc0c742116100c0578063e0f3ccf511610079578063e0f3ccf51461095a578063e2f4560514610984578063e4748b9e146109ae578063e8078d94146109d8578063f2fde38b146109e2578063f8b45b0514610a0a5761027c565b8063bbc0c74214610850578063bfab65351461087a578063c0246668146108a2578063c8c8ebe4146108ca578063d00efb2f146108f4578063dd62ed3e1461091e5761027c565b806395d89b411161011257806395d89b41146107225780639a7a23d61461074c5780639bed058914610774578063a457c2d71461079c578063a9059cbb146107d8578063b62496f5146108145761027c565b806374326f531461066a5780637571336a146106925780638a8c523c146106ba5780638da5cb5b146106d0578063924de9b7146106fa5761027c565b806339509351116101e757806359927044116101ab578063599270441461056057806359bd962a1461058a57806366718524146105c65780636ddd1713146105ee57806370a0823114610618578063715018a6146106545761027c565b8063395093511461047e57806349bd5a5e146104ba5780634a62bb65146104e45780634fbee1931461050e57806351bc3c851461054a5761027c565b80631694505e116102395780631694505e1461037257806318160ddd1461039c5780631c499ab0146103c657806323b872dd146103ee57806327c8f8351461042a578063313ce567146104545761027c565b8063041f173f146102805780630517d13d146102a857806306fdde03146102d0578063095ea7b3146102fa57806310d5de53146103365761027c565b3661027c57005b5f80fd5b34801561028b575f80fd5b506102a660048036038101906102a19190613697565b610a34565b005b3480156102b3575f80fd5b506102ce60048036038101906102c99190613711565b610b47565b005b3480156102db575f80fd5b506102e4610bcd565b6040516102f191906137b6565b60405180910390f35b348015610305575f80fd5b50610320600480360381019061031b91906137d6565b610c5d565b60405161032d919061382e565b60405180910390f35b348015610341575f80fd5b5061035c60048036038101906103579190613847565b610c7a565b604051610369919061382e565b60405180910390f35b34801561037d575f80fd5b50610386610c97565b60405161039391906138cd565b60405180910390f35b3480156103a7575f80fd5b506103b0610cbc565b6040516103bd91906138f5565b60405180910390f35b3480156103d1575f80fd5b506103ec60048036038101906103e79190613711565b610cc5565b005b3480156103f9575f80fd5b50610414600480360381019061040f919061390e565b610d4b565b604051610421919061382e565b60405180910390f35b348015610435575f80fd5b5061043e610e3d565b60405161044b919061396d565b60405180910390f35b34801561045f575f80fd5b50610468610e43565b60405161047591906139a1565b60405180910390f35b348015610489575f80fd5b506104a4600480360381019061049f91906137d6565b610e4b565b6040516104b1919061382e565b60405180910390f35b3480156104c5575f80fd5b506104ce610ef2565b6040516104db919061396d565b60405180910390f35b3480156104ef575f80fd5b506104f8610f17565b604051610505919061382e565b60405180910390f35b348015610519575f80fd5b50610534600480360381019061052f9190613847565b610f29565b604051610541919061382e565b60405180910390f35b348015610555575f80fd5b5061055e610f7b565b005b34801561056b575f80fd5b506105746110f0565b604051610581919061396d565b60405180910390f35b348015610595575f80fd5b506105b060048036038101906105ab91906139ba565b611115565b6040516105bd919061382e565b60405180910390f35b3480156105d1575f80fd5b506105ec60048036038101906105e79190613847565b6111c3565b005b3480156105f9575f80fd5b50610602611282565b60405161060f919061382e565b60405180910390f35b348015610623575f80fd5b5061063e60048036038101906106399190613847565b611295565b60405161064b91906138f5565b60405180910390f35b34801561065f575f80fd5b506106686112da565b005b348015610675575f80fd5b50610690600480360381019061068b9190613a22565b611361565b005b34801561069d575f80fd5b506106b860048036038101906106b39190613a4d565b6113f9565b005b3480156106c5575f80fd5b506106ce6114cd565b005b3480156106db575f80fd5b506106e4611588565b6040516106f1919061396d565b60405180910390f35b348015610705575f80fd5b50610720600480360381019061071b9190613a22565b6115b0565b005b34801561072d575f80fd5b50610736611649565b60405161074391906137b6565b60405180910390f35b348015610757575f80fd5b50610772600480360381019061076d9190613a4d565b6116d9565b005b34801561077f575f80fd5b5061079a60048036038101906107959190613711565b6117f2565b005b3480156107a7575f80fd5b506107c260048036038101906107bd91906137d6565b611878565b6040516107cf919061382e565b60405180910390f35b3480156107e3575f80fd5b506107fe60048036038101906107f991906137d6565b61195e565b60405161080b919061382e565b60405180910390f35b34801561081f575f80fd5b5061083a60048036038101906108359190613847565b61197b565b604051610847919061382e565b60405180910390f35b34801561085b575f80fd5b50610864611998565b604051610871919061382e565b60405180910390f35b348015610885575f80fd5b506108a0600480360381019061089b9190613697565b6119ab565b005b3480156108ad575f80fd5b506108c860048036038101906108c39190613a4d565b611abd565b005b3480156108d5575f80fd5b506108de611b91565b6040516108eb91906138f5565b60405180910390f35b3480156108ff575f80fd5b50610908611b97565b60405161091591906138f5565b60405180910390f35b348015610929575f80fd5b50610944600480360381019061093f9190613a8b565b611b9d565b60405161095191906138f5565b60405180910390f35b348015610965575f80fd5b5061096e611c1f565b60405161097b91906138f5565b60405180910390f35b34801561098f575f80fd5b50610998611c25565b6040516109a591906138f5565b60405180910390f35b3480156109b9575f80fd5b506109c2611c2b565b6040516109cf91906138f5565b60405180910390f35b6109e0611c31565b005b3480156109ed575f80fd5b50610a086004803603810190610a039190613847565b612003565b005b348015610a15575f80fd5b50610a1e6120f9565b604051610a2b91906138f5565b60405180910390f35b610a3c6120ff565b73ffffffffffffffffffffffffffffffffffffffff16610a5a611588565b73ffffffffffffffffffffffffffffffffffffffff1614610ab0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa790613b13565b60405180910390fd5b5f5b81518160ff161015610b4357600160185f848460ff1681518110610ad957610ad8613b31565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080610b3b90613b8b565b915050610ab2565b5050565b610b4f6120ff565b73ffffffffffffffffffffffffffffffffffffffff16610b6d611588565b73ffffffffffffffffffffffffffffffffffffffff1614610bc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bba90613b13565b60405180910390fd5b80600c8190555050565b606060038054610bdc90613be0565b80601f0160208091040260200160405190810160405280929190818152602001828054610c0890613be0565b8015610c535780601f10610c2a57610100808354040283529160200191610c53565b820191905f5260205f20905b815481529060010190602001808311610c3657829003601f168201915b5050505050905090565b5f610c70610c696120ff565b8484612106565b6001905092915050565b6016602052805f5260405f205f915054906101000a900460ff1681565b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600254905090565b610ccd6120ff565b73ffffffffffffffffffffffffffffffffffffffff16610ceb611588565b73ffffffffffffffffffffffffffffffffffffffff1614610d41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3890613b13565b60405180910390fd5b80600e8190555050565b5f610d578484846122c9565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610d9e6120ff565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1490613c80565b60405180910390fd5b610e3185610e296120ff565b858403612106565b60019150509392505050565b61dead81565b5f6012905090565b5f610ee8610e576120ff565b848460015f610e646120ff565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610ee39190613c9e565b612106565b6001905092915050565b60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5f9054906101000a900460ff1681565b5f60155f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b610f836120ff565b73ffffffffffffffffffffffffffffffffffffffff16610fa1611588565b73ffffffffffffffffffffffffffffffffffffffff1614610ff7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fee90613b13565b60405180910390fd5b5f61100130611295565b90505f8111156110155761101481612d97565b5b5f4790505f8111156110ec575f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161106790613cfe565b5f6040518083038185875af1925050503d805f81146110a1576040519150601f19603f3d011682016040523d82523d5f602084013e6110a6565b606091505b50509050806110ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e190613d5c565b60405180910390fd5b505b5050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f61111e6120ff565b73ffffffffffffffffffffffffffffffffffffffff1661113c611588565b73ffffffffffffffffffffffffffffffffffffffff1614611192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118990613b13565b60405180910390fd5b5f600f5f6101000a81548160ff02191690831515021790555082601181905550816010819055506001905092915050565b6111cb6120ff565b73ffffffffffffffffffffffffffffffffffffffff166111e9611588565b73ffffffffffffffffffffffffffffffffffffffff161461123f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123690613b13565b60405180910390fd5b8060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6112e26120ff565b73ffffffffffffffffffffffffffffffffffffffff16611300611588565b73ffffffffffffffffffffffffffffffffffffffff1614611356576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134d90613b13565b60405180910390fd5b61135f5f612fcd565b565b6113696120ff565b73ffffffffffffffffffffffffffffffffffffffff16611387611588565b73ffffffffffffffffffffffffffffffffffffffff16146113dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d490613b13565b60405180910390fd5b80600f5f6101000a81548160ff02191690831515021790555050565b6114016120ff565b73ffffffffffffffffffffffffffffffffffffffff1661141f611588565b73ffffffffffffffffffffffffffffffffffffffff1614611475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146c90613b13565b60405180910390fd5b8060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6114d56120ff565b73ffffffffffffffffffffffffffffffffffffffff166114f3611588565b73ffffffffffffffffffffffffffffffffffffffff1614611549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154090613b13565b60405180910390fd5b6001600f60016101000a81548160ff0219169083151502179055506001600f60026101000a81548160ff02191690831515021790555043601281905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6115b86120ff565b73ffffffffffffffffffffffffffffffffffffffff166115d6611588565b73ffffffffffffffffffffffffffffffffffffffff161461162c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162390613b13565b60405180910390fd5b80600f60026101000a81548160ff02191690831515021790555050565b60606004805461165890613be0565b80601f016020809104026020016040519081016040528092919081815260200182805461168490613be0565b80156116cf5780601f106116a6576101008083540402835291602001916116cf565b820191905f5260205f20905b8154815290600101906020018083116116b257829003601f168201915b5050505050905090565b6116e16120ff565b73ffffffffffffffffffffffffffffffffffffffff166116ff611588565b73ffffffffffffffffffffffffffffffffffffffff1614611755576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174c90613b13565b60405180910390fd5b60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117db90613dea565b60405180910390fd5b6117ee8282613090565b5050565b6117fa6120ff565b73ffffffffffffffffffffffffffffffffffffffff16611818611588565b73ffffffffffffffffffffffffffffffffffffffff161461186e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186590613b13565b60405180910390fd5b80600d8190555050565b5f8060015f6118856120ff565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508281101561193f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193690613e78565b60405180910390fd5b61195361194a6120ff565b85858403612106565b600191505092915050565b5f61197161196a6120ff565b84846122c9565b6001905092915050565b6017602052805f5260405f205f915054906101000a900460ff1681565b600f60019054906101000a900460ff1681565b6119b36120ff565b73ffffffffffffffffffffffffffffffffffffffff166119d1611588565b73ffffffffffffffffffffffffffffffffffffffff1614611a27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1e90613b13565b60405180910390fd5b5f5b81518160ff161015611ab9575f60185f848460ff1681518110611a4f57611a4e613b31565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080611ab190613b8b565b915050611a29565b5050565b611ac56120ff565b73ffffffffffffffffffffffffffffffffffffffff16611ae3611588565b73ffffffffffffffffffffffffffffffffffffffff1614611b39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3090613b13565b60405180910390fd5b8060155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b600c5481565b60125481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60115481565b600d5481565b60105481565b611c396120ff565b73ffffffffffffffffffffffffffffffffffffffff16611c57611588565b73ffffffffffffffffffffffffffffffffffffffff1614611cad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca490613b13565b60405180910390fd5b5f737a250d5630b4cf539739df2c5dacb4c659f2488d90508060135f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611d108160016113f9565b611d443060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611d3f30611295565b612106565b8073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d8d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611db19190613eaa565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e16573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e3a9190613eaa565b6040518363ffffffff1660e01b8152600401611e57929190613ed5565b6020604051808303815f875af1158015611e73573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e979190613eaa565b60145f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611f0260145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016113f9565b611f2e60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001613090565b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7193430611f7630611295565b5f80611f80611588565b426040518863ffffffff1660e01b8152600401611fa296959493929190613f35565b60606040518083038185885af1158015611fbe573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611fe39190613fa8565b5050506001600f5f6101000a81548160ff02191690831515021790555050565b61200b6120ff565b73ffffffffffffffffffffffffffffffffffffffff16612029611588565b73ffffffffffffffffffffffffffffffffffffffff161461207f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207690613b13565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036120ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e490614068565b60405180910390fd5b6120f681612fcd565b50565b600e5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612174576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216b906140f6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d990614184565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516122bc91906138f5565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612337576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232e90614212565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239c906142a0565b60405180910390fd5b60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612443575060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b612482576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247990614308565b60405180910390fd5b5f81036124995761249483835f6130e8565b612d92565b600f5f9054906101000a900460ff161561297d576124b5611588565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561252357506124f3611588565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561255b57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612595575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125ae5750600660149054906101000a900460ff16155b1561297c57600f60019054906101000a900460ff166126a25760155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612662575060155f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6126a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269890614370565b60405180910390fd5b5b60175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561273f575060165f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156127e657600c54811115612789576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612780906143fe565b60405180910390fd5b600e5461279583611295565b826127a09190613c9e565b11156127e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d890614466565b60405180910390fd5b61297b565b60175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612883575060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156128d257600c548111156128cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c4906144f4565b60405180910390fd5b61297a565b60165f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661297957600e5461292c83611295565b826129379190613c9e565b1115612978576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296f90614466565b60405180910390fd5b5b5b5b5b5b5f61298730611295565b90505f600d5482101590508080156129ab5750600f60029054906101000a900460ff165b80156129c45750600660149054906101000a900460ff16155b8015612a17575060175f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612a6a575060155f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612abd575060155f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612b00576001600660146101000a81548160ff021916908315150217905550612ae561335d565b5f600660146101000a81548160ff0219169083151502179055505b5f600660149054906101000a900460ff1615905060155f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612baf575060155f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612bb8575f90505b5f8115612d825760175f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612c1657505f601154115b15612c4b57612c446103e8612c36601154886134a890919063ffffffff16565b6134bd90919063ffffffff16565b9050612d5f565b60175f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612ca257505f601054115b15612d5e575f60125443612cb69190614512565b03612ceb57612ce46103e8612cd66103de886134a890919063ffffffff16565b6134bd90919063ffffffff16565b9050612d5d565b600f60125443612cfb9190614512565b11612d3057612d296103e8612d1b6103de886134a890919063ffffffff16565b6134bd90919063ffffffff16565b9050612d5c565b612d596103e8612d4b601054886134a890919063ffffffff16565b6134bd90919063ffffffff16565b90505b5b5b5b5f811115612d7357612d728730836130e8565b5b8085612d7f9190614512565b94505b612d8d8787876130e8565b505050505b505050565b5f600267ffffffffffffffff811115612db357612db2613501565b5b604051908082528060200260200182016040528015612de15781602001602082028036833780820191505090505b50905030815f81518110612df857612df7613b31565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e9c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ec09190613eaa565b81600181518110612ed457612ed3613b31565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612f3a3060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612106565b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401612f9c9594939291906145fc565b5f604051808303815f87803b158015612fb3575f80fd5b505af1158015612fc5573d5f803e3d5ffd5b505050505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314d90614212565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036131c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131bb906142a0565b60405180910390fd5b6131cf8383836134d2565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613252576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613249906146c4565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546132e09190613c9e565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161334491906138f5565b60405180910390a36133578484846134d7565b50505050565b5f61336730611295565b90505f810361337657506134a6565b600d5481106134a4575f600d54905061338e81612d97565b5f4790505f811115613465575f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516133e090613cfe565b5f6040518083038185875af1925050503d805f811461341a576040519150601f19603f3d011682016040523d82523d5f602084013e61341f565b606091505b5050905080613463576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161345a90613d5c565b60405180910390fd5b505b7fe9f689eb4d290dd3a40869ea626055ee4a55d40f20286208d04ef55f39254cff82826001604051613499939291906146e2565b60405180910390a150505b505b565b5f81836134b59190614717565b905092915050565b5f81836134ca9190614785565b905092915050565b505050565b505050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b613537826134f1565b810181811067ffffffffffffffff8211171561355657613555613501565b5b80604052505050565b5f6135686134dc565b9050613574828261352e565b919050565b5f67ffffffffffffffff82111561359357613592613501565b5b602082029050602081019050919050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6135d1826135a8565b9050919050565b6135e1816135c7565b81146135eb575f80fd5b50565b5f813590506135fc816135d8565b92915050565b5f61361461360f84613579565b61355f565b90508083825260208201905060208402830185811115613637576136366135a4565b5b835b81811015613660578061364c88826135ee565b845260208401935050602081019050613639565b5050509392505050565b5f82601f83011261367e5761367d6134ed565b5b813561368e848260208601613602565b91505092915050565b5f602082840312156136ac576136ab6134e5565b5b5f82013567ffffffffffffffff8111156136c9576136c86134e9565b5b6136d58482850161366a565b91505092915050565b5f819050919050565b6136f0816136de565b81146136fa575f80fd5b50565b5f8135905061370b816136e7565b92915050565b5f60208284031215613726576137256134e5565b5b5f613733848285016136fd565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613773578082015181840152602081019050613758565b5f8484015250505050565b5f6137888261373c565b6137928185613746565b93506137a2818560208601613756565b6137ab816134f1565b840191505092915050565b5f6020820190508181035f8301526137ce818461377e565b905092915050565b5f80604083850312156137ec576137eb6134e5565b5b5f6137f9858286016135ee565b925050602061380a858286016136fd565b9150509250929050565b5f8115159050919050565b61382881613814565b82525050565b5f6020820190506138415f83018461381f565b92915050565b5f6020828403121561385c5761385b6134e5565b5b5f613869848285016135ee565b91505092915050565b5f819050919050565b5f61389561389061388b846135a8565b613872565b6135a8565b9050919050565b5f6138a68261387b565b9050919050565b5f6138b78261389c565b9050919050565b6138c7816138ad565b82525050565b5f6020820190506138e05f8301846138be565b92915050565b6138ef816136de565b82525050565b5f6020820190506139085f8301846138e6565b92915050565b5f805f60608486031215613925576139246134e5565b5b5f613932868287016135ee565b9350506020613943868287016135ee565b9250506040613954868287016136fd565b9150509250925092565b613967816135c7565b82525050565b5f6020820190506139805f83018461395e565b92915050565b5f60ff82169050919050565b61399b81613986565b82525050565b5f6020820190506139b45f830184613992565b92915050565b5f80604083850312156139d0576139cf6134e5565b5b5f6139dd858286016136fd565b92505060206139ee858286016136fd565b9150509250929050565b613a0181613814565b8114613a0b575f80fd5b50565b5f81359050613a1c816139f8565b92915050565b5f60208284031215613a3757613a366134e5565b5b5f613a4484828501613a0e565b91505092915050565b5f8060408385031215613a6357613a626134e5565b5b5f613a70858286016135ee565b9250506020613a8185828601613a0e565b9150509250929050565b5f8060408385031215613aa157613aa06134e5565b5b5f613aae858286016135ee565b9250506020613abf858286016135ee565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613afd602083613746565b9150613b0882613ac9565b602082019050919050565b5f6020820190508181035f830152613b2a81613af1565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613b9582613986565b915060ff8203613ba857613ba7613b5e565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613bf757607f821691505b602082108103613c0a57613c09613bb3565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f613c6a602883613746565b9150613c7582613c10565b604082019050919050565b5f6020820190508181035f830152613c9781613c5e565b9050919050565b5f613ca8826136de565b9150613cb3836136de565b9250828201905080821115613ccb57613cca613b5e565b5b92915050565b5f81905092915050565b50565b5f613ce95f83613cd1565b9150613cf482613cdb565b5f82019050919050565b5f613d0882613cde565b9150819050919050565b7f756e61626c6520746f20747266000000000000000000000000000000000000005f82015250565b5f613d46600d83613746565b9150613d5182613d12565b602082019050919050565b5f6020820190508181035f830152613d7381613d3a565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613dd4603983613746565b9150613ddf82613d7a565b604082019050919050565b5f6020820190508181035f830152613e0181613dc8565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613e62602583613746565b9150613e6d82613e08565b604082019050919050565b5f6020820190508181035f830152613e8f81613e56565b9050919050565b5f81519050613ea4816135d8565b92915050565b5f60208284031215613ebf57613ebe6134e5565b5b5f613ecc84828501613e96565b91505092915050565b5f604082019050613ee85f83018561395e565b613ef5602083018461395e565b9392505050565b5f819050919050565b5f613f1f613f1a613f1584613efc565b613872565b6136de565b9050919050565b613f2f81613f05565b82525050565b5f60c082019050613f485f83018961395e565b613f5560208301886138e6565b613f626040830187613f26565b613f6f6060830186613f26565b613f7c608083018561395e565b613f8960a08301846138e6565b979650505050505050565b5f81519050613fa2816136e7565b92915050565b5f805f60608486031215613fbf57613fbe6134e5565b5b5f613fcc86828701613f94565b9350506020613fdd86828701613f94565b9250506040613fee86828701613f94565b9150509250925092565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614052602683613746565b915061405d82613ff8565b604082019050919050565b5f6020820190508181035f83015261407f81614046565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6140e0602483613746565b91506140eb82614086565b604082019050919050565b5f6020820190508181035f83015261410d816140d4565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61416e602283613746565b915061417982614114565b604082019050919050565b5f6020820190508181035f83015261419b81614162565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6141fc602583613746565b9150614207826141a2565b604082019050919050565b5f6020820190508181035f830152614229816141f0565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61428a602383613746565b915061429582614230565b604082019050919050565b5f6020820190508181035f8301526142b78161427e565b9050919050565b7f426c61636b6c69737465640000000000000000000000000000000000000000005f82015250565b5f6142f2600b83613746565b91506142fd826142be565b602082019050919050565b5f6020820190508181035f83015261431f816142e6565b9050919050565b7f54726164696e67206973206e6f7420656e61626c6564207965742e00000000005f82015250565b5f61435a601b83613746565b915061436582614326565b602082019050919050565b5f6020820190508181035f8301526143878161434e565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f6143e8603583613746565b91506143f38261438e565b604082019050919050565b5f6020820190508181035f830152614415816143dc565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614450601383613746565b915061445b8261441c565b602082019050919050565b5f6020820190508181035f83015261447d81614444565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f6144de603683613746565b91506144e982614484565b604082019050919050565b5f6020820190508181035f83015261450b816144d2565b9050919050565b5f61451c826136de565b9150614527836136de565b925082820390508181111561453f5761453e613b5e565b5b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614577816135c7565b82525050565b5f614588838361456e565b60208301905092915050565b5f602082019050919050565b5f6145aa82614545565b6145b4818561454f565b93506145bf8361455f565b805f5b838110156145ef5781516145d6888261457d565b97506145e183614594565b9250506001810190506145c2565b5085935050505092915050565b5f60a08201905061460f5f8301886138e6565b61461c6020830187613f26565b818103604083015261462e81866145a0565b905061463d606083018561395e565b61464a60808301846138e6565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6146ae602683613746565b91506146b982614654565b604082019050919050565b5f6020820190508181035f8301526146db816146a2565b9050919050565b5f6060820190506146f55f8301866138e6565b61470260208301856138e6565b61470f604083018461381f565b949350505050565b5f614721826136de565b915061472c836136de565b925082820261473a816136de565b9150828204841483151761475157614750613b5e565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61478f826136de565b915061479a836136de565b9250826147aa576147a9614758565b5b82820490509291505056fea2646970667358221220da338839468394b69488603ce27af2c826f994db3c38b1233342cf3d8546c07564736f6c63430008160033

Deployed Bytecode

0x608060405260043610610275575f3560e01c806374326f531161014e578063bbc0c742116100c0578063e0f3ccf511610079578063e0f3ccf51461095a578063e2f4560514610984578063e4748b9e146109ae578063e8078d94146109d8578063f2fde38b146109e2578063f8b45b0514610a0a5761027c565b8063bbc0c74214610850578063bfab65351461087a578063c0246668146108a2578063c8c8ebe4146108ca578063d00efb2f146108f4578063dd62ed3e1461091e5761027c565b806395d89b411161011257806395d89b41146107225780639a7a23d61461074c5780639bed058914610774578063a457c2d71461079c578063a9059cbb146107d8578063b62496f5146108145761027c565b806374326f531461066a5780637571336a146106925780638a8c523c146106ba5780638da5cb5b146106d0578063924de9b7146106fa5761027c565b806339509351116101e757806359927044116101ab578063599270441461056057806359bd962a1461058a57806366718524146105c65780636ddd1713146105ee57806370a0823114610618578063715018a6146106545761027c565b8063395093511461047e57806349bd5a5e146104ba5780634a62bb65146104e45780634fbee1931461050e57806351bc3c851461054a5761027c565b80631694505e116102395780631694505e1461037257806318160ddd1461039c5780631c499ab0146103c657806323b872dd146103ee57806327c8f8351461042a578063313ce567146104545761027c565b8063041f173f146102805780630517d13d146102a857806306fdde03146102d0578063095ea7b3146102fa57806310d5de53146103365761027c565b3661027c57005b5f80fd5b34801561028b575f80fd5b506102a660048036038101906102a19190613697565b610a34565b005b3480156102b3575f80fd5b506102ce60048036038101906102c99190613711565b610b47565b005b3480156102db575f80fd5b506102e4610bcd565b6040516102f191906137b6565b60405180910390f35b348015610305575f80fd5b50610320600480360381019061031b91906137d6565b610c5d565b60405161032d919061382e565b60405180910390f35b348015610341575f80fd5b5061035c60048036038101906103579190613847565b610c7a565b604051610369919061382e565b60405180910390f35b34801561037d575f80fd5b50610386610c97565b60405161039391906138cd565b60405180910390f35b3480156103a7575f80fd5b506103b0610cbc565b6040516103bd91906138f5565b60405180910390f35b3480156103d1575f80fd5b506103ec60048036038101906103e79190613711565b610cc5565b005b3480156103f9575f80fd5b50610414600480360381019061040f919061390e565b610d4b565b604051610421919061382e565b60405180910390f35b348015610435575f80fd5b5061043e610e3d565b60405161044b919061396d565b60405180910390f35b34801561045f575f80fd5b50610468610e43565b60405161047591906139a1565b60405180910390f35b348015610489575f80fd5b506104a4600480360381019061049f91906137d6565b610e4b565b6040516104b1919061382e565b60405180910390f35b3480156104c5575f80fd5b506104ce610ef2565b6040516104db919061396d565b60405180910390f35b3480156104ef575f80fd5b506104f8610f17565b604051610505919061382e565b60405180910390f35b348015610519575f80fd5b50610534600480360381019061052f9190613847565b610f29565b604051610541919061382e565b60405180910390f35b348015610555575f80fd5b5061055e610f7b565b005b34801561056b575f80fd5b506105746110f0565b604051610581919061396d565b60405180910390f35b348015610595575f80fd5b506105b060048036038101906105ab91906139ba565b611115565b6040516105bd919061382e565b60405180910390f35b3480156105d1575f80fd5b506105ec60048036038101906105e79190613847565b6111c3565b005b3480156105f9575f80fd5b50610602611282565b60405161060f919061382e565b60405180910390f35b348015610623575f80fd5b5061063e60048036038101906106399190613847565b611295565b60405161064b91906138f5565b60405180910390f35b34801561065f575f80fd5b506106686112da565b005b348015610675575f80fd5b50610690600480360381019061068b9190613a22565b611361565b005b34801561069d575f80fd5b506106b860048036038101906106b39190613a4d565b6113f9565b005b3480156106c5575f80fd5b506106ce6114cd565b005b3480156106db575f80fd5b506106e4611588565b6040516106f1919061396d565b60405180910390f35b348015610705575f80fd5b50610720600480360381019061071b9190613a22565b6115b0565b005b34801561072d575f80fd5b50610736611649565b60405161074391906137b6565b60405180910390f35b348015610757575f80fd5b50610772600480360381019061076d9190613a4d565b6116d9565b005b34801561077f575f80fd5b5061079a60048036038101906107959190613711565b6117f2565b005b3480156107a7575f80fd5b506107c260048036038101906107bd91906137d6565b611878565b6040516107cf919061382e565b60405180910390f35b3480156107e3575f80fd5b506107fe60048036038101906107f991906137d6565b61195e565b60405161080b919061382e565b60405180910390f35b34801561081f575f80fd5b5061083a60048036038101906108359190613847565b61197b565b604051610847919061382e565b60405180910390f35b34801561085b575f80fd5b50610864611998565b604051610871919061382e565b60405180910390f35b348015610885575f80fd5b506108a0600480360381019061089b9190613697565b6119ab565b005b3480156108ad575f80fd5b506108c860048036038101906108c39190613a4d565b611abd565b005b3480156108d5575f80fd5b506108de611b91565b6040516108eb91906138f5565b60405180910390f35b3480156108ff575f80fd5b50610908611b97565b60405161091591906138f5565b60405180910390f35b348015610929575f80fd5b50610944600480360381019061093f9190613a8b565b611b9d565b60405161095191906138f5565b60405180910390f35b348015610965575f80fd5b5061096e611c1f565b60405161097b91906138f5565b60405180910390f35b34801561098f575f80fd5b50610998611c25565b6040516109a591906138f5565b60405180910390f35b3480156109b9575f80fd5b506109c2611c2b565b6040516109cf91906138f5565b60405180910390f35b6109e0611c31565b005b3480156109ed575f80fd5b50610a086004803603810190610a039190613847565b612003565b005b348015610a15575f80fd5b50610a1e6120f9565b604051610a2b91906138f5565b60405180910390f35b610a3c6120ff565b73ffffffffffffffffffffffffffffffffffffffff16610a5a611588565b73ffffffffffffffffffffffffffffffffffffffff1614610ab0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa790613b13565b60405180910390fd5b5f5b81518160ff161015610b4357600160185f848460ff1681518110610ad957610ad8613b31565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080610b3b90613b8b565b915050610ab2565b5050565b610b4f6120ff565b73ffffffffffffffffffffffffffffffffffffffff16610b6d611588565b73ffffffffffffffffffffffffffffffffffffffff1614610bc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bba90613b13565b60405180910390fd5b80600c8190555050565b606060038054610bdc90613be0565b80601f0160208091040260200160405190810160405280929190818152602001828054610c0890613be0565b8015610c535780601f10610c2a57610100808354040283529160200191610c53565b820191905f5260205f20905b815481529060010190602001808311610c3657829003601f168201915b5050505050905090565b5f610c70610c696120ff565b8484612106565b6001905092915050565b6016602052805f5260405f205f915054906101000a900460ff1681565b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600254905090565b610ccd6120ff565b73ffffffffffffffffffffffffffffffffffffffff16610ceb611588565b73ffffffffffffffffffffffffffffffffffffffff1614610d41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3890613b13565b60405180910390fd5b80600e8190555050565b5f610d578484846122c9565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610d9e6120ff565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1490613c80565b60405180910390fd5b610e3185610e296120ff565b858403612106565b60019150509392505050565b61dead81565b5f6012905090565b5f610ee8610e576120ff565b848460015f610e646120ff565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610ee39190613c9e565b612106565b6001905092915050565b60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5f9054906101000a900460ff1681565b5f60155f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b610f836120ff565b73ffffffffffffffffffffffffffffffffffffffff16610fa1611588565b73ffffffffffffffffffffffffffffffffffffffff1614610ff7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fee90613b13565b60405180910390fd5b5f61100130611295565b90505f8111156110155761101481612d97565b5b5f4790505f8111156110ec575f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161106790613cfe565b5f6040518083038185875af1925050503d805f81146110a1576040519150601f19603f3d011682016040523d82523d5f602084013e6110a6565b606091505b50509050806110ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e190613d5c565b60405180910390fd5b505b5050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f61111e6120ff565b73ffffffffffffffffffffffffffffffffffffffff1661113c611588565b73ffffffffffffffffffffffffffffffffffffffff1614611192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118990613b13565b60405180910390fd5b5f600f5f6101000a81548160ff02191690831515021790555082601181905550816010819055506001905092915050565b6111cb6120ff565b73ffffffffffffffffffffffffffffffffffffffff166111e9611588565b73ffffffffffffffffffffffffffffffffffffffff161461123f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123690613b13565b60405180910390fd5b8060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6112e26120ff565b73ffffffffffffffffffffffffffffffffffffffff16611300611588565b73ffffffffffffffffffffffffffffffffffffffff1614611356576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134d90613b13565b60405180910390fd5b61135f5f612fcd565b565b6113696120ff565b73ffffffffffffffffffffffffffffffffffffffff16611387611588565b73ffffffffffffffffffffffffffffffffffffffff16146113dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d490613b13565b60405180910390fd5b80600f5f6101000a81548160ff02191690831515021790555050565b6114016120ff565b73ffffffffffffffffffffffffffffffffffffffff1661141f611588565b73ffffffffffffffffffffffffffffffffffffffff1614611475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146c90613b13565b60405180910390fd5b8060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6114d56120ff565b73ffffffffffffffffffffffffffffffffffffffff166114f3611588565b73ffffffffffffffffffffffffffffffffffffffff1614611549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154090613b13565b60405180910390fd5b6001600f60016101000a81548160ff0219169083151502179055506001600f60026101000a81548160ff02191690831515021790555043601281905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6115b86120ff565b73ffffffffffffffffffffffffffffffffffffffff166115d6611588565b73ffffffffffffffffffffffffffffffffffffffff161461162c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162390613b13565b60405180910390fd5b80600f60026101000a81548160ff02191690831515021790555050565b60606004805461165890613be0565b80601f016020809104026020016040519081016040528092919081815260200182805461168490613be0565b80156116cf5780601f106116a6576101008083540402835291602001916116cf565b820191905f5260205f20905b8154815290600101906020018083116116b257829003601f168201915b5050505050905090565b6116e16120ff565b73ffffffffffffffffffffffffffffffffffffffff166116ff611588565b73ffffffffffffffffffffffffffffffffffffffff1614611755576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174c90613b13565b60405180910390fd5b60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117db90613dea565b60405180910390fd5b6117ee8282613090565b5050565b6117fa6120ff565b73ffffffffffffffffffffffffffffffffffffffff16611818611588565b73ffffffffffffffffffffffffffffffffffffffff161461186e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186590613b13565b60405180910390fd5b80600d8190555050565b5f8060015f6118856120ff565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508281101561193f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193690613e78565b60405180910390fd5b61195361194a6120ff565b85858403612106565b600191505092915050565b5f61197161196a6120ff565b84846122c9565b6001905092915050565b6017602052805f5260405f205f915054906101000a900460ff1681565b600f60019054906101000a900460ff1681565b6119b36120ff565b73ffffffffffffffffffffffffffffffffffffffff166119d1611588565b73ffffffffffffffffffffffffffffffffffffffff1614611a27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1e90613b13565b60405180910390fd5b5f5b81518160ff161015611ab9575f60185f848460ff1681518110611a4f57611a4e613b31565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080611ab190613b8b565b915050611a29565b5050565b611ac56120ff565b73ffffffffffffffffffffffffffffffffffffffff16611ae3611588565b73ffffffffffffffffffffffffffffffffffffffff1614611b39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3090613b13565b60405180910390fd5b8060155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b600c5481565b60125481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60115481565b600d5481565b60105481565b611c396120ff565b73ffffffffffffffffffffffffffffffffffffffff16611c57611588565b73ffffffffffffffffffffffffffffffffffffffff1614611cad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca490613b13565b60405180910390fd5b5f737a250d5630b4cf539739df2c5dacb4c659f2488d90508060135f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611d108160016113f9565b611d443060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611d3f30611295565b612106565b8073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d8d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611db19190613eaa565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e16573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e3a9190613eaa565b6040518363ffffffff1660e01b8152600401611e57929190613ed5565b6020604051808303815f875af1158015611e73573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e979190613eaa565b60145f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611f0260145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016113f9565b611f2e60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001613090565b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7193430611f7630611295565b5f80611f80611588565b426040518863ffffffff1660e01b8152600401611fa296959493929190613f35565b60606040518083038185885af1158015611fbe573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611fe39190613fa8565b5050506001600f5f6101000a81548160ff02191690831515021790555050565b61200b6120ff565b73ffffffffffffffffffffffffffffffffffffffff16612029611588565b73ffffffffffffffffffffffffffffffffffffffff161461207f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207690613b13565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036120ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e490614068565b60405180910390fd5b6120f681612fcd565b50565b600e5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612174576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216b906140f6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d990614184565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516122bc91906138f5565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612337576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232e90614212565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239c906142a0565b60405180910390fd5b60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612443575060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b612482576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247990614308565b60405180910390fd5b5f81036124995761249483835f6130e8565b612d92565b600f5f9054906101000a900460ff161561297d576124b5611588565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561252357506124f3611588565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561255b57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612595575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125ae5750600660149054906101000a900460ff16155b1561297c57600f60019054906101000a900460ff166126a25760155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612662575060155f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6126a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269890614370565b60405180910390fd5b5b60175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561273f575060165f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156127e657600c54811115612789576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612780906143fe565b60405180910390fd5b600e5461279583611295565b826127a09190613c9e565b11156127e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d890614466565b60405180910390fd5b61297b565b60175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612883575060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156128d257600c548111156128cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c4906144f4565b60405180910390fd5b61297a565b60165f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661297957600e5461292c83611295565b826129379190613c9e565b1115612978576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296f90614466565b60405180910390fd5b5b5b5b5b5b5f61298730611295565b90505f600d5482101590508080156129ab5750600f60029054906101000a900460ff165b80156129c45750600660149054906101000a900460ff16155b8015612a17575060175f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612a6a575060155f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612abd575060155f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612b00576001600660146101000a81548160ff021916908315150217905550612ae561335d565b5f600660146101000a81548160ff0219169083151502179055505b5f600660149054906101000a900460ff1615905060155f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612baf575060155f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612bb8575f90505b5f8115612d825760175f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612c1657505f601154115b15612c4b57612c446103e8612c36601154886134a890919063ffffffff16565b6134bd90919063ffffffff16565b9050612d5f565b60175f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612ca257505f601054115b15612d5e575f60125443612cb69190614512565b03612ceb57612ce46103e8612cd66103de886134a890919063ffffffff16565b6134bd90919063ffffffff16565b9050612d5d565b600f60125443612cfb9190614512565b11612d3057612d296103e8612d1b6103de886134a890919063ffffffff16565b6134bd90919063ffffffff16565b9050612d5c565b612d596103e8612d4b601054886134a890919063ffffffff16565b6134bd90919063ffffffff16565b90505b5b5b5b5f811115612d7357612d728730836130e8565b5b8085612d7f9190614512565b94505b612d8d8787876130e8565b505050505b505050565b5f600267ffffffffffffffff811115612db357612db2613501565b5b604051908082528060200260200182016040528015612de15781602001602082028036833780820191505090505b50905030815f81518110612df857612df7613b31565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e9c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ec09190613eaa565b81600181518110612ed457612ed3613b31565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612f3a3060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612106565b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401612f9c9594939291906145fc565b5f604051808303815f87803b158015612fb3575f80fd5b505af1158015612fc5573d5f803e3d5ffd5b505050505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314d90614212565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036131c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131bb906142a0565b60405180910390fd5b6131cf8383836134d2565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613252576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613249906146c4565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546132e09190613c9e565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161334491906138f5565b60405180910390a36133578484846134d7565b50505050565b5f61336730611295565b90505f810361337657506134a6565b600d5481106134a4575f600d54905061338e81612d97565b5f4790505f811115613465575f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516133e090613cfe565b5f6040518083038185875af1925050503d805f811461341a576040519150601f19603f3d011682016040523d82523d5f602084013e61341f565b606091505b5050905080613463576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161345a90613d5c565b60405180910390fd5b505b7fe9f689eb4d290dd3a40869ea626055ee4a55d40f20286208d04ef55f39254cff82826001604051613499939291906146e2565b60405180910390a150505b505b565b5f81836134b59190614717565b905092915050565b5f81836134ca9190614785565b905092915050565b505050565b505050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b613537826134f1565b810181811067ffffffffffffffff8211171561355657613555613501565b5b80604052505050565b5f6135686134dc565b9050613574828261352e565b919050565b5f67ffffffffffffffff82111561359357613592613501565b5b602082029050602081019050919050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6135d1826135a8565b9050919050565b6135e1816135c7565b81146135eb575f80fd5b50565b5f813590506135fc816135d8565b92915050565b5f61361461360f84613579565b61355f565b90508083825260208201905060208402830185811115613637576136366135a4565b5b835b81811015613660578061364c88826135ee565b845260208401935050602081019050613639565b5050509392505050565b5f82601f83011261367e5761367d6134ed565b5b813561368e848260208601613602565b91505092915050565b5f602082840312156136ac576136ab6134e5565b5b5f82013567ffffffffffffffff8111156136c9576136c86134e9565b5b6136d58482850161366a565b91505092915050565b5f819050919050565b6136f0816136de565b81146136fa575f80fd5b50565b5f8135905061370b816136e7565b92915050565b5f60208284031215613726576137256134e5565b5b5f613733848285016136fd565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613773578082015181840152602081019050613758565b5f8484015250505050565b5f6137888261373c565b6137928185613746565b93506137a2818560208601613756565b6137ab816134f1565b840191505092915050565b5f6020820190508181035f8301526137ce818461377e565b905092915050565b5f80604083850312156137ec576137eb6134e5565b5b5f6137f9858286016135ee565b925050602061380a858286016136fd565b9150509250929050565b5f8115159050919050565b61382881613814565b82525050565b5f6020820190506138415f83018461381f565b92915050565b5f6020828403121561385c5761385b6134e5565b5b5f613869848285016135ee565b91505092915050565b5f819050919050565b5f61389561389061388b846135a8565b613872565b6135a8565b9050919050565b5f6138a68261387b565b9050919050565b5f6138b78261389c565b9050919050565b6138c7816138ad565b82525050565b5f6020820190506138e05f8301846138be565b92915050565b6138ef816136de565b82525050565b5f6020820190506139085f8301846138e6565b92915050565b5f805f60608486031215613925576139246134e5565b5b5f613932868287016135ee565b9350506020613943868287016135ee565b9250506040613954868287016136fd565b9150509250925092565b613967816135c7565b82525050565b5f6020820190506139805f83018461395e565b92915050565b5f60ff82169050919050565b61399b81613986565b82525050565b5f6020820190506139b45f830184613992565b92915050565b5f80604083850312156139d0576139cf6134e5565b5b5f6139dd858286016136fd565b92505060206139ee858286016136fd565b9150509250929050565b613a0181613814565b8114613a0b575f80fd5b50565b5f81359050613a1c816139f8565b92915050565b5f60208284031215613a3757613a366134e5565b5b5f613a4484828501613a0e565b91505092915050565b5f8060408385031215613a6357613a626134e5565b5b5f613a70858286016135ee565b9250506020613a8185828601613a0e565b9150509250929050565b5f8060408385031215613aa157613aa06134e5565b5b5f613aae858286016135ee565b9250506020613abf858286016135ee565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613afd602083613746565b9150613b0882613ac9565b602082019050919050565b5f6020820190508181035f830152613b2a81613af1565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613b9582613986565b915060ff8203613ba857613ba7613b5e565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613bf757607f821691505b602082108103613c0a57613c09613bb3565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f613c6a602883613746565b9150613c7582613c10565b604082019050919050565b5f6020820190508181035f830152613c9781613c5e565b9050919050565b5f613ca8826136de565b9150613cb3836136de565b9250828201905080821115613ccb57613cca613b5e565b5b92915050565b5f81905092915050565b50565b5f613ce95f83613cd1565b9150613cf482613cdb565b5f82019050919050565b5f613d0882613cde565b9150819050919050565b7f756e61626c6520746f20747266000000000000000000000000000000000000005f82015250565b5f613d46600d83613746565b9150613d5182613d12565b602082019050919050565b5f6020820190508181035f830152613d7381613d3a565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613dd4603983613746565b9150613ddf82613d7a565b604082019050919050565b5f6020820190508181035f830152613e0181613dc8565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613e62602583613746565b9150613e6d82613e08565b604082019050919050565b5f6020820190508181035f830152613e8f81613e56565b9050919050565b5f81519050613ea4816135d8565b92915050565b5f60208284031215613ebf57613ebe6134e5565b5b5f613ecc84828501613e96565b91505092915050565b5f604082019050613ee85f83018561395e565b613ef5602083018461395e565b9392505050565b5f819050919050565b5f613f1f613f1a613f1584613efc565b613872565b6136de565b9050919050565b613f2f81613f05565b82525050565b5f60c082019050613f485f83018961395e565b613f5560208301886138e6565b613f626040830187613f26565b613f6f6060830186613f26565b613f7c608083018561395e565b613f8960a08301846138e6565b979650505050505050565b5f81519050613fa2816136e7565b92915050565b5f805f60608486031215613fbf57613fbe6134e5565b5b5f613fcc86828701613f94565b9350506020613fdd86828701613f94565b9250506040613fee86828701613f94565b9150509250925092565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614052602683613746565b915061405d82613ff8565b604082019050919050565b5f6020820190508181035f83015261407f81614046565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6140e0602483613746565b91506140eb82614086565b604082019050919050565b5f6020820190508181035f83015261410d816140d4565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61416e602283613746565b915061417982614114565b604082019050919050565b5f6020820190508181035f83015261419b81614162565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6141fc602583613746565b9150614207826141a2565b604082019050919050565b5f6020820190508181035f830152614229816141f0565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61428a602383613746565b915061429582614230565b604082019050919050565b5f6020820190508181035f8301526142b78161427e565b9050919050565b7f426c61636b6c69737465640000000000000000000000000000000000000000005f82015250565b5f6142f2600b83613746565b91506142fd826142be565b602082019050919050565b5f6020820190508181035f83015261431f816142e6565b9050919050565b7f54726164696e67206973206e6f7420656e61626c6564207965742e00000000005f82015250565b5f61435a601b83613746565b915061436582614326565b602082019050919050565b5f6020820190508181035f8301526143878161434e565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f6143e8603583613746565b91506143f38261438e565b604082019050919050565b5f6020820190508181035f830152614415816143dc565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614450601383613746565b915061445b8261441c565b602082019050919050565b5f6020820190508181035f83015261447d81614444565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f6144de603683613746565b91506144e982614484565b604082019050919050565b5f6020820190508181035f83015261450b816144d2565b9050919050565b5f61451c826136de565b9150614527836136de565b925082820390508181111561453f5761453e613b5e565b5b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614577816135c7565b82525050565b5f614588838361456e565b60208301905092915050565b5f602082019050919050565b5f6145aa82614545565b6145b4818561454f565b93506145bf8361455f565b805f5b838110156145ef5781516145d6888261457d565b97506145e183614594565b9250506001810190506145c2565b5085935050505092915050565b5f60a08201905061460f5f8301886138e6565b61461c6020830187613f26565b818103604083015261462e81866145a0565b905061463d606083018561395e565b61464a60808301846138e6565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6146ae602683613746565b91506146b982614654565b604082019050919050565b5f6020820190508181035f8301526146db816146a2565b9050919050565b5f6060820190506146f55f8301866138e6565b61470260208301856138e6565b61470f604083018461381f565b949350505050565b5f614721826136de565b915061472c836136de565b925082820261473a816136de565b9150828204841483151761475157614750613b5e565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61478f826136de565b915061479a836136de565b9250826147aa576147a9614758565b5b82820490509291505056fea2646970667358221220da338839468394b69488603ce27af2c826f994db3c38b1233342cf3d8546c07564736f6c63430008160033

Deployed Bytecode Sourcemap

18307:12108:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29604:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23723:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4678:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6280:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19784:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19527:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5167:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23958:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6482:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19610:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5009:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7019:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19575:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19230:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24162:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29967:441;;;;;;;;;;;;;:::i;:::-;;18506:68;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21253:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23593:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19311:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5338:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1426:103;;;;;;;;;;;;;:::i;:::-;;24059:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21446:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21029:149;;;;;;;;;;;;;:::i;:::-;;775:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21743:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4897:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21991:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23840:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7317:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5694:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19854:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19271:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29782:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21851:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18839:64;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19457:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5957:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19403:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18959:63;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19351:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22303:1144;;;:::i;:::-;;1684:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19134:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29604:172;1006:12;:10;:12::i;:::-;995:23;;:7;:5;:7::i;:::-;:23;;;987:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29684:7:::1;29680:89;29696:8;:15;29694:1;:17;;;29680:89;;;29753:4;29727:10;:23;29738:8;29747:1;29738:11;;;;;;;;;;:::i;:::-;;;;;;;;29727:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;29712:3;;;;;:::i;:::-;;;;29680:89;;;;29604:172:::0;:::o;23723:109::-;1006:12;:10;:12::i;:::-;995:23;;:7;:5;:7::i;:::-;:23;;;987:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23818:6:::1;23795:20;:29;;;;23723:109:::0;:::o;4678:100::-;4732:13;4765:5;4758:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4678:100;:::o;6280:194::-;6388:4;6405:39;6414:12;:10;:12::i;:::-;6428:7;6437:6;6405:8;:39::i;:::-;6462:4;6455:11;;6280:194;;;;:::o;19784:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;19527:41::-;;;;;;;;;;;;;:::o;5167:108::-;5228:7;5255:12;;5248:19;;5167:108;:::o;23958:93::-;1006:12;:10;:12::i;:::-;995:23;;:7;:5;:7::i;:::-;:23;;;987:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24037:6:::1;24025:9;:18;;;;23958:93:::0;:::o;6482:529::-;6622:4;6639:36;6649:6;6657:9;6668:6;6639:9;:36::i;:::-;6688:24;6715:11;:19;6727:6;6715:19;;;;;;;;;;;;;;;:33;6735:12;:10;:12::i;:::-;6715:33;;;;;;;;;;;;;;;;6688:60;;6801:6;6781:16;:26;;6759:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;6911:57;6920:6;6928:12;:10;:12::i;:::-;6961:6;6942:16;:25;6911:8;:57::i;:::-;6999:4;6992:11;;;6482:529;;;;;:::o;19610:53::-;19656:6;19610:53;:::o;5009:93::-;5067:5;5092:2;5085:9;;5009:93;:::o;7019:290::-;7132:4;7149:130;7172:12;:10;:12::i;:::-;7199:7;7258:10;7221:11;:25;7233:12;:10;:12::i;:::-;7221:25;;;;;;;;;;;;;;;:34;7247:7;7221:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;7149:8;:130::i;:::-;7297:4;7290:11;;7019:290;;;;:::o;19575:28::-;;;;;;;;;;;;;:::o;19230:34::-;;;;;;;;;;;;;:::o;24162:126::-;24228:4;24252:19;:28;24272:7;24252:28;;;;;;;;;;;;;;;;;;;;;;;;;24245:35;;24162:126;;;:::o;29967:441::-;1006:12;:10;:12::i;:::-;995:23;;:7;:5;:7::i;:::-;:23;;;987:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30029:20:::1;30052:24;30070:4;30052:9;:24::i;:::-;30029:47;;30105:1;30090:12;:16;30087:78;;;30123:30;30140:12;30123:16;:30::i;:::-;30087:78;30175:18;30196:21;30175:42;;30244:1;30231:10;:14;30228:173;;;30276:12;30302:10;;;;;;;;;;;30294:24;;30326:10;30294:47;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30275:66;;;30364:7;30356:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;30247:154;30228:173;30008:400;;29967:441::o:0;18506:68::-;;;;;;;;;;;;;:::o;21253:185::-;21324:4;1006:12;:10;:12::i;:::-;995:23;;:7;:5;:7::i;:::-;:23;;;987:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21358:5:::1;21341:14;;:22;;;;;;;;;;;;;;;;;;21385:1;21374:8;:12;;;;21407:1;21397:7;:11;;;;21426:4;21419:11;;21253:185:::0;;;;:::o;23593:122::-;1006:12;:10;:12::i;:::-;995:23;;:7;:5;:7::i;:::-;:23;;;987:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23695:10:::1;23682;;:23;;;;;;;;;;;;;;;;;;23593:122:::0;:::o;19311:31::-;;;;;;;;;;;;;:::o;5338:143::-;5428:7;5455:9;:18;5465:7;5455:18;;;;;;;;;;;;;;;;5448:25;;5338:143;;;:::o;1426:103::-;1006:12;:10;:12::i;:::-;995:23;;:7;:5;:7::i;:::-;:23;;;987:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1491:30:::1;1518:1;1491:18;:30::i;:::-;1426:103::o:0;24059:93::-;1006:12;:10;:12::i;:::-;995:23;;:7;:5;:7::i;:::-;:23;;;987:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24139:5:::1;24122:14;;:22;;;;;;;;;;;;;;;;;;24059:93:::0;:::o;21446:201::-;1006:12;:10;:12::i;:::-;995:23;;:7;:5;:7::i;:::-;:23;;;987:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21629:10:::1;21577:31;:49;21609:16;21577:49;;;;;;;;;;;;;;;;:62;;;;;;;;;;;;;;;;;;21446:201:::0;;:::o;21029:149::-;1006:12;:10;:12::i;:::-;995:23;;:7;:5;:7::i;:::-;:23;;;987:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21100:4:::1;21084:13;;:20;;;;;;;;;;;;;;;;;;21129:4;21115:11;;:18;;;;;;;;;;;;;;;;;;21158:12;21144:11;:26;;;;21029:149::o:0;775:87::-;821:7;848:6;;;;;;;;;;;841:13;;775:87;:::o;21743:100::-;1006:12;:10;:12::i;:::-;995:23;;:7;:5;:7::i;:::-;:23;;;987:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21828:7:::1;21814:11;;:21;;;;;;;;;;;;;;;;;;21743:100:::0;:::o;4897:104::-;4953:13;4986:7;4979:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4897:104;:::o;21991:304::-;1006:12;:10;:12::i;:::-;995:23;;:7;:5;:7::i;:::-;:23;;;987:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22137:13:::1;;;;;;;;;;;22129:21;;:4;:21;;::::0;22107:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22246:41;22275:4;22281:5;22246:28;:41::i;:::-;21991:304:::0;;:::o;23840:110::-;1006:12;:10;:12::i;:::-;995:23;;:7;:5;:7::i;:::-;:23;;;987:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23936:6:::1;23915:18;:27;;;;23840:110:::0;:::o;7317:475::-;7435:4;7452:24;7479:11;:25;7491:12;:10;:12::i;:::-;7479:25;;;;;;;;;;;;;;;:34;7505:7;7479:34;;;;;;;;;;;;;;;;7452:61;;7566:15;7546:16;:35;;7524:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;7682:67;7691:12;:10;:12::i;:::-;7705:7;7733:15;7714:16;:34;7682:8;:67::i;:::-;7780:4;7773:11;;;7317:475;;;;:::o;5694:200::-;5805:4;5822:42;5832:12;:10;:12::i;:::-;5846:9;5857:6;5822:9;:42::i;:::-;5882:4;5875:11;;5694:200;;;;:::o;19854:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;19271:33::-;;;;;;;;;;;;;:::o;29782:175::-;1006:12;:10;:12::i;:::-;995:23;;:7;:5;:7::i;:::-;:23;;;987:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29864:7:::1;29860:90;29876:8;:15;29874:1;:17;;;29860:90;;;29933:5;29907:10;:23;29918:8;29927:1;29918:11;;;;;;;;;;:::i;:::-;;;;;;;;29907:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;29892:3;;;;;:::i;:::-;;;;29860:90;;;;29782:175:::0;:::o;21851:132::-;1006:12;:10;:12::i;:::-;995:23;;:7;:5;:7::i;:::-;:23;;;987:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21967:8:::1;21936:19;:28;21956:7;21936:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;21851:132:::0;;:::o;18839:64::-;;;;:::o;19457:26::-;;;;:::o;5957:176::-;6071:7;6098:11;:18;6110:5;6098:18;;;;;;;;;;;;;;;:27;6117:7;6098:27;;;;;;;;;;;;;;;;6091:34;;5957:176;;;;:::o;19403:28::-;;;;:::o;18959:63::-;;;;:::o;19351:27::-;;;;:::o;22303:1144::-;1006:12;:10;:12::i;:::-;995:23;;:7;:5;:7::i;:::-;:23;;;987:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22432:35:::1;22503:42;22432:124;;22587:16;22569:15;;:34;;;;;;;;;;;;;;;;;;22614:58;22648:16;22667:4;22614:25;:58::i;:::-;22683:75;22700:4;22715:15;;;;;;;;;;;22733:24;22751:4;22733:9;:24::i;:::-;22683:8;:75::i;:::-;22833:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22815:70;;;22894:4;22901:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22815:110;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22799:13;;:126;;;;;;;;;;;;;;;;;;22936:55;22970:13;;;;;;;;;;;22986:4;22936:25;:55::i;:::-;23002:58;23039:13;;;;;;;;;;;23055:4;23002:28;:58::i;:::-;23073:15;;;;;;;;;;;:31;;;23112:9;23145:4;23181:24;23199:4;23181:9;:24::i;:::-;23240:1;23283::::0;23326:7:::1;:5;:7::i;:::-;23383:15;23073:336;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;23435:4;23420:14;;:19;;;;;;;;;;;;;;;;;;22354:1093;22303:1144::o:0;1684:238::-;1006:12;:10;:12::i;:::-;995:23;;:7;:5;:7::i;:::-;:23;;;987:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1807:1:::1;1787:22;;:8;:22;;::::0;1765:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1886:28;1905:8;1886:18;:28::i;:::-;1684:238:::0;:::o;19134:53::-;;;;:::o;96:98::-;149:7;176:10;169:17;;96:98;:::o;9584:380::-;9737:1;9720:19;;:5;:19;;;9712:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9818:1;9799:21;;:7;:21;;;9791:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9902:6;9872:11;:18;9884:5;9872:18;;;;;;;;;;;;;;;:27;9891:7;9872:27;;;;;;;;;;;;;;;:36;;;;9940:7;9924:32;;9933:5;9924:32;;;9949:6;9924:32;;;;;;:::i;:::-;;;;;;;;9584:380;;;:::o;24296:3950::-;24444:1;24428:18;;:4;:18;;;24420:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24521:1;24507:16;;:2;:16;;;24499:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24583:10;:14;24594:2;24583:14;;;;;;;;;;;;;;;;;;;;;;;;;24582:15;:36;;;;;24602:10;:16;24613:4;24602:16;;;;;;;;;;;;;;;;;;;;;;;;;24601:17;24582:36;24574:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;24661:1;24651:6;:11;24647:93;;24679:28;24695:4;24701:2;24705:1;24679:15;:28::i;:::-;24722:7;;24647:93;24756:14;;;;;;;;;;;24752:1723;;;24817:7;:5;:7::i;:::-;24809:15;;:4;:15;;;;:49;;;;;24851:7;:5;:7::i;:::-;24845:13;;:2;:13;;;;24809:49;:86;;;;;24893:1;24879:16;;:2;:16;;;;24809:86;:128;;;;;24930:6;24916:21;;:2;:21;;;;24809:128;:158;;;;;24959:8;;;;;;;;;;;24958:9;24809:158;24787:1677;;;25007:13;;;;;;;;;;;25002:228;;25079:19;:25;25099:4;25079:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;25108:19;:23;25128:2;25108:23;;;;;;;;;;;;;;;;;;;;;;;;;25079:52;25045:165;;;;;;;;;;;;:::i;:::-;;;;;;;;;25002:228;25304:25;:31;25330:4;25304:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;25361:31;:35;25393:2;25361:35;;;;;;;;;;;;;;;;;;;;;;;;;25360:36;25304:92;25278:1171;;;25483:20;;25473:6;:30;;25439:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;25691:9;;25674:13;25684:2;25674:9;:13::i;:::-;25665:6;:22;;;;:::i;:::-;:35;;25631:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;25278:1171;;;25869:25;:29;25895:2;25869:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;25924:31;:37;25956:4;25924:37;;;;;;;;;;;;;;;;;;;;;;;;;25923:38;25869:92;25843:606;;;26048:20;;26038:6;:30;;26004:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;25843:606;;;26227:31;:35;26259:2;26227:35;;;;;;;;;;;;;;;;;;;;;;;;;26222:227;;26347:9;;26330:13;26340:2;26330:9;:13::i;:::-;26321:6;:22;;;;:::i;:::-;:35;;26287:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;26222:227;25843:606;25278:1171;24787:1677;24752:1723;26485:28;26516:24;26534:4;26516:9;:24::i;:::-;26485:55;;26553:12;26592:18;;26568:20;:42;;26553:57;;26629:7;:35;;;;;26653:11;;;;;;;;;;;26629:35;:79;;;;;26700:8;;;;;;;;;;;26699:9;26629:79;:147;;;;;26745:25;:31;26771:4;26745:31;;;;;;;;;;;;;;;;;;;;;;;;;26744:32;26629:147;:209;;;;;26813:19;:25;26833:4;26813:25;;;;;;;;;;;;;;;;;;;;;;;;;26812:26;26629:209;:269;;;;;26875:19;:23;26895:2;26875:23;;;;;;;;;;;;;;;;;;;;;;;;;26874:24;26629:269;26625:402;;;26955:4;26944:8;;:15;;;;;;;;;;;;;;;;;;26974:10;:8;:10::i;:::-;27010:5;26999:8;;:16;;;;;;;;;;;;;;;;;;26625:402;27039:12;27055:8;;;;;;;;;;;27054:9;27039:24;;27165:19;:25;27185:4;27165:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;27194:19;:23;27214:2;27194:23;;;;;;;;;;;;;;;;;;;;;;;;;27165:52;27161:100;;;27244:5;27234:15;;27161:100;27273:12;27378:7;27374:821;;;27430:25;:29;27456:2;27430:29;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;27474:1;27463:8;;:12;27430:45;27426:622;;;27503:30;27528:4;27503:20;27514:8;;27503:6;:10;;:20;;;;:::i;:::-;:24;;:30;;;;:::i;:::-;27496:37;;27426:622;;;27619:25;:31;27645:4;27619:31;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;27664:1;27654:7;;:11;27619:46;27615:433;;;27752:1;27737:11;;27722:12;:26;;;;:::i;:::-;:31;27718:315;;27784:25;27804:4;27784:15;27795:3;27784:6;:10;;:15;;;;:::i;:::-;:19;;:25;;;;:::i;:::-;27777:32;;27718:315;;;27869:2;27854:11;;27839:12;:26;;;;:::i;:::-;:32;27835:198;;27903:25;27923:4;27903:15;27914:3;27903:6;:10;;:15;;;;:::i;:::-;:19;;:25;;;;:::i;:::-;27896:32;;27835:198;;;27984:29;28008:4;27984:19;27995:7;;27984:6;:10;;:19;;;;:::i;:::-;:23;;:29;;;;:::i;:::-;27977:36;;27835:198;27718:315;27615:433;27426:622;28075:1;28068:4;:8;28064:91;;;28097:42;28113:4;28127;28134;28097:15;:42::i;:::-;28064:91;28179:4;28169:14;;;;;:::i;:::-;;;27374:821;28205:33;28221:4;28227:2;28231:6;28205:15;:33::i;:::-;24409:3837;;;;24296:3950;;;;:::o;28254:611::-;28380:21;28418:1;28404:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28380:40;;28449:4;28431;28436:1;28431:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;28475:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28465:4;28470:1;28465:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;28508:62;28525:4;28540:15;;;;;;;;;;;28558:11;28508:8;:62::i;:::-;28607:15;;;;;;;;;;;:66;;;28688:11;28714:1;28758:4;28785;28805:15;28607:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28309:556;28254:611;:::o;2082:191::-;2156:16;2175:6;;;;;;;;;;;2156:25;;2201:8;2192:6;;:17;;;;;;;;;;;;;;;;;;2256:8;2225:40;;2246:8;2225:40;;;;;;;;;;;;2145:128;2082:191;:::o;23455:130::-;23572:5;23538:25;:31;23564:4;23538:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23455:130;;:::o;7800:770::-;7958:1;7940:20;;:6;:20;;;7932:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;8042:1;8021:23;;:9;:23;;;8013:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;8097:47;8118:6;8126:9;8137:6;8097:20;:47::i;:::-;8157:21;8181:9;:17;8191:6;8181:17;;;;;;;;;;;;;;;;8157:41;;8248:6;8231:13;:23;;8209:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;8392:6;8376:13;:22;8356:9;:17;8366:6;8356:17;;;;;;;;;;;;;;;:42;;;;8444:6;8420:9;:20;8430:9;8420:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;8485:9;8468:35;;8477:6;8468:35;;;8496:6;8468:35;;;;;;:::i;:::-;;;;;;;;8516:46;8536:6;8544:9;8555:6;8516:19;:46::i;:::-;7921:649;7800:770;;;:::o;28873:723::-;28912:23;28938:24;28956:4;28938:9;:24::i;:::-;28912:50;;29002:1;28983:15;:20;28979:59;;29020:7;;;28979:59;29071:18;;29052:15;:37;29048:531;;29106:26;29135:18;;29106:47;;29168:36;29185:18;29168:16;:36::i;:::-;29219:23;29245:21;29219:47;;29316:1;29300:15;:17;29297:179;;;29338:12;29364:10;;;;;;;;;;;29356:24;;29388:15;29356:52;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29337:71;;;29435:7;29427:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;29318:158;29297:179;29509:58;29525:18;29545:15;29562:4;29509:58;;;;;;;;:::i;:::-;;;;;;;;29091:488;;29048:531;28901:695;28873:723;:::o;11946:98::-;12004:7;12035:1;12031;:5;;;;:::i;:::-;12024:12;;11946:98;;;;:::o;12052:::-;12110:7;12141:1;12137;:5;;;;:::i;:::-;12130:12;;12052:98;;;;:::o;9972:125::-;;;;:::o;10105:124::-;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:117;443:1;440;433:12;457:102;498:6;549:2;545:7;540:2;533:5;529:14;525:28;515:38;;457:102;;;:::o;565:180::-;613:77;610:1;603:88;710:4;707:1;700:15;734:4;731:1;724:15;751:281;834:27;856:4;834:27;:::i;:::-;826:6;822:40;964:6;952:10;949:22;928:18;916:10;913:34;910:62;907:88;;;975:18;;:::i;:::-;907:88;1015:10;1011:2;1004:22;794:238;751:281;;:::o;1038:129::-;1072:6;1099:20;;:::i;:::-;1089:30;;1128:33;1156:4;1148:6;1128:33;:::i;:::-;1038:129;;;:::o;1173:311::-;1250:4;1340:18;1332:6;1329:30;1326:56;;;1362:18;;:::i;:::-;1326:56;1412:4;1404:6;1400:17;1392:25;;1472:4;1466;1462:15;1454:23;;1173:311;;;:::o;1490:117::-;1599:1;1596;1589:12;1613:126;1650:7;1690:42;1683:5;1679:54;1668:65;;1613:126;;;:::o;1745:96::-;1782:7;1811:24;1829:5;1811:24;:::i;:::-;1800:35;;1745:96;;;:::o;1847:122::-;1920:24;1938:5;1920:24;:::i;:::-;1913:5;1910:35;1900:63;;1959:1;1956;1949:12;1900:63;1847:122;:::o;1975:139::-;2021:5;2059:6;2046:20;2037:29;;2075:33;2102:5;2075:33;:::i;:::-;1975:139;;;;:::o;2137:710::-;2233:5;2258:81;2274:64;2331:6;2274:64;:::i;:::-;2258:81;:::i;:::-;2249:90;;2359:5;2388:6;2381:5;2374:21;2422:4;2415:5;2411:16;2404:23;;2475:4;2467:6;2463:17;2455:6;2451:30;2504:3;2496:6;2493:15;2490:122;;;2523:79;;:::i;:::-;2490:122;2638:6;2621:220;2655:6;2650:3;2647:15;2621:220;;;2730:3;2759:37;2792:3;2780:10;2759:37;:::i;:::-;2754:3;2747:50;2826:4;2821:3;2817:14;2810:21;;2697:144;2681:4;2676:3;2672:14;2665:21;;2621:220;;;2625:21;2239:608;;2137:710;;;;;:::o;2870:370::-;2941:5;2990:3;2983:4;2975:6;2971:17;2967:27;2957:122;;2998:79;;:::i;:::-;2957:122;3115:6;3102:20;3140:94;3230:3;3222:6;3215:4;3207:6;3203:17;3140:94;:::i;:::-;3131:103;;2947:293;2870:370;;;;:::o;3246:539::-;3330:6;3379:2;3367:9;3358:7;3354:23;3350:32;3347:119;;;3385:79;;:::i;:::-;3347:119;3533:1;3522:9;3518:17;3505:31;3563:18;3555:6;3552:30;3549:117;;;3585:79;;:::i;:::-;3549:117;3690:78;3760:7;3751:6;3740:9;3736:22;3690:78;:::i;:::-;3680:88;;3476:302;3246:539;;;;:::o;3791:77::-;3828:7;3857:5;3846:16;;3791:77;;;:::o;3874:122::-;3947:24;3965:5;3947:24;:::i;:::-;3940:5;3937:35;3927:63;;3986:1;3983;3976:12;3927:63;3874:122;:::o;4002:139::-;4048:5;4086:6;4073:20;4064:29;;4102:33;4129:5;4102:33;:::i;:::-;4002:139;;;;:::o;4147:329::-;4206:6;4255:2;4243:9;4234:7;4230:23;4226:32;4223:119;;;4261:79;;:::i;:::-;4223:119;4381:1;4406:53;4451:7;4442:6;4431:9;4427:22;4406:53;:::i;:::-;4396:63;;4352:117;4147:329;;;;:::o;4482:99::-;4534:6;4568:5;4562:12;4552:22;;4482:99;;;:::o;4587:169::-;4671:11;4705:6;4700:3;4693:19;4745:4;4740:3;4736:14;4721:29;;4587:169;;;;:::o;4762:246::-;4843:1;4853:113;4867:6;4864:1;4861:13;4853:113;;;4952:1;4947:3;4943:11;4937:18;4933:1;4928:3;4924:11;4917:39;4889:2;4886:1;4882:10;4877:15;;4853:113;;;5000:1;4991:6;4986:3;4982:16;4975:27;4824:184;4762:246;;;:::o;5014:377::-;5102:3;5130:39;5163:5;5130:39;:::i;:::-;5185:71;5249:6;5244:3;5185:71;:::i;:::-;5178:78;;5265:65;5323:6;5318:3;5311:4;5304:5;5300:16;5265:65;:::i;:::-;5355:29;5377:6;5355:29;:::i;:::-;5350:3;5346:39;5339:46;;5106:285;5014:377;;;;:::o;5397:313::-;5510:4;5548:2;5537:9;5533:18;5525:26;;5597:9;5591:4;5587:20;5583:1;5572:9;5568:17;5561:47;5625:78;5698:4;5689:6;5625:78;:::i;:::-;5617:86;;5397:313;;;;:::o;5716:474::-;5784:6;5792;5841:2;5829:9;5820:7;5816:23;5812:32;5809:119;;;5847:79;;:::i;:::-;5809:119;5967:1;5992:53;6037:7;6028:6;6017:9;6013:22;5992:53;:::i;:::-;5982:63;;5938:117;6094:2;6120:53;6165:7;6156:6;6145:9;6141:22;6120:53;:::i;:::-;6110:63;;6065:118;5716:474;;;;;:::o;6196:90::-;6230:7;6273:5;6266:13;6259:21;6248:32;;6196:90;;;:::o;6292:109::-;6373:21;6388:5;6373:21;:::i;:::-;6368:3;6361:34;6292:109;;:::o;6407:210::-;6494:4;6532:2;6521:9;6517:18;6509:26;;6545:65;6607:1;6596:9;6592:17;6583:6;6545:65;:::i;:::-;6407:210;;;;:::o;6623:329::-;6682:6;6731:2;6719:9;6710:7;6706:23;6702:32;6699:119;;;6737:79;;:::i;:::-;6699:119;6857:1;6882:53;6927:7;6918:6;6907:9;6903:22;6882:53;:::i;:::-;6872:63;;6828:117;6623:329;;;;:::o;6958:60::-;6986:3;7007:5;7000:12;;6958:60;;;:::o;7024:142::-;7074:9;7107:53;7125:34;7134:24;7152:5;7134:24;:::i;:::-;7125:34;:::i;:::-;7107:53;:::i;:::-;7094:66;;7024:142;;;:::o;7172:126::-;7222:9;7255:37;7286:5;7255:37;:::i;:::-;7242:50;;7172:126;;;:::o;7304:153::-;7381:9;7414:37;7445:5;7414:37;:::i;:::-;7401:50;;7304:153;;;:::o;7463:185::-;7577:64;7635:5;7577:64;:::i;:::-;7572:3;7565:77;7463:185;;:::o;7654:276::-;7774:4;7812:2;7801:9;7797:18;7789:26;;7825:98;7920:1;7909:9;7905:17;7896:6;7825:98;:::i;:::-;7654:276;;;;:::o;7936:118::-;8023:24;8041:5;8023:24;:::i;:::-;8018:3;8011:37;7936:118;;:::o;8060:222::-;8153:4;8191:2;8180:9;8176:18;8168:26;;8204:71;8272:1;8261:9;8257:17;8248:6;8204:71;:::i;:::-;8060:222;;;;:::o;8288:619::-;8365:6;8373;8381;8430:2;8418:9;8409:7;8405:23;8401:32;8398:119;;;8436:79;;:::i;:::-;8398:119;8556:1;8581:53;8626:7;8617:6;8606:9;8602:22;8581:53;:::i;:::-;8571:63;;8527:117;8683:2;8709:53;8754:7;8745:6;8734:9;8730:22;8709:53;:::i;:::-;8699:63;;8654:118;8811:2;8837:53;8882:7;8873:6;8862:9;8858:22;8837:53;:::i;:::-;8827:63;;8782:118;8288:619;;;;;:::o;8913:118::-;9000:24;9018:5;9000:24;:::i;:::-;8995:3;8988:37;8913:118;;:::o;9037:222::-;9130:4;9168:2;9157:9;9153:18;9145:26;;9181:71;9249:1;9238:9;9234:17;9225:6;9181:71;:::i;:::-;9037:222;;;;:::o;9265:86::-;9300:7;9340:4;9333:5;9329:16;9318:27;;9265:86;;;:::o;9357:112::-;9440:22;9456:5;9440:22;:::i;:::-;9435:3;9428:35;9357:112;;:::o;9475:214::-;9564:4;9602:2;9591:9;9587:18;9579:26;;9615:67;9679:1;9668:9;9664:17;9655:6;9615:67;:::i;:::-;9475:214;;;;:::o;9695:474::-;9763:6;9771;9820:2;9808:9;9799:7;9795:23;9791:32;9788:119;;;9826:79;;:::i;:::-;9788:119;9946:1;9971:53;10016:7;10007:6;9996:9;9992:22;9971:53;:::i;:::-;9961:63;;9917:117;10073:2;10099:53;10144:7;10135:6;10124:9;10120:22;10099:53;:::i;:::-;10089:63;;10044:118;9695:474;;;;;:::o;10175:116::-;10245:21;10260:5;10245:21;:::i;:::-;10238:5;10235:32;10225:60;;10281:1;10278;10271:12;10225:60;10175:116;:::o;10297:133::-;10340:5;10378:6;10365:20;10356:29;;10394:30;10418:5;10394:30;:::i;:::-;10297:133;;;;:::o;10436:323::-;10492:6;10541:2;10529:9;10520:7;10516:23;10512:32;10509:119;;;10547:79;;:::i;:::-;10509:119;10667:1;10692:50;10734:7;10725:6;10714:9;10710:22;10692:50;:::i;:::-;10682:60;;10638:114;10436:323;;;;:::o;10765:468::-;10830:6;10838;10887:2;10875:9;10866:7;10862:23;10858:32;10855:119;;;10893:79;;:::i;:::-;10855:119;11013:1;11038:53;11083:7;11074:6;11063:9;11059:22;11038:53;:::i;:::-;11028:63;;10984:117;11140:2;11166:50;11208:7;11199:6;11188:9;11184:22;11166:50;:::i;:::-;11156:60;;11111:115;10765:468;;;;;:::o;11239:474::-;11307:6;11315;11364:2;11352:9;11343:7;11339:23;11335:32;11332:119;;;11370:79;;:::i;:::-;11332:119;11490:1;11515:53;11560:7;11551:6;11540:9;11536:22;11515:53;:::i;:::-;11505:63;;11461:117;11617:2;11643:53;11688:7;11679:6;11668:9;11664:22;11643:53;:::i;:::-;11633:63;;11588:118;11239:474;;;;;:::o;11719:182::-;11859:34;11855:1;11847:6;11843:14;11836:58;11719:182;:::o;11907:366::-;12049:3;12070:67;12134:2;12129:3;12070:67;:::i;:::-;12063:74;;12146:93;12235:3;12146:93;:::i;:::-;12264:2;12259:3;12255:12;12248:19;;11907:366;;;:::o;12279:419::-;12445:4;12483:2;12472:9;12468:18;12460:26;;12532:9;12526:4;12522:20;12518:1;12507:9;12503:17;12496:47;12560:131;12686:4;12560:131;:::i;:::-;12552:139;;12279:419;;;:::o;12704:180::-;12752:77;12749:1;12742:88;12849:4;12846:1;12839:15;12873:4;12870:1;12863:15;12890:180;12938:77;12935:1;12928:88;13035:4;13032:1;13025:15;13059:4;13056:1;13049:15;13076:167;13113:3;13136:22;13152:5;13136:22;:::i;:::-;13127:31;;13180:4;13173:5;13170:15;13167:41;;13188:18;;:::i;:::-;13167:41;13235:1;13228:5;13224:13;13217:20;;13076:167;;;:::o;13249:180::-;13297:77;13294:1;13287:88;13394:4;13391:1;13384:15;13418:4;13415:1;13408:15;13435:320;13479:6;13516:1;13510:4;13506:12;13496:22;;13563:1;13557:4;13553:12;13584:18;13574:81;;13640:4;13632:6;13628:17;13618:27;;13574:81;13702:2;13694:6;13691:14;13671:18;13668:38;13665:84;;13721:18;;:::i;:::-;13665:84;13486:269;13435:320;;;:::o;13761:227::-;13901:34;13897:1;13889:6;13885:14;13878:58;13970:10;13965:2;13957:6;13953:15;13946:35;13761:227;:::o;13994:366::-;14136:3;14157:67;14221:2;14216:3;14157:67;:::i;:::-;14150:74;;14233:93;14322:3;14233:93;:::i;:::-;14351:2;14346:3;14342:12;14335:19;;13994:366;;;:::o;14366:419::-;14532:4;14570:2;14559:9;14555:18;14547:26;;14619:9;14613:4;14609:20;14605:1;14594:9;14590:17;14583:47;14647:131;14773:4;14647:131;:::i;:::-;14639:139;;14366:419;;;:::o;14791:191::-;14831:3;14850:20;14868:1;14850:20;:::i;:::-;14845:25;;14884:20;14902:1;14884:20;:::i;:::-;14879:25;;14927:1;14924;14920:9;14913:16;;14948:3;14945:1;14942:10;14939:36;;;14955:18;;:::i;:::-;14939:36;14791:191;;;;:::o;14988:147::-;15089:11;15126:3;15111:18;;14988:147;;;;:::o;15141:114::-;;:::o;15261:398::-;15420:3;15441:83;15522:1;15517:3;15441:83;:::i;:::-;15434:90;;15533:93;15622:3;15533:93;:::i;:::-;15651:1;15646:3;15642:11;15635:18;;15261:398;;;:::o;15665:379::-;15849:3;15871:147;16014:3;15871:147;:::i;:::-;15864:154;;16035:3;16028:10;;15665:379;;;:::o;16050:163::-;16190:15;16186:1;16178:6;16174:14;16167:39;16050:163;:::o;16219:366::-;16361:3;16382:67;16446:2;16441:3;16382:67;:::i;:::-;16375:74;;16458:93;16547:3;16458:93;:::i;:::-;16576:2;16571:3;16567:12;16560:19;;16219:366;;;:::o;16591:419::-;16757:4;16795:2;16784:9;16780:18;16772:26;;16844:9;16838:4;16834:20;16830:1;16819:9;16815:17;16808:47;16872:131;16998:4;16872:131;:::i;:::-;16864:139;;16591:419;;;:::o;17016:244::-;17156:34;17152:1;17144:6;17140:14;17133:58;17225:27;17220:2;17212:6;17208:15;17201:52;17016:244;:::o;17266:366::-;17408:3;17429:67;17493:2;17488:3;17429:67;:::i;:::-;17422:74;;17505:93;17594:3;17505:93;:::i;:::-;17623:2;17618:3;17614:12;17607:19;;17266:366;;;:::o;17638:419::-;17804:4;17842:2;17831:9;17827:18;17819:26;;17891:9;17885:4;17881:20;17877:1;17866:9;17862:17;17855:47;17919:131;18045:4;17919:131;:::i;:::-;17911:139;;17638:419;;;:::o;18063:224::-;18203:34;18199:1;18191:6;18187:14;18180:58;18272:7;18267:2;18259:6;18255:15;18248:32;18063:224;:::o;18293:366::-;18435:3;18456:67;18520:2;18515:3;18456:67;:::i;:::-;18449:74;;18532:93;18621:3;18532:93;:::i;:::-;18650:2;18645:3;18641:12;18634:19;;18293:366;;;:::o;18665:419::-;18831:4;18869:2;18858:9;18854:18;18846:26;;18918:9;18912:4;18908:20;18904:1;18893:9;18889:17;18882:47;18946:131;19072:4;18946:131;:::i;:::-;18938:139;;18665:419;;;:::o;19090:143::-;19147:5;19178:6;19172:13;19163:22;;19194:33;19221:5;19194:33;:::i;:::-;19090:143;;;;:::o;19239:351::-;19309:6;19358:2;19346:9;19337:7;19333:23;19329:32;19326:119;;;19364:79;;:::i;:::-;19326:119;19484:1;19509:64;19565:7;19556:6;19545:9;19541:22;19509:64;:::i;:::-;19499:74;;19455:128;19239:351;;;;:::o;19596:332::-;19717:4;19755:2;19744:9;19740:18;19732:26;;19768:71;19836:1;19825:9;19821:17;19812:6;19768:71;:::i;:::-;19849:72;19917:2;19906:9;19902:18;19893:6;19849:72;:::i;:::-;19596:332;;;;;:::o;19934:85::-;19979:7;20008:5;19997:16;;19934:85;;;:::o;20025:158::-;20083:9;20116:61;20134:42;20143:32;20169:5;20143:32;:::i;:::-;20134:42;:::i;:::-;20116:61;:::i;:::-;20103:74;;20025:158;;;:::o;20189:147::-;20284:45;20323:5;20284:45;:::i;:::-;20279:3;20272:58;20189:147;;:::o;20342:807::-;20591:4;20629:3;20618:9;20614:19;20606:27;;20643:71;20711:1;20700:9;20696:17;20687:6;20643:71;:::i;:::-;20724:72;20792:2;20781:9;20777:18;20768:6;20724:72;:::i;:::-;20806:80;20882:2;20871:9;20867:18;20858:6;20806:80;:::i;:::-;20896;20972:2;20961:9;20957:18;20948:6;20896:80;:::i;:::-;20986:73;21054:3;21043:9;21039:19;21030:6;20986:73;:::i;:::-;21069;21137:3;21126:9;21122:19;21113:6;21069:73;:::i;:::-;20342:807;;;;;;;;;:::o;21155:143::-;21212:5;21243:6;21237:13;21228:22;;21259:33;21286:5;21259:33;:::i;:::-;21155:143;;;;:::o;21304:663::-;21392:6;21400;21408;21457:2;21445:9;21436:7;21432:23;21428:32;21425:119;;;21463:79;;:::i;:::-;21425:119;21583:1;21608:64;21664:7;21655:6;21644:9;21640:22;21608:64;:::i;:::-;21598:74;;21554:128;21721:2;21747:64;21803:7;21794:6;21783:9;21779:22;21747:64;:::i;:::-;21737:74;;21692:129;21860:2;21886:64;21942:7;21933:6;21922:9;21918:22;21886:64;:::i;:::-;21876:74;;21831:129;21304:663;;;;;:::o;21973:225::-;22113:34;22109:1;22101:6;22097:14;22090:58;22182:8;22177:2;22169:6;22165:15;22158:33;21973:225;:::o;22204:366::-;22346:3;22367:67;22431:2;22426:3;22367:67;:::i;:::-;22360:74;;22443:93;22532:3;22443:93;:::i;:::-;22561:2;22556:3;22552:12;22545:19;;22204:366;;;:::o;22576:419::-;22742:4;22780:2;22769:9;22765:18;22757:26;;22829:9;22823:4;22819:20;22815:1;22804:9;22800:17;22793:47;22857:131;22983:4;22857:131;:::i;:::-;22849:139;;22576:419;;;:::o;23001:223::-;23141:34;23137:1;23129:6;23125:14;23118:58;23210:6;23205:2;23197:6;23193:15;23186:31;23001:223;:::o;23230:366::-;23372:3;23393:67;23457:2;23452:3;23393:67;:::i;:::-;23386:74;;23469:93;23558:3;23469:93;:::i;:::-;23587:2;23582:3;23578:12;23571:19;;23230:366;;;:::o;23602:419::-;23768:4;23806:2;23795:9;23791:18;23783:26;;23855:9;23849:4;23845:20;23841:1;23830:9;23826:17;23819:47;23883:131;24009:4;23883:131;:::i;:::-;23875:139;;23602:419;;;:::o;24027:221::-;24167:34;24163:1;24155:6;24151:14;24144:58;24236:4;24231:2;24223:6;24219:15;24212:29;24027:221;:::o;24254:366::-;24396:3;24417:67;24481:2;24476:3;24417:67;:::i;:::-;24410:74;;24493:93;24582:3;24493:93;:::i;:::-;24611:2;24606:3;24602:12;24595:19;;24254:366;;;:::o;24626:419::-;24792:4;24830:2;24819:9;24815:18;24807:26;;24879:9;24873:4;24869:20;24865:1;24854:9;24850:17;24843:47;24907:131;25033:4;24907:131;:::i;:::-;24899:139;;24626:419;;;:::o;25051:224::-;25191:34;25187:1;25179:6;25175:14;25168:58;25260:7;25255:2;25247:6;25243:15;25236:32;25051:224;:::o;25281:366::-;25423:3;25444:67;25508:2;25503:3;25444:67;:::i;:::-;25437:74;;25520:93;25609:3;25520:93;:::i;:::-;25638:2;25633:3;25629:12;25622:19;;25281:366;;;:::o;25653:419::-;25819:4;25857:2;25846:9;25842:18;25834:26;;25906:9;25900:4;25896:20;25892:1;25881:9;25877:17;25870:47;25934:131;26060:4;25934:131;:::i;:::-;25926:139;;25653:419;;;:::o;26078:222::-;26218:34;26214:1;26206:6;26202:14;26195:58;26287:5;26282:2;26274:6;26270:15;26263:30;26078:222;:::o;26306:366::-;26448:3;26469:67;26533:2;26528:3;26469:67;:::i;:::-;26462:74;;26545:93;26634:3;26545:93;:::i;:::-;26663:2;26658:3;26654:12;26647:19;;26306:366;;;:::o;26678:419::-;26844:4;26882:2;26871:9;26867:18;26859:26;;26931:9;26925:4;26921:20;26917:1;26906:9;26902:17;26895:47;26959:131;27085:4;26959:131;:::i;:::-;26951:139;;26678:419;;;:::o;27103:161::-;27243:13;27239:1;27231:6;27227:14;27220:37;27103:161;:::o;27270:366::-;27412:3;27433:67;27497:2;27492:3;27433:67;:::i;:::-;27426:74;;27509:93;27598:3;27509:93;:::i;:::-;27627:2;27622:3;27618:12;27611:19;;27270:366;;;:::o;27642:419::-;27808:4;27846:2;27835:9;27831:18;27823:26;;27895:9;27889:4;27885:20;27881:1;27870:9;27866:17;27859:47;27923:131;28049:4;27923:131;:::i;:::-;27915:139;;27642:419;;;:::o;28067:177::-;28207:29;28203:1;28195:6;28191:14;28184:53;28067:177;:::o;28250:366::-;28392:3;28413:67;28477:2;28472:3;28413:67;:::i;:::-;28406:74;;28489:93;28578:3;28489:93;:::i;:::-;28607:2;28602:3;28598:12;28591:19;;28250:366;;;:::o;28622:419::-;28788:4;28826:2;28815:9;28811:18;28803:26;;28875:9;28869:4;28865:20;28861:1;28850:9;28846:17;28839:47;28903:131;29029:4;28903:131;:::i;:::-;28895:139;;28622:419;;;:::o;29047:240::-;29187:34;29183:1;29175:6;29171:14;29164:58;29256:23;29251:2;29243:6;29239:15;29232:48;29047:240;:::o;29293:366::-;29435:3;29456:67;29520:2;29515:3;29456:67;:::i;:::-;29449:74;;29532:93;29621:3;29532:93;:::i;:::-;29650:2;29645:3;29641:12;29634:19;;29293:366;;;:::o;29665:419::-;29831:4;29869:2;29858:9;29854:18;29846:26;;29918:9;29912:4;29908:20;29904:1;29893:9;29889:17;29882:47;29946:131;30072:4;29946:131;:::i;:::-;29938:139;;29665:419;;;:::o;30090:169::-;30230:21;30226:1;30218:6;30214:14;30207:45;30090:169;:::o;30265:366::-;30407:3;30428:67;30492:2;30487:3;30428:67;:::i;:::-;30421:74;;30504:93;30593:3;30504:93;:::i;:::-;30622:2;30617:3;30613:12;30606:19;;30265:366;;;:::o;30637:419::-;30803:4;30841:2;30830:9;30826:18;30818:26;;30890:9;30884:4;30880:20;30876:1;30865:9;30861:17;30854:47;30918:131;31044:4;30918:131;:::i;:::-;30910:139;;30637:419;;;:::o;31062:241::-;31202:34;31198:1;31190:6;31186:14;31179:58;31271:24;31266:2;31258:6;31254:15;31247:49;31062:241;:::o;31309:366::-;31451:3;31472:67;31536:2;31531:3;31472:67;:::i;:::-;31465:74;;31548:93;31637:3;31548:93;:::i;:::-;31666:2;31661:3;31657:12;31650:19;;31309:366;;;:::o;31681:419::-;31847:4;31885:2;31874:9;31870:18;31862:26;;31934:9;31928:4;31924:20;31920:1;31909:9;31905:17;31898:47;31962:131;32088:4;31962:131;:::i;:::-;31954:139;;31681:419;;;:::o;32106:194::-;32146:4;32166:20;32184:1;32166:20;:::i;:::-;32161:25;;32200:20;32218:1;32200:20;:::i;:::-;32195:25;;32244:1;32241;32237:9;32229:17;;32268:1;32262:4;32259:11;32256:37;;;32273:18;;:::i;:::-;32256:37;32106:194;;;;:::o;32306:114::-;32373:6;32407:5;32401:12;32391:22;;32306:114;;;:::o;32426:184::-;32525:11;32559:6;32554:3;32547:19;32599:4;32594:3;32590:14;32575:29;;32426:184;;;;:::o;32616:132::-;32683:4;32706:3;32698:11;;32736:4;32731:3;32727:14;32719:22;;32616:132;;;:::o;32754:108::-;32831:24;32849:5;32831:24;:::i;:::-;32826:3;32819:37;32754:108;;:::o;32868:179::-;32937:10;32958:46;33000:3;32992:6;32958:46;:::i;:::-;33036:4;33031:3;33027:14;33013:28;;32868:179;;;;:::o;33053:113::-;33123:4;33155;33150:3;33146:14;33138:22;;33053:113;;;:::o;33202:732::-;33321:3;33350:54;33398:5;33350:54;:::i;:::-;33420:86;33499:6;33494:3;33420:86;:::i;:::-;33413:93;;33530:56;33580:5;33530:56;:::i;:::-;33609:7;33640:1;33625:284;33650:6;33647:1;33644:13;33625:284;;;33726:6;33720:13;33753:63;33812:3;33797:13;33753:63;:::i;:::-;33746:70;;33839:60;33892:6;33839:60;:::i;:::-;33829:70;;33685:224;33672:1;33669;33665:9;33660:14;;33625:284;;;33629:14;33925:3;33918:10;;33326:608;;;33202:732;;;;:::o;33940:831::-;34203:4;34241:3;34230:9;34226:19;34218:27;;34255:71;34323:1;34312:9;34308:17;34299:6;34255:71;:::i;:::-;34336:80;34412:2;34401:9;34397:18;34388:6;34336:80;:::i;:::-;34463:9;34457:4;34453:20;34448:2;34437:9;34433:18;34426:48;34491:108;34594:4;34585:6;34491:108;:::i;:::-;34483:116;;34609:72;34677:2;34666:9;34662:18;34653:6;34609:72;:::i;:::-;34691:73;34759:3;34748:9;34744:19;34735:6;34691:73;:::i;:::-;33940:831;;;;;;;;:::o;34777:225::-;34917:34;34913:1;34905:6;34901:14;34894:58;34986:8;34981:2;34973:6;34969:15;34962:33;34777:225;:::o;35008:366::-;35150:3;35171:67;35235:2;35230:3;35171:67;:::i;:::-;35164:74;;35247:93;35336:3;35247:93;:::i;:::-;35365:2;35360:3;35356:12;35349:19;;35008:366;;;:::o;35380:419::-;35546:4;35584:2;35573:9;35569:18;35561:26;;35633:9;35627:4;35623:20;35619:1;35608:9;35604:17;35597:47;35661:131;35787:4;35661:131;:::i;:::-;35653:139;;35380:419;;;:::o;35805:430::-;35948:4;35986:2;35975:9;35971:18;35963:26;;35999:71;36067:1;36056:9;36052:17;36043:6;35999:71;:::i;:::-;36080:72;36148:2;36137:9;36133:18;36124:6;36080:72;:::i;:::-;36162:66;36224:2;36213:9;36209:18;36200:6;36162:66;:::i;:::-;35805:430;;;;;;:::o;36241:410::-;36281:7;36304:20;36322:1;36304:20;:::i;:::-;36299:25;;36338:20;36356:1;36338:20;:::i;:::-;36333:25;;36393:1;36390;36386:9;36415:30;36433:11;36415:30;:::i;:::-;36404:41;;36594:1;36585:7;36581:15;36578:1;36575:22;36555:1;36548:9;36528:83;36505:139;;36624:18;;:::i;:::-;36505:139;36289:362;36241:410;;;;:::o;36657:180::-;36705:77;36702:1;36695:88;36802:4;36799:1;36792:15;36826:4;36823:1;36816:15;36843:185;36883:1;36900:20;36918:1;36900:20;:::i;:::-;36895:25;;36934:20;36952:1;36934:20;:::i;:::-;36929:25;;36973:1;36963:35;;36978:18;;:::i;:::-;36963:35;37020:1;37017;37013:9;37008:14;;36843:185;;;;:::o

Swarm Source

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