ETH Price: $3,182.76 (-7.72%)
Gas: 3 Gwei

Token

Catcher DAO (CDAO)
 

Overview

Max Total Supply

1,000,000,000,000,000 CDAO

Holders

161

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
193,813,177,163.747345203972354694 CDAO

Value
$0.00
0x0F2990342Bfe3D6C3538C7878928eAea824CDcD8
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:
CATCHERDAO

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 2 of 11: Contract.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./ERC20.sol";
import "./Ownable.sol";
import "./SafeMath.sol";

import "./IUniswapV2Pair.sol";
import "./IUniswapV2Router02.sol";
import "./IUniswapV2Factory.sol";

contract CATCHERDAO is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 private uniswapV2Router;
    address private uniswapV2Pair;

    mapping (address => bool) private _isBlacklisted;
    bool private _swapping;
    uint256 private _liveBlock;

    address private _treasuryWallet;
    
    uint256 public maxTransactionAmount;
    uint256 public maxWallet;

    uint256 public swappedTokens;
    uint256 public swapTokensThreshold;
        
    bool public limitsInEffect = true;
    bool public tradingLive = false;

    uint256 private _treasuryFee = 5;
    uint256 private _liquidityFee = 2;
    uint256 private _tokensForTreasury;
    uint256 private _tokensForLiquidity;

    uint256 public totalFees = _treasuryFee + _liquidityFee;
    
    // exlcude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) private _automatedMarketMakerPairs;

    // to stop bot spam buys and sells on launch
    mapping(address => uint256) private _holderLastTransferTimestamp;

    constructor() ERC20("Catcher DAO", "CDAO") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        
        _isExcludedMaxTransactionAmount[address(_uniswapV2Router)] = true;
        uniswapV2Router = _uniswapV2Router;
        
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        _isExcludedMaxTransactionAmount[address(uniswapV2Pair)] = true;
        _automatedMarketMakerPairs[address(uniswapV2Pair)] = true;
                
        uint256 totalSupply = 1e15 * 1e18;
        
        maxTransactionAmount = totalSupply * 125 / 100000;
        maxWallet = totalSupply * 5 / 1000;
        swapTokensThreshold = totalSupply * 1 / 1000;
        
        _treasuryWallet = address(owner()); // set as fee wallet

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        
        _isExcludedMaxTransactionAmount[owner()] = true;
        _isExcludedMaxTransactionAmount[address(this)] = true;
        _isExcludedMaxTransactionAmount[address(0xdead)] = true;
        
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply / 100 * 80);
        _mint(address(this), totalSupply / 100 * 20);
    }

    /**
    * @dev Once live, can never be switched off
    */
    function startTrading(uint256 number) external onlyOwner {
        tradingLive = true;
        _liveBlock = block.number.add(number);
    }

    /**
    * @dev Remove limits after token is somewhat stable
    */
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    /**
    * @dev Exclude from fee calculation
    */
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
    }
    
    /**
    * @dev Update token fees (max set to initial fee)
    */
    function updateFees(uint256 treasuryFee, uint256 liquidityFee) external onlyOwner {
        require(treasuryFee.add(liquidityFee) <= 7);

        _treasuryFee = treasuryFee;
        _liquidityFee = liquidityFee;
    }

    /**
    * @dev Update wallet that receives fees and newly added LP
    */
    function updatetreasuryWallet(address newWallet) external onlyOwner {
        _treasuryWallet = newWallet;
    }

    /**
    * @dev Very important function. 
    * Updates the threshold of how many tokens that must be in the contract calculation for fees to be taken
    */
    function updateSwapTokensThreshold(uint256 newThreshold) external onlyOwner returns (bool) {
  	    require(newThreshold >= totalSupply() * 1 / 100000, "Swap threshold cannot be lower than 0.001% total supply.");
  	    require(newThreshold <= totalSupply() * 5 / 1000, "Swap threshold cannot be higher than 0.5% total supply.");
  	    swapTokensThreshold = newThreshold;
  	    return true;
  	}

    /**
    * @dev Check if an address is excluded from the fee calculation
    */
    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
    
    /**
    * @dev Can be used to block certain addresses (mainly for trading bots and sniping bots)
    */
    function blacklist(address[] memory addresses) public onlyOwner {
        for (uint i = 0; i < addresses.length; i++) {
            if (addresses[i] != uniswapV2Pair && addresses[i] != address(uniswapV2Router)) {
                _isBlacklisted[addresses[i]] = true;
            }
        }
    }
    
    /**
    * @dev Remove blacklisted addresses
    */
    function removeBlacklist(address[] memory addresses) public onlyOwner {
        for (uint i = 0; i < addresses.length; i++) {
            _isBlacklisted[addresses[i]] = false;
        }
    }
    
    /**
    * @dev Check if an address is blacklisted
    */
    function blacklisted(address addr) public view returns (bool) {
        return _isBlacklisted[addr];
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!_isBlacklisted[from], "You have been blacklisted, you are unable to transfer or swap.");
        
        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        // to stop sandwich bots
        if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
            require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
            _holderLastTransferTimestamp[tx.origin] = block.number;
        }

        // all to secure a smooth launch
        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !_swapping
            ) {
                if (!tradingLive) require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "_transfer:: Trading is not active.");
                if (_liveBlock >= block.number) _isBlacklisted[to] = true;

                // on buy
                if (_automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                    require(amount <= maxTransactionAmount, "_transfer:: Buy transfer amount exceeds the maxTransactionAmount.");
                    require(amount + balanceOf(to) <= maxWallet, "_transfer:: Max wallet exceeded");
                }
                
                // on sell
                else if (_automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                    require(amount <= maxTransactionAmount, "_transfer:: Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(amount + balanceOf(to) <= maxWallet, "_transfer:: Max wallet exceeded");
                }
            }
        }
        
        if (
            swappedTokens >= swapTokensThreshold &&
            !_swapping &&
            !_automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            _swapping = true;
            swapBack();
            _swapping = false;
        }

        bool takeFee = !_swapping;

        // if any addy belongs to _isExcludedFromFee or isn't a swap then remove the fee
        if (
            _isExcludedFromFees[from] || 
            _isExcludedFromFees[to] || 
            (!_automatedMarketMakerPairs[from] && !_automatedMarketMakerPairs[to])
        ) takeFee = false;
        
        uint256 fees = 0;
        if (takeFee) {
            fees = amount.mul(totalFees).div(100);

            _tokensForLiquidity += fees * _liquidityFee / totalFees;
            _tokensForTreasury += fees * _treasuryFee / totalFees;

            // calculate how many tokens to add
        	swappedTokens += fees;
        }

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

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

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

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

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

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

    function swapBack() private {
        uint256 _swappedTokens = swappedTokens;
        uint256 totalTokensToSwap = _tokensForLiquidity + _tokensForTreasury;

        if (_swappedTokens == 0) return;
        if (_swappedTokens > swapTokensThreshold) _swappedTokens = swapTokensThreshold;

        uint256 liquidityTokens = _swappedTokens * _tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = _swappedTokens.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        // make sure that swapped tokens are updated
        swappedTokens -= liquidityTokens.add(amountToSwapForETH);

        _swapTokensForEth(amountToSwapForETH);
        
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForTreasury = ethBalance.mul(_tokensForTreasury).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForTreasury;

        _tokensForTreasury = 0;
        _tokensForLiquidity = 0;

        payable(_treasuryWallet).transfer(ethForTreasury);

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            _addLiquidity(liquidityTokens, ethForLiquidity);
        }
    }

    // allow anyone to transfer funds in contract to the treasury wallet
    function withdrawTreasuryFunds() external {
        payable(_treasuryWallet).transfer(address(this).balance);
    }

    receive() external payable {}
}

File 1 of 11: Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

File 3 of 11: ERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;

import "./IERC20.sol";
import "./IERC20Metadata.sol";
import "./Context.sol";

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    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:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, 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}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, _allowances[owner][spender] + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = _allowances[owner][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    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);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    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);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    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);
    }

    /**
     * @dev Spend `amount` form the allowance of `owner` toward `spender`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

File 4 of 11: IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

File 5 of 11: IERC20Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;

import "./IERC20.sol";

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
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);
}

File 6 of 11: IUniswapV2Factory.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.5.0;

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

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

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

File 7 of 11: IUniswapV2Pair.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.5.0;

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

File 8 of 11: IUniswapV2Router01.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.6.2;

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

File 9 of 11: IUniswapV2Router02.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.6.2;

import './IUniswapV2Router01.sol';

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

File 10 of 11: Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "./Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

File 11 of 11: SafeMath.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    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);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    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);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

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

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

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

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

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

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

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"blacklisted","outputs":[{"internalType":"bool","name":"","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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"removeBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"number","type":"uint256"}],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swappedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingLive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"treasuryFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newThreshold","type":"uint256"}],"name":"updateSwapTokensThreshold","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updatetreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawTreasuryFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526001601060006101000a81548160ff0219169083151502179055506000601060016101000a81548160ff0219169083151502179055506005601155600260125560125460115462000056919062000ca6565b6015553480156200006657600080fd5b506040518060400160405280600b81526020017f436174636865722044414f0000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4344414f000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000eb92919062000a9e565b5080600490805190602001906200010492919062000a9e565b505050620001276200011b6200073960201b60201c565b6200074160201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200022057600080fd5b505afa15801562000235573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025b919062000b65565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002be57600080fd5b505afa158015620002d3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f9919062000b65565b6040518363ffffffff1660e01b81526004016200031892919062000c07565b602060405180830381600087803b1580156200033357600080fd5b505af115801562000348573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036e919062000b65565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160176000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160186000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060006d314dc6448d9338c15b0a000000009050620186a0607d82620004c8919062000d3b565b620004d4919062000d03565b600c819055506103e8600582620004ec919062000d3b565b620004f8919062000d03565b600d819055506103e860018262000510919062000d3b565b6200051c919062000d03565b600f81905550620005326200080760201b60201c565b600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000594620005866200080760201b60201c565b60016200083160201b60201c565b620005a73060016200083160201b60201c565b620005bc61dead60016200083160201b60201c565b600160176000620005d26200080760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016017600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000703336050606484620006eb919062000d03565b620006f7919062000d3b565b6200091b60201b60201c565b6200073130601460648462000719919062000d03565b62000725919062000d3b565b6200091b60201b60201c565b505062000f0e565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008416200073960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620008676200080760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620008c0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008b79062000c34565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200098e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009859062000c56565b60405180910390fd5b620009a26000838362000a9460201b60201c565b8060026000828254620009b6919062000ca6565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000a0d919062000ca6565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a74919062000c78565b60405180910390a362000a906000838362000a9960201b60201c565b5050565b505050565b505050565b82805462000aac9062000dda565b90600052602060002090601f01602090048101928262000ad0576000855562000b1c565b82601f1062000aeb57805160ff191683800117855562000b1c565b8280016001018555821562000b1c579182015b8281111562000b1b57825182559160200191906001019062000afe565b5b50905062000b2b919062000b2f565b5090565b5b8082111562000b4a57600081600090555060010162000b30565b5090565b60008151905062000b5f8162000ef4565b92915050565b60006020828403121562000b7e5762000b7d62000e9d565b5b600062000b8e8482850162000b4e565b91505092915050565b62000ba28162000d9c565b82525050565b600062000bb760208362000c95565b915062000bc48262000ea2565b602082019050919050565b600062000bde601f8362000c95565b915062000beb8262000ecb565b602082019050919050565b62000c018162000dd0565b82525050565b600060408201905062000c1e600083018562000b97565b62000c2d602083018462000b97565b9392505050565b6000602082019050818103600083015262000c4f8162000ba8565b9050919050565b6000602082019050818103600083015262000c718162000bcf565b9050919050565b600060208201905062000c8f600083018462000bf6565b92915050565b600082825260208201905092915050565b600062000cb38262000dd0565b915062000cc08362000dd0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000cf85762000cf762000e10565b5b828201905092915050565b600062000d108262000dd0565b915062000d1d8362000dd0565b92508262000d305762000d2f62000e3f565b5b828204905092915050565b600062000d488262000dd0565b915062000d558362000dd0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000d915762000d9062000e10565b5b828202905092915050565b600062000da98262000db0565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000600282049050600182168062000df357607f821691505b6020821081141562000e0a5762000e0962000e6e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b62000eff8162000d9c565b811462000f0b57600080fd5b50565b61422b8062000f1e6000396000f3fe6080604052600436106101e75760003560e01c8063715018a611610102578063c024666811610095578063dd62ed3e11610064578063dd62ed3e14610715578063f0425fe114610752578063f2fde38b1461077d578063f8b45b05146107a6576101ee565b8063c024666814610659578063c8c8ebe414610682578063cef85139146106ad578063dbac26e9146106d8576101ee565b80638da5cb5b116100d15780638da5cb5b1461058957806395d89b41146105b4578063a457c2d7146105df578063a9059cbb1461061c576101ee565b8063715018a6146104e1578063751039fc146104f85780637911ef9d146105235780638baa63b21461054c576101ee565b80632955ede61161017a5780634a62bb65116101495780634a62bb65146104135780634fbee1931461043e5780636db794371461047b57806370a08231146104a4576101ee565b80632955ede61461036b578063313ce5671461039457806339509351146103bf578063447479db146103fc576101ee565b806311704f52116101b657806311704f52146102ad57806313114a9d146102d857806318160ddd1461030357806323b872dd1461032e576101ee565b8063041f173f146101f357806306a1409f1461021c57806306fdde0314610245578063095ea7b314610270576101ee565b366101ee57005b600080fd5b3480156101ff57600080fd5b5061021a60048036038101906102159190613092565b6107d1565b005b34801561022857600080fd5b50610243600480360381019061023e91906130db565b6109c8565b005b34801561025157600080fd5b5061025a610a7b565b604051610267919061358e565b60405180910390f35b34801561027c57600080fd5b5061029760048036038101906102929190613052565b610b0d565b6040516102a49190613573565b60405180910390f35b3480156102b957600080fd5b506102c2610b30565b6040516102cf9190613573565b60405180910390f35b3480156102e457600080fd5b506102ed610b43565b6040516102fa91906137d0565b60405180910390f35b34801561030f57600080fd5b50610318610b49565b60405161032591906137d0565b60405180910390f35b34801561033a57600080fd5b5061035560048036038101906103509190612fbf565b610b53565b6040516103629190613573565b60405180910390f35b34801561037757600080fd5b50610392600480360381019061038d9190612f25565b610b82565b005b3480156103a057600080fd5b506103a9610c42565b6040516103b69190613845565b60405180910390f35b3480156103cb57600080fd5b506103e660048036038101906103e19190613052565b610c4b565b6040516103f39190613573565b60405180910390f35b34801561040857600080fd5b50610411610cf5565b005b34801561041f57600080fd5b50610428610d60565b6040516104359190613573565b60405180910390f35b34801561044a57600080fd5b5061046560048036038101906104609190612f25565b610d73565b6040516104729190613573565b60405180910390f35b34801561048757600080fd5b506104a2600480360381019061049d9190613108565b610dc9565b005b3480156104b057600080fd5b506104cb60048036038101906104c69190612f25565b610e77565b6040516104d891906137d0565b60405180910390f35b3480156104ed57600080fd5b506104f6610ebf565b005b34801561050457600080fd5b5061050d610f47565b60405161051a9190613573565b60405180910390f35b34801561052f57600080fd5b5061054a60048036038101906105459190613092565b610fe7565b005b34801561055857600080fd5b50610573600480360381019061056e91906130db565b6110f8565b6040516105809190613573565b60405180910390f35b34801561059557600080fd5b5061059e61124d565b6040516105ab91906134f7565b60405180910390f35b3480156105c057600080fd5b506105c9611277565b6040516105d6919061358e565b60405180910390f35b3480156105eb57600080fd5b5061060660048036038101906106019190613052565b611309565b6040516106139190613573565b60405180910390f35b34801561062857600080fd5b50610643600480360381019061063e9190613052565b6113f3565b6040516106509190613573565b60405180910390f35b34801561066557600080fd5b50610680600480360381019061067b9190613012565b611416565b005b34801561068e57600080fd5b506106976114ed565b6040516106a491906137d0565b60405180910390f35b3480156106b957600080fd5b506106c26114f3565b6040516106cf91906137d0565b60405180910390f35b3480156106e457600080fd5b506106ff60048036038101906106fa9190612f25565b6114f9565b60405161070c9190613573565b60405180910390f35b34801561072157600080fd5b5061073c60048036038101906107379190612f7f565b61154f565b60405161074991906137d0565b60405180910390f35b34801561075e57600080fd5b506107676115d6565b60405161077491906137d0565b60405180910390f35b34801561078957600080fd5b506107a4600480360381019061079f9190612f25565b6115dc565b005b3480156107b257600080fd5b506107bb6116d4565b6040516107c891906137d0565b60405180910390f35b6107d96116da565b73ffffffffffffffffffffffffffffffffffffffff166107f761124d565b73ffffffffffffffffffffffffffffffffffffffff161461084d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610844906136d0565b60405180910390fd5b60005b81518110156109c457600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168282815181106108a5576108a4613bee565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16141580156109395750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682828151811061091857610917613bee565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b156109b15760016008600084848151811061095757610956613bee565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b80806109bc90613b18565b915050610850565b5050565b6109d06116da565b73ffffffffffffffffffffffffffffffffffffffff166109ee61124d565b73ffffffffffffffffffffffffffffffffffffffff1614610a44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3b906136d0565b60405180910390fd5b6001601060016101000a81548160ff021916908315150217905550610a7281436116e290919063ffffffff16565b600a8190555050565b606060038054610a8a90613ab5565b80601f0160208091040260200160405190810160405280929190818152602001828054610ab690613ab5565b8015610b035780601f10610ad857610100808354040283529160200191610b03565b820191906000526020600020905b815481529060010190602001808311610ae657829003601f168201915b5050505050905090565b600080610b186116da565b9050610b258185856116f8565b600191505092915050565b601060019054906101000a900460ff1681565b60155481565b6000600254905090565b600080610b5e6116da565b9050610b6b8582856118c3565b610b7685858561194f565b60019150509392505050565b610b8a6116da565b73ffffffffffffffffffffffffffffffffffffffff16610ba861124d565b73ffffffffffffffffffffffffffffffffffffffff1614610bfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf5906136d0565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006012905090565b600080610c566116da565b9050610cea818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ce59190613906565b6116f8565b600191505092915050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610d5d573d6000803e3d6000fd5b50565b601060009054906101000a900460ff1681565b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610dd16116da565b73ffffffffffffffffffffffffffffffffffffffff16610def61124d565b73ffffffffffffffffffffffffffffffffffffffff1614610e45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3c906136d0565b60405180910390fd5b6007610e5a82846116e290919063ffffffff16565b1115610e6557600080fd5b81601181905550806012819055505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ec76116da565b73ffffffffffffffffffffffffffffffffffffffff16610ee561124d565b73ffffffffffffffffffffffffffffffffffffffff1614610f3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f32906136d0565b60405180910390fd5b610f456000612580565b565b6000610f516116da565b73ffffffffffffffffffffffffffffffffffffffff16610f6f61124d565b73ffffffffffffffffffffffffffffffffffffffff1614610fc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbc906136d0565b60405180910390fd5b6000601060006101000a81548160ff0219169083151502179055506001905090565b610fef6116da565b73ffffffffffffffffffffffffffffffffffffffff1661100d61124d565b73ffffffffffffffffffffffffffffffffffffffff1614611063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105a906136d0565b60405180910390fd5b60005b81518110156110f45760006008600084848151811061108857611087613bee565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806110ec90613b18565b915050611066565b5050565b60006111026116da565b73ffffffffffffffffffffffffffffffffffffffff1661112061124d565b73ffffffffffffffffffffffffffffffffffffffff1614611176576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116d906136d0565b60405180910390fd5b620186a06001611184610b49565b61118e919061398d565b611198919061395c565b8210156111da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d190613670565b60405180910390fd5b6103e860056111e7610b49565b6111f1919061398d565b6111fb919061395c565b82111561123d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123490613650565b60405180910390fd5b81600f8190555060019050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461128690613ab5565b80601f01602080910402602001604051908101604052809291908181526020018280546112b290613ab5565b80156112ff5780601f106112d4576101008083540402835291602001916112ff565b820191906000526020600020905b8154815290600101906020018083116112e257829003601f168201915b5050505050905090565b6000806113146116da565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156113da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d1906137b0565b60405180910390fd5b6113e782868684036116f8565b60019250505092915050565b6000806113fe6116da565b905061140b81858561194f565b600191505092915050565b61141e6116da565b73ffffffffffffffffffffffffffffffffffffffff1661143c61124d565b73ffffffffffffffffffffffffffffffffffffffff1614611492576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611489906136d0565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600c5481565b600f5481565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600e5481565b6115e46116da565b73ffffffffffffffffffffffffffffffffffffffff1661160261124d565b73ffffffffffffffffffffffffffffffffffffffff1614611658576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164f906136d0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bf906135d0565b60405180910390fd5b6116d181612580565b50565b600d5481565b600033905090565b600081836116f09190613906565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611768576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175f90613750565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cf906135f0565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516118b691906137d0565b60405180910390a3505050565b60006118cf848461154f565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611949578181101561193b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193290613610565b60405180910390fd5b61194884848484036116f8565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156119bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b690613710565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a26906135b0565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611abc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab390613730565b60405180910390fd5b6000811415611ad657611ad183836000612646565b61257b565b611ade61124d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015611b675750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611bc15750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611c8c5743601960003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410611c47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3e90613690565b60405180910390fd5b43601960003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601060009054906101000a900460ff16156121e957611ca961124d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611d175750611ce761124d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611d505750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611d8a575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611da35750600960009054906101000a900460ff16155b156121e857601060019054906101000a900460ff16611e9d57601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611e5d5750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e93906136b0565b60405180910390fd5b5b43600a5410611eff576001600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611fa25750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561204957600c54811115611fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe390613770565b60405180910390fd5b600d54611ff883610e77565b826120039190613906565b1115612044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203b90613790565b60405180910390fd5b6121e7565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156120ec5750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561213b57600c54811115612136576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212d906136f0565b60405180910390fd5b6121e6565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166121e557600d5461219883610e77565b826121a39190613906565b11156121e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121db90613790565b60405180910390fd5b5b5b5b5b5b600f54600e541015801561220a5750600960009054906101000a900460ff16155b80156122605750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156122b65750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561230c5750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612350576001600960006101000a81548160ff0219169083151502179055506123346128c7565b6000600960006101000a81548160ff0219169083151502179055505b6000600960009054906101000a900460ff16159050601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124065750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806124b15750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156124b05750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b5b156124bb57600090505b6000811561256d576124eb60646124dd60155486612a7190919063ffffffff16565b612a8790919063ffffffff16565b9050601554601254826124fe919061398d565b612508919061395c565b601460008282546125199190613906565b9250508190555060155460115482612531919061398d565b61253b919061395c565b6013600082825461254c9190613906565b9250508190555080600e60008282546125659190613906565b925050819055505b612578858585612646565b50505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ad90613710565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612726576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271d906135b0565b60405180910390fd5b612731838383612a9d565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156127b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ae90613630565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461284a9190613906565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516128ae91906137d0565b60405180910390a36128c1848484612aa2565b50505050565b6000600e54905060006013546014546128e09190613906565b905060008214156128f2575050612a6f565b600f5482111561290257600f5491505b600060028260145485612915919061398d565b61291f919061395c565b612929919061395c565b905060006129408285612aa790919063ffffffff16565b9050600047905061295a82846116e290919063ffffffff16565b600e600082825461296b91906139e7565b9250508190555061297b82612abd565b60006129908247612aa790919063ffffffff16565b905060006129bb866129ad60135485612a7190919063ffffffff16565b612a8790919063ffffffff16565b9050600081836129cb91906139e7565b905060006013819055506000601481905550600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015612a45573d6000803e3d6000fd5b50600086118015612a565750600081115b15612a6657612a658682612d0f565b5b50505050505050505b565b60008183612a7f919061398d565b905092915050565b60008183612a95919061395c565b905092915050565b505050565b505050565b60008183612ab591906139e7565b905092915050565b6000600267ffffffffffffffff811115612ada57612ad9613c1d565b5b604051908082528060200260200182016040528015612b085781602001602082028036833780820191505090505b5090503081600081518110612b2057612b1f613bee565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612bc257600080fd5b505afa158015612bd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bfa9190612f52565b81600181518110612c0e57612c0d613bee565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612c7530600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846116f8565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612cd99594939291906137eb565b600060405180830381600087803b158015612cf357600080fd5b505af1158015612d07573d6000803e3d6000fd5b505050505050565b612d3c30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846116f8565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401612dc596959493929190613512565b6060604051808303818588803b158015612dde57600080fd5b505af1158015612df2573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e179190613148565b5050505050565b6000612e31612e2c84613885565b613860565b90508083825260208201905082856020860282011115612e5457612e53613c51565b5b60005b85811015612e845781612e6a8882612e8e565b845260208401935060208301925050600181019050612e57565b5050509392505050565b600081359050612e9d816141b0565b92915050565b600081519050612eb2816141b0565b92915050565b600082601f830112612ecd57612ecc613c4c565b5b8135612edd848260208601612e1e565b91505092915050565b600081359050612ef5816141c7565b92915050565b600081359050612f0a816141de565b92915050565b600081519050612f1f816141de565b92915050565b600060208284031215612f3b57612f3a613c5b565b5b6000612f4984828501612e8e565b91505092915050565b600060208284031215612f6857612f67613c5b565b5b6000612f7684828501612ea3565b91505092915050565b60008060408385031215612f9657612f95613c5b565b5b6000612fa485828601612e8e565b9250506020612fb585828601612e8e565b9150509250929050565b600080600060608486031215612fd857612fd7613c5b565b5b6000612fe686828701612e8e565b9350506020612ff786828701612e8e565b925050604061300886828701612efb565b9150509250925092565b6000806040838503121561302957613028613c5b565b5b600061303785828601612e8e565b925050602061304885828601612ee6565b9150509250929050565b6000806040838503121561306957613068613c5b565b5b600061307785828601612e8e565b925050602061308885828601612efb565b9150509250929050565b6000602082840312156130a8576130a7613c5b565b5b600082013567ffffffffffffffff8111156130c6576130c5613c56565b5b6130d284828501612eb8565b91505092915050565b6000602082840312156130f1576130f0613c5b565b5b60006130ff84828501612efb565b91505092915050565b6000806040838503121561311f5761311e613c5b565b5b600061312d85828601612efb565b925050602061313e85828601612efb565b9150509250929050565b60008060006060848603121561316157613160613c5b565b5b600061316f86828701612f10565b935050602061318086828701612f10565b925050604061319186828701612f10565b9150509250925092565b60006131a783836131b3565b60208301905092915050565b6131bc81613a1b565b82525050565b6131cb81613a1b565b82525050565b60006131dc826138c1565b6131e681856138e4565b93506131f1836138b1565b8060005b83811015613222578151613209888261319b565b9750613214836138d7565b9250506001810190506131f5565b5085935050505092915050565b61323881613a2d565b82525050565b61324781613a70565b82525050565b6000613258826138cc565b61326281856138f5565b9350613272818560208601613a82565b61327b81613c60565b840191505092915050565b60006132936023836138f5565b915061329e82613c71565b604082019050919050565b60006132b66026836138f5565b91506132c182613cc0565b604082019050919050565b60006132d96022836138f5565b91506132e482613d0f565b604082019050919050565b60006132fc601d836138f5565b915061330782613d5e565b602082019050919050565b600061331f6026836138f5565b915061332a82613d87565b604082019050919050565b60006133426037836138f5565b915061334d82613dd6565b604082019050919050565b60006133656038836138f5565b915061337082613e25565b604082019050919050565b60006133886049836138f5565b915061339382613e74565b606082019050919050565b60006133ab6022836138f5565b91506133b682613ee9565b604082019050919050565b60006133ce6020836138f5565b91506133d982613f38565b602082019050919050565b60006133f16042836138f5565b91506133fc82613f61565b606082019050919050565b60006134146025836138f5565b915061341f82613fd6565b604082019050919050565b6000613437603e836138f5565b915061344282614025565b604082019050919050565b600061345a6024836138f5565b915061346582614074565b604082019050919050565b600061347d6041836138f5565b9150613488826140c3565b606082019050919050565b60006134a0601f836138f5565b91506134ab82614138565b602082019050919050565b60006134c36025836138f5565b91506134ce82614161565b604082019050919050565b6134e281613a59565b82525050565b6134f181613a63565b82525050565b600060208201905061350c60008301846131c2565b92915050565b600060c08201905061352760008301896131c2565b61353460208301886134d9565b613541604083018761323e565b61354e606083018661323e565b61355b60808301856131c2565b61356860a08301846134d9565b979650505050505050565b6000602082019050613588600083018461322f565b92915050565b600060208201905081810360008301526135a8818461324d565b905092915050565b600060208201905081810360008301526135c981613286565b9050919050565b600060208201905081810360008301526135e9816132a9565b9050919050565b60006020820190508181036000830152613609816132cc565b9050919050565b60006020820190508181036000830152613629816132ef565b9050919050565b6000602082019050818103600083015261364981613312565b9050919050565b6000602082019050818103600083015261366981613335565b9050919050565b6000602082019050818103600083015261368981613358565b9050919050565b600060208201905081810360008301526136a98161337b565b9050919050565b600060208201905081810360008301526136c98161339e565b9050919050565b600060208201905081810360008301526136e9816133c1565b9050919050565b60006020820190508181036000830152613709816133e4565b9050919050565b6000602082019050818103600083015261372981613407565b9050919050565b600060208201905081810360008301526137498161342a565b9050919050565b600060208201905081810360008301526137698161344d565b9050919050565b6000602082019050818103600083015261378981613470565b9050919050565b600060208201905081810360008301526137a981613493565b9050919050565b600060208201905081810360008301526137c9816134b6565b9050919050565b60006020820190506137e560008301846134d9565b92915050565b600060a08201905061380060008301886134d9565b61380d602083018761323e565b818103604083015261381f81866131d1565b905061382e60608301856131c2565b61383b60808301846134d9565b9695505050505050565b600060208201905061385a60008301846134e8565b92915050565b600061386a61387b565b90506138768282613ae7565b919050565b6000604051905090565b600067ffffffffffffffff8211156138a05761389f613c1d565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061391182613a59565b915061391c83613a59565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561395157613950613b61565b5b828201905092915050565b600061396782613a59565b915061397283613a59565b92508261398257613981613b90565b5b828204905092915050565b600061399882613a59565b91506139a383613a59565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156139dc576139db613b61565b5b828202905092915050565b60006139f282613a59565b91506139fd83613a59565b925082821015613a1057613a0f613b61565b5b828203905092915050565b6000613a2682613a39565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000613a7b82613a59565b9050919050565b60005b83811015613aa0578082015181840152602081019050613a85565b83811115613aaf576000848401525b50505050565b60006002820490506001821680613acd57607f821691505b60208210811415613ae157613ae0613bbf565b5b50919050565b613af082613c60565b810181811067ffffffffffffffff82111715613b0f57613b0e613c1d565b5b80604052505050565b6000613b2382613a59565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613b5657613b55613b61565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f53776170207468726573686f6c642063616e6e6f74206265206869676865722060008201527f7468616e20302e352520746f74616c20737570706c792e000000000000000000602082015250565b7f53776170207468726573686f6c642063616e6e6f74206265206c6f776572207460008201527f68616e20302e3030312520746f74616c20737570706c792e0000000000000000602082015250565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b7f5f7472616e736665723a3a2054726164696e67206973206e6f7420616374697660008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5f7472616e736665723a3a2053656c6c207472616e7366657220616d6f756e7460008201527f206578636565647320746865206d61785472616e73616374696f6e416d6f756e60208201527f742e000000000000000000000000000000000000000000000000000000000000604082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f596f752068617665206265656e20626c61636b6c69737465642c20796f75206160008201527f726520756e61626c6520746f207472616e73666572206f7220737761702e0000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f5f7472616e736665723a3a20427579207472616e7366657220616d6f756e742060008201527f6578636565647320746865206d61785472616e73616374696f6e416d6f756e7460208201527f2e00000000000000000000000000000000000000000000000000000000000000604082015250565b7f5f7472616e736665723a3a204d61782077616c6c657420657863656564656400600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6141b981613a1b565b81146141c457600080fd5b50565b6141d081613a2d565b81146141db57600080fd5b50565b6141e781613a59565b81146141f257600080fd5b5056fea2646970667358221220567c43101ae7312804979c179d993c30da7c690b6ca7ec315b45816d2bd9f12c64736f6c63430008070033

Deployed Bytecode

0x6080604052600436106101e75760003560e01c8063715018a611610102578063c024666811610095578063dd62ed3e11610064578063dd62ed3e14610715578063f0425fe114610752578063f2fde38b1461077d578063f8b45b05146107a6576101ee565b8063c024666814610659578063c8c8ebe414610682578063cef85139146106ad578063dbac26e9146106d8576101ee565b80638da5cb5b116100d15780638da5cb5b1461058957806395d89b41146105b4578063a457c2d7146105df578063a9059cbb1461061c576101ee565b8063715018a6146104e1578063751039fc146104f85780637911ef9d146105235780638baa63b21461054c576101ee565b80632955ede61161017a5780634a62bb65116101495780634a62bb65146104135780634fbee1931461043e5780636db794371461047b57806370a08231146104a4576101ee565b80632955ede61461036b578063313ce5671461039457806339509351146103bf578063447479db146103fc576101ee565b806311704f52116101b657806311704f52146102ad57806313114a9d146102d857806318160ddd1461030357806323b872dd1461032e576101ee565b8063041f173f146101f357806306a1409f1461021c57806306fdde0314610245578063095ea7b314610270576101ee565b366101ee57005b600080fd5b3480156101ff57600080fd5b5061021a60048036038101906102159190613092565b6107d1565b005b34801561022857600080fd5b50610243600480360381019061023e91906130db565b6109c8565b005b34801561025157600080fd5b5061025a610a7b565b604051610267919061358e565b60405180910390f35b34801561027c57600080fd5b5061029760048036038101906102929190613052565b610b0d565b6040516102a49190613573565b60405180910390f35b3480156102b957600080fd5b506102c2610b30565b6040516102cf9190613573565b60405180910390f35b3480156102e457600080fd5b506102ed610b43565b6040516102fa91906137d0565b60405180910390f35b34801561030f57600080fd5b50610318610b49565b60405161032591906137d0565b60405180910390f35b34801561033a57600080fd5b5061035560048036038101906103509190612fbf565b610b53565b6040516103629190613573565b60405180910390f35b34801561037757600080fd5b50610392600480360381019061038d9190612f25565b610b82565b005b3480156103a057600080fd5b506103a9610c42565b6040516103b69190613845565b60405180910390f35b3480156103cb57600080fd5b506103e660048036038101906103e19190613052565b610c4b565b6040516103f39190613573565b60405180910390f35b34801561040857600080fd5b50610411610cf5565b005b34801561041f57600080fd5b50610428610d60565b6040516104359190613573565b60405180910390f35b34801561044a57600080fd5b5061046560048036038101906104609190612f25565b610d73565b6040516104729190613573565b60405180910390f35b34801561048757600080fd5b506104a2600480360381019061049d9190613108565b610dc9565b005b3480156104b057600080fd5b506104cb60048036038101906104c69190612f25565b610e77565b6040516104d891906137d0565b60405180910390f35b3480156104ed57600080fd5b506104f6610ebf565b005b34801561050457600080fd5b5061050d610f47565b60405161051a9190613573565b60405180910390f35b34801561052f57600080fd5b5061054a60048036038101906105459190613092565b610fe7565b005b34801561055857600080fd5b50610573600480360381019061056e91906130db565b6110f8565b6040516105809190613573565b60405180910390f35b34801561059557600080fd5b5061059e61124d565b6040516105ab91906134f7565b60405180910390f35b3480156105c057600080fd5b506105c9611277565b6040516105d6919061358e565b60405180910390f35b3480156105eb57600080fd5b5061060660048036038101906106019190613052565b611309565b6040516106139190613573565b60405180910390f35b34801561062857600080fd5b50610643600480360381019061063e9190613052565b6113f3565b6040516106509190613573565b60405180910390f35b34801561066557600080fd5b50610680600480360381019061067b9190613012565b611416565b005b34801561068e57600080fd5b506106976114ed565b6040516106a491906137d0565b60405180910390f35b3480156106b957600080fd5b506106c26114f3565b6040516106cf91906137d0565b60405180910390f35b3480156106e457600080fd5b506106ff60048036038101906106fa9190612f25565b6114f9565b60405161070c9190613573565b60405180910390f35b34801561072157600080fd5b5061073c60048036038101906107379190612f7f565b61154f565b60405161074991906137d0565b60405180910390f35b34801561075e57600080fd5b506107676115d6565b60405161077491906137d0565b60405180910390f35b34801561078957600080fd5b506107a4600480360381019061079f9190612f25565b6115dc565b005b3480156107b257600080fd5b506107bb6116d4565b6040516107c891906137d0565b60405180910390f35b6107d96116da565b73ffffffffffffffffffffffffffffffffffffffff166107f761124d565b73ffffffffffffffffffffffffffffffffffffffff161461084d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610844906136d0565b60405180910390fd5b60005b81518110156109c457600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168282815181106108a5576108a4613bee565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16141580156109395750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682828151811061091857610917613bee565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b156109b15760016008600084848151811061095757610956613bee565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b80806109bc90613b18565b915050610850565b5050565b6109d06116da565b73ffffffffffffffffffffffffffffffffffffffff166109ee61124d565b73ffffffffffffffffffffffffffffffffffffffff1614610a44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3b906136d0565b60405180910390fd5b6001601060016101000a81548160ff021916908315150217905550610a7281436116e290919063ffffffff16565b600a8190555050565b606060038054610a8a90613ab5565b80601f0160208091040260200160405190810160405280929190818152602001828054610ab690613ab5565b8015610b035780601f10610ad857610100808354040283529160200191610b03565b820191906000526020600020905b815481529060010190602001808311610ae657829003601f168201915b5050505050905090565b600080610b186116da565b9050610b258185856116f8565b600191505092915050565b601060019054906101000a900460ff1681565b60155481565b6000600254905090565b600080610b5e6116da565b9050610b6b8582856118c3565b610b7685858561194f565b60019150509392505050565b610b8a6116da565b73ffffffffffffffffffffffffffffffffffffffff16610ba861124d565b73ffffffffffffffffffffffffffffffffffffffff1614610bfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf5906136d0565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006012905090565b600080610c566116da565b9050610cea818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ce59190613906565b6116f8565b600191505092915050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610d5d573d6000803e3d6000fd5b50565b601060009054906101000a900460ff1681565b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610dd16116da565b73ffffffffffffffffffffffffffffffffffffffff16610def61124d565b73ffffffffffffffffffffffffffffffffffffffff1614610e45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3c906136d0565b60405180910390fd5b6007610e5a82846116e290919063ffffffff16565b1115610e6557600080fd5b81601181905550806012819055505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ec76116da565b73ffffffffffffffffffffffffffffffffffffffff16610ee561124d565b73ffffffffffffffffffffffffffffffffffffffff1614610f3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f32906136d0565b60405180910390fd5b610f456000612580565b565b6000610f516116da565b73ffffffffffffffffffffffffffffffffffffffff16610f6f61124d565b73ffffffffffffffffffffffffffffffffffffffff1614610fc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbc906136d0565b60405180910390fd5b6000601060006101000a81548160ff0219169083151502179055506001905090565b610fef6116da565b73ffffffffffffffffffffffffffffffffffffffff1661100d61124d565b73ffffffffffffffffffffffffffffffffffffffff1614611063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105a906136d0565b60405180910390fd5b60005b81518110156110f45760006008600084848151811061108857611087613bee565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806110ec90613b18565b915050611066565b5050565b60006111026116da565b73ffffffffffffffffffffffffffffffffffffffff1661112061124d565b73ffffffffffffffffffffffffffffffffffffffff1614611176576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116d906136d0565b60405180910390fd5b620186a06001611184610b49565b61118e919061398d565b611198919061395c565b8210156111da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d190613670565b60405180910390fd5b6103e860056111e7610b49565b6111f1919061398d565b6111fb919061395c565b82111561123d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123490613650565b60405180910390fd5b81600f8190555060019050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461128690613ab5565b80601f01602080910402602001604051908101604052809291908181526020018280546112b290613ab5565b80156112ff5780601f106112d4576101008083540402835291602001916112ff565b820191906000526020600020905b8154815290600101906020018083116112e257829003601f168201915b5050505050905090565b6000806113146116da565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156113da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d1906137b0565b60405180910390fd5b6113e782868684036116f8565b60019250505092915050565b6000806113fe6116da565b905061140b81858561194f565b600191505092915050565b61141e6116da565b73ffffffffffffffffffffffffffffffffffffffff1661143c61124d565b73ffffffffffffffffffffffffffffffffffffffff1614611492576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611489906136d0565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600c5481565b600f5481565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600e5481565b6115e46116da565b73ffffffffffffffffffffffffffffffffffffffff1661160261124d565b73ffffffffffffffffffffffffffffffffffffffff1614611658576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164f906136d0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bf906135d0565b60405180910390fd5b6116d181612580565b50565b600d5481565b600033905090565b600081836116f09190613906565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611768576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175f90613750565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cf906135f0565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516118b691906137d0565b60405180910390a3505050565b60006118cf848461154f565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611949578181101561193b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193290613610565b60405180910390fd5b61194884848484036116f8565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156119bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b690613710565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a26906135b0565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611abc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab390613730565b60405180910390fd5b6000811415611ad657611ad183836000612646565b61257b565b611ade61124d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015611b675750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611bc15750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611c8c5743601960003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410611c47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3e90613690565b60405180910390fd5b43601960003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601060009054906101000a900460ff16156121e957611ca961124d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611d175750611ce761124d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611d505750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611d8a575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611da35750600960009054906101000a900460ff16155b156121e857601060019054906101000a900460ff16611e9d57601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611e5d5750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e93906136b0565b60405180910390fd5b5b43600a5410611eff576001600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611fa25750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561204957600c54811115611fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe390613770565b60405180910390fd5b600d54611ff883610e77565b826120039190613906565b1115612044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203b90613790565b60405180910390fd5b6121e7565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156120ec5750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561213b57600c54811115612136576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212d906136f0565b60405180910390fd5b6121e6565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166121e557600d5461219883610e77565b826121a39190613906565b11156121e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121db90613790565b60405180910390fd5b5b5b5b5b5b600f54600e541015801561220a5750600960009054906101000a900460ff16155b80156122605750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156122b65750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561230c5750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612350576001600960006101000a81548160ff0219169083151502179055506123346128c7565b6000600960006101000a81548160ff0219169083151502179055505b6000600960009054906101000a900460ff16159050601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124065750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806124b15750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156124b05750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b5b156124bb57600090505b6000811561256d576124eb60646124dd60155486612a7190919063ffffffff16565b612a8790919063ffffffff16565b9050601554601254826124fe919061398d565b612508919061395c565b601460008282546125199190613906565b9250508190555060155460115482612531919061398d565b61253b919061395c565b6013600082825461254c9190613906565b9250508190555080600e60008282546125659190613906565b925050819055505b612578858585612646565b50505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ad90613710565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612726576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271d906135b0565b60405180910390fd5b612731838383612a9d565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156127b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ae90613630565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461284a9190613906565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516128ae91906137d0565b60405180910390a36128c1848484612aa2565b50505050565b6000600e54905060006013546014546128e09190613906565b905060008214156128f2575050612a6f565b600f5482111561290257600f5491505b600060028260145485612915919061398d565b61291f919061395c565b612929919061395c565b905060006129408285612aa790919063ffffffff16565b9050600047905061295a82846116e290919063ffffffff16565b600e600082825461296b91906139e7565b9250508190555061297b82612abd565b60006129908247612aa790919063ffffffff16565b905060006129bb866129ad60135485612a7190919063ffffffff16565b612a8790919063ffffffff16565b9050600081836129cb91906139e7565b905060006013819055506000601481905550600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015612a45573d6000803e3d6000fd5b50600086118015612a565750600081115b15612a6657612a658682612d0f565b5b50505050505050505b565b60008183612a7f919061398d565b905092915050565b60008183612a95919061395c565b905092915050565b505050565b505050565b60008183612ab591906139e7565b905092915050565b6000600267ffffffffffffffff811115612ada57612ad9613c1d565b5b604051908082528060200260200182016040528015612b085781602001602082028036833780820191505090505b5090503081600081518110612b2057612b1f613bee565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612bc257600080fd5b505afa158015612bd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bfa9190612f52565b81600181518110612c0e57612c0d613bee565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612c7530600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846116f8565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612cd99594939291906137eb565b600060405180830381600087803b158015612cf357600080fd5b505af1158015612d07573d6000803e3d6000fd5b505050505050565b612d3c30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846116f8565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401612dc596959493929190613512565b6060604051808303818588803b158015612dde57600080fd5b505af1158015612df2573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e179190613148565b5050505050565b6000612e31612e2c84613885565b613860565b90508083825260208201905082856020860282011115612e5457612e53613c51565b5b60005b85811015612e845781612e6a8882612e8e565b845260208401935060208301925050600181019050612e57565b5050509392505050565b600081359050612e9d816141b0565b92915050565b600081519050612eb2816141b0565b92915050565b600082601f830112612ecd57612ecc613c4c565b5b8135612edd848260208601612e1e565b91505092915050565b600081359050612ef5816141c7565b92915050565b600081359050612f0a816141de565b92915050565b600081519050612f1f816141de565b92915050565b600060208284031215612f3b57612f3a613c5b565b5b6000612f4984828501612e8e565b91505092915050565b600060208284031215612f6857612f67613c5b565b5b6000612f7684828501612ea3565b91505092915050565b60008060408385031215612f9657612f95613c5b565b5b6000612fa485828601612e8e565b9250506020612fb585828601612e8e565b9150509250929050565b600080600060608486031215612fd857612fd7613c5b565b5b6000612fe686828701612e8e565b9350506020612ff786828701612e8e565b925050604061300886828701612efb565b9150509250925092565b6000806040838503121561302957613028613c5b565b5b600061303785828601612e8e565b925050602061304885828601612ee6565b9150509250929050565b6000806040838503121561306957613068613c5b565b5b600061307785828601612e8e565b925050602061308885828601612efb565b9150509250929050565b6000602082840312156130a8576130a7613c5b565b5b600082013567ffffffffffffffff8111156130c6576130c5613c56565b5b6130d284828501612eb8565b91505092915050565b6000602082840312156130f1576130f0613c5b565b5b60006130ff84828501612efb565b91505092915050565b6000806040838503121561311f5761311e613c5b565b5b600061312d85828601612efb565b925050602061313e85828601612efb565b9150509250929050565b60008060006060848603121561316157613160613c5b565b5b600061316f86828701612f10565b935050602061318086828701612f10565b925050604061319186828701612f10565b9150509250925092565b60006131a783836131b3565b60208301905092915050565b6131bc81613a1b565b82525050565b6131cb81613a1b565b82525050565b60006131dc826138c1565b6131e681856138e4565b93506131f1836138b1565b8060005b83811015613222578151613209888261319b565b9750613214836138d7565b9250506001810190506131f5565b5085935050505092915050565b61323881613a2d565b82525050565b61324781613a70565b82525050565b6000613258826138cc565b61326281856138f5565b9350613272818560208601613a82565b61327b81613c60565b840191505092915050565b60006132936023836138f5565b915061329e82613c71565b604082019050919050565b60006132b66026836138f5565b91506132c182613cc0565b604082019050919050565b60006132d96022836138f5565b91506132e482613d0f565b604082019050919050565b60006132fc601d836138f5565b915061330782613d5e565b602082019050919050565b600061331f6026836138f5565b915061332a82613d87565b604082019050919050565b60006133426037836138f5565b915061334d82613dd6565b604082019050919050565b60006133656038836138f5565b915061337082613e25565b604082019050919050565b60006133886049836138f5565b915061339382613e74565b606082019050919050565b60006133ab6022836138f5565b91506133b682613ee9565b604082019050919050565b60006133ce6020836138f5565b91506133d982613f38565b602082019050919050565b60006133f16042836138f5565b91506133fc82613f61565b606082019050919050565b60006134146025836138f5565b915061341f82613fd6565b604082019050919050565b6000613437603e836138f5565b915061344282614025565b604082019050919050565b600061345a6024836138f5565b915061346582614074565b604082019050919050565b600061347d6041836138f5565b9150613488826140c3565b606082019050919050565b60006134a0601f836138f5565b91506134ab82614138565b602082019050919050565b60006134c36025836138f5565b91506134ce82614161565b604082019050919050565b6134e281613a59565b82525050565b6134f181613a63565b82525050565b600060208201905061350c60008301846131c2565b92915050565b600060c08201905061352760008301896131c2565b61353460208301886134d9565b613541604083018761323e565b61354e606083018661323e565b61355b60808301856131c2565b61356860a08301846134d9565b979650505050505050565b6000602082019050613588600083018461322f565b92915050565b600060208201905081810360008301526135a8818461324d565b905092915050565b600060208201905081810360008301526135c981613286565b9050919050565b600060208201905081810360008301526135e9816132a9565b9050919050565b60006020820190508181036000830152613609816132cc565b9050919050565b60006020820190508181036000830152613629816132ef565b9050919050565b6000602082019050818103600083015261364981613312565b9050919050565b6000602082019050818103600083015261366981613335565b9050919050565b6000602082019050818103600083015261368981613358565b9050919050565b600060208201905081810360008301526136a98161337b565b9050919050565b600060208201905081810360008301526136c98161339e565b9050919050565b600060208201905081810360008301526136e9816133c1565b9050919050565b60006020820190508181036000830152613709816133e4565b9050919050565b6000602082019050818103600083015261372981613407565b9050919050565b600060208201905081810360008301526137498161342a565b9050919050565b600060208201905081810360008301526137698161344d565b9050919050565b6000602082019050818103600083015261378981613470565b9050919050565b600060208201905081810360008301526137a981613493565b9050919050565b600060208201905081810360008301526137c9816134b6565b9050919050565b60006020820190506137e560008301846134d9565b92915050565b600060a08201905061380060008301886134d9565b61380d602083018761323e565b818103604083015261381f81866131d1565b905061382e60608301856131c2565b61383b60808301846134d9565b9695505050505050565b600060208201905061385a60008301846134e8565b92915050565b600061386a61387b565b90506138768282613ae7565b919050565b6000604051905090565b600067ffffffffffffffff8211156138a05761389f613c1d565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061391182613a59565b915061391c83613a59565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561395157613950613b61565b5b828201905092915050565b600061396782613a59565b915061397283613a59565b92508261398257613981613b90565b5b828204905092915050565b600061399882613a59565b91506139a383613a59565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156139dc576139db613b61565b5b828202905092915050565b60006139f282613a59565b91506139fd83613a59565b925082821015613a1057613a0f613b61565b5b828203905092915050565b6000613a2682613a39565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000613a7b82613a59565b9050919050565b60005b83811015613aa0578082015181840152602081019050613a85565b83811115613aaf576000848401525b50505050565b60006002820490506001821680613acd57607f821691505b60208210811415613ae157613ae0613bbf565b5b50919050565b613af082613c60565b810181811067ffffffffffffffff82111715613b0f57613b0e613c1d565b5b80604052505050565b6000613b2382613a59565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613b5657613b55613b61565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f53776170207468726573686f6c642063616e6e6f74206265206869676865722060008201527f7468616e20302e352520746f74616c20737570706c792e000000000000000000602082015250565b7f53776170207468726573686f6c642063616e6e6f74206265206c6f776572207460008201527f68616e20302e3030312520746f74616c20737570706c792e0000000000000000602082015250565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b7f5f7472616e736665723a3a2054726164696e67206973206e6f7420616374697660008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5f7472616e736665723a3a2053656c6c207472616e7366657220616d6f756e7460008201527f206578636565647320746865206d61785472616e73616374696f6e416d6f756e60208201527f742e000000000000000000000000000000000000000000000000000000000000604082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f596f752068617665206265656e20626c61636b6c69737465642c20796f75206160008201527f726520756e61626c6520746f207472616e73666572206f7220737761702e0000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f5f7472616e736665723a3a20427579207472616e7366657220616d6f756e742060008201527f6578636565647320746865206d61785472616e73616374696f6e416d6f756e7460208201527f2e00000000000000000000000000000000000000000000000000000000000000604082015250565b7f5f7472616e736665723a3a204d61782077616c6c657420657863656564656400600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6141b981613a1b565b81146141c457600080fd5b50565b6141d081613a2d565b81146141db57600080fd5b50565b6141e781613a59565b81146141f257600080fd5b5056fea2646970667358221220567c43101ae7312804979c179d993c30da7c690b6ca7ec315b45816d2bd9f12c64736f6c63430008070033

Deployed Bytecode Sourcemap

231:11029:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5020:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3109:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2135:98:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4412:197;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;743:31:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;940:55;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3223:106:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5171:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4014:112:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3072:91:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5852:236;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11108:115:1;;;;;;;;;;;;;:::i;:::-;;704:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4779:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3713:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3387:125:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1661:101:9;;;;;;;;;;;;;:::i;:::-;;3325:118:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5380:191;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4293:397;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1029:85:9;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2346:102:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6575:429;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3708:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3504:130:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;549:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;655:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5642:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3955:149:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;621:28:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1911:198:9;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;590:24:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5020:295;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5099:6:1::1;5094:215;5115:9;:16;5111:1;:20;5094:215;;;5172:13;;;;;;;;;;;5156:29;;:9;5166:1;5156:12;;;;;;;;:::i;:::-;;;;;;;;:29;;;;:73;;;;;5213:15;;;;;;;;;;;5189:40;;:9;5199:1;5189:12;;;;;;;;:::i;:::-;;;;;;;;:40;;;;5156:73;5152:147;;;5280:4;5249:14;:28;5264:9;5274:1;5264:12;;;;;;;;:::i;:::-;;;;;;;;5249:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;5152:147;5133:3;;;;;:::i;:::-;;;;5094:215;;;;5020:295:::0;:::o;3109:139::-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3190:4:1::1;3176:11;;:18;;;;;;;;;;;;;;;;;;3217:24;3234:6;3217:12;:16;;:24;;;;:::i;:::-;3204:10;:37;;;;3109:139:::0;:::o;2135:98:2:-;2189:13;2221:5;2214:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2135:98;:::o;4412:197::-;4495:4;4511:13;4527:12;:10;:12::i;:::-;4511:28;;4549:32;4558:5;4565:7;4574:6;4549:8;:32::i;:::-;4598:4;4591:11;;;4412:197;;;;:::o;743:31:1:-;;;;;;;;;;;;;:::o;940:55::-;;;;:::o;3223:106:2:-;3284:7;3310:12;;3303:19;;3223:106;:::o;5171:286::-;5298:4;5314:15;5332:12;:10;:12::i;:::-;5314:30;;5354:38;5370:4;5376:7;5385:6;5354:15;:38::i;:::-;5402:27;5412:4;5418:2;5422:6;5402:9;:27::i;:::-;5446:4;5439:11;;;5171:286;;;;;:::o;4014:112:1:-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4110:9:1::1;4092:15;;:27;;;;;;;;;;;;;;;;;;4014:112:::0;:::o;3072:91:2:-;3130:5;3154:2;3147:9;;3072:91;:::o;5852:236::-;5940:4;5956:13;5972:12;:10;:12::i;:::-;5956:28;;5994:66;6003:5;6010:7;6049:10;6019:11;:18;6031:5;6019:18;;;;;;;;;;;;;;;:27;6038:7;6019:27;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;5994:8;:66::i;:::-;6077:4;6070:11;;;5852:236;;;;:::o;11108:115:1:-;11168:15;;;;;;;;;;;11160:33;;:56;11194:21;11160:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11108:115::o;704:33::-;;;;;;;;;;;;;:::o;4779:123::-;4844:4;4867:19;:28;4887:7;4867:28;;;;;;;;;;;;;;;;;;;;;;;;;4860:35;;4779:123;;;:::o;3713:217::-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3846:1:1::1;3813:29;3829:12;3813:11;:15;;:29;;;;:::i;:::-;:34;;3805:43;;;::::0;::::1;;3874:11;3859:12;:26;;;;3911:12;3895:13;:28;;;;3713:217:::0;;:::o;3387:125:2:-;3461:7;3487:9;:18;3497:7;3487:18;;;;;;;;;;;;;;;;3480:25;;3387:125;;;:::o;1661:101:9:-;1252:12;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1725:30:::1;1752:1;1725:18;:30::i;:::-;1661:101::o:0;3325:118:1:-;3377:4;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3410:5:1::1;3393:14;;:22;;;;;;;;;;;;;;;;;;3432:4;3425:11;;3325:118:::0;:::o;5380:191::-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5465:6:1::1;5460:105;5481:9;:16;5477:1;:20;5460:105;;;5549:5;5518:14;:28;5533:9;5543:1;5533:12;;;;;;;;:::i;:::-;;;;;;;;5518:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;5499:3;;;;;:::i;:::-;;;;5460:105;;;;5380:191:::0;:::o;4293:397::-;4378:4;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4437:6:1::1;4433:1;4417:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;4401:12;:42;;4393:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;4557:4;4553:1;4537:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;4521:12;:40;;4513:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;4652:12;4630:19;:34;;;;4680:4;4673:11;;4293:397:::0;;;:::o;1029:85:9:-;1075:7;1101:6;;;;;;;;;;;1094:13;;1029:85;:::o;2346:102:2:-;2402:13;2434:7;2427:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2346:102;:::o;6575:429::-;6668:4;6684:13;6700:12;:10;:12::i;:::-;6684:28;;6722:24;6749:11;:18;6761:5;6749:18;;;;;;;;;;;;;;;:27;6768:7;6749:27;;;;;;;;;;;;;;;;6722:54;;6814:15;6794:16;:35;;6786:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;6905:60;6914:5;6921:7;6949:15;6930:16;:34;6905:8;:60::i;:::-;6993:4;6986:11;;;;6575:429;;;;:::o;3708:189::-;3787:4;3803:13;3819:12;:10;:12::i;:::-;3803:28;;3841;3851:5;3858:2;3862:6;3841:9;:28::i;:::-;3886:4;3879:11;;;3708:189;;;;:::o;3504:130:1:-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3619:8:1::1;3588:19;:28;3608:7;3588:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;3504:130:::0;;:::o;549:35::-;;;;:::o;655:34::-;;;;:::o;5642:106::-;5698:4;5721:14;:20;5736:4;5721:20;;;;;;;;;;;;;;;;;;;;;;;;;5714:27;;5642:106;;;:::o;3955:149:2:-;4044:7;4070:11;:18;4082:5;4070:18;;;;;;;;;;;;;;;:27;4089:7;4070:27;;;;;;;;;;;;;;;;4063:34;;3955:149;;;;:::o;621:28:1:-;;;;:::o;1911:198:9:-;1252:12;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2019:1:::1;1999:22;;:8;:22;;;;1991:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2074:28;2093:8;2074:18;:28::i;:::-;1911:198:::0;:::o;590:24:1:-;;;;:::o;640:96:0:-;693:7;719:10;712:17;;640:96;:::o;2741::10:-;2799:7;2829:1;2825;:5;;;;:::i;:::-;2818:12;;2741:96;;;;:::o;10102:370:2:-;10250:1;10233:19;;:5;:19;;;;10225:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10330:1;10311:21;;:7;:21;;;;10303:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10412:6;10382:11;:18;10394:5;10382:18;;;;;;;;;;;;;;;:27;10401:7;10382:27;;;;;;;;;;;;;;;:36;;;;10449:7;10433:32;;10442:5;10433:32;;;10458:6;10433:32;;;;;;:::i;:::-;;;;;;;;10102:370;;;:::o;10749:441::-;10879:24;10906:25;10916:5;10923:7;10906:9;:25::i;:::-;10879:52;;10965:17;10945:16;:37;10941:243;;11026:6;11006:16;:26;;10998:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11108:51;11117:5;11124:7;11152:6;11133:16;:25;11108:8;:51::i;:::-;10941:243;10869:321;10749:441;;;:::o;5754:3250:1:-;5897:1;5881:18;;:4;:18;;;;5873:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5973:1;5959:16;;:2;:16;;;;5951:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;6034:14;:20;6049:4;6034:20;;;;;;;;;;;;;;;;;;;;;;;;;6033:21;6025:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;6154:1;6144:6;:11;6140:90;;;6171:28;6187:4;6193:2;6197:1;6171:15;:28::i;:::-;6213:7;;6140:90;6283:7;:5;:7::i;:::-;6277:13;;:2;:13;;;;:47;;;;;6308:15;;;;;;;;;;;6294:30;;:2;:30;;;;6277:47;:79;;;;;6342:13;;;;;;;;;;;6328:28;;:2;:28;;;;6277:79;6273:317;;;6421:12;6379:28;:39;6408:9;6379:39;;;;;;;;;;;;;;;;:54;6371:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;6567:12;6525:28;:39;6554:9;6525:39;;;;;;;;;;;;;;;:54;;;;6273:317;6645:14;;;;;;;;;;;6641:1310;;;6704:7;:5;:7::i;:::-;6696:15;;:4;:15;;;;:48;;;;;6737:7;:5;:7::i;:::-;6731:13;;:2;:13;;;;6696:48;:84;;;;;6778:1;6764:16;;:2;:16;;;;6696:84;:125;;;;;6814:6;6800:21;;:2;:21;;;;6696:125;:155;;;;;6842:9;;;;;;;;;;;6841:10;6696:155;6675:1266;;;6889:11;;;;;;;;;;;6884:117;;6910:19;:25;6930:4;6910:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;6939:19;:23;6959:2;6939:23;;;;;;;;;;;;;;;;;;;;;;;;;6910:52;6902:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;6884:117;7037:12;7023:10;;:26;7019:57;;7072:4;7051:14;:18;7066:2;7051:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;7019:57;7125:26;:32;7152:4;7125:32;;;;;;;;;;;;;;;;;;;;;;;;;:72;;;;;7162:31;:35;7194:2;7162:35;;;;;;;;;;;;;;;;;;;;;;;;;7161:36;7125:72;7121:806;;;7239:20;;7229:6;:30;;7221:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;7385:9;;7368:13;7378:2;7368:9;:13::i;:::-;7359:6;:22;;;;:::i;:::-;:35;;7351:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;7121:806;;;7519:26;:30;7546:2;7519:30;;;;;;;;;;;;;;;;;;;;;;;;;:72;;;;;7554:31;:37;7586:4;7554:37;;;;;;;;;;;;;;;;;;;;;;;;;7553:38;7519:72;7515:412;;;7633:20;;7623:6;:30;;7615:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;7515:412;;;7770:31;:35;7802:2;7770:35;;;;;;;;;;;;;;;;;;;;;;;;;7765:162;;7863:9;;7846:13;7856:2;7846:9;:13::i;:::-;7837:6;:22;;;;:::i;:::-;:35;;7829:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;7765:162;7515:412;7121:806;6675:1266;6641:1310;8003:19;;7986:13;;:36;;:62;;;;;8039:9;;;;;;;;;;;8038:10;7986:62;:111;;;;;8065:26;:32;8092:4;8065:32;;;;;;;;;;;;;;;;;;;;;;;;;8064:33;7986:111;:153;;;;;8114:19;:25;8134:4;8114:25;;;;;;;;;;;;;;;;;;;;;;;;;8113:26;7986:153;:193;;;;;8156:19;:23;8176:2;8156:23;;;;;;;;;;;;;;;;;;;;;;;;;8155:24;7986:193;7969:317;;;8216:4;8204:9;;:16;;;;;;;;;;;;;;;;;;8234:10;:8;:10::i;:::-;8270:5;8258:9;;:17;;;;;;;;;;;;;;;;;;7969:317;8296:12;8312:9;;;;;;;;;;;8311:10;8296:25;;8438:19;:25;8458:4;8438:25;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;8480:19;:23;8500:2;8480:23;;;;;;;;;;;;;;;;;;;;;;;;;8438:65;:152;;;;8522:26;:32;8549:4;8522:32;;;;;;;;;;;;;;;;;;;;;;;;;8521:33;:68;;;;;8559:26;:30;8586:2;8559:30;;;;;;;;;;;;;;;;;;;;;;;;;8558:31;8521:68;8438:152;8421:195;;;8611:5;8601:15;;8421:195;8635:12;8665:7;8661:293;;;8695:30;8721:3;8695:21;8706:9;;8695:6;:10;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;8688:37;;8786:9;;8770:13;;8763:4;:20;;;;:::i;:::-;:32;;;;:::i;:::-;8740:19;;:55;;;;;;;:::i;:::-;;;;;;;;8853:9;;8838:12;;8831:4;:19;;;;:::i;:::-;:31;;;;:::i;:::-;8809:18;;:53;;;;;;;:::i;:::-;;;;;;;;8939:4;8922:13;;:21;;;;;;;:::i;:::-;;;;;;;;8661:293;8964:33;8980:4;8986:2;8990:6;8964:15;:33::i;:::-;5863:3141;;5754:3250;;;;:::o;2263:187:9:-;2336:16;2355:6;;;;;;;;;;;2336:25;;2380:8;2371:6;;:17;;;;;;;;;;;;;;;;;;2434:8;2403:40;;2424:8;2403:40;;;;;;;;;;;;2326:124;2263:187;:::o;7467:651:2:-;7609:1;7593:18;;:4;:18;;;;7585:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7685:1;7671:16;;:2;:16;;;;7663:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;7738:38;7759:4;7765:2;7769:6;7738:20;:38::i;:::-;7787:19;7809:9;:15;7819:4;7809:15;;;;;;;;;;;;;;;;7787:37;;7857:6;7842:11;:21;;7834:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;7972:6;7958:11;:20;7940:9;:15;7950:4;7940:15;;;;;;;;;;;;;;;:38;;;;8015:6;7998:9;:13;8008:2;7998:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;8052:2;8037:26;;8046:4;8037:26;;;8056:6;8037:26;;;;;;:::i;:::-;;;;;;;;8074:37;8094:4;8100:2;8104:6;8074:19;:37::i;:::-;7575:543;7467:651;;;:::o;9844:1185:1:-;9882:22;9907:13;;9882:38;;9930:25;9980:18;;9958:19;;:40;;;;:::i;:::-;9930:68;;10031:1;10013:14;:19;10009:32;;;10034:7;;;;10009:32;10071:19;;10054:14;:36;10050:78;;;10109:19;;10092:36;;10050:78;10139:23;10224:1;10204:17;10182:19;;10165:14;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;10139:86;;10235:26;10264:35;10283:15;10264:14;:18;;:35;;;;:::i;:::-;10235:64;;10310:25;10338:21;10310:49;;10440:39;10460:18;10440:15;:19;;:39;;;;:::i;:::-;10423:13;;:56;;;;;;;:::i;:::-;;;;;;;;10490:37;10508:18;10490:17;:37::i;:::-;10546:18;10567:44;10593:17;10567:21;:25;;:44;;;;:::i;:::-;10546:65;;10621:22;10646:57;10685:17;10646:34;10661:18;;10646:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;10621:82;;10713:23;10752:14;10739:10;:27;;;;:::i;:::-;10713:53;;10798:1;10777:18;:22;;;;10831:1;10809:19;:23;;;;10851:15;;;;;;;;;;;10843:33;;:49;10877:14;10843:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10925:1;10907:15;:19;:42;;;;;10948:1;10930:15;:19;10907:42;10903:120;;;10965:47;10979:15;10996;10965:13;:47::i;:::-;10903:120;9872:1157;;;;;;;;9844:1185;:::o;3451:96:10:-;3509:7;3539:1;3535;:5;;;;:::i;:::-;3528:12;;3451:96;;;;:::o;3836:::-;3894:7;3924:1;3920;:5;;;;:::i;:::-;3913:12;;3836:96;;;;:::o;11774:121:2:-;;;;:::o;12483:120::-;;;;:::o;3108:96:10:-;3166:7;3196:1;3192;:5;;;;:::i;:::-;3185:12;;3108:96;;;;:::o;9010:462:1:-;9076:21;9114:1;9100:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9076:40;;9144:4;9126;9131:1;9126:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;9169:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9159:4;9164:1;9159:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;9202:62;9219:4;9234:15;;;;;;;;;;;9252:11;9202:8;:62::i;:::-;9275:15;;;;;;;;;;;:66;;;9355:11;9380:1;9395:4;9421;9440:15;9275:190;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9066:406;9010:462;:::o;9478:360::-;9559:62;9576:4;9591:15;;;;;;;;;;;9609:11;9559:8;:62::i;:::-;9632:15;;;;;;;;;;;:31;;;9671:9;9703:4;9722:11;9747:1;9762;9777:15;;;;;;;;;;;9806;9632:199;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;9478:360;;:::o;24:722:11:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:139::-;798:5;836:6;823:20;814:29;;852:33;879:5;852:33;:::i;:::-;752:139;;;;:::o;897:143::-;954:5;985:6;979:13;970:22;;1001:33;1028:5;1001:33;:::i;:::-;897:143;;;;:::o;1063:370::-;1134:5;1183:3;1176:4;1168:6;1164:17;1160:27;1150:122;;1191:79;;:::i;:::-;1150:122;1308:6;1295:20;1333:94;1423:3;1415:6;1408:4;1400:6;1396:17;1333:94;:::i;:::-;1324:103;;1140:293;1063:370;;;;:::o;1439:133::-;1482:5;1520:6;1507:20;1498:29;;1536:30;1560:5;1536:30;:::i;:::-;1439:133;;;;:::o;1578:139::-;1624:5;1662:6;1649:20;1640:29;;1678:33;1705:5;1678:33;:::i;:::-;1578:139;;;;:::o;1723:143::-;1780:5;1811:6;1805:13;1796:22;;1827:33;1854:5;1827:33;:::i;:::-;1723:143;;;;:::o;1872:329::-;1931:6;1980:2;1968:9;1959:7;1955:23;1951:32;1948:119;;;1986:79;;:::i;:::-;1948:119;2106:1;2131:53;2176:7;2167:6;2156:9;2152:22;2131:53;:::i;:::-;2121:63;;2077:117;1872:329;;;;:::o;2207:351::-;2277:6;2326:2;2314:9;2305:7;2301:23;2297:32;2294:119;;;2332:79;;:::i;:::-;2294:119;2452:1;2477:64;2533:7;2524:6;2513:9;2509:22;2477:64;:::i;:::-;2467:74;;2423:128;2207:351;;;;:::o;2564:474::-;2632:6;2640;2689:2;2677:9;2668:7;2664:23;2660:32;2657:119;;;2695:79;;:::i;:::-;2657:119;2815:1;2840:53;2885:7;2876:6;2865:9;2861:22;2840:53;:::i;:::-;2830:63;;2786:117;2942:2;2968:53;3013:7;3004:6;2993:9;2989:22;2968:53;:::i;:::-;2958:63;;2913:118;2564:474;;;;;:::o;3044:619::-;3121:6;3129;3137;3186:2;3174:9;3165:7;3161:23;3157:32;3154:119;;;3192:79;;:::i;:::-;3154:119;3312:1;3337:53;3382:7;3373:6;3362:9;3358:22;3337:53;:::i;:::-;3327:63;;3283:117;3439:2;3465:53;3510:7;3501:6;3490:9;3486:22;3465:53;:::i;:::-;3455:63;;3410:118;3567:2;3593:53;3638:7;3629:6;3618:9;3614:22;3593:53;:::i;:::-;3583:63;;3538:118;3044:619;;;;;:::o;3669:468::-;3734:6;3742;3791:2;3779:9;3770:7;3766:23;3762:32;3759:119;;;3797:79;;:::i;:::-;3759:119;3917:1;3942:53;3987:7;3978:6;3967:9;3963:22;3942:53;:::i;:::-;3932:63;;3888:117;4044:2;4070:50;4112:7;4103:6;4092:9;4088:22;4070:50;:::i;:::-;4060:60;;4015:115;3669:468;;;;;:::o;4143:474::-;4211:6;4219;4268:2;4256:9;4247:7;4243:23;4239:32;4236:119;;;4274:79;;:::i;:::-;4236:119;4394:1;4419:53;4464:7;4455:6;4444:9;4440:22;4419:53;:::i;:::-;4409:63;;4365:117;4521:2;4547:53;4592:7;4583:6;4572:9;4568:22;4547:53;:::i;:::-;4537:63;;4492:118;4143:474;;;;;:::o;4623:539::-;4707:6;4756:2;4744:9;4735:7;4731:23;4727:32;4724:119;;;4762:79;;:::i;:::-;4724:119;4910:1;4899:9;4895:17;4882:31;4940:18;4932:6;4929:30;4926:117;;;4962:79;;:::i;:::-;4926:117;5067:78;5137:7;5128:6;5117:9;5113:22;5067:78;:::i;:::-;5057:88;;4853:302;4623:539;;;;:::o;5168:329::-;5227:6;5276:2;5264:9;5255:7;5251:23;5247:32;5244:119;;;5282:79;;:::i;:::-;5244:119;5402:1;5427:53;5472:7;5463:6;5452:9;5448:22;5427:53;:::i;:::-;5417:63;;5373:117;5168:329;;;;:::o;5503:474::-;5571:6;5579;5628:2;5616:9;5607:7;5603:23;5599:32;5596:119;;;5634:79;;:::i;:::-;5596:119;5754:1;5779:53;5824:7;5815:6;5804:9;5800:22;5779:53;:::i;:::-;5769:63;;5725:117;5881:2;5907:53;5952:7;5943:6;5932:9;5928:22;5907:53;:::i;:::-;5897:63;;5852:118;5503:474;;;;;:::o;5983:663::-;6071:6;6079;6087;6136:2;6124:9;6115:7;6111:23;6107:32;6104:119;;;6142:79;;:::i;:::-;6104:119;6262:1;6287:64;6343:7;6334:6;6323:9;6319:22;6287:64;:::i;:::-;6277:74;;6233:128;6400:2;6426:64;6482:7;6473:6;6462:9;6458:22;6426:64;:::i;:::-;6416:74;;6371:129;6539:2;6565:64;6621:7;6612:6;6601:9;6597:22;6565:64;:::i;:::-;6555:74;;6510:129;5983:663;;;;;:::o;6652:179::-;6721:10;6742:46;6784:3;6776:6;6742:46;:::i;:::-;6820:4;6815:3;6811:14;6797:28;;6652:179;;;;:::o;6837:108::-;6914:24;6932:5;6914:24;:::i;:::-;6909:3;6902:37;6837:108;;:::o;6951:118::-;7038:24;7056:5;7038:24;:::i;:::-;7033:3;7026:37;6951:118;;:::o;7105:732::-;7224:3;7253:54;7301:5;7253:54;:::i;:::-;7323:86;7402:6;7397:3;7323:86;:::i;:::-;7316:93;;7433:56;7483:5;7433:56;:::i;:::-;7512:7;7543:1;7528:284;7553:6;7550:1;7547:13;7528:284;;;7629:6;7623:13;7656:63;7715:3;7700:13;7656:63;:::i;:::-;7649:70;;7742:60;7795:6;7742:60;:::i;:::-;7732:70;;7588:224;7575:1;7572;7568:9;7563:14;;7528:284;;;7532:14;7828:3;7821:10;;7229:608;;;7105:732;;;;:::o;7843:109::-;7924:21;7939:5;7924:21;:::i;:::-;7919:3;7912:34;7843:109;;:::o;7958:147::-;8053:45;8092:5;8053:45;:::i;:::-;8048:3;8041:58;7958:147;;:::o;8111:364::-;8199:3;8227:39;8260:5;8227:39;:::i;:::-;8282:71;8346:6;8341:3;8282:71;:::i;:::-;8275:78;;8362:52;8407:6;8402:3;8395:4;8388:5;8384:16;8362:52;:::i;:::-;8439:29;8461:6;8439:29;:::i;:::-;8434:3;8430:39;8423:46;;8203:272;8111:364;;;;:::o;8481:366::-;8623:3;8644:67;8708:2;8703:3;8644:67;:::i;:::-;8637:74;;8720:93;8809:3;8720:93;:::i;:::-;8838:2;8833:3;8829:12;8822:19;;8481:366;;;:::o;8853:::-;8995:3;9016:67;9080:2;9075:3;9016:67;:::i;:::-;9009:74;;9092:93;9181:3;9092:93;:::i;:::-;9210:2;9205:3;9201:12;9194:19;;8853:366;;;:::o;9225:::-;9367:3;9388:67;9452:2;9447:3;9388:67;:::i;:::-;9381:74;;9464:93;9553:3;9464:93;:::i;:::-;9582:2;9577:3;9573:12;9566:19;;9225:366;;;:::o;9597:::-;9739:3;9760:67;9824:2;9819:3;9760:67;:::i;:::-;9753:74;;9836:93;9925:3;9836:93;:::i;:::-;9954:2;9949:3;9945:12;9938:19;;9597:366;;;:::o;9969:::-;10111:3;10132:67;10196:2;10191:3;10132:67;:::i;:::-;10125:74;;10208:93;10297:3;10208:93;:::i;:::-;10326:2;10321:3;10317:12;10310:19;;9969:366;;;:::o;10341:::-;10483:3;10504:67;10568:2;10563:3;10504:67;:::i;:::-;10497:74;;10580:93;10669:3;10580:93;:::i;:::-;10698:2;10693:3;10689:12;10682:19;;10341:366;;;:::o;10713:::-;10855:3;10876:67;10940:2;10935:3;10876:67;:::i;:::-;10869:74;;10952:93;11041:3;10952:93;:::i;:::-;11070:2;11065:3;11061:12;11054:19;;10713:366;;;:::o;11085:::-;11227:3;11248:67;11312:2;11307:3;11248:67;:::i;:::-;11241:74;;11324:93;11413:3;11324:93;:::i;:::-;11442:2;11437:3;11433:12;11426:19;;11085:366;;;:::o;11457:::-;11599:3;11620:67;11684:2;11679:3;11620:67;:::i;:::-;11613:74;;11696:93;11785:3;11696:93;:::i;:::-;11814:2;11809:3;11805:12;11798:19;;11457:366;;;:::o;11829:::-;11971:3;11992:67;12056:2;12051:3;11992:67;:::i;:::-;11985:74;;12068:93;12157:3;12068:93;:::i;:::-;12186:2;12181:3;12177:12;12170:19;;11829:366;;;:::o;12201:::-;12343:3;12364:67;12428:2;12423:3;12364:67;:::i;:::-;12357:74;;12440:93;12529:3;12440:93;:::i;:::-;12558:2;12553:3;12549:12;12542:19;;12201:366;;;:::o;12573:::-;12715:3;12736:67;12800:2;12795:3;12736:67;:::i;:::-;12729:74;;12812:93;12901:3;12812:93;:::i;:::-;12930:2;12925:3;12921:12;12914:19;;12573:366;;;:::o;12945:::-;13087:3;13108:67;13172:2;13167:3;13108:67;:::i;:::-;13101:74;;13184:93;13273:3;13184:93;:::i;:::-;13302:2;13297:3;13293:12;13286:19;;12945:366;;;:::o;13317:::-;13459:3;13480:67;13544:2;13539:3;13480:67;:::i;:::-;13473:74;;13556:93;13645:3;13556:93;:::i;:::-;13674:2;13669:3;13665:12;13658:19;;13317:366;;;:::o;13689:::-;13831:3;13852:67;13916:2;13911:3;13852:67;:::i;:::-;13845:74;;13928:93;14017:3;13928:93;:::i;:::-;14046:2;14041:3;14037:12;14030:19;;13689:366;;;:::o;14061:::-;14203:3;14224:67;14288:2;14283:3;14224:67;:::i;:::-;14217:74;;14300:93;14389:3;14300:93;:::i;:::-;14418:2;14413:3;14409:12;14402:19;;14061:366;;;:::o;14433:::-;14575:3;14596:67;14660:2;14655:3;14596:67;:::i;:::-;14589:74;;14672:93;14761:3;14672:93;:::i;:::-;14790:2;14785:3;14781:12;14774:19;;14433:366;;;:::o;14805:118::-;14892:24;14910:5;14892:24;:::i;:::-;14887:3;14880:37;14805:118;;:::o;14929:112::-;15012:22;15028:5;15012:22;:::i;:::-;15007:3;15000:35;14929:112;;:::o;15047:222::-;15140:4;15178:2;15167:9;15163:18;15155:26;;15191:71;15259:1;15248:9;15244:17;15235:6;15191:71;:::i;:::-;15047:222;;;;:::o;15275:807::-;15524:4;15562:3;15551:9;15547:19;15539:27;;15576:71;15644:1;15633:9;15629:17;15620:6;15576:71;:::i;:::-;15657:72;15725:2;15714:9;15710:18;15701:6;15657:72;:::i;:::-;15739:80;15815:2;15804:9;15800:18;15791:6;15739:80;:::i;:::-;15829;15905:2;15894:9;15890:18;15881:6;15829:80;:::i;:::-;15919:73;15987:3;15976:9;15972:19;15963:6;15919:73;:::i;:::-;16002;16070:3;16059:9;16055:19;16046:6;16002:73;:::i;:::-;15275:807;;;;;;;;;:::o;16088:210::-;16175:4;16213:2;16202:9;16198:18;16190:26;;16226:65;16288:1;16277:9;16273:17;16264:6;16226:65;:::i;:::-;16088:210;;;;:::o;16304:313::-;16417:4;16455:2;16444:9;16440:18;16432:26;;16504:9;16498:4;16494:20;16490:1;16479:9;16475:17;16468:47;16532:78;16605:4;16596:6;16532:78;:::i;:::-;16524:86;;16304:313;;;;:::o;16623:419::-;16789:4;16827:2;16816:9;16812:18;16804:26;;16876:9;16870:4;16866:20;16862:1;16851:9;16847:17;16840:47;16904:131;17030:4;16904:131;:::i;:::-;16896:139;;16623:419;;;:::o;17048:::-;17214:4;17252:2;17241:9;17237:18;17229:26;;17301:9;17295:4;17291:20;17287:1;17276:9;17272:17;17265:47;17329:131;17455:4;17329:131;:::i;:::-;17321:139;;17048:419;;;:::o;17473:::-;17639:4;17677:2;17666:9;17662:18;17654:26;;17726:9;17720:4;17716:20;17712:1;17701:9;17697:17;17690:47;17754:131;17880:4;17754:131;:::i;:::-;17746:139;;17473:419;;;:::o;17898:::-;18064:4;18102:2;18091:9;18087:18;18079:26;;18151:9;18145:4;18141:20;18137:1;18126:9;18122:17;18115:47;18179:131;18305:4;18179:131;:::i;:::-;18171:139;;17898:419;;;:::o;18323:::-;18489:4;18527:2;18516:9;18512:18;18504:26;;18576:9;18570:4;18566:20;18562:1;18551:9;18547:17;18540:47;18604:131;18730:4;18604:131;:::i;:::-;18596:139;;18323:419;;;:::o;18748:::-;18914:4;18952:2;18941:9;18937:18;18929:26;;19001:9;18995:4;18991:20;18987:1;18976:9;18972:17;18965:47;19029:131;19155:4;19029:131;:::i;:::-;19021:139;;18748:419;;;:::o;19173:::-;19339:4;19377:2;19366:9;19362:18;19354:26;;19426:9;19420:4;19416:20;19412:1;19401:9;19397:17;19390:47;19454:131;19580:4;19454:131;:::i;:::-;19446:139;;19173:419;;;:::o;19598:::-;19764:4;19802:2;19791:9;19787:18;19779:26;;19851:9;19845:4;19841:20;19837:1;19826:9;19822:17;19815:47;19879:131;20005:4;19879:131;:::i;:::-;19871:139;;19598:419;;;:::o;20023:::-;20189:4;20227:2;20216:9;20212:18;20204:26;;20276:9;20270:4;20266:20;20262:1;20251:9;20247:17;20240:47;20304:131;20430:4;20304:131;:::i;:::-;20296:139;;20023:419;;;:::o;20448:::-;20614:4;20652:2;20641:9;20637:18;20629:26;;20701:9;20695:4;20691:20;20687:1;20676:9;20672:17;20665:47;20729:131;20855:4;20729:131;:::i;:::-;20721:139;;20448:419;;;:::o;20873:::-;21039:4;21077:2;21066:9;21062:18;21054:26;;21126:9;21120:4;21116:20;21112:1;21101:9;21097:17;21090:47;21154:131;21280:4;21154:131;:::i;:::-;21146:139;;20873:419;;;:::o;21298:::-;21464:4;21502:2;21491:9;21487:18;21479:26;;21551:9;21545:4;21541:20;21537:1;21526:9;21522:17;21515:47;21579:131;21705:4;21579:131;:::i;:::-;21571:139;;21298:419;;;:::o;21723:::-;21889:4;21927:2;21916:9;21912:18;21904:26;;21976:9;21970:4;21966:20;21962:1;21951:9;21947:17;21940:47;22004:131;22130:4;22004:131;:::i;:::-;21996:139;;21723:419;;;:::o;22148:::-;22314:4;22352:2;22341:9;22337:18;22329:26;;22401:9;22395:4;22391:20;22387:1;22376:9;22372:17;22365:47;22429:131;22555:4;22429:131;:::i;:::-;22421:139;;22148:419;;;:::o;22573:::-;22739:4;22777:2;22766:9;22762:18;22754:26;;22826:9;22820:4;22816:20;22812:1;22801:9;22797:17;22790:47;22854:131;22980:4;22854:131;:::i;:::-;22846:139;;22573:419;;;:::o;22998:::-;23164:4;23202:2;23191:9;23187:18;23179:26;;23251:9;23245:4;23241:20;23237:1;23226:9;23222:17;23215:47;23279:131;23405:4;23279:131;:::i;:::-;23271:139;;22998:419;;;:::o;23423:::-;23589:4;23627:2;23616:9;23612:18;23604:26;;23676:9;23670:4;23666:20;23662:1;23651:9;23647:17;23640:47;23704:131;23830:4;23704:131;:::i;:::-;23696:139;;23423:419;;;:::o;23848:222::-;23941:4;23979:2;23968:9;23964:18;23956:26;;23992:71;24060:1;24049:9;24045:17;24036:6;23992:71;:::i;:::-;23848:222;;;;:::o;24076:831::-;24339:4;24377:3;24366:9;24362:19;24354:27;;24391:71;24459:1;24448:9;24444:17;24435:6;24391:71;:::i;:::-;24472:80;24548:2;24537:9;24533:18;24524:6;24472:80;:::i;:::-;24599:9;24593:4;24589:20;24584:2;24573:9;24569:18;24562:48;24627:108;24730:4;24721:6;24627:108;:::i;:::-;24619:116;;24745:72;24813:2;24802:9;24798:18;24789:6;24745:72;:::i;:::-;24827:73;24895:3;24884:9;24880:19;24871:6;24827:73;:::i;:::-;24076:831;;;;;;;;:::o;24913:214::-;25002:4;25040:2;25029:9;25025:18;25017:26;;25053:67;25117:1;25106:9;25102:17;25093:6;25053:67;:::i;:::-;24913:214;;;;:::o;25133:129::-;25167:6;25194:20;;:::i;:::-;25184:30;;25223:33;25251:4;25243:6;25223:33;:::i;:::-;25133:129;;;:::o;25268:75::-;25301:6;25334:2;25328:9;25318:19;;25268:75;:::o;25349:311::-;25426:4;25516:18;25508:6;25505:30;25502:56;;;25538:18;;:::i;:::-;25502:56;25588:4;25580:6;25576:17;25568:25;;25648:4;25642;25638:15;25630:23;;25349:311;;;:::o;25666:132::-;25733:4;25756:3;25748:11;;25786:4;25781:3;25777:14;25769:22;;25666:132;;;:::o;25804:114::-;25871:6;25905:5;25899:12;25889:22;;25804:114;;;:::o;25924:99::-;25976:6;26010:5;26004:12;25994:22;;25924:99;;;:::o;26029:113::-;26099:4;26131;26126:3;26122:14;26114:22;;26029:113;;;:::o;26148:184::-;26247:11;26281:6;26276:3;26269:19;26321:4;26316:3;26312:14;26297:29;;26148:184;;;;:::o;26338:169::-;26422:11;26456:6;26451:3;26444:19;26496:4;26491:3;26487:14;26472:29;;26338:169;;;;:::o;26513:305::-;26553:3;26572:20;26590:1;26572:20;:::i;:::-;26567:25;;26606:20;26624:1;26606:20;:::i;:::-;26601:25;;26760:1;26692:66;26688:74;26685:1;26682:81;26679:107;;;26766:18;;:::i;:::-;26679:107;26810:1;26807;26803:9;26796:16;;26513:305;;;;:::o;26824:185::-;26864:1;26881:20;26899:1;26881:20;:::i;:::-;26876:25;;26915:20;26933:1;26915:20;:::i;:::-;26910:25;;26954:1;26944:35;;26959:18;;:::i;:::-;26944:35;27001:1;26998;26994:9;26989:14;;26824:185;;;;:::o;27015:348::-;27055:7;27078:20;27096:1;27078:20;:::i;:::-;27073:25;;27112:20;27130:1;27112:20;:::i;:::-;27107:25;;27300:1;27232:66;27228:74;27225:1;27222:81;27217:1;27210:9;27203:17;27199:105;27196:131;;;27307:18;;:::i;:::-;27196:131;27355:1;27352;27348:9;27337:20;;27015:348;;;;:::o;27369:191::-;27409:4;27429:20;27447:1;27429:20;:::i;:::-;27424:25;;27463:20;27481:1;27463:20;:::i;:::-;27458:25;;27502:1;27499;27496:8;27493:34;;;27507:18;;:::i;:::-;27493:34;27552:1;27549;27545:9;27537:17;;27369:191;;;;:::o;27566:96::-;27603:7;27632:24;27650:5;27632:24;:::i;:::-;27621:35;;27566:96;;;:::o;27668:90::-;27702:7;27745:5;27738:13;27731:21;27720:32;;27668:90;;;:::o;27764:126::-;27801:7;27841:42;27834:5;27830:54;27819:65;;27764:126;;;:::o;27896:77::-;27933:7;27962:5;27951:16;;27896:77;;;:::o;27979:86::-;28014:7;28054:4;28047:5;28043:16;28032:27;;27979:86;;;:::o;28071:121::-;28129:9;28162:24;28180:5;28162:24;:::i;:::-;28149:37;;28071:121;;;:::o;28198:307::-;28266:1;28276:113;28290:6;28287:1;28284:13;28276:113;;;28375:1;28370:3;28366:11;28360:18;28356:1;28351:3;28347:11;28340:39;28312:2;28309:1;28305:10;28300:15;;28276:113;;;28407:6;28404:1;28401:13;28398:101;;;28487:1;28478:6;28473:3;28469:16;28462:27;28398:101;28247:258;28198:307;;;:::o;28511:320::-;28555:6;28592:1;28586:4;28582:12;28572:22;;28639:1;28633:4;28629:12;28660:18;28650:81;;28716:4;28708:6;28704:17;28694:27;;28650:81;28778:2;28770:6;28767:14;28747:18;28744:38;28741:84;;;28797:18;;:::i;:::-;28741:84;28562:269;28511:320;;;:::o;28837:281::-;28920:27;28942:4;28920:27;:::i;:::-;28912:6;28908:40;29050:6;29038:10;29035:22;29014:18;29002:10;28999:34;28996:62;28993:88;;;29061:18;;:::i;:::-;28993:88;29101:10;29097:2;29090:22;28880:238;28837:281;;:::o;29124:233::-;29163:3;29186:24;29204:5;29186:24;:::i;:::-;29177:33;;29232:66;29225:5;29222:77;29219:103;;;29302:18;;:::i;:::-;29219:103;29349:1;29342:5;29338:13;29331:20;;29124:233;;;:::o;29363:180::-;29411:77;29408:1;29401:88;29508:4;29505:1;29498:15;29532:4;29529:1;29522:15;29549:180;29597:77;29594:1;29587:88;29694:4;29691:1;29684:15;29718:4;29715:1;29708:15;29735:180;29783:77;29780:1;29773:88;29880:4;29877:1;29870:15;29904:4;29901:1;29894:15;29921:180;29969:77;29966:1;29959:88;30066:4;30063:1;30056:15;30090:4;30087:1;30080:15;30107:180;30155:77;30152:1;30145:88;30252:4;30249:1;30242:15;30276:4;30273:1;30266:15;30293:117;30402:1;30399;30392:12;30416:117;30525:1;30522;30515:12;30539:117;30648:1;30645;30638:12;30662:117;30771:1;30768;30761:12;30785:102;30826:6;30877:2;30873:7;30868:2;30861:5;30857:14;30853:28;30843:38;;30785:102;;;:::o;30893:222::-;31033:34;31029:1;31021:6;31017:14;31010:58;31102:5;31097:2;31089:6;31085:15;31078:30;30893:222;:::o;31121:225::-;31261:34;31257:1;31249:6;31245:14;31238:58;31330:8;31325:2;31317:6;31313:15;31306:33;31121:225;:::o;31352:221::-;31492:34;31488:1;31480:6;31476:14;31469:58;31561:4;31556:2;31548:6;31544:15;31537:29;31352:221;:::o;31579:179::-;31719:31;31715:1;31707:6;31703:14;31696:55;31579:179;:::o;31764:225::-;31904:34;31900:1;31892:6;31888:14;31881:58;31973:8;31968:2;31960:6;31956:15;31949:33;31764:225;:::o;31995:242::-;32135:34;32131:1;32123:6;32119:14;32112:58;32204:25;32199:2;32191:6;32187:15;32180:50;31995:242;:::o;32243:243::-;32383:34;32379:1;32371:6;32367:14;32360:58;32452:26;32447:2;32439:6;32435:15;32428:51;32243:243;:::o;32492:297::-;32632:34;32628:1;32620:6;32616:14;32609:58;32701:34;32696:2;32688:6;32684:15;32677:59;32770:11;32765:2;32757:6;32753:15;32746:36;32492:297;:::o;32795:221::-;32935:34;32931:1;32923:6;32919:14;32912:58;33004:4;32999:2;32991:6;32987:15;32980:29;32795:221;:::o;33022:182::-;33162:34;33158:1;33150:6;33146:14;33139:58;33022:182;:::o;33210:290::-;33350:34;33346:1;33338:6;33334:14;33327:58;33419:34;33414:2;33406:6;33402:15;33395:59;33488:4;33483:2;33475:6;33471:15;33464:29;33210:290;:::o;33506:224::-;33646:34;33642:1;33634:6;33630:14;33623:58;33715:7;33710:2;33702:6;33698:15;33691:32;33506:224;:::o;33736:249::-;33876:34;33872:1;33864:6;33860:14;33853:58;33945:32;33940:2;33932:6;33928:15;33921:57;33736:249;:::o;33991:223::-;34131:34;34127:1;34119:6;34115:14;34108:58;34200:6;34195:2;34187:6;34183:15;34176:31;33991:223;:::o;34220:289::-;34360:34;34356:1;34348:6;34344:14;34337:58;34429:34;34424:2;34416:6;34412:15;34405:59;34498:3;34493:2;34485:6;34481:15;34474:28;34220:289;:::o;34515:181::-;34655:33;34651:1;34643:6;34639:14;34632:57;34515:181;:::o;34702:224::-;34842:34;34838:1;34830:6;34826:14;34819:58;34911:7;34906:2;34898:6;34894:15;34887:32;34702:224;:::o;34932:122::-;35005:24;35023:5;35005:24;:::i;:::-;34998:5;34995:35;34985:63;;35044:1;35041;35034:12;34985:63;34932:122;:::o;35060:116::-;35130:21;35145:5;35130:21;:::i;:::-;35123:5;35120:32;35110:60;;35166:1;35163;35156:12;35110:60;35060:116;:::o;35182:122::-;35255:24;35273:5;35255:24;:::i;:::-;35248:5;35245:35;35235:63;;35294:1;35291;35284:12;35235:63;35182:122;:::o

Swarm Source

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