ETH Price: $2,364.82 (+1.58%)

Token

Starlink AI (STAI)
 

Overview

Max Total Supply

100,000,000 STAI

Holders

86

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
257,512.800066808442728206 STAI

Value
$0.00
0x0a94F91516C2d43afC8daF9Da1171533C7Ec1111
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:
STAI

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-05-26
*/

// https://t.me/StarlinkAI_portal
// SPDX-License-Identifier: MIT

pragma solidity 0.8.19;

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

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

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

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

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

contract 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 {}
}

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface IDexPair {
    function sync() external;
}

interface IDexRouter {
    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 STAI is ERC20, Ownable {
    using SafeMath for uint256;

    IDexRouter private immutable dexRouter;
    address public immutable dexPair;
    address private theDeployer = 0x09Cc746fBD4B8d85bD4bd2EAb9686E7889abA5a7;

    // Swapback
    bool private swapping;

    bool private swapbackEnabled = false;
    uint256 private swapBackValueMin;
    uint256 private swapBackValueMax;

    //Anti-whale
    bool private limitsInEffect = true;
    bool private trasnferDelayEnabled = true;
    uint256 private maxWallet;
    uint256 private maxTx;
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch

    bool public tradingOn = false;

    // burn
    bool private burnEnabled = true;
    uint256 private lastSync = 0;

    // Fee receivers
    address private autoLPReceiver;
    address private MarketingReceiver;
    address private devReceiver;

    uint256 private totalBuyFee;
    uint256 private buyMarketingFee;
    uint256 private buyLPFee;
    uint256 private buyDevelopmentFee;

    uint256 private totalSellFee;
    uint256 private sellMarketingFee;
    uint256 private sellLpFee;
    uint256 private sellDevelopmentFee;

    uint256 private totalTransferFee;
    uint256 private transferMarketingFee;
    uint256 private transferLpFee;
    uint256 private transferDevelopmentFee;

    uint256 private tokensForMarketing;
    uint256 private tokensForLiquidity;
    uint256 private tokensForDev;

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

    // exlcude from fees and max transaction amount
    mapping(address => bool) private isFeeExempt;
    mapping(address => bool) private isTxLimitExempt;
    mapping(address => bool) private automatedMarketMakerPairs;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount

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

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event ExcludeFromLimits(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event TradingEnabled(uint256 indexed timestamp);
    event LimitsRemoved(uint256 indexed timestamp);
    event DisabledTransferDelay(uint256 indexed timestamp);

    event SwapbackSettingsUpdated(
        bool enabled,
        uint256 swapBackValueMin,
        uint256 swapBackValueMax
    );
    event MaxTxUpdated(uint256 maxTx);
    event MaxWalletUpdated(uint256 maxWallet);

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

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

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

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event BuyFeeUpdated(
        uint256 totalBuyFee,
        uint256 buyMarketingFee,
        uint256 buyLPFee,
        uint256 buyDevelopmentFee
    );

    event SellFeeUpdated(
        uint256 totalSellFee,
        uint256 sellMarketingFee,
        uint256 sellLpFee,
        uint256 sellDevelopmentFee
    );

    event TransferFeeUpdated(
        uint256 totalTransferFee,
        uint256 transferMarketingFee,
        uint256 transferLpFee,
        uint256 transferDevelopmentFee
    );

    constructor() ERC20("Starlink AI", "STAI") {
        IDexRouter _dexRouter = IDexRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        lastSync = block.timestamp;

        excludeFromMaxTransaction(address(_dexRouter), true);
        dexRouter = _dexRouter;

        dexPair = IDexFactory(_dexRouter.factory()).createPair(
            address(this),
            _dexRouter.WETH()
        );
        excludeFromMaxTransaction(address(dexPair), true);
        _setAutomatedMarketMakerPair(address(dexPair), true);

        uint256 _buyMarketingFee = 15;
        uint256 _buyLPFee = 0;
        uint256 _buyDevelopmentFee = 15;

        uint256 _sellMarketingFee = 15;
        uint256 _sellLpFee = 0;
        uint256 _sellDevelopmentFee = 15;

        uint256 _transferMarketingFee = 5;
        uint256 _transferLpFee =  0;
        uint256 _transferDevelopmentFee = 0;

        uint256 totalSupply = 100000000 * 10 ** decimals();

        maxTx = (totalSupply * 20) / 1000;
        maxWallet = (totalSupply * 20) / 1000;

        swapBackValueMin = (totalSupply * 2) / 1000;
        swapBackValueMax = (totalSupply * 30) / 1000;

        buyMarketingFee = _buyMarketingFee;
        buyLPFee = _buyLPFee;
        buyDevelopmentFee = _buyDevelopmentFee;
        totalBuyFee = buyMarketingFee + buyLPFee + buyDevelopmentFee;

        sellMarketingFee = _sellMarketingFee;
        sellLpFee = _sellLpFee;
        sellDevelopmentFee = _sellDevelopmentFee;
        totalSellFee = sellMarketingFee + sellLpFee + sellDevelopmentFee;

        transferMarketingFee = _transferMarketingFee;
        transferLpFee = _transferLpFee;
        transferDevelopmentFee = _transferDevelopmentFee;
        totalTransferFee = transferMarketingFee + transferLpFee + transferDevelopmentFee;

        MarketingReceiver = address(0x4097dA26a9f8b919CeAf0C39B45eD2C84f54b44f);
        devReceiver = address(0x6d5B096966856d992756F530eaDE4dC550A04346);
        autoLPReceiver = address(0x6d5B096966856d992756F530eaDE4dC550A04346);

        // exclude from paying fees or having max transaction amount
        excludeFromFees(theDeployer, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFromMaxTransaction(theDeployer, true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        excludeFromMaxTransaction(autoLPReceiver, true);

        transferOwnership(theDeployer);

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

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

    /**
     * @notice  Information about the swapback settings
     * @return  _swapbackEnabled  if swapback is enabled
     * @return  _swapBackValueMin  the minimum amount of tokens in the contract balance to trigger swapback
     * @return  _swapBackValueMax  the maximum amount of tokens in the contract balance to trigger swapback
     */
    function swapbackInfo()
        external
        view
        returns (
            bool _swapbackEnabled,
            uint256 _swapBackValueMin,
            uint256 _swapBackValueMax
        )
    {
        _swapbackEnabled = swapbackEnabled;
        _swapBackValueMin = swapBackValueMin;
        _swapBackValueMax = swapBackValueMax;
    }

    function antiWhaleInfo()
        external
        view
        returns (
            bool _limitsInEffect,
            bool _trasnferDelayEnabled,
            uint256 _maxWallet,
            uint256 _maxTx
        )
    {
        _limitsInEffect = limitsInEffect;
        _trasnferDelayEnabled = trasnferDelayEnabled;
        _maxWallet = maxWallet;
        _maxTx = maxTx;
    }

    function feeReceivers()
        external
        view
        returns (
            address _autoLPReceiver,
            address _MarketingReceiver,
            address _devReceiver
        )
    {
        return (autoLPReceiver, MarketingReceiver, devReceiver);
    }

    function feeRates()
        external
        view
        returns (
            uint256 _totalBuyFee,
            uint256 _buyMarketingFee,
            uint256 _buyLPFee,
            uint256 _buyDevelopmentFee,
            uint256 _totalSellFee,
            uint256 _sellMarketingFee,
            uint256 _sellLpFee,
            uint256 _sellDevelopmentFee,
            uint256 _totalTransferFee,
            uint256 _transferMarketingFee,
            uint256 _transferLpFee,
            uint256 _transferDevelopmentFee
        )
    {
        _totalBuyFee = totalBuyFee;
        _buyMarketingFee = buyMarketingFee;
        _buyLPFee = buyLPFee;
        _buyDevelopmentFee = buyDevelopmentFee;
        _totalSellFee = totalSellFee;
        _sellMarketingFee = sellMarketingFee;
        _sellLpFee = sellLpFee;
        _sellDevelopmentFee = sellDevelopmentFee;
        _totalTransferFee = totalTransferFee;
        _transferMarketingFee = transferMarketingFee;
        _transferLpFee = transferLpFee;
        _transferDevelopmentFee = transferDevelopmentFee;
    }

    /**
     * @notice  If the wallet is excluded from fees and max transaction amount and if the wallet is a automated market maker pair
     * @param   _target  The wallet to check
     * @return  _isFeeExempt  If the wallet is excluded from fees
     * @return  _isTxLimitExempt  If the wallet is excluded from max transaction amount
     * @return  _automatedMarketMakerPairs If the wallet is a automated market maker pair
     */
    function checkAddressPermissions(
        address _target
    )
        external
        view
        returns (
            bool _isFeeExempt,
            bool _isTxLimitExempt,
            bool _automatedMarketMakerPairs
        )
    {
        _isFeeExempt = isFeeExempt[_target];
        _isTxLimitExempt = isTxLimitExempt[_target];
        _automatedMarketMakerPairs = automatedMarketMakerPairs[_target];
    }

    /**
     * @notice Information related to the burn function
     * @return _burnEnabled If burn is enabled
     * @return _lastSync The last time burn was called
     */
    function burnInfo() external view returns (bool _burnEnabled, uint256 _lastSync) {
        _burnEnabled = burnEnabled;
        _lastSync = lastSync;
    }

    receive() external payable {}

    /**
     * @notice  Opens public trading for the token
     * @dev     onlyOwner.
     */
    function openTrading() external onlyOwner {
        tradingOn = true;
        swapbackEnabled = true;
        emit TradingEnabled(block.timestamp);
    }

    function RemoveLimits() external onlyOwner {
        limitsInEffect = false;
        emit LimitsRemoved(block.timestamp);
    }

    function disableTransferDelay() external onlyOwner {
        trasnferDelayEnabled = false;
        emit DisabledTransferDelay(block.timestamp);
    }

    function setSwapBackSettings(
        bool _enabled,
        uint256 _min,
        uint256 _max
    ) external onlyOwner {
        require(
            _min >= 1,
            "Swap amount cannot be lower than 0.1% total supply."
        );
        require(_max >= _min, "maximum amount cant be higher than minimum");

        swapbackEnabled = _enabled;
        swapBackValueMin = (totalSupply() * _min) / 1000;
        swapBackValueMax = (totalSupply() * _max) / 1000;
        emit SwapbackSettingsUpdated(_enabled, _min, _max);
    }

    /**
     * @notice Changes the maximum amount of tokens that can be bought or sold in a single transaction
     * @dev onlyOwner.
     * Emits an {MaxTxUpdated} event
     * @param newNum Base 1000, so 1% = 10
     */
    function setTxLimit(uint256 newNum) external onlyOwner {
        require(newNum >= 1, "Cannot set maxTx lower than 0.1%");
        maxTx = (newNum * totalSupply()) / 1000;
        emit MaxTxUpdated(maxTx);
    }

    /**
     * @notice Changes the maximum amount of tokens a wallet can hold
     * @dev onlyOwner.
     * Emits an {MaxWalletUpdated} event
     * @param newNum Base 1000, so 1% = 10
     */
    function setWalletLimit(uint256 newNum) external onlyOwner {
        require(newNum >= 5, "Cannot set maxWallet lower than 0.5%");
        maxWallet = (newNum * totalSupply()) / 1000;
        emit MaxWalletUpdated(maxWallet);
    }

    /**
     * @notice Sets if a wallet is excluded from the max wallet and tx limits
     * @dev onlyOwner.
     * Emits an {ExcludeFromLimits} event
     * @param updAds The wallet to update
     * @param isEx If the wallet is excluded or not
     */
    function excludeFromMaxTransaction(
        address updAds,
        bool isEx
    ) public onlyOwner {
        isTxLimitExempt[updAds] = isEx;
        emit ExcludeFromLimits(updAds, isEx);
    }

    function setBuyFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _DevelopmentFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLPFee = _liquidityFee;
        buyDevelopmentFee = _DevelopmentFee;
        totalBuyFee = buyMarketingFee + buyLPFee + buyDevelopmentFee;
        require(totalBuyFee <= 40, "Total buy fee cannot be higher than 40%");
        emit BuyFeeUpdated(totalBuyFee, buyMarketingFee, buyLPFee, buyDevelopmentFee);
    }

    function setSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _DevelopmentFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLpFee = _liquidityFee;
        sellDevelopmentFee = _DevelopmentFee;
        totalSellFee = sellMarketingFee + sellLpFee + sellDevelopmentFee;
        require(
            totalSellFee <= 40,
            "Total sell fee cannot be higher than 40%"
        );
        emit SellFeeUpdated(totalSellFee, sellMarketingFee, sellLpFee, sellDevelopmentFee);
    }

    function setTransferFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _DevelopmentFee
    ) external onlyOwner {
        transferMarketingFee = _marketingFee;
        transferLpFee = _liquidityFee;
        transferDevelopmentFee = _DevelopmentFee;
        totalTransferFee = transferMarketingFee + transferLpFee + transferDevelopmentFee;
        require(
            totalTransferFee <= 6,
            "Total transfer fee cannot be higher than 6%"
        );
        emit TransferFeeUpdated(
            totalTransferFee,
            transferMarketingFee,
            transferLpFee,
            transferDevelopmentFee
        );
    }

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    /**
     * @notice Sets the marketing wallet
     * @dev onlyOwner.
     * Emits an {MarketingReceiverUpdated} event
     * @param newWallet The new marketing wallet
     */
    function setMarketingWallet(address newWallet) external onlyOwner {
        emit MarketingReceiverUpdated(newWallet, MarketingReceiver);
        MarketingReceiver = newWallet;
    }

    /**
     * @notice Sets the LP receiver
     * @dev onlyOwner.
     * Emits an {lpReceiverUpdated} event
     * @param newWallet The new dev wallet
     */
    function setLPWallet(address newWallet) external onlyOwner {
        emit lpReceiverUpdated(newWallet, autoLPReceiver);
        autoLPReceiver = newWallet;
    }

    /**
     * @notice Sets the dev wallet
     * @dev onlyOwner.
     * Emits an {devReceiverUpdated} event
     * @param newWallet The new dev wallet
     */
    function setDevWallet(address newWallet) external onlyOwner {
        emit devReceiverUpdated(newWallet, devReceiver);
        devReceiver = newWallet;
    }

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

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

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingOn) {
                    require(
                        isFeeExempt[from] || isFeeExempt[to],
                        "Trading is not active."
                    );
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (trasnferDelayEnabled) {
                    if (
                        to != owner() &&
                        to != address(dexRouter) &&
                        to != address(dexPair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number,
                            "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }

                //when buy
                if (automatedMarketMakerPairs[from] && !isTxLimitExempt[to]) {
                    require(
                        amount <= maxTx,
                        "Buy transfer amount exceeds the maxTx."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] && !isTxLimitExempt[from]
                ) {
                    require(
                        amount <= maxTx,
                        "Sell transfer amount exceeds the maxTx."
                    );
                } else if (!isTxLimitExempt[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapBackValueMin;

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

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (isFeeExempt[from] || isFeeExempt[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] && totalSellFee > 0) {
                fees = amount.mul(totalSellFee).div(100);
                tokensForLiquidity += (fees * sellLpFee) / totalSellFee;
                tokensForDev += (fees * sellDevelopmentFee) / totalSellFee;
                tokensForMarketing += (fees * sellMarketingFee) / totalSellFee;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && totalBuyFee > 0) {
                fees = amount.mul(totalBuyFee).div(100);
                tokensForLiquidity += (fees * buyLPFee) / totalBuyFee;
                tokensForDev += (fees * buyDevelopmentFee) / totalBuyFee;
                tokensForMarketing += (fees * buyMarketingFee) / totalBuyFee;
            }
            // on transfer
            else if (totalTransferFee > 0) {
                fees = amount.mul(totalTransferFee).div(100);
                tokensForLiquidity += (fees * transferLpFee) / totalTransferFee;
                tokensForDev += (fees * transferDevelopmentFee) / totalTransferFee;
                tokensForMarketing +=
                    (fees * transferMarketingFee) /
                    totalTransferFee;
            }

            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] = dexRouter.WETH();

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

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

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

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

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity +
            tokensForMarketing +
            tokensForDev;
        bool success;

        if (contractBalance == 0) {
            return;
        }

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

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap /
            2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(
            totalTokensToSwap
        );
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);

        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;

        (success, ) = address(devReceiver).call{value: ethForDev}("");

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totalBuyFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyMarketingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyLPFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyDevelopmentFee","type":"uint256"}],"name":"BuyFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"DisabledTransferDelay","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"LimitsRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"MarketingReceiverUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTx","type":"uint256"}],"name":"MaxTxUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"MaxWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"theDeployer","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totalSellFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellMarketingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellLpFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellDevelopmentFee","type":"uint256"}],"name":"SellFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"},{"indexed":false,"internalType":"uint256","name":"swapBackValueMin","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapBackValueMax","type":"uint256"}],"name":"SwapbackSettingsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TradingEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totalTransferFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"transferMarketingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"transferLpFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"transferDevelopmentFee","type":"uint256"}],"name":"TransferFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devReceiverUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"lpReceiverUpdated","type":"event"},{"inputs":[],"name":"RemoveLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"antiWhaleInfo","outputs":[{"internalType":"bool","name":"_limitsInEffect","type":"bool"},{"internalType":"bool","name":"_trasnferDelayEnabled","type":"bool"},{"internalType":"uint256","name":"_maxWallet","type":"uint256"},{"internalType":"uint256","name":"_maxTx","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnInfo","outputs":[{"internalType":"bool","name":"_burnEnabled","type":"bool"},{"internalType":"uint256","name":"_lastSync","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"}],"name":"checkAddressPermissions","outputs":[{"internalType":"bool","name":"_isFeeExempt","type":"bool"},{"internalType":"bool","name":"_isTxLimitExempt","type":"bool"},{"internalType":"bool","name":"_automatedMarketMakerPairs","type":"bool"}],"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":"dexPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","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":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeRates","outputs":[{"internalType":"uint256","name":"_totalBuyFee","type":"uint256"},{"internalType":"uint256","name":"_buyMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_buyLPFee","type":"uint256"},{"internalType":"uint256","name":"_buyDevelopmentFee","type":"uint256"},{"internalType":"uint256","name":"_totalSellFee","type":"uint256"},{"internalType":"uint256","name":"_sellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_sellLpFee","type":"uint256"},{"internalType":"uint256","name":"_sellDevelopmentFee","type":"uint256"},{"internalType":"uint256","name":"_totalTransferFee","type":"uint256"},{"internalType":"uint256","name":"_transferMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_transferLpFee","type":"uint256"},{"internalType":"uint256","name":"_transferDevelopmentFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeReceivers","outputs":[{"internalType":"address","name":"_autoLPReceiver","type":"address"},{"internalType":"address","name":"_MarketingReceiver","type":"address"},{"internalType":"address","name":"_devReceiver","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_DevelopmentFee","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setLPWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_DevelopmentFee","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_min","type":"uint256"},{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_DevelopmentFee","type":"uint256"}],"name":"setTransferFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"setWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapbackInfo","outputs":[{"internalType":"bool","name":"_swapbackEnabled","type":"bool"},{"internalType":"uint256","name":"_swapBackValueMin","type":"uint256"},{"internalType":"uint256","name":"_swapBackValueMax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOn","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":"theDeployer","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040527309cc746fbd4b8d85bd4bd2eab9686e7889aba5a7600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600660156101000a81548160ff0219169083151502179055506001600960006101000a81548160ff0219169083151502179055506001600960016101000a81548160ff0219169083151502179055506000600d60006101000a81548160ff0219169083151502179055506001600d60016101000a81548160ff0219169083151502179055506000600e55348015620000f257600080fd5b506040518060400160405280600b81526020017f537461726c696e6b2041490000000000000000000000000000000000000000008152506040518060400160405280600481526020017f53544149000000000000000000000000000000000000000000000000000000008152508160039081620001709190620010f5565b508060049081620001829190620010f5565b505050620001a562000199620007ce60201b60201c565b620007d660201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905042600e81905550620001d88160016200089c60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000258573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200027e919062001246565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030c919062001246565b6040518363ffffffff1660e01b81526004016200032b92919062001289565b6020604051808303816000875af11580156200034b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000371919062001246565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003b960a05160016200089c60201b60201c565b620003ce60a0516001620009d660201b60201c565b6000600f9050600080600f90506000600f9050600080600f905060006005905060008060006200040362000a7760201b60201c565b600a62000411919062001446565b6305f5e10062000422919062001497565b90506103e860148262000436919062001497565b62000442919062001511565b600b819055506103e86014826200045a919062001497565b62000466919062001511565b600a819055506103e86002826200047e919062001497565b6200048a919062001511565b6007819055506103e8601e82620004a2919062001497565b620004ae919062001511565b600881905550896013819055508860148190555087601581905550601554601454601354620004de919062001549565b620004ea919062001549565b6012819055508660178190555085601881905550846019819055506019546018546017546200051a919062001549565b62000526919062001549565b60168190555083601b8190555082601c8190555081601d81905550601d54601c54601b5462000556919062001549565b62000562919062001549565b601a81905550734097da26a9f8b919ceaf0c39b45ed2c84f54b44f601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550736d5b096966856d992756f530eade4dc550a04346601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550736d5b096966856d992756f530eade4dc550a04346600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200069c600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600162000a8060201b60201c565b620006af30600162000a8060201b60201c565b620006c461dead600162000a8060201b60201c565b620006f9600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200089c60201b60201c565b6200070c3060016200089c60201b60201c565b6200072161dead60016200089c60201b60201c565b62000756600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200089c60201b60201c565b62000789600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1662000bba60201b60201c565b620007bd600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168262000ccf60201b60201c565b505050505050505050505062001779565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620008ac620007ce60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620008d262000e4760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200092b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200092290620015e5565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9282604051620009ca919062001624565b60405180910390a25050565b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60006012905090565b62000a90620007ce60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000ab662000e4760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000b0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b0690620015e5565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000bae919062001624565b60405180910390a25050565b62000bca620007ce60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000bf062000e4760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000c49576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c4090620015e5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000cbb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000cb290620016b7565b60405180910390fd5b62000ccc81620007d660201b60201c565b50565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000d41576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d389062001729565b60405180910390fd5b62000d556000838362000e7160201b60201c565b806002600082825462000d69919062001549565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000dc0919062001549565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000e2791906200175c565b60405180910390a362000e436000838362000e7660201b60201c565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000efd57607f821691505b60208210810362000f135762000f1262000eb5565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000f7d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000f3e565b62000f89868362000f3e565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000fd662000fd062000fca8462000fa1565b62000fab565b62000fa1565b9050919050565b6000819050919050565b62000ff28362000fb5565b6200100a620010018262000fdd565b84845462000f4b565b825550505050565b600090565b6200102162001012565b6200102e81848462000fe7565b505050565b5b8181101562001056576200104a60008262001017565b60018101905062001034565b5050565b601f821115620010a5576200106f8162000f19565b6200107a8462000f2e565b810160208510156200108a578190505b620010a2620010998562000f2e565b83018262001033565b50505b505050565b600082821c905092915050565b6000620010ca60001984600802620010aa565b1980831691505092915050565b6000620010e58383620010b7565b9150826002028217905092915050565b620011008262000e7b565b67ffffffffffffffff8111156200111c576200111b62000e86565b5b62001128825462000ee4565b620011358282856200105a565b600060209050601f8311600181146200116d576000841562001158578287015190505b620011648582620010d7565b865550620011d4565b601f1984166200117d8662000f19565b60005b82811015620011a75784890151825560018201915060208501945060208101905062001180565b86831015620011c75784890151620011c3601f891682620010b7565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200120e82620011e1565b9050919050565b620012208162001201565b81146200122c57600080fd5b50565b600081519050620012408162001215565b92915050565b6000602082840312156200125f576200125e620011dc565b5b60006200126f848285016200122f565b91505092915050565b620012838162001201565b82525050565b6000604082019050620012a0600083018562001278565b620012af602083018462001278565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562001344578086048111156200131c576200131b620012b6565b5b60018516156200132c5780820291505b80810290506200133c85620012e5565b9450620012fc565b94509492505050565b6000826200135f576001905062001432565b816200136f576000905062001432565b81600181146200138857600281146200139357620013c9565b600191505062001432565b60ff841115620013a857620013a7620012b6565b5b8360020a915084821115620013c257620013c1620012b6565b5b5062001432565b5060208310610133831016604e8410600b8410161715620014035782820a905083811115620013fd57620013fc620012b6565b5b62001432565b620014128484846001620012f2565b925090508184048111156200142c576200142b620012b6565b5b81810290505b9392505050565b600060ff82169050919050565b6000620014538262000fa1565b9150620014608362001439565b92506200148f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200134d565b905092915050565b6000620014a48262000fa1565b9150620014b18362000fa1565b9250828202620014c18162000fa1565b91508282048414831517620014db57620014da620012b6565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200151e8262000fa1565b91506200152b8362000fa1565b9250826200153e576200153d620014e2565b5b828204905092915050565b6000620015568262000fa1565b9150620015638362000fa1565b92508282019050808211156200157e576200157d620012b6565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620015cd60208362001584565b9150620015da8262001595565b602082019050919050565b600060208201905081810360008301526200160081620015be565b9050919050565b60008115159050919050565b6200161e8162001607565b82525050565b60006020820190506200163b600083018462001613565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006200169f60268362001584565b9150620016ac8262001641565b604082019050919050565b60006020820190508181036000830152620016d28162001690565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001711601f8362001584565b91506200171e82620016d9565b602082019050919050565b60006020820190508181036000830152620017448162001702565b9050919050565b620017568162000fa1565b82525050565b60006020820190506200177360008301846200174b565b92915050565b60805160a0516153c8620017d060003960008181611803015281816121a9015261285b015260008181612803015281816139a501528181613a8601528181613aad01528181613b490152613b7001526153c86000f3fe60806040526004361061021e5760003560e01c80637688c58411610123578063c0246668116100ab578063e884f2601161006f578063e884f260146107dd578063f1d5f517146107f4578063f242ab411461081d578063f2fde38b14610848578063fd1bc2ca1461087157610225565b8063c02466681461070a578063c9567bf914610733578063d08893581461074a578063dd62ed3e14610773578063dd9cdaed146107b057610225565b80639a7a23d6116100f25780639a7a23d614610611578063a457c2d71461063a578063a9059cbb14610677578063ae7ed567146106b4578063bfd201f5146106e157610225565b80637688c584146105595780638da5cb5b1461058f5780639374ae82146105ba57806395d89b41146105e657610225565b806339509351116101a65780635c85974f116101755780635c85974f1461048a5780635d098b38146104b357806370a08231146104dc578063715018a6146105195780637571336a1461053057610225565b806339509351146103df5780633b0aacbc1461041c5780633ff5ad781461044557806356cd40e71461047357610225565b806318160ddd116101ed57806318160ddd146102e45780631cffccf41461030f5780631f53ac021461034e57806323b872dd14610377578063313ce567146103b457610225565b806306fdde031461022a578063095ea7b3146102555780630d075d9c146102925780630f683e90146102bb57610225565b3661022557005b600080fd5b34801561023657600080fd5b5061023f61089c565b60405161024c9190613ccf565b60405180910390f35b34801561026157600080fd5b5061027c60048036038101906102779190613d8a565b61092e565b6040516102899190613de5565b60405180910390f35b34801561029e57600080fd5b506102b960048036038101906102b49190613e00565b61094c565b005b3480156102c757600080fd5b506102e260048036038101906102dd9190613e00565b610a90565b005b3480156102f057600080fd5b506102f9610bd4565b6040516103069190613e62565b60405180910390f35b34801561031b57600080fd5b5061033660048036038101906103319190613e7d565b610bde565b60405161034593929190613eaa565b60405180910390f35b34801561035a57600080fd5b5061037560048036038101906103709190613e7d565b610cd7565b005b34801561038357600080fd5b5061039e60048036038101906103999190613ee1565b610e13565b6040516103ab9190613de5565b60405180910390f35b3480156103c057600080fd5b506103c9610f0b565b6040516103d69190613f50565b60405180910390f35b3480156103eb57600080fd5b5061040660048036038101906104019190613d8a565b610f14565b6040516104139190613de5565b60405180910390f35b34801561042857600080fd5b50610443600480360381019061043e9190613e7d565b610fc0565b005b34801561045157600080fd5b5061045a6110fc565b60405161046a9493929190613f6b565b60405180910390f35b34801561047f57600080fd5b50610488611136565b005b34801561049657600080fd5b506104b160048036038101906104ac9190613fb0565b6111fc565b005b3480156104bf57600080fd5b506104da60048036038101906104d59190613e7d565b61131e565b005b3480156104e857600080fd5b5061050360048036038101906104fe9190613e7d565b61145a565b6040516105109190613e62565b60405180910390f35b34801561052557600080fd5b5061052e6114a2565b005b34801561053c57600080fd5b5061055760048036038101906105529190614009565b61152a565b005b34801561056557600080fd5b5061056e61164f565b6040516105869c9b9a99989796959493929190614049565b60405180910390f35b34801561059b57600080fd5b506105a46116ab565b6040516105b19190614112565b60405180910390f35b3480156105c657600080fd5b506105cf6116d5565b6040516105dd92919061412d565b60405180910390f35b3480156105f257600080fd5b506105fb6116f3565b6040516106089190613ccf565b60405180910390f35b34801561061d57600080fd5b5061063860048036038101906106339190614009565b611785565b005b34801561064657600080fd5b50610661600480360381019061065c9190613d8a565b61189d565b60405161066e9190613de5565b60405180910390f35b34801561068357600080fd5b5061069e60048036038101906106999190613d8a565b611988565b6040516106ab9190613de5565b60405180910390f35b3480156106c057600080fd5b506106c96119a6565b6040516106d893929190614156565b60405180910390f35b3480156106ed57600080fd5b5061070860048036038101906107039190613e00565b6119cc565b005b34801561071657600080fd5b50610731600480360381019061072c9190614009565b611b10565b005b34801561073f57600080fd5b50610748611c35565b005b34801561075657600080fd5b50610771600480360381019061076c919061418d565b611d16565b005b34801561077f57600080fd5b5061079a600480360381019061079591906141e0565b611ebf565b6040516107a79190613e62565b60405180910390f35b3480156107bc57600080fd5b506107c5611f46565b6040516107d493929190614220565b60405180910390f35b3480156107e957600080fd5b506107f2611fbf565b005b34801561080057600080fd5b5061081b60048036038101906108169190613fb0565b612085565b005b34801561082957600080fd5b506108326121a7565b60405161083f9190614112565b60405180910390f35b34801561085457600080fd5b5061086f600480360381019061086a9190613e7d565b6121cb565b005b34801561087d57600080fd5b506108866122c2565b6040516108939190613de5565b60405180910390f35b6060600380546108ab90614286565b80601f01602080910402602001604051908101604052809291908181526020018280546108d790614286565b80156109245780601f106108f957610100808354040283529160200191610924565b820191906000526020600020905b81548152906001019060200180831161090757829003601f168201915b5050505050905090565b600061094261093b6122d5565b84846122dd565b6001905092915050565b6109546122d5565b73ffffffffffffffffffffffffffffffffffffffff166109726116ab565b73ffffffffffffffffffffffffffffffffffffffff16146109c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109bf90614303565b60405180910390fd5b8260138190555081601481905550806015819055506015546014546013546109f09190614352565b6109fa9190614352565b60128190555060286012541115610a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3d906143f8565b60405180910390fd5b7f3d839c4d8187eded7cfbdfb38e8c68ae748d7c674400c8c3b8c837ba2933d1ac601254601354601454601554604051610a839493929190614418565b60405180910390a1505050565b610a986122d5565b73ffffffffffffffffffffffffffffffffffffffff16610ab66116ab565b73ffffffffffffffffffffffffffffffffffffffff1614610b0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0390614303565b60405180910390fd5b826017819055508160188190555080601981905550601954601854601754610b349190614352565b610b3e9190614352565b60168190555060286016541115610b8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b81906144cf565b60405180910390fd5b7f5453929bc359b94bdd2542a6d8391ca15fe386d74f044db5277328a36de3c650601654601754601854601954604051610bc79493929190614418565b60405180910390a1505050565b6000600254905090565b6000806000602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169250602260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169150602360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690509193909250565b610cdf6122d5565b73ffffffffffffffffffffffffffffffffffffffff16610cfd6116ab565b73ffffffffffffffffffffffffffffffffffffffff1614610d53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4a90614303565b60405180910390fd5b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fc246820312f1be47e3958d661d0c150c01b96d1fe3df1e38edd76693ffa8122b60405160405180910390a380601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610e208484846124a6565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e6b6122d5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610eeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee290614561565b60405180910390fd5b610eff85610ef76122d5565b8584036122dd565b60019150509392505050565b60006012905090565b6000610fb6610f216122d5565b848460016000610f2f6122d5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610fb19190614352565b6122dd565b6001905092915050565b610fc86122d5565b73ffffffffffffffffffffffffffffffffffffffff16610fe66116ab565b73ffffffffffffffffffffffffffffffffffffffff161461103c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103390614303565b60405180910390fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f1c3fdcf16dce794746858765f6acfdac41e7355deba3a0d04cef33a3710ca47c60405160405180910390a380600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080600080600960009054906101000a900460ff169350600960019054906101000a900460ff169250600a549150600b54905090919293565b61113e6122d5565b73ffffffffffffffffffffffffffffffffffffffff1661115c6116ab565b73ffffffffffffffffffffffffffffffffffffffff16146111b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a990614303565b60405180910390fd5b6000600960006101000a81548160ff021916908315150217905550427ff4eaa75eae08ae80c3daf791438dac1cff2cfd3b0bad2304ec7bbb067e50261660405160405180910390a2565b6112046122d5565b73ffffffffffffffffffffffffffffffffffffffff166112226116ab565b73ffffffffffffffffffffffffffffffffffffffff1614611278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126f90614303565b60405180910390fd5b60018110156112bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b3906145cd565b60405180910390fd5b6103e86112c7610bd4565b826112d291906145ed565b6112dc919061465e565b600b819055507fff3dd5e80294197918c284bbfc3dadd97d0b40ce92106110946329088f80068a600b546040516113139190613e62565b60405180910390a150565b6113266122d5565b73ffffffffffffffffffffffffffffffffffffffff166113446116ab565b73ffffffffffffffffffffffffffffffffffffffff161461139a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139190614303565b60405180910390fd5b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f6561b9230f88b321fdeb59c7270bbc86bff9cc287436017533bb79146b13fa5a60405160405180910390a380601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114aa6122d5565b73ffffffffffffffffffffffffffffffffffffffff166114c86116ab565b73ffffffffffffffffffffffffffffffffffffffff161461151e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151590614303565b60405180910390fd5b6115286000613211565b565b6115326122d5565b73ffffffffffffffffffffffffffffffffffffffff166115506116ab565b73ffffffffffffffffffffffffffffffffffffffff16146115a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159d90614303565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc92826040516116439190613de5565b60405180910390a25050565b6000806000806000806000806000806000806012549b506013549a50601454995060155498506016549750601754965060185495506019549450601a549350601b549250601c549150601d549050909192939495969798999a9b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080600d60019054906101000a900460ff169150600e5490509091565b60606004805461170290614286565b80601f016020809104026020016040519081016040528092919081815260200182805461172e90614286565b801561177b5780601f106117505761010080835404028352916020019161177b565b820191906000526020600020905b81548152906001019060200180831161175e57829003601f168201915b5050505050905090565b61178d6122d5565b73ffffffffffffffffffffffffffffffffffffffff166117ab6116ab565b73ffffffffffffffffffffffffffffffffffffffff1614611801576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f890614303565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361188f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188690614701565b60405180910390fd5b61189982826132d7565b5050565b600080600160006118ac6122d5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611969576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196090614793565b60405180910390fd5b61197d6119746122d5565b858584036122dd565b600191505092915050565b600061199c6119956122d5565b84846124a6565b6001905092915050565b6000806000600660159054906101000a900460ff16925060075491506008549050909192565b6119d46122d5565b73ffffffffffffffffffffffffffffffffffffffff166119f26116ab565b73ffffffffffffffffffffffffffffffffffffffff1614611a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3f90614303565b60405180910390fd5b82601b8190555081601c8190555080601d81905550601d54601c54601b54611a709190614352565b611a7a9190614352565b601a819055506006601a541115611ac6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abd90614825565b60405180910390fd5b7f29ca25f871e92385edcc1db1ce9c82a11549def46dbee1cff41bbed1dcac6ecb601a54601b54601c54601d54604051611b039493929190614418565b60405180910390a1505050565b611b186122d5565b73ffffffffffffffffffffffffffffffffffffffff16611b366116ab565b73ffffffffffffffffffffffffffffffffffffffff1614611b8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8390614303565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611c299190613de5565b60405180910390a25050565b611c3d6122d5565b73ffffffffffffffffffffffffffffffffffffffff16611c5b6116ab565b73ffffffffffffffffffffffffffffffffffffffff1614611cb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca890614303565b60405180910390fd5b6001600d60006101000a81548160ff0219169083151502179055506001600660156101000a81548160ff021916908315150217905550427fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e92360405160405180910390a2565b611d1e6122d5565b73ffffffffffffffffffffffffffffffffffffffff16611d3c6116ab565b73ffffffffffffffffffffffffffffffffffffffff1614611d92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8990614303565b60405180910390fd5b6001821015611dd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcd906148b7565b60405180910390fd5b81811015611e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1090614949565b60405180910390fd5b82600660156101000a81548160ff0219169083151502179055506103e882611e3f610bd4565b611e4991906145ed565b611e53919061465e565b6007819055506103e881611e65610bd4565b611e6f91906145ed565b611e79919061465e565b6008819055507f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c779838383604051611eb293929190614156565b60405180910390a1505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000806000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16925092509250909192565b611fc76122d5565b73ffffffffffffffffffffffffffffffffffffffff16611fe56116ab565b73ffffffffffffffffffffffffffffffffffffffff161461203b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203290614303565b60405180910390fd5b6000600960016101000a81548160ff021916908315150217905550427f26e776fcf7ca20aa79b5b946e9b5111f47205539ece9d7a7995271dd6a8b5bad60405160405180910390a2565b61208d6122d5565b73ffffffffffffffffffffffffffffffffffffffff166120ab6116ab565b73ffffffffffffffffffffffffffffffffffffffff1614612101576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f890614303565b60405180910390fd5b6005811015612145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213c906149db565b60405180910390fd5b6103e8612150610bd4565b8261215b91906145ed565b612165919061465e565b600a819055507f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace600a5460405161219c9190613e62565b60405180910390a150565b7f000000000000000000000000000000000000000000000000000000000000000081565b6121d36122d5565b73ffffffffffffffffffffffffffffffffffffffff166121f16116ab565b73ffffffffffffffffffffffffffffffffffffffff1614612247576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223e90614303565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036122b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ad90614a6d565b60405180910390fd5b6122bf81613211565b50565b600d60009054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361234c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234390614aff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b290614b91565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124999190613e62565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612515576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250c90614c23565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612584576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257b90614cb5565b60405180910390fd5b6000810361259d5761259883836000613378565b61320c565b600960009054906101000a900460ff1615612c60576125ba6116ab565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561262857506125f86116ab565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126615750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561269b575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126b45750600660149054906101000a900460ff16155b15612c5f57600d60009054906101000a900460ff166127ae57602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061276e5750602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6127ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a490614d21565b60405180910390fd5b5b600960019054906101000a900460ff1615612976576127cb6116ab565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561285257507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128aa57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156129755743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612930576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292790614dd9565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a195750602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ac057600b54811115612a63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5a90614e6b565b60405180910390fd5b600a54612a6f8361145a565b82612a7a9190614352565b1115612abb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab290614ed7565b60405180910390fd5b612c5e565b602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b635750602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612bb257600b54811115612bad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ba490614f69565b60405180910390fd5b612c5d565b602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612c5c57600a54612c0f8361145a565b82612c1a9190614352565b1115612c5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5290614ed7565b60405180910390fd5b5b5b5b5b5b6000612c6b3061145a565b905060006007548210159050808015612c905750600660159054906101000a900460ff165b8015612ca95750600660149054906101000a900460ff16155b8015612cff5750602360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d555750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612dab5750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612def576001600660146101000a81548160ff021916908315150217905550612dd36135f7565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ea55750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612eaf57600090505b600081156131fc57602360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f1257506000601654115b15612fdf57612f3f6064612f31601654886138ba90919063ffffffff16565b6138d090919063ffffffff16565b905060165460185482612f5291906145ed565b612f5c919061465e565b601f6000828254612f6d9190614352565b9250508190555060165460195482612f8591906145ed565b612f8f919061465e565b60206000828254612fa09190614352565b9250508190555060165460175482612fb891906145ed565b612fc2919061465e565b601e6000828254612fd39190614352565b925050819055506131d8565b602360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561303a57506000601254115b15613107576130676064613059601254886138ba90919063ffffffff16565b6138d090919063ffffffff16565b90506012546014548261307a91906145ed565b613084919061465e565b601f60008282546130959190614352565b92505081905550601254601554826130ad91906145ed565b6130b7919061465e565b602060008282546130c89190614352565b92505081905550601254601354826130e091906145ed565b6130ea919061465e565b601e60008282546130fb9190614352565b925050819055506131d7565b6000601a5411156131d65761313a606461312c601a54886138ba90919063ffffffff16565b6138d090919063ffffffff16565b9050601a54601c548261314d91906145ed565b613157919061465e565b601f60008282546131689190614352565b92505081905550601a54601d548261318091906145ed565b61318a919061465e565b6020600082825461319b9190614352565b92505081905550601a54601b54826131b391906145ed565b6131bd919061465e565b601e60008282546131ce9190614352565b925050819055505b5b5b60008111156131ed576131ec873083613378565b5b80856131f99190614f89565b94505b613207878787613378565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036133e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133de90614c23565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161344d90614cb5565b60405180910390fd5b6134618383836138e6565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156134e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134de9061502f565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461357a9190614352565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516135de9190613e62565b60405180910390a36135f18484846138eb565b50505050565b60006136023061145a565b90506000602054601e54601f546136199190614352565b6136239190614352565b90506000808303613636575050506138b8565b6008548311156136465760085492505b6000600283601f548661365991906145ed565b613663919061465e565b61366d919061465e565b9050600061368482866138f090919063ffffffff16565b9050600047905061369482613906565b60006136a982476138f090919063ffffffff16565b905060006136d4876136c6601e54856138ba90919063ffffffff16565b6138d090919063ffffffff16565b905060006136ff886136f1602054866138ba90919063ffffffff16565b6138d090919063ffffffff16565b905060008183856137109190614f89565b61371a9190614f89565b90506000601f819055506000601e819055506000602081905550601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161377a90615080565b60006040518083038185875af1925050503d80600081146137b7576040519150601f19603f3d011682016040523d82523d6000602084013e6137bc565b606091505b5050809850506000871180156137d25750600081115b1561381f576137e18782613b43565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601f5460405161381693929190615095565b60405180910390a15b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161386590615080565b60006040518083038185875af1925050503d80600081146138a2576040519150601f19603f3d011682016040523d82523d6000602084013e6138a7565b606091505b505080985050505050505050505050505b565b600081836138c891906145ed565b905092915050565b600081836138de919061465e565b905092915050565b505050565b505050565b600081836138fe9190614f89565b905092915050565b6000600267ffffffffffffffff811115613923576139226150cc565b5b6040519080825280602002602001820160405280156139515781602001602082028036833780820191505090505b5090503081600081518110613969576139686150fb565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a32919061513f565b81600181518110613a4657613a456150fb565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613aab307f0000000000000000000000000000000000000000000000000000000000000000846122dd565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613b0d95949392919061526f565b600060405180830381600087803b158015613b2757600080fd5b505af1158015613b3b573d6000803e3d6000fd5b505050505050565b613b6e307f0000000000000000000000000000000000000000000000000000000000000000846122dd565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613bf5969594939291906152c9565b60606040518083038185885af1158015613c13573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613c38919061533f565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613c79578082015181840152602081019050613c5e565b60008484015250505050565b6000601f19601f8301169050919050565b6000613ca182613c3f565b613cab8185613c4a565b9350613cbb818560208601613c5b565b613cc481613c85565b840191505092915050565b60006020820190508181036000830152613ce98184613c96565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613d2182613cf6565b9050919050565b613d3181613d16565b8114613d3c57600080fd5b50565b600081359050613d4e81613d28565b92915050565b6000819050919050565b613d6781613d54565b8114613d7257600080fd5b50565b600081359050613d8481613d5e565b92915050565b60008060408385031215613da157613da0613cf1565b5b6000613daf85828601613d3f565b9250506020613dc085828601613d75565b9150509250929050565b60008115159050919050565b613ddf81613dca565b82525050565b6000602082019050613dfa6000830184613dd6565b92915050565b600080600060608486031215613e1957613e18613cf1565b5b6000613e2786828701613d75565b9350506020613e3886828701613d75565b9250506040613e4986828701613d75565b9150509250925092565b613e5c81613d54565b82525050565b6000602082019050613e776000830184613e53565b92915050565b600060208284031215613e9357613e92613cf1565b5b6000613ea184828501613d3f565b91505092915050565b6000606082019050613ebf6000830186613dd6565b613ecc6020830185613dd6565b613ed96040830184613dd6565b949350505050565b600080600060608486031215613efa57613ef9613cf1565b5b6000613f0886828701613d3f565b9350506020613f1986828701613d3f565b9250506040613f2a86828701613d75565b9150509250925092565b600060ff82169050919050565b613f4a81613f34565b82525050565b6000602082019050613f656000830184613f41565b92915050565b6000608082019050613f806000830187613dd6565b613f8d6020830186613dd6565b613f9a6040830185613e53565b613fa76060830184613e53565b95945050505050565b600060208284031215613fc657613fc5613cf1565b5b6000613fd484828501613d75565b91505092915050565b613fe681613dca565b8114613ff157600080fd5b50565b60008135905061400381613fdd565b92915050565b600080604083850312156140205761401f613cf1565b5b600061402e85828601613d3f565b925050602061403f85828601613ff4565b9150509250929050565b60006101808201905061405f600083018f613e53565b61406c602083018e613e53565b614079604083018d613e53565b614086606083018c613e53565b614093608083018b613e53565b6140a060a083018a613e53565b6140ad60c0830189613e53565b6140ba60e0830188613e53565b6140c8610100830187613e53565b6140d6610120830186613e53565b6140e4610140830185613e53565b6140f2610160830184613e53565b9d9c50505050505050505050505050565b61410c81613d16565b82525050565b60006020820190506141276000830184614103565b92915050565b60006040820190506141426000830185613dd6565b61414f6020830184613e53565b9392505050565b600060608201905061416b6000830186613dd6565b6141786020830185613e53565b6141856040830184613e53565b949350505050565b6000806000606084860312156141a6576141a5613cf1565b5b60006141b486828701613ff4565b93505060206141c586828701613d75565b92505060406141d686828701613d75565b9150509250925092565b600080604083850312156141f7576141f6613cf1565b5b600061420585828601613d3f565b925050602061421685828601613d3f565b9150509250929050565b60006060820190506142356000830186614103565b6142426020830185614103565b61424f6040830184614103565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061429e57607f821691505b6020821081036142b1576142b0614257565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006142ed602083613c4a565b91506142f8826142b7565b602082019050919050565b6000602082019050818103600083015261431c816142e0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061435d82613d54565b915061436883613d54565b92508282019050808211156143805761437f614323565b5b92915050565b7f546f74616c20627579206665652063616e6e6f7420626520686967686572207460008201527f68616e2034302500000000000000000000000000000000000000000000000000602082015250565b60006143e2602783613c4a565b91506143ed82614386565b604082019050919050565b60006020820190508181036000830152614411816143d5565b9050919050565b600060808201905061442d6000830187613e53565b61443a6020830186613e53565b6144476040830185613e53565b6144546060830184613e53565b95945050505050565b7f546f74616c2073656c6c206665652063616e6e6f74206265206869676865722060008201527f7468616e20343025000000000000000000000000000000000000000000000000602082015250565b60006144b9602883613c4a565b91506144c48261445d565b604082019050919050565b600060208201905081810360008301526144e8816144ac565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061454b602883613c4a565b9150614556826144ef565b604082019050919050565b6000602082019050818103600083015261457a8161453e565b9050919050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e3125600082015250565b60006145b7602083613c4a565b91506145c282614581565b602082019050919050565b600060208201905081810360008301526145e6816145aa565b9050919050565b60006145f882613d54565b915061460383613d54565b925082820261461181613d54565b9150828204841483151761462857614627614323565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061466982613d54565b915061467483613d54565b9250826146845761468361462f565b5b828204905092915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006146eb603983613c4a565b91506146f68261468f565b604082019050919050565b6000602082019050818103600083015261471a816146de565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061477d602583613c4a565b915061478882614721565b604082019050919050565b600060208201905081810360008301526147ac81614770565b9050919050565b7f546f74616c207472616e73666572206665652063616e6e6f742062652068696760008201527f686572207468616e203625000000000000000000000000000000000000000000602082015250565b600061480f602b83613c4a565b915061481a826147b3565b604082019050919050565b6000602082019050818103600083015261483e81614802565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e312520746f74616c20737570706c792e00000000000000000000000000602082015250565b60006148a1603383613c4a565b91506148ac82614845565b604082019050919050565b600060208201905081810360008301526148d081614894565b9050919050565b7f6d6178696d756d20616d6f756e742063616e742062652068696768657220746860008201527f616e206d696e696d756d00000000000000000000000000000000000000000000602082015250565b6000614933602a83613c4a565b915061493e826148d7565b604082019050919050565b6000602082019050818103600083015261496281614926565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006149c5602483613c4a565b91506149d082614969565b604082019050919050565b600060208201905081810360008301526149f4816149b8565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614a57602683613c4a565b9150614a62826149fb565b604082019050919050565b60006020820190508181036000830152614a8681614a4a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614ae9602483613c4a565b9150614af482614a8d565b604082019050919050565b60006020820190508181036000830152614b1881614adc565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b7b602283613c4a565b9150614b8682614b1f565b604082019050919050565b60006020820190508181036000830152614baa81614b6e565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614c0d602583613c4a565b9150614c1882614bb1565b604082019050919050565b60006020820190508181036000830152614c3c81614c00565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614c9f602383613c4a565b9150614caa82614c43565b604082019050919050565b60006020820190508181036000830152614cce81614c92565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614d0b601683613c4a565b9150614d1682614cd5565b602082019050919050565b60006020820190508181036000830152614d3a81614cfe565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614dc3604983613c4a565b9150614dce82614d41565b606082019050919050565b60006020820190508181036000830152614df281614db6565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b6000614e55602683613c4a565b9150614e6082614df9565b604082019050919050565b60006020820190508181036000830152614e8481614e48565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614ec1601383613c4a565b9150614ecc82614e8b565b602082019050919050565b60006020820190508181036000830152614ef081614eb4565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b6000614f53602783613c4a565b9150614f5e82614ef7565b604082019050919050565b60006020820190508181036000830152614f8281614f46565b9050919050565b6000614f9482613d54565b9150614f9f83613d54565b9250828203905081811115614fb757614fb6614323565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615019602683613c4a565b915061502482614fbd565b604082019050919050565b600060208201905081810360008301526150488161500c565b9050919050565b600081905092915050565b50565b600061506a60008361504f565b91506150758261505a565b600082019050919050565b600061508b8261505d565b9150819050919050565b60006060820190506150aa6000830186613e53565b6150b76020830185613e53565b6150c46040830184613e53565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061513981613d28565b92915050565b60006020828403121561515557615154613cf1565b5b60006151638482850161512a565b91505092915050565b6000819050919050565b6000819050919050565b600061519b6151966151918461516c565b615176565b613d54565b9050919050565b6151ab81615180565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6151e681613d16565b82525050565b60006151f883836151dd565b60208301905092915050565b6000602082019050919050565b600061521c826151b1565b61522681856151bc565b9350615231836151cd565b8060005b8381101561526257815161524988826151ec565b975061525483615204565b925050600181019050615235565b5085935050505092915050565b600060a0820190506152846000830188613e53565b61529160208301876151a2565b81810360408301526152a38186615211565b90506152b26060830185614103565b6152bf6080830184613e53565b9695505050505050565b600060c0820190506152de6000830189614103565b6152eb6020830188613e53565b6152f860408301876151a2565b61530560608301866151a2565b6153126080830185614103565b61531f60a0830184613e53565b979650505050505050565b60008151905061533981613d5e565b92915050565b60008060006060848603121561535857615357613cf1565b5b60006153668682870161532a565b93505060206153778682870161532a565b92505060406153888682870161532a565b915050925092509256fea2646970667358221220ac472c5e9767aa93d3ee2b5b590ad23034c69ae5f99cff52dcfbec13a1786e5964736f6c63430008130033

Deployed Bytecode

0x60806040526004361061021e5760003560e01c80637688c58411610123578063c0246668116100ab578063e884f2601161006f578063e884f260146107dd578063f1d5f517146107f4578063f242ab411461081d578063f2fde38b14610848578063fd1bc2ca1461087157610225565b8063c02466681461070a578063c9567bf914610733578063d08893581461074a578063dd62ed3e14610773578063dd9cdaed146107b057610225565b80639a7a23d6116100f25780639a7a23d614610611578063a457c2d71461063a578063a9059cbb14610677578063ae7ed567146106b4578063bfd201f5146106e157610225565b80637688c584146105595780638da5cb5b1461058f5780639374ae82146105ba57806395d89b41146105e657610225565b806339509351116101a65780635c85974f116101755780635c85974f1461048a5780635d098b38146104b357806370a08231146104dc578063715018a6146105195780637571336a1461053057610225565b806339509351146103df5780633b0aacbc1461041c5780633ff5ad781461044557806356cd40e71461047357610225565b806318160ddd116101ed57806318160ddd146102e45780631cffccf41461030f5780631f53ac021461034e57806323b872dd14610377578063313ce567146103b457610225565b806306fdde031461022a578063095ea7b3146102555780630d075d9c146102925780630f683e90146102bb57610225565b3661022557005b600080fd5b34801561023657600080fd5b5061023f61089c565b60405161024c9190613ccf565b60405180910390f35b34801561026157600080fd5b5061027c60048036038101906102779190613d8a565b61092e565b6040516102899190613de5565b60405180910390f35b34801561029e57600080fd5b506102b960048036038101906102b49190613e00565b61094c565b005b3480156102c757600080fd5b506102e260048036038101906102dd9190613e00565b610a90565b005b3480156102f057600080fd5b506102f9610bd4565b6040516103069190613e62565b60405180910390f35b34801561031b57600080fd5b5061033660048036038101906103319190613e7d565b610bde565b60405161034593929190613eaa565b60405180910390f35b34801561035a57600080fd5b5061037560048036038101906103709190613e7d565b610cd7565b005b34801561038357600080fd5b5061039e60048036038101906103999190613ee1565b610e13565b6040516103ab9190613de5565b60405180910390f35b3480156103c057600080fd5b506103c9610f0b565b6040516103d69190613f50565b60405180910390f35b3480156103eb57600080fd5b5061040660048036038101906104019190613d8a565b610f14565b6040516104139190613de5565b60405180910390f35b34801561042857600080fd5b50610443600480360381019061043e9190613e7d565b610fc0565b005b34801561045157600080fd5b5061045a6110fc565b60405161046a9493929190613f6b565b60405180910390f35b34801561047f57600080fd5b50610488611136565b005b34801561049657600080fd5b506104b160048036038101906104ac9190613fb0565b6111fc565b005b3480156104bf57600080fd5b506104da60048036038101906104d59190613e7d565b61131e565b005b3480156104e857600080fd5b5061050360048036038101906104fe9190613e7d565b61145a565b6040516105109190613e62565b60405180910390f35b34801561052557600080fd5b5061052e6114a2565b005b34801561053c57600080fd5b5061055760048036038101906105529190614009565b61152a565b005b34801561056557600080fd5b5061056e61164f565b6040516105869c9b9a99989796959493929190614049565b60405180910390f35b34801561059b57600080fd5b506105a46116ab565b6040516105b19190614112565b60405180910390f35b3480156105c657600080fd5b506105cf6116d5565b6040516105dd92919061412d565b60405180910390f35b3480156105f257600080fd5b506105fb6116f3565b6040516106089190613ccf565b60405180910390f35b34801561061d57600080fd5b5061063860048036038101906106339190614009565b611785565b005b34801561064657600080fd5b50610661600480360381019061065c9190613d8a565b61189d565b60405161066e9190613de5565b60405180910390f35b34801561068357600080fd5b5061069e60048036038101906106999190613d8a565b611988565b6040516106ab9190613de5565b60405180910390f35b3480156106c057600080fd5b506106c96119a6565b6040516106d893929190614156565b60405180910390f35b3480156106ed57600080fd5b5061070860048036038101906107039190613e00565b6119cc565b005b34801561071657600080fd5b50610731600480360381019061072c9190614009565b611b10565b005b34801561073f57600080fd5b50610748611c35565b005b34801561075657600080fd5b50610771600480360381019061076c919061418d565b611d16565b005b34801561077f57600080fd5b5061079a600480360381019061079591906141e0565b611ebf565b6040516107a79190613e62565b60405180910390f35b3480156107bc57600080fd5b506107c5611f46565b6040516107d493929190614220565b60405180910390f35b3480156107e957600080fd5b506107f2611fbf565b005b34801561080057600080fd5b5061081b60048036038101906108169190613fb0565b612085565b005b34801561082957600080fd5b506108326121a7565b60405161083f9190614112565b60405180910390f35b34801561085457600080fd5b5061086f600480360381019061086a9190613e7d565b6121cb565b005b34801561087d57600080fd5b506108866122c2565b6040516108939190613de5565b60405180910390f35b6060600380546108ab90614286565b80601f01602080910402602001604051908101604052809291908181526020018280546108d790614286565b80156109245780601f106108f957610100808354040283529160200191610924565b820191906000526020600020905b81548152906001019060200180831161090757829003601f168201915b5050505050905090565b600061094261093b6122d5565b84846122dd565b6001905092915050565b6109546122d5565b73ffffffffffffffffffffffffffffffffffffffff166109726116ab565b73ffffffffffffffffffffffffffffffffffffffff16146109c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109bf90614303565b60405180910390fd5b8260138190555081601481905550806015819055506015546014546013546109f09190614352565b6109fa9190614352565b60128190555060286012541115610a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3d906143f8565b60405180910390fd5b7f3d839c4d8187eded7cfbdfb38e8c68ae748d7c674400c8c3b8c837ba2933d1ac601254601354601454601554604051610a839493929190614418565b60405180910390a1505050565b610a986122d5565b73ffffffffffffffffffffffffffffffffffffffff16610ab66116ab565b73ffffffffffffffffffffffffffffffffffffffff1614610b0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0390614303565b60405180910390fd5b826017819055508160188190555080601981905550601954601854601754610b349190614352565b610b3e9190614352565b60168190555060286016541115610b8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b81906144cf565b60405180910390fd5b7f5453929bc359b94bdd2542a6d8391ca15fe386d74f044db5277328a36de3c650601654601754601854601954604051610bc79493929190614418565b60405180910390a1505050565b6000600254905090565b6000806000602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169250602260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169150602360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690509193909250565b610cdf6122d5565b73ffffffffffffffffffffffffffffffffffffffff16610cfd6116ab565b73ffffffffffffffffffffffffffffffffffffffff1614610d53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4a90614303565b60405180910390fd5b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fc246820312f1be47e3958d661d0c150c01b96d1fe3df1e38edd76693ffa8122b60405160405180910390a380601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610e208484846124a6565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e6b6122d5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610eeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee290614561565b60405180910390fd5b610eff85610ef76122d5565b8584036122dd565b60019150509392505050565b60006012905090565b6000610fb6610f216122d5565b848460016000610f2f6122d5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610fb19190614352565b6122dd565b6001905092915050565b610fc86122d5565b73ffffffffffffffffffffffffffffffffffffffff16610fe66116ab565b73ffffffffffffffffffffffffffffffffffffffff161461103c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103390614303565b60405180910390fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f1c3fdcf16dce794746858765f6acfdac41e7355deba3a0d04cef33a3710ca47c60405160405180910390a380600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080600080600960009054906101000a900460ff169350600960019054906101000a900460ff169250600a549150600b54905090919293565b61113e6122d5565b73ffffffffffffffffffffffffffffffffffffffff1661115c6116ab565b73ffffffffffffffffffffffffffffffffffffffff16146111b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a990614303565b60405180910390fd5b6000600960006101000a81548160ff021916908315150217905550427ff4eaa75eae08ae80c3daf791438dac1cff2cfd3b0bad2304ec7bbb067e50261660405160405180910390a2565b6112046122d5565b73ffffffffffffffffffffffffffffffffffffffff166112226116ab565b73ffffffffffffffffffffffffffffffffffffffff1614611278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126f90614303565b60405180910390fd5b60018110156112bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b3906145cd565b60405180910390fd5b6103e86112c7610bd4565b826112d291906145ed565b6112dc919061465e565b600b819055507fff3dd5e80294197918c284bbfc3dadd97d0b40ce92106110946329088f80068a600b546040516113139190613e62565b60405180910390a150565b6113266122d5565b73ffffffffffffffffffffffffffffffffffffffff166113446116ab565b73ffffffffffffffffffffffffffffffffffffffff161461139a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139190614303565b60405180910390fd5b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f6561b9230f88b321fdeb59c7270bbc86bff9cc287436017533bb79146b13fa5a60405160405180910390a380601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114aa6122d5565b73ffffffffffffffffffffffffffffffffffffffff166114c86116ab565b73ffffffffffffffffffffffffffffffffffffffff161461151e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151590614303565b60405180910390fd5b6115286000613211565b565b6115326122d5565b73ffffffffffffffffffffffffffffffffffffffff166115506116ab565b73ffffffffffffffffffffffffffffffffffffffff16146115a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159d90614303565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc92826040516116439190613de5565b60405180910390a25050565b6000806000806000806000806000806000806012549b506013549a50601454995060155498506016549750601754965060185495506019549450601a549350601b549250601c549150601d549050909192939495969798999a9b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080600d60019054906101000a900460ff169150600e5490509091565b60606004805461170290614286565b80601f016020809104026020016040519081016040528092919081815260200182805461172e90614286565b801561177b5780601f106117505761010080835404028352916020019161177b565b820191906000526020600020905b81548152906001019060200180831161175e57829003601f168201915b5050505050905090565b61178d6122d5565b73ffffffffffffffffffffffffffffffffffffffff166117ab6116ab565b73ffffffffffffffffffffffffffffffffffffffff1614611801576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f890614303565b60405180910390fd5b7f000000000000000000000000405e4aa4acebc77b4333ccca8c6271424791bb7f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361188f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188690614701565b60405180910390fd5b61189982826132d7565b5050565b600080600160006118ac6122d5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611969576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196090614793565b60405180910390fd5b61197d6119746122d5565b858584036122dd565b600191505092915050565b600061199c6119956122d5565b84846124a6565b6001905092915050565b6000806000600660159054906101000a900460ff16925060075491506008549050909192565b6119d46122d5565b73ffffffffffffffffffffffffffffffffffffffff166119f26116ab565b73ffffffffffffffffffffffffffffffffffffffff1614611a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3f90614303565b60405180910390fd5b82601b8190555081601c8190555080601d81905550601d54601c54601b54611a709190614352565b611a7a9190614352565b601a819055506006601a541115611ac6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abd90614825565b60405180910390fd5b7f29ca25f871e92385edcc1db1ce9c82a11549def46dbee1cff41bbed1dcac6ecb601a54601b54601c54601d54604051611b039493929190614418565b60405180910390a1505050565b611b186122d5565b73ffffffffffffffffffffffffffffffffffffffff16611b366116ab565b73ffffffffffffffffffffffffffffffffffffffff1614611b8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8390614303565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611c299190613de5565b60405180910390a25050565b611c3d6122d5565b73ffffffffffffffffffffffffffffffffffffffff16611c5b6116ab565b73ffffffffffffffffffffffffffffffffffffffff1614611cb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca890614303565b60405180910390fd5b6001600d60006101000a81548160ff0219169083151502179055506001600660156101000a81548160ff021916908315150217905550427fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e92360405160405180910390a2565b611d1e6122d5565b73ffffffffffffffffffffffffffffffffffffffff16611d3c6116ab565b73ffffffffffffffffffffffffffffffffffffffff1614611d92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8990614303565b60405180910390fd5b6001821015611dd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcd906148b7565b60405180910390fd5b81811015611e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1090614949565b60405180910390fd5b82600660156101000a81548160ff0219169083151502179055506103e882611e3f610bd4565b611e4991906145ed565b611e53919061465e565b6007819055506103e881611e65610bd4565b611e6f91906145ed565b611e79919061465e565b6008819055507f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c779838383604051611eb293929190614156565b60405180910390a1505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000806000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16925092509250909192565b611fc76122d5565b73ffffffffffffffffffffffffffffffffffffffff16611fe56116ab565b73ffffffffffffffffffffffffffffffffffffffff161461203b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203290614303565b60405180910390fd5b6000600960016101000a81548160ff021916908315150217905550427f26e776fcf7ca20aa79b5b946e9b5111f47205539ece9d7a7995271dd6a8b5bad60405160405180910390a2565b61208d6122d5565b73ffffffffffffffffffffffffffffffffffffffff166120ab6116ab565b73ffffffffffffffffffffffffffffffffffffffff1614612101576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f890614303565b60405180910390fd5b6005811015612145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213c906149db565b60405180910390fd5b6103e8612150610bd4565b8261215b91906145ed565b612165919061465e565b600a819055507f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace600a5460405161219c9190613e62565b60405180910390a150565b7f000000000000000000000000405e4aa4acebc77b4333ccca8c6271424791bb7f81565b6121d36122d5565b73ffffffffffffffffffffffffffffffffffffffff166121f16116ab565b73ffffffffffffffffffffffffffffffffffffffff1614612247576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223e90614303565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036122b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ad90614a6d565b60405180910390fd5b6122bf81613211565b50565b600d60009054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361234c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234390614aff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b290614b91565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124999190613e62565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612515576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250c90614c23565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612584576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257b90614cb5565b60405180910390fd5b6000810361259d5761259883836000613378565b61320c565b600960009054906101000a900460ff1615612c60576125ba6116ab565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561262857506125f86116ab565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126615750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561269b575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126b45750600660149054906101000a900460ff16155b15612c5f57600d60009054906101000a900460ff166127ae57602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061276e5750602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6127ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a490614d21565b60405180910390fd5b5b600960019054906101000a900460ff1615612976576127cb6116ab565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561285257507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128aa57507f000000000000000000000000405e4aa4acebc77b4333ccca8c6271424791bb7f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156129755743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612930576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292790614dd9565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a195750602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ac057600b54811115612a63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5a90614e6b565b60405180910390fd5b600a54612a6f8361145a565b82612a7a9190614352565b1115612abb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab290614ed7565b60405180910390fd5b612c5e565b602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b635750602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612bb257600b54811115612bad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ba490614f69565b60405180910390fd5b612c5d565b602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612c5c57600a54612c0f8361145a565b82612c1a9190614352565b1115612c5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5290614ed7565b60405180910390fd5b5b5b5b5b5b6000612c6b3061145a565b905060006007548210159050808015612c905750600660159054906101000a900460ff165b8015612ca95750600660149054906101000a900460ff16155b8015612cff5750602360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d555750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612dab5750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612def576001600660146101000a81548160ff021916908315150217905550612dd36135f7565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ea55750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612eaf57600090505b600081156131fc57602360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f1257506000601654115b15612fdf57612f3f6064612f31601654886138ba90919063ffffffff16565b6138d090919063ffffffff16565b905060165460185482612f5291906145ed565b612f5c919061465e565b601f6000828254612f6d9190614352565b9250508190555060165460195482612f8591906145ed565b612f8f919061465e565b60206000828254612fa09190614352565b9250508190555060165460175482612fb891906145ed565b612fc2919061465e565b601e6000828254612fd39190614352565b925050819055506131d8565b602360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561303a57506000601254115b15613107576130676064613059601254886138ba90919063ffffffff16565b6138d090919063ffffffff16565b90506012546014548261307a91906145ed565b613084919061465e565b601f60008282546130959190614352565b92505081905550601254601554826130ad91906145ed565b6130b7919061465e565b602060008282546130c89190614352565b92505081905550601254601354826130e091906145ed565b6130ea919061465e565b601e60008282546130fb9190614352565b925050819055506131d7565b6000601a5411156131d65761313a606461312c601a54886138ba90919063ffffffff16565b6138d090919063ffffffff16565b9050601a54601c548261314d91906145ed565b613157919061465e565b601f60008282546131689190614352565b92505081905550601a54601d548261318091906145ed565b61318a919061465e565b6020600082825461319b9190614352565b92505081905550601a54601b54826131b391906145ed565b6131bd919061465e565b601e60008282546131ce9190614352565b925050819055505b5b5b60008111156131ed576131ec873083613378565b5b80856131f99190614f89565b94505b613207878787613378565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036133e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133de90614c23565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161344d90614cb5565b60405180910390fd5b6134618383836138e6565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156134e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134de9061502f565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461357a9190614352565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516135de9190613e62565b60405180910390a36135f18484846138eb565b50505050565b60006136023061145a565b90506000602054601e54601f546136199190614352565b6136239190614352565b90506000808303613636575050506138b8565b6008548311156136465760085492505b6000600283601f548661365991906145ed565b613663919061465e565b61366d919061465e565b9050600061368482866138f090919063ffffffff16565b9050600047905061369482613906565b60006136a982476138f090919063ffffffff16565b905060006136d4876136c6601e54856138ba90919063ffffffff16565b6138d090919063ffffffff16565b905060006136ff886136f1602054866138ba90919063ffffffff16565b6138d090919063ffffffff16565b905060008183856137109190614f89565b61371a9190614f89565b90506000601f819055506000601e819055506000602081905550601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161377a90615080565b60006040518083038185875af1925050503d80600081146137b7576040519150601f19603f3d011682016040523d82523d6000602084013e6137bc565b606091505b5050809850506000871180156137d25750600081115b1561381f576137e18782613b43565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601f5460405161381693929190615095565b60405180910390a15b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161386590615080565b60006040518083038185875af1925050503d80600081146138a2576040519150601f19603f3d011682016040523d82523d6000602084013e6138a7565b606091505b505080985050505050505050505050505b565b600081836138c891906145ed565b905092915050565b600081836138de919061465e565b905092915050565b505050565b505050565b600081836138fe9190614f89565b905092915050565b6000600267ffffffffffffffff811115613923576139226150cc565b5b6040519080825280602002602001820160405280156139515781602001602082028036833780820191505090505b5090503081600081518110613969576139686150fb565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a32919061513f565b81600181518110613a4657613a456150fb565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613aab307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846122dd565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613b0d95949392919061526f565b600060405180830381600087803b158015613b2757600080fd5b505af1158015613b3b573d6000803e3d6000fd5b505050505050565b613b6e307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846122dd565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613bf5969594939291906152c9565b60606040518083038185885af1158015613c13573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613c38919061533f565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613c79578082015181840152602081019050613c5e565b60008484015250505050565b6000601f19601f8301169050919050565b6000613ca182613c3f565b613cab8185613c4a565b9350613cbb818560208601613c5b565b613cc481613c85565b840191505092915050565b60006020820190508181036000830152613ce98184613c96565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613d2182613cf6565b9050919050565b613d3181613d16565b8114613d3c57600080fd5b50565b600081359050613d4e81613d28565b92915050565b6000819050919050565b613d6781613d54565b8114613d7257600080fd5b50565b600081359050613d8481613d5e565b92915050565b60008060408385031215613da157613da0613cf1565b5b6000613daf85828601613d3f565b9250506020613dc085828601613d75565b9150509250929050565b60008115159050919050565b613ddf81613dca565b82525050565b6000602082019050613dfa6000830184613dd6565b92915050565b600080600060608486031215613e1957613e18613cf1565b5b6000613e2786828701613d75565b9350506020613e3886828701613d75565b9250506040613e4986828701613d75565b9150509250925092565b613e5c81613d54565b82525050565b6000602082019050613e776000830184613e53565b92915050565b600060208284031215613e9357613e92613cf1565b5b6000613ea184828501613d3f565b91505092915050565b6000606082019050613ebf6000830186613dd6565b613ecc6020830185613dd6565b613ed96040830184613dd6565b949350505050565b600080600060608486031215613efa57613ef9613cf1565b5b6000613f0886828701613d3f565b9350506020613f1986828701613d3f565b9250506040613f2a86828701613d75565b9150509250925092565b600060ff82169050919050565b613f4a81613f34565b82525050565b6000602082019050613f656000830184613f41565b92915050565b6000608082019050613f806000830187613dd6565b613f8d6020830186613dd6565b613f9a6040830185613e53565b613fa76060830184613e53565b95945050505050565b600060208284031215613fc657613fc5613cf1565b5b6000613fd484828501613d75565b91505092915050565b613fe681613dca565b8114613ff157600080fd5b50565b60008135905061400381613fdd565b92915050565b600080604083850312156140205761401f613cf1565b5b600061402e85828601613d3f565b925050602061403f85828601613ff4565b9150509250929050565b60006101808201905061405f600083018f613e53565b61406c602083018e613e53565b614079604083018d613e53565b614086606083018c613e53565b614093608083018b613e53565b6140a060a083018a613e53565b6140ad60c0830189613e53565b6140ba60e0830188613e53565b6140c8610100830187613e53565b6140d6610120830186613e53565b6140e4610140830185613e53565b6140f2610160830184613e53565b9d9c50505050505050505050505050565b61410c81613d16565b82525050565b60006020820190506141276000830184614103565b92915050565b60006040820190506141426000830185613dd6565b61414f6020830184613e53565b9392505050565b600060608201905061416b6000830186613dd6565b6141786020830185613e53565b6141856040830184613e53565b949350505050565b6000806000606084860312156141a6576141a5613cf1565b5b60006141b486828701613ff4565b93505060206141c586828701613d75565b92505060406141d686828701613d75565b9150509250925092565b600080604083850312156141f7576141f6613cf1565b5b600061420585828601613d3f565b925050602061421685828601613d3f565b9150509250929050565b60006060820190506142356000830186614103565b6142426020830185614103565b61424f6040830184614103565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061429e57607f821691505b6020821081036142b1576142b0614257565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006142ed602083613c4a565b91506142f8826142b7565b602082019050919050565b6000602082019050818103600083015261431c816142e0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061435d82613d54565b915061436883613d54565b92508282019050808211156143805761437f614323565b5b92915050565b7f546f74616c20627579206665652063616e6e6f7420626520686967686572207460008201527f68616e2034302500000000000000000000000000000000000000000000000000602082015250565b60006143e2602783613c4a565b91506143ed82614386565b604082019050919050565b60006020820190508181036000830152614411816143d5565b9050919050565b600060808201905061442d6000830187613e53565b61443a6020830186613e53565b6144476040830185613e53565b6144546060830184613e53565b95945050505050565b7f546f74616c2073656c6c206665652063616e6e6f74206265206869676865722060008201527f7468616e20343025000000000000000000000000000000000000000000000000602082015250565b60006144b9602883613c4a565b91506144c48261445d565b604082019050919050565b600060208201905081810360008301526144e8816144ac565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061454b602883613c4a565b9150614556826144ef565b604082019050919050565b6000602082019050818103600083015261457a8161453e565b9050919050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e3125600082015250565b60006145b7602083613c4a565b91506145c282614581565b602082019050919050565b600060208201905081810360008301526145e6816145aa565b9050919050565b60006145f882613d54565b915061460383613d54565b925082820261461181613d54565b9150828204841483151761462857614627614323565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061466982613d54565b915061467483613d54565b9250826146845761468361462f565b5b828204905092915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006146eb603983613c4a565b91506146f68261468f565b604082019050919050565b6000602082019050818103600083015261471a816146de565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061477d602583613c4a565b915061478882614721565b604082019050919050565b600060208201905081810360008301526147ac81614770565b9050919050565b7f546f74616c207472616e73666572206665652063616e6e6f742062652068696760008201527f686572207468616e203625000000000000000000000000000000000000000000602082015250565b600061480f602b83613c4a565b915061481a826147b3565b604082019050919050565b6000602082019050818103600083015261483e81614802565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e312520746f74616c20737570706c792e00000000000000000000000000602082015250565b60006148a1603383613c4a565b91506148ac82614845565b604082019050919050565b600060208201905081810360008301526148d081614894565b9050919050565b7f6d6178696d756d20616d6f756e742063616e742062652068696768657220746860008201527f616e206d696e696d756d00000000000000000000000000000000000000000000602082015250565b6000614933602a83613c4a565b915061493e826148d7565b604082019050919050565b6000602082019050818103600083015261496281614926565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006149c5602483613c4a565b91506149d082614969565b604082019050919050565b600060208201905081810360008301526149f4816149b8565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614a57602683613c4a565b9150614a62826149fb565b604082019050919050565b60006020820190508181036000830152614a8681614a4a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614ae9602483613c4a565b9150614af482614a8d565b604082019050919050565b60006020820190508181036000830152614b1881614adc565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b7b602283613c4a565b9150614b8682614b1f565b604082019050919050565b60006020820190508181036000830152614baa81614b6e565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614c0d602583613c4a565b9150614c1882614bb1565b604082019050919050565b60006020820190508181036000830152614c3c81614c00565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614c9f602383613c4a565b9150614caa82614c43565b604082019050919050565b60006020820190508181036000830152614cce81614c92565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614d0b601683613c4a565b9150614d1682614cd5565b602082019050919050565b60006020820190508181036000830152614d3a81614cfe565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614dc3604983613c4a565b9150614dce82614d41565b606082019050919050565b60006020820190508181036000830152614df281614db6565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b6000614e55602683613c4a565b9150614e6082614df9565b604082019050919050565b60006020820190508181036000830152614e8481614e48565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614ec1601383613c4a565b9150614ecc82614e8b565b602082019050919050565b60006020820190508181036000830152614ef081614eb4565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b6000614f53602783613c4a565b9150614f5e82614ef7565b604082019050919050565b60006020820190508181036000830152614f8281614f46565b9050919050565b6000614f9482613d54565b9150614f9f83613d54565b9250828203905081811115614fb757614fb6614323565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615019602683613c4a565b915061502482614fbd565b604082019050919050565b600060208201905081810360008301526150488161500c565b9050919050565b600081905092915050565b50565b600061506a60008361504f565b91506150758261505a565b600082019050919050565b600061508b8261505d565b9150819050919050565b60006060820190506150aa6000830186613e53565b6150b76020830185613e53565b6150c46040830184613e53565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061513981613d28565b92915050565b60006020828403121561515557615154613cf1565b5b60006151638482850161512a565b91505092915050565b6000819050919050565b6000819050919050565b600061519b6151966151918461516c565b615176565b613d54565b9050919050565b6151ab81615180565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6151e681613d16565b82525050565b60006151f883836151dd565b60208301905092915050565b6000602082019050919050565b600061521c826151b1565b61522681856151bc565b9350615231836151cd565b8060005b8381101561526257815161524988826151ec565b975061525483615204565b925050600181019050615235565b5085935050505092915050565b600060a0820190506152846000830188613e53565b61529160208301876151a2565b81810360408301526152a38186615211565b90506152b26060830185614103565b6152bf6080830184613e53565b9695505050505050565b600060c0820190506152de6000830189614103565b6152eb6020830188613e53565b6152f860408301876151a2565b61530560608301866151a2565b6153126080830185614103565b61531f60a0830184613e53565b979650505050505050565b60008151905061533981613d5e565b92915050565b60008060006060848603121561535857615357613cf1565b5b60006153668682870161532a565b93505060206153778682870161532a565b92505060406153888682870161532a565b915050925092509256fea2646970667358221220ac472c5e9767aa93d3ee2b5b590ad23034c69ae5f99cff52dcfbec13a1786e5964736f6c63430008130033

Deployed Bytecode Sourcemap

14597:24050:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5296:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6898:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27389:514;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27911:566;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5785:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24092:428;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;30746:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7100:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21049:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7637:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30408:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21862:393;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;25172:130;;;;;;;;;;;;;:::i;:::-;;26256:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30050:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5956:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11602:103;;;;;;;;;;;;;:::i;:::-;;27181:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22549:1093;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;11294:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24707:157;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;5515:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29362:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7935:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6312:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21501:353;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;28485:687;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29180:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25007:157;;;;;;;;;;;;;:::i;:::-;;25470:550;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6575:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22263:278;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;25310:152;;;;;;;;;;;;;:::i;:::-;;26678:235;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14716:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11713:247;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15297:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5296:100;5350:13;5383:5;5376:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5296:100;:::o;6898:194::-;7006:4;7023:39;7032:12;:10;:12::i;:::-;7046:7;7055:6;7023:8;:39::i;:::-;7080:4;7073:11;;6898:194;;;;:::o;27389:514::-;11525:12;:10;:12::i;:::-;11514:23;;:7;:5;:7::i;:::-;:23;;;11506:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27562:13:::1;27544:15;:31;;;;27597:13;27586:8;:24;;;;27641:15;27621:17;:35;;;;27710:17;;27699:8;;27681:15;;:26;;;;:::i;:::-;:46;;;;:::i;:::-;27667:11;:60;;;;27761:2;27746:11;;:17;;27738:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;27823:72;27837:11;;27850:15;;27867:8;;27877:17;;27823:72;;;;;;;;;:::i;:::-;;;;;;;;27389:514:::0;;;:::o;27911:566::-;11525:12;:10;:12::i;:::-;11514:23;;:7;:5;:7::i;:::-;:23;;;11506:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28086:13:::1;28067:16;:32;;;;28122:13;28110:9;:25;;;;28167:15;28146:18;:36;;;;28239:18;;28227:9;;28208:16;;:28;;;;:::i;:::-;:49;;;;:::i;:::-;28193:12;:64;;;;28306:2;28290:12;;:18;;28268:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;28392:77;28407:12;;28421:16;;28439:9;;28450:18;;28392:77;;;;;;;;;:::i;:::-;;;;;;;;27911:566:::0;;;:::o;5785:108::-;5846:7;5873:12;;5866:19;;5785:108;:::o;24092:428::-;24222:17;24254:21;24290:31;24364:11;:20;24376:7;24364:20;;;;;;;;;;;;;;;;;;;;;;;;;24349:35;;24414:15;:24;24430:7;24414:24;;;;;;;;;;;;;;;;;;;;;;;;;24395:43;;24478:25;:34;24504:7;24478:34;;;;;;;;;;;;;;;;;;;;;;;;;24449:63;;24092:428;;;;;:::o;30746:160::-;11525:12;:10;:12::i;:::-;11514:23;;:7;:5;:7::i;:::-;:23;;;11506:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30852:11:::1;;;;;;;;;;;30822:42;;30841:9;30822:42;;;;;;;;;;;;30889:9;30875:11;;:23;;;;;;;;;;;;;;;;;;30746:160:::0;:::o;7100:529::-;7240:4;7257:36;7267:6;7275:9;7286:6;7257:9;:36::i;:::-;7306:24;7333:11;:19;7345:6;7333:19;;;;;;;;;;;;;;;:33;7353:12;:10;:12::i;:::-;7333:33;;;;;;;;;;;;;;;;7306:60;;7419:6;7399:16;:26;;7377:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;7529:57;7538:6;7546:12;:10;:12::i;:::-;7579:6;7560:16;:25;7529:8;:57::i;:::-;7617:4;7610:11;;;7100:529;;;;;:::o;21049:93::-;21107:5;21132:2;21125:9;;21049:93;:::o;7637:290::-;7750:4;7767:130;7790:12;:10;:12::i;:::-;7817:7;7876:10;7839:11;:25;7851:12;:10;:12::i;:::-;7839:25;;;;;;;;;;;;;;;:34;7865:7;7839:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;7767:8;:130::i;:::-;7915:4;7908:11;;7637:290;;;;:::o;30408:164::-;11525:12;:10;:12::i;:::-;11514:23;;:7;:5;:7::i;:::-;:23;;;11506:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30512:14:::1;;;;;;;;;;;30483:44;;30501:9;30483:44;;;;;;;;;;;;30555:9;30538:14;;:26;;;;;;;;;;;;;;;;;;30408:164:::0;:::o;21862:393::-;21951:20;21986:26;22027:18;22060:14;22120;;;;;;;;;;;22102:32;;22169:20;;;;;;;;;;;22145:44;;22213:9;;22200:22;;22242:5;;22233:14;;21862:393;;;;:::o;25172:130::-;11525:12;:10;:12::i;:::-;11514:23;;:7;:5;:7::i;:::-;:23;;;11506:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25243:5:::1;25226:14;;:22;;;;;;;;;;;;;;;;;;25278:15;25264:30;;;;;;;;;;25172:130::o:0;26256:215::-;11525:12;:10;:12::i;:::-;11514:23;;:7;:5;:7::i;:::-;:23;;;11506:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26340:1:::1;26330:6;:11;;26322:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;26424:4;26407:13;:11;:13::i;:::-;26398:6;:22;;;;:::i;:::-;26397:31;;;;:::i;:::-;26389:5;:39;;;;26444:19;26457:5;;26444:19;;;;;;:::i;:::-;;;;;;;;26256:215:::0;:::o;30050:184::-;11525:12;:10;:12::i;:::-;11514:23;;:7;:5;:7::i;:::-;:23;;;11506:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30168:17:::1;;;;;;;;;;;30132:54;;30157:9;30132:54;;;;;;;;;;;;30217:9;30197:17;;:29;;;;;;;;;;;;;;;;;;30050:184:::0;:::o;5956:143::-;6046:7;6073:9;:18;6083:7;6073:18;;;;;;;;;;;;;;;;6066:25;;5956:143;;;:::o;11602:103::-;11525:12;:10;:12::i;:::-;11514:23;;:7;:5;:7::i;:::-;:23;;;11506:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11667:30:::1;11694:1;11667:18;:30::i;:::-;11602:103::o:0;27181:200::-;11525:12;:10;:12::i;:::-;11514:23;;:7;:5;:7::i;:::-;:23;;;11506:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27322:4:::1;27296:15;:23;27312:6;27296:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;27360:6;27342:31;;;27368:4;27342:31;;;;;;:::i;:::-;;;;;;;;27181:200:::0;;:::o;22549:1093::-;22633:20;22668:24;22707:17;22739:26;22780:21;22816:25;22856:18;22889:27;22931:25;22971:29;23015:22;23052:31;23126:11;;23111:26;;23167:15;;23148:34;;23205:8;;23193:20;;23245:17;;23224:38;;23289:12;;23273:28;;23332:16;;23312:36;;23372:9;;23359:22;;23414:18;;23392:40;;23463:16;;23443:36;;23514:20;;23490:44;;23562:13;;23545:30;;23612:22;;23586:48;;22549:1093;;;;;;;;;;;;:::o;11294:87::-;11340:7;11367:6;;;;;;;;;;;11360:13;;11294:87;:::o;24707:157::-;24750:17;24769;24814:11;;;;;;;;;;;24799:26;;24848:8;;24836:20;;24707:157;;:::o;5515:104::-;5571:13;5604:7;5597:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5515:104;:::o;29362:300::-;11525:12;:10;:12::i;:::-;11514:23;;:7;:5;:7::i;:::-;:23;;;11506:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29508:7:::1;29500:15;;:4;:15;;::::0;29478:122:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;29613:41;29642:4;29648:5;29613:28;:41::i;:::-;29362:300:::0;;:::o;7935:475::-;8053:4;8070:24;8097:11;:25;8109:12;:10;:12::i;:::-;8097:25;;;;;;;;;;;;;;;:34;8123:7;8097:34;;;;;;;;;;;;;;;;8070:61;;8184:15;8164:16;:35;;8142:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;8300:67;8309:12;:10;:12::i;:::-;8323:7;8351:15;8332:16;:34;8300:8;:67::i;:::-;8398:4;8391:11;;;7935:475;;;;:::o;6312:200::-;6423:4;6440:42;6450:12;:10;:12::i;:::-;6464:9;6475:6;6440:9;:42::i;:::-;6500:4;6493:11;;6312:200;;;;:::o;21501:353::-;21589:21;21625:25;21665;21737:15;;;;;;;;;;;21718:34;;21783:16;;21763:36;;21830:16;;21810:36;;21501:353;;;:::o;28485:687::-;11525:12;:10;:12::i;:::-;11514:23;;:7;:5;:7::i;:::-;:23;;;11506:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28668:13:::1;28645:20;:36;;;;28708:13;28692;:29;;;;28757:15;28732:22;:40;;;;28841:22;;28825:13;;28802:20;;:36;;;;:::i;:::-;:61;;;;:::i;:::-;28783:16;:80;;;;28916:1;28896:16;;:21;;28874:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;29004:160;29037:16;;29068:20;;29103:13;;29131:22;;29004:160;;;;;;;;;:::i;:::-;;;;;;;;28485:687:::0;;;:::o;29180:174::-;11525:12;:10;:12::i;:::-;11514:23;;:7;:5;:7::i;:::-;:23;;;11506:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29288:8:::1;29265:11;:20;29277:7;29265:20;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;29328:7;29312:34;;;29337:8;29312:34;;;;;;:::i;:::-;;;;;;;;29180:174:::0;;:::o;25007:157::-;11525:12;:10;:12::i;:::-;11514:23;;:7;:5;:7::i;:::-;:23;;;11506:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25072:4:::1;25060:9;;:16;;;;;;;;;;;;;;;;;;25105:4;25087:15;;:22;;;;;;;;;;;;;;;;;;25140:15;25125:31;;;;;;;;;;25007:157::o:0;25470:550::-;11525:12;:10;:12::i;:::-;11514:23;;:7;:5;:7::i;:::-;:23;;;11506:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25636:1:::1;25628:4;:9;;25606:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;25743:4;25735;:12;;25727:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25825:8;25807:15;;:26;;;;;;;;;;;;;;;;;;25888:4;25880;25864:13;:11;:13::i;:::-;:20;;;;:::i;:::-;25863:29;;;;:::i;:::-;25844:16;:48;;;;25947:4;25939;25923:13;:11;:13::i;:::-;:20;;;;:::i;:::-;25922:29;;;;:::i;:::-;25903:16;:48;;;;25967:45;25991:8;26001:4;26007;25967:45;;;;;;;;:::i;:::-;;;;;;;;25470:550:::0;;;:::o;6575:176::-;6689:7;6716:11;:18;6728:5;6716:18;;;;;;;;;;;;;;;:27;6735:7;6716:27;;;;;;;;;;;;;;;;6709:34;;6575:176;;;;:::o;22263:278::-;22351:23;22389:26;22430:20;22486:14;;;;;;;;;;;22502:17;;;;;;;;;;;22521:11;;;;;;;;;;;22478:55;;;;;;22263:278;;;:::o;25310:152::-;11525:12;:10;:12::i;:::-;11514:23;;:7;:5;:7::i;:::-;:23;;;11506:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25395:5:::1;25372:20;;:28;;;;;;;;;;;;;;;;;;25438:15;25416:38;;;;;;;;;;25310:152::o:0;26678:235::-;11525:12;:10;:12::i;:::-;11514:23;;:7;:5;:7::i;:::-;:23;;;11506:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26766:1:::1;26756:6;:11;;26748:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;26858:4;26841:13;:11;:13::i;:::-;26832:6;:22;;;;:::i;:::-;26831:31;;;;:::i;:::-;26819:9;:43;;;;26878:27;26895:9;;26878:27;;;;;;:::i;:::-;;;;;;;;26678:235:::0;:::o;14716:32::-;;;:::o;11713:247::-;11525:12;:10;:12::i;:::-;11514:23;;:7;:5;:7::i;:::-;:23;;;11506:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11842:1:::1;11819:25;;:11;:25;;::::0;11797:113:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;11921:31;11940:11;11921:18;:31::i;:::-;11713:247:::0;:::o;15297:29::-;;;;;;;;;;;;;:::o;4614:98::-;4667:7;4694:10;4687:17;;4614:98;:::o;10202:380::-;10355:1;10338:19;;:5;:19;;;10330:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10436:1;10417:21;;:7;:21;;;10409:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10520:6;10490:11;:18;10502:5;10490:18;;;;;;;;;;;;;;;:27;10509:7;10490:27;;;;;;;;;;;;;;;:36;;;;10558:7;10542:32;;10551:5;10542:32;;;10567:6;10542:32;;;;;;:::i;:::-;;;;;;;;10202:380;;;:::o;30914:4907::-;31062:1;31046:18;;:4;:18;;;31038:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31139:1;31125:16;;:2;:16;;;31117:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31208:1;31198:6;:11;31194:93;;31226:28;31242:4;31248:2;31252:1;31226:15;:28::i;:::-;31269:7;;31194:93;31303:14;;;;;;;;;;;31299:2265;;;31364:7;:5;:7::i;:::-;31356:15;;:4;:15;;;;:49;;;;;31398:7;:5;:7::i;:::-;31392:13;;:2;:13;;;;31356:49;:86;;;;;31440:1;31426:16;;:2;:16;;;;31356:86;:128;;;;;31477:6;31463:21;;:2;:21;;;;31356:128;:158;;;;;31506:8;;;;;;;;;;;31505:9;31356:158;31334:2219;;;31554:9;;;;;;;;;;;31549:203;;31622:11;:17;31634:4;31622:17;;;;;;;;;;;;;;;;;;;;;;;;;:36;;;;31643:11;:15;31655:2;31643:15;;;;;;;;;;;;;;;;;;;;;;;;;31622:36;31588:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;31549:203;31908:20;;;;;;;;;;;31904:629;;;31989:7;:5;:7::i;:::-;31983:13;;:2;:13;;;;:66;;;;;32039:9;32025:24;;:2;:24;;;;31983:66;:117;;;;;32092:7;32078:22;;:2;:22;;;;31983:117;31953:561;;;32264:12;32189:28;:39;32218:9;32189:39;;;;;;;;;;;;;;;;:87;32151:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;32478:12;32436:28;:39;32465:9;32436:39;;;;;;;;;;;;;;;:54;;;;31953:561;31904:629;32585:25;:31;32611:4;32585:31;;;;;;;;;;;;;;;;;;;;;;;;;:55;;;;;32621:15;:19;32637:2;32621:19;;;;;;;;;;;;;;;;;;;;;;;;;32620:20;32585:55;32581:957;;;32709:5;;32699:6;:15;;32665:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;32887:9;;32870:13;32880:2;32870:9;:13::i;:::-;32861:6;:22;;;;:::i;:::-;:35;;32827:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;32581:957;;;33065:25;:29;33091:2;33065:29;;;;;;;;;;;;;;;;;;;;;;;;;:55;;;;;33099:15;:21;33115:4;33099:21;;;;;;;;;;;;;;;;;;;;;;;;;33098:22;33065:55;33039:499;;;33207:5;;33197:6;:15;;33163:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;33039:499;;;33334:15;:19;33350:2;33334:19;;;;;;;;;;;;;;;;;;;;;;;;;33329:209;;33438:9;;33421:13;33431:2;33421:9;:13::i;:::-;33412:6;:22;;;;:::i;:::-;:35;;33378:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;33329:209;33039:499;32581:957;31334:2219;31299:2265;33576:28;33607:24;33625:4;33607:9;:24::i;:::-;33576:55;;33644:12;33683:16;;33659:20;:40;;33644:55;;33730:7;:39;;;;;33754:15;;;;;;;;;;;33730:39;:65;;;;;33787:8;;;;;;;;;;;33786:9;33730:65;:114;;;;;33813:25;:31;33839:4;33813:31;;;;;;;;;;;;;;;;;;;;;;;;;33812:32;33730:114;:149;;;;;33862:11;:17;33874:4;33862:17;;;;;;;;;;;;;;;;;;;;;;;;;33861:18;33730:149;:182;;;;;33897:11;:15;33909:2;33897:15;;;;;;;;;;;;;;;;;;;;;;;;;33896:16;33730:182;33712:314;;;33950:4;33939:8;;:15;;;;;;;;;;;;;;;;;;33971:10;:8;:10::i;:::-;34009:5;33998:8;;:16;;;;;;;;;;;;;;;;;;33712:314;34038:12;34054:8;;;;;;;;;;;34053:9;34038:24;;34164:11;:17;34176:4;34164:17;;;;;;;;;;;;;;;;;;;;;;;;;:36;;;;34185:11;:15;34197:2;34185:15;;;;;;;;;;;;;;;;;;;;;;;;;34164:36;34160:84;;;34227:5;34217:15;;34160:84;34256:12;34361:7;34357:1411;;;34413:25;:29;34439:2;34413:29;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;;;34461:1;34446:12;;:16;34413:49;34409:1210;;;34490:33;34519:3;34490:24;34501:12;;34490:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;34483:40;;34585:12;;34572:9;;34565:4;:16;;;;:::i;:::-;34564:33;;;;:::i;:::-;34542:18;;:55;;;;;;;:::i;:::-;;;;;;;;34662:12;;34640:18;;34633:4;:25;;;;:::i;:::-;34632:42;;;;:::i;:::-;34616:12;;:58;;;;;;;:::i;:::-;;;;;;;;34743:12;;34723:16;;34716:4;:23;;;;:::i;:::-;34715:40;;;;:::i;:::-;34693:18;;:62;;;;;;;:::i;:::-;;;;;;;;34409:1210;;;34817:25;:31;34843:4;34817:31;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;34866:1;34852:11;;:15;34817:50;34813:806;;;34895:32;34923:3;34895:23;34906:11;;34895:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;34888:39;;34988:11;;34976:8;;34969:4;:15;;;;:::i;:::-;34968:31;;;;:::i;:::-;34946:18;;:53;;;;;;;:::i;:::-;;;;;;;;35063:11;;35042:17;;35035:4;:24;;;;:::i;:::-;35034:40;;;;:::i;:::-;35018:12;;:56;;;;;;;:::i;:::-;;;;;;;;35142:11;;35123:15;;35116:4;:22;;;;:::i;:::-;35115:38;;;;:::i;:::-;35093:18;;:60;;;;;;;:::i;:::-;;;;;;;;34813:806;;;35239:1;35220:16;;:20;35216:403;;;35268:37;35301:3;35268:28;35279:16;;35268:6;:10;;:28;;;;:::i;:::-;:32;;:37;;;;:::i;:::-;35261:44;;35371:16;;35354:13;;35347:4;:20;;;;:::i;:::-;35346:41;;;;:::i;:::-;35324:18;;:63;;;;;;;:::i;:::-;;;;;;;;35456:16;;35430:22;;35423:4;:29;;;;:::i;:::-;35422:50;;;;:::i;:::-;35406:12;;:66;;;;;;;:::i;:::-;;;;;;;;35587:16;;35542:20;;35535:4;:27;;;;:::i;:::-;35534:69;;;;:::i;:::-;35491:18;;:112;;;;;;;:::i;:::-;;;;;;;;35216:403;34813:806;34409:1210;35646:1;35639:4;:8;35635:91;;;35668:42;35684:4;35698;35705;35668:15;:42::i;:::-;35635:91;35752:4;35742:14;;;;;:::i;:::-;;;34357:1411;35780:33;35796:4;35802:2;35806:6;35780:15;:33::i;:::-;31027:4794;;;;30914:4907;;;;:::o;12123:200::-;12200:16;12219:6;;;;;;;;;;;12200:25;;12245:11;12236:6;;:20;;;;;;;;;;;;;;;;;;12303:11;12272:43;;12293:8;12272:43;;;;;;;;;;;;12189:134;12123:200;:::o;29670:188::-;29787:5;29753:25;:31;29779:4;29753:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;29844:5;29810:40;;29838:4;29810:40;;;;;;;;;;;;29670:188;;:::o;8418:770::-;8576:1;8558:20;;:6;:20;;;8550:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;8660:1;8639:23;;:9;:23;;;8631:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;8715:47;8736:6;8744:9;8755:6;8715:20;:47::i;:::-;8775:21;8799:9;:17;8809:6;8799:17;;;;;;;;;;;;;;;;8775:41;;8866:6;8849:13;:23;;8827:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;9010:6;8994:13;:22;8974:9;:17;8984:6;8974:17;;;;;;;;;;;;;;;:42;;;;9062:6;9038:9;:20;9048:9;9038:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;9103:9;9086:35;;9095:6;9086:35;;;9114:6;9086:35;;;;;;:::i;:::-;;;;;;;;9134:46;9154:6;9162:9;9173:6;9134:19;:46::i;:::-;8539:649;8418:770;;;:::o;36924:1720::-;36963:23;36989:24;37007:4;36989:9;:24::i;:::-;36963:50;;37024:25;37120:12;;37086:18;;37052;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;37024:108;;37143:12;37191:1;37172:15;:20;37168:59;;37209:7;;;;;37168:59;37261:16;;37243:15;:34;37239:101;;;37312:16;;37294:34;;37239:101;37401:23;37514:1;37481:17;37446:18;;37428:15;:36;;;;:::i;:::-;37427:71;;;;:::i;:::-;:88;;;;:::i;:::-;37401:114;;37526:26;37555:36;37575:15;37555;:19;;:36;;;;:::i;:::-;37526:65;;37604:25;37632:21;37604:49;;37666:36;37683:18;37666:16;:36::i;:::-;37715:18;37736:44;37762:17;37736:21;:25;;:44;;;;:::i;:::-;37715:65;;37793:23;37819:81;37872:17;37819:34;37834:18;;37819:10;:14;;:34;;;;:::i;:::-;:38;;:81;;;;:::i;:::-;37793:107;;37911:17;37931:51;37964:17;37931:28;37946:12;;37931:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;37911:71;;37995:23;38052:9;38034:15;38021:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;37995:66;;38095:1;38074:18;:22;;;;38128:1;38107:18;:22;;;;38155:1;38140:12;:16;;;;38191:11;;;;;;;;;;;38183:25;;38216:9;38183:47;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38169:61;;;;;38265:1;38247:15;:19;:42;;;;;38288:1;38270:15;:19;38247:42;38243:278;;;38306:46;38319:15;38336;38306:12;:46::i;:::-;38372:137;38405:18;38442:15;38476:18;;38372:137;;;;;;;;:::i;:::-;;;;;;;;38243:278;38555:17;;;;;;;;;;;38547:31;;38586:21;38547:89;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38533:103;;;;;36952:1692;;;;;;;;;;36924:1720;:::o;1807:98::-;1865:7;1896:1;1892;:5;;;;:::i;:::-;1885:12;;1807:98;;;;:::o;1913:::-;1971:7;2002:1;1998;:5;;;;:::i;:::-;1991:12;;1913:98;;;;:::o;10590:125::-;;;;:::o;10723:124::-;;;;:::o;1701:98::-;1759:7;1790:1;1786;:5;;;;:::i;:::-;1779:12;;1701:98;;;;:::o;35829:571::-;35955:21;35993:1;35979:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35955:40;;36024:4;36006;36011:1;36006:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;36050:9;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36040:4;36045:1;36040:7;;;;;;;;:::i;:::-;;;;;;;:26;;;;;;;;;;;36079:56;36096:4;36111:9;36123:11;36079:8;:56::i;:::-;36174:9;:60;;;36249:11;36275:1;36319:4;36346;36366:15;36174:218;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35884:516;35829:571;:::o;36408:508::-;36556:56;36573:4;36588:9;36600:11;36556:8;:56::i;:::-;36655:9;:25;;;36688:9;36721:4;36741:11;36767:1;36810;36853:14;;;;;;;;;;;36882:15;36655:253;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;36408:508;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:619::-;3523:6;3531;3539;3588:2;3576:9;3567:7;3563:23;3559:32;3556:119;;;3594:79;;:::i;:::-;3556:119;3714:1;3739:53;3784:7;3775:6;3764:9;3760:22;3739:53;:::i;:::-;3729:63;;3685:117;3841:2;3867:53;3912:7;3903:6;3892:9;3888:22;3867:53;:::i;:::-;3857:63;;3812:118;3969:2;3995:53;4040:7;4031:6;4020:9;4016:22;3995:53;:::i;:::-;3985:63;;3940:118;3446:619;;;;;:::o;4071:118::-;4158:24;4176:5;4158:24;:::i;:::-;4153:3;4146:37;4071:118;;:::o;4195:222::-;4288:4;4326:2;4315:9;4311:18;4303:26;;4339:71;4407:1;4396:9;4392:17;4383:6;4339:71;:::i;:::-;4195:222;;;;:::o;4423:329::-;4482:6;4531:2;4519:9;4510:7;4506:23;4502:32;4499:119;;;4537:79;;:::i;:::-;4499:119;4657:1;4682:53;4727:7;4718:6;4707:9;4703:22;4682:53;:::i;:::-;4672:63;;4628:117;4423:329;;;;:::o;4758:406::-;4889:4;4927:2;4916:9;4912:18;4904:26;;4940:65;5002:1;4991:9;4987:17;4978:6;4940:65;:::i;:::-;5015:66;5077:2;5066:9;5062:18;5053:6;5015:66;:::i;:::-;5091;5153:2;5142:9;5138:18;5129:6;5091:66;:::i;:::-;4758:406;;;;;;:::o;5170:619::-;5247:6;5255;5263;5312:2;5300:9;5291:7;5287:23;5283:32;5280:119;;;5318:79;;:::i;:::-;5280:119;5438:1;5463:53;5508:7;5499:6;5488:9;5484:22;5463:53;:::i;:::-;5453:63;;5409:117;5565:2;5591:53;5636:7;5627:6;5616:9;5612:22;5591:53;:::i;:::-;5581:63;;5536:118;5693:2;5719:53;5764:7;5755:6;5744:9;5740:22;5719:53;:::i;:::-;5709:63;;5664:118;5170:619;;;;;:::o;5795:86::-;5830:7;5870:4;5863:5;5859:16;5848:27;;5795:86;;;:::o;5887:112::-;5970:22;5986:5;5970:22;:::i;:::-;5965:3;5958:35;5887:112;;:::o;6005:214::-;6094:4;6132:2;6121:9;6117:18;6109:26;;6145:67;6209:1;6198:9;6194:17;6185:6;6145:67;:::i;:::-;6005:214;;;;:::o;6225:529::-;6390:4;6428:3;6417:9;6413:19;6405:27;;6442:65;6504:1;6493:9;6489:17;6480:6;6442:65;:::i;:::-;6517:66;6579:2;6568:9;6564:18;6555:6;6517:66;:::i;:::-;6593:72;6661:2;6650:9;6646:18;6637:6;6593:72;:::i;:::-;6675;6743:2;6732:9;6728:18;6719:6;6675:72;:::i;:::-;6225:529;;;;;;;:::o;6760:329::-;6819:6;6868:2;6856:9;6847:7;6843:23;6839:32;6836:119;;;6874:79;;:::i;:::-;6836:119;6994:1;7019:53;7064:7;7055:6;7044:9;7040:22;7019:53;:::i;:::-;7009:63;;6965:117;6760:329;;;;:::o;7095:116::-;7165:21;7180:5;7165:21;:::i;:::-;7158:5;7155:32;7145:60;;7201:1;7198;7191:12;7145:60;7095:116;:::o;7217:133::-;7260:5;7298:6;7285:20;7276:29;;7314:30;7338:5;7314:30;:::i;:::-;7217:133;;;;:::o;7356:468::-;7421:6;7429;7478:2;7466:9;7457:7;7453:23;7449:32;7446:119;;;7484:79;;:::i;:::-;7446:119;7604:1;7629:53;7674:7;7665:6;7654:9;7650:22;7629:53;:::i;:::-;7619:63;;7575:117;7731:2;7757:50;7799:7;7790:6;7779:9;7775:22;7757:50;:::i;:::-;7747:60;;7702:115;7356:468;;;;;:::o;7830:1445::-;8233:4;8271:3;8260:9;8256:19;8248:27;;8285:71;8353:1;8342:9;8338:17;8329:6;8285:71;:::i;:::-;8366:72;8434:2;8423:9;8419:18;8410:6;8366:72;:::i;:::-;8448;8516:2;8505:9;8501:18;8492:6;8448:72;:::i;:::-;8530;8598:2;8587:9;8583:18;8574:6;8530:72;:::i;:::-;8612:73;8680:3;8669:9;8665:19;8656:6;8612:73;:::i;:::-;8695;8763:3;8752:9;8748:19;8739:6;8695:73;:::i;:::-;8778;8846:3;8835:9;8831:19;8822:6;8778:73;:::i;:::-;8861;8929:3;8918:9;8914:19;8905:6;8861:73;:::i;:::-;8944;9012:3;9001:9;8997:19;8988:6;8944:73;:::i;:::-;9027;9095:3;9084:9;9080:19;9071:6;9027:73;:::i;:::-;9110:74;9179:3;9168:9;9164:19;9154:7;9110:74;:::i;:::-;9194;9263:3;9252:9;9248:19;9238:7;9194:74;:::i;:::-;7830:1445;;;;;;;;;;;;;;;:::o;9281:118::-;9368:24;9386:5;9368:24;:::i;:::-;9363:3;9356:37;9281:118;;:::o;9405:222::-;9498:4;9536:2;9525:9;9521:18;9513:26;;9549:71;9617:1;9606:9;9602:17;9593:6;9549:71;:::i;:::-;9405:222;;;;:::o;9633:320::-;9748:4;9786:2;9775:9;9771:18;9763:26;;9799:65;9861:1;9850:9;9846:17;9837:6;9799:65;:::i;:::-;9874:72;9942:2;9931:9;9927:18;9918:6;9874:72;:::i;:::-;9633:320;;;;;:::o;9959:430::-;10102:4;10140:2;10129:9;10125:18;10117:26;;10153:65;10215:1;10204:9;10200:17;10191:6;10153:65;:::i;:::-;10228:72;10296:2;10285:9;10281:18;10272:6;10228:72;:::i;:::-;10310;10378:2;10367:9;10363:18;10354:6;10310:72;:::i;:::-;9959:430;;;;;;:::o;10395:613::-;10469:6;10477;10485;10534:2;10522:9;10513:7;10509:23;10505:32;10502:119;;;10540:79;;:::i;:::-;10502:119;10660:1;10685:50;10727:7;10718:6;10707:9;10703:22;10685:50;:::i;:::-;10675:60;;10631:114;10784:2;10810:53;10855:7;10846:6;10835:9;10831:22;10810:53;:::i;:::-;10800:63;;10755:118;10912:2;10938:53;10983:7;10974:6;10963:9;10959:22;10938:53;:::i;:::-;10928:63;;10883:118;10395:613;;;;;:::o;11014:474::-;11082:6;11090;11139:2;11127:9;11118:7;11114:23;11110:32;11107:119;;;11145:79;;:::i;:::-;11107:119;11265:1;11290:53;11335:7;11326:6;11315:9;11311:22;11290:53;:::i;:::-;11280:63;;11236:117;11392:2;11418:53;11463:7;11454:6;11443:9;11439:22;11418:53;:::i;:::-;11408:63;;11363:118;11014:474;;;;;:::o;11494:442::-;11643:4;11681:2;11670:9;11666:18;11658:26;;11694:71;11762:1;11751:9;11747:17;11738:6;11694:71;:::i;:::-;11775:72;11843:2;11832:9;11828:18;11819:6;11775:72;:::i;:::-;11857;11925:2;11914:9;11910:18;11901:6;11857:72;:::i;:::-;11494:442;;;;;;:::o;11942:180::-;11990:77;11987:1;11980:88;12087:4;12084:1;12077:15;12111:4;12108:1;12101:15;12128:320;12172:6;12209:1;12203:4;12199:12;12189:22;;12256:1;12250:4;12246:12;12277:18;12267:81;;12333:4;12325:6;12321:17;12311:27;;12267:81;12395:2;12387:6;12384:14;12364:18;12361:38;12358:84;;12414:18;;:::i;:::-;12358:84;12179:269;12128:320;;;:::o;12454:182::-;12594:34;12590:1;12582:6;12578:14;12571:58;12454:182;:::o;12642:366::-;12784:3;12805:67;12869:2;12864:3;12805:67;:::i;:::-;12798:74;;12881:93;12970:3;12881:93;:::i;:::-;12999:2;12994:3;12990:12;12983:19;;12642:366;;;:::o;13014:419::-;13180:4;13218:2;13207:9;13203:18;13195:26;;13267:9;13261:4;13257:20;13253:1;13242:9;13238:17;13231:47;13295:131;13421:4;13295:131;:::i;:::-;13287:139;;13014:419;;;:::o;13439:180::-;13487:77;13484:1;13477:88;13584:4;13581:1;13574:15;13608:4;13605:1;13598:15;13625:191;13665:3;13684:20;13702:1;13684:20;:::i;:::-;13679:25;;13718:20;13736:1;13718:20;:::i;:::-;13713:25;;13761:1;13758;13754:9;13747:16;;13782:3;13779:1;13776:10;13773:36;;;13789:18;;:::i;:::-;13773:36;13625:191;;;;:::o;13822:226::-;13962:34;13958:1;13950:6;13946:14;13939:58;14031:9;14026:2;14018:6;14014:15;14007:34;13822:226;:::o;14054:366::-;14196:3;14217:67;14281:2;14276:3;14217:67;:::i;:::-;14210:74;;14293:93;14382:3;14293:93;:::i;:::-;14411:2;14406:3;14402:12;14395:19;;14054:366;;;:::o;14426:419::-;14592:4;14630:2;14619:9;14615:18;14607:26;;14679:9;14673:4;14669:20;14665:1;14654:9;14650:17;14643:47;14707:131;14833:4;14707:131;:::i;:::-;14699:139;;14426:419;;;:::o;14851:553::-;15028:4;15066:3;15055:9;15051:19;15043:27;;15080:71;15148:1;15137:9;15133:17;15124:6;15080:71;:::i;:::-;15161:72;15229:2;15218:9;15214:18;15205:6;15161:72;:::i;:::-;15243;15311:2;15300:9;15296:18;15287:6;15243:72;:::i;:::-;15325;15393:2;15382:9;15378:18;15369:6;15325:72;:::i;:::-;14851:553;;;;;;;:::o;15410:227::-;15550:34;15546:1;15538:6;15534:14;15527:58;15619:10;15614:2;15606:6;15602:15;15595:35;15410:227;:::o;15643:366::-;15785:3;15806:67;15870:2;15865:3;15806:67;:::i;:::-;15799:74;;15882:93;15971:3;15882:93;:::i;:::-;16000:2;15995:3;15991:12;15984:19;;15643:366;;;:::o;16015:419::-;16181:4;16219:2;16208:9;16204:18;16196:26;;16268:9;16262:4;16258:20;16254:1;16243:9;16239:17;16232:47;16296:131;16422:4;16296:131;:::i;:::-;16288:139;;16015:419;;;:::o;16440:227::-;16580:34;16576:1;16568:6;16564:14;16557:58;16649:10;16644:2;16636:6;16632:15;16625:35;16440:227;:::o;16673:366::-;16815:3;16836:67;16900:2;16895:3;16836:67;:::i;:::-;16829:74;;16912:93;17001:3;16912:93;:::i;:::-;17030:2;17025:3;17021:12;17014:19;;16673:366;;;:::o;17045:419::-;17211:4;17249:2;17238:9;17234:18;17226:26;;17298:9;17292:4;17288:20;17284:1;17273:9;17269:17;17262:47;17326:131;17452:4;17326:131;:::i;:::-;17318:139;;17045:419;;;:::o;17470:182::-;17610:34;17606:1;17598:6;17594:14;17587:58;17470:182;:::o;17658:366::-;17800:3;17821:67;17885:2;17880:3;17821:67;:::i;:::-;17814:74;;17897:93;17986:3;17897:93;:::i;:::-;18015:2;18010:3;18006:12;17999:19;;17658:366;;;:::o;18030:419::-;18196:4;18234:2;18223:9;18219:18;18211:26;;18283:9;18277:4;18273:20;18269:1;18258:9;18254:17;18247:47;18311:131;18437:4;18311:131;:::i;:::-;18303:139;;18030:419;;;:::o;18455:410::-;18495:7;18518:20;18536:1;18518:20;:::i;:::-;18513:25;;18552:20;18570:1;18552:20;:::i;:::-;18547:25;;18607:1;18604;18600:9;18629:30;18647:11;18629:30;:::i;:::-;18618:41;;18808:1;18799:7;18795:15;18792:1;18789:22;18769:1;18762:9;18742:83;18719:139;;18838:18;;:::i;:::-;18719:139;18503:362;18455:410;;;;:::o;18871:180::-;18919:77;18916:1;18909:88;19016:4;19013:1;19006:15;19040:4;19037:1;19030:15;19057:185;19097:1;19114:20;19132:1;19114:20;:::i;:::-;19109:25;;19148:20;19166:1;19148:20;:::i;:::-;19143:25;;19187:1;19177:35;;19192:18;;:::i;:::-;19177:35;19234:1;19231;19227:9;19222:14;;19057:185;;;;:::o;19248:244::-;19388:34;19384:1;19376:6;19372:14;19365:58;19457:27;19452:2;19444:6;19440:15;19433:52;19248:244;:::o;19498:366::-;19640:3;19661:67;19725:2;19720:3;19661:67;:::i;:::-;19654:74;;19737:93;19826:3;19737:93;:::i;:::-;19855:2;19850:3;19846:12;19839:19;;19498:366;;;:::o;19870:419::-;20036:4;20074:2;20063:9;20059:18;20051:26;;20123:9;20117:4;20113:20;20109:1;20098:9;20094:17;20087:47;20151:131;20277:4;20151:131;:::i;:::-;20143:139;;19870:419;;;:::o;20295:224::-;20435:34;20431:1;20423:6;20419:14;20412:58;20504:7;20499:2;20491:6;20487:15;20480:32;20295:224;:::o;20525:366::-;20667:3;20688:67;20752:2;20747:3;20688:67;:::i;:::-;20681:74;;20764:93;20853:3;20764:93;:::i;:::-;20882:2;20877:3;20873:12;20866:19;;20525:366;;;:::o;20897:419::-;21063:4;21101:2;21090:9;21086:18;21078:26;;21150:9;21144:4;21140:20;21136:1;21125:9;21121:17;21114:47;21178:131;21304:4;21178:131;:::i;:::-;21170:139;;20897:419;;;:::o;21322:230::-;21462:34;21458:1;21450:6;21446:14;21439:58;21531:13;21526:2;21518:6;21514:15;21507:38;21322:230;:::o;21558:366::-;21700:3;21721:67;21785:2;21780:3;21721:67;:::i;:::-;21714:74;;21797:93;21886:3;21797:93;:::i;:::-;21915:2;21910:3;21906:12;21899:19;;21558:366;;;:::o;21930:419::-;22096:4;22134:2;22123:9;22119:18;22111:26;;22183:9;22177:4;22173:20;22169:1;22158:9;22154:17;22147:47;22211:131;22337:4;22211:131;:::i;:::-;22203:139;;21930:419;;;:::o;22355:238::-;22495:34;22491:1;22483:6;22479:14;22472:58;22564:21;22559:2;22551:6;22547:15;22540:46;22355:238;:::o;22599:366::-;22741:3;22762:67;22826:2;22821:3;22762:67;:::i;:::-;22755:74;;22838:93;22927:3;22838:93;:::i;:::-;22956:2;22951:3;22947:12;22940:19;;22599:366;;;:::o;22971:419::-;23137:4;23175:2;23164:9;23160:18;23152:26;;23224:9;23218:4;23214:20;23210:1;23199:9;23195:17;23188:47;23252:131;23378:4;23252:131;:::i;:::-;23244:139;;22971:419;;;:::o;23396:229::-;23536:34;23532:1;23524:6;23520:14;23513:58;23605:12;23600:2;23592:6;23588:15;23581:37;23396:229;:::o;23631:366::-;23773:3;23794:67;23858:2;23853:3;23794:67;:::i;:::-;23787:74;;23870:93;23959:3;23870:93;:::i;:::-;23988:2;23983:3;23979:12;23972:19;;23631:366;;;:::o;24003:419::-;24169:4;24207:2;24196:9;24192:18;24184:26;;24256:9;24250:4;24246:20;24242:1;24231:9;24227:17;24220:47;24284:131;24410:4;24284:131;:::i;:::-;24276:139;;24003:419;;;:::o;24428:223::-;24568:34;24564:1;24556:6;24552:14;24545:58;24637:6;24632:2;24624:6;24620:15;24613:31;24428:223;:::o;24657:366::-;24799:3;24820:67;24884:2;24879:3;24820:67;:::i;:::-;24813:74;;24896:93;24985:3;24896:93;:::i;:::-;25014:2;25009:3;25005:12;24998:19;;24657:366;;;:::o;25029:419::-;25195:4;25233:2;25222:9;25218:18;25210:26;;25282:9;25276:4;25272:20;25268:1;25257:9;25253:17;25246:47;25310:131;25436:4;25310:131;:::i;:::-;25302:139;;25029:419;;;:::o;25454:225::-;25594:34;25590:1;25582:6;25578:14;25571:58;25663:8;25658:2;25650:6;25646:15;25639:33;25454:225;:::o;25685:366::-;25827:3;25848:67;25912:2;25907:3;25848:67;:::i;:::-;25841:74;;25924:93;26013:3;25924:93;:::i;:::-;26042:2;26037:3;26033:12;26026:19;;25685:366;;;:::o;26057:419::-;26223:4;26261:2;26250:9;26246:18;26238:26;;26310:9;26304:4;26300:20;26296:1;26285:9;26281:17;26274:47;26338:131;26464:4;26338:131;:::i;:::-;26330:139;;26057:419;;;:::o;26482:223::-;26622:34;26618:1;26610:6;26606:14;26599:58;26691:6;26686:2;26678:6;26674:15;26667:31;26482:223;:::o;26711:366::-;26853:3;26874:67;26938:2;26933:3;26874:67;:::i;:::-;26867:74;;26950:93;27039:3;26950:93;:::i;:::-;27068:2;27063:3;27059:12;27052:19;;26711:366;;;:::o;27083:419::-;27249:4;27287:2;27276:9;27272:18;27264:26;;27336:9;27330:4;27326:20;27322:1;27311:9;27307:17;27300:47;27364:131;27490:4;27364:131;:::i;:::-;27356:139;;27083:419;;;:::o;27508:221::-;27648:34;27644:1;27636:6;27632:14;27625:58;27717:4;27712:2;27704:6;27700:15;27693:29;27508:221;:::o;27735:366::-;27877:3;27898:67;27962:2;27957:3;27898:67;:::i;:::-;27891:74;;27974:93;28063:3;27974:93;:::i;:::-;28092:2;28087:3;28083:12;28076:19;;27735:366;;;:::o;28107:419::-;28273:4;28311:2;28300:9;28296:18;28288:26;;28360:9;28354:4;28350:20;28346:1;28335:9;28331:17;28324:47;28388:131;28514:4;28388:131;:::i;:::-;28380:139;;28107:419;;;:::o;28532:224::-;28672:34;28668:1;28660:6;28656:14;28649:58;28741:7;28736:2;28728:6;28724:15;28717:32;28532:224;:::o;28762:366::-;28904:3;28925:67;28989:2;28984:3;28925:67;:::i;:::-;28918:74;;29001:93;29090:3;29001:93;:::i;:::-;29119:2;29114:3;29110:12;29103:19;;28762:366;;;:::o;29134:419::-;29300:4;29338:2;29327:9;29323:18;29315:26;;29387:9;29381:4;29377:20;29373:1;29362:9;29358:17;29351:47;29415:131;29541:4;29415:131;:::i;:::-;29407:139;;29134:419;;;:::o;29559:222::-;29699:34;29695:1;29687:6;29683:14;29676:58;29768:5;29763:2;29755:6;29751:15;29744:30;29559:222;:::o;29787:366::-;29929:3;29950:67;30014:2;30009:3;29950:67;:::i;:::-;29943:74;;30026:93;30115:3;30026:93;:::i;:::-;30144:2;30139:3;30135:12;30128:19;;29787:366;;;:::o;30159:419::-;30325:4;30363:2;30352:9;30348:18;30340:26;;30412:9;30406:4;30402:20;30398:1;30387:9;30383:17;30376:47;30440:131;30566:4;30440:131;:::i;:::-;30432:139;;30159:419;;;:::o;30584:172::-;30724:24;30720:1;30712:6;30708:14;30701:48;30584:172;:::o;30762:366::-;30904:3;30925:67;30989:2;30984:3;30925:67;:::i;:::-;30918:74;;31001:93;31090:3;31001:93;:::i;:::-;31119:2;31114:3;31110:12;31103:19;;30762:366;;;:::o;31134:419::-;31300:4;31338:2;31327:9;31323:18;31315:26;;31387:9;31381:4;31377:20;31373:1;31362:9;31358:17;31351:47;31415:131;31541:4;31415:131;:::i;:::-;31407:139;;31134:419;;;:::o;31559:297::-;31699:34;31695:1;31687:6;31683:14;31676:58;31768:34;31763:2;31755:6;31751:15;31744:59;31837:11;31832:2;31824:6;31820:15;31813:36;31559:297;:::o;31862:366::-;32004:3;32025:67;32089:2;32084:3;32025:67;:::i;:::-;32018:74;;32101:93;32190:3;32101:93;:::i;:::-;32219:2;32214:3;32210:12;32203:19;;31862:366;;;:::o;32234:419::-;32400:4;32438:2;32427:9;32423:18;32415:26;;32487:9;32481:4;32477:20;32473:1;32462:9;32458:17;32451:47;32515:131;32641:4;32515:131;:::i;:::-;32507:139;;32234:419;;;:::o;32659:225::-;32799:34;32795:1;32787:6;32783:14;32776:58;32868:8;32863:2;32855:6;32851:15;32844:33;32659:225;:::o;32890:366::-;33032:3;33053:67;33117:2;33112:3;33053:67;:::i;:::-;33046:74;;33129:93;33218:3;33129:93;:::i;:::-;33247:2;33242:3;33238:12;33231:19;;32890:366;;;:::o;33262:419::-;33428:4;33466:2;33455:9;33451:18;33443:26;;33515:9;33509:4;33505:20;33501:1;33490:9;33486:17;33479:47;33543:131;33669:4;33543:131;:::i;:::-;33535:139;;33262:419;;;:::o;33687:169::-;33827:21;33823:1;33815:6;33811:14;33804:45;33687:169;:::o;33862:366::-;34004:3;34025:67;34089:2;34084:3;34025:67;:::i;:::-;34018:74;;34101:93;34190:3;34101:93;:::i;:::-;34219:2;34214:3;34210:12;34203:19;;33862:366;;;:::o;34234:419::-;34400:4;34438:2;34427:9;34423:18;34415:26;;34487:9;34481:4;34477:20;34473:1;34462:9;34458:17;34451:47;34515:131;34641:4;34515:131;:::i;:::-;34507:139;;34234:419;;;:::o;34659:226::-;34799:34;34795:1;34787:6;34783:14;34776:58;34868:9;34863:2;34855:6;34851:15;34844:34;34659:226;:::o;34891:366::-;35033:3;35054:67;35118:2;35113:3;35054:67;:::i;:::-;35047:74;;35130:93;35219:3;35130:93;:::i;:::-;35248:2;35243:3;35239:12;35232:19;;34891:366;;;:::o;35263:419::-;35429:4;35467:2;35456:9;35452:18;35444:26;;35516:9;35510:4;35506:20;35502:1;35491:9;35487:17;35480:47;35544:131;35670:4;35544:131;:::i;:::-;35536:139;;35263:419;;;:::o;35688:194::-;35728:4;35748:20;35766:1;35748:20;:::i;:::-;35743:25;;35782:20;35800:1;35782:20;:::i;:::-;35777:25;;35826:1;35823;35819:9;35811:17;;35850:1;35844:4;35841:11;35838:37;;;35855:18;;:::i;:::-;35838:37;35688:194;;;;:::o;35888:225::-;36028:34;36024:1;36016:6;36012:14;36005:58;36097:8;36092:2;36084:6;36080:15;36073:33;35888:225;:::o;36119:366::-;36261:3;36282:67;36346:2;36341:3;36282:67;:::i;:::-;36275:74;;36358:93;36447:3;36358:93;:::i;:::-;36476:2;36471:3;36467:12;36460:19;;36119:366;;;:::o;36491:419::-;36657:4;36695:2;36684:9;36680:18;36672:26;;36744:9;36738:4;36734:20;36730:1;36719:9;36715:17;36708:47;36772:131;36898:4;36772:131;:::i;:::-;36764:139;;36491:419;;;:::o;36916:147::-;37017:11;37054:3;37039:18;;36916:147;;;;:::o;37069:114::-;;:::o;37189:398::-;37348:3;37369:83;37450:1;37445:3;37369:83;:::i;:::-;37362:90;;37461:93;37550:3;37461:93;:::i;:::-;37579:1;37574:3;37570:11;37563:18;;37189:398;;;:::o;37593:379::-;37777:3;37799:147;37942:3;37799:147;:::i;:::-;37792:154;;37963:3;37956:10;;37593:379;;;:::o;37978:442::-;38127:4;38165:2;38154:9;38150:18;38142:26;;38178:71;38246:1;38235:9;38231:17;38222:6;38178:71;:::i;:::-;38259:72;38327:2;38316:9;38312:18;38303:6;38259:72;:::i;:::-;38341;38409:2;38398:9;38394:18;38385:6;38341:72;:::i;:::-;37978:442;;;;;;:::o;38426:180::-;38474:77;38471:1;38464:88;38571:4;38568:1;38561:15;38595:4;38592:1;38585:15;38612:180;38660:77;38657:1;38650:88;38757:4;38754:1;38747:15;38781:4;38778:1;38771:15;38798:143;38855:5;38886:6;38880:13;38871:22;;38902:33;38929:5;38902:33;:::i;:::-;38798:143;;;;:::o;38947:351::-;39017:6;39066:2;39054:9;39045:7;39041:23;39037:32;39034:119;;;39072:79;;:::i;:::-;39034:119;39192:1;39217:64;39273:7;39264:6;39253:9;39249:22;39217:64;:::i;:::-;39207:74;;39163:128;38947:351;;;;:::o;39304:85::-;39349:7;39378:5;39367:16;;39304:85;;;:::o;39395:60::-;39423:3;39444:5;39437:12;;39395:60;;;:::o;39461:158::-;39519:9;39552:61;39570:42;39579:32;39605:5;39579:32;:::i;:::-;39570:42;:::i;:::-;39552:61;:::i;:::-;39539:74;;39461:158;;;:::o;39625:147::-;39720:45;39759:5;39720:45;:::i;:::-;39715:3;39708:58;39625:147;;:::o;39778:114::-;39845:6;39879:5;39873:12;39863:22;;39778:114;;;:::o;39898:184::-;39997:11;40031:6;40026:3;40019:19;40071:4;40066:3;40062:14;40047:29;;39898:184;;;;:::o;40088:132::-;40155:4;40178:3;40170:11;;40208:4;40203:3;40199:14;40191:22;;40088:132;;;:::o;40226:108::-;40303:24;40321:5;40303:24;:::i;:::-;40298:3;40291:37;40226:108;;:::o;40340:179::-;40409:10;40430:46;40472:3;40464:6;40430:46;:::i;:::-;40508:4;40503:3;40499:14;40485:28;;40340:179;;;;:::o;40525:113::-;40595:4;40627;40622:3;40618:14;40610:22;;40525:113;;;:::o;40674:732::-;40793:3;40822:54;40870:5;40822:54;:::i;:::-;40892:86;40971:6;40966:3;40892:86;:::i;:::-;40885:93;;41002:56;41052:5;41002:56;:::i;:::-;41081:7;41112:1;41097:284;41122:6;41119:1;41116:13;41097:284;;;41198:6;41192:13;41225:63;41284:3;41269:13;41225:63;:::i;:::-;41218:70;;41311:60;41364:6;41311:60;:::i;:::-;41301:70;;41157:224;41144:1;41141;41137:9;41132:14;;41097:284;;;41101:14;41397:3;41390:10;;40798:608;;;40674:732;;;;:::o;41412:831::-;41675:4;41713:3;41702:9;41698:19;41690:27;;41727:71;41795:1;41784:9;41780:17;41771:6;41727:71;:::i;:::-;41808:80;41884:2;41873:9;41869:18;41860:6;41808:80;:::i;:::-;41935:9;41929:4;41925:20;41920:2;41909:9;41905:18;41898:48;41963:108;42066:4;42057:6;41963:108;:::i;:::-;41955:116;;42081:72;42149:2;42138:9;42134:18;42125:6;42081:72;:::i;:::-;42163:73;42231:3;42220:9;42216:19;42207:6;42163:73;:::i;:::-;41412:831;;;;;;;;:::o;42249:807::-;42498:4;42536:3;42525:9;42521:19;42513:27;;42550:71;42618:1;42607:9;42603:17;42594:6;42550:71;:::i;:::-;42631:72;42699:2;42688:9;42684:18;42675:6;42631:72;:::i;:::-;42713:80;42789:2;42778:9;42774:18;42765:6;42713:80;:::i;:::-;42803;42879:2;42868:9;42864:18;42855:6;42803:80;:::i;:::-;42893:73;42961:3;42950:9;42946:19;42937:6;42893:73;:::i;:::-;42976;43044:3;43033:9;43029:19;43020:6;42976:73;:::i;:::-;42249:807;;;;;;;;;:::o;43062:143::-;43119:5;43150:6;43144:13;43135:22;;43166:33;43193:5;43166:33;:::i;:::-;43062:143;;;;:::o;43211:663::-;43299:6;43307;43315;43364:2;43352:9;43343:7;43339:23;43335:32;43332:119;;;43370:79;;:::i;:::-;43332:119;43490:1;43515:64;43571:7;43562:6;43551:9;43547:22;43515:64;:::i;:::-;43505:74;;43461:128;43628:2;43654:64;43710:7;43701:6;43690:9;43686:22;43654:64;:::i;:::-;43644:74;;43599:129;43767:2;43793:64;43849:7;43840:6;43829:9;43825:22;43793:64;:::i;:::-;43783:74;;43738:129;43211:663;;;;;:::o

Swarm Source

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